﻿// Lenses Configurator.

// 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 "menuSpecsMount": return {field:"Options",options:"o5"};
		case "menuSpecsType": return {field:"Options",options:"o8"};
		case "menuSpecsThread": return {field:"Options",options:"d3"};
	}
	return {field:"unk",options:null};	
}
function initQueryValues() {
	// Required: AttribSetCode:
	queryAttribSetCode = "LENSES";
	// Fixed Query Values:
	queryValues = {Levels:"CAMLENSES",CategoryID:"CameraLenses",LinkName:"Find Your Lens"};
	// Copy queryValues to resetValues
	resetValues = {};
	for (f in queryValues){
		resetValues[f]=queryValues[f];
	}
}
// Initialize control values.
$(document).ready(
function()
{
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("menuSpecsType",{'eX':0,'eY':22});
$('#linkmenuSpecsType').click( function(){ $(this).toggleMenu('#menuSpecsType','#linkmenuSpecsType'); } );
$('#menuSpecsType > a').click( function(){ optionValue(this,'#menuSpecsType','#linkmenuSpecsType'); } );

$.setMenuOffset("menuSpecsThread",{'eX':0,'eY':22});
$('#linkmenuSpecsThread').click( function(){ $(this).toggleMenu('#menuSpecsThread','#linkmenuSpecsThread'); } );
$('#menuSpecsThread > a').click( function(){ optionValue(this,'#menuSpecsThread','#linkmenuSpecsThread'); } );

$.setMenuOffset("menuSpecsMount",{'eX':0,'eY':22});
$('#linkmenuSpecsMount').click( function(){ $(this).toggleMenu('#menuSpecsMount','#linkmenuSpecsMount'); } );
$('#menuSpecsMount > a').click( function(){ optionValue(this,'#menuSpecsMount','#linkmenuSpecsMount'); } );

// wire up sliders
$("#slider_focal").slider({
		  minValue: 10,
		  maxValue: 500,
		  startValues:[10,500],
		  slide: function(e,ui) {
			  handleSliderFocal_slide(ui.values[0],ui.values[1]);
		  },
		  stop: function(e,ui) { 
		      handleSliderFocal_stop(ui.values[0],ui.values[1]);
		  }
});
$("#slider_pricerange").slider({
		  minValue: 100,
		  maxValue: 11000,
		  startValues:[100,11000],
		  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.
 
 $('.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 "Image Stabilization": updateQueryValue("Options","","o6"); break;
				case "Quiet Lens Motor": updateQueryValue("Options","","o1"); break;
				case "Internal Focusing": updateQueryValue("Options","","o7"); break;
				case "Low Dispersion Coating": updateQueryValue("Options","","o3"); break;
				case "Aspherical Coating": updateQueryValue("Options","","o4"); break;
				case "Non-Reflective Coating": updateQueryValue("Options","","o9"); break;
			}
		} else {
			$(this).addClass("selected");
			switch(this.title) 
			{
				case "Image Stabilization": updateQueryValue("Options","Yes (IS / VR)","o6"); break;
				case "Quiet Lens Motor": updateQueryValue("Options","Quiet (USM/SWM/SDM/SSM)","o1"); break;
				case "Internal Focusing": updateQueryValue("Options","Yes","o7"); break;
				case "Low Dispersion Coating": updateQueryValue("Options","Yes","o3"); break;
				case "Aspherical Coating": updateQueryValue("Options","Yes","o4"); break;
				case "Non-Reflective Coating": updateQueryValue("Options","Yes","o9"); break;
			}
		}
		ajaxResultCount();
 });
 $('.selectable > a').click(function(e){ 
		setSelectable(this.title,false);
 });

// Get init data if exists.
if(!getInitData())
{
	// Update Item Count using Fixed Query Values.
	ajaxResultCount();
}

}
);

var advSliderWired=false;
function wireUpAdvSliders() {
	$("#slider_ap").slider({
		  minValue: 10,
		  maxValue: 80,
		  startValues:[10,80],
		  slide: function(e,ui) {
			  handleSliderAperture_slide(ui.values[0],ui.values[1]);
		  },
		  stop: function(e,ui) { 
		      handleSliderAperture_stop(ui.values[0],ui.values[1]);
		  }
	});
	advSliderWired=true;
}
function displayAdvSection() {
	if ($.browser.msie) {
		 $('#menuAdvancedSpec').toggle(); 
	} else { 
		$('#menuAdvancedSpec').slideToggle(500); 
	}
	if (!advSliderWired) { wireUpAdvSliders(); }
}

