	
// Code which handles all errors, so it isnt displayed in the status bar!
function handleError() {
	return true;
}
window.onerror = handleError;
	
// Tooltip
var DH = 0;var an = 0;var al = 0;var ai = 0;if (document.getElementById) {ai = 1; DH = 1;}else {if (document.all) {al = 1; DH = 1;} else { browserVersion = parseInt(navigator.appVersion); if ((navigator.appName.indexOf('Netscape') != -1) && (browserVersion == 4)) {an = 1; DH = 1;}}} function fd(oi, wS) {if (ai) return wS ? document.getElementById(oi).style:document.getElementById(oi); if (al) return wS ? document.all[oi].style: document.all[oi]; if (an) return document.layers[oi];}
function pw() {return window.innerWidth != null? window.innerWidth: document.body.clientWidth != null? document.body.clientWidth:null;}
function mouseX(evt) {if (evt.pageX) return evt.pageX; else if (evt.clientX)return evt.clientX + (document.documentElement.scrollLeft ?  document.documentElement.scrollLeft : document.body.scrollLeft); else return null;}
function mouseY(evt) {if (evt.pageY) return evt.pageY; else if (evt.clientY)return evt.clientY + (document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop); else return null;}
function popUp(evt,oi) {if (DH) {var wp = pw(); ds = fd(oi,1); dm = fd(oi,0); st = ds.visibility; if (dm.offsetWidth) ew = dm.offsetWidth; else if (dm.clip.width) ew = dm.clip.width; if (st == "visible" || st == "show") { ds.visibility = "hidden"; } else {tv = mouseY(evt) + 20; lv = mouseX(evt) - (ew/4); if (lv < 2) lv = 2; else if (lv + ew > wp) lv -= ew/2; if (!an) {lv += 'px';tv += 'px';} ds.left = lv; ds.top = tv; ds.visibility = "visible";}}}
function popUpText(text,td){document.getElementById(td).innerHTML=text;}

// Open new window
function openNewWindow() {
	var newWindow=window.open('about:home'); 
	newWindow.focus();
}	


// Validation functions
// -- ValidateNumber
// -- ValidateDate
// -- ValidateTime

// Declarations
var dtCh = "/";
var minYear = 1900;
var maxYear = 2100;

// Functions
function CopyDateToField(field, value) {
	var text = value;
	var d = new Date();
			
			
			
	// exit function if blank
	if (text=="") { 
		return 0;
	}
			
	// Check to see if it is a currently formatted date
	if (isFormatted(text)==true) {
		return 0;
	}
	
	// remove these characters and plug in 0
	text = removeChars(text,"/"); 
	text = removeChars(text," ");
	text = removeChars(text,".");
	text = removeChars(text,":");
	text = removeChars(text,"-");
	text = removeChars(text,"_");
	text = removeChars(text,"=");
	text = removeChars(text,",");
	newtext = text;
				
	// now predict entered dates
	if (text.length==1) {
		var newtext = c2(text.charAt(0)) + "/" + c2(d.getMonth()+1) + "/" + d.getFullYear()
	}			
	if (text.length==2) {
		var newtext = text.charAt(0) + text.charAt(1) + "/" + c2(d.getMonth()+1) + "/" + d.getFullYear()
	}	
	if (text.length==3) {
		var newtext = text.charAt(0) + text.charAt(1) + "/" + c2(text.charAt(2)) + "/" + d.getFullYear()
	}			
	if (text.length==4) {
		var newtext = text.charAt(0) + text.charAt(1) + "/" + text.charAt(2) + text.charAt(3) + "/" + d.getFullYear();
	}			
	if (text.length==6) {
		var newtext = text.charAt(0) + text.charAt(1) + "/" + text.charAt(2) + text.charAt(3) + "/20" +  text.charAt(4) + text.charAt(5);
	}		
	if (text.length==8) {
		var newtext = text.charAt(0) + text.charAt(1) + "/" + text.charAt(2) + text.charAt(3) + "/" + text.charAt(4) + text.charAt(5) + text.charAt(6) + text.charAt(7);
	}			

	text = newtext;				
	if (isDate(text)==false) { // check validity of date. if false then return blank string 
		field.value = "";
		field.select();	
		return "";
	}
	field.value = FormatDate(newtext); // return new date	
}

function ValidateNumber(field) {
	var text = field.value;
	
	// exit function if blank
	if (text=="") { 
		return 0;
	}
	// validate number
	if (isInteger(text)==false) {
		alert("Please enter a valid number")	
		field.value = "";	
		field.select();	
	}
}

function ValidateCurrency(field) {
	var text = field.value;
	
	// exit function if blank
	if (text=="") { 
		return 0;
	}
	// validate number
	if (isDecimal(text)==false) {
		alert("Please enter a valid number")
		field.value = "";	
		field.select();	
	}
}

