var req;
var map = null;
var markerArray = new Array();
var pageNumber = 0;
var itemsPerPage = 0;
 
function showMap() {
	map = new GMap2(document.getElementById("jobMap"));
	map.addControl(new GLargeMapControl());
	map.addControl(new GMapTypeControl());
   	map.setCenter(new GLatLng(40, -100), 3);
}

function sendRequest(formName)
{
	theForm = document.getElementById(formName);
	var url = "http://api.indeed.com/apisearch?";
	url += "q=" + URLEncode(theForm.q.value);
	url += "&l=" + URLEncode(theForm.l.value);
	url += "&key=" + URLEncode(theForm.key.value);
	url += "&format=" + URLEncode(theForm.format.value);
	url += "&filter=" + URLEncode(theForm.filter.value);
	url += "&latlong=" + URLEncode(theForm.latlong.value);
	url += "&start=" + URLEncode(pageNumber * itemsPerPage);
	itemsPerPage = theForm.itemsPerPageMenu.value;
	url += "&limit=" + URLEncode(itemsPerPage);
	url += "&sort=" + URLEncode(theForm.sortMenu.value);
	
	loadXMLDoc(url);
} 

function loadXMLDoc(url) 
{
	req = false;
    // branch for native XMLHttpRequest object
    if(window.XMLHttpRequest) {
    	try {
			req = new XMLHttpRequest();
        } catch(e) {
			alert(e.toString());
			req = false;
        }
    // branch for IE/Windows ActiveX version
    } else if(window.ActiveXObject) {
       	try {
        	req = new ActiveXObject("Msxml2.XMLHTTP");
      	} catch(e) {
        	try {
          		req = new ActiveXObject("Microsoft.XMLHTTP");
        	} catch(e) {
				alert(e.toString());
          		req = false;
        	}
		}
    }
	if(req) {
		req.onreadystatechange = processReqChange;
		try {
			var proxyUrl = "./php/xmlProxy.php?url=" + URLEncode(url);
			req.open("GET", proxyUrl, true);
			req.send(null);
		} catch(e) {
			alert(e.toString());
		}
	}
}

function processReqChange() 
{
	if ((req.readyState == 4)) {
		var jobsDoc = GXml.parse(req.responseText);
		displayJobs(jobsDoc);
	}
}