// Reset values
// Reverse engineer values back into the controls that contain them.
function applyResetValues(clickReset){
	
	if (clickReset) {  // is 'true' when reset is clicked.
		// revert to init values.
		initQueryValues(); 
	} else {
		// Reset values take over. // remove all queryValues and assign resetValues.
		queryValues = {};
		for (i in resetValues) {
			queryValues[i] = resetValues[i];
		}
	}
	
	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 focal_values = {
		lower: 0,
		upper: 0,
		iszoom:false
	};
	var focal_values_upper = {
		lower:0,
		upper:0
	};
	var ap_values = {
		lower: 0,
		upper: 0
	};
	var option_mount = "", option_lenstype="", option_thread="";
	var optionIsAdvanced=false;
	
	// Advanced Fields: key_name:[title,reset_value,optionfield,match_value,type]
	var advanced_values = [["Image Stabilization", "", "o6", "Yes (IS / VR)"], 
	["Quiet Lens Motor", "", "o1", "Quiet (USM/SWM/SDM/SSM)"], 
	["Internal Focusing", "", "o7", "Yes"], 
	["Low Dispersion Coating", "", "o3", "Yes"], 
	["Aspherical Coating", "", "o4", "Yes"], 
	["Non-Reflective Coating", "", "o9", "Yes"]];
	// loop through fields.
	for (i = 0; i < attribFields.length; i++) {
		// Focal Length
		if (attribFields[i] == "d1g" && attribValues[i] != null && attribValues[i] != "") {
			focal_values.lower = parseInt(attribValues[i]);
		}
		if (attribFields[i] == "d1l" && attribValues[i] != null && attribValues[i] != "") {
			focal_values.upper = parseInt(attribValues[i]);
		}
		if (attribFields[i] == "d1" && attribValues[i] != null && attribValues[i] != "") {
			focal_values.upper = parseInt(attribValues[i]);
			focal_values.lower = parseInt(attribValues[i]);
		}
		if (attribFields[i] == "d2g" && attribValues[i] != null && attribValues[i] != "") {
			focal_values_upper.lower = parseInt(attribValues[i]);
		}
		if (attribFields[i] == "d2l" && attribValues[i] != null && attribValues[i] != "") {
			focal_values_upper.upper = parseInt(attribValues[i]); 
		}
		if (attribFields[i] == "d2" && attribValues[i] != null && attribValues[i] != "") {
			if (attribValues[i]==" ") { focal_values_upper.upper=" "; focal_values_upper.lower=" "; } else {
			focal_values_upper.upper = parseInt(attribValues[i]); 
			focal_values_upper.lower = parseInt(attribValues[i]); 
			}
		}
		// Aperture
		if (attribFields[i] == "d4g" && attribValues[i] != null && attribValues[i] != "") {
			ap_values.lower = parseFloat(attribValues[i]);
		}
		if (attribFields[i] == "d4l" && attribValues[i] != null && attribValues[i] != "") {
			ap_values.upper = parseFloat(attribValues[i]);
		}
		if (attribFields[i] == "d4" && attribValues[i] != null && attribValues[i] != "") {
			ap_values.upper = parseFloat(attribValues[i]);
			ap_values.lower = parseFloat(attribValues[i]);
		}
		// Mount.
		if (attribFields[i] == "o5" && attribValues[i] != null && attribValues[i] != "") {
			option_mount = (attribValues[i].length>24) ? attribValues[i].substring(0,24):attribValues[i];
		}
		//Digital compatibility.
		if (attribFields[i] == "o8" && attribValues[i] != null && attribValues[i] != "") {
			option_lenstype = attribValues[i];
		}
		//Thread Size (mm)
		if (attribFields[i] == "d3" && attribValues[i] != null && attribValues[i] != "") {
			option_thread = attribValues[i]+ "mm";
		}
		
		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; 
			}
		}
		// Image Stabilization [old]
		//if (attribFields[i] == "o6" && attribValues[i]!=null && attribValues[i]=="Yes") { advanced_values.image_stabilized = attribValues[i]; }
	} // end for
	// display advanced section
	if ((ap_values.upper && ap_values.lower && (ap_values.lower <= ap_values.upper)) || option_thread) { 
		optionIsAdvanced=true; 
	}
	if (optionIsAdvanced) { 
		if ($('#menuAdvancedSpec').css('display')=='none') { 
			displayAdvSection();
		}
	}
	// Process Specs Data.
	// Focal values.
	if (focal_values.upper && focal_values.lower && (focal_values.lower <= focal_values.upper)) {
		$("#slider_focal").sliderMoveMultipleTo(0, focal_values.lower, null, true, false);
		if (focal_values_upper.upper==0) { // default is Zoom
			setSelectable('Zoom',true); 
		}
	} else {
		$("#slider_focal").sliderMoveMultipleTo(0, slideRange_Focal.lower, null, true, false);	
		if (!focal_values_upper.upper) { // clear
			setSelectable('',true);
		}
	}
	if (focal_values_upper.upper && focal_values_upper.lower && (focal_values_upper.upper==" " && focal_values_upper.lower==" ")) {
		// Fixed Range
		$("#slider_focal").sliderMoveMultipleTo(1, slideRange_Focal_Upper.upper, null, true, false);
		setSelectable('Fixed',true);
	}
	else if (focal_values_upper.upper && focal_values_upper.lower && (focal_values_upper.lower <= focal_values_upper.upper)) {
		// Zoom range
		$("#slider_focal").sliderMoveMultipleTo(1, focal_values_upper.upper, null, true, false);
		setSelectable('Zoom',true);
	} else {
		$("#slider_focal").sliderMoveMultipleTo(1, slideRange_Focal_Upper.upper, null, true, false);
		if (!(focal_values.lower <= focal_values.upper)) { setSelectable('',true); } // else already set to Zoom on line 274
	}
	// Aperture values.
	if (ap_values.upper && ap_values.lower && (ap_values.lower <= ap_values.upper)) {
		$("#slider_ap").sliderMoveMultipleTo(0, ap_values.lower * 10, null, true, false);
		$("#slider_ap").sliderMoveMultipleTo(1, ap_values.upper * 10, null, true, false);
	}
	else {
		$("#slider_ap").sliderMoveMultipleTo(0, slideRange_Aperture.lower * 10, null, true, false);
		$("#slider_ap").sliderMoveMultipleTo(1, slideRange_Aperture.upper * 10, null, true, false);
	}
	
	// apply option values.
	$("#linkmenuSpecsMount > span").text(option_mount || "All Mounts");
	$("#linkmenuSpecsType > span").text(option_lenstype || "Any Lens Type");
	$("#linkmenuSpecsThread > span").text(option_thread || "All Thread Sizes");
	
	// 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]);
	}
	
	// Advanced Values:
	// Image Stabilized
	//if (advanced_values.image_stabilized != "")
	//{
	//	$('.selectAdvanced > a[title=Image Stabilization]').each(function(){
	//			if (!(/selected/.test($(this).attr("class")))) { $(this).addClass("selected"); }
	//	 });
	//} else { $('.selectAdvanced > a[title=Image Stabilization]').removeClass("selected"); } // this won't happen unless it's outside the if.

	// 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();
}

