﻿// Camcorder (Professional) Configurator.

// Default Fixed query values.
function initQueryValues() {
	// Required: AttribSetCode:
	queryAttribSetCode = "VIDCAM";
	// Fixed Query Values:
	queryValues = {Levels:"CAMCORDERS|PROVIDEO|BODY CAM",CategoryID:"ProVideoCamcorders",LinkName:"Find Your Camcorder"};
	// Copy queryValues to resetValues
	resetValues = {};
	for (f in queryValues){
		resetValues[f]=queryValues[f];
	}
}
// 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("menuSpecsStorage",{'eX':0,'eY':22});
$('#linkmenuSpecsStorage').click( function(){ $(this).toggleMenu('#menuSpecsStorage','#linkmenuSpecsStorage'); } );
$('#menuSpecsStorage > a').click( function(){ optionValue(this,'#menuSpecsStorage','#linkmenuSpecsStorage'); } );

$.setMenuOffset("menuSpecsMaxDef",{'eX':0,'eY':22});
$('#linkmenuSpecsMaxDef').click( function(){ $(this).toggleMenu('#menuSpecsMaxDef','#linkmenuSpecsMaxDef'); } );
$('#menuSpecsMaxDef > a').click( function(){ optionValue(this,'#menuSpecsMaxDef','#linkmenuSpecsMaxDef'); } );

$.setMenuOffset("menuSpecsFrameRate",{'eX':0,'eY':22});
$('#linkmenuSpecsFrameRate').click( function(){ $(this).toggleMenu('#menuSpecsFrameRate','#linkmenuSpecsFrameRate'); } );
$('#menuSpecsFrameRate > a').click( function(){ optionValue(this,'#menuSpecsFrameRate','#linkmenuSpecsFrameRate'); } );

$.setMenuOffset("menuSpecsSensor",{'eX':0,'eY':22});
$('#linkmenuSpecsSensor').click( function(){ $(this).toggleMenu('#menuSpecsSensor','#linkmenuSpecsSensor'); } );
$('#menuSpecsSensor > a').click( function(){ optionValue(this,'#menuSpecsSensor','#linkmenuSpecsSensor'); } );

// wire up sliders
$("#slider_pricerange").slider({
		  minValue: 1000,
		  maxValue: 30000,
		  startValues:[1000,30000],
		  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.
			updateQueryValue("Options","","o8");
		} else {
			$(this).addClass("selected");
			updateQueryValue("Options",this.title,"o8");
		}
		ajaxResultCount();
		
 });
/*$('.selectable_mkt > a').click(function(e){ 
		var alreadySelected = (/selected/.test($(this).attr("class")));
		
		if (!alreadySelected) {
			$(".selectable_mkt > a").removeClass("selected");
			$(this).addClass("selected");
			updateLevel2(this.title);
		}
		ajaxResultCount();
 });*/

 $('.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","","o9"); break;
				case "HD Video": updateQueryValue("Options","","o4"); break;
				case "Interchangeable Lens": updateQueryValue("Options","","o10"); break;
				case "Shoulder Mount": updateQueryValue("Options","","o8"); break;
			}
		} else {
			$(this).addClass("selected");
			switch(this.title) 
			{
				case "Image Stabilization": updateQueryValue("Options","Yes","o9"); break;
				case "HD Video": updateQueryValue("Options","Yes","o4"); break;
				case "Interchangeable Lens": updateQueryValue("Options","Yes","o10"); break;
				case "Shoulder Mount": updateQueryValue("Options","Shoulder Mount","o8"); break;
			}
		}
		ajaxResultCount();
 });
// Get init data if exists.
if(!getInitData())
{
	// Update Item Count using Fixed Query Values.
	ajaxResultCount();
}

}
);

var advSliderWired=false;
function wireUpAdvSliders() {
	$("#slider_zoom").slider({
			  minValue: 8,
			  maxValue: 40,
			  startValues:[8,40],
			  slide: function(e,ui) {
				  handleSliderZoom_slide(ui.values[0],ui.values[1]);
			  },
			  stop: function(e,ui) { 
				  handleSliderZoom_stop(ui.values[0],ui.values[1]);
			  }
	});
	$("#slider_zoomdig").slider({
			  minValue: 20,
			  maxValue: 2500,
			  startValues:[20,2500],
			  slide: function(e,ui) {
				  handleSliderZoomDig_slide(ui.values[0],ui.values[1]);
			  },
			  stop: function(e,ui) { 
				  handleSliderZoomDig_stop(ui.values[0],ui.values[1]);
			  }
	});

	advSliderWired=true;
}
function displayAdvSection() {
	if ($.browser.msie) {
		 $('#menuAdvancedSpec').toggle(); 
	} else { 
		$('#menuAdvancedSpec').slideToggle(500); 
	}
	if (!advSliderWired) { wireUpAdvSliders(); }
}

