$.fn.hoverClass = function(c) {
	return this.each(function(){
		$(this).hover( 
			function() { $(this).addClass(c);  },
			function() { $(this).removeClass(c); }
		);
	});
};

//-*-------------*--------*--------*--//
//*-Blinging 2D map function Library-*//
//---*---*-----------*----------*---*-//


//------------------------------------------------//
//------------Front End Map Usability-------------//
//------------------------------------------------//
	
function initMap(){
    var map = new GMap2(document.getElementById("gMap"));
 	map.addControl(new GLargeMapControl());
  	map.addControl(new GMapTypeControl());
  	map.addMapType(G_SATELLITE_3D_MAP);
	map.enableScrollWheelZoom(); 
	map.enableDoubleClickZoom();
  	var center = new GLatLng(29.897856765631335, -81.31152302026749);
  	var zLevel = 14;
    map.setCenter(center, zLevel);
    //map.setMapType(G_HYBRID_TYPE);
    map.setMapType(G_NORMAL_MAP);
    disableScroll(map);  //doesn't allow the page to scroll when using the zoom wheel
    
    var mt = map.getMapTypes();			//gets all the different map types (aerial,streets,hybrid)
    for (var i=0; i<mt.length; i++) { 	//limits the zoomLevel
    	mt[i].getMinimumResolution = function() {return 11;}
        //mt[i].getMaximumResolution = function() {return 18;}
    }
	// Add a move listener to restrict the bounds range
    //var allowedBounds = new GLatLngBounds(new GLatLng(29.65,-81.62), new GLatLng(30.25,-80.90));
    var allowedBounds = new GLatLngBounds(new GLatLng(29.65,-81.62), new GLatLng(30.25,-81.20));
    GEvent.addListener(map, "move", function() {
    	checkBounds(map, allowedBounds);
    });
    
    return map;
}

function getJPpoint(bid, URL){
	if(bid){
    	URL += "/xml/map.php?action=getCID&bid0="+bid;
		processXML(URL);
	}
}

function initJumpPageMap(xLoc, yLoc, bid){
	var center = new GLatLng(xLoc, yLoc);
	//alert("xLoc ="+xLoc+" yLoc ="+yLoc+" bid ="+bid)
	var map = new GMap2(document.getElementById("jumpmap"),
		{draggableCursor:"pointer"}
	); 
	map.setCenter(center, 14);
 	//map.addControl(new GSmallZoomControl());
	map.disableDragging();
  	//var center = new GLatLng(xLoc, yLoc);
  //	zLevel = 14;
	//map.setCenter(center, 14);
	var marker = new GMarker(center);
    GEvent.addListener(map, "click", function() {
    	location = "/community/map.php?bid="+bid;
    	//marker.openInfoWindowHtml(html);
    });
	GEvent.addListener(map,"click", function (overlay,point) {
		window.location = "/community/map.php?bid="+bid;
	}); 
    map.addOverlay(marker);
    return map;
}

function initfactSheetMap(xLoc, yLoc, bid, zoom){
	var center = new GLatLng(xLoc, yLoc);
	var map = new GMap2(document.getElementById("factSheetMap"));
	map.setCenter(center, zoom);
	map.disableDragging();
	var marker = new GMarker(center);
    map.addOverlay(marker);
    return map;
}

function disableScroll(map){
	GEvent.addDomListener(map.getContainer(), "DOMMouseScroll", wheelevent);
	map.getContainer().onmousewheel = wheelevent;
}

 function wheelevent(e){
    if(true){//document.getElementById("prevent").checked
		if (!e){
            e = window.event
        }
        if (e.preventDefault){
            e.preventDefault()
        }
		e.returnValue = false;
	}
}

function processXML(URL){
	clearMarkers();
    //var map = initMap();
	var request = GXmlHttp.create();
    request.open("GET", URL, true);
    request.onreadystatechange = function() {
        if (request.readyState == 4) {
        	var xmlDoc = GXml.parse(request.responseText);
			updateMarkers(xmlDoc, map);
        }
    }
    request.send(null);
}

function clearMarkers(){
	map.clearOverlays();
}

