/************************************************************************
Validation funcs written by Suresh/Manu @13 Oct 2004
************************************************************************

--------GUIDELINES FOR USAGE OF FUNCTIONS ----------------------
set the id of form elements as directed here and
call the CheckEntireForm(objForm) in the form submit evet
i.e. <form onSubmit = "return CheckEntireForm(MyFormName)" ... >

RQ-Y/N REQUIRED(SHOULD NOT BE BLANK)
NM-Y/N NAME
NU-Y/N NUMERIC
FN-Y/N FLOAT NUMERIC
NUR-Y/N NUMERIC RANGE
NURMX-n MAX NUMERIC RANGE
NURMN-n MIN NUMERIC RANGE
NRC-Y/N CHECK NUMEIC RANGE
PH-Y/N PHONE
EM-Y/N E-MAIL
CMX-n CONTROL HAS n AS MAX RANGE
CMN-n CONTROL HAS n AS MIN RANGE
CRC - Y/N CHECK CONTROL LENGTH RANGE
LBC-Y/N- CONTROL IS A LIST BOX CONTROL AND CHECK THAT A SELECTON IS MADE
MSS - XYZ... MESSAGE TO THROW IF VALIDATION FAILED
SPA - Y/N space is not allowed
FUP - Y/N if a file upload comp
TFP - P/C p=picture ; c = cv

A SAMPLE ID IS SHOWN HERE
RQ-Y|NU-Y|CMN-3|CMX-8|MSS-EMPLYOEE_INCOME_LEVEL
this field is a required field, it can only accept
numeric data and can contain only 3 to 8 char length number
it is EMPLYOEE INCOME LEVEL (notice underscore as space is not allowwd)
***********************************************************************************
*/


//Global constants for message throwing
var MESS_URL = new String("Please specify valid url(without spaces e.g. http://www.domain.com) for the field: ");
var MESS_BLANK = new String("Please specify a value for the field: ")
var MESS_RANGE = new String("Please specify valid range for the field: ")
var MESS_NUMERIC = new String("Please specify valid numeric value for the field: ")
var MESS_NAME = new String("Please specify valid name(without spaces) for the field: ")
var MESS_NUMERIC_RANGE = new String("Please specify numeric value in the specified range for the field: ")
var MESS_PHONE = new String("Please specify valid phone number(use format: xxx-xxx-xxxx) for the field: ")
var MESS_EMAIL = new String("Please specify valid E-mail Address (without spaces e.g. youremail@domain.com) for the field: ")
var MESS_CHAR_DATA = new String("Please specify value with the specified min/max length for the field: ")
var MESS_LIST = new String("Please select an option from the list:")
var MESS_START =new String("PLEASE FILL IN THE FIELDS AS SPECIFIED HERE::\n--------------------------------------------------------------------")
var MESS_FUP=new String("The file you have selected for uploading is not a valid file for the field: ")
var MESS_STRICTNUMERIC = new String("Please enter whole number for the field : ")
var MESS_PASSWORD = new String("Please enter valid value (e.g. Alphabets, Numbers, _ are also allowed) for the field :")
//x


function IsValidUrl(ctrlVal)
{
	if (IsBlank(ctrlVal)) { return true;}
	if (ctrlVal == "http://") { return true;}
	
	var j = new RegExp(); 
    j.compile("^[A-Za-z]+://[A-Za-z0-9-]+\.[A-Za-z0-9]+"); 
    if(!j.test(ctrlVal)) 
    { 
        return false; 
    } 
    return true; 
}

//Function to search  through an entire select list and highlight a specific option value based on passed arguement ObjList = Name of select list
function SelectListOption(ObjList,StrOptionValue)
{  
	for(i=0;i<document.getElementById(ObjList).length;i++)
	{
		if (document.getElementById(ObjList).options[i].text==StrOptionValue)
			{
			document.getElementById(ObjList).options[i].selected="1";
			return true;
		}
	}
	return false;		
}

