/**************************************************************************/
// Global Variable declaration
var invalidsym= /\W/g;
var invalidnos= /\d/g;
var invalidchar= /\D/g;
var imageExt = new Array([".gif"],["jpeg"],[".jpg"])
var showErrorMessage = true;
var error = true;
/*********************************************************************************/
// Checks for valid Email Address

function isEmail(element)
{
	error = true;
	var value = element.value;
	var atplace=value.search("@");
	var emaillen = value.length
	var dotplace= value.lastIndexOf(".")
	var atdotdiff=dotplace-atplace
	var atplace1=value.lastIndexOf("@")
	
	if (value=="")
		{
			if (showErrorMessage) alert("Email should not be blank");
			if (!element.readOnly) element.focus();
			error = false;
		}
	if ((atplace!=atplace1)&&(error))
		{
			if (showErrorMessage) alert("Email can have only 1 @ sign");
			if (!element.readOnly) element.focus();
			error = false;		
		}
	if ((value.search(" ")>=0)&&(error))
	{
		 if (showErrorMessage) alert("Invalid Email Address No Spaces Please");
		 if (!element.readOnly) element.focus();
		 element.select();
		 error = false;
	}
	if( ((atplace==-1) || (dotplace==emaillen)) &&(error))
	{
		if (showErrorMessage) alert("Invalid Email Address");
		element.select();				
		if (!element.readOnly) element.focus();
		error = false;
	}
	if((atdotdiff<=1) && (error))
	{
		if (showErrorMessage) alert("Invalid Email Address");
		element.select();				
		if (!element.readOnly) element.focus();
		error = false;
	}	
  return  error;
}
/*********************************************************************************/
// Checks data for Alphabets Only 
function isOnlyAlphabet(elem,m)
{
	error = true;
	
 	elem.value = trim(elem.value);	

	if(elem.value=="")
	{
		error = false;
		if (showErrorMessage) alert(m + " Field cannot be left empty");
	    if (!elem.readOnly) elem.focus();
		return Error;
	}			
		

    if(elem.value.search(invalidnos)>=0)
	{	
		error = false;
		if (showErrorMessage) alert("Please enter only Alphabets for "+ m);
		elem.select();
		if (!elem.readOnly) elem.focus();
	}
	else
		{
		   if(elem.value.search(invalidsym)>=0)
		   {
		   	    if(elem.value.search(" ")<0)
				{		   
				   error = false	;
		    	   if (showErrorMessage) alert("Symbols Not Allowed in "+m+ " field");
			       elem.select();    	
		    	   if (!elem.readOnly) elem.focus();    	
				}   
	      }  
		}   
		
 return error;
}
/**************************************************************/
function isNull(elem,m)
{
	error = true;
	if(elem.value=="")
	{
		error = false;
		if (showErrorMessage)
			{
			 if (m==null)
			    alert("You cannot leave " + m + " field empty");
			else 	
				alert(m);
			}
//	    if (!elem.readOnly) elem.focus();		
	}
	return error;
}
/*********************************************************************************/
// Checks data for Numbers Only
function isNumber(elem,m)
{
	error = true;
	var val = elem.value;
	if(isNaN(val)==true)
			{	
				error=false;
				if (showErrorMessage) 				
					alert("Please Enter only Numbers for " + m +" field" );
				elem.select();
				if (!elem.readOnly) elem.focus();
			}

	return error;
}
/*********************************************************************************/
// Checks data for Integer Numbers Only
function isInteger(elem,m)
{
	var val = elem.value;

	if (isNumber(elem,m))
	 if( val.search(invalidchar) >=0 )
			{	
				error=false;
				if (showErrorMessage) 				
					alert("Please enter only integer data type.\nDecimal places not allowed for "+m+" field");
				elem.select();
				if (!elem.readOnly) elem.focus();
			}
					
	return error;
}
/*********************************************************************************/
// Removes extra spaces from starting and ending
function trim(value)
   {
      var text = value;
      while ((text.length) && (text.charAt(0) == " ")) 
          text = text.substring(1, text.length);
              while ((text.length) && (text.charAt(text.length-1) == " "))
                   text = text.substring(0, text.length-1);
                       return text.replace(/^\s*|\s*$/g,"");
   }
/*********************************************************************************/
// Checks Uploaded file for MS Word file
function isDocFile(elem,m)
{
	error = true;
	var text=elem.value;
	text = text.substring(text.length-3, text.length);

	if (text!="doc")
		{
			error = false;
			alert("Please Select only .doc file for "+ m +" field");
			elem.select();
			if (!elem.readOnly) elem.focus();
		}	
	return error;
}
/*********************************************************************************/
// Checks Uploaded file for Acrobat PDF file
function isPdfFile(elem,m)
{
	error = true;
	var text=elem.value;
	text = text.substring(text.length-3, text.length);

	if (text!="pdf")
		{
			error = false;
			alert("Please Select only .pdf file for "+ m +" field");
			elem.select();
			if (!elem.readOnly) elem.focus();
		}	
	return error;
}
/*********************************************************************************/
// Checks Uploaded file for proper Image Files
function isImage(elem,m)
{

	error = true;
	var found = false;
	var text=elem.value;
	text = text.substring(text.length-4, text.length);

	if (text=="")
		{
		 error = false;		
		 text="*";
		}
	for(var i=0;(i<imageExt.length)&&(!found);i++)
		if (text==(imageExt[i]) )
				found = true;
	if (!found)
	 {	
		error = false;
		if (showErrorMessage) 
		 {
			var msg ="\nValid Images are\n"
			for(i=0;(i<imageExt.length)&&(!found);i++)
				msg = msg + (i+1) +") " + imageExt[i] +"\t"
			alert("Please select only valid Image files." + msg );
		}
		else 
			alert (m);
		elem.select();
		if (!elem.readOnly) elem.focus();
	 }
	return error
}
/*********************************************************************************/
// Main Function which should be called onSubmit for the form

