var dtCh= "/";
var minYear=1900;
var maxYear=2100;
var otherValidation;

function Validator(frmname,btnname,otherValidatio)

{

	otherValidation=otherValidatio;

  this.formobj=document.forms[frmname];

	if(!this.formobj)

	{

	  alert("BUG: couldnot get Form object "+frmname);

		return;

	}	

	this.btnobj = this.formobj[btnname];

	if(!this.btnobj)

	this.btnobj=document.getElementById(btnname);

	

	if(!this.btnobj)

	{

	  alert("BUG: couldnot get object "+btnname);

		return;

	}

	if(this.formobj.onsubmit)

	{

	 this.formobj.old_onsubmit = this.formobj.onsubmit;

	 this.formobj.onsubmit=null;

	}

	else

	{

	 this.formobj.old_onsubmit = null;

	}

	//this.formobj.onsubmit=form_submit_handler;	

	this.btnobj.onclick=form_submit_handler;

	this.addValidation = add_validation;

	this.setAddnlValidationFunction=set_addnl_vfunction;

	this.clearAllValidations = clear_all_validations;

	

}



function set_addnl_vfunction(functionname)

{

  this.formobj.addnlvalidation = functionname;

}

function clear_all_validations()

{

	for(var itr=0;itr < this.formobj.elements.length;itr++)

	{

		this.formobj.elements[itr].validationset = null;

	}

}

function form_submit_handler()

{

	//alert(eval(otherValidation))

	

	

	if(eval(otherValidation)==false)

	{

	return false;

	}

	for(var itr=0;itr < this.form.elements.length;itr++)

	{

		if(this.form.elements[itr].validationset &&

	   !this.form.elements[itr].validationset.validate())

		{

		  return false;

		}

	}

		

	


	if(this.form.addnlvalidation)

	{

	  str =" var ret = "+this.form.addnlvalidation+"()";

	  eval(str);

    if(!ret) return ret;

	}

	return true;

}

function add_validation(itemname,descriptor,errstr)

{

  if(!this.formobj)

	{

	  alert("BUG: the form object is not set properly");

		return;

	}//if

	var itemobj = this.formobj[itemname];

	if(!itemobj)

	itemobj =document.getElementById(itemname);

	

	

  if(!itemobj)

	{

	  alert("BUG: Couldnot get the input object named: "+itemname);

		return;

	}

	

	if(descriptor=="compare")

      { 

           var arr = errstr.split("|")           

           compControl2 = arr[0];

          var itemComp = this.formobj[compControl2];

	        if(!itemComp)

	            itemComp =document.getElementById(compControl2); 

	         if(!itemComp)

	            {

	              alert("BUG: Couldnot get the input object named: "+compControl2);

		            return;

	            }     
		
      } 

//	alert(itemname);///////////////////////////////////////

	if(!itemobj.validationset)

	{

	  itemobj.validationset = new ValidationSet(itemobj);

	}

  itemobj.validationset.add(descriptor,errstr);

}

function ValidationDesc(inputitem,desc,error)

{

  this.desc=desc;

	this.error=error;

	this.itemobj = inputitem;

	this.validate=vdesc_validate;

}

function vdesc_validate()

{

 if(!V2validateData(this.desc,this.itemobj,this.error))

 {

    if(!this.itemobj.disabled)

    this.itemobj.focus();

		return false;

 }

 return true;

}

function ValidationSet(inputitem)

{

    this.vSet=new Array();

	this.add= add_validationdesc;

	this.validate= vset_validate;

	this.itemobj = inputitem;

}

function add_validationdesc(desc,error)

{

  this.vSet[this.vSet.length]= 

	  new ValidationDesc(this.itemobj,desc,error);

}

function vset_validate()

{

   for(var itr=0;itr<this.vSet.length;itr++)

	 {

	   if(!this.vSet[itr].validate())

		 {

		   return false;

		 }

	 }

	 return true;

}

function validateEmailv2(email)

