function FirstDateLess(startdate, enddate)
{	//dates are not empty and already checked for proper format
	arr = startdate.split("/");
	sday = 	eval(arr[0]);
	smonth = eval(arr[2]);
	syear = eval(arr[1]);
	arr = enddate.split("/");
	eday = 	eval(arr[0]);
	emonth = eval(arr[2]);
	eyear = eval(arr[1]);
	if (syear>eyear) {return false;}
	if ((smonth>emonth)&&(syear==eyear)) {return false;}
	if ((sday>eday)&&(smonth==emonth)&&(syear==eyear)) {return false;}
	return true;
}
//	functions for form fields disabling
//------------------------------------------------------
function restoreSelect(e) {
	for (var i=0;i<e.length;i++){
		if (e.options[i].selected != e.options[i].defaultSelected){
			e.options[i].selected = e.options[i].defaultSelected
		}
	}
}

function restoreRadio(e) {
	var element
	for (var i=0;i<e.form.elements[e.name].length;i++){
		element = e.form.elements[e.name][i]
		if (element.type=="radio") {
			if (element.checked != element.defaultChecked){
				element.checked = element.defaultChecked
			}
		}
	}
}

function restoreCheckBox(e) {
	var element
	for (var i=0;i<e.form.elements[e.name].length;i++){
		element = e.form.elements[e.name][i]
		if (element.type=="checkbox") {
			if (element.checked != element.defaultChecked){
				element.checked = element.defaultChecked
			}
		}
	}
}

function restoreText(e) {
	e.value = e.defaultValue
}

function disableform(vform, fields, fieldson) {
	var i
	for (i=0;i<vform.elements.length;i++) {
		if 	(fields == '' || fields.match('_'+vform.elements[i].name)){
			if (fields.match('on_'+vform.elements[i].name)) {
				canedit = true;
			}else{
				canedit = false;
			};
			switch (vform.elements[i].type) {
				case "select-one":
					if (!canedit){
						vform.elements[i].onchange = new Function("restoreSelect(this)");
						restoreSelect(vform.elements[i])
					}else{
						vform.elements[i].onchange = new Function("");
					};
					break
				case "select-multiple":					
					if (!canedit){
						vform.elements[i].onchange = new Function("restoreSelect(this)");
						restoreSelect(vform.elements[i])
					}else{
						vform.elements[i].onchange = new Function("");
					};
					break
				case "radio":
					if (!canedit){
						vform.elements[i].onclick = new Function("restoreRadio(this)")
						restoreRadio(vform.elements[i])
					}else{
						vform.elements[i].onclick = new Function("");
					};
					break
				case "checkbox":
					if (!canedit){
						vform.elements[i].onclick = new Function("restoreCheckBox(this)")
						restoreCheckBox(vform.elements[i])
					}else{
						vform.elements[i].onclick = new Function("");
					};
					break
				case "text":
					if (!canedit){
						vform.elements[i].onchange = new Function("restoreText(this); return false;")
						vform.elements[i].onkeydown = new Function("restoreText(this); return false;")
						restoreText(vform.elements[i])
					}else{
						vform.elements[i].onchange = new Function("");
						vform.elements[i].onkeydown = new Function("")
					};
					break
				case "textarea":
					if (!canedit){
						vform.elements[i].onchange = new Function("restoreText(this); return false;")
						vform.elements[i].onkeydown = new Function("restoreText(this); return false;")
						restoreText(vform.elements[i])
					}else{
						vform.elements[i].onchange = new Function("");
						vform.elements[i].onkeydown = new Function("")
					};
					break
			}
		}
	}
}