function ValidateData(frm)
{

	error = true;
	if (frm==null) 
		{
			alert("U Have not passed any form.\nUsage\n    onSubmit=return ValidateData(this)");
			error=false;
			return false;			
		}
		
		var len = frm.elements.length;
		var msg;
		var testc;
//		var debug = true

		for(var i = 0;( (i<len)&&(error));i++)
		{
//			if (debug)  debug = confirm("Name= " + frm.elements[i].name +"\nType= " + frm.elements[i].type)

			if ((frm.elements[i].type!="submit")&&(frm.elements[i].type!="hidden"))
			{
				testc = false;
				var opt = frm.elements[i].id;			
				opt = opt.toUpperCase();				
				switch(opt)
				{
					case "REQUIRED":
								frm.elements[i].value = trim(frm.elements[i].value)
								if (frm.elements[i].value=="")
									{
										error = false;
										mess = frm.elements[i].validationmsg										
										if (frm.elements[i].type=="textarea") 
												mess = frm.elements[i].title
										if (frm.elements[i].type=="select-multiple") 
												mess = frm.elements[i].title
										alert(mess + " Field cannot be left empty");
										if (!frm.elements[i].readOnly)	frm.elements[i].focus();
									}
								else
									testc = true
								
								if (error)
								 {
									if (frm.elements[i].type=="select-one") 
									{
										if (frm.elements[i].selectedIndex==0)
											{
												alert("You have not selected any valid " + frm.elements[i].title + " option");
												if (!frm.elements[i].readOnly)	frm.elements[i].focus();
												testc = false;
												error = false;												
											}
//										if (frm.elements[i].value=="none")
//										 {
//											alert("You have not selected any valid  '"+frm.elements[i].title + "'  option");
//											if (!frm.elements[i].readOnly)	frm.elements[i].focus();
//											testc = false;
//											error = false;
//										}
									}
									else if (frm.elements[i].type=="textarea") 
										{	

											if (frm.elements[i].value=="")
											 {
												alert("You have not entered any details for '" + frm.elements[i].title + "'  field");
												if (!frm.elements[i].readOnly)	frm.elements[i].focus();
												testc = false;
												error = false;
											}									
										}									
									}
								break;				
					default :
							if (frm.elements[i].value!="") 
								testc = true;
				}
				if (testc)
				{					
					var val = frm.elements[i].param
					if (frm.elements[i].validationmsg==null)
							mess = 	frm.elements[i].name
					else 
							mess = 	frm.elements[i].validationmsg

					if (val==null) 		
						{			
							val = "Undefined"
						}
					val = val.toLowerCase()
						
					switch(val)
						{
							case "alphabet" :
										isOnlyAlphabet(frm.elements[i],mess)
										break;			
							case "date" :
										//isNull(frm.elements[i],mess)
										break;			
							case "email" :
										isEmail(frm.elements[i])
										break;
							case "integer" :
										isInteger(frm.elements[i],mess);
										break;																									
							case "decimal" :
										isNumber(frm.elements[i],mess);
										break;
							case "doc" :
										isDocFile(frm.elements[i],mess);
										break;
							case "pdf" :
										isPdfFile(frm.elements[i],mess);
										break;
							case "image" :
										isImage(frm.elements[i],mess);
										break;
							case "confirm" :
										if (frm.pass==null)
											{
												alert("Password Field cannot be left Empty");
												error = false;
												frm.elements[i].value="";
												frm.elements[i].focus();
												frm.elements[i].select();

											}
										else if (frm.pass.value!=frm.elements[i].value) 
											{
												alert("Password and Confirm fields do not match.\nPlease check the passwords");
												error = false;
												frm.pass.value=""
												frm.pass.focus();
												frm.elements[i].value="";
//												frm.elements[i].focus();
//												frm.elements[i].select();
											}
										break;
							case "alphanumeric" :
												var elem = frm.elements[i]
											   if(elem.value.search(invalidsym)>=0)
												   {	
												   	    if(elem.value.search(" ")>=0)
																{		   
																   error = false	;
															    	   if (showErrorMessage) alert("Symbols Not Allowed in "+mess+ " field");
																	       elem.select();
																		   if (!elem.readOnly) elem.focus();    	
																}   
											      }  
										break;
							default     :
/*										if (opt=="REQUIRED")
										 {	
											alert("Unhandled error please check param its value is '"+ val +"'")
											error = false;
										 }
										else
											error = true;
										break;
*/						}	
				}		
				
			}
		}	
		return error;
	}
	
	
	function countWords(elem,targetelem,maxlength)
	{
		if (elem.value.length > maxlength) 
		 {
			elem.value = elem.value.substr(0,maxlength)
			targetelem.value = elem.value.length
		}
		else
			targetelem.value = elem.value.length
	}	
	