var IsNS4 = (document.layers) ? 1 : 0;
var IsIE4 = (document.all) ? 1 : 0;
var IsNS6 = (document.getElementById && !document.all) ? 1 : 0;
var IsMoz = (navigator.userAgent.indexOf("Gecko") != -1 && navigator.userAgent.indexOf("Netscape") == -1) ? 1 : 0;

function $(ID) {
	return document.getElementById(ID);
}

function DaysInMonth(y,m) {
	switch (m) {
		case 1: case 3: case 5: case 7: case 8: case 10: case 12: return 31;
		case 2: return y % 4 == 0 ? 29: 28;
	}
	return 30;
}

function IsDate(d) {
	var re = new RegExp ('-', 'gi') ;
	d = d.replace(re,"/");
	var today = new Date();
	var year = today.getYear();
	if (year < 1900)
		year += 1900;
	var a = new Array();
	if (d.indexOf("/") != -1)
		a = d.split('/');
	else if (d.length == 8)
		a = new Array(d.substring(0,2),d.substring(2,4),d.substring(4,8));
	else if (d.length == 6)
		a = new Array(d.substring(0,2),d.substring(2,4),d.substring(4,6));
	else return false;
	for(i=0;i<a.length;i++)
		a[i] = a[i]-0;
	if (a[2] >= 0 && a[2] <= 50)
		a[2] = year + parseInt(a[2]);
	else if (a[2] > 50 && a[2] < 100)
		a[2] = (year-1) + parseInt(a[2]);
	if (a.length != 3 || a[2] < 1900 || a[0] < 1 || a[0] > 12 || a[1] < 1 || a[1] > DaysInMonth(a[2],a[0]))
		return false;
	return true;
}

function AddDate(ThisDate,Offset) {
	if (IsDate(ThisDate)) {
		var DateParts = ThisDate.split("/");
		var TempDate = new Date(DateParts[2],DateParts[0]-1,DateParts[1],0,0,0);
		TempDate = Date.parse(TempDate) - Offset*24*60*60*1000;
		var NewDate = new Date(TempDate);
		var NewDay = NewDate.getDate();
		var NewMonth = NewDate.getMonth()-(-1);
		var NewYear = (IsIE4) ? NewDate.getYear() : NewDate.getYear()-(-1900);
		return NewMonth + "/" + NewDay + "/" + NewYear;
	}
	return ThisDate;
}

// format date like YYYYMMDD for comparison functions
function DateAsNumber(Val) {
	var DateParts = Val.split("/");
	return DateParts[2]*10000 - -DateParts[0]*100 - -DateParts[1];
}

// compare two dates 
function CompareDates(ValOne,Op,ValTwo) {
	if (!IsDate(ValOne) || !IsDate(ValTwo)) return false;
	var Date1 = parseInt(DateAsNumber(ValOne));
	var Date2 = parseInt(DateAsNumber(ValTwo));
	switch (Op) {
		case "EQ":
			return (Date1 == Date2);
			break;
		case "NEQ":
			return (Date1 != Date2);
			break;
		case "GT":
			return (Date1 > Date2);
			break;
		case "GTE":
			return (Date1 >= Date2);
			break;
		case "LT":
			return (Date1 < Date2);
			break;
		case "LTE":
			return (Date1 <= Date2);
			break;
	}
	return false;
}

