 
	var arrSpCharUN = new Array('`','~','!','#','$','%','^','&','*','(',')','=','}','{','+','\/',',','\"',':',';',' ','<','>',"\\",'|','?');
	var arrSpCharPW = new Array('`','~','!','#','%','^','=','}','{','+','/',',','\"',':',';',' ','<','>',"\\",'|','?');
	var arrSpCharCQ = new Array('~','#','$','%','^','=',"\\",'|');
	var arrSpCharANS = new Array('~','#','$','%','^','=',"\\",'|','?');	
	var arrSpCharFNLN = new Array('~','!','@','#','$','%','^','&','*','_','=','}','{','+','/',',','\"',':',';','.','<','>',"\\",'|','?');
	var arrSpCharEM = new Array('`','~','!','#','$','%','^','&','*','(',')','=','}','{','+','/',',','\"',':',';',' ','<','>',"\\",'|','?');
	var arrSpCharCNJT = new Array('~','!','#','$','%','^','*','=','}','{','+','/','\"',':',';','<','>',"\\",'|','?');	
	var arrSpCharADST = new Array('~','!','#','$','%','^','=',"\\",'|','?');	
	var arrSpCharZIPHFA = new Array('`','~','!','@','$','%','^','&','*','_','=',',','\"',':',';','<','>',"\\",'|','?');
	var arrSpCharVal=new Array('`','~','!','@','#','$','%','^','&','*','(',')','_','-','=','}','{','+','/',',','\"',':',';','.',' ','<','>',"\\",'|','?');	
	
	var newWin;
    	var passwd;
	var emailT;
	
	function validate(frm, strMandatory, strInt, strDecimal, strNotNeg, strDate, strMail, strNoSpChar, strNaN){
		for(i =0; i < frm.elements.length; i++){
			var formElement = frm.elements[i];
			//alert(formElement.type);
			if(formElement.type == 'select-one' || formElement.type=='text' || formElement.type == 'password' || formElement.type == 'textarea' ){
				trimText(formElement);
				var arrTemp;
				if (strMandatory != "" ){
					arrTemp = strMandatory.split("|");
					for(j =0; j < arrTemp.length; j++){
						if(!validateMandatory(formElement, arrTemp[j]) )
							return false;
				 }
				}
				if(formElement.name=='username'){
					if(formElement.value.length<5){
						alert("Username should be minimum 5 characters");
						formElement.focus();
						formElement.select();
						return false;
					}
				}		
				if(formElement.name=='challengeQuestion'){
					if(formElement.value.length<5){
						alert("Challenge Question should be minimum 5 characters");
						formElement.focus();
						formElement.select();
						return false;
					}
				}					
				if((formElement.name=='challengeResponse')||(formElement.name=='challengeAnswer')){
					if(formElement.value.length<5){
						alert("Challenge Answer should be minimum 5 characters");
						formElement.focus();
						formElement.select();
						return false;
					}
				}	
				
				if(formElement.name == 'password')
				{
				 if (!validatePassword1(formElement,'pswd'))
				 {
				  return false;
				 }
				}
				
				if (formElement.name == 'verifypassword')
				{
				 if (!validatePassword1(formElement,'confirmpswd'))
				 {
				  return false;
				 }
				}
				
				if (strInt != "" ){
					arrTemp = strInt.split("|");
					for(j =0; j < arrTemp.length; j++){
						if(!validateInt(formElement, arrTemp[j]) )
							return false;
					}
				}

				if (strDecimal != "" ){
					arrTemp = strDecimal.split("|");
					for(j =0; j < arrTemp.length; j++){
						if(!validateDecimal(formElement, arrTemp[j]) )
							return false;
					}
				}

				if (strNotNeg != "" ){
					arrTemp = strNotNeg.split("|");
					for(j =0; j < arrTemp.length; j++){
						if(!validateNotNeg(formElement, arrTemp[j]) )
							return false;
					}
				}

				if (strDate != "" ){
					arrTemp = strDate.split("|");
					for(j =0; j < arrTemp.length; j++){
						if(!validateDate(formElement, arrTemp[j]) )
							return false;
					}
				}

				if (strMail != "" ){
					arrTemp = strMail.split("|");
					for(j =0; j < arrTemp.length; j++){
						if(!validateEmail(formElement, arrTemp[j]) )
							return false;
					}
				}

				if (strNaN != "" ){
					arrTemp = strNaN.split("|");
					for(j =0; j < arrTemp.length; j++){
						if(!validateNaN(formElement, arrTemp[j]) )
							return false;
					}
				}

				if (strNoSpChar != "" ){
					arrTemp = strNoSpChar.split("|");
					for(j =0; j < arrTemp.length; j++){
						if(!validateNoSpChar(formElement, arrTemp[j]) )
							return false;
					}
				}
			}
		}
		return true;
	}

	function decideSpCharArray(val){
		var arrValue=arrSpCharVal;
		if(val=='username'){
		   arrValue=arrSpCharUN;
		}		
		if((val=='password')||(val=='newPassword')){
		   arrValue=arrSpCharPW;
		}		
		if(val=='challengeQuestion'){
		   arrValue=arrSpCharCQ;
		}		
		if(val=='challengeResponse'||val=='challengeAnswer'){
		   arrValue=arrSpCharANS;
		}		
		if(val=='firstName'||val=='lastName'){
		   arrValue=arrSpCharFNLN;
		}		
		if(val=='email'){
		   arrValue=arrSpCharEM;
		}			
		if(val=='companyName'||val=='jobTitle'){
		   arrValue=arrSpCharCNJT;
		}			
		if(val=='address1'||val=='state'){
		   arrValue=arrSpCharADST;
		}			
		if(val=='phone'||val=='postalCode'||val=='fax'){
		   arrValue=arrSpCharZIPHFA;
		}	
		//alert("arrValue "+arrValue);
		return arrValue;
	}
	
	function validateMandatory ( formElement, substr  )
	{
		var arrMand = substr.split(":");
		
		if (formElement.name.indexOf(arrMand[0]) == 0)
		{
		   	if (formElement.type == "select-one" && formElement.name == 'state')
			{
			var stateVal = document.forms[0].state.selectedIndex;  
			  
			  if(stateVal == 0)
			  {
			   alert("Please select the State/Province.");
			   formElement.focus();
			   return false;
			  }				
			}
			if(formElement.value=="")
			{
			  
			  
			  if(arrMand[1] == "City")
			  {
			  alert("Please type in the City.");
			  }
			  else if(arrMand[1] == "Postal Code")
			  {
			  alert("Please type in the Zip / Postal Code.");
			  }
			  else if(arrMand[1] == "Address1")
			  {
			   alert("Please type in your Address.");
			  }
			  else if(arrMand[1] == "First Name")
			  {
			   alert("Please type in your First Name.");
			  }						
			  else if(arrMand[1] == "Last Name")
			  {
			   alert("Please type in your Last Name.");
			  } 
			  else if(arrMand[1] == "Phone")
			  {
			   alert("Please type in your Phone.");
			  }
			  
			  else if(arrMand[1] == "Confirm Pasword") 
			  {
				alert("Please confirm your Password");
			  }
			  else if (arrMand[1] == "Confirm Email Address")
			  {
				alert("Please confirm Email Address.");
			  }
			  else if (arrMand[1] == "Service Provider Code")
			  {
				alert("Please provide Service Provider Code");
			  }else				
			  {
			 	 alert("Please type in a "+arrMand[1]);
			  }
						
				formElement.focus();
				formElement.select();
				return false;
			}
		}
		return true;
	}
	
	function validateInt ( formElement, substr  )
	{
		var arrInt = substr.split(":");
		if (formElement.name.indexOf(arrInt[0]) == 0)
		{
			var elem = formElement.value;
			if( isNaN(elem) )
			{
				alert(arrInt[1]+" must be a Number");
				formElement.focus();
				formElement.select();
				return false
			}
			else if( elem.indexOf(".") >= 0 )
			{
				alert(arrInt[1]+" must be an Integer"); 
				formElement.focus();
				formElement.select();
				return false
			}
		}
		return true;
	}

	function validateDecimal ( formElement, substr  )
	{
		var arrDecimal = substr.split(":");
		var maxVal = arrDecimal[2]-0;
		if (formElement.name.indexOf(arrDecimal[0]) == 0)
		{
			var elem = formElement.value;
			if( isNaN(elem) )
			{
				alert(arrDecimal[1]+" must be a Number");
				formElement.focus();
				formElement.select();
				return false
			}
			else if( arrDecimal.length > 2 && elem > maxVal )
			{
				alert(arrDecimal[1]+" must not exceed "+arrDecimal[2]); 
				formElement.focus();
				formElement.select();
				return false
			}
			else if( ( elem.indexOf(".") != -1 && elem.length - elem.indexOf(".") ) > 3) 
			{
				alert(arrDecimal[1]+" must have values only upto two decimal points");
				formElement.focus();
				formElement.select();
				return false
			}
		}

		return true;
	}

	function validateNotNeg ( formElement, substr  )
	{
		var arrNotNeg = substr.split(":");
		if (formElement.name.indexOf(arrNotNeg[0]) == 0)
		{
			var elem = formElement.value;
			if( isNaN(elem) || elem < 0)
			{
				alert(arrNotNeg[1]+" must be a Postive Number");
				formElement.focus();
				formElement.select();
				return false
			}
		}
		return true;
	}

	function validateNaN ( formElement, substr  )
	{
		var arrNaN = substr.split(":");
		if (formElement.name.indexOf(arrNaN[0]) == 0)
		{
			var elem = formElement.value;
			if( elem !="" && !isNaN(elem) )
			{
			 alert(arrNaN[1]+" cannot be a Number");
			 formElement.focus();
			 formElement.select();
			 return false
		    }
		}
		return true;
	}

	function validateDate ( formElement, substr  ){
		var arrDate = substr.split(":");

		if (formElement.name.indexOf(arrDate[0]) == 0){
			var elem = formElement.value;
			if (!elem ==""){
/*
				if( !isCorrectDateFormat(formElement, arrDate[1]) ){
					formElement.focus();
					formElement.select();
					return false
				}
*/
			}
		}
		return true;
	}

	function validateNoSpChar ( formElement, substr  ){
		var arrNoSpChar = substr.split(":");
		//alert(arrNoSpChar+"inside valNoSpChar"+formElement.name);		
		var arrSpChar=arrSpCharVal;
		if(formElement.name.indexOf(arrNoSpChar[0]) == 0){
			arrSpChar=decideSpCharArray(formElement.name);		
			var strSpChar="";
			strSpChar = "  ";
			for (k = 0; k < arrSpChar.length-1 ; k++ )	{
				strSpChar += arrSpChar[k]+" ,  ";
			}
			strSpChar += arrSpChar[arrSpChar.length-1]+"  ";

			if (formElement.name.indexOf(arrNoSpChar[0]) == 0){
				if(!(formElement.name=='state'&&formElement.type=='select-one')){			
				for (k = 0; k < arrSpChar.length ; k++ ){
					var elem = formElement.value;
					if( elem.indexOf( arrSpChar[k] ) >= 0 ){
						alert(arrNoSpChar[1]+" should not have any of the following special characters :\n"+strSpChar);
						formElement.focus();
						formElement.select();
						return false
					}
				}
				}
			}
		}
		return true;
	}

	function validateEmail ( formElement, substr  ){
		var arrMail = substr.split(":");
		

		if (formElement.name.indexOf(arrMail[0]) == 0)
		{
			var elem = formElement.value;
			
			if( !isValidEmailId(elem) )
			{
				alert("Please type in a valid "+arrMail[1]);
				formElement.focus();
				formElement.select();
				return false
			}
			
			if(formElement.name == 'email')
			{
			 emailT = formElement.value;
			}
			if(formElement.name == 'Confirmemail')
			{
			 if(emailT != formElement.value)
			 {
			  alert("Your Email & Confirm Email addresses should be the same.");
			  formElement.focus();
			  formElement.select();
			  return false
			  return false;
			 }
			}
			
		}
		
		return true;
	}

	function isValidEmailId(mail){
		if(mail.length == 0) {
			return true;
		}
		var str = mail.substring(0,mail.indexOf("@"));
		var str1 = mail.substring(mail.indexOf("@"),mail.length);
		var str2 = str1.substring(0,str1.indexOf("."));
		var str3 = str1.substring(str1.indexOf(".")+1,mail.length);
		var arrSpChar = new Array('`','~','!','#','$','%','^','&','*','(',')','=','}','{','+','/',',','\"',':',';',' ','<','>','|','?');
		for(h=0; h<arrSpChar.length; h++){
			if(mail.indexOf( arrSpChar[h] ) >= 0){
				return false;
			}
		}
		if( str1.substring(1,str1.length).indexOf('@') >= 0 ) {
			return false;
		}
		if( str3.length < 2) {
			return false;
		}
		if(str.indexOf('.') == str.length-1 || str.indexOf('.') == 0){
			return false;
		}
		if(str.length == 0 ) {
			return false;
		}
		if(str1.length == 0 ) {
			return false;
		}
		if(str3.length == 0 ) {
			return false;
		}
		for(var i=0;i<=mail.length;i++) {
			if (mail.substring(i,i+1)==" ") {
				return false;
			}
		}
		if(str2.length == 1 || str2.length ==0) {
			return false;
		}
	     return true;
	}

	function isCorrectDateFormat(dateObject,stringToDisplay){
		var strMonth;   //string which holds month string 
		var flag=0; //not matched month
		var intMonth = 0;
		var intDay = 0;
		var intYear = 0;
		var strMonthArray = new Array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec");
		if(dateObject.value=="")	{
			return false;
		}
	
		var splitArray = dateObject.value.split("-");


		if(dateObject.value.length !=11)
			{
			alert(stringToDisplay+" format should be dd-Mon-yyyy");
			dateObject.focus();
			return false;
			}

		if(splitArray.length !=3)
			{
			alert(stringToDisplay+" format should be dd-Mon-yyyy");
			dateObject.focus();
			return false;
			}

		if(splitArray[0].length !=2) 
			{
			alert(stringToDisplay+" format should be dd-Mon-yyyy");
			dateObject.focus();
			return false;
			}

		intDay = splitArray[0];


		if(splitArray[1].length!=3) 
			{
			alert(stringToDisplay+" format should be dd-Mon-yyyy");
			dateObject.focus();
			return false;
			}

		if(splitArray[2].length!=4) 
			{
			alert(stringToDisplay+" format should be dd-Mon-yyyy");
			dateObject.focus();
			return false;
			}

		if(isNaN(splitArray[2])) 
			{
			alert(stringToDisplay+" format should be dd-Mon-yyyy");
			dateObject.focus();
			return false;
			}

		intYear = splitArray[2];

		if((intYear<1940)||(intYear>2020)) 
			{
			alert(stringToDisplay+" format should be dd-Mon-yyyy");
			dateObject.focus();
			return false;
			}


		if(isNaN(splitArray[0])) 
			{
			alert(stringToDisplay+" format should be dd-Mon-yyyy");
			dateObject.focus();
			return false;
			}


		for (i=0;i<12;i++) 
			{
			if (splitArray[1].toUpperCase() == strMonthArray[i].toUpperCase()) 
				{
				intMonth = i+1;
				strMonth = strMonthArray[intMonth-1];
				//dateObject.focus();
				flag=1;
				i = 100;                           //to come out of the loop
				}
			}

				
			if(flag==0)
				{
				dateObject.focus();
				alert(stringToDisplay+" format should be dd-Mon-yyyy");
				//alert("month does not match");	
				return false;
				}

		//inDay, intMonth,intYear all available over here...




		if ((intMonth == 1 || intMonth == 3 || intMonth == 5 || intMonth == 7 || intMonth == 8 || intMonth == 10 || intMonth == 12) && (intDay > 31 || intDay < 1)) 
		{
		dateObject.focus();
		alert(stringToDisplay+" format should be dd-Mon-yyyy");
		return false;
		}

		if ((intMonth == 4 || intMonth == 6 || intMonth == 9 || intMonth == 11) && (intDay > 30 || intDay < 1)) 
		{
		dateObject.focus();
		alert(stringToDisplay+" format should be dd-Mon-yyyy");
		return false;
		}


		if (intMonth == 2) 
		{
		dateObject.focus();
		//alert("february case");
		if ( (intDay < 1) || (intDay>29)) 
		{
		alert(stringToDisplay+" format should be dd-Mon-yyyy");
		dateObject.focus();
		return false;
		}

		if (LeapYear(intYear) == true) 
			{
			//alert("inside leap year test,this is leap year");
			
				if (intDay > 29) 
				{
				alert(stringToDisplay+" format should be dd-Mon-yyyy");
				return false;
				}
			}
			else
			 {
			//alert("inside leap year test,this is not leap year");
			
			if (intDay > 28) 
				{
				alert(stringToDisplay+" format should be dd-Mon-yyyy");
				return false;
				}
			 }
		}

		//alert("test ..returning true");
		return true;
	}
	
	function LeapYear(intYear){
		if (intYear % 100 == 0){
			if (intYear % 400 == 0) {
				 return true; 
			}
		}
		else {
			if ((intYear % 4) == 0){ 
				return true; 
			}
		}
		return false;
	}

	function trimText(obj){
		if( obj.type == "text" || obj.type == "textarea") {
		  var txt = obj.value;
		  var len=txt.length;
		  while(txt.indexOf(" ")==0 && len > 0){
			  txt= txt.substring(1,txt.length);
			  len--;
		  }
		  len = txt.length;
		  while(txt.charAt(txt.length-1)==" " && len > 0){
			  txt = txt.substring(0,txt.length-1);
			  len--;
		  }
		  obj.value=txt;
	  }
	}

	function validatePassword(frm,strMandatory)
	{	
		var onceFlag=false;
		for(i =0; i < frm.elements.length; i++)
		{
			var formElement = frm.elements[i];
			trimText(formElement);			
			if((formElement.type == 'password')&&(onceFlag==false))
			{
				onceFlag=true;
				var formElementC=frm.elements[i+1];
				trimText(formElementC);
				
				if(((formElement.name=='password')&&(formElementC.name=='verifypassword'))||((formElement.name=='newPassword')&&(formElementC.name=='verNewPassword')))
				{
					if((formElement.value.length<6)||(formElement.value.length>16))
					{
						alert("Password should be minimum 6 and maximum 16 characters");
						formElement.focus();
						formElement.select();
						return false;
					}	
					if((formElementC.value.length<6)||(formElementC.value.length>16))
					{
						alert("Confirm Password should be minimum 6 and maximum 16 characters");
						formElementC.focus();
						formElementC.select();						
						return false;
					}						
					if(formElement.value!=formElementC.value)
					{
						alert("Password and Confirm Password must be same");
						formElementC.focus();
						formElementC.select();						
						return false;
					}
				  }
			    }
			/*
			if((formElement.type =='text')&&(formElement.name =='email'))
			{
				var formElement1=frm.elements[i+1];				
				trimText(formElement1);
				if(formElement1.value!=""){
					if(formElement.value!=formElement1.value)
					{
						alert("Email Address and Confirm Email Address must be same");
						formElement.focus();
						formElement.select();
						return false;
					}
				}
			}
			*/

		}		
		return true;		
	}
	
