﻿// Digital Point & Shoot Configurator.

// Default Fixed query values.
function initQueryValues() {
	// Required: AttribSetCode:
	queryAttribSetCode = "PAPER";
	// Fixed Query Values:
	queryValues = {Levels:"PRNT PAPER",CategoryID:"PrinterPapers",LinkName:"Find your Inkjet Paper"};
	// Copy queryValues to resetValues
	resetValues = {};
	for (f in queryValues){
		resetValues[f]=queryValues[f];
	}
}
// Puts the option value into the correct field.
function getOptionField(obj)
{
	//alert(obj.id);
	obj = $(obj).get(0);
	switch(obj.id)
	{
		case "menuSpecsBrandSelect": return {field:"Manuf",options:null};
		case "menuSpecsPaperWidth": return {field:"Options",options:"d1"};
		case "menuSpecsPaperLength": return {field:"Options",options:"d2"};
		case "menuSpecsPack": return {field:"Options",options:"o2"};
		case "menuSpecsFinish": return {field:"Levels",options:null};
	}
	return {field:"unk",options:null};	
}

// Initialize control values.
$(document).ready(
function()
{
// Default Fixed query values.
initQueryValues();

// advanced section:
$('#linkmenuAdvanced').click(function() { displayAdvSection(); });
// wire up option lists.
$.setMenuOffset("menuSpecsBrandSelect",{'eX':0,'eY':22});
$('#linkmenuSpecsBrandSelect').click( function(){ $(this).toggleMenu('#menuSpecsBrandSelect','#linkmenuSpecsBrandSelect'); } );
$('#menuSpecsBrandSelect > a').click( function(){ optionValue(this,'#menuSpecsBrandSelect','#linkmenuSpecsBrandSelect'); } );

$.setMenuOffset("menuSpecsPaperWidth",{'eX':0,'eY':22});
$('#linkmenuSpecsPaperWidth').click( function(){ $(this).toggleMenu('#menuSpecsPaperWidth','#linkmenuSpecsPaperWidth'); } );
$('#menuSpecsPaperWidth > a').click( function(){ optionValue(this,'#menuSpecsPaperWidth','#linkmenuSpecsPaperWidth'); } );

$.setMenuOffset("menuSpecsPaperLength",{'eX':0,'eY':22});
$('#linkmenuSpecsPaperLength').click( function(){ $(this).toggleMenu('#menuSpecsPaperLength','#linkmenuSpecsPaperLength'); } );
$('#menuSpecsPaperLength > a').click( function(){ optionValue(this,'#menuSpecsPaperLength','#linkmenuSpecsPaperLength'); } );

$.setMenuOffset("menuSpecsPack",{'eX':0,'eY':22});
$('#linkmenuSpecsPack').click( function(){ $(this).toggleMenu('#menuSpecsPack','#linkmenuSpecsPack'); } );
$('#menuSpecsPack > a').click( function(){ optionValue(this,'#menuSpecsPack','#linkmenuSpecsPack'); } );

$.setMenuOffset("menuSpecsFinish",{'eX':0,'eY':22});
$('#linkmenuSpecsFinish').click( function(){ $(this).toggleMenu('#menuSpecsFinish','#linkmenuSpecsFinish'); } );
$('#menuSpecsFinish > a').click( function(){ 
		$("#linkmenuSpecsFinish > span").text((this.innerHTML ? this.innerHTML:""));
		$.hideMenuExt('#menuSpecsFinish');
		updateLevels("Level3",this.title); //updateQueryValue("Levels","PRNT PAPER|INKJET SHE"+(this.title!=""?"|"+this.title:"") ,null); 
		queryValues["Attrib"] = queryAttribSetCode;
		ajaxResultCount();
});




// wire up sliders

$("#slider_pricerange").slider({
		  minValue: 1,
		  maxValue: 800,
		  startValues:[1,800],
		  slide: function(e,ui) {
			  handleSliderPrice_slide(ui.values[0],ui.values[1]);
		  },
		  stop: function(e,ui) { 
		      handleSliderPrice_stop(ui.values[0],ui.values[1]);
		  }
});
// wire up selectables.
 
 $('.selectable > a').click(function(e){ 
		//selectedElements[this.title] = true;
		var alreadySelected = (/selected/.test($(this).attr("class")));
		$(".selectable > a").removeClass("selected");
		if (alreadySelected) {
			// remove from list.
			updateLevels("Level2",""); //updateQueryValue("Levels","PRNT PAPER",null);
		} else {
			$(this).addClass("selected");
			updateLevels("Level2",this.title); //updateQueryValue("Levels","PRNT PAPER|"+this.title,null);
		}
		ajaxResultCount();
		
 });
 
 var advanced_values = [["Rag (100% Cotton)", "", "o3", "Yes"], 
	["Double Sided", "", "o4", "Yes"], 
	["Coated", "", "o6", "Yes"]];
 
 
 $('.selectAdvanced > a').click(function(e){ 
		// Multiple selection enabled.
		var alreadySelected = (/selected/.test($(this).attr("class")));
		
		if (alreadySelected) {
			// remove from list.
			$(this).removeClass("selected");
			switch(this.title) 
			{
				case "Rag (100% Cotton)": updateQueryValue("Options","","o3"); break;
				case "Double Sided": updateQueryValue("Options","","o4"); break;
				case "Coated": updateQueryValue("Options","","o6"); break;
			}
		} else {
			$(this).addClass("selected");
			switch(this.title) 
			{
				case "Rag (100% Cotton)": updateQueryValue("Options","Yes","o3"); break;
				case "Double Sided": updateQueryValue("Options","Yes","o4"); break;
				case "Coated": updateQueryValue("Options","Yes","o6"); break;
			}
		}
		ajaxResultCount();
 });

// Copy queryValues to resetValues
for (f in queryValues){
	resetValues[f]=queryValues[f];
}

// Get init data if exists.
if(!getInitData())
{
	// Else Update Item Count using Fixed Query Values. (getInitData already has ajaxResultCount())
	ajaxResultCount();
}

}
);