// 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 "menuSpecsStorage": return {field:"Options",options:"o5"};
		case "menuSpecsMaxDef": return {field:"Options",options:"o7"};
		case "menuSpecsFrameRate": return {field:"Options",options:"o3"};
		case "menuSpecsSensor": return {field:"Options",options:"o1"};
	}
	return {field:"unk",options:null};	
}

// 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 = {};
		for (i in resetValues) {
			queryValues[i] = resetValues[i];
		}
	}
	// Sync UI.
	// Option Values:
	$("#linkmenuSpecsBrandSelect > span").text((resetValues.Manuf && resetValues.Manuf != "") ? resetValues.Manuf : "Select Brand");
	
	var advanced_values = [["Image Stabilization", "", "o7", "Yes"], 
	["HD Video", "", "o4", "Yes"],["Interchangeable Lens", "", "o10", "Yes"],["Shoulder Mount", "", "o8", "Shoulder Mount"]];
	
	// 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 zoom_values = {
		lower: 0,
		upper: 0
	};
	var zoomdig_values = {
		lower: 0,
		upper: 0
	};
	var option_storage = "", option_maxdef="", option_sensor="", option_framerate="";
	var optionIsAdvanced = false;
		
	// loop through fields.
	for (i = 0; i < attribFields.length; i++) {
		// Digital Zoom
		if (attribFields[i] == "d1g" && attribValues[i] != null && attribValues[i] != "") {
			zoomdig_values.lower = parseFloat(attribValues[i]);
		}
		if (attribFields[i] == "d1l" && attribValues[i] != null && attribValues[i] != "") {
			zoomdig_values.upper = parseFloat(attribValues[i]);
		}
		if (attribFields[i] == "d1" && attribValues[i] != null && attribValues[i] != "") {
			zoomdig_values.upper = parseFloat(attribValues[i]);
			zoomdig_values.lower = parseFloat(attribValues[i]);
		}
		// Optical Zoom
		if (attribFields[i] == "d2g" && attribValues[i] != null && attribValues[i] != "") {
			zoom_values.lower = parseFloat(attribValues[i]);
		}
		if (attribFields[i] == "d2l" && attribValues[i] != null && attribValues[i] != "") {
			zoom_values.upper = parseFloat(attribValues[i]);
		}
		if (attribFields[i] == "d2" && attribValues[i] != null && attribValues[i] != "") {
			zoom_values.upper = parseFloat(attribValues[i]);
			zoom_values.lower = parseFloat(attribValues[i]);
		}
		
		//Recording Media (Storage)
		if (attribFields[i] == "o5" && attribValues[i] != null && attribValues[i] != "") {
			option_storage = attribValues[i];
		}
		//Max Definition
		if (attribFields[i] == "o7" && attribValues[i] != null && attribValues[i] != "") {
			option_maxdef = attribValues[i];
		}
		//Sensor Type
		if (attribFields[i] == "o1" && attribValues[i] != null && attribValues[i] != "") {
			option_sensor = attribValues[i];
		}
		//Frame Rate
		if (attribFields[i] == "o3" && attribValues[i] != null && attribValues[i] != "") {
			option_framerate = 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];
			}
		}
		
	} // end for
	// Process Specs Data.
	// flag advanced section
	if ((zoomdig_values.upper && zoomdig_values.lower && (zoomdig_values.lower < zoomdig_values.upper)) || 
		(zoom_values.upper && zoom_values.lower && (zoom_values.lower < zoom_values.upper)) || 
		option_storage || option_sensor) { 
		optionIsAdvanced=true; 
	}
	if (optionIsAdvanced) { 
		if ($('#menuAdvancedSpec').css('display')=='none') { 
			displayAdvSection();
		}
	}
	// Digital Zoom Values
	if (zoomdig_values.upper && zoomdig_values.lower && (zoomdig_values.lower <= zoomdig_values.upper)) {
		$("#slider_zoomdig").sliderMoveMultipleTo(0, zoomdig_values.lower, null, true, false);
		$("#slider_zoomdig").sliderMoveMultipleTo(1, zoomdig_values.upper, null, true, false);
	}
	else {
		$("#slider_zoomdig").sliderMoveMultipleTo(0, slideRange_ZoomDig.lower, null, true, false);
		$("#slider_zoomdig").sliderMoveMultipleTo(1, slideRange_ZoomDig.upper, null, true, false);
	}
	// Optical Zoom values.
	if (zoom_values.upper && zoom_values.lower && (zoom_values.lower < zoom_values.upper)) {
		$("#slider_zoom").sliderMoveMultipleTo(0, zoom_values.lower, null, true, false);
		$("#slider_zoom").sliderMoveMultipleTo(1, zoom_values.upper, null, true, false);
	}
	else {
		$("#slider_zoom").sliderMoveMultipleTo(0, slideRange_Zoom.lower, null, true, false);
		$("#slider_zoom").sliderMoveMultipleTo(1, slideRange_Zoom.upper, null, true, false);
	}
	
	// apply option values.
	$("#linkmenuSpecsStorage > span").text(option_storage || "All Recording Media");
	$("#linkmenuSpecsMaxDef > span").text(option_maxdef || "Any Definition");
	$("#linkmenuSpecsFrameRate > span").text(option_framerate || "All Frame Rates");
	$("#linkmenuSpecsSensor > span").text(option_sensor || "All Sensor Types");
		
	// 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");
		}
	}
	
	// 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_ZoomDig = {lower:20,upper:2500,roundDecimals:0,unit:"x",_lower:20,_upper:2500,_upperChanged:false};
