
//List of the messages


function valid( )  {
// This function validates the content of fields depending on their types
var frm = window.document.forms[0];
var NumOfBlankFields = 0;
var BlankFields = new Array();
var FocusField = "";
var gfield = window.document.forms[0].DoB;

//return true;

if  (isDateFormat(gfield) == false) return false;
var elms=document.forms[0].elements;
for (var i=0; i<Fields.length ; i++) {	
	if (Fields[i].search('[[]]') != -1) {  // searching for a checkbox field name ending in []
		chk = false;
		for(var k=0;k<elms.length;k++) { // at least one resource must be selected before saving...
			if(elms[k].name == Fields[i]){
				if (elms[k].checked) {
					chk = true;
					break;
				}
			}
		}		
		if (chk == false) BlankFields[NumOfBlankFields++] = NumOfBlankFields+". "+Messages[i];
	} else {
		var FType=eval ( 'frm.'+Fields[i]+'.type' ) ;
		  switch (FType) { 
			case "text" : 
				if ( eval ( 'frm.'+Fields[i]+'.value' ) =='') {
//					if (CheckUnattached == "Yes" || (CheckUnattached == "No" && Fields[i] != 'club' && Fields[i] != 'UKAARCNum')) {
						BlankFields[NumOfBlankFields++] = NumOfBlankFields+". "+Messages[i];
						if (NumOfBlankFields == 1) FocusField = Fields[i];
//					}
				}  //This Closes the if
			break  //Closes the case
			case "textarea" : 
				if ( eval ( 'frm.'+Fields[i]+'.value' ) =='') {
					BlankFields[NumOfBlankFields++] = NumOfBlankFields+". "+Messages[i];
					if (NumOfBlankFields == 1) FocusField = Fields[i];
		//		eval('frm.'+Fields[i]+'.focus()');
				}  //This Closes the if
			break  //Closes the case
			case "select-one" :  // Dialog list
				if ( eval ( 'frm.'+Fields[i]+'.options[frm.'+Fields[i]+'.selectedIndex].text') == '-- select --' ) {
					BlankFields[NumOfBlankFields++] = NumOfBlankFields+". "+Messages[i];
				}  
			break    //Closes the case
			case "select-multiple":
				if ( eval ( 'frm.'+Fields[i]+'.selectedIndex')==-1) {
						BlankFields[NumOfBlankFields++] = NumOfBlankFields+". "+Messages[i];
				}  //Closes the if
			break    //Closes the case
			default:
				NumOfElements = eval ( 'frm.'+Fields[i]+'.length' );
				if (NumOfElements > 0) SwitchElementType = eval ( 'frm.'+Fields[i]+'[0].type' );
				else SwitchElementType = eval ( 'frm.'+Fields[i]+'.type' );
				switch (SwitchElementType) {
					case "radio" :
						chk = 'false';
						for (var m=0;  m < eval ('frm.'+Fields[i]+'.length') ; m++) {
							if ( eval ( 'frm.'+Fields[i]+'['+m +'].checked')) chk = 'true'; 
						 }  	//Closes the for Loop
						if (chk=='false') BlankFields[NumOfBlankFields++] = NumOfBlankFields+". "+Messages[i];
						break;   //Closes the case
					case "checkbox":
						chk = 'false';
						if (eval( 'frm.'+Fields[i]+'.checked') ) chk = 'true'; 
						if (chk=='false') BlankFields[NumOfBlankFields++] = NumOfBlankFields+". "+Messages[i];
						break;    //Closes the case
				  }   //This closes the first switch 
			 }   //This closes the switch 
	} // this closes the if a checkbox..with id []
}  //This closes the for Loop
if (frm.raceid.length){
	for (var m=0;  m < frm.raceid.length; m++) {	
		if ( eval ( 'frm.raceid'+'['+m +'].checked') ) RaceID = eval ( 'frm.raceid'+'['+m +'].value'); 
	 }  	//Closes the for Loop
} else RaceID = frm.raceid.value;
Club = trim(frm.club.value.toLowerCase());
if (CheckUnattached == "Yes") {
	if (Club == "" || Club == "attached" && (RaceID.search("Attached") != -1)) { 
		BlankFields[NumOfBlankFields++] = NumOfBlankFields+". Please specify a club name, or enter Unattached";
	} else if ((Club.search("unattached") != -1) && (RaceID.search("Attached") != -1)) {
		BlankFields[NumOfBlankFields++] = NumOfBlankFields+". The club is Unattached, but you have chosen the Attached race";
	}
}
/*else if (((Club.search("unattached") == -1) && Club != "") && (RaceID.search("Unattached") != -1)) {
	BlankFields[NumOfBlankFields++] = NumOfBlankFields+". You have entered a club, but have chosen the Unattached race";
}*/
/*
Email = trim(frm.email.value.toLowerCase());
if (Email.search("@") == -1) BlankFields[NumOfBlankFields++] = NumOfBlankFields+". Please specify a valid email address";
*/
if (parseInt(frm.age.value) < parseInt(frm.MinAge.value)) {
	BlankFields[NumOfBlankFields++] = NumOfBlankFields+". The minimum age to participate in this race is "+frm.MinAge.value;
} else if (parseInt(frm.age.value) > parseInt(frm.MaxAge.value)) {
	BlankFields[NumOfBlankFields++] = NumOfBlankFields+". The maximum age to participate in this race is "+frm.MaxAge.value;
}
if (NumOfBlankFields > 1) {
	alert("Unfortunately, the form cannot be submitted.\nThe following fields need completing:\n\n"+BlankFields.join('\n'));
	if (FocusField != "") eval('frm.'+FocusField+'.focus()');
	return false;
} else if (NumOfBlankFields == 1) {
	alert("Unfortunately, the form cannot be submitted.\nThe following field needs completing:\n\n"+BlankFields.join('\n'));
	if (FocusField != "") eval('frm.'+FocusField+'.focus()');
	return false;
} else return true;
}  //This closes the function


