//
// ______________________________________________________________________
// Prepared by	:	Fikret Onal
// Date			:	Jun 9, 2003
//
// .js			:	UIValidation.js
// ______________________________________________________________________

	vfydelete = "You are about to delete the record.\nIf you click OK, you will not be able to undo this delete operation.\nAre you sure you want to delete the record?\n\nClick OK to delete, CANCEL to abort the operation."
	
	function takeaction(URL) {
		if (URL!="") document.frm.action = URL;	
		document.frm.submit();
	}

	function areusuretodelete(url) {
		if (confirm(vfydelete)) takeaction(url);
	}

	function areusure(url, q) {
		if (confirm(q)) takeaction(url);
	}
	function remove() {return confirm(vfydelete);}
	function goback() {window.history.go(-1);}
	
	function GetPage(PageNumber) {	
		var frmaction = document.frm.action;		
		if ((frmaction.indexOf("&Page=")<0) && (frmaction.indexOf("?Page=")<0)) {
			if (frmaction.indexOf("?")>=0)
				document.frm.action = document.frm.action + "&Page=" + PageNumber;
			else
				document.frm.action = document.frm.action + "?Page=" + PageNumber;
		}
		document.frm.submit();
	}

	function cbool(b) {
		return (b ? "True" : "False");
	}
	
	function printPage() {
		document.all("cmdClose").style.display="none";
		if (window.print)
			setTimeout('window.print();',200);
		else
			alert( "Comment could NOT be sent. Please press Ctrl+P or select 'Print' option in the File menu." );
	}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//Numeric functions
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	function tozero( val ) {
		val = delimfree(val, ' ');
		return (val=='' ? 0 : val);
	}
	
	function zerofree( val ) {
		var j, zf=false;
		val = onlynumeric(val);
		for (j = 0; j<val.length; j++) {
			zf = (!(val.substr(0, 1)=="0"))
			if (val.length>=2) zf = (zf || (val.substr(1, 1)=="."))
			if (!(zf)) val = val.substring(1, val.length);
		}
		return val;
	}

	function onlynumeric( val ) {
		var j;
		var s = new String("0123456789-.");
		val = delimfree(val, ',');
		
		for (j = 0; j<val.length; j++)
			if (s.indexOf(val.charAt(j))==-1) val = val.substring(0,j);
		return val;	
	}

	function delimfree( val, delim ) {
		var num = new String();
		num = val;
		while (num.indexOf(delim, 0)>0) 
			num = num.replace(delim, '');
		return num;
	}

	function curkeys(thisis, e, mantissa) {
		thisis.value = zerofree(thisis.value);
		var num = thisis.value;
		var dec = num.indexOf('.', 0);
		var k = e.keyCode;
		if( k>=32 && k<=255 ) {
			if( (k>=48 && k<58) || k==46) {
				if (dec>=0) {
					if (k==46) return false;
					//if (num.substr(dec, num.length).length<=mantissa) return false;
				}
				if (k==46) {
					if (num=="" || num=="0") 
						thisis.value = 0; 
					else 
						thisis.value = zerofree(num);
				}
				return true;
			}
			return false;
		}
	}

	function numkeys( e ) {
		var k = e.keyCode;
		if (k>=32 && k<=255) return (k>=48 && k<58);
	}

	function intkeys( thisis, e ) {
		thisis.value = zerofree(thisis.value);

		var k = e.keyCode;
		if (k>=32 && k<=255) return (k>=48 && k<58);
	}

	function MDykeys(thisis, e) {
		var k = e.keyCode;
		
		if (k>=32 && k<=255) {
			if (k==48) return (!(thisis.value=="0"));
			else if (k>48 && k<58) return true;
			return false;
		}
	}

	// onblur
	function patterncur( x ) { 
		x.value = byschema(new String("-0123456789.,"), new String(x.value));
	}
	
	function patternnum( x ) {
		x.value = byschema(new String("0123456789"), new String(x.value));
	}

	function patternphone( x ) {
		x.value = byschema(new String("+0123456789()-"), new String(x.value));
	}
	
	function byschema( s, val ) {
		var j, ch = "";
		for (j = 0; j<val.length; j++)
			if (s.indexOf(val.charAt(j))!=-1) ch += val.substr(j, 1);
		return ch;	
	}

	function alphaset(val) {
		var s = new String("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ");
		for (var j = 0; j<val.length; j++)
			if (s.indexOf(val.charAt(j))!=-1) return false;
		return true;
	}

	function numericset(val) {
		var s = new String("0123456789");
		for (var j = 0; j<val.length; j++)
			if (s.indexOf(val.charAt(j))!=-1) return false;
		return true;
	}

	function alphanumeric(val) {
		return (alphaset(val) && numericset(val));
	}
	
	function patternmatch(val, p) {
		var s = new String(p);
		for (var j = 0; j<val.length; j++)
			if (s.indexOf(val.charAt(j))==-1) return false;
		return true;
	}

