///////////////////////////
//
//  Form designer javascript
//  (c)2006 Jeremy Wilkins
//
//  Works with the form designer to run client side code
//
//

// Javascript variables
var thisForm = '';				// PHP code will create code to rename the form name
var dFilterStep;
var currentTab = new Object();				// Currently selected tab
var tabHeights = new Object();				// Tab heights list
var tabBorderWidths = new Object();			// Tab border-widths list
var tabPages = new Object();				// Tab pages names list
var comboObjects = new Object();			// All combo objects
var comboList = new Array();				// List of combo objects to create
var disableList = new Array();				// List of object names to disable
var isOpera = (window.opera) ? true : false;
var isIE = (!isOpera && document.all && (document.documentElement || document.body))

function geturl(param) {
    var regex = '[?&]' + param + '=([^&#]*)';
    var results = (new RegExp(regex)).exec(window.location.href);
    if(results) return results[1];
    return '';
}

function isString(a)
{
	if (typeof a == 'string')
	{
		return true;
	}
	else if (!a)
	{
		return false;
	}
	else if ((typeof a == 'object') && a.toLowerCase)
	{
		return true;
	}
	return false;
}

// IE Support
function getDHTMLObjectIE(objName)
{
	if (document.all[objName])
	{
		return document.all[objName];
	}
	else
	{
		return false;
	}
}

// DOM W3C Support (NN 6+, Mozilla, Firefox and compatible)
function getDHTMLObjectW3C(objName)
{
	if (document.getElementById(objName))
	{
		return document.getElementById(objName);
	}
	else
	{
		return false;
	}
}

// Netscape 4 support
function getDHTMLObjectNS4(objName)
{
	if (document.layers[objName])
	{
		return document.layers[objName];
	}
	else
	{
		return false;
	}
}

// No DHTML support
function getDHTMLObjectNone(objName)
{
	return false;
}

// Dynamically define getDHTMLObject function based on browser support
if (document.getElementById)
{
	getDHTMLObject = getDHTMLObjectW3C;
}
else if (document.layers)
{
	getDHTMLObject = getDHTMLObjectNS4;
}
else if (isIE)
{
	getDHTMLObject = getDHTMLObjectIE;
}
else
{
	getDHTMLObject = getDHTMLObjectNone;
}

function supportsOpacity(el)
{
	if (el.style.opacity != undefined)
	{
		return true;
	}
	if( el.style.MozOpacity != undefined )
	{
		return true;
	}

	if ( el.style.filter != undefined )
	{
		return true;
	}
	return false;
}

function setOpacity(el, opaciLevel)
{
	if (el.style.opacity != undefined)
	{
		el.style.opacity = opaciLevel;
	}
	else if(el.style.MozOpacity != undefined)
	{
		el.style.MozOpacity = opaciLevel;
	}
	else if (el.style.filter != undefined)
	{
		var oplvl = Math.round(opaciLevel*100);
		el.style.filter = "alpha(opacity=" + oplvl + ")";
	}
}

function fadeIn(id, currentOpacity)
{
	var counterLimit = 20;
	var el = getDHTMLObject(id);
	if (!currentOpacity)
	{
		currentOpacity = 1;
	}
	if (currentOpacity > counterLimit)
	{
		return;
	}
	setOpacity(el, (currentOpacity / counterLimit));
	currentOpacity++;
	var func = "fadeIn( '" + id + "', " + currentOpacity + ")";
	window.setTimeout(func, 50);
}

function bookmarkthis()
{
	var url=window.location.href;
	var title=document.title;

	if(url.indexOf("file:") > -1)
	{ // IE cannot bookmark pages saved on hd: do not bookmark
		alert('You cannot bookmark files stored on local storage.');
		url='';
	}

	if (url != '')
	{
		if(typeof(window.external)!='undefined' && typeof(window.external.AddFavorite)!='undefined')
		{ // add IE favorite
			window.external.AddFavorite(url,title);
		} else if(window.sidebar && sidebar.addPanel)
		{ // add to FF bookmarks
			sidebar.addPanel(title,url,'');
		} else
		{ // unknown browser: report user
			alert('Failed to recognize your browser, please bookmark the page manually.');
		}
	}
}