function Dlg(myurl, DlgName, DlgWth, DlgHgt) {
	var newWindow;
	var props = 'titlebar=0,resizable=0,toolbar=0,status=0,menubar=0,location=0,scrollbars=yes,directories=no';
	//	alert(window.event.screenX);
		// alert(e.layerX);
	//	   alert ("x position is " + evnt.pageX +"y position is " + evnt.pageY);  

	MousePosition = getPosition(window.event);
	if (MousePosition.x > 450) {
		var left= MousePosition.x -150;
		var top = MousePosition.y -150;
	} else {
		var left= 400;
		var top = 300;		
	}
	props += ',top='+ top + ',left=' + left;
	props += ",width="+DlgWth+"px";
	props += ",height="+DlgHgt+"px";

//	var props = 'resizable=no,toolbar=no,status=no,width=445,height=200px';
	newWindow = window.open(myurl, DlgName, props);
	newWindow.focus();
}

function checkFields() {
	if(document.LoginForm.emailAddress.value == ""){
		alert("Please enter an Email Address")
		return false
	}
	if(document.LoginForm.password.value == ""){
		alert("Please enter a Password")
		return false
	}
	return true
}

function checkCapsLock( e ) {
	var obj = document.getElementById("CapsLock");
	var myKeyCode=0;
	var myShiftKey=false;

	// Internet Explorer 4+
	if ( document.all ) {
		myKeyCode=e.keyCode;
		myShiftKey=e.shiftKey;

	// Netscape 4
	} else if ( document.layers ) {
		myKeyCode=e.which;
		myShiftKey=( myKeyCode == 16 ) ? true : false;

	// Netscape 6
	} else if ( document.getElementById ) {
		myKeyCode=e.which;
		myShiftKey=( myKeyCode == 16 ) ? true : false;

	}

	// Upper case letters are seen without depressing the Shift key, therefore Caps Lock is on
	if ( ( myKeyCode >= 65 && myKeyCode <= 90 ) && !myShiftKey ) {
		obj.style.visibility="visible";
		document.LoginForm.CapsLockStatus.value = "On";
		window.setTimeout("ClearMsg()", 1000);
	// Lower case letters are seen while depressing the Shift key, therefore Caps Lock is on
	} else if ( ( myKeyCode >= 97 && myKeyCode <= 122 ) && myShiftKey ) {
		obj.style.visibility="visible";
		document.LoginForm.CapsLockStatus.value = "On";
		window.setTimeout("ClearMsg()", 2000);
	} else {
		if (myKeyCode != 13) document.LoginForm.CapsLockStatus.value = "Off";
		obj.style.visibility="hidden";
	}
}

