/* Form validation Script
(c)AAJB @ blueyonder.co.uk 2010
*/
String.prototype.ltrim = function () {
    return this.replace(/^\s*/, "")
}
String.prototype.rtrim = function () {
    return this.replace(/\s*$/, "");
}
String.prototype.trim = function () {
    return this.ltrim().rtrim()
}
String.prototype.toNumber=function(){
	return parseFloat((/^-/.test(this)?'':0)+this)
}

function _checkForm(it){
	var oF=0,txt=""
	if(it.elements==undefined)return true
	for(var i=0;i<it.elements.length;i++){
		var oE=it.elements[i]
		if(oE.name!=undefined)
			if(oE.type!="hidden")
				if(/required/i.test(oE.className)){
					var oL=oE
					while(!/LABEL|FORM/i.test(oL.tagName)){oL=oL.previousSibling}
					if(oE.value==""){
						if(!oF)oF=oE
						txt+=('<b>'+((oL.tagName=="LABEL")?oL.innerHTML:oE.title)+'</b>')
						txt+=": must have an entry.<br>"
					}else if(/email/.test(oE.className)){
						oE.value=oE.value.replace( /([‘’`])/g,"'").toLowerCase()
						if(!/[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/.test(oE.value)){
							if(!oF)oF=oE
							txt+=('<b>'+((oL.tagName=="LABEL")?oL.innerHTML:oE.title)+'</b>')
							txt+=": badly formatted email address.<br>"
						}
					}	
				}
	}
	if(txt!=""){
		var o=_getObject(it.id+"error")
		if(o)o.innerHTML='<p class="error">Please check the following errors:<br>'+txt+'</p>';else alert(txt)
		_setFocus(oF)
		return false
	}
	return true
}
function _setClassName(it,remove,add,swap){
	var r,cls=it.className
	if(add==undefined)add=remove
	if(swap){r=add;add=remove;remove=r}
	r=new RegExp("(^|\\s)" + remove + "(\\b|$)","g")
	cls=cls.replace(r,'')+' '+add
//	alert("["+it.className+"] r="+remove+" a="+add+" ["+cls.trim()+"]")
	it.className=cls.trim()
}	
function _onKeyPress(it,e){
	var c = _keyCode(e)
	var cc=String.fromCharCode(c)
	if(c==8||c==9||c==0||e.ctrlKey||e.altKey)
		return true
	var cls=it.className
	if(/char/.test(cls))
		return true
	if(/postcode/.test(cls))
		return /\w+|\s+/.test(cc)
	if(/phone/.test(cls))	
		return /[\d ext\/]/.test(cc)
	if(/email/.test(cls))	
		return /[\w\.@\-&']/.test(cc)
	if(/integer/.test(cls))
		return /[\d,]/.test(cc)
	if(/smallint/.test(cls))
		return /\d/.test(cc)
	if(/date/.test(cls))
		return /[\d\/-: ]/.test(cc)
	if(/float/.test(cls))
		if(/[\d,.]/.test(cc))
			if(c==46)//check if decimal point added
				return (it.value.indexOf(".")<1)
			else	
				return true	
	return false
}
function _onKeyUp(it,e){
	_onChange(it,e)
	return true
}
function _onFocus(it){
	_setClassName(it,'focus')
	d.title=it.className
}	
function _onChange(it){
	_setClassName(it,'changed',(_hasChanged(it)?'changed':''))
}	
function _onBlur(it){
	_setClassName(it,'focus','')
}

/*
function _onReset(it){
	it.reset()
	setTimeout(function(){for(var i=0;i<it.elements.length;i++)_onChange(it.elements[i])},150)
	return false
}
*/	
function _boolean(it){
	var o=_getObject("x"+it.id)
	if(o)o.value=Math.abs(it.checked)
}
function _bit(it,id){
	var o=_getObject(id)
	if(!o)return
	var v=parseInt(o.value),b=parseInt(it.value)
	o.value=(it.checked)?(v|b):(v-(v&b))
}