//	functions for form checking
//------------------------------------------------------
function IsEmpty(theString)
//  test if string contains all spaces - return true
{
	for (i=0; i<theString.length; i++)
		if (theString.substr(i,1)!=" ") 
			return false;
	return true;
}
//------------------------------------------------------
function SetColor(theColor)
//  sets new color for menu item
{
	window.event.srcElement.color=theColor;
}
//------------------------------------------------------
function isNumber(data)
// validate that user entered normal int values
{
	var str = String(data);

	var numStr="0123456789.";

	var thisChar;	
	var counter;
	counter=0;
	for (var i= 0; i<str.length; i++){
		thisChar = str.substring(i, i+1);
		if(numStr.indexOf(thisChar) != -1)
			counter++;
	}

	if (counter!=str.length)
	{
		return false;
	}

	return true;
}

function isInteger(data)
{
	var numstr="-0123456789";
	var thisChar;
	var counter = 0;
	
	data = trim(data);

	for (var i=0; i<data.length; i++)
	{
		thisChar = data.substring(i,i+1);
		if (numstr.indexOf(thisChar)!= -1)
			counter++;
	}

	if (counter == data.length )
		return 1;
	else return 0;
}

// delete lead and trailing white spaces
function trim(str){

        /* trim trailing white spaces */
	while (str.length > 0 && str.charAt(str.length - 1) == ' ')
	{
		str = str.slice(0, str.length - 1);
	}


	/* trim leading white spaces */
	while (str.length > 0 && str.charAt(0) == ' ')
	{
		str = str.slice(1, str.length);
	}

	return str;

}
var letters="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
var numbers="0123456789";
var PhoneSymbols = "+()-. " + numbers;
//-------------------------------------------------------------------------
function isValid(what,chars) {
	bool1=false;
	for (count1=0; (count1<what.length)&&(!bool1);count1++) {
		bool2=false;
		for (count2=0; (count2<chars.length)&&(!bool2);count2++) {
			if (what.charCodeAt(count1)==chars.charCodeAt(count2)) {
				bool2=true;
			}
		}
		if (!bool2) {
			bool1=true;
		}
	}
	return !bool1;
}
//-------------------------------------------------------------------------

function IsPhone(strPhone) {
	var s = new String (strPhone)
	if (!isValid(s, PhoneSymbols )) {return false}
	var tmp = new String(s.ce(/\D+/g,""))
	if (tmp.length == 10) {return true}
	return false
}

function IsSSN(strSSN) {
	var s = new String (strSSN)
	if (!isValid(s, numbers+"-" )) {return false}
	var tmp = new String(s.ce(/\D+/g,""))
	if (tmp.length == 9) {return true}
	return false
}
function IsUrl(strUrl) {
	   var pattern = /http:\/\/(\w+)/;
	   if (!pattern.test(strUrl)){
			return false;
	   }
		return true;
}
//-------------------------------------------------------------------------
function validateDate(strdata, dateformat) {
	//for right now date should be mmddyyyy
	var ok=0;
	strdata=String(strdata);
	if (!isValid(strdata, numbers+"/" )) {return false}
	datearray = strdata.split("/");
	if (datearray.length!=3) {return false}
	var mon = eval(datearray[0]);
	var days = eval(datearray[1]);
	var years = eval(datearray[2]);
	if (strdata.length<=10 && ( dateformat=="mm/dd/yyyy" || dateformat=="dd/mm/yyyy") ) {
		if(dateformat=="dd/mm/yyyy") {
			s_mon = days;
			days = mon;
			mon = s_mon;
		}
		if ((mon>0) && (mon<=12) && (years>=1900) && (days>0) ) {
			switch (mon) {
			case 1:
			case 3:
			case 5:
			case 7:
			case 8:
			case 10:
			case 12:
				//jan, mar, may, jul, aug, oct, dec
				if (days <=31) {
					ok=1;
				}
				break;
			case 2:
				if (days <=29) {
					ok=1;
				}
				break;
			case 4:
			case 6:
			case 9:
			case 11:
				if (days <=30) {
					ok=1;
				}
				break;
			}
		}
	}
	if (strdata.length<=8 && dateformat=="mm/dd/yy") {
		if ((mon>0) && (mon<=12) && (years>=0) && (days>0) ) {
			switch (mon) {
			case 1:
			case 3:
			case 5:
			case 7:
			case 8:
			case 10:
			case 12:
				//jan, mar, may, jul, aug, oct, dec
				if (days <=31) {
					ok=1;
				}
				break;
			case 2:
				if (days <=29) {
					ok=1;
				}
				break;
			case 4:
			case 6:
			case 9:
			case 11:
				if (days <=30) {
					ok=1;
				}
				break;
			}
		}
	}
	return ok;
}
//-------------------------------------------------------------------------
function isEmail(strEmail) {
	var name="";
	var server="";
	var strings=new Array();
	strings=strEmail.split("@");
	if (strings.length==1) {
//		alert("Error: E-mail address must contain symbol '@'");
		return false;
	} else if (strings.length==2) {
		name=strings[0];
		server=strings[1];
	} else {
//		alert("Error: E-mail address must contain only one symbol '@'");
		return false;
	}

	if (!isValid(name,letters+numbers+"._-")||name.length==0) {
//		alert("Error: Wrong E-mail address");
		return false;
	}
	
	strings=server.split(".");
	if (strings.length<2 ) {
//		alert("Error: Wrong E-mail address");
		return false;
	}

	for (i=0;i<strings.length;i++) {
		if (!isValid(strings[i],letters+numbers+"_-")||strings[i].length==0) {
//			alert("Error: Wrong E-mail address");
			return false;
		}
	}
	
	return true;
}
//-------------------------------------------------------------------------