function selectTab(tabName, tabNumber)
{
	var actualTabHeight = tabHeights[tabName];
	var actualTabBorderWidth = tabBorderWidths[tabName];
	var actualActiveTabName = tabPages[tabName][currentTab[tabName]*2];
	var actualActiveTabWidth = tabPages[tabName][currentTab[tabName]*2+1];
	var actualTabName = tabPages[tabName][tabNumber*2];
	var actualTabWidth = tabPages[tabName][tabNumber*2+1]+5;
	var oldobj = getDHTMLObject(actualActiveTabName);
	var obj = getDHTMLObject(actualTabName);
	oldobj.style.display = 'none';
	obj.style.position = 'absolute';
	obj.style.display = 'inline';
	currentTab[tabName] = tabNumber;
	if (actualActiveTabName != actualTabName)
	{
		var oldobjli = getDHTMLObject(actualActiveTabName + '_li');
		var oldobja = getDHTMLObject(actualActiveTabName + '_a');
		var oldobjspan = getDHTMLObject(actualActiveTabName + '_span');
		var objli = getDHTMLObject(actualTabName + '_li');
		var obja = getDHTMLObject(actualTabName + '_a');
		var objspan = getDHTMLObject(actualTabName + '_span');

		if (objli && obja && objspan)
		{
			oldobja.style.width = actualActiveTabWidth + 'px';
			obja.style.width = actualTabWidth + 'px';
			oldobjspan.style.height = actualTabHeight + 'px';
			objspan.style.height = (actualTabHeight + actualTabBorderWidth + 5) + 'px';
			oldobja.style.height = actualTabHeight + 'px';
			obja.style.height = (actualTabHeight + actualTabBorderWidth + 5) + 'px';
			oldobjli.className = 'tabcontrol';
			oldobja.className = 'tabcontrol';
			objli.className = 'tabcontrolselected';
			obja.className = 'tabcontrolselected';
		}
		if (document.forms[thisForm])
		{
			if (document.forms[thisForm].elements[tabName])
			{
				document.forms[thisForm].elements[tabName].value = tabNumber;
			}
		}
	}
	else
	{
	}
}

function overIETab(pagName)
{
	if (isIE)
	{
		var objli = getDHTMLObject(pagName + '_li');
		var obja = getDHTMLObject(pagName + '_a');

		if (objli && obja)
		{
			if (objli.className == 'tabcontrol')
			{
				objli.backgroundPosition = '0% 0px';
				obja.backgroundPosition = '100% 0px';
			}
			obja.color = '#000';
		}
	}
}

function outIETab(pagName)
{
	if (isIE)
	{
		var objli = getDHTMLObject(pagName + '_li');
		var obja = getDHTMLObject(pagName + '_a');

		if (objli && obja)
		{
			if (objli.className == 'tabcontrol')
			{
				objli.backgroundPosition = '0% -42px';
				obja.backgroundPosition = '100% -42px';
			}
			obja.color = '#666';
		}
	}
}

function clearSelection()
{
	var sel;
	if(document.selection && document.selection.empty)
	{
		document.selection.empty();
	}
	else
	{
		if(window.getSelection)
		{
			sel=window.getSelection();
			if(sel && sel.collapseToEnd)
				sel.collapseToEnd();
		}
	}
}

function NavFooter_cmdDelete_onclick()
{
	var Result;
	Result = window.confirm('You are about to delete the currently selected record(s).  Do you wish to continue?');
	if (Result != 0)
	{
		return true;
	}
	else
	{
		return false;
	}
}

