var __getElement; if( document.getElementById ) { __getElement = function( elName) { return document.getElementById(elName); }; } else if (document.all)  { __getElement = function(elName){ return document.all[elName]; }; } else if (document.layers){ __getElement = function(elName){ return document.layers[elName]; }; }
var __removeElement; __removeElement = function(parent,el) { parent.removeChild(el); }
function Browser() { var ua, s, i; this.isIE    = false; this.isNS    = false; this.version = null; ua = navigator.userAgent; s = "MSIE"; if ((i = ua.indexOf(s)) >= 0) { this.isIE = true; this.version = parseFloat(ua.substr(i + s.length)); return; } s = "Netscape6/"; if ((i = ua.indexOf(s)) >= 0) { this.isNS = true; this.version = parseFloat(ua.substr(i + s.length)); return; } /* Treat any other "Gecko" browser as NS 6.1. */ s = "Gecko"; if ((i = ua.indexOf(s)) >= 0) { this.isNS = true; this.version = 6.1; return; } }
browser = new Browser();
var _DEBUG = false;
var _debug_console_created = false;
var _debug_num = 0;
function __debug( m ){ if( !_DEBUG ) return; var obj = __getElement('__debugWindow'); if( !obj ) { obj = document.createElement('div'); document.body.appendChild(obj); obj.setAttribute('id','__debugWindow'); obj.style.backgroundColor = "#fff"; obj.style.color = "#000"; obj.style.fontSize = "11px"; obj.style.height = "150px"; obj.style.overflowY = "scroll"; obj.style.fontFamily = "verdana"; obj.style.display = 'block'; obj.innerHTML = (++_debug_num)+": "+m+"<br />"; obj.zIndex = 1000; obj2 = document.createElement('button'); document.body.appendChild(obj2); var butLabel = document.createTextNode('Clear Debug Window'); obj2.appendChild(butLabel); obj2.onclick = function() { __getElement('__debugWindow').innerHTML = ''; }; } else  { obj.innerHTML = (++_debug_num)+': '+m+'<br />'+obj.innerHTML; } }
/* wrap the eventListener stuff for IE/W3C compat */
var __addEvent; var __removeEvent; if( document.addEventListener ) { __addEvent = function(element,type,handler ){  element.addEventListener(type, handler,false ); }; __removeEvent = function(element,type,handler) { element.removeEventListener(type, handler, false ); }; } else if( document.attachEvent ){ __addEvent = function( element,type,handler){ element.attachEvent("on"+type,handler); }; __removeEvent = function( element,type, handler) { element.detachEvent("on"+type, handler); }; } else { __addEvent = function( element,type,handler){ element["on"+type] = handler; }; __removeEvent = function( element, type, handler ){ element["on"+type] = ""; } }
var __cancelBubble;
/* cancelBubble is used to stop execution on the current event bubble so as to prevent text selection when dragging an item */
if (browser.isIE) { __cancelBubble = function(event) { window.event.cancelBubble = true; window.event.returnValue = false; }; } else if (browser.isNS) { __cancelBubble = function (event) {event.preventDefault(); }; }
function __getMouseCoordinates(event) { if (browser.isIE) { x = window.event.clientX + document.documentElement.scrollLeft + document.body.scrollLeft; y = window.event.clientY + document.documentElement.scrollTop + document.body.scrollTop; } else if (browser.isNS) { x = event.clientX + window.scrollX; y = event.clientY + window.scrollY; } return [x,y]; }
    
/* this method lets us find the position of any object on the page  */
function __findPosById(id) { var obj = __getElement(id); var left 	= 0; var top 	= 0; left = obj.offsetLeft; top = obj.offsetTop; if (obj.offsetParent) { while ( (obj = obj.offsetParent) ) { left += obj.offsetLeft; top += obj.offsetTop; } } return [left,top]; }	

/* this method gets the click position from a window event  */
function __getClickPosition(e) { var posX = 0; var posY = 0; if (!e) { e = window.event; } if (e.pageX || e.pageY) { posX = e.pageX; posY = e.pageY; } else if (e.clientX || e.clientY) { posX = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft; posY = e.clientY + document.body.scrollTop + document.documentElement.scrollTop; } return [posX,posY]; }	
function ReadCookie(key) { key += "="; var cookies = document.cookie.split(';'); var val = ""; for(var i=0;i < cookies.length;i++) { if (cookies[i].indexOf(key) == 0 || cookies[i].indexOf(key) == 1) { return cookies[i].substring(key.length,cookies[i].length); } } return ""; }
function SaveCookie(CookieID, CookieValue, Expires) { if( !Expires ){  Expires = 86400000; } var today = new Date(); var expire = new Date(); expire.setTime(today.getTime() + Expires); /* 24 hours */ document.cookie = CookieID+'='+CookieValue+ ';expires='+expire.toGMTString(); }	
function ToggleDiv( id, persist ) { var el = __getElement(id); if( el.style.display == 'block'  || el.style.display == '' ) { el.style.display = 'none'; } else { el.style.display = 'block'; } if( persist ){ var DisplayPrefs = ReadCookie("DisplayPreferences"); var arrPrefs = DisplayPrefs.split('&'); DisplayPrefs = id+"="+(el.style.display=="block" ? true : false)+"&"; for( i=0;i<arrPrefs.length;i++) { if( arrPrefs[i].indexOf(id+"=") == 0   ) { continue; }/*ignore the old value*/ DisplayPrefs += arrPrefs[i]+"&" } SaveCookie("DisplayPreferences", DisplayPrefs); } }	
function __parseArgumentString(ArgumentString) { var _args = []; if ( ArgumentString ) { var Pairs = ArgumentString.split(/[;&]/); for ( var i = 0; i < Pairs.length; i++ ) { var KeyVal = Pairs[i].split('='); if ( ! KeyVal || KeyVal.length != 2 ) { continue; } var key = unescape( KeyVal[0] ); var val = unescape( KeyVal[1] ); val = val.replace(/\+/g, ' '); _args[key] = val; } } return _args;}
function TriggerEvent( EventName, Data, Arg ) { $(document).trigger( EventName,Data, Arg ); }