function checkEnter(e){ //e is event object passed from function invocation
	var characterCode; // literal character code will be stored in this variable
	
	if(e && e.which){ //if which property of event object is supported (NN4)
		e = e
		characterCode = e.which //character code is contained in NN4's which property
	}
	else{
		e = event
		characterCode = e.keyCode //character code is contained in IE's keyCode property
	}
	
	if(characterCode == 13){ //if generated character code is equal to ascii 13 (if enter key)
		if (checkFields()) {
			document.LoginForm.submit(); //submit the form
			return false;
		} else {
			return true;
		} 
	}
	else{	
		return true; 
	}
}

function CheckPopUp() {
	var frm = window.document.forms[0];
//	var mine = window.open('','','width=1,height=1,left=0,top=0,scrollbars=no');
//	if (mine) {
//		frm.PU.value = "Yes";
//		mine.close();
//	} else frm.PU.value = "No";
	frm.PU.value = "JSon";
}

function ClearMsg() {
	var obj = document.getElementById("CapsLock");
	obj.style.visibility="hidden";
}

function trim(stringToTrim) {
	return stringToTrim.replace(/^\s+|\s+$/g,"");
}

/*
       Misc.js
        
*/


var MonthsS = new Array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec");
var DaysS = new Array("Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun");
var MonthsL = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");

// global variables--reference to input field and owning frame
// being validated set when validate() called
var gField;
var gFrame;
var dd;
var mm;
var yyyy;
var CurrentField;

/************************************
   Begin validation routines
************************************/

// input field is not empty
function isNotEmpty() {
   if (gField.value == "" || gField.value == null) {
      alert("The selected field cannot be left empty.");
      gField.focus();
      gField.select();
      return false;
   }
   gField.value = gField.value.toUpperCase();
   return true;
}

//
function Okay2DoSearch() {
	gField = eval("document.forms[0].Fmin");
	CurrentField = "Minimum size"
 	if (gField.value != "" && gField.value != null)  if  (isPositiveInteger() == false) {
     		gField.focus();
   		gField.select();
		return false;
	}
	gField = eval("document.forms[0].Fmax");
	CurrentField = "Maximum size"
	if (gField.value != "" && gField.value != null)  if  (isPositiveInteger() == false) {
     		gField.focus();
   		gField.select();
		return false;
	}
	gField = eval("document.forms[0].DCmin");
	CurrentField = "Minimum created date"
 	if (gField.value != "" && gField.value != null)  if  (isDateFormat() == false) {
     		gField.focus();
   		gField.select();
		return false;
	}
	gField = eval("document.forms[0].DCmax");
	CurrentField = "Maximum created date"
	if (gField.value != "" && gField.value != null)  if  (isDateFormat() == false) {
     		gField.focus();
   		gField.select();
		return false;
	}
	gField = eval("document.forms[0].DMmin");
	CurrentField = "Minimum modified date"
 	if (gField.value != "" && gField.value != null)  if  (isDateFormat() == false) {
     		gField.focus();
   		gField.select();
		return false;
	}
	gField = eval("document.forms[0].DMmax");
	CurrentField = "Maximum modified date"
	if (gField.value != "" && gField.value != null)  if  (isDateFormat() == false) {
     		gField.focus();
   		gField.select();
		return false;
	}
	return true;
}


