var DEBUG = false;
//////////////////////// HMC FUNCTIONS ////////////////////////////

function updateProducts(){

	var myProd = new Array();

	for(var i=0;i<products.length;i++){
		myProd.push(i);
	}

	// check all products
	myProd = getBIProds(myProd);

	if(DEBUG)alert("getBIProds returned products "+myProd.length);

	//check only those products which satisfy Built-in/FS criteria
	myProd = getColourProds(myProd);

	if(DEBUG)alert("getColourProds returned products "+myProd.length);

	//check only those products which satisfy Built-in/FS & Colours criteria
	myProd = getPriceProds(myProd);
	if(DEBUG)alert("getPriceProds returned products "+myProd.length);

	//check only those products which satisfy Built-in/FS, Colours & Price criteria
	myProd = getUspProds(myProd);
	if(DEBUG)alert("getUspProds returned products "+myProd.length);

	//check only those products which satisfy Built-in/FS, Colours, Price & USP criteria
	myProd = getCapacityProds(myProd);
	if(DEBUG)alert("getCapacityProds returned products "+myProd.length);

	//check only those products which satisfy Built-in/FS, Colours, Price, USP & Diameter criteria
	myProd = getFunctionProds(myProd);
	if(DEBUG)alert("getFunctionProds returned products "+myProd.length);

	//check only those products which satisfy all above criteria
	myProd = getTypeProds(myProd);

	var prodStr = " product(s)";
	if(myProd != null && myProd != "" && myProd.length > 0){
		prodStr = myProd.length+prodStr;
	}else{
		prodStr = 0+prodStr;
	}
	dd.elements.matchedProds.write(prodStr);
	dd.elements.sub_but.write(myProd != null && myProd != "" && myProd.length > 0?"<input type=\"image\" src=\"../images/products/pdt_submit_but_txt.gif\" width=\"83\" height=\"25\" border=\"0\">":"");
	
	if(DEBUG)alert("Total products qualifying all criteria are "+myProd.length);
}

function getBIProds(myProd){

	if(document.hmc.state[0].checked || document.hmc.state[1].checked){
		var count = 0;
		var bi;
		var qualifyingProducts = new Array();
		if(document.hmc.state[0].checked) bi = false;
		if(document.hmc.state[1].checked) bi = true;

		for(var i=0;i<myProd.length;i++){
			if(products[myProd[i]].isBuiltIn == bi){
				count++;
				qualifyingProducts.push(myProd[i]);
			}
		}
		if(DEBUG)alert("total products found matching BI "+count);
		return qualifyingProducts;
	}else{
		if(DEBUG)alert("No Selection criteria for BI");
		return myProd;
	}
}

function getColourProds(myProd){

	var found = false;
	for(var j=0;j<document.hmc.colours.length;j++){
		if(document.hmc.colours[j].checked){
			found = true;
			break;
		}
	}

	if(!found){
		if(DEBUG)alert("No selection made for colours");
		return myProd;
	}

	var count = 0;
	var qualifyingProducts = new Array();
	for(var i=0;i<myProd.length;i++){
		found = true;
		for(var j=0;found && j<document.hmc.colours.length;j++){
			if(document.hmc.colours[j].checked){
				found = false;
				for(var k=0;k<products[myProd[i]].colours.length;k++){
					if(document.hmc.colours[j].value == products[myProd[i]].colours[k]){
						found = true;
						break;
					}
				}
			}
		}
		if(found && j == document.hmc.colours.length && j > 0){
			qualifyingProducts.push(myProd[i]);
			count++;
		}
	}
	if(DEBUG)alert("total products found matching colours "+count);
	return qualifyingProducts;
}


function getPriceProds(myProd){

	var count = 0;
	var qualifyingProducts = new Array();
	for(var i=0;i<myProd.length;i++){
		if(parseInt(products[myProd[i]].price) >= parseInt(document.hmc.minPrice.value) && parseInt(document.hmc.maxPrice.value) >= parseInt(products[myProd[i]].price)){
			qualifyingProducts.push(myProd[i]);
			count++;
		}
	}
	if(DEBUG)alert("total products found matching price "+count);
	return qualifyingProducts;
}

function getUspProds(myProd){

	var found = false;
	for(var j=0;j<document.hmc.WhirlpoolPlus.length;j++){
		if(document.hmc.WhirlpoolPlus[j].checked){
			found = true;
			break;
		}
	}

	if(!found){
		if(DEBUG)alert("No selection made for USP's");
		return myProd;
	}

	var count = 0;
	var qualifyingProducts = new Array();
	for(var i=0;i<myProd.length;i++){
		found = true;
		for(var j=0;found && j<document.hmc.WhirlpoolPlus.length;j++){
			if(document.hmc.WhirlpoolPlus[j].checked){
				found = false;
				for(var k=0;k<products[myProd[i]].usps.length;k++){
					if(document.hmc.WhirlpoolPlus[j].value == products[myProd[i]].usps[k]){
						found = true;
						break;
					}
				}
			}
		}
		if(found && j == document.hmc.WhirlpoolPlus.length && j > 0){
			qualifyingProducts.push(myProd[i]);
			count++;
		}
	}
	if(DEBUG)alert("total products found matching USP's "+count);
	return qualifyingProducts;
}