function updateMarkers(xmlDoc, map) {
	var bounds = new GLatLngBounds();
    // obtain the array of markers and loop through it
    var markers = xmlDoc.documentElement.getElementsByTagName("marker");
    //alert(markers.length);
    if(markers.length > 0){  //check to see if we even have a legitimate point
    	for (var i = 0; i < markers.length; i++) {
    	    // obtain the attribues of each marker
    	    var lat = parseFloat(markers[i].getAttribute("lat"));
    	    var lng = parseFloat(markers[i].getAttribute("lng"));
    	    var point = new GLatLng(lat,lng);
			bounds.extend(point);
    	    var html = markers[i].getAttribute("html");
    	    var label = markers[i].getAttribute("label");
    	    // create the marker
    	    var marker = createMarker(point,label,html);
    		map.addOverlay(marker);
    	    if(markers.length==1){
    	    	//alert("There's only one marker!");
    	    	//alert(html);
    			marker.openInfoWindowHtml(html);
			}
    	}
    	
    	centerAndZoomOnBounds(bounds, map);
	}
}

// A function to create the marker and set up the event window
function createMarker(point,name,html) {
    var marker = new GMarker(point);
    GEvent.addListener(marker, "click", function() {
    	marker.openInfoWindowHtml(html);
    });
    return marker;
}


function centerAndZoomOnBounds(bounds, map) {
   var center_lat = (bounds.getNorthEast().lat() + bounds.getSouthWest().lat()) / 2.0;
   var center_lng = (bounds.getNorthEast().lng() + bounds.getSouthWest().lng()) / 2.0;
   var center = new GLatLng(center_lat,center_lng)
   map.setCenter(center, (map.getBoundsZoomLevel(bounds)-1));
}


//------------------------------------------------//
//-------------Back End Map Usability-------------//
//------------------------------------------------//


function GETvars(){
	var Pquery = location.search.substring(1);
	var pairs = Pquery.split("&");
	
	// now you can loop through the array and split again!
	var tmpAry;
	for(var i=0; i<pairs.length; i++){
		tmpAry = pairs[i].split("=");
		name = tmpAry[0]; // the name
		bid = tmpAry[1]; // the value for said name
	}
	return bid;
}


function setPointXML(URL, map){
	var request = GXmlHttp.create();
	var givenmaptypes = map.getMapTypes();
	map.setMapType(givenmaptypes[2]);
    request.open("GET", URL, true);
    request.onreadystatechange = function() {if (request.readyState == 4) {
			var bounds = new GLatLngBounds();
        	var xmlDoc = GXml.parse(request.responseText);
          	// obtain the array of markers and loop through it
          	var markers = xmlDoc.documentElement.getElementsByTagName("marker");
         	for (var i = 0; i < markers.length; i++) {
            	// obtain the attribues of each marker
            	var lat = parseFloat(markers[i].getAttribute("lat"));
            	var lng = parseFloat(markers[i].getAttribute("lng"));
            	var point = new GLatLng(lat,lng);
				bounds.extend(point);
            	var html = markers[i].getAttribute("html");
            	var label = markers[i].getAttribute("label");
				var marker = new GMarker(point, {draggable: true});
				GEvent.addListener(marker, "dragstart", function() {
  					map.closeInfoWindow();
  				});

				GEvent.addListener(marker, "dragend", function() {
					acceptMarkerLoc(marker);
  				});
  				map.addOverlay(marker);
            	// create the marker
          	}
          	centerAndZoomOnBounds(bounds, map);
        }
    }
    request.send(null);
}


function setPoint(){
	var bid = GETvars();
	var map = initMap();
	if(bid == undefined){
		var center = map.getCenter();
		var marker = new GMarker(center, {draggable: true});
	
		GEvent.addListener(marker, "dragstart", function() {
  			map.closeInfoWindow();
  		});

		GEvent.addListener(marker, "dragend", function() {
			acceptMarkerLoc(marker, bid);
  		});
	
    	map.addOverlay(marker);
	}else{
		setPointXML("/xml/map.php?bid="+bid, map)
	}
}


function acceptMarkerLoc(marker, bid){
	var gLat = marker.getPoint().lat();
	var gLng = marker.getPoint().lng();
    var html = "<a href='/admin/jump/map.php?bid="+bid+"&lat="+gLat+"&lng="+gLng+"'>Click to accept Point.</a>";
	marker.openInfoWindowHtml(html);
}

// SHAUN CODE -MAM
//------------------------------------------------//
//-------------Experimental Mapping---------------//
//------------------------------------------------//