function isFloat(strFloat) {
	var s = new String (strFloat)
	if (!(isValid(s, numbers+"+-." ))) {return false}
	var tmp1;
	tmp1 = s.split(".");
	if (tmp1.length>2){return false}
	return true;
}

//-------------------------------------------------------------------------

function isMoney(str) {
	var s = new String (str)
	if (!(isValid(s, numbers+".," ))) {return false}
	var tmp1;
	tmp1 = str.split(".");
	if (tmp1.length>2){return false}
	if (tmp1.length==2 && tmp1[1].length>2){return false}
	return true;
}

//-------------------------------------------------------------------------
function checkForm(which, Fields,allerrors) {
/*
You can enter values for name, type, required and len, minlength, maxvalue(including),, minvalue(including). 
Valid types are phone, numeric, money, float, zipcode, email, date, integer,ssn.
All spaces are significant. Field and type names are case-sensitive.
      Examples:
	Fields['Title'] = "required=1";
	Fields['HomePhone'] = "name='Home phone';required=1;type=phone";
	Fields['Email'] = "type=email";
	Fields['code\\d+'] = "name=Approval Code;type=numeric";
	Fields['Date'] = "type=date;dateformat=mm/dd/yy";
	Fields['SSN'] = "name=Social Security Number;type=numeric;len=9";

*/
	var errmsg;
	errmsg='';
// internal variables
	var pass = true;
	var limitarray;
	var limititem;
	var name;
	var dateformat;
	var fieldtempl;
	for (var i=0;i<which.length;i++){	//----- search for all text boxes and textareas---------------------
		var tempobj=which.elements[i];
		if (!(tempobj.type=="text"||tempobj.type=="textarea"||tempobj.type=="password")){ continue; }
//---- look for resembling item in Fields array---------------------------
	var proceed=true;
	var fieldname = tempobj.name;
	if (typeof(Fields[tempobj.name]=='undefined'))
	{
		proceed=false;
		for (var field in Fields) {    
			fieldtempl = field;
			re = new RegExp(fieldtempl);
			if (re.test(tempobj.name)) {
				fieldname = field;
				proceed=true;
				break;		
			}
		}   
	}
	if (proceed)
	{
		var limit = new Array();	//----- analyse limitation string for specified item----------------
		limitarray=Fields[fieldname].split(";");
		for (var j=0;j<limitarray.length;j++){
			limititem = limitarray[j].split("=");
			limit[limititem[0]]=limititem[1];
		}

	
		if ( typeof(limit['name'])=='undefined'){name=tempobj.name} else {name=limit['name']}
//----------------------------------- check for an empty value --------------------------------------------------		        
		if (typeof(limit['required'])!='undefined')
		{
			if ((tempobj.value.replace(/ /g,'')=='') && (limit['required']="1"))	{
				if (allerrors) 
				{ 
					errmsg = errmsg + "Please, fill in "+name+" field" + "\n";
				} else	{
					alert(makecap('required',name));
					which.elements[i].focus();
					return false;
				}
			}
		} 
//------------------------------------ check for type -------------------------------------------------------------
		if (typeof(limit['type'])!='undefined')
		{

			switch (limit['type']){   
			case "phone" 	 :       
				if (!((tempobj.value=='') || (IsPhone(tempobj.value)))){
					if (allerrors) { 
						errmsg = errmsg + "Please, check "+name+" field  - this should be telephone number." + "\n";
					} else	{
						alert(makecap(limit['type'],name));
						which.elements[i].focus();
						return false;
					}
				}
				break;   
			case "ssn" 	 :       
				if (!((tempobj.value=='') || (IsSSN(tempobj.value)))){
					if (allerrors) {
						errmsg = errmsg + "Make sure the "+name+" field is SSN." + "\n";
					} else	{
						alert(makecap(limit['type'],name));
						which.elements[i].focus();
						return false;
					}
				}
				break; 
			case "url" 	 :       
				if (!((tempobj.value=='') || (IsUrl(tempobj.value)))){
					if (allerrors) {
						errmsg = errmsg + "Please, check "+name+" field - this should be URL." + "\n";
					} else	{
						alert(makecap(limit['type'],name));
						which.elements[i].focus();
						return false;
					}
				}
				break; 
			case "numeric"	 :       
				if (!((tempobj.value=='') || (isValid(tempobj.value,numbers)))){
					if (allerrors) { 
						errmsg = errmsg + "Please, check "+name+" field - this should be number." + "\n";
					} else	{
						alert(makecap(limit['type'],name));
						which.elements[i].focus();
						return false;
					}
				}
				break;   
			case "integer"	 :       
				if (!((tempobj.value=='') || (isInteger(tempobj.value)))){
					if (allerrors) { 
						errmsg = errmsg + "Please, check "+name+" - field - this should be integer." + "\n";
					} else	{
						alert(makecap(limit['type'],name));
						which.elements[i].focus();
						return false;
					}
				}
				break;   
			case "money"	 :       
				if (!((tempobj.value=='') || (isMoney(tempobj.value)))){
					if (allerrors) { 
						errmsg = errmsg + "Make sure the "+name+" field has a proper money format." + "\n";
					} else	{
						alert(makecap(limit['type'],name));
						which.elements[i].focus();
						return false;
					}
				}
				break;   
			case "float"	 :       
				if (!((tempobj.value=='') || (isFloat(tempobj.value)))){
					if (allerrors) { 
						errmsg = errmsg + "Make sure the "+name+" field has a proper format." + "\n";
					} else	{
						alert(makecap(limit['type'],name));
						which.elements[i].focus();
						return false;
					}
				}
				break;   
			case "zipcode"	 :       
				if (!((tempobj.value=='') || ((isValid(tempobj.value,numbers))&&(tempobj.value.length == 5)))){
					if (allerrors) { 
						errmsg = errmsg + "Make sure the "+name+" field is a zipcode." + "\n";
					} else	{
						alert(makecap(limit['type'],name));
						which.elements[i].focus();
						return false;
					}
				}
				break;   
			case "date"	 :       
				
				if (typeof(limit['dateformat'])!='undefined')	{
					dateformat=limit['dateformat'];
				}else{
					dateformat="mm/dd/yyyy";
				}
				if (!((tempobj.value=='') || (validateDate(tempobj.value,dateformat)==1))){
					if (allerrors) { 
						errmsg = errmsg + "Проверьте, пожалуйста, правильность заполнения поля "+name+" - это дата в формате (" + dateformat + ")." + "\n";
					} else	{
						alert(makecap(limit['type'],name,dateformat));
						which.elements[i].focus();
						return false;
					}
				}
				break;   
			case "email"	 :       
				if (!((tempobj.value=='') || (isEmail(tempobj.value)))){
					if (allerrors) { 
						errmsg = errmsg + "Проверьте, пожалуйста, правильность заполнения поля "+name+" - это адрес эл. почты." + "\n";
					} else	{
						alert(makecap(limit['type'],name));
						which.elements[i].focus();
						return false;
					}
				}
				break;   

			}			
		} 
//------------------------------------ check for a proper length ----------------------------------------------------
		if (typeof(limit['minlength'])!='undefined')
		{
			if ((tempobj.value!='') && (tempobj.value.length < limit['minlength']))	{
				if (allerrors) { 
					errmsg = errmsg + "Длина поля "+name+" должна быть не больше " + limit['minlength'] + " символов." + "\n";
				} else	{
					alert(makecap('minlength',name,limit['minlength']));
					which.elements[i].focus();
					return false;
				}
			}

		}
		if (typeof(limit['maxlength'])!='undefined')
		{
			if ((tempobj.value!='') && (tempobj.value.length > limit['maxlength']))	{
				if (allerrors) { 
					errmsg = errmsg + "Максимальное длина поля "+name+" составляет " + limit['maxlength'] + " символов." + "\n";
				} else	{
					alert(makecap('maxlength',name,limit['maxlength']));
					which.elements[i].focus();
					return false;
				}
			}

		}
		if (typeof(limit['len'])!='undefined')
		{
			if ((tempobj.value!='') && (tempobj.value.length != limit['len']))	{
				if (allerrors) { 
					errmsg = errmsg + "Длина поля "+name+" должна быть  " + limit['len'] + " символов." + "\n";
				} else	{
					alert(makecap('len',name,limit['len']));
					which.elements[i].focus();
					return false;
				}
			}

		}

		if (typeof(limit['maxvalue'])!='undefined')
		{
			if ((tempobj.value!='') && ((limit['type']=='money')||(limit['type']=='numeric')||(limit['type']=='integer')||(limit['type']=='float')) && (Number(tempobj.value.replace(/,/g,'.')) > Number(limit['maxvalue'])))	{
				if (allerrors) { 
					errmsg = errmsg + "Максимальное значение поля "+name+"  составляет " + limit['maxvalue'] + "." + "\n";
				} else	{
					alert(makecap('maxvalue',name,limit['maxvalue']));
					which.elements[i].focus();
					return false;
				}
			}

		}

		if (typeof(limit['minvalue'])!='undefined')
		{
			if ((tempobj.value!='') && ((limit['type']=='money')||(limit['type']=='numeric')||(limit['type']=='integer')||(limit['type']=='float')) && (Number(tempobj.value.replace(/,/g,'.')) < Number(limit['minvalue'])))	{
				if (allerrors) { 
					errmsg = errmsg + "Минимальное значение поля "+name+" составляет " + limit['minvalue'] + "." + "\n";
				} else	{
					alert(makecap('minvalue',name,limit['minvalue']));
					which.elements[i].focus();
					return false;
				}
			}

		}

		 } //end if
		}  //end for
		if (errmsg!="")
		{	alert(errmsg);
			return false;
		}
		return true;
}