function fireFormButtonEvent(ObjectName, ObjectEvent, ObjectEventType, evt, recid)
{
	var obj = getDHTMLObject(ObjectName);
	if (obj)
	{
		if (obj.type == 'button' || obj.type == 'image' || obj.tagName.toLowerCase() == 'img')
		{
			if (ObjectEvent == 'onmousedown')
			{
				obj.buttonPressed = true;
				obj.style.borderStyle = 'inset';
			}
			else
			{
				if (ObjectEvent == 'onmouseover')
				{
					obj.style.borderStyle = 'outset';
				}
				if ((ObjectEvent == 'onmouseup') || (ObjectEvent == 'onmouseout'))
				{
					obj.style.borderStyle = 'groove';
				}
			}
		}
	}
	// Cascade to fireFormEvent to handle client javascript and server code
	return fireFormEvent(ObjectName, ObjectEvent, ObjectEventType, evt, recid);

	// Prevent double submit attempt
	/*if (ObjectEvent == 'onclick')
	{
		return false;
	}
	else
	{
		return true;
	}*/
}

function fireFormEvent(ObjectName, ObjectEvent, ObjectEventType, evt, recid)
{
	// Solve the browser wars by unifying the properties
	if (evt)
	{
		if (typeof evt.pageX != 'number')
		{
			evt.pageX = evt.clientX;
			evt.pageY = evt.clientY;
		}
	}
	else
	{
		evt = window.event || 0;
		if (evt)
		{
			evt.pageX = evt.clientX;
			evt.pageY = evt.clientY;
			if (document.documentElement && (document.documentElement.scrollTop || document.documentElement.scrollLeft))
			{
				evt.pageX += document.documentElement.scrollLeft;
				evt.pageY += document.documentElement.scrollTop;
			}
			else if (document.body && (document.body.scrollTop || document.body.scrollLeft))
			{
				evt.pageX += document.body.scrollLeft;
				evt.pageY += document.body.scrollTop;
			}
		}
	}
	if (evt)
	{
		if (typeof evt.keyCode != 'number')
		{
			evt.keyCode = evt.keyCode || evt.which;
		}
		if (!evt.currentTarget)
		{
			evt.currentTarget = evt.currentTarget || evt.srcElement;
		}
	}

	// posx and posy contain the mouse position relative to the document
	// Do something with this information

	var callFunc = eval("(typeof " + ObjectName + '_' + ObjectEvent + " != 'undefined') ? " + ObjectName + '_' + ObjectEvent + " : 'undefined'");
	var lRet = true;
	if (ObjectEventType != 'server')
	{
		if (typeof callFunc == 'function')
		{
			lRet = callFunc(evt);
			if (!lRet)
			{
				// Allow event to cascade
				return true;
			}
		}
	}
	if (ObjectEventType != 'client')
	{
		document.forms[thisForm].elements['formobject'].value = ObjectName;
		document.forms[thisForm].elements['formevent'].value = ObjectEvent;
		document.forms[thisForm].elements['formrecordid'].value = recid;
		document.forms[thisForm].submit();
	}
	// Allow unhandled events to cascade
	return true;
}

// Terrible hack thanks to IE7's insanity!!
//  normally IE7 will randomly collapse the divs
//  this hack corrects IE7s improper handling of
//  these objects.  The strange thing is, this only
//  retrieves the DHTML object of the content section.
//  Weirder than weird!  Thanks Microshaft for borked
//  software again!!!
function IE7Refresh()
{
	var contentObj;
	contentObj = getDHTMLObject('content');
}

