/* Reference Article:
	Dustin Diaz:
	http://www.dustindiaz.com/top-ten-javascript/
	
	addEvent: simplified event attachment 
	
	New version of addEvent taken kindly from 
	http://www.quirksmode.org/blog/archives/2005/10/_and_the_winner_1.htm
*/
function addEvent( obj, type, fn )
{
	if (obj.addEventListener)
		obj.addEventListener( type, fn, false );
	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] );
	}
}

function removeEvent( obj, type, fn )
{
	if (obj.removeEventListener)
		obj.removeEventListener( type, fn, false );
	else if (obj.detachEvent)
	{
		obj.detachEvent( "on"+type, obj[type+fn] );
		obj[type+fn] = null;
		obj["e"+type+fn] = null;
	}
}

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);
	
var isLoaded = false;
function markOnLoadedAsDone()
{
    isLoaded = true; 
}
window.onload = markOnLoadedAsDone;

/* window 'load' attachment */
function addWindowLoadEvent(func) {
	
	if ( isLoaded ) {
	    func();
	    return;
	}
	
	var oldonload = window.onload;
    window.onload = function() {
	    if (typeof oldonload == 'function')
	        oldonload();
	    func();
    }
}

/* grab Elements from the DOM by className */
function getElementsByClass(searchClass,node,tag) {
	var classElements = new Array();
	if ( node == null )
		node = document;
	if ( tag == null )
		tag = '*';
	var els = node.getElementsByTagName(tag);
	var elsLen = els.length;
	var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
	for (i = 0, j = 0; i < elsLen; i++) {
		if ( pattern.test(els[i].className) ) {
			classElements[j] = els[i];
			j++;
		}
	}
	return classElements;
}

/* 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;
}

/* get, set, and delete cookies */
function getCookie( name ) {
	var start = document.cookie.indexOf( name + "=" );
	var len = start + name.length + 1;
	if ( ( !start ) && ( name != document.cookie.substring( 0, name.length ) ) ) {
		return null;
	}
	if ( start == -1 ) return null;
	var end = document.cookie.indexOf( ";", len );
	if ( end == -1 ) end = document.cookie.length;
	return unescape( document.cookie.substring( len, end ) );
}
	
function setCookie( name, value, expires, path, domain, secure ) {
	var today = new Date();
	today.setTime( today.getTime() );
	if ( expires ) {
		expires = expires * 1000 * 60 * 60 * 24;
	}
	var expires_date = new Date( today.getTime() + (expires) );
	document.cookie = name+"="+escape( value ) +
		( ( expires ) ? ";expires="+expires_date.toGMTString() : "" ) + //expires.toGMTString()
		( ( path ) ? ";path=" + path : "" ) +
		( ( domain ) ? ";domain=" + domain : "" ) +
		( ( secure ) ? ";secure" : "" );
}
	
function deleteCookie( name, path, domain ) {
	if ( getCookie( name ) ) document.cookie = name + "=" +
			( ( path ) ? ";path=" + path : "") +
			( ( domain ) ? ";domain=" + domain : "" ) +
			";expires=Thu, 01-Jan-1970 00:00:01 GMT";
}

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);
		}
	}
}
/* Reset attribute search fields */
function resetSearch()
{
   resetSearch("sidebarSearch")
}
/* Reset attribute search fields */
function resetSearch(nameOfFormToReset)
{
	var myForm = document.getElementById(nameOfFormToReset);
	if (!myForm || !myForm.reset || !myForm.elements) 
		return;

    myForm.reset();
    
	var arrElems = myForm.elements;
	if (!arrElems) 
		return;
		
    // Reset all input fields    
    for( var i = 0 ; i < arrElems.length ; i++){

		switch (arrElems[i].type.toLowerCase()) {
			case  "text":
			case  "password":
			case  "textarea":
				arrElems[i].value="";
				break;
			case  "radio":
			case  "checkbox":
				arrElems[i].selected = false;
				arrElems[i].checked = false;
				break;
			default:
				arrElems[i].selectedIndex = 0;
				break;
		}
		
		if(arrElems[i].onchange) {
			arrElems[i].onchange();
		}
    }
}
function $() {
	var elements = new Array();
	for (var i = 0; i < arguments.length; i++) {
		var element = arguments[i];
		if (typeof element == 'string')
			element = document.getElementById(element);
		if (arguments.length == 1)
			return element;
		elements.push(element);
	}
	return elements;
}
AddLoadedScript("Common.js");