function checkBounds(map, allowedBounds) {
    // Perform the check and return if OK
    if (allowedBounds.contains(map.getCenter())) {
        return;
    }
    // It`s not OK, find the nearest allowed point and move there
    var C = map.getCenter();
    var X = C.lng();
    var Y = C.lat();

    var maxX = allowedBounds.getNorthEast().lng();
    var maxY = allowedBounds.getNorthEast().lat();
    var minX = allowedBounds.getSouthWest().lng();
    var minY = allowedBounds.getSouthWest().lat();

    if (X < minX) {X = minX;}
    if (X > maxX) {X = maxX;}
    if (Y < minY) {Y = minY;}
    if (Y > maxY) {Y = maxY;}
    //alert ("Restricting "+Y+" "+X);
    map.setCenter(new GLatLng(Y,X));
}


function queryAddress(address) {
    if (geocoder) {
        geocoder.getLatLng(
        address,
        function(point) {
            if (!point) {
              	alert(address + " not found");
            } else {
              	map.setCenter(point, 13);
              	var marker = new GMarker(point);
              	map.addOverlay(marker);
              	marker.openInfoWindowHtml(address);
            }
        }
    	)
    }
}
// END SHAUN CODE

function ToggleVacCat(){
	//$(this).next('#dropcats').slideToggle(1);
	if($(this).find("img").attr("src") == "/images/vacation/cat-arrow-right.gif"){
		$(this).next('.catlist').slideDown(300);
		$(this).find("img").attr("src", "/images/vacation/cat-arrow-down.gif");
	} else {
		$(this).siblings('.catlist').slideUp(300);
		$(this).find("img").attr("src", "/images/vacation/cat-arrow-right.gif");
	};
};

function ToggleHistCat(){
	$(this).siblings().slideToggle(300);
	if($(this).find("img").attr("src") == "/images/history/hist-arrow-right.png"){
		$(this).find("img").attr("src", "/images/history/hist-arrow-down.png");
	} else {
		$(this).find("img").attr("src", "/images/history/hist-arrow-right.png");
	};
};

function ToggleComCat(){
	//$(this).next('#dropcats').slideToggle(1);
	if($(this).find("img").attr("src") == "/images/community/cat-arrow-right.gif"){
		$(this).next('.catlist').slideDown(300);
		$(this).find("img").attr("src", "/images/community/cat-arrow-down.gif");
	} else {
		$(this).siblings('.catlist').slideUp(300);
		$(this).find("img").attr("src", "/images/community/cat-arrow-right.gif");
	};
};

// Slide down and populates events on first click, empty and retract on second
function ToggleEvent(){
	var link;
	link = 'detail.php?id=' + $("td", this).attr("id").substring(1);
	var match = $("td", this).attr("class").match("eventclicked");
	if(match == "eventclicked"){
		var bodWidth = $('body').width();
		bodWidth -= 415;
		$('.eventbox').width(bodWidth);
		$("img", this).attr("src", "/images/community/com-arrow.gif");	
		$(".detail-table", this).remove();
		$("td", this).removeClass("eventclicked");
	} else {
		$("img", this).attr("src", "/images/community/com-arrow-down.gif");
		//$("img", this).src = '/images/community/com-arrow-down.png';
		// $("img", this).setAttribute('src','/images/community/com-arrow-down.png');
		var bodWidth = $('body').width();
		bodWidth -= 415;
		$('.eventbox').width(bodWidth);
		var $elToAppendTo = $('.event-desc', this);
		$.get(link,
			function(data){
				$elToAppendTo.after(data);
			}
		);
		$("td", this).addClass("eventclicked");
	};
};

// Sort list by category, we need to find out how to re-shade each row
function modifyList(){
	var cat = $(this).attr("value");
	$("#event-table td").each(function(){
		if($(this).find("img").attr("src") == "/images/community/com-arrow-down.png"){
			$(this).removeClass("eventclicked");
			$(this).find(".eventcontent").empty();
		};
		if($(this).attr("class") != cat){
			$(this).parent().hide();
		};
		if($(this).attr("class") == cat){
			$(this).parent().show();
		};
		if("all" == cat){
			$(this).parent().show();
		};
	});
};

function getQueryVariable(variable) {
  var query = window.location.search.substring(1);
  var vars = query.split("&");
  for (var i=0;i<vars.length;i++) {
    var pair = vars[i].split("=");
    if (pair[0] == variable) {
      return pair[1];
    }
  }
}

