Array.prototype.inArray=function(search){
	for(var i=0; i<	this.length; i++){
		if(search==this[i]){
			return true;	
		}	
	}
	return false;
}



// declare a global  XMLHTTP Request object

var XmlHttpObj;



// create an instance of XMLHTTPRequest Object, varies with browser type, try for IE first then Mozilla

function CreateXmlHttpObj()

{

	// try creating for IE (note: we don't know the user's browser type here, just attempting IE first.)

	try

	{

		XmlHttpObj = new ActiveXObject("Msxml2.XMLHTTP");

	}

	catch(e)

	{

		try

		{

			XmlHttpObj = new ActiveXObject("Microsoft.XMLHTTP");

		} 

		catch(oc)

		{

			XmlHttpObj = null;

		}

	}

	// if unable to create using IE specific code then try creating for Mozilla (FireFox) 

	if(!XmlHttpObj && typeof XMLHttpRequest != "undefined") 

	{

		XmlHttpObj = new XMLHttpRequest();

	}

}



function speciesTextOnKeyUp(value){
    // url of page that will send xml data back to client browser

	if (value.length<4){return;}
	
    var requestUrl;

    // use the following line if using asp

    requestUrl = "xml_data_provider/"+ encodeURIComponent(value);
	

    // use the following line if using php

    // requestUrl = "xml_data_provider.php" + "?filter=" + encodeURIComponent(selectedContinent);

    

	CreateXmlHttpObj();

	

	// verify XmlHttpObj variable was successfully initialized

	if(XmlHttpObj)

	{

        // assign the StateChangeHandler function ( defined below in this file)

        // to be called when the state of the XmlHttpObj changes

        // receiving data back from the server is one such change

		XmlHttpObj.onreadystatechange = StateChangeHandler;

		

		// define the iteraction with the server -- true for as asynchronous.

		XmlHttpObj.open("GET", requestUrl,  true);

		

		// send request to server, null arg  when using "GET"

		XmlHttpObj.send(null);		

	}
	
}



// called from onChange or onClick event of the continent dropdown list

function speciesListOnChange() 

{

    var speciesList = document.getElementById("speciesList");

    

    // get selected continent from dropdown list

    var selectedSpecies = speciesList.options[speciesList.selectedIndex].value;

    

    // url of page that will send xml data back to client browser

    var requestUrl;

    // use the following line if using asp

    requestUrl = "xml_data_provider" + encodeURIComponent(selectedSpecies);

    // use the following line if using php

    // requestUrl = "xml_data_provider.php" + "?filter=" + encodeURIComponent(selectedContinent);

    

	CreateXmlHttpObj();

	

	// verify XmlHttpObj variable was successfully initialized

	if(XmlHttpObj)

	{

        // assign the StateChangeHandler function ( defined below in this file)

        // to be called when the state of the XmlHttpObj changes

        // receiving data back from the server is one such change

		XmlHttpObj.onreadystatechange = StateChangeHandler;

		

		// define the iteraction with the server -- true for as asynchronous.

		XmlHttpObj.open("GET", requestUrl,  true);

		

		// send request to server, null arg  when using "GET"

		XmlHttpObj.send(null);		

	}

}





// this function called when state of  XmlHttpObj changes

// we're interested in the state that indicates data has been

// received from the server

function StateChangeHandler()

{

	// state ==4 indicates receiving response data from server is completed

	if(XmlHttpObj.readyState == 4)

	{

		// To make sure valid response is received from the server, 200 means response received is OK

		if(XmlHttpObj.status == 200)

		{			

			PopulateCountryList(XmlHttpObj.responseXML.documentElement);

		}

		else

		{

			alert("problem retrieving data from the server, status code: "  + XmlHttpObj.status);

		}

	}

}


function addToOtherSelect(whichList, towhich){
	var toWhich = document.getElementById(towhich);
	var whichList = document.getElementById(whichList);
	var toWhichList= new Array();
	var i=0;
   	
	for(i = toWhich.length - 1; i>=0; i--){
		toWhichList[i]=toWhich.options[i].value;
	}

	$i=0;
	for(i = whichList.length - 1; i>=0; i--){
		if(whichList[i].selected){
			if(!toWhichList.inArray(whichList.options[i].value)){

				optionItem = new Option(whichList.options[i].text, whichList.options[i].value,  false, true);

				toWhich.options[toWhich.length] = optionItem;
				whichList.remove(i);
			}
			else{
				alert(whichList.options[i].text + ' is already in your selection.');
				return false;
			}
		}

	}
}

function markAllOptions(whichList, state){
   	var whichList = document.getElementById(whichList);

   	for(i = whichList.length - 1; i>=0; i--){
		whichList.options[i].selected=true;
	}
}



// populate the contents of the country dropdown list

function PopulateCountryList(countryNode)

{

    var countryList = document.getElementById("countryList");

	// clear the country list 

	for (var count = countryList.options.length-1; count >-1; count--)

	{

		countryList.options[count] = null;

	}



	var countryNodes = countryNode.getElementsByTagName('child');

	var idValue;

	var textValue; 

	var optionItem;

	// populate the dropdown list with data from the xml doc

	
	var toWhichList = new Array();
	var toWhich = document.getElementById('listtosubmit');
	
	for(i = toWhich.length - 1; i>=0; i--){
		toWhichList[i]=toWhich.options[i].value;
	}
	
	
	for (var count = 0; count < countryNodes.length; count++){

		textValue = GetInnerText(countryNodes[count]);

		idValue = countryNodes[count].getAttribute("id");

		if(!toWhichList.inArray(idValue)){
			optionItem = new Option( textValue, idValue,  false, false);

			countryList.options[countryList.length] = optionItem;
   		}

	}

}


function removeSelectOption(select){
	var select = document.getElementById(select);

	var i=0;

	for(i = select.length - 1; i>=0; i--){
		if(select[i].selected){
			select.remove(i);
		}
	}

}





// returns the node text value 

function GetInnerText (node)

{

	 return (node.textContent || node.innerText || node.text) ;

}