var advSliderWired=false;
function wireUpAdvSliders() {
	$("#slider_weight").slider({
		  minValue: 50,
		  maxValue: 870,
		  startValues:[50,870],
		  slide: function(e,ui) {
			  handleSliderWeight_slide(ui.values[0],ui.values[1]);
		  },
		  stop: function(e,ui) { 
		      handleSliderWeight_stop(ui.values[0],ui.values[1]);
		  }
	});
	$("#slider_thick").slider({
			  minValue: 0,
			  maxValue: 360,
			  startValues:[0,360],
			  slide: function(e,ui) {
				  handleSliderThick_slide(ui.values[0],ui.values[1]);
			  },
			  stop: function(e,ui) { 
				  handleSliderThick_stop(ui.values[0],ui.values[1]);
			  }
	});
	advSliderWired=true;
}
function displayAdvSection() {
	if ($.browser.msie) {
		 $('#menuAdvancedSpec').toggle(); 
	} else { 
		$('#menuAdvancedSpec').slideToggle(500); 
	}
	if (!advSliderWired) { wireUpAdvSliders(); }
}

function updateLevels(level,level_value)
{
	// current data: queryValues.Levels
	var leveldata = (queryValues.Levels) ? queryValues.Levels.split("|") : ["PRNT PAPER"]; // else default Levels value.
	if (level=="Level2") {
		leveldata[1] = level_value;
		if (level_value=="") {
			leveldata = leveldata.slice(0,1); // remove level2,level3.
			// un-select drop-down (Level3).
			$("#linkmenuSpecsFinish > span").text("Paper Finish");
		}
	} else if (level=="Level3") {
		if (leveldata[1]==undefined || leveldata[1]=="") { // default level2 == "INKJET SHE"
			leveldata[1]="INKJET SHE";
			// select sheet paper.
			$(".selectable > a").each(function() { 
				$(this).removeClass("selected");
				if (this.title=="INKJET SHE") { $(this).addClass("selected"); }
			});
		}
		leveldata[2] = level_value;
		if (level_value=="") {
			leveldata = leveldata.slice(0,2); // remove level3.
			leveldata.length=2;
		}
	}
	// send level info back.
	queryValues.Levels = leveldata.join("|");
}