function validatePassword1(frm,strMandatory)
{
 var formElement = frm ;
 
 if (formElement.name == 'password')
 {
  passwd = formElement.value;
  
  if((formElement.value.length<6)||(formElement.value.length>16))
  {
	alert("Password should be minimum 6 and maximum 16 characters");
	formElement.focus();
	formElement.select();
	return false;
  } 
 }
 
 if(formElement.name == 'verifypassword')
 {
  if((formElement.value.length<6)||(formElement.value.length>16))
  {
	alert("Confirm Password should be minimum 6 and maximum 16 characters");
	formElement.focus();
	formElement.select();
	return false;
  } 
  
  if (formElement.value != passwd )
  {
   alert("Password and Confirm Password should be the same.");
   formElement.focus();
   formElement.select();
   return false;
  }
 }
   
 return true;		
}
	
	
function openNewWindow(sourceFile,windowName) {
	var windowOptions="locationbar=1,scrollbars=1,menubar=1,toolbar=1";
	windowOptions= windowOptions + "top=0,left=0,screenX=0,screenY=0,width=760,height=150,resizable=yes, maximise=true"
	win = window.open(sourceFile,windowName,windowOptions);
	return win;
}
function newwin(loc,name) {
	var xyz = openNewWindow(loc,name);

}

function openNewAdmin(sourceFile,windowName) {
	var windowOptions="locationbar=0,scrollbars=1,menubar=0,toolbar=0";
	windowOptions= windowOptions + "top=100,left=100,screenX=0,screenY=0,resizable=yes,maximise=true";
	win = window.open(sourceFile,windowName,windowOptions);
	win.focus();	
}
function newregwin(loc,name) {
	var windowOptions="locationbar=0,scrollbars=0,menubar=0,toolbar=0";
	windowOptions= windowOptions + "top=300,left=600,screenX=0,screenY=0,width=310,height=130,resizable=yes, maximise=true";
	win = window.open(loc,name,windowOptions);
	win.focus();
}	