function StripOutCommasAndSpaces(inputStr){
k = 0;
var numStr = "";
for (var i = 0; i < inputStr.length; i++) {
	var oneChar = inputStr.charAt(i);
      	if (oneChar != "," && oneChar != " ") {
		numStr = numStr + inputStr.charAt(i);
		k = k + 1;
      	}
  }
return numStr;
}

// input value is a positive integer of any length
function isPositiveInteger() {
var Text = "\n\n  The selected field must be a positive, whole number (no letters or punctuation are allowed)."
var inputStr = gField.value;
if (inputStr.length == 0) return true;
 var num = parseInt(StripOutCommasAndSpaces(inputStr),10);
   if (isNaN(num)){
	alert("The " + CurrentField + " field is not a number." + Text);
         return false;
   }
   if (num < 0) {
	alert("The " + CurrentField + " field should be greater than 0." + Text);
         	return false;
  }
inputStr = num;
   for (var i = 0; i < inputStr.length; i++) {
      var oneChar = inputStr.charAt(i);
      if (oneChar < "0" || oneChar > "9") {
         alert("The " + CurrentField + " field is invalid.\n\n" +  Text);
         return false;
      }
   }
   return true;
}


// function CheckMin() 
function CheckMin() {
    	gField = eval("document.forms[0].Fmin");
	CurrentField = "Minimum size"
   	 if (isPositiveInteger()) {
		if (gField.value != "" && gField.value != null) {
			var min = parseInt(StripOutCommasAndSpaces(gField.value), 10);
			var max = parseInt(StripOutCommasAndSpaces(document.forms[0].Fmax.value), 10);
			if (min > max) {
         				document.forms[0].Fmax.value = parseInt(gField.value, 10) + 50;
    				document.forms[0].Fmax.focus();
    				document.forms[0].Fmax.select();
     			}
		}
  	 }
}

// function CheckMax() 
function CheckMax() {
    	gField = eval("document.forms[0].Fmax");
	CurrentField = "Maximum size"
   	 if (isPositiveInteger()) {
		if (document.forms[0].Fmin.value != "" && document.forms[0].Fmin.value != null) {
			var max = parseInt(StripOutCommasAndSpaces(gField.value), 10);
			var min = parseInt(StripOutCommasAndSpaces(document.forms[0].Fmin.value), 10);
			if (min > max) {
				if (max - 20000 < 0)
          					document.forms[0].Fmin.value = 0;
				else
					document.forms[0].Fmin.value = max - 10;
			}
		}
   	}
}
 
// function CheckDateMin() 
function CheckDateMin(CreatedOrModifed) {
	if (CreatedOrModifed == 'C') {
		CurrentField = "Minimum created date"
    		gField = eval("document.forms[0].DCmin");
		oField = eval("document.forms[0].DCmax");
	} else {
		CurrentField = "Minimum modified date"
   		gField = eval("document.forms[0].DMmin");
		oField = eval("document.forms[0].DMmax");
	}

 	 if (gField.value == "" || gField.value == null)  return;
   	 if (isDateFormat()) {
		var MinDate = new Date(yyyy, mm - 1, dd);	// month is expected to be in range 0 - 11
 		if (oField.value == "" || oField.value == null) {
			var newdate = MinDate.setTime(MinDate.getTime() + (1000*3600*24*31));
			day = MinDate.getDate(); 
			day = (day < 10) ? "0" + day : day; 
			month = MinDate.getMonth()  + 1;  	// month is 0 - 11
			month = (month < 10) ? "0" + month : month; 
			oField.value = day + "/" + month +"/" + MinDate.getFullYear();
       			oField.focus();
         			oField.select();
		} else {
      			var day = parseInt(oField.value.substring(0, 2),10);
      			var month = parseInt(oField.value.substring(3, 5),10);
      			var year = parseInt(oField.value.substring(6, 10),10);
			var MaxDate = new Date(year, month - 1, day); 	// month is expected to be in range 0 - 11
			if (MinDate.getTime() > MaxDate.getTime() ) {
				var newdate = MinDate.setTime(MinDate.getTime() + (1000*3600*24*31))
				day = MinDate.getDate();
				day = (day < 10) ? "0" + day : day; 
				month = MinDate.getMonth()  + 1;  // month is 0 - 11
				month = (month < 10) ? "0" + month : month;
				oField.value = day + "/" + month +"/" + MinDate.getFullYear();
       				oField.focus();
         				oField.select();
			}
     		}
	} else {
         		oField.focus(); // need this a workaround for bug????
         		gField.focus();
         		gField.select();
	}
}

