(function($) { 
    $.fn.dropdown = function(options) {
        return this.each(function() {
            new $.dropdown(this, options);
        });
    };

    $.fn.dropdown.defaults = {
        data: null,
		characterLimit: 30,
        changeCallBack: null,
		nextButton: ".next_btn"
    };

    $.dropdown = function(element, options) {
        var base = this;

        base.element = element;
        base.$element = $(element);

        // Add a reverse reference to the DOM object
        base.$element.data("dropdown", this);

        // Init function
        base.init = function() {
		 
            base.options = $.extend({}, $.fn.dropdown.defaults, options);

			// Init Variables
			base.data = base.options.data;
			base.count = base.data.length;

			// Bing First Level
			base.populate($(base.element).find(base.data[0].element + " .scroll-content"), base.data[0].source);
			$(base.element).find(base.data[0].element + " > a").addClass("current");

			if (base.count == 1)
				base.toggle($(base.element).children("li").children("a"));

			// Bind Dropdown Toggle Event
			$(base.element).children("li").find("a:first").click(base.toggle);
			
			// Bind Dropdown Item Select Event
			$(base.element).find(".scroll-content li").live("click", base.select);
        };

        // Toggle Dropdown
		var counterClick=0;
        base.toggle = function(sender) {
		counterClick = counterClick + 1;
			if ((($(sender).parent().length > 0) && $(sender).hasClass("current")) || $(this).hasClass("current")) {
				var parent = ($(sender).parent().length > 0) ? $(sender).parent() : $(this).parent();
				
				if (!$(parent).find(".drop-down").is(":visible")) {
					$(parent).parent().find(".drop-down:visible").hide();
						$(parent).find(".drop-down").toggle().show();						  
				}
				else if (base.count > 1)
				{
					
						$(parent).find(".drop-down").toggle().hide();
					
				}
				if(counterClick %2 == 1)
				{
					$(parent).find(".drop-down").toggle().show();
				}
				else if(counterClick %2 == 0)
				{
					$(parent).find(".drop-down").toggle().hide();
				}
			}
        };

		// Populate Dropdown
		base.populate = function(target, data) {
		
			var index = 0;
			var item = $('<li class="scroll-content-item"><span class="text"></span><span class="mark"></span></li>');
				
			if (data != null) {
				$(target).find("li").remove();
				
				if (typeof data === "string") {
					var xmlDoc = $.parseXML(data);
					var $xml = $( xmlDoc );
					
					var $documentElement = $xml.children(":first-child");
					
					$documentElement.children().each(function() {
						var prefix = $(this)[0].nodeName;
						var name = $(this).attr(prefix + "_name");
						var value = $(this).attr(prefix + "_value");

						if (value != "-1") {
							var li = $(item).clone();
							
							if (index % 2 == 1)
								li.addClass("even");
								
							li.find(".text").text(value);
							
							li.appendTo($(target));
							
							index++;
						}
					});
				}
				else 
					$.each(data, function(key, value) {
						var li = $(item).clone();
						
						if (index % 2 == 1)
							li.addClass("even");
							
						if (key == index)
							li.find(".text").text(value);
						else
							li.find(".text").text(key);
						
						li.appendTo($(target));
						
						index++;
					});
			}
		
			if ($(target).find("li").length <= 5)
				$(target).next().hide();
			else
				$(target).next().show();
				
			return $(target).find("li").length;
		}

		// Dropdown Item Select
		base.select = function() {
			$(base.element).parent().find(base.options.nextButton).removeClass("current");
			$(this).parents("ul:first").find(".selected").removeClass("selected");
			$(this).addClass("selected");
			
			var text = $(this).text();
			
			if (text.length > base.options.characterLimit)
				if (text.indexOf(" ", base.options.characterLimit - 5) < base.options.characterLimit)
					text = text.substring(0, text.lastIndexOf(" ", base.options.characterLimit)) + "&hellip;";
				else
					text = text.substring(0, base.options.characterLimit) + "&hellip;";
						
			$(this).parents(".drop-down").parent().find("a:first").attr("title", $(this).text()).addClass("selected").find(".text").html(text);
			
			if (base.count > 1)
				$(this).parents(".drop-down").hide();
			if($(this).parents("li").attr("class"))
			var element = $(this).parents("li").attr("class").match(/option[-]\d+/);
			
			index = -1;
			
			for (var i = 0; i < base.data.length; i++)
				if(base.data[i].element)
				if (element.toString() == base.data[i].element.replace(".", ""))
					index = i;
			
			if (index != -1)
			{
				
				$("input[type='hidden'][name='" + base.data[index].text + "']").val($(this).text());
				if(!(callForIndex == $(this).text() && callForDropdown == base.data[index].text)){
					//For YMMO
					if(base.data[index].text == 'Select Year')
						populateDropDowns('year');
					if(base.data[index].text == 'Select Make')
						populateDropDowns('make');
					if(base.data[index].text == 'Select Model')
						populateDropDowns('model');
					if(base.data[index].text == 'Select Option')
						populateDropDowns('options');
					
					//For Size
					if(base.data[index].text == 'Select Type')
						populateDropDowns('size');
					if(base.data[index].text == 'Select Width')
						populateDropDowns('width');
					if(base.data[index].text == 'Select Aspect Ratio')
						populateDropDowns('aspectratio');
					callForDropdown = base.data[index].text;
					callForIndex = $(this).text();
				}
				
			}
			
			// Reset Dropdown after current
			for (var i = index + 1; i < base.data.length; i++) {
				$(base.element).find(base.data[i].element + " > a").removeClass("current").removeClass("selected").find(".text").text(base.data[i].text);
				$(base.element).find(base.data[i].element + " > a").attr("title", base.data[i].text);
				$("input[type='hidden'][name='" + base.data[i].text + "']").val();
				
			}
			if (index < base.data.length - 1) {
				// Populate Next Dropdown
				
				var source = base.data[index + 1].source;
				
				if (source == null)
					source = getItem(base.data[index].source, $(base.element).find(base.data[index].element + " > a").find(".text").text());
				
				var target = $(base.element).find(base.data[index + 1].element + " .scroll-content");
				
				var count = base.populate(target, source);
	
				$(base.element).find(base.data[index + 1].element + " > a").addClass("current");
				
				//if (!$(base.element).find(base.data[index + 1].element).is(":visible"))
					//!$(base.element).find(base.data[index + 1].element).show();
					
				if (count == 1)
					$(target).find("li:first").trigger("click");
			}
			else {
				$(base.element).parent().find(base.options.nextButton).addClass("current");
				if($(base.element).parent().find(base.options.nextButton).attr('class') == 'sprite2 current')
					{
						$("#vehicleSubmit").attr('onclick', "checkForWinter('vehicle');riseMediaTrackingJS(mediaSrcID, mediaTypeID, mediaCatID, isOnTMPage);riseFunnelAnalyticsFunc('Team Michelin - Landing Page', '5');");
						
						$("#find_tire_link").attr('onclick', "submitCTSPage('guided','no');riseMediaTrackingJS(mediaSrcID, mediaTypeID, mediaCatID, isOnTMPage);riseFunnelAnalyticsFunc('Team Michelin - Landing Page', '5');");
						$("#find_tire_link").removeAttr('href');
					}
				if($(base.element).parent().find(base.options.nextButton).attr('id') == 'sizeSubmit')
					{
						$("#sizeSubmit").attr('onclick', "checkForWinter('size');riseMediaTrackingJS(mediaSrcID, mediaTypeID, mediaCatID, isOnTMPage);riseFunnelAnalyticsFunc('Team Michelin - Landing Page', '5');");
						
					}
					
				if($(base.element).parent().find(base.options.nextButton).attr('id') == 'categorySubmit')
					$(base.element).parent().find(base.options.nextButton).attr('onclick', 'submitCTSPage("category","no");riseMediaTrackingJS(mediaSrcID, mediaTypeID, mediaCatID, isOnTMPage);riseFunnelAnalyticsFunc("Team Michelin - Landing Page", "5");');
				if($(base.element).parent().find(base.options.nextButton).attr('id') == 'nameSubmit')
					$(base.element).parent().find(base.options.nextButton).attr('onclick', 'submitCTSPage("name","no");riseMediaTrackingJS(mediaSrcID, mediaTypeID, mediaCatID, isOnTMPage);riseFunnelAnalyticsFunc("Team Michelin - Landing Page", "5");');
			}

           
			
				
			if (base.options.changeCallBack != null)
				base.options.changeCallBack(this);
				
			counterClick = 0;
		}

		
			
        // Trigger the initialization
        base.init();
    };     
	       
		   
			$('#sizeSubmit').live('click', function() {
				checkForWinter("size");
				// Live handler called.
			});
			$('#vehicleSubmit').live('click', function() {
				checkForWinter('vehicle');
				riseMediaTrackingJS(mediaSrcID, mediaTypeID, mediaCatID, isOnTMPage);
				riseFunnelAnalyticsFunc('Team Michelin - Landing Page', '5');
			  // Live handler called.
			});
			$('#find_tire_link').live('click', function() {
				submitCTSPage('guided','no');
				riseMediaTrackingJS(mediaSrcID, mediaTypeID, mediaCatID, isOnTMPage);
				riseFunnelAnalyticsFunc('Team Michelin - Landing Page', '5');
			  // Live handler called.
			});		
			$('#categorySubmit').live('click', function() {
				submitCTSPage("category","no");
				riseMediaTrackingJS(mediaSrcID, mediaTypeID, mediaCatID, isOnTMPage);
				riseFunnelAnalyticsFunc('Team Michelin - Landing Page', '5');
			  // Live handler called.
			});
			$('#nameSubmit').live('click', function() {
				submitCTSPage("name","no");
				riseMediaTrackingJS(mediaSrcID, mediaTypeID, mediaCatID, isOnTMPage);
				riseFunnelAnalyticsFunc('Team Michelin - Landing Page', '5');
			  // Live handler called.
			});
		 	
			
})(jQuery);

function getItem(source, name, index) {
	var ind = 0;
	var result;
	
	$.each(source, function(key, value) {
		if ((key == name) || (ind == name))
			if (index != null)
				result = value[index];
			else 
				result = value;
		
		ind++;
	});
	
	return result;
}
