var addedOptions = "";
var searchItem = null;
var aLayers = new Array();
var current = null;
var gmlLayer = null;
var aFeatures = new Array();
var map = null;
var searchMarkerLayer = new Array();
var markerSize;
var markerOffset;
var markerIcon ;
var highlightMarkerIcon;

OpenLayers.IMAGE_RELOAD_ATTEMPTS = 0;
OpenLayers.Util.onImageLoadErrorColor = "transparent";
OpenLayers.Feature.Vector.style['default'].cursor = 'pointer';
var styleHidden = OpenLayers.Util.extend({}, OpenLayers.Feature.Vector.style['default']);
styleHidden.display = "none";

var styleStandard = OpenLayers.Util.extend({}, OpenLayers.Feature.Vector.style['default']);
styleStandard.fillOpacity = 0;
styleStandard.fillColor = "#E90";
styleStandard.strokeDashstyle = "solid";
styleStandard.strokeOpacity = .0;

var styleHighlight = OpenLayers.Util.extend({}, OpenLayers.Feature.Vector.style['default']);
styleHighlight.fillOpacity = 0;
styleHighlight.fillColor = "#E90";
styleHighlight.strokeDashstyle = "solid";
styleHighlight.strokeOpacity = .0;


function populateDetailsTab(content){
	
	toggleTabs('infoPanel');
	document.getElementById('infoPanel').innerHTML = content;
	
	tb_init('a.thickbox, area.thickbox, input.thickbox');//pass where to apply thickbox
	imgLoader = new Image();// preload image
	imgLoader.src = tb_pathToImage;
}

function redrawLayers()
{
	for (var i = 0; i < aLayers.length; i++) {
		aLayers[i].redraw();
	}
}

function removeLayers()
{
	for (var i = 0; i < aLayers.length; i++) {
		map.removeLayer(aLayers[i]);
	}
}

function cleanAddedOptions()
{
	addedOptions.replace(',,',',');
	var optionArray = addedOptions.split(',');
	var tmpOptions = "";
	for(var i=0; i < optionArray.length; i++)
	{
		if(optionArray[i].trim() != ""){
			tmpOptions += optionArray[i].trim()+",";
		}
	}	
	addedOptions = tmpOptions;
}


function convertToFeet(distance, units)
{
	var feet = 0;
	var englishUnits = new Array();
	if(units == 'km') {
		feet = (distance*1000) * 3.2808;
	} else if(units == 'm') {
		feet = distance * 3.2808;
	}
	if(feet > 5280) { 
		englishUnits[0] = roundNumber(feet/5280,2);
		englishUnits[1] = 'miles';
		englishUnits[2] = roundNumber(feet/2.6,0);
		englishUnits[3] = 'steps';
	}
	else { 
		englishUnits[0] = roundNumber(feet, 2);
		englishUnits[1] = 'feet';
		englishUnits[2] = roundNumber(feet/2.6,0);
		englishUnits[3] = 'steps';
	}
	return englishUnits;
}

function roundNumber(num, dec) {
	var result = Math.round(num*Math.pow(10,dec))/Math.pow(10,dec);
	return result;
}

function moveLayerToTop(layer)
{
	map.raiseLayer(layer, map.getNumLayers());
}

var distanceInfo = "";
function handleMeasurements(event) {
    var geometry = event.geometry;
    var units = event.units;
    var order = event.order;
    var measure = event.measure;
    var cont_feet = document.getElementById('dist_feet');
    var cont_steps = document.getElementById('dist_steps');
    var out = "";
	var engUnits = convertToFeet(measure.toFixed(3), units);
	var distElem = document.getElementById('distData');
	if(distanceInfo == "") {
   		distanceInfo = distElem.innerHTML;
	}
	distElem.innerHTML =  distanceInfo + "<li><strong>" + engUnits[1] + "</strong>: "+engUnits[0]+"</li><li><strong>" + engUnits[3] + "</strong>: "+engUnits[2]+"</li>";  

}


