function OnMove(nPage)
{	
    document.frmPage.filterPageNumber.value = nPage; // page number
    document.frmPage.submit();
    return true;
}

function showcalendar(slot){
	wnd = window.open ("calendar.asp?yearSlot="+slot+"&method=Opener&today=show&none=show", "DateSelectWnd", "width=200,height=160");
	wnd.focus()
};

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('off_'+vform.elements[i].name) || (!fields.match('off_'+vform.elements[i].name) && !fields.match('on_'+vform.elements[i].name)))) {
			switch (vform.elements[i].type) {
				case "select-one":
					vform.elements[i].onchange = new Function("restoreSelect(this)")
					break
				case "select-multiple":					
					vform.elements[i].onchange = new Function("restoreSelect(this)")
					break
				case "radio":
					vform.elements[i].onclick = new Function("restoreRadio(this)")
					break
				case "checkbox":
					vform.elements[i].onclick = new Function("restoreCheckBox(this)")
					break
				case "text":
					vform.elements[i].onchange = new Function("restoreText(this); return false;")
					vform.elements[i].onkeydown = new Function("restoreText(this); return false;")
					break
				case "textarea":
					vform.elements[i].onchange = new Function("restoreText(this); return false;")
					vform.elements[i].onkeydown = new Function("restoreText(this); return false;")
					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 days = eval(datearray[0]);
	var mon = eval(datearray[1]);
	var years = eval(datearray[2]);
	if (strdata.length<=10 && dateformat=="dd/mm/yyyy") {
		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 isDateTime(str, dateformat){	
	if (dateformat=='') {
		dateformat='dd/mm/yyyy';
	};	
	var bits=new Array("mm","dd","yyyy","hh","nn","ss");
	var date=new Array();
// trim extra spaces
	str=str.replace(/^\s|\s$/g,"").replace(/\s\s/g," ");
	dateformat=dateformat.replace(/^\s|\s$/g,"").replace(/\s\s/g," ");
// check format
	if (str.replace(/\d/g,"0")!=dateformat.replace(/\w/gi,"0")){
		return false;
	};
// get date
	for (var i=0;i<bits.length;i++) {
		if (dateformat.indexOf(bits[i])!=-1){
			bit=str.substr(dateformat.indexOf(bits[i]),bits[i].length);
			date[bits[i]]=Number(bit);
		};
	};	
// check date
	var daysinmonth=new Array(31,((date["yyyy"] % 4)==0 ? 29 : 28),31,30,31,30,31,31,30,31,30,31);
	if (date["yyyy"]>2050 || date["yyyy"]<1900 || date["mm"]>12 || date["dd"]>daysinmonth[date["mm"]-1] || date["hh"]>23 || date["nn"]>59 || date["ss"]>59) {
		return false;
	}else{
		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,datetime,dateformat.
dateformat for datetime type includes  "mm","dd","yyyy","hh","nn","ss" and very various delimiters
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"||tempobj.type=="file")){ 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 + "Make sure the "+name+" field was filled." + "\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 + "Make sure the "+name+" field is phone 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 + "Make sure the "+name+" field is valid." + "\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 + "Make sure the "+name+" field is numeric." + "\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 + "Make sure the "+name+" field has a proper integer format." + "\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 "datetime"	 :       
				
				if (typeof(limit['dateformat'])!='undefined')	{
					dateformat=limit['dateformat'];
				}else{
					dateformat="dd/mm/yyyy";
				}
				if (!((tempobj.value=='') || (isDateTime(tempobj.value,dateformat)==1))){
					if (allerrors) { 
						errmsg = errmsg + "Make sure the "+name+" field has the proper date format (" + dateformat + ")." + "\n";
					} else	{
						alert(makecap(limit['type'],name,dateformat));
						which.elements[i].focus();
						return false;
					}
				}
				break;   
			case "date"	 :       
				
				if (typeof(limit['dateformat'])!='undefined')	{
					dateformat=limit['dateformat'];
				}else{
					dateformat="dd/mm/yyyy";
				}
				if (!((tempobj.value=='') || (validateDate(tempobj.value,dateformat)==1))){
					if (allerrors) { 
						errmsg = errmsg + "Make sure the "+name+" field has the proper date format (" + 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 + "Make sure the the email address is complete." + "\n";
					} else	{
						//alert(makecap(limit['type']),name);
						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 + "Make sure the "+name+" field length is more than " + limit['minlength'] + " symbols." + "\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 + "Make sure the "+name+" field length is less than " + limit['maxlength'] + " symbols." + "\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 + "Make sure the "+name+" field length is " + limit['len'] + " symbols." + "\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 + "Make sure the "+name+" field is less then " + 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 + "Make sure the "+name+" field is more then " + 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"

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"] = "Поле !! должно иметь правильный формат."

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"]["datetime"] = "Please make sure the !! field has the proper date format (!add!)."
caparr["russian"]["datetime"] = "Поле !! должно быть датой."

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!."

