var myRequest = getXMLHttpRequest();

String.prototype.trim = function() {
	return this.replace(/^\s+|\s+$/g,"");
}

function getXMLHttpRequest() {
	if(window.XMLHttpRequest){
		return new XMLHttpRequest();
	}else if(window.ActiveXObject){
		return new ActiveXObject("Microsoft.XMLHTTP");
	}		
}


function encodeString(toEncode){
	toEncode = toEncode.replace(' ', '%20');
	toEncode = toEncode.replace('&', '%26');
	
	return toEncode;
}


function sendMail(mailto, type, name, email, comments){
	if(name != ''){
		name  = "From: " + name;
	}
	
	if(email != ''){
		email = "%0AE-Mail: " + email;
	}
	window.location.href = "mailto:" + mailto + "?subject=" + type + "&body=" + name + email + "%0AComments:%0A" + comments;
	window.location.href = "/status_trends/";
}


function pagination(form, what) { 
	for(e=0; e<form.elements.length; e++){
		form_element = form.elements[e];
		if(form_element.type == 'select-one'){
			if(form_element.name == what){
				cururl = form_element.value; 
				window.location.assign( cururl ); 
			}
		}
	}
}

function fetchHomePageContent(){
	var url = 'http://biology.usgs.gov/status_trends/static_content/'
	//var url = '/brd/status_trends/static_content/'
	fetch(getXMLHttpRequest(), url, 'ajax_home_page_top');
	fetch(getXMLHttpRequest(), url, 'ajax_home_page_middle');
	fetch(getXMLHttpRequest(), url, 'ajax_home_page_bottom');
	fetch(getXMLHttpRequest(), url, 'ajax_home_page_featured');
	fetch(getXMLHttpRequest(), url, 'ajax_home_page_projects');
}

function fetchContent(what){
	var url = 'http://biology.usgs.gov/status_trends/static_content/';
	//var url = '/brd/status_trends/static_content/'
	fetch(getXMLHttpRequest(), url, what);
}

var recursiveTest = '';
var getErrorPage = '';
function fetch(request, url, what){
	if(url == 'default'){
		url = '/status_trends/ajax_defaults/'
	}
	
	url += what + '.html';
	
	try{
		request.open("GET", url, false);

		request.onreadystatechange = function() {
			if (request.readyState == 4) {
				if (request.status == 200) {
					var responseText = request.responseText;
					document.getElementById(what).innerHTML = responseText;
					recursiveTest = '';
					getErrorPage = '';
				}else{
					//to ensure this is recursion is not an endless loop
					if(recursiveTest == ''){
						recursiveTest = what;
						fetch(getXMLHttpRequest(), 'default', what);
					}else{
						if(getErrorPage == ''){
							getErrorPage = 'yes';
							fetch(getXMLHttpRequest(), 'default', 'error');
						}
					}
				}
			}
		}
		request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		request.send("");
	}catch(e){
		//to ensure this is recursion is not an endless loop
		if(recursiveTest == ''){
			recursiveTest = what;
			fetch(getXMLHttpRequest(), 'default', what);
		}else{
			if(getErrorPage == ''){
				getErrorPage = 'yes';
				fetch(getXMLHttpRequest(), 'default', 'error');
			}else{
				document.getElementById(what).innerHTML = '';
			}
		}
	}
}


function search(start, show, sort){
	var request = getXMLHttpRequest();	
	var queryString = "?result=display&start=" + start + "&show=" + show;
	if(sort != ''){
		queryString += "&sort=" + sort;
	}
	request.open("POST", "/status_trends/search.do" + queryString, true);

	request.onreadystatechange = function() {
		if (request.readyState == 4) {
			if (request.status == 200) {
				var responseText = request.responseText;
				try{
					window.document.getElementById("search_results").innerHTML = responseText;
				}catch(e){
					alert(e);
				}
			}else{
				document.getElementById("search_results").innerHTML = '?'; 
			}
		}
	}
	request.setRequestHeader("Content-type", "text/html");
	request.send("");
}


function add(type, what){
	var currentHTML = document.getElementById("selected" + type).innerHTML;
	var newElement = getNewElement(type, what) + ' ';

	/*
	 *
	 * CHECK IF A STATE IS ALREADY ENTERED
	 *   if the document can get it by id DO NOT ADD IT, it is already there
	 */
	try{
		document.getElementById(what).innerHTML;
	}catch(e){
		document.getElementById("selected" + type).innerHTML = currentHTML + newElement;
	}
}


function getNewElement(type, what){
	return  '<' + type.toLowerCase() + ' id="' + what + '" name="' + what + '"><input type="hidden" name="' + type.toLowerCase() + '" value="' + what + '"/><a href="javascript:removeElement(\''+ type + '\', \'' + what + '\')">' + what + '</a></' + type + '>';
}

function addElement(type, what){
	var currentHTML = document.getElementById("selected" + type).innerHTML;
	var newElement = getNewElement(type, what) + ' ';

	/*
	 *
	 * CHECK IF A STATE IS ALREADY ENTERED
	 *   if the document can get it by id DO NOT ADD IT, it is already there
	 */
	try{
		document.getElementById(what).innerHTML;
	}catch(e){
		document.getElementById("selected" + type).innerHTML = currentHTML + newElement;
	}
}

function removeElement(type, what){
	var selected = document.getElementsByTagName(type);
	
	var newInnerHTML = '';
	for(x=0; x<selected.length; x++){
		if(what != selected[x].attributes.getNamedItem("id").value){
			var elementName = selected[x].attributes.getNamedItem("id").value;
			newInnerHTML += getNewElement(type, elementName) + ' ';
		}
	}
	document.getElementById("selected" + type).innerHTML = newInnerHTML;
}