function addMapControls(map){

	//style the sketch fancy
	sketchSymbolizers = {
		"Point": {
		    pointRadius: 4,
		    graphicName: "square",
		    fillColor: "white",
		    fillOpacity: 1,
		    strokeWidth: 1,
		    strokeOpacity: 1,
		    strokeColor: "#333333"
		},
		"Line": {
		    strokeWidth: 3,
		    strokeOpacity: 1,
		    strokeColor: "#666666",
		    strokeDashstyle: "dash"
		},
		"Polygon": {
		    strokeWidth: 2,
		    strokeOpacity: 1,
		    strokeColor: "#f0f",
		    fillColor: "white",
		    fillOpacity: 0.3
		}
	};
	var style = new OpenLayers.Style();
	style.addRules([new OpenLayers.Rule({symbolizer: this.sketchSymbolizers})]);
	var styleMap = new OpenLayers.StyleMap({"default": style});
	
	var options = {
		handlerOptions: {
		    style: "default", // this forces default render intent
		    layerOptions: {styleMap: styleMap},
		    persist: true
		}
	};
	measureControls = {
		//polygon: new OpenLayers.Control.Measure(OpenLayers.Handler.Polygon, options),
		line: new OpenLayers.Control.Measure(OpenLayers.Handler.Path, options)
	};
	    
	var control;
	for (var key in measureControls) {
		control = measureControls[key];
		control.events.on({
			//"measurepartial": handleMeasurements,
			"measure": handleMeasurements
		});
		map.addControl(control);
	}

	var navigation = new OpenLayers.Control.Navigation({'zoomWheelEnabled': false});
	map.addControl(navigation);
	
	map.addControl(new OpenLayers.Control.PanZoomBar());
    map.addControl(new OpenLayers.Control.Permalink());
    map.addControl(new OpenLayers.Control.ScaleLine());            
	//map.addControl(new OpenLayers.Control.LayerSwitcher({'div':OpenLayers.Util.getElement('layerswitcher')}));
	//map.addControl(new OpenLayers.Control.MousePosition());

	return map;
}



var defaultFeedbackValue = "";
//var textFields = 
function resetMapField(elem){
    if(elem.value == "") {
		elem.value = defaultFeedbackValue;
		elem.style.color = '#666'; 
	}
}
function clearMapField(elem){
    if(defaultFeedbackValue == ""){
		defaultFeedbackValue = elem.value;
	}
    if(elem.value == defaultFeedbackValue) {
		elem.value = ""; ;
		elem.style.color = '#000'; 
	}
}
var defaultSearchValue = "";
//var textFields = 
function resetMapSearch(elem){
    if(elem.value == "") {
		elem.value = defaultSearchValue;
		elem.style.color = '#666'; 
	}
}
function clearMapSearch(elem){
    if(defaultSearchValue == ""){
		defaultSearchValue = elem.value;
	}
    if(elem.value == defaultSearchValue) {
		elem.value = ""; ;
		elem.style.color = '#000'; 
	}
}

function showPanorama(elem)
{
	if(DetectFlashVer(requiredMajorVersion, requiredMinorVersion, requiredRevision)) {
		var panoLink = elem.href;
		elem.href = sLocalBasePath + 'admin/action.php?action=showPano&file='+panoLink+'&KeepThis=true&TB_iframe=true&height=400&width=600';
	} else {  
		elem.href = sLocalBasePath + 'noflash.php';
	}
	return false;
}
/*
function toggleHistory(elemId, img)
{
	var elemStyle = document.getElementById(elemId).style;
	if(elemStyle.display == 'block') {
		elemStyle.display = 'none';
		img.src = img.src.replace('dropdownHide','dropdownShow');
	}else {
		elemStyle.display = 'block';
		img.src = img.src.replace('dropdownShow','dropdownHide');
	}

}
*/
function getResolution()
{
	document.getElementById('resolution').innerHTML = "<strong>Res: </strong>"+map.getResolution();
}

function clearSearch(mode)
{
	removeMarkerLayers();
	document.getElementById('searchCount').innerHTML = "";
	document.getElementById('searchTab').style.width = '50px';
	document.getElementById('searchResults').innerHTML = advSearch;
	document.getElementById('panelHeader').innerHTML = '';
	
	if(mode != null && mode == 'all'){
		document.getElementById('locationSearch').value = '';
		if(document.getElementById('advLocationSearch') != null) {
			document.getElementById('advLocationSearch').value = '';
		}
	}
}
function rollOn(elem)
{
	var currentClass = elem.className;
	elem.className = 'rollover '+currentClass;
	//alert(elem.className);
}
function rollOut(elem)
{
	var currentClass = elem.className;
	elem.className = currentClass.replace('rollover','');
}

function showMarkers(locations)
{
	for(var i = 0; i < locations.length; i++)
	{
		testMarkerLayer[testMarkerLayer.length-1].addMarker(showMarker(locations[i][0],locations[i][1]));
	}
	map.addLayer(testMarkerLayer[testMarkerLayer.length-1]);
}

function showMarker(x,y)
{
	return new OpenLayers.Marker(new OpenLayers.LonLat(x,y),searchMarkerIcon.clone());
}