//Function to check / uncheck checkbox form control
function SelectCheckBox(ObjCheckBox,boolCheck)
{
       if(boolCheck){
               ObjCheckBox.checked=true;
               return true;
               }
       else
       {
               ObjCheckBox.checked=false;
               return false;
       }
}

//get ascii char code of arg
function GetAsciiCode(argChar)
{
       var s = new String(argChar);
       return parseInt(s.charCodeAt(0));
}

//check if arg is pure numeric and a +ive whole number
function IsNumeric(sText)
{
  var ValidChars = "0123456789.";
  var IsNumber=true;
  var Char;


  for (i = 0; i < sText.length && IsNumber == true; i++)
     {
     Char = sText.charAt(i);
     if (ValidChars.indexOf(Char) == -1)
        {

        IsNumber = false;
        }
     }
  return IsNumber;

}
//check valid password
//check if arg is pure numeric and a +ive whole number
function IsPassword(sText)
{
  var ValidChars = "QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm0123456789_";
  var ret=true;
  var Char;

  for (i = 0; i < sText.length && ret == true; i++)
  {
     Char = sText.charAt(i);
     if (ValidChars.indexOf(Char) == -1)
        {
        ret= false;
        }
  }
  return ret;
}
//check if arg is pure numeric and a +ive whole number
function IsStrictNumeric(sText)
{
  var ValidChars = "0123456789";
  var IsNumber=true;
  var Char;


  for (i = 0; i < sText.length && IsNumber == true; i++)
     {
     Char = sText.charAt(i);
     if (ValidChars.indexOf(Char) == -1)
        {
        IsNumber = false;
        }
     }
  return IsNumber;

}
//func for char checking
function IsValid(argValue,argValidChars)
{
  var ValidChars = argValidChars;
  var ret=true;
  var Char;

  for (i = 0; i < argValue.length && ret == true; i++)
     {
     Char = argValue.charAt(i);
     if (ValidChars.indexOf(Char) == -1)
        {
        ret = false;
        }
     }
  return ret;
}
//check if arg is  numeric and a +ive decimal number
function IsFloatOrNumeric(argStr)
{
       var s = new String(argStr);
       var cnt=0;
       len = s.length;
       if (IsBlank(argStr)) { return false;}
       for(i=0;i<len;i++)
       {
               intCh = GetAsciiCode(s.charAt(i));

               if (intCh==46) //there can't be more than one decimal
               {
                       cnt++;
                       if(cnt>1)
                               return false;
               }

               if (intCh==46&&(i==0||i==len-1))//first char and last char cannot be decimal
               {
                        return false;
               }

               if(!((intCh>=48&&intCh<=57)||(intCh==46)))
               {
                       return false;
               }
       }
       return true;
}

//check if a string contains whitespaces or nothing ...
function IsBlank(argStr)
{
       var s = new String(argStr);
       var cnt=0;
       len = s.length;

       for(i=0;i<len;i++)
       {
               intCh = GetAsciiCode(s.charAt(i));
               if(intCh==32)
               {
                       cnt++;
               }
       }
       if ((cnt==len)||(cnt==0&&len==0))
       {

               return true;
       }
       return false;
}

function IsSpace(argStr)
{
       var s = new String(argStr);
       var cnt=0;
       len = s.length;

       for(i=0;i<len;i++)
       {
               intCh = GetAsciiCode(s.charAt(i));
               if(intCh==32)
               {
                       cnt++;
               }
       }
       if ((cnt==len)||(cnt==0&&len==0))
       {

               return true;
       }
       return false;
}

//check if a string contains special characters
function IsSpecialCharacter(argStr)
{
       var s = new String(argStr);
       var cnt=0;
       len = s.length;
       if (IsBlank(argStr)) { return false;}

       for(i=0;i<len;i++)
       {
               intCh = GetAsciiCode(s.charAt(i));
               if ((intCh>=0&&intCh<=31) || (intCh>=127&&intCh<=255))
               {
                       return true;
               }
       }
       return false;
}

