


/*********************************************************************************/
/* Constructor of main Form Validator Class

/*********************************************************************************/
function ValForm(formname){
	this.objForm= document.forms[formname];
	this.add	= AddFormValidation;
	this.validate	= ValidateForm;
}


/*********************************************************************************/
/* Constructor of ITem Class under main Form Validator class
/*********************************************************************************/
function ValItem(){
	this.vSet=new Array();
	this.add=AddItemValidation;
}



/*********************************************************************************/
/* Add New Validation Constraint to Main Form Validation Class
/*********************************************************************************/
function AddFormValidation(itemname,validationType,errormsg,extradata){
	objItem = this.objForm[itemname];
	if(!objItem){
		alert("Unable to Add the Item (" + itemname +  ") in Form Validator.")
		return;
	}
	
	if(!objItem.Validator){
		objItem.Validator=new ValItem();
		objItem.validateMe=ValidateItem;		
	}
	
	objItem.Validator.add (validationType,errormsg,extradata);
}



/*********************************************************************************/
/* Add New Validation Constraint to ITem Class under main Form Validator class
/*********************************************************************************/
function AddItemValidation(validationType,errormsg,extradata){
	this.vSet[this.vSet.length]=new Array(validationType,errormsg,extradata)
}






function ValidateForm(){
	for(i=0;i<this.objForm.elements.length;i++){
		if (this.objForm.elements[i].Validator) {
			for(j=0;j<this.objForm.elements[i].Validator.vSet.length;j++){
				if (!this.objForm.elements[i].validateMe(j))	return false;			
			}
		}
	}
}