//--------------------------------------------------------------------------------------------------------------------

function DateHTML(value)
{
	var data,day,month,year;
	str = "";
	if (value == null)
		return str;

	data = new Date(value);

	if (isNaN(data))
		return str;

	else
	{
		day = data.getDate();

		if(day<10)
			day = '0' + day;

		month = data.getMonth() + 1;

		if(month<10)
			month = '0' + month;

		year = data.getYear();

		if(year<10)
			year = '0' + year;

		str = month + "/" + day + "/" + year;
		return str;
	}
}

//	function for linking two select elements parent - child
//--------------------------------------------------------------------------------------------------------------------
/*
	Array[i] = Array(parent value, value, text, default selected)
*/
function SetOptions(Parent, Child, ChildArray, MakeNull) {
	var i, ParentItem
	if (Parent.options.length>0) {
		ParentItem = Parent.options[Parent.selectedIndex].value
// clear options
		Child.options.length = 0
		if (MakeNull) {
			Child.options[Child.options.length] = new Option (MakeNull, '');
			Child.selectedIndex = 0
		} else{
			Child.selectedIndex = -1;
		};
		for (i = 0 ; i < ChildArray.length; i++) {
// add child options
			if (ChildArray[i][0] == ParentItem) {
				Child.options[Child.options.length] = new Option (ChildArray[i][2], ChildArray[i][1])
// select default selected options
				if (ChildArray[i][3] == 'selected') {
					Child.selectedIndex = Child.options.length - 1
				}			
			}
		}
	}
	else {
// clear options
		Child.options.length = 0
	}
}