// function CheckDateMax() 
function CheckDateMax(CreatedOrModifed) {
	if (CreatedOrModifed == 'C') {
		CurrentField = "Maximum created date"
    		gField = eval("document.forms[0].DCmax"); 
		var oField = eval("document.forms[0].DCmin");
	} else {
		CurrentField = "Maximum modified date"
    		gField = eval("document.forms[0].DMmax"); 
		var oField = eval("document.forms[0].DMmin");
	}

	 if (gField.value == "" || gField.value == null) { 
		oField.value = ""
		return;
	}
      	var day = parseInt(oField.value.substring(0, 2),10);
      	var month = parseInt(oField.value.substring(3, 5),10);
      	var year = parseInt(oField.value.substring(6, 10),10);
	var MinDate = new Date(year, month - 1, day); 	// month is expected to be in range 0 - 11
   	 if (isDateFormat()) {
		var MaxDate = new Date(yyyy, mm - 1, dd); 	// month is expected to be in range 0 - 11
		if (MinDate.getTime() > MaxDate.getTime()) {
			var newdate = MaxDate.setTime(MaxDate.getTime() - (1000*3600*24*31))
			day = MaxDate.getDate();
			day = (day < 10) ? "0" + day : day; 
			month = MaxDate.getMonth()  + 1;  // month is 0 - 11
			month = (month < 10) ? "0" + month : month;
			oField.value = day + "/" + month +"/" + MaxDate.getFullYear();
		}
   	} else { // invalid format, so set to the min date + 31 days...
		var newdate = MinDate.setTime(MinDate.getTime() + (1000*3600*24*31))
		day = MinDate.getDate();
		day = (day < 10) ? "0" + day : day; 
		month = MinDate.getMonth()  + 1;  // month is 0 - 11
		month = (month < 10) ? "0" + month : month;
		gField.value = day + "/" + month +"/" + MinDate.getFullYear();
	}
}
 


