// JavaScript Document
//Public Javascript

function searchOn(obj){
	if (obj.value == "- Search the Site -"){
		obj.value = '';	
	}
}

function searchOff(obj){
	if (obj.value == ""){
		obj.value = '- Search the Site -';
	}
}

function isEmailAddress(str) {
    var re = /^[\w-]+(\.[\w-]+)*@([\w-]+\.)+[a-zA-Z]{2,7}$/;
    if (!str.match(re)) {
        return false;
    } else {
        return true;
    }
}

function showHide(hideLayer, showLayer)
{
	var hider=document.getElementById(hideLayer);	
	var shower=document.getElementById(showLayer);
	hider.className='hidetext';
	shower.className='showtext';
}

//________________ POSITIONING_______________________
function cursor_position(e) {
    e = e || window.event;
    var cursor = {x:0, y:0};
    if (e.pageX || e.pageY) {
        cursor.x = e.pageX;
        cursor.y = e.pageY;
    } 
    else {
        var de = document.documentElement;
        var b = document.body;
        cursor.x = e.clientX + 
            (de.scrollLeft || b.scrollLeft) - (de.clientLeft || 0);
        cursor.y = e.clientY + 
            (de.scrollTop || b.scrollTop) - (de.clientTop || 0);
    }
    return cursor;
}

function object_properties(obj){
	var block = new Object;
	block.w = block.h = block.x = block.y = block.ox = block.oy = 0;
	block.w = parseInt(obj.offsetWidth);
	block.h = parseInt(obj.offsetHeight);
	block.x = block.y = 0;
	if (obj.offsetParent) {
		do {
			block.x += obj.offsetLeft;
			block.y += obj.offsetTop;
		} while (obj = obj.offsetParent);
	}
	//Offset values
	if( typeof( window.pageYOffset ) == 'number' ) {//Netscape compliant
		block.oy = window.pageYOffset;
		block.ox = window.pageXOffset;
    } else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {//DOM compliant
		block.oy = document.body.scrollTop;
		block.ox = document.body.scrollLeft;
    } else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {//IE6 standards compliant mode
		block.oy = document.documentElement.scrollTop;
		block.ox = document.documentElement.scrollLeft;
    }
	//alert(block.w);alert(block.h); alert(block.x);alert(block.y);alert(block.ox); alert(block.oy);
	return block;
}

function window_properties(){
	var win = new Object;
	win.w = win.h = win.x = win.y = win.ox = win.oy = 0;
	if (window.innerHeight){
		win.h = parseInt(window.innerHeight);
		win.w = parseInt(window.innerWidth);
	} else {
		win.h = parseInt(document.documentElement.offsetHeight);
		win.w = parseInt(document.documentElement.offsetWidth);
	}
	//the window always starts at 0,0
	win.x = 0;
	win.y = 0;
	
	//total height
	win.th=Math.max(document.documentElement.scrollHeight,document.documentElement.offsetHeight);
	win.tw=Math.max(document.documentElement.scrollWidth,document.documentElement.offsetWidth);

	//Offset values
	if( typeof( window.pageYOffset ) == 'number' ) {//Netscape compliant
		win.oy = window.pageYOffset;
		win.ox = window.pageXOffset;
    } else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {//DOM compliant
		win.oy = document.body.scrollTop;
		win.ox = document.body.scrollLeft;
    } else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {//IE6 standards compliant mode
		win.oy = document.documentElement.scrollTop;
		win.ox = document.documentElement.scrollLeft;
    }
	//alert(win.w);alert(win.h); alert(win.x);alert(win.y);alert(win.ox); alert(win.oy);
	return win;
}

//___________________________DHTML____________________________-

// JavaScript Document
function addEvent( obj, type, fn ) {
	if (obj.addEventListener) {
		 if (type === 'mouseenter')
			 {obj.addEventListener('mouseover', mouseEnter(fn),false); }
		  else if (type === 'mouseleave')
			 {obj.addEventListener('mouseout', mouseEnter(fn),false); }
		  else {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];
	}
}

/* Code for grabbing all of a same-domain window in way that preserves
changes to the DOM made by the client after load. - Ben Dappen 2009 
NOTE: requires that outerHTML work, so include document
*/
function get_page_source(document_reference){
	if (!document_reference){
		document_reference = document;	
	}
	var html_tag = document_reference.getElementsByTagName("html");
	var doctype_props = document_reference.doctype;
	var doctype_code = "";
	if (doctype_props){
		doctype_code+= "<!DOCTYPE ";
		doctype_code+=doctype_props['name'];
		doctype_code+=' PUBLIC "'+doctype_props['publicId']+'"';
		doctype_code+=' "'+doctype_props['systemId']+'">';
		doctype_code+="\n";
	}
	var page_code=doctype_code+html_tag[0].outerHTML;
	return page_code;
}

function set_page_source(the_code,document_reference){
	if (!document_reference){
		document_reference = document;	
	}
	var html_tag = document_reference.getElementsByTagName("html");
	html_tag[0].outerHTML = the_code;
}

/* This non-prototype Mouseenter/Mouseleave function is based on stchur's code
http://blog.stchur.com/2007/03/15/mouseenter-and-mouseleave-events-for-firefox-and-other-non-ie-browsers/
Perhaps I should consider using his whole addEvent function rather than mixing? */

function mouseEnter(_fn){
   return function(_evt){
      var relTarget = _evt.relatedTarget;
      if (this === relTarget || isAChildOf(this, relTarget))
         { return; }

      _fn.call(this, _evt);
   }
};

function isAChildOf(_parent, _child)
{
   if (_parent === _child) { return false; }
      while (_child && _child !== _parent)
   { _child = _child.parentNode; }

   return _child === _parent;
}

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;
			};
		}
	};
}();
addEvent(window,'unload',EventCache.flush);

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


//______________________________ GENERAL FUNCTIONS ___________________________

function login_popup(obj){
	var pos = object_properties(document.getElementById('promoFrame'));
	var login_window = document.getElementById('pt_menu');
	login_window.style.display='block';
	var popup = object_properties(login_window);
	login_window.style.left=(pos.x+pos.w-popup.w)+'px';
	
}

//____________________________ ONLOAD ____________________________
window.onload=function(){
	if (document.getElementById('pt_menu')){
		var fn=function(){
			document.getElementById('pt_menu').style.display='none';
		}
		addEvent(document.getElementById('pt_menu'),'mouseleave', fn );
	}
}