function Leap(Year)
{
	if ((Year % 4) == 0)
	{
		// It is exactly divisible by 4
		if ((Year % 100) == 0)
		{
			// It is exactly divisible by 100
			// Is it also exactly divisible by 400?
			Result = ((Year % 400) == 0);
		}
		else
		{
			return true;
		}
	}
	else
	{
		// It is not exactly divisible by 4
		// It is not a leap year
		return false;
	}
}
/*
Code to check a date formatted textbox
if (Value.length==16) {
	var month = Value.substring(0,2);
	var day= Value.substring(3,5);
	var year = Value.substring(6,10);
	var hour = Value.substring(11,13);
	var minute = Value.substring(14,16);
	var dateerror = "The date you entered did not meet the following requirement(s) :\n\n";
	var datetest = true;
	var AMPM ='';
	var today = new Date();

	if ((today.getYear()-year)>1) {
		datetest = false;
		dateerror = dateerror + "Must have the current year\n";
	}else if ((year-today.getYear())>0) {
		datetest = false;
		dateerror = dateerror + "Can not enter year in the future\n";
	}else if((today.getYear()-year)>0){
		if (!(month==12 && (today.getMonth()==1) && ((today.getYear()-1)==year))) {
			datetest = false;
			dateerror = dateerror + "Can not use last year\n";
		}
	}
	if (month>12) {
		datetest = false;
		dateerror = dateerror + "Must be an two digit month\n";
	} else {
		if (month > (today.getMonth()+1)) {
			datetest = false;
			dateerror = dateerror + "Can not enter month in the future\n";
		} else if (((today.getMonth()+1) - month) >1){
			datetest = false;
			dateerror = dateerror + "Can not enter prior to last month\n";
		} else {
			if (month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month==12 ) {
				if (day>31){
					dateerror = dateerror + "Must be an two digit day between 01 and 31\n";
					datetest = false;
				}
			} else if(month==2) {
				if (Leap(year)) {
					if (day>29){
						dateerror = dateerror + "Must be an two digit day between 01 and 29\n";
						datetest = false;
					}
				} else {
					if (day>28){
						dateerror = dateerror + "Must be an two digit day between 01 and 28\n";
						datetest = false;
					}
				}
			} else  {
				if (day>30){
					dateerror = dateerror + "Must be an two digit day between 01 and 30\n";
					datetest = false;
				}
			}
		}
	}
	if (day<1) {
		dateerror = dateerror + "Must be an two digit day greater then 0\n";
		datetest = false;
	}
	if ((day>(today.getDate+1)) && (month==(today.getMonth+1))) {
		dateerror = dateerror + "Can not enter day in the future\n";
		datetest = false;
	}
	if ((day<(today.getDate+1)) && (month==(today.getMonth))) {
		dateerror = dateerror + "Can not enter day over 30 days in the past\n";
		datetest = false;
	}
	if (hour>12 && hour<25) {
		hour = (hour-12);
		AMPM='PM';
	}
	if (hour ==0) {
		hour=(hour+12);
		AMPM='AM';
	}
	if (hour >24) {
		dateerror = dateerror + "Hour must be in 12 or 24 hour format only\n";
		datetest = false;
	}
	if (minute >59) {
		dateerror = dateerror + "Minute must be less then 60\n";
		datetest = false;
	}
	if (datetest) {
		while (!(AMPM=='AM' || AMPM=='PM')) {
			AMPM=prompt('is this AM or PM?',AMPM);
		}
		NewValue=month+"/"+day+"/"+year+" "+hour+":"+minute+" "+AMPM;
		field.value=NewValue;
		field.style.backgroundColor='#FFFFFF';
	} else {
		alert(dateerror);
		field.style.backgroundColor='#FFFF00';
		field.focus();
	}
} else if (Value.length==19) {
} else {
	alert('Please completely fill out this field');
	field.style.backgroundColor='#FFFF00';
	field.focus();
}
*/
function dFilterStrip(dFilterTemp, dFilterMask)
{
	dFilterMask = replace(dFilterMask,'#','');
	for (dFilterStep = 0; dFilterStep < dFilterMask.length++; dFilterStep++)
	{
		dFilterTemp = replace(dFilterTemp,dFilterMask.substring(dFilterStep,dFilterStep+1),'');
	}
	return dFilterTemp;
}

function dFilterMax(dFilterMask)
{
	dFilterTemp = dFilterMask;
	for (dFilterStep = 0; dFilterStep < (dFilterMask.length+1); dFilterStep++)
	{
		if (dFilterMask.charAt(dFilterStep)!='#')
		{
			dFilterTemp = replace(dFilterTemp,dFilterMask.charAt(dFilterStep),'');
		}
	}
	return dFilterTemp.length;
}

