/* Reference Article:
	Dustin Diaz:
	http://www.dustindiaz.com/top-ten-javascript/
*/

/* addEvent: simplified event attachment */
function addEvent( obj, type, fn ) {
	if (obj.addEventListener) {
		obj.addEventListener( type, fn, false );
		EventCache.add(obj, type, fn);
	}
	else if (obj.attachEvent) {
		obj["e"+type+fn] = fn;
		obj[type+fn] = function() { obj["e"+type+fn]( window.event ); }
		obj.attachEvent( "on"+type, obj[type+fn] );
		EventCache.add(obj, type, fn);
	}
	else {
		obj["on"+type] = obj["e"+type+fn];
	}
}

var EventCache = function(){
	var listEvents = [];
	return {
		listEvents : listEvents,
		add : function(node, sEventName, fHandler){
			listEvents.push(arguments);
		},
		flush : function(){
			var i, item;
			for(i = listEvents.length - 1; i >= 0; i = i - 1){
				item = listEvents[i];
				if(item[0].removeEventListener){
					item[0].removeEventListener(item[1], item[2], item[3]);
				};
				if(item[1].substring(0, 2) != "on"){
					item[1] = "on" + item[1];
				};
				if(item[0].detachEvent){
					item[0].detachEvent(item[1], item[2]);
				};
				item[0][item[1]] = null;
			};
		}
	};
}();
if (window.unload)
	addEvent(window,'unload',EventCache.flush);

/* window 'load' attachment */
function addLoadEvent(func) {
	var oldonload = window.onload;
	if (typeof window.onload != 'function') {
		window.onload = func;
	}
	else {
		window.onload = function() {
			oldonload();
			func();
		}
	}
}

/* toggle an element's display */
function toggle(obj) {
	var el = document.getElementById(obj);
	if (el && el.style) {
		if ( el.style.display != 'none' ) {
			el.style.display = 'none';
		}
		else {
			el.style.display = '';
		}
		return false;
	}
	return true;
}

function toggleAdvancedSearch (obj)
{

	// Pick up a reference to the form that contains the div we want to togggle.
	var frm;
	var forms = document.getElementsByTagName("form");
	for (var i = 0; i < forms.length; i++) {
		if (forms[i].id && forms[i].id == "sidebarSearch") {
			frm = forms[i];
			break;
		}
	}

	// Get a reference to the div we want to show/hide.
	var el = document.getElementById(obj);

	if (frm && el && el.style)
	{
		// Get the value of the 'advanced' hidden control that's used to store the state of the form.
		var isAdvanced = document.getElementById("advanced");

		// Create the element if it wasn't found.
		if (!isAdvanced) {
			isAdvanced = document.createElement("input");
			isAdvanced.type = "hidden";
			isAdvanced.name = "advanced";
			isAdvanced.id = "advanced";
			frm.appendChild(isAdvanced);
		}

		// If we're currently showing the advanced div...
		if ( el.style.display != 'none' )
		{
			// Hide it and store this state in the hidden control.
			el.style.display = 'none';
			isAdvanced.value = "0";

			// Clear the values stored in the input controls in this div.
			var elementsToRemove = el.getElementsByTagName("input");
			for (var i = 0; i < elementsToRemove.length; i++) {
				elementsToRemove[i].value = "";
			}
			// Clear the values stored in the select controls in this div.
			elementsToRemove = el.getElementsByTagName("select");
			for (var i = 0; i < elementsToRemove.length; i++) {
				elementsToRemove[i].selectedIndex = 0;
			}
		}
		else
		{
			// Otherwise show the div.
			el.style.display = '';
			isAdvanced.value = "1";
			el.style.paddingBottom = '4px';
		}

		// Get a reference to the span containing the link text and change it.
		var moreLessTextElem = document.getElementById("moreLessText");

		// And change it to 'More...'
		if (moreLessTextElem) {
			moreLessTextElem.innerHTML = el.style.display != 'none' ? 'Less search options...' : 'More search options...'
		}

		return false;
	}

	return true;
}

/*	Scrolly stuff	*/
function autoScrollY()
{
	var currentY = currentYOffSet();

	//	only scroll if currenty == 0 to stop refresh bug
	if (currentY == 0 && window.scrollBy) {

		var strQs = '';
		var intScrollY = 0;
		if (window.location && window.location.search) {
			strQS = window.location.search;
			intScrollY = extractQueryTerm (strQS, 'Y');
		}
		if (intScrollY > 0) {
			window.scrollBy (0, intScrollY);
		}
	}
}

function extractQueryTerm (strQS, strName)
{
	var intStart;
	var intEnd;
	var intHashEnd;
	var intAmpEnd;
	var intQstnEnd;
	var strSearch;
	var strValue;

	strQS += "#";
	strSearch = strName + "=";
	intStart = (strQS.indexOf (strSearch)) + strSearch.length;

	intHashEnd = strQS.indexOf ("#", intStart);
	intAmpEnd = strQS.indexOf ("&", intStart);
	intQstnEnd = strQS.indexOf ("?", intStart);

	intEnd = intHashEnd;

	if ((intQstnEnd != -1) && (intQstnEnd < intEnd)) {
		intEnd = intQstnEnd;
	}
	if ((intAmpEnd != -1) && (intAmpEnd < intEnd)) {
		intEnd = intAmpEnd;
	}

	strValue = strQS.substr (intStart, (intEnd - intStart));
	return strValue;
}

function currentYOffSet () {
	var pxY;
	if (document.documentElement && document.documentElement.scrollTop) {
		pxY = document.documentElement.scrollTop;
	} else if (window.pageYOffset) {
		pxY = window.pageYOffset;
	} else if (document.body) {
		pxY = document.body.scrollTop;
	}
	else {
		pxY = 0;
	}
	return pxY;
}

function persistYOffSet (link)
{
	var pxY = currentYOffSet();
	return link.href + '&Y=' + pxY;
}

function redirectY (link) {

	if (window.location && this && link ) {

		window.location = persistYOffSet (this);

		//	stop normal link action
		link.returnValue = false;
		if (link.preventDefault) {
			link.preventDefault();
		}
		return false;
	}
}

function hookUpLinks (linksToHookUp) {
	var links = linksToHookUp.split(",");
	for (var i=0;i<links.length;i++) {
		if (document.getElementById(links[i])) {
			addEvent(document.getElementById(links[i]), 'click', redirectY);
		}
	}
}


function IsNumeric(sText)

{
   var ValidChars = "0123456789.";
   var IsNumber=true;
   var Char;

 
   for (i = 0; i < sText.length && IsNumber == true; i++) 
      { 
      Char = sText.charAt(i); 
      if (ValidChars.indexOf(Char) == -1) 
         {
         IsNumber = false;
         }
      }
   return IsNumber;
   
}

function trim(str)
{
   return str.replace(/^\s*|\s*$/g,"");
}