var slideRange_Zoom = {lower:8,upper:40,roundDecimals:0,unit:"x",_lower:8,_upper:40,_upperChanged:false};
var slideRange_Weight = {lower:0.4,upper:3,roundDecimals:0,unit:"lb",_lower:0.4,_upper:3,_upperChanged:false};
var slideRange_Price = {lower:1000,upper:30000,roundDecimals:0,unit:"$",_lower:1000,_upper:30000,_upperChanged:false};

var handleSliderWeight_slide = function(lower, upper)
{
	slideRange_Weight._lower = (lower!=0) ? lower/10 : 0;
	slideRange_Weight._upper = (upper!=0) ? upper/10 : 0;
	$("#slider_weight_value").html(slideRange_Weight._lower.toFixed(1) + slideRange_Weight.unit + " to " + slideRange_Weight._upper.toFixed(1) + 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!=0) ? lower/10 : 0;
	slideRange_Weight._upper = (upper!=0) ? upper/10 : 0;
	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 handleSliderZoom_slide = function(lower, upper)
{
	slideRange_Zoom._lower = lower;
	slideRange_Zoom._upper = upper;
	$("#slider_zoom_value").html(slideRange_Zoom._lower + slideRange_Zoom.unit + " to &lt; " + slideRange_Zoom._upper + slideRange_Zoom.unit);
}
var handleSliderZoom_stop = function(lower, upper)
{
	slideRange_Zoom._lower = lower;
	slideRange_Zoom._upper = upper;
	if (slideRange_Zoom._lower==slideRange_Zoom.lower && slideRange_Zoom._upper==slideRange_Zoom.upper)
	{
		// Clear query / at default positions.
		updateQueryValue("Options","","d2g");
		updateQueryValue("Options","","d2l");
		updateQueryValue("Options","","d2");
	}
	else if (slideRange_Zoom._lower < slideRange_Zoom._upper)
	{
		updateQueryValue("Options","","d2");
		updateQueryValue("Options",slideRange_Zoom._lower,"d2g");
		updateQueryValue("Options",slideRange_Zoom._upper,"d2l");
	} else {
		updateQueryValue("Options","","d2g");
		updateQueryValue("Options","","d2l");
		updateQueryValue("Options",slideRange_Zoom._lower,"d2");
	} 
	// Update Item Count.
	ajaxResultCount();
}
// Digital Zoom
var handleSliderZoomDig_slide = function(lower, upper)
{
	slideRange_ZoomDig._lower = lower;
	slideRange_ZoomDig._upper = upper;
	$("#slider_zoomdig_value").html(slideRange_ZoomDig._lower + slideRange_ZoomDig.unit + " to &lt; " + slideRange_ZoomDig._upper + slideRange_ZoomDig.unit);
}
var handleSliderZoomDig_stop = function(lower, upper)
{
	slideRange_ZoomDig._lower = lower;
	slideRange_ZoomDig._upper = upper;
	if (slideRange_ZoomDig._lower==slideRange_ZoomDig.lower && slideRange_ZoomDig._upper==slideRange_ZoomDig.upper)
	{
		// Clear query / at default positions.
		updateQueryValue("Options","","d1g");
		updateQueryValue("Options","","d1l");
		updateQueryValue("Options","","d1");
	}
	else if (slideRange_ZoomDig._lower < slideRange_ZoomDig._upper)
	{
		updateQueryValue("Options","","d1");
		updateQueryValue("Options",slideRange_ZoomDig._lower,"d1g");
		updateQueryValue("Options",slideRange_ZoomDig._upper,"d1l");
	} else {
		updateQueryValue("Options","","d1g");
		updateQueryValue("Options","","d1l");
		updateQueryValue("Options",slideRange_ZoomDig._lower,"d1");
	} 
	// 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();
}

