	
function arrayContainsValue(array,value) {
	for (var i=0; i<array.length; i++) {
		if (value==array[i]) return true;
	}
	return false;
}

var allParams;
var rows;
var form;
var searchObject;
var newParamsPopUp

// Utils
function isKeySet(object,testkey) {
	for(key in object) {
		if (testkey==key) return true;
	}
	return false;
}

var extraheight=0;

function resizeProductSearch() {
	if (window.self && self.innerHeight) {
		var h=self.innerHeight;
	} else if (document.documentElement && document.documentElement.clientHeight) {
		var h=document.documentElement.clientHeight;
	}
	
	var imageHeight=document.getElementById("tlheight").value;

	document.getElementById("searchleft").style.height=(h-extraheight).toString()+"px";
	document.getElementById("searchright").style.height=(h-extraheight).toString()+"px";
	document.getElementById("searchresults").style.height=(h-extraheight-imageHeight).toString()+"px";

	
	if(document.getElementById("family_column")!==null) {
		document.getElementById("searchright").style.width=(document.getElementsByTagName('body').item(0).offsetWidth-stuffwidth).toString()+"px";
	}
	

	refreshTimelineImage();
}

function productColumnChanged() {
	productSearchChanged();

}

function productDataChanged() {
	var inputs=form.getElementsByTagName("input");
	
	var values={};
	for (var i=0; i<inputs.length; i++) {
		var input=inputs[i];
		
		if (input.type=="checkbox") {
			var attr=document.getElementById(input.name + "_div")
			
			if (attr) {
				attr.parentNode.style.backgroundColor=(input.checked ? "#ddeeff" : "white");
			
				attr.style.display=(input.checked ? "block" : "none");
			}
		}
	}
	
	productSearchChanged();

}

function getHTTPObject() {
  var xmlhttp;
  /*@cc_on
  @if (@_jscript_version >= 5)
    try {
      xmlhttp = new ActiveXObject('Msxml2.XMLHTTP');
    } catch (e) {
      try {
        xmlhttp = new ActiveXObject('Microsoft.XMLHTTP');
      } catch (E) {
        xmlhttp = false;
      }
    }
  @else
  xmlhttp = false;
  @end @*/
  if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
    try {
      xmlhttp = new XMLHttpRequest();
    } catch (e) {
      xmlhttp = false;
    }
  }
  return xmlhttp;
}


function awakeProductSearch() {
	searchObject=getHTTPObject();
	form=document.getElementById("searchform");
	
	extraheight=document.body.scrollHeight-document.getElementById("searchleft").offsetHeight+2;
	
	if(document.getElementById("family_column")!==null) {
		var swidth=document.getElementById("searchright").scrollWidth-20;
		document.getElementById("searchright").style.width=(swidth).toString()+"px";
		stuffwidth=document.getElementsByTagName('body').item(0).offsetWidth-swidth;
	}
	
	resizeProductSearch();
	
	productDataChanged();
}



function productSearchChanged() {

	productSearchGetResults();
}

function productSearchGetValues() {
	var rows=form.getElementsByTagName("div");
	
	var values={};
	for (var i=0; i<rows.length; i++) {
		var row=rows[i];
		var key=row.id.substring(0,row.id.length-4);
		var type=row.className.substring(6,row.className.length);
		if (row.style.display!="block") continue; 

		if (type=="list") {
			var value="";
		
			var options=row.getElementsByTagName("option");
			var count=0;
			for (var j=0; j<options.length; j++) {
				var option=options[j];
				if (option.selected) {
					if (value.length>0) value+=" ";
					value+=option.value;
					
					count++;
				}
			}
			if (count<options.length && value.length>0) values[key]=value;
		} else if (type=="discrete") {
		
			var selects=row.getElementsByTagName("select");
			var min=selects[0].value;
			var max=selects[1].value;
			
			if (max=='exactly') var value=min;
			else var value=min+"-"+max;


			if (value!="any-any" && value!="any") values[key]=value;
		} else if (type=="text") {
			var input=row.getElementsByTagName("input");
			var value=input[0].value;
			if (value.length>0) values[key]=value;
		}
	}
	
	return values;
}

function makeurl(action,values) {
	var search="";
	for (key in values) {
		search+=key+"="+escape(values[key])+"&";
	}
	search=search.substring(0,search.length-1);
	
	search=search.replace("%20","+");

	if(search.length>0 || action=="") return action+'?'+search;
	else return action;
}

var lasturl='';

function productSearchGetResults() {
	var values=productSearchGetValues();

	var inputs=form.getElementsByTagName("input");
	
	var columns="";
	for (var i=0; i<inputs.length; i++) {
		var input=inputs[i];
		
		if (input.type=="checkbox") {
			var attr=document.getElementById(input.name+"_div")
			
			if (attr==null) {
				if (input.checked) {
					if (columns.length>0) columns+=" ";
					columns+=input.name.substring(0,input.name.length-7);
				}
			}
		}
	}
	
	
	if(columns.length>0) values['columns']=columns;

   	document.getElementById("lttp").innerHTML="<a href=\""+makeurl("",values)+"\">Link to these results</a>";

	values['sector']=document.getElementById("sector").value;

	var url=makeurl('/ajax/productsearchresults/',values);

	if (url==lasturl)
	{
		return;
	}


   	document.getElementById("busy").style.display="inline";


	lasturl=url;

	searchObject.open('GET', url, true);
	searchObject.onreadystatechange = productSearchResultsArrived;
	searchObject.send(null);
}

function productSearchResultsArrived() {
  if (searchObject.readyState == 4 ) {
    	document.getElementById("searchresults").innerHTML=searchObject.responseText;

	refreshTimelineImage();
    	
    	document.getElementById("busy").style.display="none";
    	
  }

}

var lastWidth=0;

function refreshTimelineImage() {

	var width=document.getElementById("searchresults").offsetWidth;
	
	var search="";
	var values=productSearchGetValues();


	values['sector']=document.getElementById("sector").value;

	for (key in values) {
		search+=key+"="+escape(values[key])+"&";
	}
	search=search.substring(0,search.length-1);

	var src='/ajax/productsearchresults/timeline?imagewidth='+width+'&'+search;
	if (width!=lastWidth) {
		var timeline=document.getElementById("timelinediv");
		timeline.innerHTML='<input id="timeline" type="image" name="timeline" ismap="ismap" alt="Graphical timeline" src="'+src+'" />';

		lastWidth=width;
	} else {
		var timeline=document.getElementById("timeline");
		timeline.src=src;
	}
	
	document.getElementById("timelinewidth").value=width;

}


if (undefined===window.awakeProcs) {
	window.awakeProcs=[];
}

window.awakeProcs[window.awakeProcs.length]=awakeProductSearch;

