/* 
 * jQuery Dimensions v1.1.2
 *
 * Copyright (c) 2007 Paul Bakaus (paul.bakaus@googlemail.com) and Brandon Aaron (brandon.aaron@gmail.com || http://brandonaaron.net)
 * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses
 */
(function($){var height=$.fn.height,width=$.fn.width;$.fn.extend({height:function(){if(!this[0])error();if(this[0]==window)if($.browser.opera||($.browser.safari&&parseInt($.browser.version)>520))return self.innerHeight-(($(document).height()>self.innerHeight)?getScrollbarWidth():0);else if($.browser.safari)return self.innerHeight;else
return $.boxModel&&document.documentElement.clientHeight||document.body.clientHeight;if(this[0]==document)return Math.max(($.boxModel&&document.documentElement.scrollHeight||document.body.scrollHeight),document.body.offsetHeight);return height.apply(this,arguments);},width:function(){if(!this[0])error();if(this[0]==window)if($.browser.opera||($.browser.safari&&parseInt($.browser.version)>520))return self.innerWidth-(($(document).width()>self.innerWidth)?getScrollbarWidth():0);else if($.browser.safari)return self.innerWidth;else
return $.boxModel&&document.documentElement.clientWidth||document.body.clientWidth;if(this[0]==document)if($.browser.mozilla){var scrollLeft=self.pageXOffset;self.scrollTo(99999999,self.pageYOffset);var scrollWidth=self.pageXOffset;self.scrollTo(scrollLeft,self.pageYOffset);return document.body.offsetWidth+scrollWidth;}else
return Math.max((($.boxModel&&!$.browser.safari)&&document.documentElement.scrollWidth||document.body.scrollWidth),document.body.offsetWidth);return width.apply(this,arguments);},innerHeight:function(){if(!this[0])error();return this[0]==window||this[0]==document?this.height():this.is(':visible')?this[0].offsetHeight-num(this,'borderTopWidth')-num(this,'borderBottomWidth'):this.height()+num(this,'paddingTop')+num(this,'paddingBottom');},innerWidth:function(){if(!this[0])error();return this[0]==window||this[0]==document?this.width():this.is(':visible')?this[0].offsetWidth-num(this,'borderLeftWidth')-num(this,'borderRightWidth'):this.width()+num(this,'paddingLeft')+num(this,'paddingRight');},outerHeight:function(options){if(!this[0])error();options=$.extend({margin:false},options||{});return this[0]==window||this[0]==document?this.height():this.is(':visible')?this[0].offsetHeight+(options.margin?(num(this,'marginTop')+num(this,'marginBottom')):0):this.height()+num(this,'borderTopWidth')+num(this,'borderBottomWidth')+num(this,'paddingTop')+num(this,'paddingBottom')+(options.margin?(num(this,'marginTop')+num(this,'marginBottom')):0);},outerWidth:function(options){if(!this[0])error();options=$.extend({margin:false},options||{});return this[0]==window||this[0]==document?this.width():this.is(':visible')?this[0].offsetWidth+(options.margin?(num(this,'marginLeft')+num(this,'marginRight')):0):this.width()+num(this,'borderLeftWidth')+num(this,'borderRightWidth')+num(this,'paddingLeft')+num(this,'paddingRight')+(options.margin?(num(this,'marginLeft')+num(this,'marginRight')):0);},scrollLeft:function(val){if(!this[0])error();if(val!=undefined)return this.each(function(){if(this==window||this==document)window.scrollTo(val,$(window).scrollTop());else
this.scrollLeft=val;});if(this[0]==window||this[0]==document)return self.pageXOffset||$.boxModel&&document.documentElement.scrollLeft||document.body.scrollLeft;return this[0].scrollLeft;},scrollTop:function(val){if(!this[0])error();if(val!=undefined)return this.each(function(){if(this==window||this==document)window.scrollTo($(window).scrollLeft(),val);else
this.scrollTop=val;});if(this[0]==window||this[0]==document)return self.pageYOffset||$.boxModel&&document.documentElement.scrollTop||document.body.scrollTop;return this[0].scrollTop;},position:function(returnObject){return this.offset({margin:false,scroll:false,relativeTo:this.offsetParent()},returnObject);},offset:function(options,returnObject){if(!this[0])error();var x=0,y=0,sl=0,st=0,elem=this[0],parent=this[0],op,parPos,elemPos=$.css(elem,'position'),mo=$.browser.mozilla,ie=$.browser.msie,oa=$.browser.opera,sf=$.browser.safari,sf3=$.browser.safari&&parseInt($.browser.version)>520,absparent=false,relparent=false,options=$.extend({margin:true,border:false,padding:false,scroll:true,lite:false,relativeTo:document.body},options||{});if(options.lite)return this.offsetLite(options,returnObject);if(options.relativeTo.jquery)options.relativeTo=options.relativeTo[0];if(elem.tagName=='BODY'){x=elem.offsetLeft;y=elem.offsetTop;if(mo){x+=num(elem,'marginLeft')+(num(elem,'borderLeftWidth')*2);y+=num(elem,'marginTop')+(num(elem,'borderTopWidth')*2);}else
if(oa){x+=num(elem,'marginLeft');y+=num(elem,'marginTop');}else
if((ie&&jQuery.boxModel)){x+=num(elem,'borderLeftWidth');y+=num(elem,'borderTopWidth');}else
if(sf3){x+=num(elem,'marginLeft')+num(elem,'borderLeftWidth');y+=num(elem,'marginTop')+num(elem,'borderTopWidth');}}else{do{parPos=$.css(parent,'position');x+=parent.offsetLeft;y+=parent.offsetTop;if((mo&&!parent.tagName.match(/^t[d|h]$/i))||ie||sf3){x+=num(parent,'borderLeftWidth');y+=num(parent,'borderTopWidth');if(mo&&parPos=='absolute')absparent=true;if(ie&&parPos=='relative')relparent=true;}op=parent.offsetParent||document.body;if(options.scroll||mo){do{if(options.scroll){sl+=parent.scrollLeft;st+=parent.scrollTop;}if(oa&&($.css(parent,'display')||'').match(/table-row|inline/)){sl=sl-((parent.scrollLeft==parent.offsetLeft)?parent.scrollLeft:0);st=st-((parent.scrollTop==parent.offsetTop)?parent.scrollTop:0);}if(mo&&parent!=elem&&$.css(parent,'overflow')!='visible'){x+=num(parent,'borderLeftWidth');y+=num(parent,'borderTopWidth');}parent=parent.parentNode;}while(parent!=op);}parent=op;if(parent==options.relativeTo&&!(parent.tagName=='BODY'||parent.tagName=='HTML')){if(mo&&parent!=elem&&$.css(parent,'overflow')!='visible'){x+=num(parent,'borderLeftWidth');y+=num(parent,'borderTopWidth');}if(((sf&&!sf3)||oa)&&parPos!='static'){x-=num(op,'borderLeftWidth');y-=num(op,'borderTopWidth');}break;}if(parent.tagName=='BODY'||parent.tagName=='HTML'){if(((sf&&!sf3)||(ie&&$.boxModel))&&elemPos!='absolute'&&elemPos!='fixed'){x+=num(parent,'marginLeft');y+=num(parent,'marginTop');}if(sf3||(mo&&!absparent&&elemPos!='fixed')||(ie&&elemPos=='static'&&!relparent)){x+=num(parent,'borderLeftWidth');y+=num(parent,'borderTopWidth');}break;}}while(parent);}var returnValue=handleOffsetReturn(elem,options,x,y,sl,st);if(returnObject){$.extend(returnObject,returnValue);return this;}else{return returnValue;}},offsetLite:function(options,returnObject){if(!this[0])error();var x=0,y=0,sl=0,st=0,parent=this[0],offsetParent,options=$.extend({margin:true,border:false,padding:false,scroll:true,relativeTo:document.body},options||{});if(options.relativeTo.jquery)options.relativeTo=options.relativeTo[0];do{x+=parent.offsetLeft;y+=parent.offsetTop;offsetParent=parent.offsetParent||document.body;if(options.scroll){do{sl+=parent.scrollLeft;st+=parent.scrollTop;parent=parent.parentNode;}while(parent!=offsetParent);}parent=offsetParent;}while(parent&&parent.tagName!='BODY'&&parent.tagName!='HTML'&&parent!=options.relativeTo);var returnValue=handleOffsetReturn(this[0],options,x,y,sl,st);if(returnObject){$.extend(returnObject,returnValue);return this;}else{return returnValue;}},offsetParent:function(){if(!this[0])error();var offsetParent=this[0].offsetParent;while(offsetParent&&(offsetParent.tagName!='BODY'&&$.css(offsetParent,'position')=='static'))offsetParent=offsetParent.offsetParent;return $(offsetParent);}});var error=function(){throw"Dimensions: jQuery collection is empty";};var num=function(el,prop){return parseInt($.css(el.jquery?el[0]:el,prop))||0;};var handleOffsetReturn=function(elem,options,x,y,sl,st){if(!options.margin){x-=num(elem,'marginLeft');y-=num(elem,'marginTop');}if(options.border&&(($.browser.safari&&parseInt($.browser.version)<520)||$.browser.opera)){x+=num(elem,'borderLeftWidth');y+=num(elem,'borderTopWidth');}else if(!options.border&&!(($.browser.safari&&parseInt($.browser.version)<520)||$.browser.opera)){x-=num(elem,'borderLeftWidth');y-=num(elem,'borderTopWidth');}if(options.padding){x+=num(elem,'paddingLeft');y+=num(elem,'paddingTop');}if(options.scroll&&(!$.browser.opera||elem.offsetLeft!=elem.scrollLeft&&elem.offsetTop!=elem.scrollLeft)){sl-=elem.scrollLeft;st-=elem.scrollTop;}return options.scroll?{top:y-st,left:x-sl,scrollTop:st,scrollLeft:sl}:{top:y,left:x};};var scrollbarWidth=0;var getScrollbarWidth=function(){if(!scrollbarWidth){var testEl=$('<div>').css({width:100,height:100,overflow:'auto',position:'absolute',top:-1000,left:-1000}).appendTo('body');scrollbarWidth=100-testEl.append('<div>').find('div').css({width:'100%',height:200}).width();testEl.remove();}return scrollbarWidth;};})(jQuery);