function ValidateTime(field) {
	var text = field.value;
	var	newtext = text;	
			
	// exit function if blank
	if (text=="") { 
		return 0;
	}			
	// validate time
	if (text.length==4) {
		var newtext = text.charAt(0) + text.charAt(1) + ":" + text.charAt(2) + text.charAt(3);
	}
	if (text.length==3) {
		var newtext = "0" + text.charAt(0) + ":" + text.charAt(1) + text.charAt(2);
	}
	if (text.length==2) {
		var newtext = text.charAt(0) + text.charAt(1) + ":00";
	}
	if (text.length==1) {
		var newtext = "0" + text.charAt(0) + ":00";
	}

	text = newtext;		
	if (TestString(text)==false)	{
		alert("Please enter a valid time")		
		field.value = "";
		field.select();	
		return "";
	}	
	field.value = text;		
}

function ValidateDuration(field) {
	var text = field.value;
	var newtext = text;
	
	if (text=="") {
		return 0;
	}

	//Declare delimiters array.
	var arrDelimiters = new Array(3);
	arrDelimiters[0]=" ";
	arrDelimiters[1]=":";
	arrDelimiters[2]=".";
	
	var blnFound = false;
	var strtemp = "";
	
	for (var i = 0; i < arrDelimiters.length; i++) {
		
		strtemp = "";
		
		for (var j = 0; j < text.length; j++) {
		
			if (text.charAt(j) == arrDelimiters[i]) {
				if (blnFound == false) {
					strtemp = strtemp + "COLON";
					blnFound = true;
				} else {
					strtemp = strtemp + "DISCARD";									
				}				
			} else {
				strtemp = strtemp + text.charAt(j);
			}
			
		}
		
		text = strtemp;
		
	}
	
	text = text.replace(/COLON/g, ":");
	text = text.replace(/DISCARD/g, "");	
	
	if (text.indexOf(':') >= 0) {
	
		//Delimiter found, should only be one, split into an array.
		var arrtemp = text.split(":");
		
		var strhours = "00" + arrtemp[0];
		var strmins = arrtemp[1] + "00";
		
		//Take the left and right side of 
		newtext = RightStr(strhours, 2) + ":" + LeftStr(strmins, 2)
	
	} else {
		//No delimiter, work from back to front.
		
		if (text.length==4) {
			newtext = text.charAt(0) + text.charAt(1) + ":" + text.charAt(2) + text.charAt(3);
		}
		if (text.length==3) {
			newtext = "0" + text.charAt(0) + ":" + text.charAt(1) + text.charAt(2);
		}
		if (text.length==2) {
			newtext = "00:" + text.charAt(0) + text.charAt(1);
		}
		if (text.length==1) {
			newtext = "00:0" + text.charAt(0);
		}		
		
	}
	
	text = newtext;
	if (TestString(text)==false) {
		alert("Please enter a valid time")
		field.value = "";
		field.select();
		return "";
	}	
	field.value = text;	
}

function RightStr(pStr, pLen) {
	var n = pStr.length;
	var strret = pStr.substring(n - pLen);
	return strret;
}

function LeftStr(pStr, pLen) {
	var n = pStr.length;
	var strret = pStr.substring(0, pLen);
	return strret;
}
					
function TestString(S) { // Time Validation
	return /^([01]?[0-9]|[2][0-3])(:[0-5][0-9])?$/.test(S) 
}
			
function c2(S) {
	var S2 = S;
	S2 = S2 + " ";
	
	if (S2.length==1) {
		return ""
	}
	if (S2.length==2) {
		return "0" + S2.charAt(0)
	}
	if (S2.length==3) {
		return S2.charAt(0) + S2.charAt(1)
	}
	if (S2.length==5) {
	    return S2.charAt(0) + S2.charAt(1) + S2.charAt(2) + S2.charAt(3)
	}
}						
			
function ValidateDate(field) {
	var text = field.value;
	var d = new Date();
			
	// exit function if blank
	if (text=="") { 
		return 0;
	}
			
	// Check to see if it is a currently formatted date
	if (isFormatted(text)==true) {
		return 0;
	}
	
	// remove these characters and plug in 0
	text = removeChars(text,"/"); 
	text = removeChars(text," ");
	text = removeChars(text,".");
	text = removeChars(text,":");
	text = removeChars(text,"-");
	text = removeChars(text,"_");
	text = removeChars(text,"=");
	text = removeChars(text,",");
	newtext = text;
				
	// now predict entered dates
	if (text.length==1) {
		var newtext = c2(text.charAt(0)) + "/" + c2(d.getMonth()+1) + "/" + d.getFullYear()
	}			
	if (text.length==2) {
		var newtext = text.charAt(0) + text.charAt(1) + "/" + c2(d.getMonth()+1) + "/" + d.getFullYear()
	}	
	if (text.length==3) {
		var newtext = text.charAt(0) + text.charAt(1) + "/" + c2(text.charAt(2)) + "/" + d.getFullYear()
	}			
	if (text.length==4) {
		var newtext = text.charAt(0) + text.charAt(1) + "/" + text.charAt(2) + text.charAt(3) + "/" + d.getFullYear();
	}			
	if (text.length==6) {
		var newtext = text.charAt(0) + text.charAt(1) + "/" + text.charAt(2) + text.charAt(3) + "/20" +  text.charAt(4) + text.charAt(5);
	}		
	if (text.length==8) {
		var newtext = text.charAt(0) + text.charAt(1) + "/" + text.charAt(2) + text.charAt(3) + "/" + text.charAt(4) + text.charAt(5) + text.charAt(6) + text.charAt(7);
	}			

	text = newtext;				
	if (isDate(text)==false) { // check validity of date. if false then return blank string 
		field.value = "";
		field.select();	
		return "";
	}
	field.value = FormatDate(newtext); // return new date	
}
						
