/**
 * DHTML date validation script. Courtesy of SmartWebby.com (http://www.smartwebby.com/dhtml/datevalidation.asp)
 */
// Declaring valid date character, minimum year and maximum year
var dtCh= ".";
var minYear=1900;
var maxYear=2000;
var errMsgDate="";
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
}

var FormValidator = Class.create({
  initialize: function(formId,lang,customSubmitEvent,triggerElement) {
    this.formId = formId;
    this.lang = lang;
    if($(formId))
    {
	    this.elements = $(formId).getElements();
	    var objTemp = this;
	    var fct = Prototype.emptyFunction();
	    $(this.formId).observe("form:validated", function(event) {fct();});
	    if(typeof(customSubmitEvent)=="undefined")
	    {
	    	this.customEvent="submit";
	    	this.triggerElement = formId;
	    }
	    else
	    {
	    	this.customEvent = customSubmitEvent;
	    	this.triggerElement = triggerElement;
	    }
	    $(this.triggerElement).observe(this.customEvent,function(event){objTemp.validateForm(event)});
	}
  },
  addForValidation: function(inputId,tip) {
  	if(typeof(tip)=="undefined"){var tip="";}
  	if(!$(inputId))
  	{
  		var elem = document.getElementsByName(inputId)[0];
  	}else{
  		var elem = $(inputId);
  	}
  	if(typeof(elem)!="undefined")
  	{
  		elem.writeAttribute("mandatory","true");
  		elem.writeAttribute("tip",tip);
  	}
  },
  validateForm: function(event){
    var err = 0;
    var errMsg = _msg_eroare;
    var formObj = this.formId;
    var firstMandatoryElement;
    this.elements.each(function(elem){
    	if(elem.readAttribute("mandatory")){
	    	var elemValue = elem.getValue();
	    	var typeOfElement = elem.readAttribute("tip");
	    	switch(typeOfElement){
	    		case "number":	if(isNaN(elemValue)||!elemValue){err = 1;errMsg+= eval("_msg_"+elem.name);if(!firstMandatoryElement){firstMandatoryElement = elem;}}
	    						break;
	    		case "email":	var email=/^[A-Za-z0-9][\w-.]*[A-Za-z0-9]*@[A-Za-z0-9]*([\w-.]*[A-Za-z0-9]\.)+([A-Za-z]){2,4}$/i; // x@x.xx
	    						if(email.test(elemValue)===false){err = 1;errMsg+= eval("_msg_"+elem.name);if(!firstMandatoryElement){firstMandatoryElement = elem;}}
	    						break;
	    		case "upload":	if(elemValue){
	    							var expresie = /(\.pdf|\.doc|\.rtf|\.odt|\.docx)$/i;
	    							if(!expresie.test(elemValue)){err=1;errMsg+= eval("_msg_"+elem.name);}}
	    						break;
	    		case "checkbox":if(elem.name.indexOf("[]")==-1)
	    						{
	    							var auxStr = elem.name;
	    							var isChecked = elem.checked;
	    						}
	    						else//array expected in php
	    						{
	    							var auxStr = elem.name.replace("[]","");
	    							var isChecked = false;
	    							$(formObj).getInputs('checkbox', elem.name).each(function(item)
	    							{
	    								if(item.checked)
	    									isChecked = true;
	    							});
	    						}
	    						if(!isChecked){err = 1;errMsg+= eval("_msg_"+auxStr);if(!firstMandatoryElement){firstMandatoryElement = elem;}}
	    						break;
	    		case "radio": var elemName = elem.name;
	    					  /*var arrayRadios = document.getElementsByName(elemName);
	    					  alert(arrayRadios);
	    					  var isChecked = false;
	    					  for(x in arrayRadios)
	    					  {alert(arrayRadios[x]);
	    					  	if(arrayRadios[x].checked){isChecked = true;}
	    					  }*/
	    					  var radioLength = document.getElementsByName(elemName).length;
	    					  //alert(radioLength);
	    					  var isChecked = false;
	    					  if(radioLength == undefined)
	    					  {
									if(elemName.checked)
										isChecked = true;
							  }
							  else
							  {
							  	for(var i = 0; i < radioLength; i++) {
									//alert(document.getElementsByName(elemName)[i]);
									if(document.getElementsByName(elemName)[i].checked) {
										isChecked = true;
									}
								}
							  }
	    					  
	    					  if(!isChecked){err = 1;errMsg+= eval("_msg_"+elemName);if(!firstMandatoryElement){firstMandatoryElement = elem;}}
	    					  break;
	    		case "password":
	    					  var secondInput = document.getElementsByName("re"+elem.name)[0]?document.getElementsByName("re"+elem.name)[0]:elem;
	    					  var secondValue = secondInput.value;
	    					  var errMsgTmp = errMsg;
	    					  if(secondValue!=elemValue)
	    					  {
	    					  	err = 1;
	    					  	errMsg+= eval("_msg_"+secondInput.name);
	    					  }
	    					  else
	    					  {
	    					  	if(!elemValue)
	    					  	{
	    					  		err = 1;
	    					  		errMsg+= eval("_msg_"+elem.name);
	    					  	}
	    					  }
							  if(errMsg==errMsgTmp)
							  {
							  	var minLength = elem.readAttribute("minLength")?elem.readAttribute("minLength"):0;
							  	if(minLength>elemValue.length)
							  	{
							  		err = 1;
							  		errMsg+= eval("_msg_"+elem.name+"_minLength");
							  	}
							  }
							  if(err)
							  {
							  	if(!firstMandatoryElement){firstMandatoryElement = elem;}
							  }
	    					  break;
	    		case "pass_confirm":
	    					  var secondInput = document.getElementsByName("re"+elem.name)[0]?document.getElementsByName("re"+elem.name)[0]:elem;
	    					  var secondValue = secondInput.value;
	    					  var errMsgTmp = errMsg;
	    					  if(elemValue)
	    					  {
		    					  if(secondValue!=elemValue)
		    					  {
		    					  	err = 1;
		    					  	errMsg+= eval("_msg_"+secondInput.name);
		    					  }
		    					  if(errMsg==errMsgTmp)
								  {
								  	var minLength = elem.readAttribute("minLength")?elem.readAttribute("minLength"):0;
								  	if(minLength>elemValue.length)
									{
										err = 1;
										errMsg+= eval("_msg_"+elem.name+"_minLength");
									}
								  }
								  if(err)
								  {
								  	if(!firstMandatoryElement){firstMandatoryElement = elem;}
								  }
							  }
	    					  break;
	    		case "date":
	    					if (elemValue && elemValue != false)
	    					{//alert(elemValue);
	    						var daysInMonth = DaysArray(12)
								var pos1=elemValue.indexOf(dtCh)
								var pos2=elemValue.indexOf(dtCh,pos1+1)
								var strMonth=elemValue.substring(pos1+1,pos2)
								var strDay=elemValue.substring(0,pos1)
								var strYear=elemValue.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)
								
								ok = 0;
								errMsgDate = "";
								if (pos1==-1 || pos2==-1){
									//alert("The date format should be : mm.dd.yyyy");
									errMsgDate = _msg_valid_format;
									ok=1;
								}
								if (strMonth.length<1 || month<1 || month>12){
									//alert("Please enter a valid month");
									errMsgDate = _msg_valid_month;
									ok=1;
								}
								if (strDay.length<1 || day<1 || day>31 || (month==2 && day>daysInFebruary(year)) || day > daysInMonth[month]){
									//alert("Please enter a valid day");
									errMsgDate = _msg_valid_day;
									ok=1;
								}
								if (strYear.length != 4 || year==0 || year<minYear || year>maxYear){
									//alert("Please enter a valid 4 digit year between "+minYear+" and "+maxYear);
									errMsgDate = _msg_valid_year; 
									ok=1;
								}
								if (elemValue.indexOf(dtCh,pos2+1)!=-1 || isInteger(stripCharsInBag(elemValue, dtCh))==false){
									//alert("Please enter a valid date");
									errMsgDate = _msg_valid_date;
									ok=1;
								}
								
								if (ok)
								{
									err = 1;
	    					 		errMsg+= eval("_msg_"+elem.name);
	    					 		errMsg+= " : "+errMsgDate;
								}
		    				}
		    				else
		    				{
		    					err = 1;
	    						errMsg+= eval("_msg_"+elem.name);
		    				}
	    					break;			  
	    		default:	if(elemValue==false)
	    					 {
	    					 	err = 1;
	    					 	errMsg+= eval("_msg_"+elem.name);
	    					 }
	    					 else
	    					 {
	    					 	var minLength = elem.readAttribute("minLength")?elem.readAttribute("minLength"):0;
							  	if(minLength>elemValue.length)
							  	{
							  		err = 1;
							  		errMsg+= eval("_msg_"+elem.name+"_minLength");
							  	}
							  }
							  if(err)
							  {
								  if(!firstMandatoryElement){firstMandatoryElement = elem;}
							  }
	    	}
	    }
    });
    
    if(err==1){Event.stop(event);alert(errMsg);firstMandatoryElement.focus();}else{if(this.formId!=this.triggerElement){$(this.formId).submit();}}}
   });
   


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("The date format should be : mm.dd.yyyy");
		errMsgDate = _msg_valid_format;
		return errMsgDate
	}
	if (strMonth.length<1 || month<1 || month>12){
		alert("Please enter a valid month");
		errMsgDate = _msg_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");
		errMsgDate = _msg_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);
		errMsgDate = _msg_valid_year; 
		return false
	}
	if (dtStr.indexOf(dtCh,pos2+1)!=-1 || isInteger(stripCharsInBag(dtStr, dtCh))==false){
		alert("Please enter a valid date");
		errMsgDate = _msg_valid_date;
		return false
	}
return true
}

function ValidateForm(){
	var dt=document.frmSample.txtDate
	if (isDate(dt.value)==false){
		dt.focus()
		return false
	}
    return true
 }