// check input date format, and repair if possible
function isDateFormat(gField) {
   var inputStr = gField.value;
 if (CurrentField = "undefined") {CurrentField = gField.name;}
   // convert hyphen delimiters to slashes
   while (inputStr.indexOf("-") != -1) {
      inputStr = replaceString(inputStr,"-","/");
   }
   var delim1 = inputStr.indexOf("/");
   var delim2 = inputStr.lastIndexOf("/");
   var Today = new Date();

   if (delim1 == -1) {   // there are no delimiters; extract component values
      	dd = parseInt(inputStr.substring(0,2),10);
      	mm = inputStr.substring(2, 4);
      	if (mm == "") {
		mm = Today.getMonth() + 1;
		SelectedMonth = MonthsS[mm-1];
		yyyy = Today.getFullYear(); 
    	 } else {
		mm = parseInt(mm,10);
		yyyy = inputStr.substring(4,inputStr.length);
	 	if (yyyy == "") yyyy = Today.getFullYear(); 
		else yyyy = parseInt(yyyy,10);
   	} 
   } else {  // there is at least one delimiter; extract component values
   	if (delim1 == delim2) {
      		dd = parseInt(inputStr.substring(0,delim1),10);
			mm = inputStr.substring(delim1 + 1, inputStr.length);
		if (mm != "") {
			mm = parseInt(mm,10);
			var SelectedMonth = inputStr.substring(delim1 + 1,inputStr.length).toLowerCase();
			for (var i = 0; i < 12; i++) {
				if (SelectedMonth == MonthsS[i].toLowerCase()) {mm = i+1;}
			}
			SelectedMonth = MonthsS[mm-1];
//			SelectedMonth = inputStr.substring(delim1 + 1,inputStr.length);
			yyyy = Today.getFullYear(); 
		} else {
			mm = Today.getMonth() + 1;
			yyyy = Today.getFullYear(); 
  		 }
  	} else {       // there are more than one delimiter; extract component values
      	dd = parseInt(inputStr.substring(0,delim1),10);
		mm = parseInt(inputStr.substring(delim1 + 1,delim2),10);
		var SelectedMonth = inputStr.substring(delim1 + 1,delim2).toLowerCase();
		for (var i = 0; i < 12; i++) {
			if (SelectedMonth == MonthsS[i].toLowerCase()) {mm = i+1;}
		}
//		SelectedMonth = inputStr.substring(delim1 + 1,delim2)
		SelectedMonth = MonthsS[mm-1];
		yyyy = inputStr.substring(delim2 + 1, inputStr.length);
		if (yyyy != "") yyyy = parseInt(yyyy,10);
		else yyyy = Today.getFullYear(); 
 	}
   }
   var TextMessage = 	"The date field is invalid.\n\n" + 
			"The date entry is not in an acceptable format.\n\nYou can enter dates in the following formats:\n\n" + 
			" dd, ddmm , ddmmyy, ddmmyyyy, dd/mm, dd/mmm, dd/mm/yy, dd/mmm/yyyy, dd/mm/yyyy, or dd-mm-yyyy."

 if (isNaN(dd) || isNaN(mm) || isNaN(yyyy)) {
     alert(TextMessage);
      return false;
   }

   if (mm < 1 || mm > 12) {
      // month value is not 1 thru 12
      alert("The date field is invalid.\n\n" + "Months must be entered between the range of 01 (January) and 12 (December).");
      return false;
   }
   if (dd < 1 || dd > 31) {
      // date value is not 1 thru 31
      alert("The date field is invalid.\n\n" + "Days must be entered between the range of 01 and a maximum of 31 (depending on the month and year).");
      return false;
   }
   if (yyyy < 100) {
      // entered value is two digits, which we allow for 1930-2029
      if (yyyy >= 30) {
         yyyy += 1900;
      } else {
         yyyy += 2000;
      }
   }
  if (!checkMonthLength(mm,dd)) {
      return false;
   }
   if (mm == 2) {
      if (!checkLeapMonth(mm,dd,yyyy)) {
         return false;
      }
   } 
//   gField.value = monthDayFormat(dd) + "/" + monthDayFormat(mm) + "/" + yyyy;
   gField.value = monthDayFormat(dd) + "/" + SelectedMonth + "/" + yyyy;
//   alert(gField.value);
   return true;
}

// check the entered month for too high a value
function checkMonthLength(mm,dd) {
   var months = new Array("","January","February","March","April","May","June","July","August","September","October","November","December");
   if ((mm == 4 || mm == 6 || mm == 9 || mm == 11) && dd > 30) {
      alert("The date field is invalid. \n\n" + months[mm] + " has only 30 days.");
      return false;
   } else if (dd > 31) {
      alert("The date field is invalid. \n\n" + months[mm] + " has only 31 days.");
      return false;
   }
   return true;
}

// check the entered February date for too high a value 
function checkLeapMonth(mm,dd,yyyy) {
   if (yyyy % 4 > 0 && dd > 28) {
      alert("The date field is invalid. \n\nFebruary of " + yyyy + " has only 28 days.");
      return false;
   } else if (dd > 29) {
      alert("The date field is invalid. \n\nFebruary of " + yyyy + " has only 29 days.");
      return false;
   }
   return true;
}

// convert month or day number to string, padding with leading zero if needed
function monthDayFormat(val) {
   if (isNaN(val) || val == 0) {
      return "01";
   } else if (val < 10) {
      return "0" + val;
   }
   return "" + val;
}