{

// a very simple email validation checking. 

// you can add more complex email checking if it helps 

    if(email.length <= 0)

	{

	  return true;

	}

    var splitted = email.match("^(.+)@(.+)$");

    if(splitted == null) return false;

    if(splitted[1] != null )

    {

      var regexp_user=/^\"?[\w-_\.]*\"?$/;

      if(splitted[1].match(regexp_user) == null) return false;

    }

    if(splitted[2] != null)

    {

      var regexp_domain=/^[\w-\.]*\.[A-Za-z]{2,4}$/;

      if(splitted[2].match(regexp_domain) == null) 

      {

	    var regexp_ip =/^\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\]$/;

	    if(splitted[2].match(regexp_ip) == null) return false;

      }// if

      return true;

    }

return false;

}

function IsImage(oObject)

{

	var ext=trim(oObject.value);	

	if(ext.length>0)

	{	   

		ext = ext.substring(ext.length-3,ext.length);

		ext = ext.toLowerCase();

		if(ext != 'jpg'&& ext != 'gif' && ext != 'bmp' && ext != 'jpeg')

		{

		alert('You selected a .'+ext+' file; please select a image file instead!');

		return false;

		}

		else

		return true; 

	}

		return true;

}	

function IsSound(oObject)

{

	var ext=trim(oObject.value);	

	if(ext.length>0)

	{	   

		ext = ext.substring(ext.length-3,ext.length);

		ext = ext.toLowerCase();

		if(ext != 'MP3' && ext != 'mp3')

		{

		alert('You selected a .'+ext+' file; please select a MP3 file instead!');

		    return false;

		}

		else

		    return true; 

	}

    return true;

}	



function V2validateData(strValidateStr,objValue,strError) 

