/* carl [at] featureblend.com */
function FormLibrary(dD){
var FL = /,["'\s]+(\w+)["\s']+/, sS = 0, oRef="formLib.checkField", n = navigator, DMSG = "FormLibrary RUNTIME ERROR:\n\n", gAllDt = "get_all_dt=true", BMSG = "No parent form was found.", t = this, dxr = new Object(), d = document, se = "select-one", ta = "textarea", tx = "text", pw = "password", uDT = new Object(), nDT = 0;
var isIEMAC = /mac/i.test(n.platform)&&/msie/i.test(n.userAgent);
t.dS = 0;
t.dt = t.eS = t.eO = new Object();
t.tElObj;
t.SDef = "";
t.msg;
t.tip = 1;
t.extensions = [];
var setDTXR = function(){
	var a = arguments
	if(!a[1]){
		var c = a[0].onchange.toString();
		a[1] = c.match(FL)[1];
		a[2] = (c.search(/(0)/)!=-1)?0:1;
	}else{
		a[2] = (a[2])?1:0;
	}
	if(!t.dt[a[1]]){
		t.dB(a[1]+" is an undefined datatype.");
		return false;
	}
	a[0].dt = a[1];
	a[0].req = a[2];
	return true;
}
var vD = function(eObj){
	var eV = eObj.value, vR = 1;
	if(eObj.req || (!eObj.req && eV!="") || (eObj.type==se && eV!=this.SDef)){
		var dtObj = t.dt[eObj.dt];
		vR = (eObj.req && eV=="")?0:(eV.toString().search(dtObj[0])!=-1)?1:0;
		if(vR){
			if(eV.length<dtObj[3] || eV.length>dtObj[4]){
				vR = 0;
			}
		}
		t.applyStyle(eObj,vR);
		if(!vR){
			var eStr = t.msg[0]+" " + ((eObj.type==se)?t.msg[1]+" ":t.msg[2]+" ") + dtObj[2] + ".";
			if(dtObj[1]){
				eStr += "\n" + t.msg[3] + " " + dtObj[1]+".";
			}
			t.displayMsg(eStr);
			t.setFocus(eObj);
		}
	}else{
		t.applyStyle(eObj,vR);
	}
	return vR;
}
var extM = function(o){
	var ex = t.extensions;
	for(var i=0; i<ex.length; i++){
		if(ex[i].formId==o.id){
			var tE = ex[i].init();
			if(!tE){
				return false;
			}
		}
	}
	return true;
}
var fP = function(obj,tp){
	var pN = obj.parentNode;
	if(pN.nodeName=="BODY"){
		return false;
	}else if(pN.nodeName!=tp){
		return fP(pN,tp);
	}else{
		return pN;
	}
}	
var vF = function(o){
	var el = o.elements;
	for(var i=0; i<el.length; i++){
		var p = el[i];
		if(p.onchange && p.onchange.toString().indexOf(oRef)!=-1 && (p.type==tx||p.type==ta||p.type==se||p.type==pw)){
			if(!setDTXR(p)){
				continue;
			}
			if(!vD(p)){
				return false;
			}
			
		}
	}
	return extM(o);
}
var sSH = function(o){
	var df = d.forms;
	for(var i=0; i<df.length; i++){
		df[i].onsubmit = t.onSubmit;
		df[i].onreset = t.onReset;
	}
}
t.applyStyle = function(eObj,st){
	var eT = eObj.type, sI = (st)?1:0;
	eObj.xbgC = t.eS.bgColor[sI];
	if(eObj.style){
		with(eObj.style){
			backgroundColor = t.eS.bgColor[sI];
			color = t.eS.txtColor[sI];
		}
	}
	if(t.tip & (eT==tx || eT==ta || eT==pw)){
		var dEx = t.dt[eObj.dt][1];
		if(dEx){
			eObj.title = (sI)?"":t.msg[3]+ " " +dEx+".";
			eObj.style.cursor = (sI)?"default":"help";
		}
	}		
}
t.setFocus = function(eObj){
	t.tElObj = eObj;
	setTimeout("formLib.tElObj.focus()",1);
	if(!isIEMAC && eObj.type!=se){
		setTimeout("formLib.tElObj.select()",2);
	}
}
t.dB = function(eMsg){
	if(t.dS){
		alert(DMSG + eMsg);
	}
}
t.checkField = function(eObj,dt){
	if(!setDTXR(eObj,dt,(arguments[2])?arguments[2]:0)){
		return;
	}
}
t.submitForm = function(obj){
	var nN = obj.nodeName;
	if(nN=="BUTTON"||nN=="INPUT"){
		if(obj.type.toUpperCase()=="SUBMIT"){
			return;
		}
	}
	var o = (obj.nodeName!="FORM")?fP(obj,"FORM"):obj;
	if(vF(o)){
		o.submit();
	}
}
t.onSubmit = function(){
	return vF(this);
}
t.onReset = function(){
	t.resetForm(this);
}
t.resetForm = function(obj){
	var nN = obj.nodeName, o;
	if(nN=="FORM"){
		o = obj;
	}else{
		o = fP(obj,'FORM');
		if(!o){
			t.dB(BMSG);
			return;
		}
		o.reset();
	}
	var el = o.elements;
	for(var i=0; i<el.length; i++){
		var p = el[i];
		if(p.onchange && p.onchange.toString().indexOf(oRef)!=-1 && (p.type==tx||p.type==ta||p.type==se||p.type==pw) ){
			if(!setDTXR(p)){
				continue;
			}else{
				t.applyStyle(p,true);
			}
		}
	}
	t.elementFocus();
}
t.elementFocus = function(){
	for(var i=0;i<d.forms.length;i++){
		var el = d.forms[i].elements;
		for(var j=0; j<el.length; j++){
			if(el[j].type!="hidden" && el[j].nodeName!="BUTTON"){
				t.setFocus(el[j]);
				if(el[j].type!="checkbox" && el[j].type!="radio" && el[j].type!="image"){
					el[j].style.backgroundColor = t.eS.onfocusBgColor;
				}
				return;
			}
		}
	}
}
t.getDataTypes = function(){
	for(var i in t.dt){
		alert("Data Type: "+i+"\nRegular Expression: "+this.dt[i][0]+"\nExample Format: "+this.dt[i][1]+"\nDisplay Name: "+this.dt[i][2]);
	}
}
t.displayMsg = function(s){
	alert(s);
}
t.setOFE = function(){
	var eFC = ["INPUT","SELECT","TEXTAREA"];
	for(var h=0; h<eFC.length; h++){
		var iObj = document.getElementsByTagName(eFC[h]);
		for(var i=0; i<iObj.length; i++){
			if(iObj[i].type!="checkbox" && iObj[i].type!="radio" && iObj[i].type!="image"){
				iObj[i].onfocus = function(){
					if(this.xbgC!=t.eS.bgColor[0]){
						this.style.backgroundColor = t.eS.onfocusBgColor;
					}
				}
				iObj[i].onblur = function(){
					if(this.xbgC!=t.eS.bgColor[0]){
						this.style.backgroundColor = t.eS.bgColor[1];
					}
				}
			}
		}
	}
}
t.clearElement = function(obj) {
	if(!obj.initialClick){
		obj.value="";
		obj.initialClick = true;
	}
}
t.onload = function(){
	t.setOFE();
	sSH();
	if(t.autoFocus){
		t.elementFocus();
	}
}
onloadLib.addEvent("formLib.onload()");
}