function zoomToLocation(x,y)
{
	var location = new OpenLayers.LonLat(x, y);
	map.panTo(location);
}
function panTo(location)
{
	map.panTo(location);
}
function zoomTo(level)
{
	map.zoomTo(level);
}

function removeMarkerLayers()
{
	var layerCount = searchMarkerLayer.length;	
	
	if(searchItem != null) {map.removeLayer(searchItem);searchItem = null;}
	for(var i = 0; i < searchMarkerLayer.length; i++) {
		if(searchMarkerLayer[i].visibility == true) {
			searchMarkerLayer[i].visibility = false;
			map.removeLayer(searchMarkerLayer[i]);
			//alert(searchMarkerLayer[i].name);
		}
	}
}

function resetTabs()
{
	document.getElementById('searchResults').style.zIndex = -1;
	document.getElementById('infoPanel').style.zIndex = -1;
	document.getElementById('detailsTab').className = 'inactive pointer';
	document.getElementById('searchTab').className = 'inactive pointer';
}

function toggleTabs(elemId,tabId)
{
	resetTabs();
	if(tabId == null){
		var tabElems = Array();
		tabElems[0] = document.getElementById('detailsTab');
		tabElems[1] = document.getElementById('searchTab');
		if(elemId == 'searchResults')
		{
			tabId = tabElems[1];
		} else {
			tabId = tabElems[0];
		}
	}
	if(elemId == 'searchResults'){
		document.getElementById('panelHeader').style.display = "block";
	} else {
		document.getElementById('panelHeader').style.display = "none";
	}
	tabId.className = 'active pointer';
	document.getElementById(elemId).style.zIndex = 1;
}

function createNewMarkerLayer(term)
{	
	var layerCount = searchMarkerLayer.length;
	if (searchMarkerLayer.length > 0) {
		removeMarkerLayers();
	}
	
	searchMarkerLayer[layerCount] = new OpenLayers.Layer.GeoRSS('Search', sLocalBasePath + 'service.php?action=search&term='+term, {icon: searchMarkerIcon});
	searchMarkerLayer[layerCount].markerClick = function(evt)
	{ 
		OpenLayers.Event.stop(evt);
	}
	map.addLayer(searchMarkerLayer[layerCount]);
}

function mapFeedbackAjax()
{
	var feedback = escape(document.getElementById('feedbackBox').value);
	var name = "";
	var contact = "";
	if(document.getElementById('name') != null) { name = escape(document.getElementById('name').value); }
	if(document.getElementById('contact') != null) { contact = escape(document.getElementById('contact').value); }
	if(feedback != "" && document.getElementById('feedbackBox').value != "Enter Feedback...")
	{
		var strURL = sLocalBasePath+'admin/action.php';
		jQuery.post(strURL,{
			action: "inlineFeedback",
			contact: contact,
			loc: location.href,
			name: name,
			feedback: feedback
			}, 
			function(xml) {
				document.getElementById('feedbackBox').style.border = '1px solid #A0A0A0';
				document.getElementById('feedbackBox').style.color = '#666';
				document.getElementById('feedbackBox').value = defaultFeedbackValue;
				document.getElementById('result').innerHTML = '<strong>'+xml+'</strong>';
			}
		);
	}
	else {
		document.getElementById('feedbackBox').style.border = '1px solid #f00';
		document.getElementById('result').innerHTML = "<strong>You must insert some feedback</strong>";
	}
}
String.prototype.trim = function() {
	return this.replace(/^\s+|\s+$/g,"");
}

function clearThemes()
{
	var tick = 0;
	for(var i = 1; i < locCategories.length; i++)
	{
		if(locCategories[i] != null && i != 5){
			locCategories[i][1] = false;
			
			var themeElems = getElementsByClassName(document.getElementById('themes'), 'li', 'active');
			for(var j=0; j < themeElems.length; j++ )
			{
				if(themeElems[j].id != 'theme_5') {
					themeElems[j].className = themeElems[j].className.replace('active','inactive'); 
				}
			}
		}
	}
	
	if(document.getElementById('btnYouarehere') != null && current.visibility == true) {
		map.removeLayer(current);
		current.visibility = false;
	}
	
	if(document.getElementById('btnTrees') != null && arb.visibility == true) {
		map.removeLayer(arb);
		arb.visibility = false;
	}
	addedOptions = "";
	refreshLayers();
}