function FormatDate(Val, ThisYear) {
	//if (IsDate(Val))
		//return Val;
	var NewVal = Val;
	var NewMonth = "";
	var NewDay = "";
	var NewYear = "";

	if (IsAllDigits(Val)) {
		if (Val.length == 8 && Val.substring(0,4)-0 > ThisYear-100 && Val.substring(0,4)-0 < ThisYear- -10) {
			NewYear = Val.substring(0,4)
			NewMonth = Val.substring(4,6);
			NewDay = Val.substring(6,8);
		} else {
			NewMonth = Val.substring(0,2);
			NewDay = Val.substring(2,4);
			NewYear = Val.substring(4,Val.length);
		}
	} else {
		var DelimOne = -1;
		var DelimTwo = -1;
		var NumOfDelim = 0;
		for (qq=0; qq<Val.length; qq++) {
			if (!IsInt(Val.charAt(qq))) {
				NumOfDelim++;
				if (NumOfDelim == 1)
					DelimOne = qq;
				if (NumOfDelim == 2)
					DelimTwo = qq;
				if (NumOfDelim > 2)
					return Val;
			}
		}
		if (NumOfDelim != 2)
			return Val;
		NewMonth = Val.substring(0,DelimOne);
		NewDay = Val.substring(DelimOne- -1,DelimTwo);
		NewYear = Val.substring(DelimTwo- -1,Val.length);
	}
	if (NewMonth-0 > 12 && NewDay-0 <= 12) {
		var NewTemp = NewMonth;
		NewMonth = NewDay;
		NewDay = NewTemp;
	}
	if (NewYear.length < 4) {
		var NewCentury = ThisYear.toString().substring(0,2)-1;
		if (NewYear < ThisYear.toString().substring(2,4) - -10)
			NewCentury = ThisYear.toString().substring(0,2);
		NewYear = NewCentury + NewYear + "";
	}
	NewVal = (NewMonth-0) + "/" + (NewDay-0) + "/" + (NewYear-0);
	if (IsDate(NewVal))
		return NewVal;
	return Val;
}

function ValidateD(Elem) {
	if (!IsDate(Elem.value)) {
		alert('Invalidate Date Format, Please Re-enter');
		Elem.value = '';
		Elem.focus();
	}
}

function ValidateNumeric(Elem, Label, E, CheckEmpty) {
	if (!IsNumeric(Elem.value) && (CheckEmpty || Elem.value.length) && (!E || E.keyCode != 13)) {
		alert('Please enter Numeric value in "' + Label + '"!');
		Elem.focus();
		return false;
	}
		
	return true;
}

function ValidateEmail(Elem) {
	var emailRe = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*\.(\w{2}|(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum|tv|dk|se|ca))$/;
	
	if (!emailRe.test(Elem.value)) {
		alert('Please enter valid "Email" address!');
		Elem.focus();
		return false;
	}

	return true;
}

function Trim(Str) {
	if (Str) {
		if (Str.length > 0)
			while (Str.substring(0,1) == " ")
				Str = Str.substring(1);
		if (Str.length > 0)
			while (Str.substring(Str.length-1,Str.length) == " ")
				Str = Str.substring(0,Str.length-1);
		return Str;
	}
	return "";
}

function IsNull(Val) {
	return (Trim(Val) == "");
}

function IsInt(Val) {
	return (Val == parseInt(Val));
}

function IsAllDigits(Val) {
	for (var i=0; i<Val.length; i++)
		if (!IsInt(Val.charAt(i)))
			return false;
	return true;
}

function IsNumeric(Val) {
	return (!IsNull(Val) && Trim(Val)-0 == Trim(Val));
}

function PopUpWin(Url, WinName, Height, Width) {
	var w = window.open(Url, WinName, "width=" + Width + ",height=" + Height + ",scrollbars=yes,resizable=yes");
	w.focus();
}

function getIDfromName(Name, Pos, S) {
	var Sep = (S)?S:"_";

	var Name = Name.split(Sep);
	return Name[Pos];
}
			
function getLayerPosition (Layer) {
	var Pos = new Object();

	Pos.Top = 0;
	Pos.Left = Layer.offsetWidth;

	do { 
		Pos.Top += Layer.offsetTop; 
		Pos.Left += Layer.offsetLeft;
	} while (Layer = Layer.offsetParent);
   
   return Pos;
}

function RedirectForm(ThisForm,ThisTarget,ThisAction) {
	var OrigTarget = ThisForm.target;
	var OrigAction = ThisForm.action;
	ThisForm.target = ThisTarget;
	ThisForm.action = ThisAction;
	ThisForm.submit();
	ThisForm.target = OrigTarget;
	ThisForm.action = OrigAction;
}