function FormatDate(text) {
	if (text == "") {
		return "";
	}

	newtext = text.charAt(0) + text.charAt(1) + "-"
	month = text.charAt(3) + text.charAt(4)

	if (month=="01") {
		newtext = newtext + "Jan-";
	}
	if (month=="02") {
		newtext = newtext + "Feb-";
	}
	if (month=="03") {
		newtext = newtext + "Mar-";
	}
	if (month=="04") {
		newtext = newtext + "Apr-";
	}
	if (month=="05") {
		newtext = newtext + "May-";
	}
	if (month=="06") {
		newtext = newtext + "Jun-";
	}
	if (month=="07") {
		newtext = newtext + "Jul-";
	}
	if (month=="08") {
		newtext = newtext + "Aug-";
	}
	if (month=="09") {
		newtext = newtext + "Sep-";
	}
	if (month=="10") {
		newtext = newtext + "Oct-";
	}
	if (month=="11") {
		newtext = newtext + "Nov-";
	}
	if (month=="12") {
		newtext = newtext + "Dec-";
	}

	newtext = newtext + text.charAt(6) + text.charAt(7) + text.charAt(8) + text.charAt(9);
	return newtext;			
}

function isFormatted(S) {
	// formatted as in dd-MMM-yyyy (just do a quick format)
	if (S.length!=11){
		return false;
	}
	if (isInteger(S.charAt(0))==false) {
		return false
	}
	if (isInteger(S.charAt(1))==false ){
		return false
	}
	if (S.charAt(2) != "-") {
		return false
	}
	if (isCharacter(S.charAt(3))==false) {
		return false
	}
	if (isCharacter(S.charAt(4))==false) {
		return false
	}
	if (isCharacter(S.charAt(5))==false) {
		return false
	}
	if (S.charAt(6) != "-") {
		return false
	}
	if (isInteger(S.charAt(7))==false) {
		return false
	}
	if (isInteger(S.charAt(8))==false ){
		return false
	}
	if (isInteger(S.charAt(9))==false) {
		return false
	}
	if (isInteger(S.charAt(10))==false ){
		return false
	}
	return true
}

function removeChars(mystring,chartoremove) {
	var tstring = "";
	
	mystring = '' + mystring;
	splitstring = mystring.split(chartoremove);
	if (splitstring.length==1) {
		return mystring
	}
	for (i = 0; i < splitstring.length; i++)
		{
			tstring += c2(splitstring[i]);
		}
	return tstring;
}

function isCharacter(s) {
	if ((s >= "a" && s <= "z") || (s >= "A" && s <= "Z")) {
		return true
	}
	return false
}

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 isDecimal(s){
	var i;
    
    for (i = 0; i < s.length; i++){   
        // Check that current character is a number or decimal place.
        var c = s.charAt(i);
        if ( (((c < "0") || (c > "9"))) && (c != ".") ) return false;
    }
    // All characters are numbers or a decimal place.
    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
}

function isDate(dtStr){
	var daysInMonth = daysArray(12)
	var pos1=dtStr.indexOf(dtCh)
	var pos2=dtStr.indexOf(dtCh,pos1+1)
	var strDay=dtStr.substring(0,pos1)
	var strMonth=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 : dd-mmm-yyyy")
		return false
	}
	if (strMonth.length<1 || month<1 || month>12){
		alert("Please enter a 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")
		return false
	}
	if (strYear.length != 4 || year==0 || year<minYear || year>maxYear){
		alert("Please enter a valid 4 digit year between "+minYear+" and "+maxYear)
		return false
	}
	if (dtStr.indexOf(dtCh,pos2+1)!=-1 || isInteger(stripCharsInBag(dtStr, dtCh))==false){
		alert("Please enter a valid date")
		return false
	}
	return true
}

function toProperCase(s)
{
  return s.toLowerCase().replace(/^(.)|\s(.)/g, 
          function($1) { return $1.toUpperCase(); });
}