var xmlUnit=null;
var xmlResort=null;
var xmlLocal=null;
var xmlPort=null;
var xmlRoom=null;
var allFilter= 0;
//xml file locations
var xUnitXML= "/includes/xml/resortfinder/unitamenities.xml";
var xResortXML= "/includes/xml/resortfinder/resortamenities.xml";
var xLocalXML= "/includes/xml/resortfinder/localactivities.xml";
var xRoomXML= "/includes/xml/resortfinder/roomtype.xml";
var xPortXML= "/includes/xml/resortfinder/airport.xml";
if (window.ActiveXObject)
	{// code for IE
		xmlUnit=new ActiveXObject("Microsoft.XMLDOM");
		xmlResort=new ActiveXObject("Microsoft.XMLDOM");
		xmlLocal=new ActiveXObject("Microsoft.XMLDOM");
		xmlPort=new ActiveXObject("Microsoft.XMLDOM");
		xmlRoom=new ActiveXObject("Microsoft.XMLDOM");
		xmlUnit.async=0;
		xmlResort.async=0;
		xmlLocal.async=0;
		xmlPort.async=0;
		xmlRoom.async=0;
		xmlUnit.load(xUnitXML);
		xmlResort.load(xResortXML);
		xmlLocal.load(xLocalXML);
		xmlPort.load(xPortXML);
		xmlRoom.load(xRoomXML);
	} 
	else if (document.implementation.createDocument)
			{// code for Mozilla, Firefox, Opera, etc.
				request = new XMLHttpRequest();
				request.open("GET",xUnitXML,true);
				request.onreadystatechange = function()
				{
					if (request.readyState == 4)
					{
						if ( request.status == 200 ) {
						xmlUnit = request.responseXML;
						}
					}
				}
				request.send(null);
				xhr = new XMLHttpRequest();
				xhr.open("GET", xResortXML, true);
				xhr.onreadystatechange = function(){
				  if ( xhr.readyState == 4 ) {
					if ( xhr.status == 200 ) {
						xmlResort = xhr.responseXML;
					}
				  }
				};
				xhr.send(null);
				xla = new XMLHttpRequest();
				xla.open("GET", xLocalXML, true);
				xla.onreadystatechange = function(){
				  if ( xla.readyState == 4 ) {
					if ( xla.status == 200 ) {
						xmlLocal = xla.responseXML;
					}
				  }
				};
				xla.send(null);
				xad = new XMLHttpRequest();
				xad.open("GET", xPortXML, true);
				xad.onreadystatechange = function(){
				  if ( xad.readyState == 4 ) {
					if ( xad.status == 200 ) {
						xmlPort = xad.responseXML;
					}
				  }
				};
				xad.send(null);
				xrt = new XMLHttpRequest();
				xrt.open("GET", xRoomXML, true);
				xrt.onreadystatechange = function(){
				  if ( xrt.readyState == 4 ) {
					if ( xrt.status == 200 ) {
						xmlRoom = xrt.responseXML;
					}
				  }
				};
				xrt.send(null);
			}
			else
				{
					alert('Your browser cannot handle this script');
				}