function setSelectable(selectable,onStop)
{
	if (selectable=="Zoom") { 
		if (!slideRange_Focal_IsZoom) { 
			slideRange_Focal_IsZoom=true; 
			if (!onStop) {
				handleSliderFocal_stop(slideRange_Focal._lower, slideRange_Focal_Upper._upper);
			}
		} else {
			if (!onStop && slideRange_Focal._lower==slideRange_Focal.lower && slideRange_Focal_Upper._upper==slideRange_Focal_Upper.upper) {
				// they're at the default position. 
				$("#slider_focal").sliderMoveMultipleTo(0, slideRange_Focal._lower+1, null, true, false);
				handleSliderFocal_stop(slideRange_Focal._lower+1, slideRange_Focal_Upper._upper);
			}
		}
	} else if (selectable=="Fixed") { 
		slideRange_Focal_IsZoom=false;
		// if upper slider is not at the upper max, move it.
		if (!onStop) {
			if (slideRange_Focal_Upper._upper != slideRange_Focal_Upper.upper) {
				$("#slider_focal").sliderMoveMultipleTo(1, slideRange_Focal_Upper.upper, null, true, false);
			}
			handleSliderFocal_stop(slideRange_Focal._lower, slideRange_Focal_Upper.upper);
		}
	} else { // reset.
		slideRange_Focal_IsZoom=true;
	}
	$('.selectable > a').each(function() {
	   $(this).removeClass("selected");
		if (this.title == selectable) {
			$(this).addClass("selected");
		}
	});
	// Update focal values.
	if (slideRange_Focal_IsZoom)
	{
		$("#slider_focal_value").html(slideRange_Focal._lower + slideRange_Focal.unit + " to &lt; " + slideRange_Focal_Upper._upper + slideRange_Focal.unit);
	} else {
		$("#slider_focal_value").html("&gt; "+slideRange_Focal._lower + slideRange_Focal.unit);
	}
}

// Slide Ranges.
var slideRange_Focal_IsZoom = true; // default
var slideRange_Focal = {lower:10,upper:500,roundDecimals:0,unit:"mm",_lower:10,_upper:500,_upperChanged:false};
var slideRange_Focal_Upper = {lower:10,upper:500,roundDecimals:0,unit:"mm",_lower:10,_upper:500,_upperChanged:false};
var slideRange_Aperture = {lower:1,upper:8,roundDecimals:0,unit:"",_lower:1,_upper:8,_upperChanged:false};
var slideRange_Price = {lower:100,upper:11000,roundDecimals:0,unit:"$",_lower:100,_upper:11000,_upperChanged:false};

