/**** Constants *******/
var CSS_ERROR = 'errInput';
var MSG_ERROR = 'One or more fields require valid information.';

/**** Prototypes *******/
String.prototype.trim = function()
{
	var m =  this.match(/^\s*(\S+(\s+\S+)*)\s*$/);
	return m == null ? "" : m[1];
}

/**** Utilities *******/
var util = {

	addEvent: function (obj,evType,fn,useCapture)
	{
		
		if(typeof obj == typeof "") obj = this.getElem(obj);
		
		if(obj.addEventListener)
		{
			obj.addEventListener(evType,fn,useCapture);
			return true;
		}
		else if(obj.attachEvent)
		{
			var r=obj.attachEvent('on'+evType,fn);
			return r;
		}
		else
		{
			obj['on'+evType]=fn;
		}
	},
	
	isEmpty: function(s)
	{
		return ! /^\s*(\S+(\s+\S+)*)\s*$/.test(s);
	},

	isEmail: function (s)
	{
		return  /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/.test(s);
	},

	isDigit: function (s)
	{
		return /^\s*[-\+]?\d+\s*$/.test(s);
	},

	getClass: function (id)
	{
		return getElem(id).className ;
	},

	setClass: function (id, cls)
	{
		this.getElem(id).className += (" "+cls);
	},

	removeClass: function (id, cls)
	{
		var s = this.getElem(id).className;
		this.getElem(id).className =  s.replace(new RegExp("\\b"+ cls + "\\b","ig"), '');
	},

	getElem: function (id)
	{
		return (typeof id == typeof "")?  document.getElementById(id) : id;
		
	},

	setText: function (id, txt)
	{
		this.getElem(id).innerHTML = txt;
	},
	
	handleEvent: function(e, isValid, lbl)
	{
		if(!isValid)
			window.event ? 	window.event.returnValue = false : 	e.preventDefault();
		
		var srvMsg = this.getElem('lblMsg');
		if (srvMsg)
			srvMsg.innerHTML='';
					
		if(lbl)
			isValid ? this.getElem(lbl).innerHTML = '' : this.getElem(lbl).innerHTML = MSG_ERROR; 
	},
	
	
	reset: function(elems)
	{
		var elem;
		for (i in elems)
		{
			elem = this.getElem(elems[i]);
			
			if(elem.type =='text')
			{
				elem.value = '';
				this.removeClass(elem, CSS_ERROR);
			}
			else if(elem.type == 'checkbox')
			{
				elem.checked=false;
			}
			else if(elem.type == 'select')
			{
				elem.selectedIndex=0;
				this.removeClass(elem, CSS_ERROR);
			}
		}
	},
	
	validateEmpty: function (elems)
	{
		var isValid = true;
		var elem;
		for (i in elems)
		{
			elem = this.getElem(elems[i]);
			if(this.isEmpty(elem.value))
			{
				this.setClass(elem, CSS_ERROR);
				isValid=false;
				
			}
			else
			{
				this.removeClass(elem, CSS_ERROR);
			}
		}
		return isValid;
	},
	
	validateEmail: function (elems)
	{
		var isValid = true;
		var elem;
		for (i in elems)
		{
			elem = this.getElem(elems[i]);
			if(! this.isEmpty( elem.value))
			{
				if(! this.isEmail(elem.value))
				{
					this.setClass(elem, CSS_ERROR);
					isValid=false;
				}
				else
				{
					this.removeClass(elem, CSS_ERROR);
				}
			}
		}
		return isValid;
	},
	
	validateSelect: function (elems)
	{
		var isValid = true;
		var elem;
		for (i in elems)
		{
			elem = this.getElem(elems[i]);
			if(elem.options.length ==0)
			{
				this.setClass(elem, CSS_ERROR);
				isValid=false;
				
			}
			else
			{
				this.removeClass(elem, CSS_ERROR);
			}
		}
		return isValid;
	},
	
	validateNumber:  function (elems)
	{
		var isValid = true;
		var elem;
		for (i in elems)
		{
			elem = this.getElem(elems[i]);
			if(! this.isEmpty( elem.value))
			{
				if(! this.isDigit(elem.value))
				{
					this.setClass(elem, CSS_ERROR);
					isValid=false;
				}
				else
				{
					this.removeClass(elem, CSS_ERROR);
				}
			}
		}
		return isValid;
	},
	
	validateEquality: function (a, b)
	{
		a = this.getElem(a);
		b = this.getElem(b);
		if(!(this.isEmpty(a.value) && this.isEmpty(b.value)))
		{
			if(a.value != b.value)
			{
				this.setClass(a, CSS_ERROR);
				this.setClass(b, CSS_ERROR);
				return false;				
			}
			else
			{
				this.removeClass(a, CSS_ERROR);
				this.removeClass(b, CSS_ERROR);
			}
		}
		return true;
	},
	
	RemoveCheckBoxBorder: function ()
		{
			
			var inp = document.getElementsByTagName('input');
			for (i in inp)
				try
				{
					if (inp[i].type=="checkbox")
						inp[i].className="noBorder";
				}
				catch(e){};
			
		}
	
}