$(document).ready(function() {
	
	resizeMap("initial");
	
	$(window).bind("resize", function() {
		resizeMap('');
		return false;
	}).trigger("resize");
	
	getData();
	
});

function getData() {
	var root = deriveRoot();
	
	//get data and add markers
	$.getJSON(root+"map/lettings/",
        function(data){
			//make map
			var map = makeMap(parseFloat(data.initialLat), parseFloat(data.initialLng+0), parseFloat(data.zoom), data);
			
			if(data.lettings != undefined)
			{
				//creat custom icon, of course
				var icon = new GIcon();
				icon.image = root+"media/img/gmap-icon.png";
				icon.shadow = root+"media/img/gmap-icon-shadow.png";
				icon.size = new GSize(32, 32);
				icon.shadowSize = new GSize(59, 32);
				icon.iconAnchor = new GPoint(10, 30);
				icon.infoWindowAnchor = new GPoint(14, 0);
				
				$.each(data.lettings, function(i,item){
					var point = new GLatLng(parseFloat(item.lat), parseFloat(item.lng));
					map.addOverlay(createMarker(point, item, icon));
				});
			}
			
			//draw bounderies if avaliable
			if(data.minLat != undefined) {
				//draw me a polygon
				
				var polygon = new GPolygon([
					new GLatLng(parseFloat(data.maxLat), parseFloat(data.initialLng)), //Left
					new GLatLng(parseFloat(data.initialLat), parseFloat(data.maxLng)), //Top
					new GLatLng(parseFloat(data.minLat), parseFloat(data.initialLng)), //Right
					new GLatLng(parseFloat(data.initialLat), parseFloat(data.minLng)), //Bottom
					new GLatLng(parseFloat(data.maxLat), parseFloat(data.initialLng)) //Left close (won't work without)
				], "#ff7e00", 5, 1, "#ff7e00", 0.2);
				
				map.addOverlay(polygon);
			}
        });
}