{ 

    var epos = strValidateStr.search("="); 

    var  command  = ""; 

    var  cmdvalue = ""; 

    

    if(epos >= 0) 

    { 

     command  = strValidateStr.substring(0,epos); 

     cmdvalue = strValidateStr.substr(epos+1); 

    } 

    else 

    { 

     command = strValidateStr; 

    } 

    

    //compare

        var compControl2=""

        if(command=="compare")

        {

           var arr = strError.split("|")

           strError = arr[1];

           compControl2 = arr[0];

        } 

    

    //compare

    

  //  alert(command);//////////////////////////////////////////////////////

    switch(command) 

    { 

		case "Image":

		case "image":

		{

		    if(!IsImage(objValue))

		    {

		    alert(IsImage(objValue));

		    return false

		    }

			

			break;

			//IsImage

		}

		case "sound":

		case "Sound":

		{

		    if(!IsSound(objValue))

		    {

		        //alert(IsSound(objValue));

		    return false

		    }

			break;

			//IsImage

		}

        case "compare": 

         { 
         	
         	
           if(trim(objValue.value) != document.getElementById(compControl2).value) 

           { 

              if(!strError || strError.length ==0) 

              { 

                strError = objValue.name + " Passwords not matched!!";                

              }//if 

               document.getElementById(compControl2).focus();

              alert(strError); 

              

              return false; 

           }//if 

           break;             

         }//case compare          

        case "req": 

        case "required": 

         { //alert(trim(objValue.value))

           if(eval(trim(objValue.value).length) == 0) 

           { objValue.value="";

              if(!strError || strError.length ==0) 

              { 

                strError = objValue.name + " : Required Field"; 

              }//if 

              alert(strError); 

              return false; 

           }//if 

           break;             

         }//case required 

        case "maxlength": 

        case "maxlen": 

          { 

             if(eval(objValue.value.length) >  eval(cmdvalue)) 

             { 

               if(!strError || strError.length ==0) 

               { 

                 strError = objValue.name + " : "+cmdvalue+" characters maximum "; 

               }//if 

               alert(strError + "\n[Current length = " + objValue.value.length + " ]"); 

               return false; 

             }//if 

             break; 

          }//case maxlen 

        case "minlength": 

        case "minlen": 

           { 

             if(eval(objValue.value.length) <  eval(cmdvalue)) 

             { 

               if(!strError || strError.length ==0) 

               { 

                 strError = objValue.name + " : " + cmdvalue + " characters minimum  "; 

               }//if               

               alert(strError+ "\n[Current length = " + objValue.value.length + " ]"); 

               return false;                 

             }//if 

             break; 

            }//case minlen 

        case "alnum": 

        case "alphanumeric": 

           { 

              var charpos = objValue.value.search("[^A-Za-z0-9._ ]"); 

              if(objValue.value.length > 0 &&  charpos >= 0) 

              { 

               if(!strError || strError.length ==0) 

                { 

                  strError = objValue.name+": Only alpha-numeric characters allowed "; 

                }//if 

                alert(strError + "\n [Error character position " + eval(charpos+1)+"]"); 

                return false; 

              }//if 

              break; 

           }//case alphanumeric 

        case "num": 

        case "numeric": 

           { 

              var charpos = objValue.value.search("[^0-9.]"); 
              
              
              if(objValue.value.length > 0 &&  charpos >= 0) 

              { 

                if(!strError || strError.length ==0) 

                { 

                  strError = objValue.name+": Only digits allowed "; 

                }//if               

                alert(strError + "\n [Error character position " + eval(charpos+1)+"]"); 

                return false; 

              }//if 
              
              if(parseFloat(objValue.value) < 1 ) 

              { 

                if(!strError || strError.length ==0) 

                { 

                  strError = objValue.name+":Value less than one  is not allowed"; 

                }//if               

                alert(strError); 

                return false; 

              }//if 


              break;               

           }//numeric 

        

        case "onlynum": 

        case "onlynumeric": 

           { 

              var charpos = objValue.value.search("[^0-9]"); 
              
              

              if(objValue.value.length > 0 &&  charpos >= 0) 

              { 

                if(!strError || strError.length ==0) 

                { 

                  strError = objValue.name+": Only digits allowed "; 

                }//if               

                alert(strError + "\n [Error character position " + eval(charpos+1)+"]"); 

                return false; 

              }//if 

              break;               

           }//numeric 

        case "alphabetic": 

        case "alpha": 

           { 

              var charpos = objValue.value.search("[^A-Za-z ]"); 

              if(objValue.value.length > 0 &&  charpos >= 0) 

              { 

                  if(!strError || strError.length ==0) 

                { 

                  strError = objValue.name+": Only alphabetic characters allowed "; 

                }//if                             

                alert(strError + "\n [Error character position " + eval(charpos+1)+"]"); 

                return false; 

              }//if 

              break; 

           }//alpha 

		case "alnumhyphen":

			{

              var charpos = objValue.value.search("[^A-Za-z0-9\-_\/ ]"); 

              if(objValue.value.length > 0 &&  charpos >= 0) 

              { 

                  if(!strError || strError.length ==0) 

                { 

                  strError = objValue.name+": characters allowed are A-Z,a-z,0-9,-,\,/ and _"; 

                }//if                             

                alert(strError + "\n [Error character position " + eval(charpos+1)+"]"); 

                return false; 

              }//if 			

			break;

			}

			

			

			case "alnumhyphenspc":

			{

              var charpos = objValue.value.search("[^A-Z a-z 0-9\-_,.&@\/ ]"); 

              if(objValue.value.length > 0 &&  charpos >= 0) 

              { 

                  if(!strError || strError.length ==0) 

                { 

                  strError = objValue.name+": characters allowed are A-Z,a-z,0-9,-,\,/ and _"; 

                }//if                             

                alert(strError + "\n [Error character position " + eval(charpos+1)+"]"); 

                return false; 

              }//if 			

			break;

			}

			

			

			

		case "phone":

		case "PHONE":

		{

            var charpos = objValue.value.search("[^0-9\-+()/. ]"); 

            if(objValue.value.length > 0 &&  charpos >= 0) 

            { 

                if(!strError || strError.length ==0) 

            { 

                strError = objValue.name+": characters allowed are 0-9,-,/,.,+,()"; 

            }//if                             

            alert(strError + "\n [Error character position " + eval(charpos+1)+"]"); 

            return false; 

            }//if 			

		break;

		}

        case "email": 

          { 

               if(!validateEmailv2(objValue.value)) 

               { 

                 if(!strError || strError.length ==0) 

                 { 

                    strError = " Enter a valid Email address "; 

                 }//if                                               

                 alert(strError); 

                 return false; 

               }//if 

           break; 

          }//case email 

          

        case "lt": 

        case "lessthan": 

         { 

            if(isNaN(objValue.value)) 

            { 

              alert(objValue.name+": Should be a number "); 

              return false; 

            }//if 

            if(eval(objValue.value) >=  eval(cmdvalue)) 

            { 

              if(!strError || strError.length ==0) 

              { 

                strError = objValue.name + " : value should be less than "+ cmdvalue; 

              }//if               

              alert(strError); 

              return false;                 

             }//if             

            break; 

         }//case lessthan 

        case "gt": 

        case "greaterthan": 

         { 

            if(isNaN(objValue.value)) 

            { 

              alert(objValue.name+": Should be a number "); 

              return false; 

            }//if 

             if(eval(objValue.value) <=  eval(cmdvalue)) 

             { 

               if(!strError || strError.length ==0) 

               { 

                 strError = objValue.name + " : value should be greater than "+ cmdvalue; 

               }//if               

               alert(strError); 

               return false;                 

             }//if             

            break; 

         }//case greaterthan 

         

          case "notaposnumber":  //checking for valid positive number

         { 

            if(isNaN(objValue.value)|| objValue.value<0) 

            { 

              if(!strError || strError.length ==0) 

	              { 

	                strError = objValue.name+": Invalid characters found "; 

	              }                                                             

	           alert(strError); 

	              return false;                   

            }

            else

              return true;

              break;

         }

        case "regexp": 

         { 

           alert(cmdvalue); 

		 	if(objValue.value.length > 0)

			{		      	

	            if(!objValue.value.match(cmdvalue)) 

	            { 

	              if(!strError || strError.length ==0) 

	              { 

	                strError = objValue.name+": Invalid characters found "; 

	              }//if                                                               

	              alert(strError); 

	              return false;                   

	            }//if 

			}

           break; 

         }//case regexp 

        case "dontselect": 

         {		

					
            if(objValue.selectedIndex == null)

            { 

              alert("BUG: dontselect command for non-select Item"); 

              return false; 

            } 

			

			if(objValue.selectedIndex == 0)

			{

				//strError = "Please Select one option "; 

				alert(strError);

				return false;                                   

			}



            if(objValue.value == eval(cmdvalue)) 

            { 			

             if(!strError || strError.length ==0) 

              { 

              strError = objValue.name+": Please Select one option "; 

              }//if                                                               

              alert(strError); 

              return false;                                   

             } 

             break; 

         }//case dontselect         

        case "numDate": 

        case "numericDate": 

        { 

                if (isDate(objValue.value)==false)

	            {

		            return false

	            }

              break;               

           }//numericDate



		   case "check2": 

         {		

			

            if(!objValue.checked) 

            { 			

                                                                           

              alert(strError); 

              return false;                                   

             } 

             break; 

         }//case check2 

        

    }//switch 

    return true; 

}