function readplaintext(s) {
	var t = new String(s);
	t = replace(t,"\r",""); //CR
	t = replace(t,"\n",""); //LF
	return t;
}

function readtext(s) {
	// \b Backspace 
	// \f Form feed 
	// \n Newline 
	// \r Carriage return 
	// \t Tab 
	// \' Apostrophe or single quote 
	// \" Double quote 
	// \xxx The character with the encoding specified by the three octal digits xxx. 	
	if (s == null) return "";
	  
	var t = new String(s);
	t = replace(t,"\\","\\\\");
	t = replace(t,"'","\\\'");
	t = replace(t,"\"","\\\"");
	t = replace(t,"\r","\\r"); //CR
	t = replace(t,"\n","\\n"); //LF
	return t;
} 

	function textAreaKey(x, n) {
		if( x.value.length > n ) {
			alert( "Could NOT be entered more than " + n + " characters." );
			return  false;
		}
		return true;
	}

	function textAreaChg(x, n) { 
		var s;
		if( x.value.length > n ) {
			alert( "Could NOT be entered more than " + n + " characters and the text is now trimmed." );
			s = new String( x.value );
			x.value = s.substring(0,n);
		}
	}

	function timeRange(c, maxval) {
		if (c.value == "") c.value = "0";
		c.value %= maxval;
		if (c.value.length < 2) c.value = "0" + c.value;
	}

	function autotab( x, a, k, ln ) {
		var s,f;

		if( !((k >= 48 && k <58) || (k>=96 && k<106)) ) return;
		s = x.value;

		if( s.length==ln ) {
			f = x.form;
			f.elements[a].focus();
			f.elements[a].select();
		}
	}

	// onkeyup
	function digitgrouping(thisis) {
		var tempstr, newstr, negative;
		var mantissa = new String();	
		var aftercomma = "";

		var str = delimfree(thisis.value, ',');
		//negative = (str.substr(0, 1)=="-");
		//if (negative) str = str.substring(1, str.length)
		
		var tmp = new String();
		tmp = str;
		
		if (tmp.indexOf(".",0)>0) {
			str = tmp.substring(0, tmp.indexOf(".", 0))
			mantissa = tmp.substring(tmp.indexOf(".", 0), tmp.length)
		}

		var output;
		if (str.length > 2) {
			tempstr=str;
			newstr="";
			while (tempstr.length>3) {
				newstr=","+tempstr.substr(tempstr.length-3)+newstr;
				tempstr=tempstr.substr(0,tempstr.length-3);
			}		
			output = tempstr+newstr+aftercomma;
			if (mantissa.length>0) output+= mantissa;
		//	if (negative) output = "-"+output;
			thisis.value = output;
		}
		return true;
	}
	
	function formatnumber(number) {
		number = number+'';
		
		var mantissa = new String();	
		var tmp = new String();
		tmp = number;
		if (tmp.indexOf(".",0)>0) {
			number = tmp.substring(0,tmp.indexOf(".",0))
			mantissa = tmp.substring(tmp.indexOf(".",0),tmp.length)
		}

		var output;
		if (number.length > 2) {
			var mod = number.length % 3;
			output = (mod > 0 ? (number.substring(0,mod)) : '');
			for (i=0; i < Math.floor(number.length / 3); i++) {
				if (i == 0)
					output += number.substring(0, mod);
				else
					output+= ',' + number.substring(3*(i-1)+mod, (3*i)+mod);
			}
		}
		else output = number;
		if (mantissa.length>0) output+= mantissa;
		return (output);
	}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//Treeview, Checklist selection
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	var selectedSibling;
	function OpenSubMenu(Sibling) {
		selectedSibling = Sibling;
		if (document.all("Sibling"+Sibling).style.display=="none")
			document.all("Sibling"+Sibling).style.display = "";
		else
			document.all("Sibling"+Sibling).style.display="none"
	}

	var allselected;
	function selectall() {
		var f=document.all;	
		allselected = !allselected;
		if (isNaN(f.Id.length)) {
			f.Id.checked=allselected;
		} else {
			for (var i=0;i<f.Id.length;i++) f.Id[i].checked=allselected;
		}
	}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//Popups :: popupwindow, Calendar & Employees (Supervisors), Users and Positions Searches
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	function popuphelpwindow(URL) {
		window.open(URL,'popup','width=700,height=528,resizable=yes,scrollbars=yes,left=0,top=0,');
	}

	function popupwindow(URL, w, h) {
		window.open(URL,'popup','width='+w+',height='+h+',resizable=no,scrollbars=no,left=0,top=0,');
	}

	function reloadopener(reload) {
		if (reload==1) window.opener.frm.submit();
		window.close();
	}

	function opencalendarwithmessage(dtlng, dtname, dttime, msg) {
		var dt = eval('document.all.'+dtname+'Day');
		if ((dt.readOnly) || (dt.disabled)) return;
		
		var URL = "../Calendar.asp?dtlang="+dtlng+"&dt="+dtname+"&dtday="+readdate(dtname)+"&dttime="+dttime+"&msg="+msg;
		window.showModalDialog(URL, window, 'dialogHeight:320px;dialogWidth:280px;center:Yes;help:No;resizable:No;status:No;');
	}

	function openCalendar(dtlng, dtname, dttime) {
		var dt = eval('document.all.'+dtname+'Day');
		if ((dt.readOnly) || (dt.disabled)) return;
		
		var URL = "../Calendar.asp?dtlang="+dtlng+"&dt="+dtname+"&dtday="+readdate(dtname)+"&dttime="+dttime;
		window.showModalDialog(URL, window, 'dialogHeight:230px;dialogWidth:280px;center:Yes;help:No;resizable:No;status:No;');
	}

	function SearchPositions(force, Reload) {
		var srchName;
		if (force) srchName = ""; else srchName = document.frm.FoundPositionTitle.value;
		document.frm.FoundPosition.value="";
		document.frm.FoundPositionTitle.value="";

		if (document.frm.FoundPositionTitle.value!="" || force )
			window.open("FindPosition.asp?Position=" + srchName + "&Reload=" + Reload, "Positions", "width=520,height=500,resizable=no,scrollbars=yes");
	}

	function SearchEmployees(force, Supervisors, Reload) {
		var srchName;
		if ( force ) srchName = ""; else srchName = document.frm.FoundEmployeeFullname.value;
		document.frm.FoundEmployee.value="";
		document.frm.FoundEmployeeFullname.value="";
		document.frm.FoundPosition.value="";
		document.frm.FoundPositionNumber.value="";
		document.frm.FoundSequence.value="";

		if (document.frm.FoundEmployeeFullname.value!="" || force)
			window.open("SearchEmployee.asp?FirstName=" + srchName + "&Supervisors=" + Supervisors + "&Reload=" + Reload, "Employees", "width=580,height=280,resizable=no,scrollbars=yes");
	}
	
	function SearchEmployeesCodes(force, Supervisors, Reload) {
		var srchName;
		if ( force ) srchName = ""; else srchName = document.frm.FoundEmployeeFullname.value;
		document.frm.FoundEmployee.value="";
		document.frm.FoundEmployeeFullname.value="";
		document.frm.FoundPosition.value="";
		document.frm.FoundPositionNumber.value="";
		document.frm.FoundSequence.value="";

		if (document.frm.FoundEmployeeFullname.value!="" || force)
			window.open("../SearchEmployee.asp?FirstName=" + srchName + "&Supervisors=" + Supervisors + "&Reload=" + Reload, "Employees", "width=580,height=280,resizable=no,scrollbars=yes");
	}
	
	function SearchUser(force, LoadPosition) {
		var srchName;
		if (force) srchName = ""; else srchName = document.frm.Process_Owner_User.value;
		document.frm.Process_Owner_User.value="";

		if( document.frm.Process_Owner_User.value!="" || force )
			window.open("FindUsers.asp?UserId=" + srchName + "&LoadPosition=" + LoadPosition, "Users", "width=520,height=500,resizable=no,scrollbars=yes");
	}

	function LoadPosition(force, Reload) {
		var srchName;
		if ( force ) srchName = ""; else srchName = document.frm.APosition.value;
		document.frm.APosition.value="";
		document.frm.APositionName.value="";

		if( document.frm.APosition.value!="" || force ) {
			window.open("FindPositions.asp?Position=" + srchName + "&Reload=" + Reload, "Positions", "width=520,height=500,resizable=no,scrollbars=yes");
		}
	}

	function LoadUser(force, Reload) {
		var srchName;
		if ( force ) srchName = ""; else srchName = document.frm.FoundFullname.value;
		document.frm.FoundUser.value="";
		document.frm.FoundFullname.value="";

		if( document.frm.FoundFullname.value!="" || force ) {
			window.open("FindUsers.asp?FirstName=" + srchName, "Users", "width=520,height=500,resizable=no,scrollbars=yes");
		}
	}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//Date
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	function readdate(dtname) {
		var dt = "";
		var dtday = eval('document.all.'+dtname+'Day');
		var dtmonth = eval('document.all.'+dtname+'Month');
		var dtyear = eval('document.all.'+dtname+'Year');
		if (dtday.value!="" && dtmonth.value!="" && parseInt(dtyear.value)!="") {
			if (zerofree(dtday.value)!=0 && zerofree(dtmonth.value)!=0 && zerofree(dtyear.value)!=0) {
				if (dtyear.value<1900) {
					var yr = "00"+dtyear.value;
					dtyear.value = "19" + yr.substr(yr.length-2,2);
				}
				dt = (dtyear.value+'/'+dtmonth.value+'/'+dtday.value);
			}
		}
		return dt;
	}

	function readtime(tmname) {
		var tmHr = eval('document.all.'+tmname+'Hour');
		var tmMn = eval('document.all.'+tmname+'Minute');

		var hr = "00"+tmHr.value; hr = hr.substr(hr.length-2,2);
		var mn = "00"+tmMn.value; mn = mn.substr(mn.length-2,2);

		return (hr+":"+mn+":00");
	}
	
	function datecheck(dtname) {
		return (!(readdate(dtname)==""))
	}

	function datecompare(stdate, nddate, force) {
		var stread = readdate(stdate);
		var ndread = readdate(nddate);
		if (stread!="" && ndread!="") {
			var st = new Date(stread);
			var nd = new Date(ndread);
			return (st.getFullYear()<nd.getFullYear() || (st.getFullYear()==nd.getFullYear() && st.getMonth()<nd.getMonth()) || (st.getFullYear()==nd.getFullYear() && st.getMonth()==nd.getMonth() && st.getDate()<nd.getDate()));
		} else
			return (!(force));
	}

