    // Validator Object
    var valid = new Object();

    // REGEX Elements

        // matches zip codes
        valid.zipCode = /\d{5}(-\d{4})?/;

        // matches $17.23 or $14,281,545.45 or ...
        valid.Currency = /\$\d{1,3}(,\d{3})*\.\d{2}/;

        // matches 5:04 or 12:34 but not 75:83
        //valid.Time = /^([1-9]|1[0-2]):[0-5]\d$/;
		valid.Time = /^([1-9]|[0-1][0-9]|[2][0-3]):([0-5][0-9])$/;
        
		//matches email
        valid.emailAddress = /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/;

        // matches phone ###-###-####
        valid.phoneNumber = /^\(?\d{3}\)?\s|-\d{3}-\d{4}$/;

        // International Phone Number
        valid.phoneNumberInternational = /^\d(\d|-){7,20}/;

        // IP Address
        valid.ipAddress = /^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;

        // Date xx/xx/xxxx
        //valid.Date = /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{4}$/;
		valid.Date =  /^((((19|20)(([02468][048])|([13579][26]))-02-29))|((20[0-9][0-9])|(19[0-9][0-9]))-((((0[1-9])|(1[0-2]))-((0[1-9])|(1\d)|(2[0-8])))|((((0[13578])|(1[02]))-31)|(((0[1,3-9])|(1[0-2]))-(29|30)))))$/;

        // State Abbreviation
        valid.State = /^(AK|AL|AR|AZ|CA|CO|CT|DC|DE|FL|GA|HI|IA|ID|IL|IN|KS|KY|LA|MA|MD|ME|MI|MN|MO|MS|MT|NB|NC|ND|NH|NJ|NM|NV|NY|OH|OK|OR|PA|RI|SC|SD|TN|TX|UT|VA|VT|WA|WI|WV|WY)$/i;

        // Social Security Number
        valid.SSN = /^\d{3}\-\d{2}\-\d{4}$/;

    
    function validateForm(theForm) {

        var elArr = theForm.elements; 
		var msg2 = "";

        for(var i = 0; i < elArr.length; i++) {

           with(elArr[i]) { 

              var v = elArr[i].validator; 

              if(!v) continue; 

				var msg = elArr[i].msg;
                var thePat = valid[v]; 
				var msg_2 = "";

              var gotIt = thePat.exec(value); 
              
              if(gotIt && (v == 'Date')) {
				var _ret = doingValidateDate(value);
				if(_ret > 0) {
					gotIt = true;
				} else {
					if(_ret == -2)
						msg_2 =  elArr[i].msg1;
					if(_ret == -3)
						msg_2 =  elArr[i].msg2;
					gotIt = false;
				}
              }
              if(gotIt && (v == 'Time')) {
				var _ret = doingValidateTime(value);
				if(_ret > 0) {
					gotIt = true;
				} else {
					if(_ret == -2)  // < 8.00
						msg_2 =  elArr[i].msg1;
					if(_ret == -3) // > 18.00
						msg_2 =  elArr[i].msg2;
					if(_ret == -4)
						msg_2 =  elArr[i].msg3;
					gotIt = false;
				}
              }

              if(! gotIt){
                 alert(msg + ": " + value + " " + msg_2);                  
                 elArr[i].select();
                 elArr[i].focus(); 
                 return false;
              }
           }
        }

		var _pdate = document.getElementById('p_date');
		var _ptime = document.getElementById('p_time');
		if((!_pdate) || (!_ptime))
			return true;
		var _ret = doingValidateDateTime(_pdate.value, _ptime.value);
		if(_ret == -1) {
			alert(_ptime.msg + ": " + _ptime.value + " " + _ptime.msg3);                  
            _ptime.select();
			_ptime.focus(); 
			return false;		
		}
        return true;

    }
    
    function doingValidateDate(val) {
//    var oDate = document.all[val.controltovalidate];
	msg2 = "";
    var sDate = val;
    if (sDate == "") 
		return 1;
    var iDay, iMonth, iYear;
    var arrValues;
    var today = new Date();
    arrValues = sDate.split("-");
    iDay = arrValues[2];
    iMonth = arrValues[1];
    iYear = arrValues[0];
    if ((iMonth == null) || (iYear == null)) 
		return -1;
    if ((iDay > 31) || (iMonth > 12) || 
        (iYear < 1900 || iYear > today.getFullYear())) 
		return -1;
	  
    var dummyDate = new Date(iYear, iMonth - 1, iDay);
    if ((dummyDate.getDate() != iDay) || 
      (dummyDate.getMonth() != iMonth - 1) || 
      (dummyDate.getFullYear() != iYear)) 
         return -1;
		 
	if((dummyDate.getDay() < 1) || (dummyDate.getDay() > 5)) {
		return -2; // savaitgaliais pristatymas nevykdomas
	}

	var dummyDate2 = new Date(today.getFullYear(), today.getMonth(), today.getDate());
	
	
	if(dummyDate < dummyDate2 ) {
		return -3; // Laikas jau praejo
	}
		
    return 1;
}

function doingValidateTime(val) {
	var arrValues;
	var sDate = val;
    var today = new Date();
    arrValues = sDate.split(":");
    iMi = arrValues[1];
    iHH = arrValues[0];
	
	if(iHH < 8) {
		return -2;
	}

	if(iHH >= 18)
		return -3;
		
	var dummyDate = new Date(today.getFullYear(), today.getMonth(), today.getDate(),iHH, iMi,today.getMinutes());
    if ((dummyDate.getHours() != iHH) || (dummyDate.getMinutes() != iMi)) {
		return -1;
	}
		 		 
				 
	return 1;
}

function doingValidateDateTime(dval, tval) {
	var today = new Date();
    var arrValues, arrValues2;
    arrValues = dval.split("-");
    arrValues2 = tval.split(":");
	var dummyDate = new Date(arrValues[0],arrValues[1]-1,arrValues[2],arrValues2[0],arrValues2[1]);
	if(dummyDate < today)  
		return -1;
		
	return 1;
}
	