// JavaScript Document


	var W3CDOM = (document.getElementsByTagName && document.createElement);
	
	var fldsarr;
	
	var msgsarr;
	
	var msgtype;
	
	var errors;
	
	function DomValidate(flds,msgs)
	{
		
		this.fldsarr = flds;
		this.msgsarr = msgs;
		this.validateForm=validateForm;
		this.validatetype = validatetype;
		this.writeError = writeError;
		this.removeError = removeError;
		this.name = name;
		this.nsname = nsname;
		this.phno=phno;
		this.required = required;
		this.errors=errors;
		this.msgtype=msgtype;
		this.writeErrors = writeErrors;
		this.email = email;
		this.usphone = usphone;
		this.url = url;
		this.ip = ip;
		this.mobile = mobile;
		this.postcode = postcode;
		this.number = number;
		this.namelen = namelen;
	}
	
	function validateForm(frmname)
	{
		
		var status;
	
		validForm = true;
		firstError = null;
		errorstring = '';
		this.errors = '';
		status = true;	
		for (var i=0;i<fldsarr.length;i++)
		{ 
			 var x = eval("document."+frmname).elements[this.fldsarr[i][0]];
			 for (var k=0;k<this.fldsarr[i][1].length;k++)
			 {
				 if(!this.validatetype(x,this.fldsarr[i][1][k],this.msgsarr[i][1][k]))
				 {
					status=false;
				 }
				 else 
				 {
					 this.removeError;
				 }
					//alert(x.name +"---"+status); 		
			 }
		}
		if(this.msgtype=='all')
			{
				this.writeErrors(this.errors);
			}
			//alert(status);
		return status;
					
	}
 	function validatetype(obj,type,msg)
	{
	
		switch(type)
		{	case 'required': return this.required(obj,msg);
							  break;
			
			case 'email': return this.email(obj,msg);
						   break;
			
			case 'phno': return this.phno(obj,msg);
						  break;
						 
			case 'name': return this.name(obj,msg);
			
						 break;
						 
			case 'nsname': return this.nsname(obj,msg);
							
						 break;
					
			case 'usphone': return this.usphone(obj,msg);
							 break; 
					
			case 'url':  return this.url(obj,msg);
						  break;
					
			case 'ip': return this.ip(obj,msg);
					    break;
					   
			case 'mobile': return this.mobile(obj,msg);
					        break;
					   
			case 'postcode': return this.postcode(obj,msg);
					  		 break;
					   
			case 'number': return this.number(obj,msg);
					   		break;
			
			case 'checkfile': return this.checkfile(obj,msg);
							   break;
							   
			case 'namelen': return this.namelen(obj,msg);
							   break;
					
		}
	
	}
	
 	function required(obj,msg)
	{
		switch(obj.type)
		{
			case 'checkbox': 
			if(obj.checked==false)
			{
				 if(!msg)
				 {
					this.writeError(obj,'This field is required');
				 }else{
					this.writeError(obj,msg);
				 }
				return false; 
			}
			break;
								
			case 'radio': 
			if(obj.checked==false)
			{
				 if(!msg)
				 {
					this.writeError(obj,'This field is required');
				 }else{
					this.writeError(obj,msg);
				 }
				return false; 
			}
			
			break;
				
			case 'select': 
			if(obj.selected==false)
			{
				 if(!msg)
				 {
					this.writeError(obj,'This field is required');
				 }else{
					this.writeError(obj,msg);
				 }
				return false; 
			}			   
			break;
								
			/*case 'select-multiple': 
						for(var j=0; j<obj.options.length; j++)
						{ 
							if(obj.options[j].selected)
							{ 
								this._sFormData += encodeURIComponent(elName) + '=' + encodeURIComponent(obj.options[j].value) + '&';
							}
						}
						break;*/

			default: 
			if (!obj.value)
			{
				 if(!msg)
				 {
					this.writeError(obj,'This field is required');
				 }else{
					this.writeError(obj,msg);
				 }
				return false; 
			}
						
					
		}
		
		return true;
	}
	

	function writeError(obj,message)
	{
		validForm = false;
		if (obj.hasError) return;

		var iElement;
		iElement=document.getElementById("showerrimg");
		//iElement.innerHTML="<img src='images/wrong.gif'>";
		
		if (W3CDOM)
		{
			if(this.msgtype=='one')
			{
				
			obj.className += ' error';
			obj.onchange = this.removeError;
			var sp = document.createElement('span');
			sp.className = 'error';
			//sp.appendChild(document.createTextNode(message));
			sp.innerHTML= message;
			obj.parentNode.appendChild(sp);
			obj.hasError = sp;
			}
			else 
			{
				this.errors+="<span>"+message+"<span>";
			}

		}
		else
		{
			errorstring += obj.name + ': ' + message + '\n';
			obj.hasError = true;
		}
		if (!firstError)
			firstError = obj;
	}
	
	function writeErrors(message)
	{	
		var oElement;
		oElement=document.getElementById("showallerrors");
		oElement.innerHTML="<span>"+message+"<span>";
		
		var iElement;
		iElement=document.getElementById("showerrimg");
		//iElement.innerHTML="<img src='../images/wrong.gif'>";
	}
	
	function removeError()
	{
		//this.className = this.className.substring(0,this.className.lastIndexOf(' '));
		var oElement;
		//oElement=document.getElementById("showerrimg");
		//oElement.innerHTML="<img src='../images/tick.gif'>";
		this.parentNode.removeChild(this.hasError);
		this.hasError = null;
		this.onchange = null;
	}