function searchresorts(){
	if($('#UseAirport').val() == ""){
		alert("Please select if you would like to filter by Airport Distance");
		return;
	}
	if($('#type').val() == ""){
		alert("Please select the search type to perform: Any or All.");
		return;
	}
	//Result Sets 
	var xResultSet = new Array();
	var choices = 0;
	var unitcheckboxes =  document.finder.Unitcheckbox;
	var resortcheckboxes =  document.finder.Resortcheckbox;
	var localcheckboxes =  document.finder.Localcheckbox;
	var roomcheckboxes =  document.finder.roomcheckbox;
	var airportcheckboxes =  document.finder.Airportcheckbox;
	choices = boxcounter(unitcheckboxes);
	if(choices > 0){
		if(xmlUnit != null){
			xResultSet = checkCategory(xmlUnit, unitcheckboxes, xResultSet);}
			else 
			alert("Error loading Unit Amenities. Please try again later.");
	}
	checkbox_choices = 0;
	choices = boxcounter(resortcheckboxes);
	if(choices > 0){
		if(xmlResort != null){
			xResultSet = checkCategory(xmlResort, resortcheckboxes, xResultSet);}
			else 
			alert("Error loading Resort Amenities. Please try again later.");

	}
	checkbox_choices = 0;
	choices = boxcounter(localcheckboxes);
	if(choices > 0){
		if(xmlLocal != null){
			xResultSet = checkCategory(xmlLocal, localcheckboxes, xResultSet);}
			else 
			alert("Error loading Local Activities. Please try again later.");
	}
	checkbox_choices = 0;
	choices = boxcounter(roomcheckboxes);
	if(choices > 0){
		if(xmlLocal != null){
			xResultSet = checkCategory(xmlRoom, roomcheckboxes, xResultSet);}
			else 
			alert("Error loading Room Types. Please try again later.");
	}
	if(document.finder.UseAirport.value == 'Y'){
		checkbox_choices = 0;
		choices = boxcounter(airportcheckboxes);
		if(choices > 0){
			if(xmlPort != null){
				xResultSet = checkCategory(xmlPort, airportcheckboxes, xResultSet);}
				else 
				alert("Error loading Airport Distances. Please try again later.");
		}
	}
	allFilter= 0;
	if (xResultSet == null || xResultSet.length < 1 )
	{
		searchDiv("No results were found that matched your entries, please broaden your inquiry and <br>search again.");
		
	}
	else
		{
			searchDiv(xResultSet);			
		}
}
function boxcounter(boxes){
	var checkbox_choices = 0;
	if (boxes){
		for (counter = 0; counter < boxes.length; counter++)
		{
			if (boxes[counter].checked)
				checkbox_choices += 1;
		}
	}
	return checkbox_choices;
}
function checkCategory(xml, checkbox, tempset){
	var checked = new Array;
	var arraycounter = 0;
	var xCbValue;
	
	var typeSelected = $("#type").val();
	
	if(allFilter > 0 && tempset.length == 0)
		return tempset;

	if(typeSelected == "All")
	{
		allFilter+=1;
	}
	
	//Retrieves the values of the checkboxees and replaces any spaces to an underscore to match XML file
	for (counter = 0; counter < checkbox.length; counter++)
	{
		if (checkbox[counter].checked)
			{
				xCbValue = checkbox[counter].value.replace(" ","_").toLowerCase();
				xCbValue = xCbValue.replace(" ","_");
				xCbValue = xCbValue.replace(" ","_");
				checked[arraycounter] = xCbValue;
				arraycounter += 1;
			}
	}
	var x =xml.getElementsByTagName("resort");
	//If no result set has been generated 
	if(tempset == null || tempset.length < 1){
		if(document.finder.type.value == "Any"){
			tempset = includeAny(x, checked, tempset);
			return tempset;}
		//else if(document.finder.type.value == "Exclusive")
//		{
//			tempset = excludeAll(x, checked, tempset);
//			return tempset;
//
//		}
		else{
			tempset = includeAll(x, checked, tempset);
			return tempset;}
	}
	else{
		var tempset2 = new Array();
		//If there is already something in the result set
		// inclusive, any
		if(document.finder.type.value == "Any"){
			tempset2 = includeAny(x, checked, tempset2);
			if(tempset2.length >= tempset.length){
				tempset = combineAny(tempset2,tempset);
				return tempset;}
			else{
				tempset = combineAny(tempset,tempset2);
				return tempset;}
		}
		else{
			tempset2 = includeAll(x, checked, tempset2);
			if(tempset2.length <= tempset.length){
				tempset = combineAll(tempset2,tempset);
				return tempset;}
			else{
				tempset = combineAll(tempset,tempset2);
				return tempset;}
		}
	}
}