function ValidateItem(index){
	if (this.Validator.vSet.length<index || index<=-1) return false;
	
	var item			=this;
	var ValidationType	=this.Validator.vSet[index][0];
	var ErrorMSg		=this.Validator.vSet[index][1];	
	var ExtraData		=this.Validator.vSet[index][2];
	var iChars          = "!@#$%^&*()+=-[]\\\';,./{}|\":<>?1234567890";
	var iChars1          = "!@#$%^&*()+=-[]\\\';,./{}|\":<>?";
    var iCityChars      = "!@#$%^&*()+=-[]\\\';,./{}|\":<>?1234567890";
    var iZipChars       = "!@#$%^&*()+=-[]\\\';,./{}|\":<>? abcdefghijklmnopqrstuvwxyz";
    
	var i,Udata,j,Counter,Slen;
	Counter=0;
	var re;
	//var radioBut,k,ret;
	//ret=false;
	switch (ValidationType){		
		case 'Required':  
						if (item.value=="" || item.value.length==0 || item.value==null) {
							alert(ErrorMSg);
							item.focus();
							return false;
						}
						break;
			
		case 'MaxLen'	:
						if (item.value.length>ExtraData) {
							alert(ErrorMSg);
							item.focus();
							return false;
						}
						break;
					
		case 'MinLen'	:
						if (item.value.length<ExtraData) {
							alert(ErrorMSg);
							item.focus();
							return false;
						}
						break;
		case 'Email'		:
						/*re = new RegExp(/^([a-zA-Z0-9_\.\-])+\@([a-zA-Z0-9\-]+\.)+([a-zA-Z0-9]{2,4})+$/);
						if (!re.test(item.value)) {
							alert(ErrorMSg);
							item.focus();
							return false;
						}*/
						if (!emailvalidate(item.value)) {
							alert(ErrorMSg);
							item.focus();
							return false;
						}
						break;
		case 'Password'		:
						re = new RegExp(/([\s\t])+/);
						if (re.test(item.value)) {
							alert(ErrorMSg);
							item.focus();
							return false;
						}
						re = new RegExp(/([0-9])+/);
						if (!re.test(item.value)) {
							alert(ErrorMSg);
							item.focus();
							return false;
						}
						break;
		case 'Checked'	:
						if (!item.checked) {
							alert(ErrorMSg);
							item.focus();
							return false;
						}
						break;	
						
		case 'RadioChecked'	:
						//itm=document.getElementById;
						for(var i=0; i<item.length;i++){
							if (item[i].checked) {
								//return true;
							}								
						}
						alert(ErrorMSg);
						item.focus();
						return false;
						break;	
		case 'Date'	:
						if (!isDate(item.value,ExtraData)) {
							alert(ErrorMSg);
							item.focus();
							return false;
						}
						break;
		case 'Date1'	:
						if(item.value != "")
							{
								if (!isDate(item.value,ExtraData)) 
								{
								alert(ErrorMSg);
							 	item.focus();
								return false;
							    }
							    else
							    {	
																			 			
																		
									today=new Date();
									var cdate=new Date(item.value ); 
									var one_day=1000*60*60*24;
                                    var diff=(Math.ceil((cdate.getTime()-today.getTime())/(one_day)));
									if(diff < 0) 
									  { 
										 alert("To date cannot be greater than system date"); 
										 item.focus();
										 return false; 
									  } 
							    
							    }
						    }	
						break;
										
							
		case 'Numeric'	:
						if (!isInteger(item.value)) {
							alert(ErrorMSg);
							item.focus();
							return false;
						}
						break;
		case 'Float'	:
						if (!isFloat(item.value)) {
							alert(ErrorMSg);
							item.focus();
							return false;
						}
						break;
	   case 'Special'	:
		                 Udata=item.value;
                         for (var i = 0; i < Udata.length; i++) 
                           {
  	                          if (iChars.indexOf(Udata.charAt(i)) != -1) 
  	                           {
  	                             //alert ("Your username has special characters. \nThese are not allowed.\n Please remove them and try again.");
  	                             Counter=1;
  	                           }
                           }
 
		                 if(Counter>0)
		                  {
		                     
		                      alert(ErrorMSg);
		                      item.focus();
		                      return false;
		                      Counter=0;
		                   }   
		                      
		                 break; 
      case 'Special1'	:
		                 Udata=item.value;
                         for (var i = 0; i < Udata.length; i++) 
                           {
  	                          if (iChars1.indexOf(Udata.charAt(i)) != -1) 
  	                           {
  	                             //alert ("Your username has special characters. \nThese are not allowed.\n Please remove them and try again.");
  	                             Counter=1;
  	                           }
                           }
 
		                 if(Counter>0)
		                  {
		                     
		                      alert(ErrorMSg);
		                      item.focus();
		                      return false;
		                      Counter=0;
		                   }   
		                      
		                 break; 
	   		                 
	  case 'City'	:
		                 Udata=item.value;
                         for (var i = 0; i < Udata.length; i++) 
                           {
  	                          if (iCityChars.indexOf(Udata.charAt(i)) != -1) 
  	                           {
  	                             //alert ("Your username has special characters. \nThese are not allowed.\n Please remove them and try again.");
  	                             Counter=1;
  	                           }
                           }
 
		                 if(Counter>0)
		                  {
		                     
		                      alert(ErrorMSg);
		                      item.focus();
		                      return false;
		                      Counter=0;
		                   }   
		                      
		                 break; 
		case 'EmailCheck' :
						
						
					var	emaildata=item.value;
					var txtareacounter=0;
					var separateEmailsBy = ", ";
					var email = "<none>"; // if no match, use this
					var emailsArray = emaildata.match(/([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9._-]+)/gi);
					if (emailsArray)
						 {
							email = "";
							for (var i = 0; i < emailsArray.length; i++)
								 {
								 	if (i != 0) email += separateEmailsBy;
									email += emailsArray[i];
									txtareacounter=1;
								 }
							 
						 }
						if(txtareacounter == 1)
						 {
							alert(ErrorMSg);
							 item.focus();
							 return false;
							 //txtareacounter=0;
						 }
						  
						break;
							   
	    case 'urlcheck' :
	    					var url = item.value;
							var urlPattern =url.match(/([a-z0-9](?:[-a-z0-9]*[a-z0-9])?\.)+(?:com|edu|biz|org|gov|int|info|mil|net|name|museum|coop|aero|[a-z][a-z])\b(?:\d+)?(?:\/[^;"'&lt;&gt;()\[\]{}\s\x7f-\xff]*(?:[.,?]+[^;"'&lt;&gt;()\[\]{}\s\x7f-\xff]+)*)?/gi);
								
								if(urlPattern)
								{ 
									alert(ErrorMSg);
									item.focus();
									return false;
								}	
								
							break;	
					                
		case 'Zip'	:
		                 Udata=item.value;
		                 Udata=Udata.toLowerCase(Udata);
                         for (var i = 0; i < Udata.length; i++) 
                           {
  	                          if (iZipChars.indexOf(Udata.charAt(i)) != -1) 
  	                           {
  	                             //alert ("Your username has special characters. \nThese are not allowed.\n Please remove them and try again.");
  	                             Counter=1;
  	                           }
                           }
 
		                 if(Counter>0)
		                  {
		                     
		                      alert(ErrorMSg);
		                      item.focus();
		                      return false;
		                      Counter=0;
		                   }   
		                      
		                 break;                 
		                 	                 
   }
	return true;
}


/****************************************************************************
	Email Validation Functions
*****************************************************************************/
function emailvalidate(emailid)
{
	var atrate =emailid.indexOf("@");

	var dot =emailid.indexOf(".",atrate );
	var compare;
	compare=(dot - atrate);
	if((atrate>=1)&&(compare>1))
	{
		return true;
	}
	else
	{
		return false;
	}
}


/****************************************************************************
	Numeric Validation Functions
*****************************************************************************/

function isInteger(s){
	var i;
    for (i = 0; i < s.length; i++){   
        // Check that current character is number.
        var c = s.charAt(i);
        if (((c < "0") || (c > "9"))) return false;
    }
    // All characters are numbers.
    return true;
}

function isFloat(check_value){
	var value;
	value=check_value.replace(".","");
	return(isInteger(value))
}

/****************************************************************************
	Date Validation Functions
*****************************************************************************/


function stripCharsInBag(s, bag){
	var i;
    var returnString = "";
    // Search through string's characters one by one.
    // If character is not in bag, append to returnString.
    for (i = 0; i < s.length; i++){   
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }
    return returnString;
}

function daysInFebruary (year){
	// February has 29 days in any year evenly divisible by four,
    // EXCEPT for centurial years which are not also divisible by 400.
    return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );
}
function DaysArray(n) {
	for (var i = 1; i <= n; i++) {
		this[i] = 31
		if (i==4 || i==6 || i==9 || i==11) {this[i] = 30}
		if (i==2) {this[i] = 29}
   } 
   return this
}

function isDate(dtStr,format){
	var dtCh= "/";
	var minYear=1900;
	var maxYear=2100;
	
	if (format==null) format="usa";
	
	var daysInMonth = DaysArray(12);
	var pos1=dtStr.indexOf(dtCh);
	var pos2=dtStr.indexOf(dtCh,pos1+1);
	
	var strDay,strMonth,strYear
	
	if (format.toLowerCase()=='uk'){	
		strDay=dtStr.substring(0,pos1);
		strMonth=dtStr.substring(pos1+1,pos2);
		strYear=dtStr.substring(pos2+1);		
	}else{
		var strMonth=dtStr.substring(0,pos1);
		var strDay=dtStr.substring(pos1+1,pos2);
		var strYear=dtStr.substring(pos2+1);
	}
	
	
	var strYr=strYear;
	
	if (strDay.charAt(0)=="0" && strDay.length>1) strDay=strDay.substring(1)
	if (strMonth.charAt(0)=="0" && strMonth.length>1) strMonth=strMonth.substring(1)
	
	for (var i = 1; i <= 3; i++) {
		if (strYr.charAt(0)=="0" && strYr.length>1) strYr=strYr.substring(1)
	}
	month=parseInt(strMonth);
	day=parseInt(strDay);
	year=parseInt(strYr);
	if (pos1==-1 || pos2==-1){
		//alert("The date format should be : mm/dd/yyyy")
		return false;
	}
	if (strMonth.length<1 || month<1 || month>12){
		//alert("Please enter a valid month")
		return false;
	}
	if (strDay.length<1 || day<1 || day>31 || (month==2 && day>daysInFebruary(year)) || day > daysInMonth[month]){
		//alert("Please enter a valid day")
		return false
	}
	if (strYear.length != 4 || year==0 || year<minYear || year>maxYear){
		//alert("Please enter a valid 4 digit year between "+minYear+" and "+maxYear)
		return false;
	}
	if (dtStr.indexOf(dtCh,pos2+1)!=-1 || isInteger(stripCharsInBag(dtStr, dtCh))==false){
		//alert("Please enter a valid date")
		return false;
	}
return true;
}

// Niloy : DOM Script to remove annoying Borders 

function addEvent(elm, evType, fn, useCapture)
{
if(elm.addEventListener)
  {
  elm.addEventListener(evType, fn, useCapture);
  return true;
  }
else if (elm.attachEvent)
  {
  var r = elm.attachEvent('on' + evType, fn);
  return r;
  }
else
  {
  elm['on' + evType] = fn;
  }
}



// removes the square border that IE
// insists on adding to checkboxes and radio
function removeCheckBoxBorders()
{
var el = document.getElementsByTagName("input");
for (i=0;i<el.length;i++)
  {
  var type = el[i].getAttribute("type");
  if((type=="checkbox")||(type=="radio"))
    {
   el[i].style.border = "none";
    }
  }
}

addEvent(window, 'load', removeCheckBoxBorders, false);

// Textbox clear


var highlightcolor="#003399"

var ns6=document.getElementById&&!document.all
var previous=''
var eventobj

var intended=/INPUT|TEXTAREA|SELECT|OPTION/

function checkel(which){
if (which.style&&intended.test(which.tagName)){
if (ns6&&eventobj.nodeType==3)
eventobj=eventobj.parentNode.parentNode
return true
}
else
return false
}

// Textbox highlight

function highlight(e){
eventobj=ns6? e.target : event.srcElement
if (previous!=''){
if (checkel(previous))
previous.style.backgroundColor=''
previous=eventobj
if (checkel(eventobj))
eventobj.style.backgroundColor=highlightcolor
}
else{
if (checkel(eventobj))
eventobj.style.backgroundColor=highlightcolor
previous=eventobj
}
}


function clear_default(src, val)
{
	if(src.value == val)
		src.value = "";
}

function get_default(src, val)
{
	if(src.value=="")
		src.value = val;
}


<!--
function toggleBox(szDivID, iState) // 1 visible, 0 hidden
{
    if(document.layers)	   //NN4+
    {
       document.layers[szDivID].visibility = iState ? "show" : "hide";
    }
    else if(document.getElementById)	  //gecko(NN6) + IE 5+
    {
        var obj = document.getElementById(szDivID);
		if(parseInt(iState) == 2)
		{
			
			if(obj.style.visibility == "visible")
				obj.style.visibility = "hidden";
			else
				obj.style.visibility = "visible";
		}
		else
        	obj.style.visibility = iState ? "visible" : "hidden";
    }
    else if(document.all)	// IE 4
    {
        document.all[szDivID].style.visibility = iState ? "visible" : "hidden";
    }
	
}
// -->