// Trim leading and trailing spaces

function trim(lstr) 
{

    return ltrim(rtrim(stripLineFeed(lstr)));

}



function stripLineFeed(strText)

{

	var strReturnText = strText;

	var flgContinue = true;



	// Only check if the string passed in has a length greater than zero	

	if (strReturnText.length > 0)

	{

		// Loop as long as the last character is either a line feed or a carriage return

		while (flgContinue == true)

		{

			// If the last character is either a backspace or a line feed, strip it off

			if (strReturnText.charAt(strReturnText.length - 1) == '\n' || strReturnText.charAt(strReturnText.length - 1) == '\r')

			{

				strReturnText = strReturnText.substr(0, strReturnText.length - 1);

			}

			else

			{

				// If the last character is not a carriage return or line feed, stop looping

				flgContinue = false;

			}

		}

	}



	return strReturnText;

}

  

//  This function trims all spaces from the left-hand side of a string.

function ltrim(lstr) 

{

	if (lstr != "") 

	{

		var strlen, cptr, lpflag, chk;

		strlen = lstr.length;

		cptr = 0;

		lpflag = true;



		do 

		{

			chk = lstr.charAt(cptr);

            if (chk != " ") 

            {

				lpflag = false;

			}

            else 

            {

                if (cptr == strlen) 

                {

					lpflag = false;

				}

                else 

                {

					cptr++;

				}

			}

		}

        

        while (lpflag == true)

		if (cptr > 0) 

		{

			lstr = lstr.substring(cptr,strlen);

		}

	}

	

	return lstr;

}



//  This function trims all spaces from the right-hand side of a string.

function rtrim(lstr) 

