String.prototype.replaceAll = function(pcFrom, pcTo){
	var i = this.indexOf(pcFrom);
	var c = this;
	
	while (i > -1){
		c = c.replace(pcFrom, pcTo); 
		i = c.indexOf(pcFrom);
	}
	return c;
}

function singleWordProduct(str) {
	str = str.replaceAll('/', '-');
	str = str.replaceAll(' ', '_');
	str = str.replaceAll("•", '-');
	str = str.replaceAll("·", '-');
	str = str.replaceAll('"', '-');
	str = str.replaceAll('?', '-');
	str = str.replaceAll(",", '-');
	//str = str.replaceAll(".", '-');
	str = str.replaceAll("'", '-');
	
	return str;
}

function restripeGrid() {
	$(".compareRow").removeClass('compareRowA').removeClass('compareRowB');
	$(".compareRow:visible").each(function(i) {
		if (i%2 == 0) // even
			$(this).addClass('compareRowA');
		else // odd
			$(this).addClass('compareRowB');
	});
}

$(function(){
	$(".compareOff").hide(function() {restripeGrid();});
	restripeGrid();
	bindBehaviours(document);
});

var gender = new Array();
var category = new Array();
var subCategory = new Array();

function setupDropdown(modelPos, genderSet, categorySet, subCategorySet) {
	gender[modelPos] = singleWordProduct(genderSet);
	category[modelPos] = singleWordProduct(categorySet);
	subCategory[modelPos] = singleWordProduct(subCategorySet);
	// setupDropdown('model3', 'Womens', 'Jackets/Vests', 'Waterproof Shell');
	
	// modelPos = model1 | model2 | model3
	// gender = mens | womens
	// category = jackets-vests | packs | ...
	// subCategory = softshell | waterproof-shell | ...
	
	// loadDropDown(modelPos, level, selectedValue, modelNo);
	
	
	if (gender[modelPos] != '' && gender[modelPos] != null) // check to make sure gender passed
	{
		// LOAD CATEGORIES
		$("#" + modelPos + " > #gender > .cstDropDownSelected").attr('title',gender[modelPos]);
		loadDropDown(modelPos, 'gender', gender[modelPos]);
		
		if (category[modelPos] != '' && category[modelPos] != null) // category passed
		{
			// LOAD SUBCATEGORIES
			$("#" + modelPos + " > #category > .cstDropDownSelected").attr('title', category[modelPos]);
			setTimeout(function () { loadDropDown(modelPos, 'category', category[modelPos]); },200);
			
			if (subCategory[modelPos] != '' && subCategory[modelPos] != null) // subcategory passed
			{
				// LOAD MODELS
				$("#" + modelPos + " > #subCategory > .cstDropDownSelected").attr('title', subCategory[modelPos]);
				setTimeout(function () { loadDropDown(modelPos, 'subCategory', subCategory[modelPos]); },400);
			}
		}
	}
}

function bindBehaviours(scope) {
	
	$("#showCommon").change(function() {
		var showCommon = $(this).val();
		
		switch(showCommon)
		{
			case 'on':
				$(".compareOff").show();
				restripeGrid();
				sizeVerticals();
				break;
			case 'off':
				$(".compareOff").hide();
				restripeGrid();
				sizeVerticals();
				break;
		}
	});
	
	$('.cstDropDownItem', scope).hover(
		function() {
			$(this).children('.cstDropDownItemMore').show();
			$(this).addClass('cstDropDownItemHover');
		},
		function() {
			$(this).children('.cstDropDownItemMore').hide();
			$(this).removeClass('cstDropDownItemHover');
		});
		
	$('.cstDropDownArrow, .cstDropDownSelected', scope).click(function() {
		if(!$(this).parent().hasClass('disabled')) {
			$(this).parent().siblings('.cstDropDown').children('.cstDropDownList').hide();
			$(this).siblings('.cstDropDownList').toggle();
		}
	});

    $('.cstDropDownItem', scope).click(function() {
	    var selectedValue = $(this).children('.cstDropDownItemTitle').attr('title'); // "jackets-vests"
		if (!selectedValue)
			var selectedValue = $(this).children('.cstDropDownItemTitle').attr('lightboxtitle'); // "jackets-vests"
		var selectedText = $(this).children('.cstDropDownItemTitle').text();
		$(this).parent().siblings('.cstDropDownSelected').text(selectedText);
		$(this).parent().siblings('.cstDropDownSelected').attr('title', selectedValue);
    	
	    $(this).parent('.cstDropDownList').hide();
	    var level = $(this).parent().parent().attr('id'); // "category"
	    var modelPos = $(this).parent().parent().parent().attr('id'); // "model3"
		var modelID = $(this).attr('id');
		
		loadDropDown(modelPos, level, selectedValue, modelID);
	}); // end of click function
}