//function to render the marker
function createMarker(point, item, icon) {
	var root = deriveRoot();
	var marker = new GMarker(point, icon);
	
	var data = '<a href="'+item.url+'" title="View '+item.location+'"><img src="'+root+'media/'+item.img_url+'" title="View '+item.location+'" alt="View '+item.location+'" /></a>';
	data += '<h5>'+item.guide_price+'</h5>';
	data += '<p class="googleText">'+item.location+'</p>';
	GEvent.addListener(marker, "click", function() {
		marker.openInfoWindowHtml(data);
	});
	
	return marker;
}

/*----------------------------------
	makeMap - does exactly what it says on the tin
	makes a map and then places a marker where the
	markup suggests
----------------------------------*/
function makeMap(lat, lng, zoom, item) {
	
	$("#largeMap").googleMap(lat, lng, zoom);

	//add markers using lat, lng
	var lat = parseFloat(lat);
	var lng = parseFloat(lng);
	
	var point = new GLatLng(lat, lng);
	var marker = new GMarker(point);
	
	var data = '<h5>'+item.name+'</h5>';
	GEvent.addListener(marker, "click", function() {
		marker.openInfoWindowHtml(data);
	});
	
	$.googleMap.maps["largeMap"].addOverlay(marker);
	
	//additional map configuration;
	var typeControl = new GMapTypeControl();
	var zoomControl = new GLargeMapControl();
	$.googleMap.maps["largeMap"].addControl(typeControl);
	$.googleMap.maps["largeMap"].addControl(zoomControl);
	$.googleMap.maps["largeMap"].setMapType(G_NORMAL_MAP);
	
	return $.googleMap.maps["largeMap"];
}