//check if a string abides to a min , max range rule for an input field
function IsLengthBetweenRange(argStr,MIN,MAX)
{
       var s = new String(argStr)
       len = s.length;
       if (len<MIN||len>MAX)
       {
               return false;
       }
       return true;
}

//check valid international phone number xxx-xxx-xxxxxxxx
function IsValidInternationalPhoneFaxNumber(argStr)
{
       var s = new String(argStr);
       var cnt=0;
       len = s.length;
       
       if(len == 0)
       {
			  return true;	
       }

       if (IsThereAnyWhiteSpace(argStr)==true)
       {
               return false;
       }

       if (!(s.indexOf("-")>=0))
       {
               return false;
       }

       arr = s.split("-")

       if (arr.length!=3)
       {
               return false;
       }

       var countrycode=new String(arr[0]);
       var statecode=new String(arr[1]);
       var localcode=new String(arr[2]);
    
       
       if(countrycode.length !=3 || statecode.length!=3 || localcode.length!=4 )
       {
         return false;
       }

       if (IsNumeric(countrycode)==false||IsNumeric(statecode)==false||IsNumeric(localcode)==false)
       {
               return false;
       }

       if (IsLengthBetweenRange(countrycode,2,3)==false||IsLengthBetweenRange(statecode,2,3)==false||IsLengthBetweenRange(localcode,4,8)==false)
       {
               return false;
       }

       return true;
}

//check if arg contains no white spaces
function IsThereAnyWhiteSpace(argStr)
{
       var s = new String(argStr);
       var cnt=0;
       len = s.length;
       if (IsBlank(argStr))
       {
       return false;
       }

       if(s.indexOf(" ")>=0)
       {
               return true;
       }
       return false;
}
//check if number is between given range
function CheckNumericRange(argStr,MIN,MAX)
{
       if (IsNumeric(argStr)==true)
       {
               var n = new Number(argStr);

               if (n<MIN||n>MAX)
               {
                       return false;
               }
               else
               {
                       return true;
               }
       }
       else
       {
               return false;
       }
}
function IsValidName(argStr)
{
       var s = new String(argStr);
       var cnt=0;
       len = s.length;

       for(i=0;i<len;i++)
       {
               intCh = GetAsciiCode(s.charAt(i));
               if(!((intCh>=65&&intCh<=90)||(intCh>=97&&intCh<=122)||(intCh==46)))
               {
                       return false;
               }
       }
       return true;
}
function IsValidEmail1(argStr)
{
	
	
	/*
       var s = new String(argStr)

       if(IsBlank(s)==true) {return false;}
       if(IsThereAnyWhiteSpace(s)==true) { return false;}
       if(IsValid(s,"qwertyuiopasdfghjklzxcvbnm0123456789-_@.QWERTYUIOPASDFGHJKLZXCVBNM")==false) return false;
       if(s.indexOf('@')<1) { return false;}

       var dotCount;
       var id = new String();
       var dom = new String();

       arr=s.split('@')

       id  = arr[0];
       dom = arr[1];



       if (id.length<1) { return false;}
       if (dom.length<4) { return false;}
       if (dom.indexOf('.')<1) { return false;}
       if (dom.lastIndexOf('.')==dom.length -1) { return false; }
       //if more than one dots then return false
       //if (dom.indexOf('.') != dom.lastIndexOf('.')) { return false;}
       
       return true;
     */
    if (IsBlank(argStr)) { return true;}
	
	var j = new RegExp(); 
    //j.compile("^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@(([0-9a-zA-Z])+([-\w]*[0-9a-zA-Z])*\.)+[a-zA-Z]{2,9})$"); 
     j.compile("^[\\w-_\.]*[\\w-_\.]\@[\\w]\.+[\\w]+[\\w]$"); 
    //j.compile("/(([a-zA-Z0-9\-?\.?]+)@(([a-zA-Z0-9\-_]+\.)+)([a-z]{2,3})(\W?[,]\W?(?!$))?)+$/i");
    if(!j.test(argStr)) 
    { 
        return false; 
    } 
    return true;   
}
function IsListBoxSelected(objListBox)
{

       /*var strText = new String(objListBox.options[objListBox.selectedIndex].text)
       if (strText.toUpperCase()=='SELECT') return false;*/

       if (objListBox.options[objListBox.selectedIndex].value==0)
       {
               return false;
       }
       return true;
}
//resolve extra data passed with a control to the form and get name - value pairs
//for Example HERE CONTROL_DATA = RQ-Y|mss-NAME, MKEY LIKE 'RQ'
function GetCommand(CONTROL_DATA,MKEY)
{
       arr = CONTROL_DATA.split("|")
       for(i=0;i<arr.length;i++)
       {
               arr2=arr[i].split("-");
               if (arr2[0]==MKEY)
               {
                       return arr2[1];
               }
       }
}
/*fn :: restrict the user to select only gif,jpe,png files for photo uploading */
function IsValidFile(argStr,type)
{
       var fileExt=new Array();
       if(type.toUpperCase()=='P')//picture
       {
               fileExt[0]="GIF";
               fileExt[1]="JPEG";
               fileExt[2]="PNG";
               fileExt[3]="JPG";
       }
       if(type.toUpperCase()=='C')//cv
       {
               fileExt[0]="TXT";
               fileExt[1]="DOC";
               fileExt[2]="XLS";
               fileExt[3]="ZIP";
               fileExt[4]="HTM";
               fileExt[5]="HTML";
       }

       dt=argStr;
       if(dt.length>0)
       {
               dotpos = dt.lastIndexOf(".");
               ext = dt.substr(dotpos+1);
               for(i=0;i<fileExt.length;i++)
               {
                       if (ext.toUpperCase()==fileExt[i])
                       {
                               return true;
                       }
               }
       return false;
       }
       else
       {
               //if no file is selected then return true as there is nothin to check
               return true;
       }
       return false;
}
//***********************************************************************************************
//This function takes the form obj as arg and processes all it's elements by the ids passed to it
//***********************************************************************************************

