/////////////////////////////////////////////////////////////////////////////

var defaultEmptyOK = false

var reEmail    = /^.+\@.+\..+$/
var reZip      = /^\d{3,5}$/
var rePhone    = /^\d{10,10}$/
var reUSPhone  = /^\d{3,3}-\d{3,3}-\d{4,4}$/
var reInteger  = /^\d{1,9}$/
var reAlphanum = /^([a-zA-Z0-9 ])+$/
var reAlpnumsp = /[a-z0-9]/i
var reNumber   = /^((\d+(\.\d*)?)|((\d*\.)?\d+))$/
var reStringI	= /[^A-Z]/i
var reDate     = /^\d{1,2}\/\d{1,2}\/\d{4,4}$/
var reUSDate   = /^\d{1,2}-\d{1,2}-\d{4,4}$/
var reUrl      = /^(((http(s?))|(ftp))\:\/\/)?(www.|[a-zA-Z].)[a-zA-Z0-9\-\.]+\.(co|in|com|edu|gov|mil|net|org|biz|info|name|museum|us|ca|uk)(\:``[0-9]+)*(\/($|[a-zA-Z0-9\.\,\;\?\'\\\+&%\$#\=~_\-]+))*$/
var reTime     = /^\d{1,2}:\d{1,2}$/

var cfrm
var nno

var reNNum=new Array();

reNNum[3] = /^\d{3,3}$/
reNNum[4] = /^\d{4,4}$/
reNNum[5] = /^\d{5,5}$/
reNNum[15] = /^\d{15,15}$/

/////////////////////////////////////////////////////////////////////////////

var field,type,value,details;

var checktype       = "";
var alertstring     = "";
var alertlang       = new Array();

alertlang["mandatory"]   = "FALERT is mandatory";
alertlang["Nonempty"]    = "FALERT cannot be empty";
alertlang["String"]      = "Please Enter a valid FALERT - Only Characters Allowed";
alertlang["Integer"]     = "Please Enter a valid FALERT - Only Integer Allowed";
alertlang["Date"]        = "Please Enter a valid Date for FALERT";
alertlang["Email"]       = "Please Enter a valid Email-address for FALERT";
alertlang["Alphanum"]    = "Please Enter a valid FALERT - Only Alphabets/Numbers Allowed";
alertlang["Alphanumsp"]  = "Please Enter a valid FALERT - Only Alphabets/Numbers/Special Characters Allowed";
alertlang["Number"]      = "Please Enter a valid FALERT - Only Numbers Allowed";
alertlang["Url"]         = "Please Enter a valid URL for FALERT";
alertlang["Zip"]         = "Please Enter a valid Zip code for FALERT";
alertlang["Phone"]       = "Please Enter a valid Phone Number for FALERT";
alertlang["USDate"]      = "Please Enter a valid Date for FALERT - MM-DD-YYYY";
alertlang["USPhone"]     = "Please Enter a valid Phone Number for FALERT - XXX-XXX-XXXX";
alertlang["Radio"]       = "Please select a value for FALERT";
alertlang["Select"]      = "Please select FALERT";
alertlang["Agree"]       = "Please Agree to the FALERT";
alertlang["choosedate"]  = "Please Choose Valid date for FALERT";
alertlang["NNumber"]     = "Please Enter Valid FALERT";
alertlang["Time"]        = "Please Enter Valid Time for FALERT - Format: XX:XX";

function checkall(whichform)
{
     cfrm = whichform
     
     for(i=0;i<whichform.elements.length;i++)
     {
          field     = whichform.elements[i];
          details   = field.id; 

          /*
          if(field.getAttribute('tft') != '' && field.getAttribute('tft') != 'null' )
          {
               details = field.getAttribute('tft');
          }
          */

          name      = field.name;
          type      = field.type;
          value     = field.value;
		  
          if(details)
          {
               arr         = details.split("_");

               if(arr.length <3 )
		     {
				   continue;
			}
			
               checktype   = arr[0];
               alertstring = arr[1];
               req         = arr[2];

               if(req == 1 && value == '')
               {
                    alert(alertlang["mandatory"].replace("FALERT",alertstring));
                    field.focus();return false;
               }

               switch(checktype)
               {
                    case "String":     valid = validate_string();     break;
                    case "Integer":    valid = validate_integer();    break;
                    case "Date":       valid = validate_date();       break;
                    case "Select":     valid = validate_selection();  break;
                    case "Email":      valid = validate_email();      break;
                    case "Alphanum":   valid = validate_alphanum();   break;
                    case "Nonempty":   valid = validate_nonempty();   break;
                    case "Alphanumsp": valid = validate_alphanumsp(); break;
                    case "Number":     valid = validate_number();     break;
                    case "Url":        valid = validate_url();        break;
                    case "Zip":        valid = validate_zip();        break;
                    case "USPhone":    valid = validate_USphone();    break;
                    case "Phone":      valid = validate_phone();      break;
                    case "Agree":      valid = field.checked;         break;
                    case "Time":       valid = validate_time();       break;
                    default:           valid = false;break;
               }

               //if(!valid) alert(alertstring + " is not a valid " + checktype + " ");
               //if(valid) alert(alertstring + " is a valid " + checktype + " ");
               /*if(!(req == 0 && value == ''))
               if(!valid)
               {
				    alert(alertlang[checktype].replace("FALERT",alertstring));
                    field.focus();return false;
               }*/
			  if(value == '')
			  {
               if(!(req == 0)) 
               if(!valid)
               {
				    alert(alertlang[checktype].replace("FALERT",alertstring));
                    field.focus();return false;
               }
			  }
          }
     }

     return true;
}

///////////////////////////////////////////////////////////////

function validate_selection() {
     if(value == '') return false; return true;
}

function validate_nnumber() {
 
     if (!reNNum[nno].test(value)) return false; return true;
}

function validate_email() {
     if(isEmail(field.value)) return true; return false;
}

function validate_radio() {
     if(getSelectedRadioValue(field) != -1) return true;
     field[0].focus(); return false;
}

function validate_alphanum() {
     if (!reAlphanum.test(value)) return false; return true;
}

function validate_nonempty() {
     if(trim_field(value) == '') return false; return true;
}

function validate_alphanumsp() {
     if (!reAlpnumsp.test(value)) return false; return true;
}

function validate_number() {
     if (!reNumber.test(value) || isNaN(parseInt(value))) return false; return true;
}

function validate_integer() {
     if (!reInteger.test(value) || isNaN(value) ) return false; return true;
}

function validate_string() {
     if (reStringI.test(value)) return false; return true;
}

function validate_zip() {
     if(reZip.test(value)) return true; return false;
}

function validate_phone() {
     if(rePhone.test(value)) return true; return false;
}

function validate_USphone() {
     if (reUSPhone.test(value)) return true; return false;
}

function validate_time() {
     if (!reTime.test(value)) return false;

     var atts  = value.split(':');

     if(parseInt(atts[0]) > 12) return false;
     if(parseInt(atts[1]) > 59) return false;

     return true;
}

///////////////////////////////////////////////////////////////

function validate_url()
{
     return reUrl.test(value);
}

function validate_date()
{
   	if(!reDate.test(value)) return true;
	
	darr  = value.split("/");

     year  = darr[2];
     month = darr[0];
     day   = darr[1];
     return  validate_seldate(year,month,day,alertstring,field);
	
}

function validate_USdate() {
 
     if (!reUSDate.test(value)) return false;
 
     value = value.split("-").join("/");
 
     darr  = value.split("/");
     year  = darr[2];
     month = darr[0];
     day   = darr[1];

     return  validate_seldate(year,month,day,alertstring,field);
}

function validate_seldate(year,month,day,stringtoalert,fieldtofocus)
{
     var daysInMonth        = new Array(0,31,28,31,30,31,30,31,31,30,31,30,31);

     var regd2 = /^\d{1,2}$/
     var regd4 = /^\d{4}$/

     if (!regd4.test(year) || !regd2.test(month) || !regd2.test(day)) return false;
     if (day > daysInMonth[month * 1]) return false;
     if ((month == 2) && (day > daysInFebruary(year))) return false;
     if (parseInt(year)<1970 || parseInt(year)>2030) return false;
     return true;
}

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 isEmail (s)
{
     if (isEmpty(s))
     if (isEmail.arguments.length == 1) return defaultEmptyOK;
     else return (isEmail.arguments[1] == true);
     else
     {
       return reEmail.test(s)
     }
}

function isEmpty(s)
{
     return ((s == null) || (s.length == 0))
}

function rtrim_field(str)
{
        var spc_reg        = /\s*$/;

        mat        = str.match(spc_reg);
        str        = str.replace(mat,'');

        return str;
}

function ltrim_field(str)
{
        var spc_reg        = /^\s*/;

        mat        = str.match(spc_reg);
        str        = str.replace(mat,'');

        return str;
}

//        Trim

function trim_field(str)
{
        str        = rtrim_field(str);

        str        = ltrim_field(str);

        return str;
}

///////////////////////////////////////////////////////////////