// String utilities for search/replace functions
// extract front part of string prior to searchString
function getFront(mainStr,searchStr){
   foundOffset = mainStr.indexOf(searchStr);
   if (foundOffset == -1) {
      return null;
   }
   return mainStr.substring(0,foundOffset);
}

// extract back end of string after searchString
function getEnd(mainStr,searchStr) {
   foundOffset = mainStr.indexOf(searchStr);
   if (foundOffset == -1) {
      return null;
   }
   return mainStr.substring(foundOffset+searchStr.length,mainStr.length);
}

// insert insertString immediately before searchString
function insertString(mainStr,searchStr,insertStr) {
   var front = getFront(mainStr,searchStr);
   var end = getEnd(mainStr,searchStr);
   if (front != null && end != null) {
      return front + insertStr + searchStr + end;
   }
   return null;
}

// remove deleteString
function deleteString(mainStr,deleteStr) {
   return replaceString(mainStr,deleteStr,"");
}

// replace searchString with replaceString
function replaceString(mainStr,searchStr,replaceStr) {
   var front = getFront(mainStr,searchStr);
   var end = getEnd(mainStr,searchStr);
   if (front != null && end != null) {
      return front + replaceStr + end;
   }
   return null;
}





/******************************************
   Begin validation dispatching mechanism
******************************************/
// validation function object constructor
function dispatcher(validationFunc) {
   this.doValidate = validationFunc;
}
var dispatchLookup = new Array
dispatchLookup["isNotEmpty"] = new dispatcher(isNotEmpty);
dispatchLookup["isPositiveInteger"] = new dispatcher(isPositiveInteger);
dispatchLookup["isDateFormat"] = new dispatcher(isDateFormat);

// main validation function called by form event handlers
function validate(frame, field, method) {
   gFrame = frame;
  // gField = eval("window." + frame.name + ".document.forms[0]." + field.name);
  gField = eval("window.document.forms[0]." + field.name);
   var args = validate.arguments;
   for (i = 2; i < args.length; i++) {
      if (!dispatchLookup[args[i]].doValidate()) {
         return false;
      }
   }
   return true;
}


function getPosition(e) {
	e = e || window.event;
    var cursor = {x:200, y:200};
	if (e) {
		if (e.screenX || e.screenY) {
			cursor.x = e.screenX;
			cursor.y = e.screenY;
		} 
		else {
			var de = document.documentElement;
			var b = document.body;
			cursor.x = e.clientX + 
				(de.scrollLeft || b.scrollLeft) - (de.clientLeft || 0);
			cursor.y = e.clientY + 
				(de.scrollTop || b.scrollTop) - (de.clientTop || 0);
		}
	}
    return cursor;
}

function cnt(w, CountObjName){
	var y=w.value;
	var r = 0;
	a=y.replace('\n',' ');
	a=a.split(' ');
	for (z=0; z<a.length; z++) {if (a[z].length > 0) r++;}
//	var Count=eval ( 'document.forms[0].Count'+i) ;
	var CountCopy= document.getElementById(CountObjName);
//	CountCopy.firstChild.nodeValue=r;
	CountCopy.innerHTML = r;
//	Count.value = r;
}

function CharacterCount(w, CountObjName, MaxChars){ // w = obj of textarea, CountObjName, used with onkeyup= event...
	var CountCopy = document.getElementById(CountObjName);
	if (w.value.length > MaxChars) w.value = w.value.substring(0, MaxChars); // restrict to maximum number of characters allowed
	if (CountCopy) CountCopy.innerHTML = MaxChars - w.value.length;
}