function resizeMap(ini) {
	//resize stuff to utilise big monitors
	//get window width
	var winW = $(window).width();
	var winH = $(window).height();
	
	winW -= 20;
	
	//make sure its not too big
	if(winW > 1350) {
		winW = 1350;
	}
	if(winH > 800) {
		winH = 800;
	}
	
	if(ini == 'initial') {
		if(winW > 1000) {
			//big enough for resizing
			resizeW(winW);
		}
		if(winH > 600) {
			resizeH(winH);
		}
	} else {
		//big enough for resizing
		resizeH(winH);
		resizeW(winW);
	}
}

function resizeH(winH) {
	var newH = winH-200;

	if(newH < 430) {
		newH = 430;
	}
	
	$("div#largeMap").height(newH);
}

function resizeW(winW) {
	$("div#wrap").width(winW);
	$("div#frame").width(winW);
	$("div.wide").width(winW);
	
	var contentW = winW - 331; //minus sidebar width + margin
	
	$("div.main").width(contentW);
	$("div#extra ul").width(contentW);
	$("div#foot div.cities").width(contentW-20);
	
	$("div#largeMap span#update").css({left: (contentW/2)-50});
	$("div#largeMap img#loader").css({left: (contentW/2)-120});
}

function deriveRoot()
{
  var root = window.location.protocol+'//'+window.location.hostname+'/';
  
  if ( ( pos = window.location.pathname.search('public_html') ) != -1 )
  {
    root += window.location.pathname.substring(1,pos+12);
  }
  
  if ( window.location.pathname.search('demo') != -1 )
  {
    root += 'demo/';
  }
  
  return root;
}