// Reset values
// Reverse engineer values back into the controls that contain them.
function applyResetValues(clickReset){
	// remove all queryValues and assign resetValues.
	//delete queryValues;
	if (clickReset) {  // is 'true' when reset is clicked.
		// revert to init values.
		initQueryValues(); 
	} else {
		// Reset values take over.
		queryValues = {};
		
		// sync Levels.
		if (resetValues.Level1) { resetValues.Levels = resetValues.Level1; delete resetValues.Level1;
		if (resetValues.Level2) { resetValues.Levels += "|"+resetValues.Level2;  delete resetValues.Level2;
		if (resetValues.Level3) { resetValues.Levels += "|"+resetValues.Level3; delete resetValues.Level3;
		if (resetValues.Level4) { resetValues.Levels += "|"+resetValues.Level4; delete resetValues.Level4; } } } }
	
		for (i in resetValues) {
			queryValues[i] = resetValues[i];
		}
	}
	
	// Sync UI.
	// Option Values:
	$("#linkmenuSpecsBrandSelect > span").text((resetValues.Manuf && resetValues.Manuf != "") ? resetValues.Manuf : "Select Brand");
	
	// Specs Data
	
	// Apply values to UI controls.
	var attribFields = (queryValues.af && queryValues.af != "" && queryValues.av && queryValues.av != "") ? queryValues.af.split("|") : [];
	var attribValues = (queryValues.af && queryValues.af != "" && queryValues.av && queryValues.av != "") ? queryValues.av.split("|") : [];

	// Sync specValues.
	//delete specValues;
	specValues = {};
	for (i in attribFields) {
		specValues[attribFields[i]] = attribValues[i];
	}
	
	var weight_values = {
		lower: 0,
		upper: 0
	};
	var thick_values = {
		lower: 0,
		upper: 0
	};
	var option_pack = "", option_width = "", option_length = "", option_finish = "";
	var optionIsAdvanced = false;
	
	// Advanced Fields: key_name:[title,reset_value,optionfield,match_value,type]
	var advanced_values = [["Rag (100% Cotton)", "", "o3", "Yes"], 
	["Double Sided", "", "o4", "Yes"], 
	["Coated", "", "o6", "Yes"]];
	// loop through fields.
	for (i = 0; i < attribFields.length; i++) {
		// Weight
		if (attribFields[i] == "d3g" && attribValues[i] != null && attribValues[i] != "") {
			weight_values.lower = parseFloat(attribValues[i]);
		}
		if (attribFields[i] == "d3l" && attribValues[i] != null && attribValues[i] != "") {
			weight_values.upper = parseFloat(attribValues[i]);
		}
		if (attribFields[i] == "d3" && attribValues[i] != null && attribValues[i] != "") {
			weight_values.upper = parseFloat(attribValues[i]);
			weight_values.lower = parseFloat(attribValues[i]);
		}
		// Thickness
		if (attribFields[i] == "d4g" && attribValues[i] != null && attribValues[i] != "") {
			thick_values.lower = parseFloat(attribValues[i]);
		}
		if (attribFields[i] == "d4l" && attribValues[i] != null && attribValues[i] != "") {
			thick_values.upper = parseFloat(attribValues[i]);
		}
		if (attribFields[i] == "d4" && attribValues[i] != null && attribValues[i] != "") {
			thick_values.upper = parseFloat(attribValues[i]);
			thick_values.lower = parseFloat(attribValues[i]);
		}
		// ISO
		if (attribFields[i] == "d5g" && attribValues[i] != null && attribValues[i] != "") {
			iso_values.lower = parseFloat(attribValues[i]);
		}
		if (attribFields[i] == "d5l" && attribValues[i] != null && attribValues[i] != "") {
			iso_values.upper = parseFloat(attribValues[i]);
		}
		if (attribFields[i] == "d5" && attribValues[i] != null && attribValues[i] != "") {
			iso_values.upper = parseFloat(attribValues[i]);
			iso_values.lower = parseFloat(attribValues[i]);
		}
		//Number in Pack
		if (attribFields[i] == "o2" && attribValues[i] != null && attribValues[i] != "") {
			option_pack = attribValues[i];
		}
		//Width
		if (attribFields[i] == "d1" && attribValues[i] != null && attribValues[i] != "") {
			option_width = attribValues[i]+"\"";
		}
		//Length
		if (attribFields[i] == "d2" && attribValues[i] != null && attribValues[i] != "") {
			option_length = attribValues[i]+"\"";
		}
		
		for (j = 0; j < advanced_values.length; j++) {
			if (attribFields[i] == advanced_values[j][2] && attribValues[i] != null && attribValues[i] == advanced_values[j][3]) {
				advanced_values[j][1] = attribValues[i];
				optionIsAdvanced=true; 
			}
		}
	} // end for
	
	// Display advanced section
	if ((weight_values.upper && weight_values.lower && (weight_values.lower < weight_values.upper)) || (thick_values.upper && thick_values.lower && (thick_values.lower < thick_values.upper))) { 
		optionIsAdvanced=true; 
	}
	if (optionIsAdvanced) { 
		if ($('#menuAdvancedSpec').css('display')=='none') { 
			displayAdvSection();
		}
	}
	// Process Specs Data.
	// Weight values.
	if (weight_values.upper && weight_values.lower && (weight_values.lower <= weight_values.upper)) {
		$("#slider_weight").sliderMoveMultipleTo(0, weight_values.lower, null, true, false);
		$("#slider_weight").sliderMoveMultipleTo(1, weight_values.upper, null, true, false);
	}
	else {
		$("#slider_weight").sliderMoveMultipleTo(0, slideRange_Weight.lower, null, true, false);
		$("#slider_weight").sliderMoveMultipleTo(1, slideRange_Weight.upper, null, true, false);
	}
	// Thickness values.
	if (thick_values.upper && thick_values.lower && (thick_values.lower < thick_values.upper)) {
		$("#slider_thick").sliderMoveMultipleTo(0, thick_values.lower * 10, null, true, false);
		$("#slider_thick").sliderMoveMultipleTo(1, thick_values.upper * 10, null, true, false);
	}
	else {
		$("#slider_thick").sliderMoveMultipleTo(0, slideRange_Thick.lower * 10, null, true, false);
		$("#slider_thick").sliderMoveMultipleTo(1, slideRange_Thick.upper * 10, null, true, false);
	}
	
	// apply option values.
	$("#linkmenuSpecsPaperWidth > span").text(option_width || "Paper Width");
	$("#linkmenuSpecsPaperLength > span").text(option_length || "Paper Length");
	$("#linkmenuSpecsPack > span").text(option_pack || "Number in Pack");
	if (resetValues.Levels && resetValues.Levels != "") {
		var level3 = (resetValues.Levels.indexOf("PRNT PAPER|INKJET SHE|") >= 0 ? resetValues.Levels.replace("PRNT PAPER|INKJET SHE|","") : (resetValues.Levels.indexOf("PRNT PAPER|INKJET ROL|") >= 0 ? resetValues.Levels.replace("PRNT PAPER|INKJET ROL|","") : "" ));
		var level3_label="";
		// get Label from <a> values. //Level3
		if (level3 != "")
		{
			$("#menuSpecsFinish > a").each(function(){ if (this.title && this.title==level3) { level3_label=$(this).text(); } });
		}
		$("#linkmenuSpecsFinish > span").text((level3_label != "") ? level3_label : "Paper Finish");
	}
	
	// Apply advanced values.
	for (i = 0; i < advanced_values.length; i++) {
		if (advanced_values[i][1] != "") {
			$(".selectAdvanced > a[title=" + advanced_values[i][0] + "]").each(function(){
				if (!(/selected/.test($(this).attr("class")))) {
					$(this).addClass("selected");
				}
			});
		}
		else {
			$(".selectAdvanced > a[title=" + advanced_values[i][0] + "]").removeClass("selected");
		}
		//updateQueryValue("Options",advanced_values[adv_name][0],advanced_values[adv_name][1]);
	}	
	// Apply selectable values (sheet/vs/roll)
	
	$(".selectable > a").removeClass("selected");
	if (queryValues.Levels.indexOf("INKJET SHE") > 0) { 
		$(".selectable > a[title=INKJET SHE]").each(function(){
			if (!(/selected/.test($(this).attr("class")))) {
				$(this).addClass("selected");
			}
		});
	} else if (queryValues.Levels.indexOf("INKJET ROL") > 0) { 
		$(".selectable > a[title=INKJET ROL]").each(function(){
			if (!(/selected/.test($(this).attr("class")))) {
				$(this).addClass("selected");
			}
		});
	}
	
	
	// Price Range
	var pr1, pr2;
	if (queryValues.pr1 && queryValues.pr2 && (parseFloat(queryValues.pr1) <= parseFloat(queryValues.pr2))) {
		queryValues.pr1 = (parseFloat(queryValues.pr1) >= slideRange_Price.lower ? parseFloat(queryValues.pr1) : slideRange_Price.lower);
		queryValues.pr2 = (parseFloat(queryValues.pr2) <= slideRange_Price.upper ? parseFloat(queryValues.pr2) : slideRange_Price.upper);
	}
	else {
		queryValues.pr1 = slideRange_Price.lower;
		queryValues.pr2 = slideRange_Price.upper;
	}
	$("#slider_pricerange").sliderMoveMultipleTo(0, queryValues.pr1, null, true, false);
	$("#slider_pricerange").sliderMoveMultipleTo(1, queryValues.pr2, null, true, false);
	// Remove from query because these are default values.
	if (parseFloat(queryValues.pr1)==slideRange_Price.lower && parseFloat(queryValues.pr2)==slideRange_Price.upper)
	{
		delete queryValues.pr1;
		delete queryValues.pr2;
	}
	// Update
	ajaxResultCount();
}