/* captions for check form procedure */

function makecap(type, field, add){
	var cap;
	cap = caparr[caplanguage][type].replace("!!", field);
	cap = cap.replace("!add!", add);
	return cap;
};

caparr = new Array()
caplanguage = "english"
//caplanguage = "russian"

caparr["english"] = new Array()
caparr["russian"] = new Array()

caparr["english"]["required"] = "Please make sure the !! field was filled."
caparr["russian"]["required"] = "Поле !! должно быть заполнено."

caparr["english"]["phone"] = "Please make sure the !! field is phone number."
caparr["russian"]["phone"] = "Поле !! должно быть телефонным номером."

caparr["english"]["ssn"] = "Please make sure the !! field is SSN."
caparr["russian"]["ssn"] = "Поле !! должно быть SSN."

caparr["english"]["valid"] = "Please make sure the !! field is valid."
caparr["russian"]["valid"] = "Поле !! должно быть заполнено правильно."

caparr["english"]["url"] = "Please make sure the !! field is valid url address."
caparr["russian"]["url"] = "Поле !! должно быть урлом."

caparr["english"]["numeric"] = "Please make sure the !! field is numeric."
caparr["russian"]["numeric"] = "Поле !! должно быть числовым."

caparr["english"]["integer"] = "Please make sure the !! field has a proper integer format."
caparr["russian"]["integer"] = "Поле !! должно быть целым числом."