{

	if (lstr != "") 

	{

		var strlen, cptr, lpflag, chk;

		strlen = lstr.length;

		cptr = strlen;

		lpflag = true;



		do 

		{

			chk=lstr.charAt(cptr-1);

			if (chk != " ") 

			{

			    lpflag = false;

			}

			else 

			{

				if (cptr == 0) 

				{

					lpflag = false;

				}

				else 

				{

				    cptr--;

				}

			}

		}



        while (lpflag == true)

        if (cptr < strlen) 

        {

			lstr = lstr.substring(0, cptr);

		}

	}

    

    return lstr;

}


/*

	Copyright 2003 JavaScript-coder.com. All rights reserved.

*/





/**

 * DHTML date validation script. Courtesy of SmartWebby.com (http://www.smartwebby.com/dhtml/)

 */

// Declaring valid date character, minimum year and maximum year





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 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)

{

	var daysInMonth = DaysArray(12)

	var pos1=dtStr.indexOf(dtCh)

	var pos2=dtStr.indexOf(dtCh,pos1+1)

	var strMonth=dtStr.substring(0,pos1)

	var strDay=dtStr.substring(pos1+1,pos2)

	var strYear=dtStr.substring(pos2+1)

	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("Please enter the date.")

		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

}


// Confirmation before deleting the records.
function askforremoval(thetype1)

{
	if(confirm("Are you sure you would like to delete "+thetype1+" ?\n")) 
	{
		return true;
	}
	else 
	{
		return false;
	}
}

// Checked all checkboxes at once
function checkUncheckAll(theElement) 
{

	var theForm = theElement.form, z = 0;
	
	for(z=0; z<theForm.length;z++)
	{
	
		if(theForm[z].type == 'checkbox' && theForm[z].name != 'checkall')
		{
		
			theForm[z].checked = theElement.checked;
		
		}

	}

}

// at least one record must be checked
function atleastOneChecked(theElement)
{
	 var theForm = theElement.form, z = 0;
	  var chk	=	0;
	 for(z=0; z<theForm.length;z++){
	  if(theForm[z].type == 'checkbox' && theForm[z].name != 'checkall'){
	  	if(theForm[z].checked)
	  	{
	  		var chk	=	1;
	  	}
	  	
	  }
	 }
     if(chk == 0)
     {
     	alert('Please select at least one record');
     	return false;
     }
     else
     {
     	return true;
     }
	 
}	    
				    

// return float values only
function floatsOnly (evt) 
{
	evt = (evt) ? evt: event;

	var charCode = (evt.charCode) ? evt.charCode :
    ((evt.keyCode) ? evt.keyCode :
    ((evt.which) ? evt.which : 0));
	if (charCode > 31 && (charCode < 46 || charCode > 57)) 
	{
			return false;
	}
	return true;
}


// return numeral values only
function numeralsOnly (evt) 
{
	evt = (evt) ? evt: event;

	var charCode = (evt.charCode) ? evt.charCode :
    ((evt.keyCode) ? evt.keyCode :
    ((evt.which) ? evt.which : 0));
	if (charCode > 31 && (charCode < 47 || charCode > 57)) 
	{
			return false;
	}
	return true;
}



function getState(val)
{
	
	http	=	createObject();		
	if(val!='')
	{
		width='200px';
		redirect =	"./includes/ajax_response.php?country_id="+val+"~"+width;
		http.open('GET',redirect,true);
		http.onreadystatechange=handleStateResponse;
		http.send(null);
	}
	else
	{	
	  alert("Please select the country name");
	  return false;	 
	}	

	return true;
	
}
function handleStateResponse()
{

   if(http.readyState==4)
   {   
   	
      response	=	http.responseText;        	        
      document.getElementById('stateAvailable').innerHTML=response;    
      otherstate();
	  
   }

}
function createObject()
{

   if(window.XMLHttpRequest){
   
      var obj	=	new XMLHttpRequest();
	
   }else if(window.ActiveXObject){
   
     var obj	=	new ActiveXObject("Microsoft.XMLHTTP");
   }
   
   return obj;

}

	function otherstate()
	{ 
		if(document.getElementById("fld_state") && document.getElementById("fld_province"))
		{
			if(document.getElementById("fld_state").value=='Others') 
			{
				document.getElementById("fld_province").disabled=false; 
			}
			else 
			{
				document.getElementById("fld_province").value=""; 		
				document.getElementById("fld_province").disabled=true;	
			}
		}
		
		
	}


