	//moved from rightblock_dictionary 12.12.2007 - jw!
	var CursorLast = null;


	function Debug(_msg, _clean)
	{
		var debugfield = document.getElementById('jasonwiener_div_debug');
		if(debugfield == undefined)
		{
			debugfield = document.createElement('div');
			debugfield.setAttribute('style', 'border:1px solid #ccc;background:#fff;font-size:12px;width:400px;min-height:200px;padding:10px;');
			debugfield.setAttribute('id', 'jasonwiener_div_debug');
			document.getElementById('body').appendChild(debugfield);
		}
		
		if(_clean != undefined)
			debugfield.innerHTML = '';	

		debugfield.innerHTML += _msg + '<br>';
	}

	//moved from rightblock_notes 12.12.2007 - jw!
	function GetKeyCode(e){
		var keynum = -1;
		if(window.event){ // IE
			keynum = e.keyCode;
		}else if(e.which){ // Netscape/Firefox/Opera
			keynum = e.which;
		}
		return keynum;
	}

	//moved from rightblock_dictionary 12.12.2007 - jw!
	function SaveMousePosition(e){		
		position = getPosition(e);
		CursorLast = position;
	}

	//01.07.2008 - jw!
	function ClearField(_obj){
		_obj.value = '';
	}

	String.prototype.trim = function() {
		return this.replace(/^\s+|\s+$/g,"");
	}

	function getPosition(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 getEventPosition(e) {
		if (!e) var e = window.event;
//		var relTarg = e.relatedTarget || e.fromElement;
//		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 getElementPosition(obj) {
		var curleft = curtop = 0;
		if (obj.offsetParent) {
			curleft = obj.offsetLeft
			curtop = obj.offsetTop
			while (obj = obj.offsetParent) {
				curleft += obj.offsetLeft
				curtop += obj.offsetTop
			}
		}
		return [curleft,curtop];
	}

	function toolBarRedirectLogin(e, _selectedToolBar) {
		if (e) {
			var me = new Event(e);
		} else {
			var me = new Event(window.event);
		}
		me.stopPropagation();

		if(ShmoopUser_auth == false) {
			additional_func = "SwitchToolBar('no_event', '" +_selectedToolBar +"')"; 
			MOOdalBox.open("javascript:display_auth_panel(false, additional_func)", "", "");
		} else {
			SwitchToolBar('no_event', _selectedToolBar);
		}
	}

	function addToKittieRedirectLogin(e, _id) {
		var mouse = getPosition(e);
		var lo = (mouse.x - 25) + 'px';
		var to = (mouse.y - 120 - 35) + 'px';

		if (ShmoopUser_auth == false) {
			additional_func = "ShowFoldersDialogue('" +_id +"', 'clipping', '" +lo +"','" +to +"')";
			MOOdalBox.open("javascript:display_auth_panel(false, additional_func)", "", "");
		} else {
			ShowFoldersDialogue(_id, 'clipping', lo, to);
		}
	}

	//TODOBT:  Remove after javascript update
	function RedirectLogin()
	{
		if(ShmoopUser_auth == false) {
			MOOdalBox.open("javascript:display_auth_panel(true, '')", "", "");

			return false;
		}
	}

	function Goto(_loc){
		window.location.href = _loc;

	}

	function Signup(){
		Goto('/signup');
	}

	function Login(){
		Goto('/login');
	}

	function IsEnter(e){
		if(e != undefined)
		{
			var keynum = GetKeyCode(e);
			return (keynum == 13) ? true : false ;
		}
	}

	function IsNumeric(strString) {
		var strValidChars = "0123456789.-";
		var strChar;
		var blnResult = true;
	
		if(strString.length == 0) return false;
	
	   // test strString consists of valid characters listed above
		for(i = 0; i < strString.length && blnResult == true; i++){
			strChar = strString.charAt(i);
			if(strValidChars.indexOf(strChar) == -1){
				blnResult = false;
			}
		}
		return blnResult;
	}

	function trimAll(sString){
		var whitespace = ' \n\r\t\f\x0b\xa0\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u2028\u2029\u3000';
		for (var i = 0; i < sString.length; i++) {
			if (whitespace.indexOf(sString.charAt(i)) === -1) {
				sString = sString.substring(i);
				break;
			}
		}
		for (i = sString.length - 1; i >= 0; i--) {
			if (whitespace.indexOf(sString.charAt(i)) === -1) {
				sString = sString.substring(0, i + 1);
				break;
			}
		}
		return whitespace.indexOf(sString.charAt(0)) === -1 ? sString : '';

	}

	// DEPRECATED: this function doesn't perform exactly as expected, merely
	// moves the burden of context to itself
	function ContextualFunction(_fn, _context)
	{
		this.fn = _fn;
		this.context = _context;

		this.call = function(params) {
				return this.fn.call(this.context, params);
		};
	}

	AjaxResponseMapEntries = [];
	function _AjaxResponseMap()
	{
		this.mapRequest = function(_req, _fn, _ct) {
			AjaxResponseMapEntries.push({request: _req, response: _fn, con: _ct});
		};

		this.forwardResponse = function(_response) {
			for(var i=0; i<AjaxResponseMapEntries.length; i++)
			{
				if(AjaxResponseMapEntries[i].request == this)
				{
					var fn = AjaxResponseMapEntries[i].response;
					var ct = AjaxResponseMapEntries[i].con;
					AjaxResponseMapEntries.splice(i,1);
					if(typeof fn == 'function')
						return fn.call(ct, _response);
					else if(typeof fn == 'string')
						return eval.call(ct, fn);
					break;
				}
			}
		};
	}
	AjaxResponseMap = new _AjaxResponseMap();

	EventMapEntries = {};
	function _EventMap()
	{
		this.clear = false;

		this.mapEvent = function(_key, _fn, _ct, _el) {
			this.addToMap(_key, _fn, _ct, _el);

			// check for exisiting element event function
			// if none, create mapped callback
			if(typeof _el[_key] == 'undefined' || !_el[_key])
				_el[_key] = EventMap.fire;
			// element event function exists
			else if(typeof _el[_key] == 'function')
			{
				// if there is an existing event function for the element,
				// map it and reset to default map event function
				if(_el[_key] != EventMap.fire)
				{
					this.addToMap(_key, _el[_key], _ct, _el);
					_el[_key] = EventMap.fire;
				}
			}
			else if(typeof _el[_key] == 'string')
			{
				_el['_'+_key] = _el[_key];
				var w = function(_e) {
					eval(this['_'+_e.type]);
				};
				this.addToMap(_key, w, _ct, _el);

				_el[_key] = EventMap.fire;
			}
		};

		this.addToMap = function(_key, _fn, _ct, _el) {
			if(EventMapEntries[_key] == undefined)
				EventMapEntries[_key] = [];

			// iterate through map to find add call if element is already present
			var targetInMap = false;
			for(var i=0; i<EventMapEntries[_key].length; i++)
			{
				if(EventMapEntries[_key][i].target == _el)
				{
					EventMapEntries[_key][i].map.push({el:_fn,ct:_ct});
					targetInMap = true;
					break;
				}
			}

			// if the target is not yet mapped, add it
			if(targetInMap == false)
				EventMapEntries[_key].push({target:_el, map:[{el:_fn,ct:_ct}]});
		};

		this.fire = function(_e) {
			_e = new CrossBrowserEventObject(_e);
			var key = 'on' + _e.type;

			if(EventMapEntries[key])
			{
				for(var i=0; i<EventMapEntries[key].length; i++)
				{
					// execution should occur within target's context
					if(EventMapEntries[key][i].target == this)
					{
						for(var j=0; j<EventMapEntries[key][i].map.length; j++)
						{
							var entry = EventMapEntries[key][i].map[j];
							if(typeof entry.el == 'function')
								entry.el.call(entry.ct, _e);
							else if(typeof entry.el == 'string')
								eval(entry.el);

							if(EventMap.clear)
							{
								EventMapEntries[key][i].map.splice(j--,1);
								EventMap.clear = false;
							}
						}
						break;
					}
				}
			}
		};

		this.unmapEvent = function() {
			EventMap.clear = true;
		};
	}
	EventMap = new _EventMap();

	function _ToolTip()
	{
		// append 'tool tip' span to document on window load
		EventMap.mapEvent('onload', function(){

			var alt = document.createElement('table');
			alt.id = 'altbit';
			alt.style.position = 'absolute';
			alt.style.top = '100px';
			alt.style.left = '100px';
			alt.style.height = '27px';
			alt.style.borderCollapse = 'collapse';
			alt.style.visibility = 'hidden';
			alt.style.zIndex = 200;
			alt.padding = '0px';
			alt.spacing = '0px';
			alt.border = '0px';

			var row = alt.insertRow(0);

			var bleft = row.insertCell(0);
			bleft.style.width = '9px';
			bleft.style.backgroundImage = "url('/media/template_v1d3/toolTip/left.png')";

			var body = row.insertCell(1);
			body.style.fontSize = 11;
			body.style.backgroundImage = "url('/media/template_v1d3/toolTip/bg.png')";
			body.style.verticalAlign = 'top';
			body.style.fontFamily = 'times new roman';

			var bright = row.insertCell(2);
			bright.style.width = '9px';
			bright.style.backgroundImage = "url('/media/template_v1d3/toolTip/right.png')";

			document.body.appendChild(alt);
			EventMap.unmapEvent();
		}, null, window);

		this.tid = undefined;

		this.tip = function(e, _text) {
			var d = document.getElementById('altbit');

			this.cancel();

			if(d.style.visibility == 'hidden')
			{
				e = new CrossBrowserEventObject(e);
				var windim = GetWindowDimensions();

				if(e.y+50 > windim.height)
					d.style.top = e.y-30 + 'px';
				else
					d.style.top = e.y+17 + 'px';
				d.style.left = e.x + 'px';
				d.rows[0].cells[1].innerHTML = _text;
				this.tid = setTimeout("document.getElementById('altbit').style.visibility='visible'", 633);

				EventMap.mapEvent('onmouseout', this.clear, this, e.target);
				EventMap.mapEvent('onclick', this.clear, this, e.target);
			}
		};

		this.cancel = function() {
			if(this.tid != undefined)
			{
				clearTimeout(this.tid);
				this.tid = undefined;
			}
		}

		this.clear = function() {
			document.getElementById('altbit').style.visibility = 'hidden';
			ToolTip.cancel();
			EventMap.unmapEvent();
		};
	}
	ToolTip = new _ToolTip();

	function CrossBrowserEventObject(_e)
	{
		// cross browser compatibility
		if (_e == undefined)
			this.event = window.event;
		else
			this.event = _e;

		if (this.event.target)
			this.target = this.event.target;
		else if (this.event.srcElement)
			this.target = this.event.srcElement;

		// If an event takes place on an element that contains text, this text node,
		// and not the element, becomes the target of the event.
		if (this.target && this.target.nodeType == 3)
			this.target = this.target.parentNode;

		this.type = this.event.type;

		this.x = 0;
		this.y = 0;
		if (this.event.pageX || this.event.pageY) 	{
			this.x = this.event.pageX;
			this.y = this.event.pageY;
		}
		else if (this.event.clientX || this.event.clientY) 	{
			var wid = GetWindowDimensions();
			this.x = this.event.clientX + wid.scrollX;
			this.y = this.event.clientY + wid.scrollY;
		}

		this.clientX = this.event.clientX;
		this.clientY = this.event.clientY;
	}

	function ToggleInput(_dom, _initVal)
	{
		if(_dom.value == '')
			_dom.value = _initVal;
		else if(_dom.value == _initVal)
			_dom.value = '';
	}

	function ShmoopDropdown(_eid)
	{
		// visibility flag
		this.vis = false;
		// hiding timeout id
		this.tid = false;
		// dropdown element id
		this.eid = _eid;

		this.show = function() {
			if(this.tid)
			{
			   clearTimeout(this.tid);
			   this.tid = false;
			}

			if(this.vis == false)
			{
				var d = document.getElementById(this.eid);
				d.style.opacity = 1;
				d.style.visibility = 'visible';
				this.vis = true;
			}
		};

		this.hide = function() {
			if(this.tid)
			   clearTimeout(this.tid);
			this.tid = setTimeout("TempGlobals.unmap('"+this.tgk+"')", 200);
		};

		this.forceHide = function() {
			Fade.out(document.getElementById(this.eid));
			//document.getElementById(this.eid).style.visibility = 'hidden';
			this.vis = false;
			this.tid = false;
		}

		this.toggle = function() {
			if(this.vis)
			   this.hide();
			else
			   this.show();
		};
		// TempGlobal key
		this.tgk = TempGlobals.map(this.forceHide, this);
	}

	function GetWindowDimensions()
	{
		var wid = -1, hi = -1, scx = -1, scy = -1;
		if( typeof( window.innerWidth ) == 'number' && typeof( window.pageYOffset ) == 'number' )
		{
			//Non-IE
			wid = window.innerWidth;
			hi = window.innerHeight;

			//Netscape compliant
			scy = window.pageYOffset;
			scx = window.pageXOffset;
		}
		else if( document.documentElement )
		{
			//IE 6+ in 'standards compliant mode'
			if( document.documentElement.offsetWidth || document.documentElement.offsetHeight )
			{
				wid = document.documentElement.offsetWidth;
				hi = document.documentElement.offsetHeight;
			}
			else if (document.documentElement.clientWidth || document.documentElement.clientHeight )
			{
				wid = document.documentElement.clientWidth;
				hi = document.documentElement.clientHeight;
			}

			//IE6 standards compliant mode
			if ( document.documentElement.scrollLeft || document.documentElement.scrollTop )
			{
				scy = document.documentElement.scrollTop;
				scx = document.documentElement.scrollLeft;
			}
		}
		else if( document.body )
		{
			//IE 4 compatible
			if ( document.body.clientWidth || document.body.clientHeight )
			{
				wid = document.body.clientWidth;
				hi = document.body.clientHeight;
			}

			//DOM compliant
			if ( document.body.scrollLeft || document.body.scrollTop )
			{
				scy = document.body.scrollTop;
				scx = document.body.scrollLeft;
			}
		}

		return { width: wid, height: hi, scrollX: scx, scrollY: scy };
	}

	/* Deprecated - 10/22/08
	function _Preview()
	{
	   this.last = undefined;
	   this.hid = undefined;
	   this.lock = false;
	   this.event = undefined;

	   this.ready = function() {
	      var alt = document.createElement('div');
	      alt.id = 'imgbit';
	      alt.style.position = 'absolute';
	      alt.style.top = '-100px';
	      alt.style.left = '-100px';
	      alt.style.visibility = 'hidden';
	      alt.style.padding = '10px';
	      alt.style.backgroundColor = '#333';
	      alt.style.zIndex = 200;

	      var close = document.createElement('div');
	      close.style.visibility = 'hidden';
	      close.align = 'right';

	      var closeclick = document.createElement('div');
	      closeclick.style.cssText = 'font-size:10px;color:white;cursor:pointer;text-decoration:underline';
	      EventMap.mapEvent('onclick', this._hide, this, closeclick);
	      closeclick.innerHTML = 'close';
	      close.appendChild(closeclick);
	      alt.appendChild(close);

	      var img = document.createElement('img');
	      img.border = 0;
	      alt.appendChild(img);
	      EventMap.mapEvent('onload', this.position, this, img);

	      var cap = document.createElement('div');
	      cap.style.cssText = 'font-family:Lucida Bright,Georgia,"Times New Roman",Times;font-size:10px;margin-top:10px;line-height:1.25em;color:#ffffff';
	      alt.appendChild(cap);

	      EventMap.mapEvent('onmouseover', this.show, this, alt);

	      document.body.appendChild(alt);
	      EventMap.unmapEvent();
	   };

	   this.expand = function(e, _src, _cap) {
	   		var d = document.getElementById('imgbit');
	   		d.childNodes[0].style.visibility = 'visible';
	   		d.childNodes[1].src = _src;
	   		d.lastChild.innerHTML = _cap;
	   		this.lock = true;
	   		//this.last = _src;
	   };

	   this.position = function() {
	   		var d = document.getElementById('imgbit');
			var height = d.childNodes[1].height + 40;
			var width = d.childNodes[1].width + 20;

			var dim = GetWindowDimensions();
			var h = height/2;
			if(this.event.clientY - h < 0)
				d.style.top = (10 + dim.scrollY) + 'px';
			else if(this.event.clientY + h > dim.height)
				d.style.top = (dim.height + dim.scrollY - 10 - height) + 'px';
			else
				d.style.top = (this.event.y - h) + 'px';

			if(this.event.clientX + width + 35 > dim.width)
				d.style.left = (this.event.clientX - width - 15) + 'px';
			else
				d.style.left = (this.event.x + 15) + 'px';
			d.style.visibility = 'visible';
	   };

	   this.show = function(e, _src, _cap) {
	      if(_src == undefined)
	         _src = this.last;

	      if(this.hid != undefined)
	      {
	         clearTimeout(this.hid);
	         this.hid = undefined;
	      }

	      e = new CrossBrowserEventObject(e);
	  	  EventMap.mapEvent('onmouseout', this.hide, this, e.target);

	      if(this.last != _src && this.lock == false)
	      {
	      	 var d = document.getElementById('imgbit');

	         d.childNodes[1].src = _src;
	         d.lastChild.innerHTML = _cap;

			 this.event = e;
		     this.last = d.childNodes[1].src.replace(/^http:\/\/[^\/]+/i,'');
	      }
	   };

	   this.hide = function() {
	      if(this.hid != undefined)
	      {
	         clearTimeout(this.hid);
	         this.hid = undefined;
	      }

	      var d = document.getElementById('imgbit');
	      if(d.style.visibility == 'visible' && this.lock == false)
	         this.hid = setTimeout("TempGlobals.unmap("+this._ghide+")",300);
	      EventMap.unmapEvent();
	   };

	   this._hide = function() {
	      var d = document.getElementById('imgbit');
	      d.style.visibility = 'hidden';
	      d.childNodes[0].style.visibility = 'hidden';
	      this.hid = undefined;
	      this.last = undefined;
	      this.lock = false;
	   }

	   // Map local context to global scope
	   this._ghide = TempGlobals.map(this._hide, this);

	   // append 'tool tip' span to document on window load
	   EventMap.mapEvent('onload', this.ready, this, window);
	}
	*/

	function _TempGlobals()
	{
		this.entries = [];
		this.map = function(_fn, _ct) {
			return this.entries.push({fn: _fn, ct: _ct}) - 1;
		};

		this.remap = function(_i, _fn, _ct) {
			if(_i == undefined)
				return this.map(_fn, _ct);
			else
			{
				this.entries[_i] = {fn: _fn, ct: _ct};
				return _i;
			}
		};

		this.unmap = function(_i) {
			if(typeof this.entries[_i].fn == 'function')
				return this.entries[_i].fn.call(this.entries[_i].ct);
			else
				return this.entries[_i].fn;
		};

		this.destroy = function(_i) {
			var r = this.unmap(_i);
			delete this.entries[_i];
			return r;
		};
	}
	TempGlobals = new _TempGlobals();

	function _Fade()
	{
		this.s = 8;
		this.inn = function(_el) {
			if(_el != undefined)
				this.ig = TempGlobals.remap(this.ig, _el);
			else
				_el = TempGlobals.unmap(this.ig);

			if(_el.style.visibility == 'hidden')
			{
				setTimeout("var el=TempGlobals.unmap("+this.ig+");el.style.opacity=0;el.style.visibility='visible';", 30);
				for(var i=1, t=40; i<=this.s; i++, t+=40)
					setTimeout("TempGlobals.unmap("+this.ig+").style.opacity="+(((10/this.s)*i)/10),t);
			}
		};

		this.out = function(_el) {
			if(_el != undefined)
				this.og = TempGlobals.remap(this.og, _el);
			else
				_el = TempGlobals.unmap(this.og);

			if(_el.style.visibility == 'visible')
			{

				for(var i=this.s-1, t=30; i>0; i--, t+=40)
					setTimeout("TempGlobals.unmap("+this.og+").style.opacity="+(((10/this.s)*i)/10),t);
				setTimeout("var el=TempGlobals.unmap("+this.og+");el.style.opacity=0;el.style.visibility='hidden';", t);
			}
		};

		this.outin = function(_el, _fn) {
			if(_el.style.visibility == 'visible')
			{
				this.ig = TempGlobals.remap(this.ig, _el);
				this.cb = TempGlobals.remap(this.cb, _fn);
				this.out(_el);
				setTimeout("TempGlobals.unmap("+this.cb+");TempGlobals.unmap("+this.ginn+")",this.s*41);
			}
			else
			{
				_fn();
				this.inn(_el);
			}
		};

		this.inout = function(_el) {
			if(_el.style.visibility == 'hidden')
			{
				this.og = TempGlobals.remap(this.og, _el);
				this.inn(_el);
				setTimeout("TempGlobals.unmap("+this.gout+")",this.s*41);
			}
			else
				this.out(_el);
		};

		this.ginn = TempGlobals.map(this.inn, this);
		this.gout = TempGlobals.map(this.out, this);
	}
	Fade = new _Fade();

	InitialTALengths = {};
	InitialTAHeights = {};
	function pdumbsize(e, _el)
	{
		if(!InitialTAHeights[_el.name])
			InitialTAHeights[_el.name] = parseInt(_el.style.height);

		if(_el.value.length >= InitialTALengths[_el.name] && _el.scrollHeight > InitialTAHeights[_el.name])
			_el.style.height = _el.scrollHeight + 'px';
		else
		{
			var c = d = parseInt(_el.style.height);
			var ih = InitialTAHeights[_el.name];

			while(d >= _el.scrollHeight && (d-2) > ih)
			{
				d-=2;
				_el.style.height = d + 'px';
			}

			if(c != d)
			{
				if(d > ih)
					_el.style.height = (d+2) + 'px';
				else
					_el.style.height = ih + 'px';
			}
		}
		InitialTALengths[_el.name] = _el.value.length;
	}

	function initializeTASizes()
	{
		var tas = document.getElementsByTagName('textarea');
		for(var i=0; i<tas.length; i++)
		{
			InitialTAHeights[tas[i].name] = parseInt(tas[i].style.height);
			if(tas[i].value)
				InitialTALengths[tas[i].name] = tas[i].value.length;
			else
				InitialTALengths[tas[i].name] = 0;
			if(tas[i].scrollHeight && tas[i].scrollHeight > InitialTAHeights[tas[i].name])
				tas[i].style.height = tas[i].scrollHeight + 'px';
		}
	}

	function initializeTASize(_ta)
	{
		InitialTAHeights[_ta.name] = parseInt(_ta.style.height);
		if(_ta.value)
			InitialTALengths[_ta.name] = _ta.value.length;
		else
			InitialTALengths[_ta.name] = 0;
		if(_ta.scrollHeight && _ta.scrollHeight > InitialTAHeights[_ta.name])
			_ta.style.height = _ta.scrollHeight + 'px';
	}


	function ToggleTableOfContents(_fx)
	{
		var toc = document.getElementById('TableOfContents');
		if(toc.style.display == 'block')
		{
			/*var date = new Date();
			date.setTime(date.getTime()+(6*24*60*60*1000));
			document.cookie = 'toctoggle=no; '+'expires='+date.toGMTString()+'; path=/; ';*/
			toc.style.display = 'none';
		}
		else
		{
			/*var date = new Date();
			date.setTime(date.getTime()+(6*24*60*60*1000));
			document.cookie = 'toctoggle=yes; '+'expires='+date.toGMTString()+'; path=/; ';*/
			toc.style.display = 'block';
		}
	}

	function currentTime()
	{
		var ct = new Date();
		var h = ct.getHours();
		var m = ct.getMinutes();
		var s = ct.getSeconds();

		if(h > 12)
			h = (h-12);

		if(m < 10)
			m = '0' + m;

		if(s < 10)
			s = '0' + s;

		if(h >= 12)
			var as = 'pm';
		else
			var as = 'am';


		return h + ':' + m + ':' + s + as;
	}

	function removeChildrenFromNode(_node)
	{
		if(_node == undefined || _node == null)
			return;

		while (_node.hasChildNodes())
		  _node.removeChild(_node.firstChild);
	}	
		
	String.prototype.trim = function() {
		return this.replace(/^\s+|\s+$/g,"");
	}
	String.prototype.ltrim = function() {
		return this.replace(/^\s+/,"");
	}
	String.prototype.rtrim = function() {
		return this.replace(/\s+$/,"");
	}
	
/*	var tmp = getQueryString(false);
	alert(tmp.E);
*/	function getQueryString(_forcelower)
	{
		var ret = {};
		var querystring = window.location.search.substring(1);
		if(querystring.trim() != '')
		{
			var a_vars = querystring.split('&');
			for(var i=0;i<a_vars.length;i++)
			{
				var pair = a_vars[i].split('=');
				if(_forcelower == undefined || _forcelower == true)
					eval('ret.' + pair[0].toLowerCase() + ' = \'' + pair[1] + '\';');
				else
					eval('ret.' + pair[0] + ' = \'' + pair[1] + '\';');
			}
		}
		return ret;
	} 

	function ReplaceHtmlWithSpace()
	{
		var regx = /(<([^>]+)>)/gi;
		for (i=0; i<arguments.length; i++)
		{
			arguments[i].value=arguments[i].value.replace(regx, " ")
		}
	}
	
	function CharLimitCountdown(txt, max_chars, _target)
	{
		remaining = (max_chars - txt.length);
		if(_target != undefined )
		{
			document.getElementById(_target).innerHTML = remaining;
		}
		return remaining;
	}
	
	Array.prototype.InArray = function(needle)
	{
		var arr = this;
		for( x=0; x<arr.length; x++)
		{
			if( arr[x] == needle )
				return true;
		}
		return false;
	}