function refreshLayers()
{
	var layername = gmlLayer.name;
	map.removeLayer(gmlLayer);
	cleanAddedOptions();
	var gmlURL = sLocalBasePath+"resources/gml/gml.php?themes="+addedOptions;
	map = addGMLlayer(layername, gmlURL, map);
}


var advSearch = "";
function userAdvLocationSearch()
{
	if(advSearch == "") { advSearch =  document.getElementById('searchResults').innerHTML; }
	searchTerm = document.getElementById('advLocationSearch').value.trim();
	if (searchTerm != "") {		
		clearSearch();
		document.getElementById('searchResults').innerHTML = '';
		document.getElementById('searchResults').className = document.getElementById('searchResults').className+' searchWaiting';
		createNewMarkerLayer(searchTerm);
		
		var buildingCode = '';
		if(document.getElementById('buildingCode') != null && document.getElementById('buildingCode').value.trim() != ""){
			buildingCode = document.getElementById('buildingCode').value.trim();
		}
		
		var queryObj = {
			action: "userLocationSearch",
			buildingCode: buildingCode,
			searchTerm: searchTerm
		}
		
		userAJAXSearch(queryObj);
		document.getElementById('panelHeader').innerHTML = "<div class='searchMeta pointer' onclick=\"clearSearch('all')\" >Clear Results for <em>" + searchTerm + "</em> &amp; return to Advanced Search</div>";	
				
	}
}

function userLocationSearch()
{
	if(advSearch == "") { advSearch =  document.getElementById('searchResults').innerHTML; }
	searchTerm = document.getElementById('locationSearch').value.trim();
	if (document.getElementById('locationSearch').value.trim() != "") {
		clearSearch();
		document.getElementById('searchResults').innerHTML = '';
		document.getElementById('searchResults').className = document.getElementById('searchResults').className+' searchWaiting';
		createNewMarkerLayer(document.getElementById('locationSearch').value);
		var queryObj = {
			action: "userLocationSearch",
			searchTerm: document.getElementById('locationSearch').value
		}
		
		userAJAXSearch(queryObj);
		document.getElementById('panelHeader').innerHTML = "<div class='searchMeta pointer' onclick=\"clearSearch('all')\" >Clear Results for <em>" + searchTerm + "</em> &amp; return to Advanced Search</div>";
	}
}

function userAJAXSearch(queryObj)
{   
	    //if(resultDiv == "") {resultDiv = "result";}
	    var strURL = sLocalBasePath+'admin/action.php';
		jQuery.post(strURL,queryObj, 
			function(xml) {
				document.getElementById('searchResults').innerHTML = xml;
				
				toggleTabs('searchResults');
				var tabElems = getElementsByClassName(document.getElementById('searchResults'), 'tr', '*');
				var resultCount = (tabElems.length)/2;
				if(tabElems.length % 2 != 0){resultCount = resultCount-.5;}
				
				document.getElementById('searchTab').style.width = '71px';
				document.getElementById('searchCount').innerHTML = '('+resultCount+')';			
				document.getElementById('searchResults').className = document.getElementById('searchResults').className.replace('searchWaiting','');
				
			}
		);

}
function getCenter()
{
	document.getElementById('infoPanel').innerHTML = map.getCenter();
}

function printMap(options)
{
	options += addedOptions.replace(',,',',');
	
	var url = sLocalBasePath+"?mode=print&options="+options+"&zoom="+map.getZoom()+"&"+map.getCenter().toString().replace(',','&');
	//document.getElementById('infoPanel').innerHTML = url;
	openPrintWindow(url);
}

function showItemDetail(umid){
	if (map.getZoom() < 3) { map.zoomTo(3); }
	
	if(searchItem != null) {map.removeLayer(searchItem);searchItem = null;}
	
	document.getElementById('infoPanel').innerHTML = '';
	
	searchItem = new OpenLayers.Layer.GeoRSS('Search', sLocalBasePath + 'service.php?action=lookup&term='+umid, {icon: highlightMarkerIcon});
	searchItem.markerClick = function(evt) { OpenLayers.Event.stop(evt); }
	map.addLayer(searchItem);
	
	var aItems = umid.split('-');
	
	loctype = aItems[0];
	
	//comment the next line out : formatDetailArea... and the webkit bug goes away.....
	
	formatDetailArea(umid, loctype,'infoPanel');
	
	//end webkit commenting
	toggleTabs('infoPanel');
}


function toggleYouAreHere(elem)
{
	if(elem.className != 'active') {
		current.visibility = true;
		map.addLayer(current);
		elem.className = 'active';
	}
	else {
		current.visibility = false;
		map.removeLayer(current);
		elem.className = '';
	}
}