function getDiameterProds(myProd){
	if(document.hmc.diameter.value == "" || document.hmc.diameter.value == "-1"){
		if(DEBUG)alert("No selection made for Diameter OR Diameter is not searching criteria");
		return myProd;
	}

	var cid = 17;
	var sid = 652;
	var count = 0;
	var qualifyingProducts = new Array();
	prod:for(var i=0;i<myProd.length;i++){
		for(var j=0;j<products[myProd[i]].classifications.length;j++){
			if(products[myProd[i]].classifications[j].classid = cid){
				for(var k=0;k<products[myProd[i]].classifications[j].specs.length;k++){
					var s = products[myProd[i]].classifications[j].specs[k];
					if(s.specid == sid && />\s+28/.test(document.hmc.diameter.value) && s.value > 28){
						qualifyingProducts.push(myProd[i]);
						count++;
						continue prod;
					}else if(s.specid == sid && /<=\s+28/.test(document.hmc.diameter.value) && s.value <= 28){
						qualifyingProducts.push(myProd[i]);
						count++;
						continue prod;
					}
				}
			}
		}
	}
	if(DEBUG)alert("total products found matching Diameter "+count);
	return qualifyingProducts;
}

function getFunctionProds(myProd){

	var found = false;
	for(var j=0;j<document.hmc.functions.length;j++){
		if(document.hmc.functions[j].checked){
			found = true;
			break;
		}
	}

	if(!found){
		if(DEBUG)alert("No selection made for functions");
		return myProd;
	}

	//var cid = 2;
	var qualifyingProducts = new Array();
	var count = 0;
	for(var i=0;i<myProd.length;i++){
		found = true;
		var j=0;
		for(j=0; found && j<document.hmc.functions.length;j++){
			if(document.hmc.functions[j].checked){
				found = false;
				cla:for(var k=0;k<products[myProd[i]].classifications.length;k++){
					for(var l=0;l<products[myProd[i]].classifications[k].specs.length;l++){
						if(document.hmc.functions[j].value == products[myProd[i]].classifications[k].specs[l].specid){
							found = true;
							break cla;
						}
					}
				}
			}
		}
		if(found && j == document.hmc.functions.length && j > 0){
			qualifyingProducts.push(myProd[i]);
			count++;
		}
	}
	if(DEBUG)alert("total products found matching functions "+count);
	return qualifyingProducts;
}

function getTypeProds(myProd){

	var found = -1;
	for(var i=0;i<document.hmc.typeusp.length;i++){	
		if(document.hmc.typeusp[i].checked){
			found = i;
			if(document.hmc.typeusp[i].value == -1){
				if(DEBUG)alert("Not considering this parameter");
				return myProd;
			}
			break;
		}
	}

	if(found == -1){
		if(DEBUG)alert("No Selection criteria for Type ");
		return myProd;
	}
	var count = 0;
	var cid = 20;
	var sid = 192;
	var qualifyingProducts = new Array();
	var reg = new RegExp(document.hmc.typeusp[found].value,"i");

	for(var i=0;i<myProd.length;i++){
		for(var j=0;j<products[myProd[i]].classifications.length;j++){
			for(var k=0;found && k<products[myProd[i]].classifications[j].specs.length;k++){
				if((products[myProd[i]].classifications[j].specs[k].value).match(reg)){
					qualifyingProducts.push(myProd[i]);
					count++;
				}
			}
		}
	}
	if(DEBUG)alert("total products found matching Type "+count);
	return qualifyingProducts;
}