function loadDropDown(modelPos, level, selectedValue, modelNo) {
	var ajaxLoadCall = '';
	
	switch(level)
	{
		case '':
			// to switch gender dropdown
			break;
		case 'gender':
			// call list for categories
			gender[modelPos] = singleWordProduct(selectedValue);
			var RN = Math.floor(Math.random()* 9999);
			ajaxLoadCall = "productChooserMenu.aspx?" + "language=" + language + "&gender=" + gender[modelPos] + "&Q=" + RN;
			//alert (ajaxLoadCall);
			$("#" + modelPos + " > .category > .cstDropDownList").load(ajaxLoadCall, function() { 
				bindBehaviours("#" + modelPos + " > .category > .cstDropDownList");  
				
				var genderSelected = $("#" + modelPos  + " > #gender").find('.cstDropDownItemTitle[lightboxtitle=' + gender[modelPos] + ']').text();
				$("#" + modelPos + " > #gender > .cstDropDownSelected").text(
					genderSelected
				);
			});
			
			
			// make sure categories is enabled
			$("#" + modelPos + " > .category").removeClass('disabled');
			$("#" + modelPos + " > .category > .cstDropDownSelected").text(textChooseOne);
			
			// disable subCategories and reset value
			$("#" + modelPos + " > .subCategory").addClass('disabled');
			$("#" + modelPos + " > .subCategory > .cstDropDownSelected").text(textSelectCatFirst);
			
			// disable models and reset value
			$("#" + modelPos + " > .model").addClass('disabled');
			$("#" + modelPos + " > .model > .cstDropDownSelected").html('&nbsp;');
			break;
		case 'category':
			// call list for sub categories
			gender[modelPos] = $("#" + modelPos + " > .gender > .cstDropDownSelected").attr('title');
			category[modelPos] = singleWordProduct(selectedValue);
			var RN = Math.floor(Math.random()* 9999);
			ajaxLoadCall = "productChooserMenu.aspx?" + "language=" + language + "&gender=" + gender[modelPos] + "&category=" + category[modelPos] + "&Q=" + RN;
			//alert (ajaxLoadCall);
			$("#" + modelPos + " > .subCategory > .cstDropDownList").load(ajaxLoadCall, function() { 
				bindBehaviours("#" + modelPos + " > .subCategory > .cstDropDownList"); 
				
				var categorySelected = '';

				categorySelected = $("#" + modelPos + " > #category").find(".cstDropDownItemTitle[title=" + category[modelPos] + "]").text();
				if(categorySelected == '') {
					//setTimeout('categorySelected = $("#" + modelPos + " > #category").find(".cstDropDownItemTitle[title=" + category[modelPos] + "]").text();$("#" + modelPos + " > #category > .cstDropDownSelected").text(categorySelected);',500);
					$("#" + modelPos + " > #category > .cstDropDownSelected").html("&nbsp;");
				}
				else {
					$("#" + modelPos + " > #category > .cstDropDownSelected").text(categorySelected);
				}
				
			});
			
			//make sure subcategories is enabled
			//alert(modelPos);
			//alert($("#" + modelPos + " > .subCategory").hasClass('disabled'));
			$("#" + modelPos + " > .subCategory").removeClass('disabled');
			$("#" + modelPos + " > .subCategory > .cstDropDownSelected").html(textChooseOne);
			
			// disable models and reset value
			$("#" + modelPos + " > .model").addClass('disabled');
			$("#" + modelPos + " > .model > .cstDropDownSelected").html(textSelectSubCatFirst);
			break;
		case 'subCategory':
			// call list for models
			gender[modelPos] = $("#" + modelPos + " > .gender > .cstDropDownSelected").attr('title');
			category[modelPos] = $("#" + modelPos + " > .category > .cstDropDownSelected").attr('title');
			subCategory[modelPos] = singleWordProduct(selectedValue);
			var RN = Math.floor(Math.random()* 9999);
			ajaxLoadCall = "productChooserMenu.aspx?" + "language=" + language + "&gender=" + gender[modelPos] + "&category=" + category[modelPos] + "&subCategory=" + subCategory[modelPos] + "&Q=" + RN;
			//alert (ajaxLoadCall);
			$("#" + modelPos + " > .model > .cstDropDownList").load(ajaxLoadCall, function() { 
				bindBehaviours("#" + modelPos + " > .model > .cstDropDownList");
				
				//$("#" + modelPos + " > #subCategory > .cstDropDownSelected").text(subCategory);
				var subCatSelected = $("#" + modelPos + " > #subCategory").find('.cstDropDownItemTitle[title=' + subCategory[modelPos] + ']').text();
				if(subCatSelected == '') subCatSelected = '&nbsp;';
				$("#" + modelPos + " > #subCategory > .cstDropDownSelected").html(subCatSelected);
				
			});
			
			//make sure models are enabled
			$("#" + modelPos + " > .model").removeClass('disabled');
			$("#" + modelPos + " > .model > .cstDropDownSelected").html(textChooseOne);
			break;
		case 'model':
			// redirect to model page
			//alert(modelNo);
			
			var href = window.location.href;
			var wSearch = window.location.search;
			var qsPrefix = '';
			var fileName = href.substr(href.lastIndexOf("/")+1,href.length);
			var replaced = false;
			
			if (wSearch) // there IS a querystring to begin with
			{
				// get querystring of URL, without Language code
				if(wSearch.indexOf("/"))
				{
					qsPrefix = wSearch.substring(0, wSearch.lastIndexOf('/') + 1);
					querystring = wSearch.substring(wSearch.lastIndexOf('/') + 1, wSearch.length)
				}
				
				// split querystring into array by &
				var modelsList = querystring.split("&");
				modelsList.sort();
				// go through each index of main array (index = i)
				for ( var i in modelsList)
				{
					// split each item by =
					modelsList[i] = modelsList[i].split("=");
					if (modelsList[i][0] == modelPos) {
						modelsList[i][1] = modelNo;
						replaced = true;
					}
				}
				if (!replaced) {
					//alert('not replaced... need to append');
					var newPos = modelsList.length;
					modelsList[newPos] = new Array(2);
					modelsList[newPos][0] = modelPos;
					modelsList[newPos][1] = modelNo;
				}
				
				// re-prepare querystring for URL
				for ( var i in modelsList) {
					modelsList[i] = modelsList[i].join("=");
				}
				modelsList.sort();
				modelsList = modelsList.join("&")
			}
			else { // no existing querystring
				modelsList = modelPos + "=" + modelNo;
			}
				
			window.location.search = qsPrefix + modelsList;
			break;
	} // end of switch
}
