﻿// Configurators


var queryValues = {};
var specValues = {};
var resetValues = {};
var queryAttribSetCode = "";
var testMode=false;

// Update values from drop-down lists.
function optionValue(listItem,menuDiv,linkMenu)
{
	// update queryValues.
	// label: listItem.innerText
	// value: listItem.title
	var _value = (listItem.title ? listItem.title:"");
	var _label = (listItem.innerHTML ? listItem.innerHTML:"");
	if (_value != "" || _label != "")
	{
		$(linkMenu+" > span").html(_label);
		$.hideMenuExt(menuDiv);
		var optionField = getOptionField(menuDiv);
		updateQueryValue(optionField.field,_value,optionField.options);
		// Update Item Count.
		ajaxResultCount();
	}
}


function updateQueryValue(field,value,option)
{
	// Updates a query param.
	if (field=="Options")
	{
		var opt = buildSpecQuery(option,value);
		if (opt.af!="" && opt.av !="")
		{
			queryValues["Attrib"] = queryAttribSetCode;
			queryValues["af"]=opt.af;
			queryValues["av"]=opt.av;
		} else {
			delete queryValues["Attrib"];
			delete queryValues["af"];
			delete queryValues["av"];
		}
	} else {
		if (value!="")
		{
			queryValues[field]=value;
		} else {
			delete queryValues[field];
		}
	}
}

function buildSpecQuery(option,value)
{
	// returns in format: af:d1|d2|d3,av:1|2|3	
	if (value!="")
	{
		specValues[option]=value;
	} else {
		delete specValues[option];
	}
	
	// return new array.
	var retVal = {af:"",av:""};
	var p="";
	for (var specField in specValues)
	{
		if (specValues[specField]!="")
		{
			retVal.af += p + specField;
			retVal.av += p + specValues[specField];
			p="|";
		} 
	}
	return retVal;	
}

function ajaxResultCount()
{
	// post url: /products/specsresults.aspx
	// returns item count.
	var itemCount = "0";
	// build params.
	//var params = { Levels: "CAMERAS|CAM DIGPS|BODIES", Manuf: "Canon",af:"o8",av:"Compact",Attrib:"DIGPS" };
	$.ajax({
		type: 'POST',
		url:"/products/specsresults.aspx",
		data: queryValues,
		success: function(xml)
		{
			itemCount = $('itemcount', xml).text();
			updateMatchValue(itemCount);
			if (testMode)
			{
				dumpQueryData();
			}
		},
		error : function(request, settings)
		{
			if (testMode)
			{
				dumpQueryData();
				$("#testOutput").append("<br />error: "+settings.url);
			}
		}
	});
}

// parse data from input tag. available fields: Manuf,af,av,pr1,pr2.
function getInitData()
{
	var s = $('#specsConfig_specsFields'), d = $('#specsConfig_specsData');
	var hasAf=false;
	if (s.length && d.length)
	{
		var sf = s.val().split(",");
		var df = d.val().split(",");
		if (sf.length > 0 && sf.length == df.length) {
			for (i = 0; i < sf.length; i++) {
				if(df[i]!="") { resetValues[sf[i]] = df[i].replace(/~/g, ","); }
				if (!hasAf && sf[i]=="af"){ hasAf = true; }
			}
			if (hasAf) {
				resetValues["Attrib"] = queryAttribSetCode;
			}
			// function defined in specific configurator js.
			applyResetValues();
			return true;
		}
	}
	return false;
}

// debug function
function dumpQueryData()
{
	var str="",p="?";
	for (var qf in queryValues)
	{
		
			str += p + qf + "=" + queryValues[qf];
			p="&";
		
	}
	$("#testOutput").html(str);
}

function urlBuilder(redirect)
{
	// build url with spec/category/manf values to redirect to the results.
	// redirect: boolean value to redirect or return a value.
	
	var delim = "-";
	var qdelim = "?";
	if (queryValues.CategoryID != null && queryValues.Levels != null)
	{
		var url = "/results/" + queryValues.CategoryID + "/"; // path of control relative to root.
		
		var levels = queryValues.Levels.split("|");
		
		url += (levels[0] != null && levels[0] != "") ? lowerUrlFormat(levels[0]) : "";
		if ((levels[1]!=null && levels[1] != "") || (levels[2]!=null && levels[2] != "") || (levels[3]!=null && levels[3] != "")) { url += delim; }
        url += (levels[1] != null && levels[1] != "") ? lowerUrlFormat(levels[1]) : "";
        if ((levels[2]!=null && levels[2] != "") || (levels[3]!=null && levels[3] != "")) { url += delim; } 
        url += (levels[2]!=null && levels[2] != "") ? lowerUrlFormat(levels[2]) : "";
        if (levels[3]!=null && levels[3] != "") { url += delim; }
        url += (levels[3]!=null && levels[3] != "") ? lowerUrlFormat(levels[3]) : "";
        url += "/";
		// Manuf.
		url += (queryValues.Manuf != null && queryValues.Manuf != "") ? queryValues.Manuf.replace(/&/g, "_").replace(/\./g, ",").replace(/\+/g, "~") + "/" : "";
		
		// LinkName
        url += queryValues.LinkName.replace(/ /g, "-").replace(/\./, "").replace(/&/g, "_").replace(/\//g, "") + ".aspx"; // finish off with a file name.

		for (var qfield in queryValues)
		{
			if (qfield != "Levels" && qfield != "Manuf" && qfield != "CategoryID" && qfield != "LinkName" && queryValues[qfield]!="")
			{
				url += qdelim + qfield.toString() +"="+ escape(queryValues[qfield]);
				qdelim = "&";
			}
		}
		if (testMode)
		{
			$("#testOutput").html("URL: "+url);
		}
		
		if (redirect){
			window.setTimeout(function() {
			window.location.assign(url); },100);
		}else {
			return url;
		}
	}	

            
			
}
function lowerUrlFormat(level)
{
	// delim is -.
   return level!=null ? level.toLowerCase().replace(/-/g, "_") : "";
}

function resetValues(params)
{
	// this function auto-sets values for the configurator so that the panels are up-to-date
	// with the user's current query.
	
}

function updateMatchValue(value){
	$('#specs_countnum').html(value);
}