/* Validation functions start here..... */



	function email(obj,msg)
	{
		if (obj.value)
		{
		if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(obj.value))
			{
				return true;
			}else
			{
			  if(!msg)
			  this.writeError(obj,'Please enter a valid email address');
			  else this.writeError(obj,msg);
			  return false;
			}  
	    }
	  return true;
	}
	
	function phno(obj,msg)
	{	if(obj.value)
		{
		if (/^(\+?\d{2}\s?)?\(\d{2}\)\s?\d{4}\s?\d{4}$/.test (obj.value))
			{
				return true;
			}
		else
		{
			  if (/^(\+?\d{2}\s?)?\[\d{2}\]\s?\d{4}\s?\d{4}$/.test (obj.value))
			  {
				  return true;
			  }
			  else
			  {
				   if (/^(\+?\d{2}\s?)?\d{2}\s?\d{4}\s?\d{4}$/.test (obj.value))
				  {
					  return true;
				  }
				  else
				  {
					  if(!msg)
					  this.writeError(obj,'Please enter a valid US Phone Number');
					  else this.writeError(obj,msg);
					  
				  }return false;
			  }
			}  
	    }
	  return true;
	}
	function name(obj,msg)
	{	if(obj.value)
		{
		if(/^\w+\s*[a-z\']+/i.test(obj.value))
		{
			return true;
		}
		else
		{
		   if(!msg)
		   this.writeError(obj,'Please enter a valid name');
		   else this.writeError(obj,msg);
		   return false;
		} 
		}
		
	  return true;
	}
	/* to check whether name is atleast nore than 2 chars */
	function namelen(obj,msg)
	{	if(obj.value)
		{
		if(obj.value.length>2)
		{
			return true;
		}
		else
		{
		   if(!msg)
		   this.writeError(obj,'Please enter a valid name');
		   else this.writeError(obj,msg);
		   return false;
		} 
		}
		
	  return true;
	}
	
	function nsname(obj,msg)
	{	if(obj.value)
		{
			
		if(/^[a-z\']+$/i.test(obj.value))
		{
			
			return true;
		}
		else
		{
		   if(!msg)
		   this.writeError(obj,'Please enter a valid name');
		   else this.writeError(obj,msg);
		   return false;
		} 
		}
		
	  return true;
	}
	
	function usphone(obj,msg)
	{
		var phstring=obj.value;
		var phoneval=phstring.replace(/[\+\(\)\.\-\ ]/g,'')
		if (phoneval)
		{
		if (/^(\+?\d{2}\s?)?\([0-9]\d{2}\)\s?\d{3}\-?\d{4}$/.test (phoneval))
			{
				return true;
			}
		else
		{
			  if (/^(\+?\d{2}\s?)?\[[0-9]\d{2}\]\s?\d{3}\-?\d{4}$/.test (phoneval))
			  {
				return true;				  
			  }
			  else
			  {
				   if (/^(\+?\d{2}\s?)?[0-9]\d{2}\s?\d{3}\-?\d{4}$/.test (phoneval))
				  {
					return true;					  
				  }
				  else
				  {
					  if(!msg)
					  this.writeError(obj,'Please enter a valid US Phone Number');
					  else this.writeError(obj,msg);
					  return false;
				  }
			  }
			}  
	    }
	  return true;
	}
	function url(obj,msg)
	{
		if (obj.value)
		{
		if (/^(http:\/\/www.|https:\/\/www.|ftp:\/\/www.|www.){1}([\w]+)(.[\w]+){1,2}$/.test (obj.value))
			{
				return true;	
			}else
			{
			  if(!msg)
			  this.writeError(obj,'Please enter a valid URL');
			  else this.writeError(obj,msg);
			  return false;
			}  
	    }
	  return true;
	}
	function ip(obj,msg)
	{
		if (obj.value)
		{
		if ((obj.value != "0.0.0.0") && (obj.value != "255.255.255.255"))
		{
				if (/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/.test (obj.value))
				{
					return true;
					
				}
				else
				{
					
				  if(!msg)
				  {
				  	this.writeError(obj,'Please enter a valid IP Address');
				  }
				  else
				  {
					  this.writeError(obj,msg);
				  }
				  return false;
				}
				
				
		}
			else
			{
				 if(!msg)
			  	 this.writeError(obj,'Please enter a valid IP Address');
			  	 else this.writeError(obj,msg);
				 return false;
			}
	    }
	  return true;
	}
	
	function mobile(obj,msg)
	{
		if (obj.value)
		{
		if (!(isNaN(obj.value)) && (obj.value.length>9))
			{
				return true;
			}else
			{
			  if(!msg)
			  this.writeError(obj,'Please enter a valid mobile number');
			  else this.writeError(obj,msg);
			  return false;
			}  
	    }
	  return true;
	}
	
	function postcode(obj,msg)
	{
		if (obj.value)
		{
		if (!isNaN(obj.value) && obj.value.length>3)
			{
				return true;
			}else
			{
			  if(!msg)
			  this.writeError(obj,'Please enter a valid postcode');
			  else this.writeError(obj,msg);
			  return false;
			}  
	    }
	  return true;
	}
	
	function number(obj,msg)
	{
		if (obj.value)
		{
		if (!isNaN(obj.value))
			{
				return true;
			}else
			{
			  if(!msg)
			  this.writeError(obj,'Please enter a valid Number');
			  else this.writeError(obj,msg);
			   return false;
			}  
	    }
	 return true;
	}
	
	function checkfile(obj,msg)
	{
		if (obj.value)
		{
		if (/^[\w+\s*]+.[pdf|doc|txt|jpg|gif]+/i.test (obj.value))
			{
				return true;	
			}else
			{
			  if(!msg)
			  this.writeError(obj,'Invalid File Extension');
			  else this.writeError(obj,msg);
			  return false;
			}  
	    }
	  return true;
	}