var handleSliderFocal_slide = function(lower, upper)
{
	slideRange_Focal._lower = lower;
	slideRange_Focal_Upper._upper = upper; // slideRange_Focal._upperChanged ? upper : slideRange_Focal.upper;
	if (slideRange_Focal_IsZoom)
	{
		$("#slider_focal_value").html(slideRange_Focal._lower + slideRange_Focal.unit + " to &lt; " + slideRange_Focal_Upper._upper + slideRange_Focal.unit);
	} else {
		$("#slider_focal_value").html("&gt; "+slideRange_Focal._lower + slideRange_Focal.unit);
	}
}
var handleSliderFocal_stop = function(lower, upper)
{
	//if (!slideRange_Focal._upperChanged && upper != lower && upper != slideRange_Focal.upper) { slideRange_Focal._upperChanged = true; }
	slideRange_Focal._lower = lower;
	if (slideRange_Focal_IsZoom) {
		slideRange_Focal_Upper._upper = upper;
		setSelectable('Zoom', true);
	} else if (upper < slideRange_Focal_Upper.upper) { // they moved the upper slider.
		slideRange_Focal_Upper._upper = upper;
		setSelectable('Zoom', true);
	} else {
		slideRange_Focal_Upper._upper = slideRange_Focal_Upper.upper; // clear.
		setSelectable('Fixed', true);
	}
	if (slideRange_Focal._lower==slideRange_Focal.lower)
	{
		// Clear query / at default positions.
		updateQueryValue("Options","","d1g");
		updateQueryValue("Options","","d1l");
		updateQueryValue("Options","","d1");
	} else if (slideRange_Focal._lower < slideRange_Focal._upper)
	{
		//if (slideRange_Focal_IsZoom) {
			updateQueryValue("Options","","d1");
			updateQueryValue("Options",slideRange_Focal._lower,"d1g");
			updateQueryValue("Options",slideRange_Focal._upper,"d1l");
		//} else {
		//	updateQueryValue("Options",slideRange_Focal._lower,"d1");
		//}
	}
	if (slideRange_Focal_Upper._upper==slideRange_Focal_Upper.upper)
	{
		updateQueryValue("Options","","d2g");
		updateQueryValue("Options","","d2l");
		if (slideRange_Focal_IsZoom) {			
			updateQueryValue("Options","","d2");
		} else {
			updateQueryValue("Options"," ","d2");
		}
	}else if (slideRange_Focal_Upper._lower < slideRange_Focal_Upper._upper)
	{
		updateQueryValue("Options","","d2");
		updateQueryValue("Options",slideRange_Focal_Upper._lower,"d2g");
		updateQueryValue("Options",slideRange_Focal_Upper._upper,"d2l");
	}
	// Clear invalid queries.
	if (slideRange_Focal._lower > slideRange_Focal._upper || slideRange_Focal_Upper._lower > slideRange_Focal_Upper._upper) {
		updateQueryValue("Options","","d1g");
		updateQueryValue("Options","","d1l");
		updateQueryValue("Options",slideRange_Focal._lower,"d1");
		updateQueryValue("Options","","d2g");
		updateQueryValue("Options","","d2l");
		updateQueryValue("Options",slideRange_Focal_Upper._lower,"d2");
	} 
	// Update Item Count.
	ajaxResultCount();
}

var handleSliderAperture_slide = function(lower, upper)
{
	slideRange_Aperture._lower = (lower!=0) ? lower/10 : 0;
	slideRange_Aperture._upper = (upper!=0) ? upper/10 : 0;
	$("#slider_ap_value").html("f/"+slideRange_Aperture._lower.toFixed(1) + slideRange_Aperture.unit + " to &lt; f/" + slideRange_Aperture._upper.toFixed(1) + slideRange_Aperture.unit);
}
var handleSliderAperture_stop = function(lower, upper)
{
	slideRange_Aperture._lower = (lower!=0) ? lower/10 : 0;
	slideRange_Aperture._upper = (upper!=0) ? upper/10 : 0;
	if (slideRange_Aperture._lower==slideRange_Aperture.lower && slideRange_Aperture._upper==slideRange_Aperture.upper)
	{
		// Clear query / at default positions.
		updateQueryValue("Options","","d4g");
		updateQueryValue("Options","","d4l");
		updateQueryValue("Options","","d4");
	}
	else if (slideRange_Aperture._lower < slideRange_Aperture._upper)
	{
		updateQueryValue("Options","","d4");
		updateQueryValue("Options",slideRange_Aperture._lower,"d4g");
		updateQueryValue("Options",slideRange_Aperture._upper,"d4l");
	} else {
		updateQueryValue("Options","","d4g");
		updateQueryValue("Options","","d4l");
		updateQueryValue("Options",slideRange_Aperture._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();
}