function displayJobs(jobDoc)
{
	map.clearOverlays();
		// Clear the markers on the map.
			
	var totalResultsElement = jobDoc.documentElement.getElementsByTagName("totalresults").item(0);
	var numberOfJobs = totalResultsElement.firstChild.nodeValue;
	var jobsElement = jobDoc.documentElement.getElementsByTagName("results").item(0);
	var jobsList = jobsElement.getElementsByTagName("result");
	var numberOfJobsOnThisPage = jobsList.length;
	var isMore = false;
	var isFirst= false;
	var lastPage = Math.floor(numberOfJobs / itemsPerPage);
	
	if ((pageNumber * itemsPerPage + numberOfJobsOnThisPage) != numberOfJobs) {
		isMore = true;
	} 

	if (pageNumber == 0) {
		isFirst = true;
	} 

	var jobString = "<font style='font-family: Arial, Helvetica, sans-serif;font-size: 14px;'>"
	var form = document.getElementById("myForm");
	jobString += "We found " + '<b><font color="#FF6600" size="3">' + numberOfJobs + "</font></b>" + " jobs when you searched for " + '<b><font color="#FF6600" size="3">' + form.q.value.toUpperCase() + "</font></b>. See below...";
	
	if (form.l.value != "") {
		jobString += " in " + "<b>" + form.l.value.toUpperCase() + "</b> .";
	} else {
		jobString += ".";
	}
	
	jobString += "</font>";
	jobString += "<br><br>";
	
	jobString = jobString + "<table width='880' border='0' style='font-family: Arial, Helvetica, sans-serif;font-size: 12px;' align='center' cellpadding='0' cellspacing='0' id='jobsTable'>";
	jobString += "<thead>";
	jobString += "<tr>";
	jobString += "<td colspan=1 style='text-align: left;border-bottom: medium solid #000000;font-size: 12px;'>";
	jobString += "<b>Page:</b>" + (pageNumber+1) + " of " + (lastPage+1);
	jobString += "</td>";
	jobString += "<td colspan=2 style='text-align: right;border-bottom: medium solid #000000;font-size: 16px;'>";

	if (!isFirst) {
//		jobString += "<button style='height: 20px;font-size: 10px;' onclick='pageNumber=0;sendRequest(\"myForm\");return false;'>First</button>";
//		jobString += "<button style='height: 20px;font-size: 10px;' onclick='--pageNumber;sendRequest(\"myForm\");return false;'>Prev</button>";
		jobString += "<a href='#' style='font-size: 12px;' onclick='pageNumber=0;sendRequest(\"myForm\");return false;'>First</a>";
		jobString += "&nbsp;<a href='#' style='font-size: 12px;' onclick='--pageNumber;sendRequest(\"myForm\");return false;'>Prev</a>&nbsp;";
	}
	
	if (isMore) {
//		jobString += "<button style='height: 20px;font-size: 10px;' onclick='++pageNumber;sendRequest(\"myForm\");return false;'>Next</button>";
		jobString += "<a href='#' style='font-size: 12px;' onclick='++pageNumber;sendRequest(\"myForm\");return false;'>Next</a>";
		var onClick = " onclick='pageNumber=" + lastPage + ";sendRequest(\"myForm\");return false;' ";
//		jobString += "<button style='height: 20px;font-size: 10px;'" + onClick + ">Last</button>";
		jobString += "&nbsp;<a href='#' style='font-size: 12px;'" + onClick + ">Last</a>";
	}

	jobString += "</td>";
	jobString += "</tr>";

	jobString += "<tr>";
	jobString += "<th style='text-align: left;border-bottom: medium solid #000000;font-size: 16px;'>Title</th>"
	jobString += "<th style='text-align: left;border-bottom: medium solid #000000;font-size: 16px;'>Date</th>"
	jobString += "<th style='text-align: left;border-bottom: medium solid #000000;font-size: 16px;'>Location</th>"
	jobString += "</tr>";
	jobString += "</thead>";
	
	var mapBounds = new GLatLngBounds();
	
	for (i = 0; i < numberOfJobsOnThisPage; i++){

		var thisJob = jobsList.item(i);
		var infoUrl = GXml.value(thisJob.getElementsByTagName("url").item(0));
		infoUrl = infoUrl.replace('www.indeed.com/viewjob?jk=','www.indeed.com/rc/clk?jk=');
		var jobtitle = GXml.value(thisJob.getElementsByTagName("jobtitle").item(0));
		var company = GXml.value(thisJob.getElementsByTagName("company").item(0));
 		var city = GXml.value(thisJob.getElementsByTagName("city").item(0));
 		var state = GXml.value(thisJob.getElementsByTagName("state").item(0));
 		var country = GXml.value(thisJob.getElementsByTagName("country").item(0));
 		var postDate = GXml.value(thisJob.getElementsByTagName("date").item(0));
 		var snippet = GXml.value(thisJob.getElementsByTagName("snippet").item(0));
 		var lon = GXml.value(thisJob.getElementsByTagName("longitude").item(0));
 		var lat = GXml.value(thisJob.getElementsByTagName("latitude").item(0));

       	var bground = " style='background-color: #EEEEEE;height: 20px;' ";
  	   
 		jobString += "<tr" + bground + ">";
		jobString += "<td style='text-align: left;width: 50%;padding-right: 10px;'><b><a href='" + infoUrl + "' target='_blank'>" + jobtitle + "</a>";
		jobString += "<br><b>" + company + "</b></td>";
		jobString += "<td style='text-align: left;width: 30%;padding-right: 10px;'><b>" + postDate +"</b></td>";
 		jobString += "<td style='text-align: left;width: 20%;font-weight: bold;'>" + city + ", " + state + ", " + country + "</td></tr>";
		jobString += "<tr><td colspan='3'>"+snippet+"</td></tr>";
		
		var info="<table style='font-family: Arial, Helvetica, sans-serif;font-size: small;' width='300' border='0' align='left'>";

		info += "<tr>";
		info += "<td> <a style='font-size: 12px;' href='#' onClick=\"window.open('" + infoUrl + "','Detail','width=800,height=600,resizable=yes,scrollbars=yes')\">" + jobtitle +  "</a></td>";
		info += "</tr>"
		info += "<tr>";
		info += "<td style='font-size: 12px;font-weight: bold;'>" + company + "</td>";
		info += "</tr>";
		info += "<tr>";
		info += "<td style='font-size: 12px;'>" + city + "," + state + "," + country + "</td>";
		info += "</tr>";
		info += "</table>";

		if ((lat != 0) && (lon != 0)) {
			mapBounds.extend(new GLatLng(lat, lon, true));
			showLocation(lat,lon,info);
		}
	}
  
	jobString = jobString + "</table>";

	document.getElementById("jobs").innerHTML = jobString;

	var zoom = map.getBoundsZoomLevel(mapBounds);
	var center = mapBounds.getCenter();
	map.setCenter(center, zoom);
 }

function URLEncode(url)
{
	return escape(url).replace(/\+/g, '%2B').replace(/\"/g,'%22').replace(/\'/g, '%27').replace(/\//g,'%2F');	
}

function showLocation(lat,lon,info) {
	var info2 = info;	
	var icon = new GIcon();
	icon.image = "http://www.layoffmaps.com/image/jobmap_icon.gif";
	//icon.shadow = "http://www.biocomicals.com/_testyayini/Images/Icons/icon_shadow.gif";
	var icon_width = 30;
	var icon_height = 30;
	icon.iconSize = new GSize(icon_width, icon_height);
//	icon.shadowSize = new GSize(25, 20);
	icon.iconAnchor = new GPoint(icon_width / 2, icon_height);
	icon.infoWindowAnchor = new GPoint(icon_width / 2,0);

	var marker = new GMarker(new GLatLng(lat,lon), icon);
	
	GEvent.addListener(marker, "click", function() {
		marker.openInfoWindowHtml(info2);
		});
	
	map.addOverlay(marker);
	
	markerArray[name]=marker;
}

function capitalize(obj) {
        val = obj.value;
        newVal = '';
        val = val.split(' ');
        for(var c=0; c < val.length; c++) {
                newVal += val[c].substring(0,1).toUpperCase() + val[c].substring(1,val[c].length) + ' ';
        }
        obj.value = newVal;
}

function load() {
	if (GBrowserIsCompatible()) {
		showMap();
	}
}
 
function printOnTest(str) {
	var test = document.getElementById('test');
	test.innerHTML = str;
}