function searchDiv(resort){
	if(resort instanceof Array){
		resort.sort();
		urls = getURL(resort);
		
		//image size 98 x 98
		htmloutput = "";
		htmloutput ='<div style="width:576px;"><table border="0" class="table2" width="576"><tr><th colspan="3">SEARCH RESULTS: '+ resort.length + ' Resorts Found</th></tr></table></div>';

		htmloutput +='<div style="width:576px;height:300px;overflow:auto;"><table border="0" class="table2"><tr>';

		for(var i=0; i< resort.length; i++){
			htmloutput += '<td width="180" align="center"><a href="' + urls[i][0] + '"  target="_blank"><span style="font-size:10px;">' +  resort[i] +', ' + urls[i][1];
			htmloutput += '</span><br><br><img src="' + urls[i][0] + 'images/ov_1a.jpg" width="98" heigth="98"/></a><br><br></td>';
		
		if((i+1)%3 == 0)
			{htmloutput += '</tr><tr>';}
		}
		if(resort.length%3 != 0)
			htmloutput += '</tr>';
		htmloutput += '</table></div>';
		document.getElementById("resortresults").innerHTML = htmloutput;
	}
	else
	document.getElementById("resortresults").innerHTML = '<p class="DefaultTextBlueBold">' + resort + '</p>';
}

function includeAny(x, checked, set){
	arraycounter=0;
	for (var i=0;i<x.length;i++)
	{ 
		for(var j=0; j < checked.length; j++)
		{
			xStatus = x[i].getElementsByTagName(checked[j])[0].childNodes[0].nodeValue;
			if (xStatus == "Y")
			{
				set[arraycounter] = x[i].getElementsByTagName("city")[0].childNodes[0].nodeValue;
				arraycounter += 1;
				break;
			}
		}
	}
	return set;
}

function includeAll(x, checked, set){
	arraycounter=0;
	for (var i=0;i<x.length;i++)
	{ 
		xTic = 0;
		for(var j=0; j < checked.length; j++)
		{
			xStatus = x[i].getElementsByTagName(checked[j])[0].childNodes[0].nodeValue;
			if (xStatus == "Y")
				xTic += 1;
		}
		if(checked.length == xTic)
		{
			set[arraycounter] = x[i].getElementsByTagName("city")[0].childNodes[0].nodeValue;
			arraycounter += 1;
		}
	}
	return set;
}

function combineAny(larger,smaller){
	var addOn = new Array();
	var arrayCounter=0;
	for(var i=0; i<smaller.length; i++)
	{
		var xCounter = 0;
		for(var j=0; j<larger.length; j++)
		{
			if(smaller[i] != larger[j])
			  xCounter +=1;
		}
		if(xCounter == larger.length)
			{
				addOn[arrayCounter] = smaller[i];
				arrayCounter +=1;
			}
	}
	larger=larger.concat(addOn);
	return larger;
	
}

function combineAll(smaller,larger){
	var newSet = new Array();
	var arrayCounter=0;
	for(var i=0; i<smaller.length; i++)
	{
		for(var j=0; j<larger.length; j++)
		{
			if(smaller[i] == larger[j]){
				newSet[arrayCounter] = smaller[i];
				arrayCounter +=1;
				break;
			}
		}
	}
	return newSet;
}

function getURL(result){
	var newSet = new Array;
	var arraycounter = 0;
	xml = xmlUnit.getElementsByTagName("resort");
	
	for (a = 0; a < result.length; ++ a)
	newSet[a] = new Array();

	for(var x =0; x <result.length; x++)
	{
		for (var i=0;i<xml.length;i++)
		{ 
			City = xml[i].getElementsByTagName("city")[0].childNodes[0].nodeValue;
			if(result[x] == City){
				newSet[arraycounter][0] = xml[i].getElementsByTagName("url")[0].childNodes[0].nodeValue;
				newSet[arraycounter][1] = xml[i].getElementsByTagName("state")[0].childNodes[0].nodeValue;
				arraycounter +=1;
			}
		}
	}
	return newSet;
}

function showMiles(){
	if (document.finder.UseAirport.value == 'Y')	{
		document.getElementById("miles").style.display = "block";}
	else 
		document.getElementById("miles").style.display = "none";
}

function ua_checker(){
	var checkbox_choices = 0;
	var SelectedDiv = "";
	for (counter = 0; counter < document.finder.Unitcheckbox.length; counter++)	{
		if (document.finder.Unitcheckbox[counter].checked)
			SelectedDiv += document.finder.Unitcheckbox[counter].value + "; ";
	}
	if (SelectedDiv != ""){
		document.getElementById("UnitSelected").innerHTML = '<div><strong>Unit Amenities Selected:</strong> <a href="#" id="toggleU" onclick="toggleUnit();">Hide Selected</a></div>';
		document.getElementById("UnitSelected").innerHTML += '<div id="UnitList"> <span class="CrumbText">' + SelectedDiv; 
		document.getElementById("UnitSelected").innerHTML +='</span></div>';}
	else 
		document.getElementById("UnitSelected").innerHTML = "";
}