function fillKeys(){
	if(document.hmc.state[0].checked){
		document.hmc.KEY_state.value="Free-standing";
	}else if(document.hmc.state[1].checked){
		document.hmc.KEY_state.value="Built-in";
	}

	if(DEBUG)alert("document.hmc.KEY_state.value "+document.hmc.KEY_state.value);
	
	var keys = new Array();
	keys.push("Porte abattante repose plats");
	keys.push("6th sense");
	for(var i=0;i<document.hmc.WhirlpoolPlus.length;i++){
		if(document.hmc.WhirlpoolPlus[i].checked){
			document.hmc.KEY_WhirlpoolPlus.value = document.hmc.KEY_WhirlpoolPlus.value+keys[i]+",";
		}
	}
	var pattern = /,$/;
	document.hmc.KEY_WhirlpoolPlus.value = (document.hmc.KEY_WhirlpoolPlus.value).replace(pattern,"");

	if(DEBUG)alert("document.hmc.KEY_WhirlpoolPlus.value "+document.hmc.KEY_WhirlpoolPlus.value);

	keys = new Array();
	keys.push("Black");
	keys.push("White");
	keys.push("Green");
	keys.push("Blue");
	for(var i=0;i<document.hmc.colours.length;i++){
		if(document.hmc.colours[i].checked){
			document.hmc.KEY_colours.value = document.hmc.KEY_colours.value+keys[i]+",";
		}
	}
	document.hmc.KEY_colours.value = (document.hmc.KEY_colours.value).replace(pattern,"");

	if(DEBUG)alert("document.hmc.KEY_colours.value "+document.hmc.KEY_colours.value);

	keys = new Array();
	keys.push("Jet Defrost");
	keys.push("Steam");
	keys.push("Crisp");
	keys.push("Pulse Heating");
	for(var i=0;i<document.hmc.functions.length;i++){
		if(document.hmc.functions[i].checked){
			document.hmc.KEY_functions.value = document.hmc.KEY_functions.value+keys[i]+",";
		}
	}

	document.hmc.KEY_functions.value = (document.hmc.KEY_functions.value).replace(pattern,"");

	if(DEBUG)alert("document.hmc.KEY_functions.value "+document.hmc.KEY_functions.value);

	if(document.hmc.diameter[0].selected){
		document.hmc.KEY_diameter.value="Indifferent";
	}else if(document.hmc.diameter[1].selected){
		document.hmc.KEY_diameter.value="More than 28 cm";
	}else if(document.hmc.diameter[2].selected){
		document.hmc.KEY_diameter.value="Less than or equal to 28 cm";
	}

	if(DEBUG)alert("document.hmc.KEY_diameter.value "+document.hmc.KEY_diameter.value);

	if(document.hmc.typeusp[0].checked){
		document.hmc.KEY_typeusp.value="Indifferent";
	}else if(document.hmc.typeusp[1].checked){
		document.hmc.KEY_typeusp.value="Classic";
	}else if(document.hmc.typeusp[2].checked){
		document.hmc.KEY_typeusp.value="Multi-cooking";
	}

	if(DEBUG)alert("document.hmc.KEY_typeusp.value "+document.hmc.KEY_typeusp.value);

}


////////////////////////////// END HMC FUNCTIONS ///////////////////////

function my_DragFunc(){
    if (dd.obj.name.indexOf('thumb') >= 0){
		setMoveLimits();
		calculate();
    }
}

function my_DropFunc(){
    if (dd.obj.name.indexOf('thumb') >= 0){
		updateProducts();
    }
}

function setMoveLimits(){
	dd.elements.thumbr.maxoffl = tWidth - getDisplacement(dd.elements.thumbl);
	dd.elements.thumbl.maxoffr = tWidth - getDisplacement(dd.elements.thumbr);
}

function getDisplacement(d_o){
	return Math.abs(d_o.defx-d_o.x);
}

function calculate(){

	var multiplier = (maxVal - minVal)/tWidth;
	var LfractionMove = dd.elements.thumbl.x-dd.elements.thumbl.defx;
	var RfractionMove = dd.elements.thumbr.defx-dd.elements.thumbr.x;
	finalMinVal = (LfractionMove*multiplier);
	finalMaxVal = (RfractionMove*multiplier);

	var divStart = '<p class="awht8n">';
	currency = '&euro;'
	var divEnd = ' </p>';

	dd.elements.thumbl.write(divStart+Math.ceil(finalMinVal+minVal)+currency+divEnd);
	dd.elements.thumbr.write(divStart+Math.ceil(maxVal-finalMaxVal)+currency+divEnd);

	document.hmc.minPrice.value = Math.ceil(finalMinVal+minVal);
	document.hmc.maxPrice.value = Math.ceil(maxVal-finalMaxVal);
}

//initialization setting 
SET_DHTML("thumbl"+MAXOFFLEFT+0+MAXOFFRIGHT+tWidth+HORIZONTAL,"thumbr"+MAXOFFLEFT+tWidth+MAXOFFRIGHT+0+HORIZONTAL,"track"+NO_DRAG);

dd.elements.thumbl.setZ(dd.elements.track.z+1);
dd.elements.thumbr.setZ(dd.elements.track.z+1);
dd.elements.track.addChild("thumbl"); 
dd.elements.track.addChild("thumbr"); 


var minX = dd.elements.thumbl.x;
var maxX = minX+tWidth+71;

//set initial positions of markers..
dd.elements.thumbl.defx = minX;
dd.elements.thumbr.defx = maxX;

// move to initial position
if(minValDiff == 0 && maxValDiff == 0){
	dd.elements.thumbl.moveTo(minX, tY);
	dd.elements.thumbr.moveTo(maxX, tY);
}else{
	var pos = ((tWidth*minValDiff)/(maxVal - minVal))+minX;
	dd.elements.thumbl.moveTo(pos, tY);
	pos = maxX-((tWidth*maxValDiff)/(maxVal - minVal));
	dd.elements.thumbr.moveTo(pos, tY);
}

// For Updating No. Of Products...
ADD_DHTML("matchedProds");
ADD_DHTML("sub_but");

calculate();
updateProducts();