function toggleGML(elem)
{
	var pane = document.getElementById('mapPane');
	pane.className = 'waiting';
	var id = elem.id.replace('theme_','');
	if(elem.className.contains('inactive')) {
		elem.className = elem.className.replace('inactive', 'active');
		addedOptions += ','+id+',';
		locCategories[id][1] = true;
	}
	else {
		elem.className = elem.className.replace('active', 'inactive');
		addedOptions = addedOptions.replace(','+id+',','');
		locCategories[id][1] = false;
	}
	cleanAddedOptions()
	refreshLayers();
	setTimeout('clearWaiting()', 1500)
}
function clearWaiting()
{
	var pane = document.getElementById('mapPane');
	pane.className = '';
}
function openPrintWindow(url)
{
	var popup = window.open(url,'Print','left=20,top=20,width=990,height=680,toolbar=0,resizable=0');
}
var screenDifference = 0;
var standardMapHeight = 460;
var standardInfoHeight = 300;
function wideScreen(imgElem)
{
	var height = (document.documentElement.clientHeight-70);
	screenDifference = height - standardMapHeight;
	
	if (document.getElementById('header_container') != null) {
		//map.zoomTo(3);
		//document.getElementById('map').scrollIntoView();
		
		document.getElementById('header_container').id = 'wide_container';
		document.getElementById('map').style.height = height+'px';
		var tabPanelElems = getElementsByClassName(document.getElementById('status'), 'div', 'tabBox');
		for(var i=0; i<tabPanelElems.length; i++ )
		{
			tabPanelElems[i].style.height = standardInfoHeight+screenDifference+'px';
		}
		
		imgElem.src=imgElem.src.replace('widen.png','widenOff.png');
		imgElem.alt = 'small screen';
		imgElem.title = 'small screen';
		
		location.href = '#contentTop';
	}else {
		document.getElementById('wide_container').id = 'header_container';
		imgElem.src=imgElem.src.replace('widenOff.png','widen.png');
		
		var tabPanelElems = getElementsByClassName(document.getElementById('status'), 'div', 'tabBox');
		for(var i=0; i < tabPanelElems.length; i++ )
		{
			//alert(tabPanelElems[i].style.height+' & '+tabPanelElems[i].className);
			tabPanelElems[i].style.height = ((tabPanelElems[i].style.height.replace('px','')/1)-screenDifference)+'px';
		}
		imgElem.alt = 'wide screen';
		document.getElementById('map').style.height = standardMapHeight+'px';
		imgElem.title = 'wide screen';
	}
}

/******* ADMIN STUFF ********/


function showNavPanel(panel)
{
	document.getElementById(panel).className = 'showNavPanel';
}

function hideNavPanel(panel)
{
	document.getElementById(panel).className = 'navPanel';
}
function openBrowseWindow(url)
{
	var popup = window.open(url,'Browse','left=20,top=20,width=400,height=250,toolbar=0,resizable=0');
}

function updateParent(imgURL,imgTag,imgLink)
{
	if(imgURL != ''){
		opener.document.getElementById(imgURL).value = imgLink;
	}
	if (imgTag != '') {
		opener.document.getElementById(imgTag).src = imgLink;
	}
}

function locationSearch(searchTerm)
{   
	if(searchTerm == null || searchTerm == "" || document.getElementById('locationSearch') != null)
	{
		searchTerm = document.getElementById('locationSearch').value;
	}
	
	var strURL = sLocalBasePath+'admin/action.php';
	jQuery.post(strURL,{
		action: "locationSearch",
		searchTerm: searchTerm
		}, 
		function(xml) {
			document.getElementById('searchResultsPanel').innerHTML = xml;
		}
	);
    
    return true;
}

/*****************STYLE INFO***********************
* @author nick
*/

function addMarker(feature, markerImg, markerShadowImg,width)
{
	feature.style = OpenLayers.Util.extend({}, OpenLayers.Feature.Vector.style['default']);
	if(width == "") {width = 20;}

	feature.style.externalGraphic = markerImg.src;
	feature.style.graphicZIndex = 10;
    feature.style.graphicWidth = width;
    feature.style.graphicOpacity = 1;
    //feature.style.graphicXOffset = 0;
    feature.style.graphicYOffset = width * -1;
	
	if (markerShadowImg != "") {
		feature.style.backgroundGraphic = markerShadowImg;
		feature.style.backgroundXOffset = 0;
		feature.style.backgroundYOffset = (width * -1) + 4;
		feature.style.backgroundGraphicZIndex = 11;
	}
	return feature;
}