function ra_checker(){
	var checkbox_choices = 0;
	var SelectedDiv = "";
	for (counter = 0; counter < document.finder.Resortcheckbox.length; counter++){
		if (document.finder.Resortcheckbox[counter].checked)
		SelectedDiv += document.finder.Resortcheckbox[counter].value + "; ";
	}
	
	if (SelectedDiv != ""){
		document.getElementById("ResortSelected").innerHTML = '<div><strong>Resort Amenities Selected:</strong> <a href="#" id="toggleR" onclick="toggleResort();">Hide Selected</a></div>';
		document.getElementById("ResortSelected").innerHTML += '<div id="ResortList"> <span class="CrumbText">' + SelectedDiv; 
		document.getElementById("ResortSelected").innerHTML +='</span></div>';}
	else 
		document.getElementById("ResortSelected").innerHTML = "";
}

function la_checker(){
	var checkbox_choices = 0;
	var SelectedDiv = "";
	for (counter = 0; counter < document.finder.Localcheckbox.length; counter++)	{
		if (document.finder.Localcheckbox[counter].checked)
			SelectedDiv += document.finder.Localcheckbox[counter].value + "; ";
	}
	if (SelectedDiv != ""){
		document.getElementById("ActivitySelected").innerHTML = '<div><strong>Local Activities Selected:</strong> <a href="#" id="toggleL" onclick="toggleAct();">Hide Selected</a></div>';
		document.getElementById("ActivitySelected").innerHTML += '<div id="LocalList"> <span class="CrumbText">' + SelectedDiv; 
		document.getElementById("ActivitySelected").innerHTML +='</span></div>';}
	else 
		document.getElementById("ActivitySelected").innerHTML = "";
}

function checkAll(field){
	for (i = 0; i < field.length; i++)
		field[i].checked = true ;
	if(field == document.finder.Unitcheckbox)
	ua_checker();
	else if(field == document.finder.Resortcheckbox)
	ra_checker();
	else
	la_checker();
}

function uncheckAll(field){
	for (i = 0; i < field.length; i++)
		field[i].checked = false ;
	if(field == document.finder.Unitcheckbox)
	ua_checker();
	else if(field == document.finder.Resortcheckbox)
	ra_checker();
	else
	la_checker();
}

function resetAll(){
	for (i = 0; i < document.finder.Resortcheckbox.length; i++)
		document.finder.Resortcheckbox[i].checked = false ;
	for (i = 0; i < document.finder.Unitcheckbox.length; i++)
		document.finder.Unitcheckbox[i].checked = false ;
	for (i = 0; i < document.finder.Localcheckbox.length; i++)
		document.finder.Localcheckbox[i].checked = false ;
	for (i = 0; i < document.finder.roomcheckbox.length; i++)
		document.finder.roomcheckbox[i].checked = false ;
	ua_checker();
	ra_checker();
	la_checker();
	
	document.getElementById("resortresults").innerHTML ="";
	
}

function toggleUnit(){
	if (document.getElementById("UnitList").style.display == "none"){
		document.getElementById("toggleU").innerHTML="Hide Selected";
		document.getElementById("UnitList").style.display = "block";}
	else{
		document.getElementById("toggleU").innerHTML="Show Selected";
		document.getElementById("UnitList").style.display = "none";
	}
}

function toggleResort(){
	if (document.getElementById("ResortList").style.display == "none"){
		document.getElementById("toggleR").innerHTML="Hide Selected";
		document.getElementById("ResortList").style.display = "block";}
	else{
		document.getElementById("ResortList").style.display = "none";
		document.getElementById("toggleR").innerHTML="Show Selected";}
		
}

function toggleAct(){
	if (document.getElementById("LocalList").style.display == "none"){
		document.getElementById("toggleL").innerHTML="Hide Selected";
		document.getElementById("LocalList").style.display = "block";}
	else{
		document.getElementById("toggleL").innerHTML="Show Selected";
		document.getElementById("LocalList").style.display = "none";}
}

		