function CheckEntireForm(objForm)
{

       var intFormElements=new Number();               //number of form elements
       var obj;                                                                //pointer to particular object of form
       var i;                                                                  //loop var
       var COMMAND_STRING = new String();              //command string of form control
       var FINAL_MESSAGE = new String();               //message to throw if validation fails


       var RQ;                                                                 //required field
       var NM;                                                                 //name field
       var NU;                                                                 //numeric fiels
       var FN;                                                                 //float numeric
       var NUR;                                                                //numeric range
       var NURMX;                                                              //if nur then max numeric range
       var NURMN;                                                              //if nur then min numeric range
       var PH;                                                                 //phone field
       var EM;                                                                 //email field

       var CMX;                                                                //field max length
       var CMN;                                                                //field min length
       var LBC;                                                                //control is a list box select
       var MSS_CONTROL;														   //mss associated with a control(message)
       var SPA;                                                                //spaces not allowed

       var NRC;
       var CRC;
       var FUP;
       var TFP;
       var STN;                                                                //STRICT NUMERIC NO DECIMALS
       var PWD;                                                                //password field

       var YES="Y";                                                    //constants for the ease of distinguishing
       var NO="N";                                                             //constants for the ease of distinguishing

       var CONTROL_VALUE;
       var m;

       //get number of form elements
       intFormElements= objForm.elements.length;

       //seperate messages for all elements
       var MESSAGE_ARRAY = new Array(intFormElements)
       //show focus on the first alert msgbox
       var flag=0;
       //loop through all elements
       for(i=0;i<intFormElements;i++)
       {
               obj = objForm.elements[i]
			
               COMMAND_STRING = obj.lang;
               //alert(COMMAND_STRING);
               COMMAND_STRING = COMMAND_STRING.toUpperCase();

               //get custom validation

			   URL					   = GetCommand(COMMAND_STRING,"URL");
               RQ                      = GetCommand(COMMAND_STRING,"RQ");
               NM                      = GetCommand(COMMAND_STRING,"NM");
               NU                      = GetCommand(COMMAND_STRING,"NU");
               FN                      = GetCommand(COMMAND_STRING,"FN");
               NUR                     = GetCommand(COMMAND_STRING,"NUR");
               NURMX				   = GetCommand(COMMAND_STRING,"NURMX");
               NURMN				   = GetCommand(COMMAND_STRING,"NURMN");
               PH                      = GetCommand(COMMAND_STRING,"PH");
               EM                      = GetCommand(COMMAND_STRING,"EM");
               CMX                     = GetCommand(COMMAND_STRING,"CMX");
               CMN                     = GetCommand(COMMAND_STRING,"CMN");
               LBC                     = GetCommand(COMMAND_STRING,"LBC");
               MSS_CONTROL			   = GetCommand(COMMAND_STRING,"MSS");
               SPA                     = GetCommand(COMMAND_STRING,"SPA");
               NRC                     = GetCommand(COMMAND_STRING,"NRC");
               CRC                     = GetCommand(COMMAND_STRING,"CRC");
               FUP                     = GetCommand(COMMAND_STRING,"FUP")
               TFP                     = GetCommand(COMMAND_STRING,"TFP")
               STN                     = GetCommand(COMMAND_STRING,"STN")
               PWD                     = GetCommand(COMMAND_STRING,"PWD")

               CONTROL_VALUE = obj.value
               
               MESSAGE_ARRAY[i]=""

               //check required
               if (RQ==YES)
               {
                       if (IsBlank(CONTROL_VALUE)==true)
                       {
                               MESSAGE_ARRAY[i] = MESS_BLANK+MSS_CONTROL
                               if (flag!=1){
                               obj.focus();
                               flag=1;
                               }
                       }
               }

				//check url
				if(URL==YES)
				{
					if(IsValidUrl(CONTROL_VALUE)==false&&MESSAGE_ARRAY[i].length==0)
					{
						MESSAGE_ARRAY[i] = MESS_URL+MSS_CONTROL;
                        if (flag!=1){
                        obj.focus();
                        flag=1;
                        }
					}
				}
				
               //check name
               if (NM==YES)
               {
                       if (IsValidName(CONTROL_VALUE)==false&&MESSAGE_ARRAY[i].length==0)
                       {
                               MESSAGE_ARRAY[i] = MESS_NAME+MSS_CONTROL;
                               if (flag!=1){
                               obj.focus();
                               flag=1;
                               }
                       }
               }
               //check strict numeric
               if (STN==YES)
               {
                       if (IsStrictNumeric(CONTROL_VALUE)==false&&MESSAGE_ARRAY[i].length==0)
                       {
                               MESSAGE_ARRAY[i] = MESS_STRICTNUMERIC+MSS_CONTROL;
                               if (flag!=1){
                               obj.focus();
                               flag=1;
                               }
                       }
               }
               //check numeric
               if (NU==YES)
               {
                       if (IsNumeric(CONTROL_VALUE)==false&&MESSAGE_ARRAY[i].length==0)
                       {
                               MESSAGE_ARRAY[i] = MESS_NUMERIC+MSS_CONTROL;
                               if (flag!=1){
                               obj.focus();
                               flag=1;
                               }
                       }
               }
               //check float numeric
               if (FN==YES)
               {
                       if (IsFloatOrNumeric(CONTROL_VALUE)==false&&MESSAGE_ARRAY[i].length==0)
                       {
                               MESSAGE_ARRAY[i] = MESS_NUMERIC+MSS_CONTROL;
                               if (flag!=1){
                               obj.focus();
                               flag=1;
                               }
                       }
               }
               //check password
               if (PWD==YES)
               {
                       if (IsPassword(CONTROL_VALUE)==false&&MESSAGE_ARRAY[i].length==0)
                       {
                               MESSAGE_ARRAY[i] = MESS_PASSWORD+MSS_CONTROL;
                               if (flag!=1){
                               obj.focus();
                               flag=1;
                               }
                       }
               }
               //check numeric with range
               if (NUR==YES)
               {
                       if(STN==YES)
                       {
                               if (IsStrictNumeric(CONTROL_VALUE)==false&&MESSAGE_ARRAY[i].length==0)
                               {
                                       MESSAGE_ARRAY[i] = MESS_NUMERIC+MSS_CONTROL;
                                       if (flag!=1){
                               obj.focus();
                               flag=1;
                               }
                               }
                       }
                       else
                       {
                               if (IsNumeric(CONTROL_VALUE)==false&&MESSAGE_ARRAY[i].length==0)
                               {
                                       MESSAGE_ARRAY[i] = MESS_NUMERIC+MSS_CONTROL;
                                       if (flag!=1){
                               obj.focus();
                               flag=1;
                               }
                               }
                       }
               }

               if (NRC==YES&&MESSAGE_ARRAY[i].length==0)
               {

                       if (CheckNumericRange(CONTROL_VALUE,NURMN,NURMX)==false&&MESSAGE_ARRAY[i].length==0)
                       {
                               MESSAGE_ARRAY[i] = MESS_NUMERIC_RANGE+MSS_CONTROL+"[Range: "+NURMN+" to "+NURMX+ " ]";
                               if (flag!=1){
                               obj.focus();
                               flag=1;
                               }
                       }
               }

               //check phone number
               if (PH==YES&&MESSAGE_ARRAY[i].length==0)
               {
                       if (IsValidInternationalPhoneFaxNumber(CONTROL_VALUE)==false&&MESSAGE_ARRAY[i].length==0)
                       {
                               MESSAGE_ARRAY[i] = MESS_PHONE+MSS_CONTROL;
                               if (flag!=1){
                               obj.focus();
                               flag=1;
                               }
                       }
               }
               //IsBlank
                       if (SPA==YES&&MESSAGE_ARRAY[i].length==0)
               {

                       if (IsSpace(CONTROL_VALUE)==false&&MESSAGE_ARRAY[i].length==0)
                       {
                               MESSAGE_ARRAY[i] = MESS_BLANK+MSS_CONTROL;
                               if (flag!=1){
                               obj.focus();
                               flag=1;
                               }
                       }
               }
               //check email
               if (EM==YES&&MESSAGE_ARRAY[i].length==0)
               {
                       if (IsValidEmail(CONTROL_VALUE)==false&&MESSAGE_ARRAY[i].length==0)
                       {
                               MESSAGE_ARRAY[i] = MESS_EMAIL+MSS_CONTROL;
                               if (flag!=1){
                               obj.focus();
                               flag=1;
                               }
                       }
               }
               //check length for character data
               if (CRC==YES&&MESSAGE_ARRAY[i].length==0)
               {
                       if (IsLengthBetweenRange(CONTROL_VALUE,parseInt(CMN),parseInt(CMX))==false&&MESSAGE_ARRAY[i].length==0)
                       {
                               MESSAGE_ARRAY[i] = MESS_CHAR_DATA+MSS_CONTROL+ " Range ("+CMN + " to " + CMX+ " )";
                               if (flag!=1){
                               obj.focus();
                               flag=1;
                               }
                       }
               }
               //check if value  from a list is selectd
               if (LBC==YES&&MESSAGE_ARRAY[i].length==0)
               {
                       if(IsListBoxSelected(obj)==false&&MESSAGE_ARRAY[i].length==0)
                       {
                               MESSAGE_ARRAY[i] = MESS_LIST+MSS_CONTROL;
                               if (flag!=1){
                               obj.focus();
                               flag=1;
                               }
                       }
               }
               //check file upload is havin a valid file upload

               if (FUP==YES&&MESSAGE_ARRAY[i].length==0)
               {
                       if (IsValidFile(CONTROL_VALUE,TFP)==false)
                       {
                               if (TFP=='P') { var e = new String("GIF,JPG,PNG")}
                               if (TFP=='C') { var e = new String("TXT,DOC,HTM,HTML,ZIP,XLS")}
                               MESSAGE_ARRAY[i] = MESS_FUP+MSS_CONTROL+" Valid file formats are : " + e;
                               if (flag!=1){
                               obj.focus();
                               flag=1;
                               }
                       }
               }

       }

       //end checking form controls
       m="";
       for(i=0;i<intFormElements;i++)
       {
               m+=MESSAGE_ARRAY[i];
       }

       if(m!="")
       {
               FINAL_MESSAGE+=MESS_START + "\n\n"

               for(i=0;i<intFormElements;i++)
               {
                       if (MESSAGE_ARRAY[i]!="")
                       {
                               //FINAL_MESSAGE+="("+parseInt(i+1)+") "+MESSAGE_ARRAY[i]+"\n";
                               FINAL_MESSAGE+=MESSAGE_ARRAY[i]+"\n";
                       }
               }
               alert(FINAL_MESSAGE);
               return false;
       }
       else
       {
               return true;
       }
}