function ToggleCheckBoxes(ThisElement,IsChecked) {
	ThisElement.checked = IsChecked;
	for (i=0; i < ThisElement.length; i++)
		ThisElement[i].checked = IsChecked;
}

function IsChecked(ThisElement) {
	if (ThisElement.checked)
		return true;
	for (i=0; i < ThisElement.length; i++)
		if (ThisElement[i].checked)
			return true;
	return false;
}

function FormatCost(Val) {
	Val = "" + Math.round(Val*100)/100;
	if (Val.indexOf('.') == -1)
		Val += ".00";
	if (Val-0 < 1 && Val-0 >= 0 && Val.indexOf('.') != 1)
		Val = "0" + Val;
	if (Val.substring(Val.indexOf('.')+1,Val.length).length < 2)
		Val += "0";
	return Val;
}


function formatTotal(Total, ID) {
	Total = Total.toFixed(2);
	if (Total.length > 6)
		Total = Total.substring(0, Total.length-6) + ',' + Total.substring(Total.length-6, 9);
	document.getElementById(ID).innerHTML = '$' + Total;
}

function StripDollar(Str) {
	return Str.replace('$', '').replace(',', '');
}

function getLineNumber (Name) {
	Name = Name.split('_');
	return Name[Name.length-1];
}
				
function CheckMultiSelects (ThisElement) {
	var AllSelected = true;

	if (ThisElement.options[0].selected) {
		ThisElement.selectedIndex = 0;
		return;
	}
	
	for (var i=1; i<ThisElement.length; i++)
		if (!ThisElement.options[i].selected)
			AllSelected = false;

	if (AllSelected) 
		ThisElement.selectedIndex = 0;
}

function MoveNext(Elem, NextElem, Label, Size, E) {
	if (ValidateNumeric(Elem, Label, E) && Elem.value.length == Size)
		NextElem.focus();
}										

function ShowOther(Elem, Val) {
	var e = document.getElementById("ReferralText");
	e.style.display = "none";
	if(Val.length && Val-0 == 13){
		e.style.display = "";
	}
	if (Val.length && Val-0 != 13 /* Referral */){
		hideData(Elem.name);
	}else {
		showData(Elem.name);
		Elem.focus();
	}
}
	
function newOption(OptValue, OptText, OptSelected) {
    var NewOpt;
    NewOpt = document.createElement("option");
    NewOpt.value = OptValue;
	if (OptSelected == OptValue)
		NewOpt.selected = true;
    NewOpt.appendChild(document.createTextNode(OptText));
	
	return NewOpt;
}
				
function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("&"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

function IsArray(AObj) {
	if (AObj.length <= 0 || AObj.length == "undefined")
		return false;
	if (AObj[0] == "undefined")
		return false;
	return true;
}

function ArrayFind(AObj,Val) {
	if (!IsArray(AObj))
		return -1;
	for (var ww=0; ww<AObj.length; ww++)
		if (AObj[ww] == Val)
			return ww;
	return -1;
}

function ElementsChanged(ThisForm, Elements) {
	var Elements = Elements.split(",");

	for (var i=0; i<ThisForm.length; i++)
		if (ArrayFind(Elements,ThisForm[i].name) != -1 && ElementChanged(ThisForm[i]))
			return true;
	return false;
}

function ElementChanged(ThisElement) {
	if ((ThisElement.type == "text" || ThisElement.type == "textarea" || ThisElement.type == "password") && ThisElement.defaultValue != ThisElement.value) {
		return true;
	} else if (ThisElement.type.indexOf("select") != -1) {
		for (var j=0; j < ThisElement.length; j++)
			if (ThisElement.options[j].defaultSelected && ThisElement.options[j].selected)
				return false;
		return true;
	} else if ((ThisElement.type == "radio" || ThisElement.type == "checkbox") && ThisElement.defaultChecked && ThisElement.checked) {
		return false;
	}
	return false;
}