// Slide Ranges.
var slideRange_Weight = {lower:50,upper:870,roundDecimals:0,unit:"gsm",_lower:50,_upper:870,_upperChanged:false};
var slideRange_Thick = {lower:0,upper:360,roundDecimals:0,unit:"mil",_lower:0,_upper:360,_upperChanged:false};
var slideRange_Price = {lower:1,upper:800,roundDecimals:0,unit:"$",_lower:1,_upper:800,_upperChanged:false};

var handleSliderWeight_slide = function(lower, upper)
{
	slideRange_Weight._lower = lower;
	slideRange_Weight._upper = upper;
	$("#slider_weight_value").html(slideRange_Weight._lower.toFixed(0) + slideRange_Weight.unit + " to " + slideRange_Weight._upper.toFixed(0) + slideRange_Weight.unit);
}
var handleSliderWeight_stop = function(lower, upper)
{
	if (!slideRange_Weight._upperChanged && upper != lower && upper != slideRange_Weight.upper) { slideRange_Weight._upperChanged = true; }
	slideRange_Weight._lower = lower;
	slideRange_Weight._upper = upper;
	if (slideRange_Weight._lower==slideRange_Weight.lower && slideRange_Weight._upper==slideRange_Weight.upper)
	{
		// Clear query / at default positions.
		updateQueryValue("Options","","d3g");
		updateQueryValue("Options","","d3l");
		updateQueryValue("Options","","d3");
	}
	else if (slideRange_Weight._lower < slideRange_Weight._upper)
	{
		updateQueryValue("Options","","d3");
		updateQueryValue("Options",slideRange_Weight._lower,"d3g");
		updateQueryValue("Options",slideRange_Weight._upper,"d3l");
	} else {
		updateQueryValue("Options","","d3g");
		updateQueryValue("Options","","d3l");
		updateQueryValue("Options",slideRange_Weight._lower,"d3");
	} 
	// Update Item Count.
	ajaxResultCount();
}
var handleSliderThick_slide = function(lower, upper)
{
	slideRange_Thick._lower = (lower!=0) ? lower/10 : 0;
	slideRange_Thick._upper = (upper!=0) ? upper/10 : 0;
	$("#slider_thick_value").html(slideRange_Thick._lower.toFixed(1) + slideRange_Thick.unit + " to " + slideRange_Thick._upper.toFixed(1) + slideRange_Thick.unit);
}
var handleSliderThick_stop = function(lower, upper)
{
	slideRange_Thick._lower = (lower!=0) ? lower/10 : 0;
	slideRange_Thick._upper = (upper!=0) ? upper/10 : 0;
	if (slideRange_Thick._lower==slideRange_Thick.lower && slideRange_Thick._upper==slideRange_Thick.upper)
	{
		// Clear query / at default positions.
		updateQueryValue("Options","","d4g");
		updateQueryValue("Options","","d4l");
		updateQueryValue("Options","","d4");
	}
	else if (slideRange_Thick._lower < slideRange_Thick._upper)
	{
		updateQueryValue("Options","","d4");
		updateQueryValue("Options",slideRange_Thick._lower,"d4g");
		updateQueryValue("Options",slideRange_Thick._upper,"d4l");
	} else {
		updateQueryValue("Options","","d4g");
		updateQueryValue("Options","","d4l");
		updateQueryValue("Options",slideRange_Thick._lower,"d4");
	} 
	// Update Item Count.
	ajaxResultCount();
}

var handleSliderPrice_slide = function(lower, upper)
{
	slideRange_Price._lower = lower;
	slideRange_Price._upper = upper;
	$("#slider_pr_value").html(slideRange_Price.unit + slideRange_Price._lower + " to " + slideRange_Price.unit + slideRange_Price._upper);
}
var handleSliderPrice_stop = function(lower, upper)
{
	slideRange_Price._lower = lower;
	slideRange_Price._upper = upper;
	if (slideRange_Price._lower==slideRange_Price.lower && slideRange_Price._upper==slideRange_Price.upper)
	{
		// Clear query / at default positions.
		updateQueryValue("pr1","",null);
		updateQueryValue("pr2","",null);
	}
	else
	{
		updateQueryValue("pr1",slideRange_Price._lower,null);
		updateQueryValue("pr2",slideRange_Price._upper,null);
	} 
	// Update Item Count.
	ajaxResultCount();
}