caparr["english"]["money"] = "Please make sure the !! field has a proper money format."
caparr["russian"]["money"] = "Поле !! должно быть деньгой."

caparr["english"]["proper"] = "Please make sure the !! field has a proper format."
caparr["russian"]["proper"] = "Поле !! должно быть заполнено правильно."

caparr["english"]["zip"] = "Please make sure the !! field is a zipcode."
caparr["russian"]["zip"] = "Поле !! должно быть зипом."

caparr["english"]["date"] = "Please make sure the !! field has the proper date format (!add!)."
caparr["russian"]["date"] = "Поле !! должно быть датой."

caparr["english"]["email"] = "Please make sure the email address is complete."
caparr["russian"]["email"] = "Поле !! должно быть имылом."

caparr["english"]["minlength"] = "Please make sure the !! field length is more than !add! symbols."
caparr["russian"]["minlength"] = "Поле !! должно быть длинной не менее !add! символов."

caparr["english"]["maxlength"] = "Please make sure the !! field length is less than !add! symbols."
caparr["russian"]["maxlength"] = "Поле !! должно быть длинной не более !add! символов."

caparr["english"]["len"] = "Please make sure the !! field length is !add! symbols."
caparr["russian"]["len"] = "Поле !! должно быть длинной !add! символов."

caparr["english"]["maxvalue"] = "Please make sure the !! field is less then !add!."
caparr["russian"]["maxvalue"] = "Поле !! должно быть не более !add!."

caparr["english"]["minvalue"] = "Please make sure the !! field is more then !add!."
caparr["russian"]["minvalue"] = "Поле !! должно быть не менее !add!."