/*****************************************************************************************
Added By : Chirag Prajapati
Purpose : For Getting Control Name in case of Edit in Client Side Code
******************************************************************************************/

//----------- Function To Change The Control Name Into Grid ---------------------------------------------
		function getControlName(oldName,newName)
		{
			var ctrlname= new String();
			var changedName= new String();
			ctrlname=oldName;
			var ind=ctrlname.lastIndexOf("_",ctrlname.length);
			changedName = ctrlname.substring(0,ind)+"_"+newName;
			return changedName;
		}
		
/*****************************************************************************************
Added By : Chirag Prajapati
Purpose : To Show Blank
******************************************************************************************/
		
		function CheckBlank(val)
		{
		if(val=='&nbsp;')
		 return '';
		else
		 return val; 
		}
		
function IsValidEmail (emailStr)
{
	var checkTLD=1;
	var knownDomsPat=/^(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum)$/;
	var emailPat=/^(.+)@(.+)$/;
	var specialChars="\\(\\)><@,;:\\\\\\\"\\.\\[\\]";
	var validChars="\[^\\s" + specialChars + "\]";
	var quotedUser="(\"[^\"]*\")";
	var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;
	var atom=validChars + '+';
	var word="(" + atom + "|" + quotedUser + ")";
	var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
	var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$");
	var matchArray=emailStr.match(emailPat);

	if (matchArray==null) 
	{
		//alert("Email address seems incorrect (check @ and .'s)");
		return false;
	}

	var user=matchArray[1];
	var domain=matchArray[2];

	for (i=0; i<user.length; i++)
	{
		if (user.charCodeAt(i)>127)
		{
			//alert("Ths username contains invalid characters.");
			return false;
   		}
	}

	for (i=0; i<domain.length; i++) 
	{
		if (domain.charCodeAt(i)>127) 
		{
			//alert("Ths domain name contains invalid characters.");
			return false;
   		}
	}

	if (user.match(userPat)==null)
	{
		//alert("The username doesn't seem to be valid.");
		return false;
	}

	var IPArray=domain.match(ipDomainPat);
	if (IPArray!=null)
	{
		for (var i=1;i<=4;i++)
		{
			if (IPArray[i]>255)
			{
				//alert("Destination IP address is invalid!");
				return false;
   			}
		}
	return true;
	}

	var atomPat=new RegExp("^" + atom + "$");
	var domArr=domain.split(".");
	var len=domArr.length;

	for (i=0;i<len;i++)
	{
		if (domArr[i].search(atomPat)==-1)
		{
			//alert("The domain name does not seem to be valid.");
			return false;
   		}
	}


	if (checkTLD && domArr[domArr.length-1].length!=2 && domArr[domArr.length-1].search(knownDomsPat)==-1) 
	{
		//alert("The email address must end in a well-known domain or two letter " + "country.");
		return false;
	}

	if (len<2) 
	{
		//alert("This email address is missing a hostname!");
		return false;
	}

return true;
}