// Modal Dialog Box
// copyright 8th July 2006 by Stephen Chapman
// http://javascript.about.com/
// permission to use this Javascript on your web page is granted
// provided that all of the code in this script (including these
// comments) is used without any alteration
function pageWidth() {
	return window.innerWidth != null? window.innerWidth: document.documentElement && document.documentElement.clientWidth ? document.documentElement.clientWidth:document.body != null? document.body.clientWidth:null;}
	function pageHeight() {
		return window.innerHeight != null? window.innerHeight: document.documentElement && document.documentElement.clientHeight ? document.documentElement.clientHeight:document.body != null? document.body.clientHeight:null;}
	function posLeft() {
		return typeof window.pageXOffset != 'undefined' ? window.pageXOffset:document.documentElement && document.documentElement.scrollLeft? document.documentElement.scrollLeft:document.body.scrollLeft? document.body.scrollLeft:0;}
	function posTop() {
		return typeof window.pageYOffset != 'undefined' ? window.pageYOffset:document.documentElement && document.documentElement.scrollTop? document.documentElement.scrollTop: document.body.scrollTop?document.body.scrollTop:0;}
	function $(x){
		return document.getElementById(x);}
	function scrollFix(){
		var obol=$('ol');
		obol.style.top=posTop()+'px';
		obol.style.left=posLeft()+'px'
		}
	function sizeFix(){
		var obol=$('ol');
		obol.style.height=pageHeight()+'px';
		obol.style.width=pageWidth()+'px';
		}
function kp(e){
		ky=e?e.which:event.keyCode;
		if(ky==88||ky==120)hm();
	return false
}
function inf(h){
	tag=document.getElementsByTagName('select');
	for(i=tag.length-1;i>=0;i--)tag[i].style.visibility=h;
	tag=document.getElementsByTagName('iframe');
	for(i=tag.length-1;i>=0;i--)tag[i].style.visibility=h;
	tag=document.getElementsByTagName('object');
	for(i=tag.length-1;i>=0;i--)tag[i].style.visibility=h;
}
function sm(obl, wd, ht){
	var h='hidden';
	var b='block';
	var p='px';
	var obol=$('ol'); 
	var obbxd = $('mbd');
	obbxd.innerHTML = $(obl).innerHTML;
	obol.style.height=pageHeight()+p;
	obol.style.width=pageWidth()+p;
	obol.style.top=posTop()+p;
	obol.style.left=posLeft()+p;
	obol.style.display=b;
	var tp=posTop()+((pageHeight()-ht)/2)-12;
	var lt=posLeft()+((pageWidth()-wd)/2)-12;
	var obbx=$('mbox');
	obbx.style.top=(tp<0?0:tp)+p;
	obbx.style.left=(lt<0?0:lt)+p;
	obbx.style.width=wd+p;
	obbx.style.height=ht+p;
	inf(h);
	obbx.style.display=b;
	return false;
	}
function hm(){
	var v='visible';
	var n='none';
	$('ol').style.display=n;
	$('mbox').style.display=n;
	inf(v);
	document.onkeypress='';
}

function hm2(){
	var v='visible';
	var n='none';
//	$('ol').style.display=n;
//	$('mbox').style.display=n;
	$('mbox').style.width='600px';
//	inf(v);
	document.onkeypress='';
}


function initmb(){
	var ab='absolute';
	var n='none';
	var obody=document.getElementsByTagName('body')[0];
	var frag=document.createDocumentFragment();
	var obol=document.createElement('div');
	obol.setAttribute('id','ol');
	obol.style.display=n;
	obol.style.position=ab;
	obol.style.top=0;
	obol.style.left=0;
	obol.style.zIndex=1998;
	obol.style.width='100%';
	frag.appendChild(obol);
	var obbx=document.createElement('div');
	obbx.setAttribute('id','mbox');
	obbx.style.display=n;
	obbx.style.position=ab;
	obbx.style.zIndex=1999;
	var obl=document.createElement('span');
	obbx.appendChild(obl);
	var obbxd=document.createElement('div');
	obbxd.setAttribute('id','mbd');
	obl.appendChild(obbxd);
	frag.insertBefore(obbx,obol.nextSibling);
	obody.insertBefore(frag,obody.firstChild);
	window.onscroll = scrollFix; 
	window.onresize = sizeFix;
}

