// JScript File
/*
 * Google MAP jQuery interface
 * Copyright (c) 2009  Oliver Astrologo
 * Dual licensed under MIT and GPL.
 * @author  Oliver Astrologo
 * @version 1.1
 */

var side_bar_html;
var map;
var gmarkers = [];
var htmls = [];
var geocoder = null;
var xmlfile = "/spotlocator-helper.php";
var selmarker = false;
var defaultLat = 41.895465;
var defaultLng = 12.482324;
var defaultMapZoom = 5;

var yellowIcon=new GIcon();yellowIcon.image="/images/spot-locator/marker_giallo.png";yellowIcon.iconSize=new GSize(14,16);yellowIcon.iconAnchor=new GPoint(6,15);yellowIcon.infoWindowAnchor=new GPoint(22,0);var greenIcon=new GIcon();greenIcon.image="/images/spot-locator/marker_verde.png";greenIcon.iconSize=new GSize(14,16);greenIcon.iconAnchor=new GPoint(6,15);greenIcon.infoWindowAnchor=new GPoint(20,0);var redIcon=new GIcon();redIcon.image="/images/spot-locator/marker_rosso.png";redIcon.iconSize=new GSize(14,16);redIcon.iconAnchor=new GPoint(6,15);redIcon.infoWindowAnchor=new GPoint(22,0);var greyIcon=new GIcon();greyIcon.image="/images/spot-locator/marker_grigio.png";greyIcon.iconSize=new GSize(14,16);greyIcon.iconAnchor=new GPoint(6,15);greyIcon.infoWindowAnchor=new GPoint(22,0);var shopIcon=new GIcon();shopIcon.image="/images/spot-locator/marker_shop.png";shopIcon.iconSize=new GSize(26,16);shopIcon.iconAnchor=new GPoint(4,15);shopIcon.infoWindowAnchor=new GPoint(22,0);var schoolIcon=new GIcon();schoolIcon.image="/images/spot-locator/marker_school.png";schoolIcon.iconSize=new GSize(26,16);schoolIcon.iconAnchor=new GPoint(4,15);schoolIcon.infoWindowAnchor=new GPoint(22,0);var otherIcon=new GIcon();otherIcon.image="/images/spot-locator/marker_altro.png";otherIcon.iconSize=new GSize(26,16);otherIcon.iconAnchor=new GPoint(4,15);otherIcon.infoWindowAnchor=new GPoint(22,0);var addIcon=new GIcon();addIcon.image="/images/spot-locator/marker_add.png";addIcon.iconSize=new GSize(16,16);addIcon.iconAnchor=new GPoint(11,11);addIcon.infoWindowAnchor=new GPoint(22,0);var icons=[];icons[0]=greenIcon;icons[1]=yellowIcon;icons[2]=redIcon;icons[3]=greyIcon;icons[4]=shopIcon;icons[5]=schoolIcon;icons[6]=otherIcon;icons[7]=addIcon;jQuery.ajaxSetup({global:true,type:"GET",dataType:'json',cache:false,beforeSend:showRequest,error:showError});function showRequest(XMLHttpRequest){jQuery("#loading-indicator").show();}
function showError(XMLHttpRequest,textStatus,errorThrown){alert('Spiacenti ma al momento non è possibile visualizzare i risultati, riprova fra poco.')}
function createMarker(point,icontype,index){var marker=new GMarker(point,icons[icontype]);if(jQuery('#map_canvas_add').length==0){GEvent.addListener(marker,"click",function(){marker.openInfoWindowHtml('<div class="baloon">'+htmls[index]+'</div>');});}
gmarkers[index]=marker;return marker;}
function addSideBarItem(html,index){side_bar_html+='<li>';side_bar_html+=html;side_bar_html+='<a href="javascript:void(0);" onClick="myclick('+index+');" class="map-show">';side_bar_html+='Mostra sulla mappa &raquo;';side_bar_html+='</a>';side_bar_html+='</li>';}
function myclick(i){gmarkers[i].openInfoWindowHtml('<div class="baloon">'+htmls[i]+'</div>',{maxWidth: 220});}
function initSearch(key){jQuery("#statusag:visible,#results:visible").slideUp("fast")
jQuery("#statusag p,#results").html('');side_bar_html='';map.getInfoWindow().hide();map.clearOverlays();gmarkers=[];jQuery.ajax({url:xmlfile,data:key,success:function(data){searchResponse(data,key);}});}
function searchResponse(data,key){jQuery("#loading-indicator").hide();var bounds=new GLatLngBounds();var counter=0;jQuery.each(data.markers,function(i,item){var lat=parseFloat(item.lat);var lng=parseFloat(item.lng);var point=new GLatLng(lat,lng);var html=item.html;var categoria=item.categoria;var sea_idx=item.sea_idx;var icontype=0;if(categoria==1){if(sea_idx=='green'){icontype==0;}else if(sea_idx=='yellow'){icontype=1;}else if(sea_idx=='red'){icontype=2;}else{icontype=3;}}else if(categoria==2){icontype=4;}else if(categoria==3){icontype=5;}else{icontype=6;}
htmls[i]='<div class="baloon">'+html+'</div>';var marker=createMarker(point,icontype,i);map.addOverlay(marker);if(key){addSideBarItem(html,i);}
bounds.extend(point);counter++;});if(key){userResponse(counter);side_bar_html='<ul class="thumb-list">'+side_bar_html+'</ul>';if(counter>0){jQuery("#results").html(side_bar_html).slideDown("fast");}}
if(counter==0){map.setCenter(new GLatLng(defaultLat,defaultLng),defaultMapZoom);}else{map.setZoom(map.getBoundsZoomLevel(bounds)-1);map.panTo(bounds.getCenter());}}
function userResponse(counter){jQuery("#statusag").slideDown("fast");if(counter>30){jQuery("#statusag p").html('La ricerca ha prodotto troppi risultati, verranno visualizzati solo i primi 30.<br/>Prova a utilizzare un criterio di ricerca diverso.');}else if(counter==1){jQuery("#statusag p").html(counter+' Spot trovato');}else if(counter==0){jQuery("#statusag p").html('Nessuno spot trovato con questi criteri di ricerca, <a href="/spotlocator/add/">aggiungi uno spot in questa città.</a>');}else{jQuery("#statusag p").html(counter+' Spots trovati');}}
function marker_clicked(marker,point){if(map.getZoom()>12){if(!selmarker){selmarker=new GMarker(point,{icon:icons[7],draggable:true});map.addOverlay(selmarker);}
selmarker.setPoint(point);var html='<br/><strong>Puoi trascinare la bandierina e spostarla.</strong>';geoCoderResult(selmarker,html);jQuery("#contactform-coors").val(point);GEvent.addListener(selmarker,"dragstart",function(){selmarker.closeInfoWindow();});GEvent.addListener(selmarker,"dragend",function(){jQuery("#contactform-coors").val(selmarker.getPoint());var html='';geoCoderResult(selmarker,html);});}else{alert("Il livello di dettaglio non è sufficiente, usa la rotellina del tuo mouse per aumentare lo zoom e clicca nuovamente.");}}
function geoCoderResult(marker,html){geocoder.getLocations(marker.getPoint(),function(addresses){if(addresses.Status.code!=200){alert("Il punto che ci stai indicando non sembra valido, prova a spostarti e cliccare di nuovo. "+latlng.toUrlValue());}
else{address=addresses.Placemark[0];var geoAddress=address.address;try
{var regionCode=address.AddressDetails.Country.AdministrativeArea.AdministrativeAreaName;jQuery("#contactform-regione").selectOptions(regionCode);}
catch(err)
{}
try
{var countryCode=address.AddressDetails.Country.CountryNameCode;jQuery("#contactform-paese").selectOptions(countryCode);}
catch(err)
{}
try
{var comuneCode=address.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.LocalityName;jQuery("#contactform-citta").val(comuneCode);}
catch(err)
{}
try
{var addressCode=address.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.Thoroughfare.ThoroughfareName;jQuery("#contactform-indirizzo").val(addressCode);}
catch(err)
{}
try
{var capCode=address.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.PostalCode.PostalCodeNumber;jQuery("#contactform-cap").val(capCode);}
catch(err)
{}
marker.openInfoWindowHtml('<div class="baloon"><h4>Il tuo spot</h4>'+geoAddress+html+'</div>');}});}
function isDefined(variable)
{return eval('(typeof('+variable+') != "undefined");');}
function initializeMap(){if(jQuery('#map_canvas').length>0){if(GBrowserIsCompatible()){map=new GMap2(document.getElementById("map_canvas"));map.enableDoubleClickZoom();map.setMapType(G_SATELLITE_MAP);map.setUIToDefault();map.setCenter(new GLatLng(defaultLat,defaultLng),defaultMapZoom);map.disableScrollWheelZoom();initSearch();}else{alert("Sorry, the Google Maps API is not compatible with this browser");}};if(jQuery('#map_canvas_add').length>0){if(GBrowserIsCompatible()){geocoder=new GClientGeocoder();map=new GMap2(document.getElementById("map_canvas_add"));map.enableDoubleClickZoom();map.setUIToDefault();var curCorValue=(jQuery("#contactform-coors").val()).split(',');var lang=parseFloat(curCorValue[0]);var long=parseFloat(curCorValue[1]);if(lang&&long){map.setCenter(new GLatLng(lang,long),18);marker_clicked(null,new GLatLng(lang,long));}else{map.setCenter(new GLatLng(defaultLat,defaultLng),defaultMapZoom);}
GEvent.addListener(map,'click',marker_clicked);}else{alert("Sorry, the Google Maps API is not compatible with this browser");}}}
jQuery(function(){jQuery('#search-container').tabs();initializeMap();jQuery("#loading-indicator,#statusag,#results").hide();jQuery(".spotlocator-form").submit(function(){var key=jQuery(this).serialize();var form=jQuery(".stdinput",this).val();if(form){initSearch(key);}
return false;});jQuery("#provinciaform").change(function(){var key=jQuery("#per-provincia form.spotlocator-form").serialize();var form=jQuery("#provinciaform").val();if(form){initSearch(key);}
return false;});jQuery("#search-close").click(function(){jQuery("#results:visible,#statusag:visible").slideUp("fast");});});;if(window.jQuery)(function($){if($.browser.msie)try{document.execCommand("BackgroundImageCache",false,true)}catch(e){};$.fn.rating=function(options){if(this.length==0)return this;if(typeof arguments[0]=='string'){if(this.length>1){var args=arguments;return this.each(function(){$.fn.rating.apply($(this),args);});};$.fn.rating[arguments[0]].apply(this,$.makeArray(arguments).slice(1)||[]);return this;};var options=$.extend({},$.fn.rating.options,options||{});$.fn.rating.calls++;this.not('.star-rating-applied').addClass('star-rating-applied').each(function(){var control,input=$(this);var eid=(this.name||'unnamed-rating').replace(/\[|\]/g,'_').replace(/^\_+|\_+$/g,'');var context=$(this.form||document.body);var raters=context.data('rating');if(!raters||raters.call!=$.fn.rating.calls)raters={count:0,call:$.fn.rating.calls};var rater=raters[eid];if(rater)control=rater.data('rating');if(rater&&control)
control.count++;else{control=$.extend({},options||{},($.metadata?input.metadata():($.meta?input.data():null))||{},{count:0,stars:[],inputs:[]});control.serial=raters.count++;rater=$('<span class="star-rating-control"/>');input.before(rater);rater.addClass('rating-to-be-drawn');if(input.attr('disabled'))control.readOnly=true;rater.append(control.cancel=$('<div class="rating-cancel"><a title="'+control.cancel+'">'+control.cancelValue+'</a></div>').mouseover(function(){$(this).rating('drain');$(this).addClass('star-rating-hover');}).mouseout(function(){$(this).rating('draw');$(this).removeClass('star-rating-hover');}).click(function(){$(this).rating('select');}).data('rating',control));};var star=$('<div class="star-rating rater-'+control.serial+'"><a title="'+(this.title||this.value)+'">'+this.value+'</a></div>');rater.append(star);if(this.id)star.attr('id',this.id);if(this.className)star.addClass(this.className);if(control.half)control.split=2;if(typeof control.split=='number'&&control.split>0){var stw=($.fn.width?star.width():0)||control.starWidth;var spi=(control.count%control.split),spw=Math.floor(stw/control.split);star.width(spw).find('a').css({'margin-left':'-'+(spi*spw)+'px'})};if(control.readOnly)
star.addClass('star-rating-readonly');else
star.addClass('star-rating-live').mouseover(function(){$(this).rating('fill');$(this).rating('focus');}).mouseout(function(){$(this).rating('draw');$(this).rating('blur');}).click(function(){$(this).rating('select');});if(this.checked)control.current=star;input.hide();input.change(function(){$(this).rating('select');});star.data('rating.input',input.data('rating.star',star));control.stars[control.stars.length]=star[0];control.inputs[control.inputs.length]=input[0];control.rater=raters[eid]=rater;control.context=context;input.data('rating',control);rater.data('rating',control);star.data('rating',control);context.data('rating',raters);});$('.rating-to-be-drawn').rating('draw').removeClass('rating-to-be-drawn');return this;};$.extend($.fn.rating,{calls:0,focus:function(){var control=this.data('rating');if(!control)return this;if(!control.focus)return this;var input=$(this).data('rating.input')||$(this.tagName=='INPUT'?this:null);if(control.focus)control.focus.apply(input[0],[input.val(),$('a',input.data('rating.star'))[0]]);},blur:function(){var control=this.data('rating');if(!control)return this;if(!control.blur)return this;var input=$(this).data('rating.input')||$(this.tagName=='INPUT'?this:null);if(control.blur)control.blur.apply(input[0],[input.val(),$('a',input.data('rating.star'))[0]]);},fill:function(){var control=this.data('rating');if(!control)return this;if(control.readOnly)return;this.rating('drain');this.prevAll().andSelf().filter('.rater-'+control.serial).addClass('star-rating-hover');},drain:function(){var control=this.data('rating');if(!control)return this;if(control.readOnly)return;control.rater.children().filter('.rater-'+control.serial).removeClass('star-rating-on').removeClass('star-rating-hover');},draw:function(){var control=this.data('rating');if(!control)return this;this.rating('drain');if(control.current){control.current.data('rating.input').attr('checked','checked');control.current.prevAll().andSelf().filter('.rater-'+control.serial).addClass('star-rating-on');}
else
$(control.inputs).removeAttr('checked');control.cancel[control.readOnly||control.required?'hide':'show']();this.siblings()[control.readOnly?'addClass':'removeClass']('star-rating-readonly');},select:function(value){var control=this.data('rating');if(!control)return this;if(control.readOnly)return;control.current=null;if(typeof value!='undefined'){if(typeof value=='number')
return $(control.stars[value]).rating('select');if(typeof value=='string')
$.each(control.stars,function(){if($(this).data('rating.input').val()==value)$(this).rating('select');});}
else
control.current=this[0].tagName=='INPUT'?this.data('rating.star'):(this.is('.rater-'+control.serial)?this:null);this.data('rating',control);this.rating('draw');var input=$(control.current?control.current.data('rating.input'):null);if(control.callback)control.callback.apply(input[0],[input.val(),$('a',control.current)[0]]);},readOnly:function(toggle,disable){var control=this.data('rating');if(!control)return this;control.readOnly=toggle||toggle==undefined?true:false;if(disable)$(control.inputs).attr("disabled","disabled");else $(control.inputs).removeAttr("disabled");this.data('rating',control);this.rating('draw');},disable:function(){this.rating('readOnly',true,true);},enable:function(){this.rating('readOnly',false,false);}});jQuery.fn.selectOptions=function(value){this.each(function(){if(this.nodeName.toLowerCase()!="select")return;var optionsLength=this.options.length;for(var i=0;i<optionsLength;i++){if(this.options[i].value==value){this.options[i].selected=true;};}})
return this;}
$.fn.rating.options={cancel:'Cancel Rating',cancelValue:'',split:0,starWidth:16};})(jQuery);
