/////////////////////////////////////////////////////////////////////////////////
// sanctum.js
//
// This javascript file contains supporting functions for the
// hkw inner sanctum web pages.
/////////////////////////////////////////////////////////////////////////////////


/////////////////////////////////////////////////////////////////////////////////
// Global variables.
/////////////////////////////////////////////////////////////////////////////////

var W3CDOM = (document.createElement && document.getElementsByTagName);
var errorString = '';
var validForm = true;
var firstError = null;


/////////////////////////////////////////////////////////////////////////////////
// Preload link images.
/////////////////////////////////////////////////////////////////////////////////

MM_preloadImages('./images/nav/nav_sanctum_off.gif');
MM_preloadImages('./images/nav/nav_members_off.gif');
MM_preloadImages('./images/nav/nav_settings_off.gif');
MM_preloadImages('./images/nav/nav_main_off.gif');
MM_preloadImages('./images/nav/nav_cpanel_off.gif');
MM_preloadImages('./images/nav/nav_off_03.gif');
MM_preloadImages('./images/nav/nav_off_05.gif');
MM_preloadImages('./images/nav/nav_off_07.gif');
MM_preloadImages('./images/nav/nav_vault_off.gif');

MM_preloadImages('./images/nav/nav_sanctum_on.gif');
MM_preloadImages('./images/nav/nav_members_on.gif');
MM_preloadImages('./images/nav/nav_settings_on.gif');
MM_preloadImages('./images/nav/nav_main_on.gif');
MM_preloadImages('./images/nav/nav_cpanel_on.gif');
MM_preloadImages('./images/nav/nav_on_03.gif');
MM_preloadImages('./images/nav/nav_on_05.gif');
MM_preloadImages('./images/nav/nav_on_07.gif');
MM_preloadImages('./images/nav/nav_vault_on.gif');

/////////////////////////////////////////////////////////////////////////////////
// Image swap functions.
/////////////////////////////////////////////////////////////////////////////////

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_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_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];}
}


/////////////////////////////////////////////////////////////////////////////////
// General support functions.
/////////////////////////////////////////////////////////////////////////////////

function trim(value) {
	if (value == null)
		return "";

	return value.replace(/^\s+|\s+$/g,'');
}

function elem(elemId) {
	if (!W3CDOM) return;

	if (document.getElementById) {
		return document.getElementById(elemId);
	}
}

function setSelectOption(cboId,optId) {
	cbo = elem(cboId);
	opt = elem(optId);

	if (opt != null && cbo != null) {
		cbo.selectedIndex = opt.index;
	}
}

function isIntegerInRange(s,min,max) {
	if (!isInteger(s,false)) return false;

	var num = parseInt(s);

	return ((num >= min) && (num <= max))
}

function isInteger(s) {
	for (var i=0; i<s.length; i++) {
		var c = s.charAt(i);

		if ( i==0 && (c != '-' && !isDigit(c)) ) {
			return false;
		} else if ( i>0 && !isDigit(c) ) {
			return false;
		}
	}

	return true;
}

function isDigit(c) {
	return ((c >= "0") && (c <= "9"));
}

function DaysArray(n) {
	var array = new Array();

	for (var i=1; i<=n; i++) {
		array[i] = 31;
		if (i==4 || i==6 || i==9 || i==11) {
			array[i] = 30;
		} else if (i==2) {
			array[i] = 29;
		}
	}

	return array;
}

function daysInMonth(month,year) {
	var days = DaysArray(12);

	if (month == 2)
		days[2] = daysInFebruary(year);

	return days[month];
}

function daysInFebruary(year) {
	// February has 28 days normally.
	// February has 29 days in any year divisible by 4 except for
	// centurial years which are *not* also divisible by 400.
	return ( ( (year % 4 ==0) && ( (!(year % 100 == 0)) || (year % 400 == 0)) ) ? 29 : 28);
}

function isDate(date) {
	var minYear = 1900;
	var maxYear = 9999;
	var datePartsArray = date.split(/\/|-|\./);

	if (datePartsArray.length != 3)
		return false;

	var monthPart = parseFloat(datePartsArray[0]);
	var dayPart = parseFloat(datePartsArray[1]);
	var yearPart = parseFloat(datePartsArray[2]);

	if (!monthPart || !dayPart || !yearPart)
		return false;

	if (monthPart < 1 || monthPart > 12)
		return false;

	if (dayPart < 1 || dayPart > daysInMonth(monthPart,yearPart))
		return false;

	if (yearPart < minYear || yearPart > maxYear)
		return false;

	return true;
}


/////////////////////////////////////////////////////////////////////////////////
// Hide/show functions.
/////////////////////////////////////////////////////////////////////////////////

function toggleShow(elemId,titleId) {
	curObj = elem(elemId);
	titleObj = elem(titleId);

	// Toggle visibility as needed.
	if (curObj.style.display == 'inline' || curObj.style.display == '') {
		curObj.style.display = 'none';
		titleObj.style.backgroundImage = 'url(images/arrow_right.gif)';
	} else {
		curObj.style.display = 'inline';
		titleObj.style.backgroundImage = 'url(images/arrow_down.gif)';
	}
}

function hide(elemId) {
	curObj = elem(elemId);

	if (curObj != null) {
		curObj.style.display = "none";
	}
}

function show(elemId) {
	curObj = elem(elemId);

	if (curObj != null) {
		curObj.style.display = "inline";
	}
}

function hideRow(elemId) {
	curObj = elem(elemId);

	if (curObj != null) {
		curObj.style.display = "none";
	}
}

function showRow(elemId) {
	curObj = elem(elemId);

	if (curObj != null) {
		curObj.style.display = "table-row";
	}
}

function showRight(elemId) {
	curObj = elem(elemId);

	if (curObj != null) {
		curObj.style.backgroundImage = 'url(images/arrow_right.gif)';
	}
}

function showDown(elemId) {
	curObj = elem(elemId);

	if (curObj != null) {
		curObj.style.backgroundImage = 'url(images/arrow_down.gif)';
	}
}


/////////////////////////////////////////////////////////////////////////////////
// Form error functions.
/////////////////////////////////////////////////////////////////////////////////

function writeError(obj,message) {
	validForm = false;
	if (obj.hasError) return false;
	if (W3CDOM) {
		obj.className += ' error';
		obj.onchange = removeError;
		var sp = document.createElement('span');
		sp.className = 'error';
		sp.appendChild(document.createTextNode(message));
		obj.parentNode.appendChild(sp);
		obj.hasError = sp;
	} else {
		errorString += obj.Name + ': ' + message + '\n';
		obj.hasError = true;
	}

	if (!firstError) firstError = obj;

	return false; // return false to ensure an invalid forms
}

function removeError() {
	this.className = this.className.substring(0,this.className.lastIndexOf(' '));
	this.parentNode.removeChild(this.hasError);
	this.hasError = null;
	this.onchange = null;
}

function validateBase(elements) {
	validForm = true;
	firstError = null;
	errorString = '';

	if (elements != null) {
		for (var i=0; i<elements.length; i++) {
			element = elem(elements[i]);

			if (!element.value) {
				validForm = writeError(element,'This field is required.');
				//alert(element.id);
			}
		}
	}

	return firstError;
}