function dFilter(e, textbox, dFilterMask)
{
	var key = window.event ? e.keyCode : e.which;

	dFilterNum = dFilterStrip(textbox.value, dFilterMask);

	if (key==9)
	{
		return true;
	}
	else if (key == 8 && dFilterNum.length != 0)
	{
		dFilterNum = dFilterNum.substring(0, dFilterNum.length - 1);
	}
	else if (((key > 47 && key < 58) || (key > 95 && key < 106)) && dFilterNum.length < dFilterMax(dFilterMask))
	{
		if(key > 95 && key < 106)
		{
			key -= 48;
		}
		dFilterNum = dFilterNum + String.fromCharCode(key);
	}

	var dFilterFinal = '';
    for (dFilterStep = 0; dFilterStep < dFilterMask.length; dFilterStep++)
	{
		if (dFilterMask.charAt(dFilterStep) == '#')
			{
				if (dFilterNum.length != 0)
				{
					dFilterFinal = dFilterFinal + dFilterNum.charAt(0);
					dFilterNum = dFilterNum.substring(1,dFilterNum.length);
				}
				else
				{
					dFilterFinal = dFilterFinal + "";
				}
			}
			else if (dFilterMask.charAt(dFilterStep) != '#')
			{
				if (dFilterNum.length != 0)
				{
					dFilterFinal = dFilterFinal + dFilterMask.charAt(dFilterStep);
				}
			}
		//dFilterTemp = replace(dFilterTemp,dFilterMask.substring(dFilterStep,dFilterStep+1),'');
	}
	textbox.value = dFilterFinal;
	return false;
}

// Replaces text with by in string
function replace(fullString, text, by)
{
	var strLength = fullString.length, txtLength = text.length;
	if ((strLength == 0) || (txtLength == 0))
	{
		return fullString;
	}

	var i = fullString.indexOf(text);
	if ((!i) && (text != fullString.substring(0,txtLength)))
	{
		return fullString;
	}
	if (i == -1)
	{
		return fullString;
	}

	var newstr = fullString.substring(0, i) + by;
	if (i + txtLength < strLength)
	{
		newstr += replace(fullString.substring(i + txtLength, strLength), text, by);
	}
	return newstr;
}

function keyHandler(e)
{
	var pressedKey;
	e = e || window.event;
	KeyCode = e.keyCode || e.which;
	Key = String.fromCharCode(KeyCode).toLowerCase()
	// Document key handler
	switch(Key)
	{
		case 'a':
			if (e.ctrlKey)
			{
				// Disable use of Ctrl+A to select all.
				return false;
			}
			return true;
	}
	return true;
}
function disabledtext(e)
{
	return false;
}
function enabledtext(e)
{
	return true;
}
function disabletext(controlname)
{
	var obj = getDHTMLObject(controlname);
	if (obj)
	{
		//if the browser is IE4+
		obj.onselectstart = new Function("return false");
		//if the browser is Mozilla
		if (window.sidebar)
		{
			obj.onmousedown = disabledtext;
			obj.onmouseup = enabledtext;
		}
	}
}

function enabletext(controlname)
{
	var obj = getDHTMLObject(controlname);
	if (obj)
	{
		//if the browser is IE4+
		obj.onselectstart = new Function("return true");
		//if the browser is Mozilla
		if (window.sidebar)
		{
			obj.onmousedown = enabledtext;
			obj.onmouseup = enabledtext;
		}
	}
}

var disableItem = 0;
var disableInTimeout = false;

function continueDisableText()
{
	if ((disableItem < disableList.length) && (!disableInTimeout))
	{
		disableInTimeout = true;
		disabletext(disableList[disableItem]);
		disableItem++;
		setTimeout('continueDisableText()', 100);
		disableInTimeout = false;
	}
	if (disableInTimeout)
	{
		setTimeout('continueDisableText()', 100);
	}
}

function disableAllText()
{
	continueDisableText();
}

var comboItem = 0;
var comboInTimeout = false;

function continueCombos()
{
	if ((comboItem < (comboList.length / 2)) && (!comboInTimeout))
	{
		comboInTimeout = true;
		var i = comboItem;
		comboObjects[comboList[i * 2]] = ComboFromSelect(comboList[i * 2], comboList[i * 2 + 1]);
		comboObjects[comboList[i * 2]].enableFilteringMode(true);
		comboItem++;
		setTimeout('continueCombos()', 100);
		comboInTimeout = false;
	}
	if (comboInTimeout)
	{
		setTimeout('continueCombos()', 100);
	}
}

function createAllCombos()
{
	continueCombos();
}
