function urlencode(str){
var histogram = {}, histogram_r = {}, code = 0, tmp_arr = [];
var ret = str.toString();
var replacer = function(search, replace, str) {
var tmp_arr = [];
tmp_arr = str.split(search);
return tmp_arr.join(replace);
};
histogram['!']   = '%21';
histogram['%20'] = '+';
ret = encodeURIComponent(ret);
for (search in histogram) {
replace = histogram[search];
ret = replacer(search, replace, ret);
}
return ret.replace(/(\%([a-z0-9]{2}))/g, function(full, m1, m2){
return "%"+m2.toUpperCase();
});
return ret;
}

function urldecode(str){

var histogram = {}, histogram_r = {}, code = 0, str_tmp = [];
var ret = str.toString();
var replacer = function(search, replace, str) {
var tmp_arr = [];
tmp_arr = str.split(search);
return tmp_arr.join(replace);
};
histogram['!']   = '%21';
histogram['%20'] = '+';
for (replace in histogram) {
search = histogram[replace]; // Switch order when decoding
ret = replacer(search, replace, ret) // Custom replace. No regexing   
}
ret = decodeURIComponent(ret);
return ret;
}
function Query(response)
{
	var xml = response;
	var records;
	var size;
	var next_index;
	var prev_index;
	var curr_index;

	this.init = function( recordName )
	{
		records = xml.getElementsByTagName(recordName);
		size = records.length;
		next_index = 0;
		prev_index = size-1;
		curr_index = 0;
	}

	this.size = function()
	{
		return records.length;
	}
	this.next = function()
	{
		curr_index = next_index;
		next_index = next_index + 1;
		return next_index <= size;
	}
	this.prev = function()
	{
		curr_index = prev_index;
		prev_index = prev_index - 1;
		return prev_index >= -1;
	}

	this.getRecordTag = function( tag )
	{
		var record = records[curr_index];
		var node = record.getElementsByTagName(tag)[0];
		if(node.hasChildNodes())
		{
			return node.firstChild.nodeValue;
         	}
		else
		{
			return "";
		}
	}
	this.getTag = function( tag )
	{
		var node = xml.getElementsByTagName(tag)[0];
		if(node.hasChildNodes())
		{
			return node.firstChild.nodeValue;
         	}
		else
		{
			return "";
		}
	}
}

function trim(text)
{
	return text.replace(/^\s+|\s+$/g, '');
}

function GetXmlHttpObject()
{
	var obj=null;
	try
	{
	 	// Firefox, Opera 8.0+, Safari
		obj=new XMLHttpRequest();
	}
	catch (e)
	{
	 	// Internet Explorer
	 	try
	  	{
	  		obj=new ActiveXObject("Msxml2.XMLHTTP");
		}
	 	catch (e)
	  	{
			obj=new ActiveXObject("Microsoft.XMLHTTP");
		}
	}
	return obj;
}
function purge(id)
{
	var node = document.getElementById(id);
	while(node.hasChildNodes())
	{
		node.removeChild(node.firstChild);
	}

}
function removeOverlay(id)
{
	var overlay = document.getElementById(id);
	if(overlay)
	{
		document.body.removeChild(overlay);
	}
}
function getScrollTop(){
	if(typeof pageYOffset!= 'undefined'){
		//most browsers
		return pageYOffset;
	}
	else{
		var B= document.body; //IE 'quirks'
		var D= document.documentElement; //IE with doctype
		D= (D.clientHeight)? D: B;
		return D.scrollTop;
	}
}
function TextLink(href, className, text)
{
	var node = document.createElement("a");
	node.href=href;
	node.className = className;
	node.appendChild(document.createTextNode(text));
	return node;
}
function TextElement(type, className, text)
{
	var node = document.createElement(type);
	node.className = className;
	node.appendChild(document.createTextNode(text));
	return node;
}
function PhotoButton(className, src, href)
{
	var node = document.createElement("a");
	node.className = className;
	node.href=href;
	var img = document.createElement("img");
	img.src=src;
	node.appendChild(img);
	return node;
}
function Button(className, text, href)
{
	var node = document.createElement("a");
	node.className = className;
	node.href=href;
	node.appendChild(document.createTextNode(text));
	return node;
}
function Unique(type, id)
{
	var node = document.createElement(type);
	node.id = id;
	return node;
}
function Photo(className, src)
{
	var node = document.createElement("img");
	node.className = className;
	node.src=src;
	return node;
}