function timecompare(stdate, nddate, force) {
	var stread = readtime(stdate);
	var ndread = readtime(nddate);
	if (stread!="" && ndread!="") {
		var st = new Date("01/01/1900 "+stread);
		var nd = new Date("01/01/1900 "+ndread);
		return (st.getHours()<nd.getHours() || (st.getHours()==nd.getHours() && st.getMinutes()<nd.getMinutes()));
	} else
		return (!(force));
}
	
	function setdate(dtname) {
		var dtday = eval('document.all.'+dtname+'Day');
		var dtmonth = eval('document.all.'+dtname+'Month');
		var dtyear = eval('document.all.'+dtname+'Year');
		
		var dt = new Date();
		dt.setFullYear(dtyear.value, dtmonth.value, dtday.value);
		return dt;
	}

	function datedifference(stdate, nddate) {
		var stdt = setdate(stdate);
		var nddt = setdate(nddate);
		var oneday=1000*60*60*24;
		return Math.ceil((nddt.getTime()-stdt.getTime())/(oneday));
	}
	
	function setability(dtname, disabled, preserved) {
		var dtday = eval('document.all.'+dtname+'Day');
		var dtmonth = eval('document.all.'+dtname+'Month');
		var dtyear = eval('document.all.'+dtname+'Year');
		
		if (!(preserved)) {
			dtday.value = "";
			dtmonth.value = "";
			dtyear.value = "";	
		}
		
		dtday.style.readonly = disabled;
		dtmonth.style.readonly = disabled;
		dtyear.style.readonly = disabled;
		
		dtday.style.backgroundColor = (disabled ? '#C8C8C8' : '#FFFFFF');
		dtmonth.style.backgroundColor = (disabled ? '#C8C8C8' : '#FFFFFF');
		dtyear.style.backgroundColor = (disabled ? '#C8C8C8' : '#FFFFFF');
	}

	function cleardate(dtname) {
		var dtday = eval('document.all.'+dtname+'Day');
		var dtmonth = eval('document.all.'+dtname+'Month');
		var dtyear = eval('document.all.'+dtname+'Year');
		dtday.value = "";
		dtmonth.value = "";
		dtyear.value = "";	
	}
	
	function Age(dtname) {
		var dtyear = eval('document.all.'+dtname+'Year');
		if (dtyear.value!='') {
			var dttoday = new Date();
			return (parseInt(dttoday.getFullYear()) - parseInt(dtyear.value));
		}
		return -1;
	}
	
	function daysElapsed(stdate, nddate) {
	    var elapsed =
	        Date.UTC(y2k(stdate.getYear()), stdate.getMonth(), stdate.getDate(),0,0,0)
	      - Date.UTC(y2k(nddate.getYear()), nddate.getMonth(), nddate.getDate(),0,0,0);
	    return elapsed/1000/60/60/24;
	}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//	H/over of buttons & table rows
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	function mouseovertd(o) {o.style.backgroundColor="#ffac10"}
	function mouseouttd(o) {o.style.backgroundColor="#C3D9FF"}
	function mouseoverbt(o) {o.style.backgroundColor="#EBF5FF"}
	function mouseoutbt(o) {o.style.backgroundColor="white"}
	function mouseoversubtd(o) {o.style.backgroundColor="#ffac10"}
	function mouseoutsubtd(o) {o.style.backgroundColor="#E8EEFA"}
	
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//	Business Rules
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
	function SINValidate(sin) {
		sin = delimfree(sin, ' ');
		var pos2 = (sin.substring(1,2) * 2)+"" ;
		var add2 = (pos2.length==2 ? parseInt(pos2.substring(0,1))+parseInt(pos2.substring(1,2)) : parseInt(pos2.substring(0,1)));

		var pos4 = (sin.substring(3,4) * 2)+"";
		var add4 = (pos4.length==2 ? parseInt(pos4.substring(0,1))+ parseInt(pos4.substring(1,2))  : parseInt(pos4.substring(0,1)));

		var pos6 = (sin.substring(5,6) * 2)+"" ;
		var add6 = (pos6.length==2 ? parseInt(pos6.substring(0,1))+ parseInt(pos6.substring(1,2))  : parseInt(pos6.substring(0,1)));

		var pos8 = (sin.substring(7,8) * 2)+"";
		var add8 = (pos8.length==2 ? parseInt(pos8.substring(0,1))+ parseInt(pos8.substring(1,2))  : parseInt(pos8.substring(0,1)));

		var pos1 = sin.substring(0,1);
		var pos3 = sin.substring(2,3);
		var pos5 = sin.substring(4,5);
		var pos7 = sin.substring(6,7);
		var pos9 = sin.substring(8,9);

		var total = (add2 + parseInt(pos1) + add4 + parseInt(pos3) + add6 + parseInt(pos5) + add8 + parseInt(pos7))+"";
		var round = total.substring(total.length-1, total.length);

		var diff = 10 - (round==0 ? 10 : round);
		return (diff==pos9);
	}