function ReviewForm(extra){
	var link;
	link = '/rate/index.php' + extra;
	$.get(link,
		function(data){
			$("#reviewform").html(data);
		}
	);
}

$(document).ready(function() {
	//	Show/ hide extra restaurant categories
	//	2009-01-06, -BL
    $(".toggle_text").click(function () {
      $(".param_hid").toggle(10);
    });
    
	// Business page image swapping
	$("a.thumb").bind("click" , function(){
		var oldImage = $("img.bigimage").attr("src").replace(/full/, "thumb");
		var newImage = $(this).find("img").attr("src").replace(/thumb/, "full");
		var newLink = $(this).find("img").attr("src").replace(/thumb/, "original");
		$("img.bigimage").attr("src", newImage);
		$("a.bilink").attr("href", newLink);
	});

	// Navigation menu set up
	$("#nav-one li a").hover(
		function(){ $("ul", this).fadeIn("fast"); }, 
		function() { } 
	);
 	if (document.all) {
		$("#nav-one li").hoverClass ("sfHover");
	}
	
	// Lets put some corners on some boxes!  Should probably figure out a better way to select these objects, maybe one global corner class?
	$(".box, .rssbox, .jumpbox, .wbox, .bizbox, .corner").corner("10px");
	
	//$("#buslist .docrow1:first-child, #buslist .docrow2:first-child").corner("tl bl 20px");
	//$("#buslist .docrow1:last-child, #buslist .docrow2:last-child").corner("tr br 20px");
	//$(".docrow1").corner("20px");
	// More Corners, weather page
	$("div .weatherboxtop").corner("10px tr tl");
	$("div .weatherboxbtm, #left, #middle, #right").corner("10px bl br");
	
    $(".hbox").each(function() {
		$(this).corner("10px bl br");
	});
    
	$(".intmap").hover(function(){
		$(".intimg").attr('src', '/images/int-map-highlight.png');
	},function(){
		$('.intimg').attr('src', '/images/int-map.png');
	});
	
	// Categorization set up for Vacation section
	$(".mastercat").siblings().hide();
	$(".mastercat").click(ToggleVacCat);
	$(".hcat").siblings().hide();
	$(".hcat").click(ToggleHistCat);
	$(".comcat").siblings().hide();
	$(".comcat").click(ToggleComCat);
	$('#dropcats').click(function () {
      $("#rest-cats").slideToggle();
    });
	
	var helper;
	helper = location.href.search(/attraction/);
	if(helper > 0){
		$('.catnav .mastercat:eq(1)').click();
	}
	helper = location.href.search(/accommodation/);
	if(helper > 0){
		$('.catnav .mastercat:eq(0)').click();
	}
	helper = location.href.search(/restaurant/);
	if(helper > 0){
		$('.catnav .mastercat:eq(3)').next('.catlist').slideDown(300);
		$('.catnav .mastercat:eq(3)').find("img").attr("src", "/images/vacation/cat-arrow-down.gif");
		$('.mastercat #dropcats').click();
	}
	helper = location.href.search(/tour-services/);
	if(helper > 0){
		$('.catnav .mastercat:eq(2)').click();
	}
	helper = location.href.search(/recreation/);
	if(helper > 0){
		$('.catnav .mastercat:eq(4)').click();
	}
	helper = location.href.search(/realestate/);
	if(helper > 0){
		$('.catnav .mastercat:eq(5)').click();
	}
	helper = location.href.search(/weddings/);
	if(helper > 0){
		$('.catnav .mastercat:eq(6)').click();
	}
	// Calendar of EVent set up
	$("#event-table .eventlink").bind("click", ToggleEvent);
	
	//$(".catlist").change(modifyList);
	$("table .calendar tbody tr td:has(a)").css("background-color", "#9fd2a3");
	
	var eid;
	eid = getQueryVariable("eid");
	if(eid > 0){
		$(".eventlink").click();
	}
	
    //	Remove default text for search box on click: (-BL, 2009-02-19)
	$('#searchtext').click(function () {
		var curVal = $('#searchtext').val();
	  if ($('#searchtext').val() == 'Search this site...') {
        $("#searchtext").val('');
		$('.searchbox').css("color", "black");
      } else {
		//$("#searchtext").val(curVal);
	  }
    });
});