function Element(type, className)
{
	var node = document.createElement(type);
	node.className = className;
	return node;
}

var arVersion = navigator.appVersion.split("MSIE");
var version = parseFloat(arVersion[1]);
var isIE = document.all?true:false;
var loadimg = null;
if((version < 7.0) && (version >= 5.5) && isIE){ 
	loadimg = function(obj, img) {
		obj.style.filter="progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+img+"', sizingMethod='crop')";
	};
} else {
	loadimg = function(obj, img) {
		obj.style.backgroundImage="url("+img+")";
	};
}

function appendOverlay(obj, id, overlayWidth, overlayHeight)
{
	removeOverlay(id);

	var myWidth = 0, myHeight = 0;
	if( typeof( window.innerWidth ) == 'number' ) {
		//Non-IE
		myWidth = window.innerWidth;
		myHeight = window.innerHeight;
	} else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
		//IE 6+ in 'standards compliant mode'
		myWidth = document.documentElement.clientWidth;
		myHeight = document.documentElement.clientHeight;
	} else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
		//IE 4 compatible
		myWidth = document.body.clientWidth;
		myHeight = document.body.clientHeight;
	}

	var overlay_outer = new Element("div", "overlay_outer");
	overlay_outer.id = id;
	overlay_outer.style.width = overlayWidth +"px";
	overlay_outer.style.height = overlayHeight +"px";

	var overlay_frame = document.createElement("div");
	overlay_frame.style.width = overlayWidth +"px";
	overlay_frame.style.height = overlayHeight +"px";

	var overlay_close = new Element('div',"overlay_close");
	overlay_close.onclick = function()
	{
		removeOverlay(id);	
	}
	var overlay_inner = new Element('div', 'overlay_inner');	

	overlay_close.style.zIndex="1000";
	loadimg(overlay_frame, "/img/site/overlay.png");
	overlay_inner.appendChild(obj);
	overlay_frame.appendChild(overlay_close);
	overlay_frame.appendChild(overlay_inner);
	overlay_outer.appendChild(overlay_frame);



	var left = Math.floor((myWidth - overlayWidth)/2);
	var top =  Math.floor((myHeight - overlayHeight)/2);
	overlay_outer.style.left = left+"px";
	overlay_outer.style.top = top+getScrollTop()+"px";
	document.body.appendChild(overlay_outer);
}


function infobox(text)
{
	var obj = new TextElement('div', 'infobox', text);	
	appendOverlay(obj, 'test', 360,240);

}
function purge_id(id)
{
	var node = document.getElementById(id);
	while(node.hasChildNodes())
	{
		node.removeChild(node.firstChild);
	}

}
function purge_node(node)
{
	while(node.hasChildNodes())
	{
		node.removeChild(node.firstChild);
	}

}
function purge_node_timeout(node, time)
{
	setTimeout(function(){purge_node(node); node = null; }, time);	
}
function purge_id_timeout(id, time)
{
	var node = document.getElementById(id);
	setTimeout(function(){purge_node(node); node = null; }, time);	
}
function detach_id(id)
{
	var node = document.getElementById(id);
	var parentnode = node.parentNode;
	parentnode.removeChild(node);
}
function detach_node(node)
{
	var parentnode = node.parentNode;
	parentnode.removeChild(node);
}
function $(id)
{
	return document.getElementById(id);
}


