

function validInt(sVal) {
	var re=/(^\d+$)/;
	return (re.test(sVal));
}
if (String.prototype.trim==null) String.prototype.trim=new Function("return this.replace(/^\\s+|\\s+$/g,'')");
if (String.prototype.nocr==null) String.prototype.nocr=new Function("return this.replace(/(\\r\\n|[\\r\\n])/g,'')");
function wclFetcher() {
	var me=this;
	this.fnCB=null;
	this.xmlHttp=null;
	try { this.xmlHttp=new XMLHttpRequest(); }
	catch (trymicrosoft) {
		try { this.xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); }
		catch (othermicrosoft) {
			try { this.xmlHttp=new ActiveXObject("Microsoft.XMLHTTP"); }
			catch (failed) {
				this.xmlHttp=null;
			}  
		}
	}
	this.now=function(sURL) {
		var sRet="";
		if (this.xmlHttp) {
			this.xmlHttp.open("GET",wclCacheBust(sURL),false);
			this.xmlHttp.send(null);
  			if (this.xmlHttp.readyState==4)
				sRet=this.xmlHttp.responseText.nocr().trim();
		}
		return sRet;
	}	
	this.whenever=function(sURL,fnCB) {
		if (this.xmlHttp) {
			this.fnCB=fnCB;
			this.xmlHttp.open("GET",cacheBust(sURL),true);
			this.xmlHttp.onreadystatechange=this.loader;
			this.xmlHttp.send(null);
		}
	}
	this.loader=function() {
		if (me.xmlHttp) {
			if (me.xmlHttp.readyState==4 && me.xmlHttp.status==200) {
				me.fnCB(me.xmlHttp.responseText.nocr().trim());
			}
		}
	}
}
function wclCacheBust(sURL) {
	return sURL+(sURL.indexOf('?')==-1 ? '?' : '&')+'cbzz='+(new Date()).getTime();
}
function wclLoadModels(frm,selmake,selmodel,selrange,selderiv,currval,baseurl) {
	var oMake=document[frm][selmake];
	var oModel=document[frm][selmodel];

	wclClearSelect(frm,selmodel,'');
	wclClearSelect(frm,selderiv,'');
	wclClearSelect(frm,selrange,'');

	if (oMake!=null && oMake.selectedIndex>0 && oModel!=null) {
		wclClearSelect(frm,selmodel,'-- Select Model --');
		var makeid=oMake[oMake.selectedIndex].value;
		wclLoadOptions(frm,selmodel,baseurl+'?makeid='+makeid,'models',currval,baseurl);
	}
}
function wclLoadRanges(frm,selmodel,selrange,selderiv,currval,baseurl) {
	var oModel=document[frm][selmodel];
	var oRange=document[frm][selrange];

	wclClearSelect(frm,selrange,'');
	wclClearSelect(frm,selderiv,'');

	if (oModel!=null && oModel.selectedIndex>0 && oRange!=null) {
		wclClearSelect(frm,selrange,'-- Select Range --');
		var modelid=oModel[oModel.selectedIndex].value;
		wclLoadOptions(frm,selrange,baseurl+'?modelid='+modelid,'ranges',currval,baseurl);
	}
}
function wclLoadDerivs(frm,selrange,selderiv,currval,baseurl) {
	var oRange=document[frm][selrange];
	var oDeriv=document[frm][selderiv];

	wclClearSelect(frm,selderiv,'');

	if (oRange!=null && oRange.selectedIndex>0 && oDeriv!=null) {
		var rangeid=oRange[oRange.selectedIndex].value;
		wclClearSelect(frm,selderiv,'-- Select Derivative --');
		wclLoadOptions(frm,selderiv,baseurl+'?rangeid='+rangeid,'derivs',currval,baseurl);
	}
}
function wclClearSelect(frm,sel,item0) {
	var oSel=document[frm][sel];
	for (var i=oSel.length-1 ; i>=0 ; i--) oSel.options[i]=null;
	if (item0!=null) oSel.options[0]=new Option(item0,'-1');
}
function wclLoadOptions(frm,sel,url,ele,currval) {
	if (currval==null) currval=-1;

	var oSel=document[frm][sel];
	var fetch=new wclFetcher(true);
	var resp=fetch.now(url);
	if (resp!='') {
		var iCurrIDX=0;
		var iOpt=oSel.options.length;
		var asList=wclExtractXML(resp,ele).split('\|');
		var asVal=null;
		for (var i=0 ; i<asList.length-1 ; i++) {
			asVal=asList[i].split("~");
			oSel.options[iOpt]=new Option(asVal[1],asVal[0]);
			if (currval==asVal[0]) iCurrIDX=iOpt;
			iOpt++;
		}
		oSel.selectedIndex=iCurrIDX;
	}
}
function wclExtractXML(sXML,sTag) {
	var iFrom=sXML.indexOf("<"+sTag+">");
	var iTo=sXML.indexOf("</"+sTag+">",iFrom);
	return (iFrom!=-1 && iTo!=-1 ? sXML.substring(iFrom+(sTag.length+2),iTo) : "");
}





