var map;
var directionsDisplay;
var waitingforajaxcall = "<div class='tempLoading'><img src='core/media/img/ajax-loader.gif' alt='ajax-loader' /><span>Attendere..</span></div>";
var planetnumber = 0; 
var ipermercatinumber = 0; 
var supermercatinumber = 0;
var expressnumber = 0;
var logged = false;
var ILTUOPDVPrefix = "iLTuOPdV_"; 



/**
 * oggetto utilizzato per gestire l'aggiunta/inversione/teset di tappe nella determinazione del percorso verso un punto vendita
 */
var TRIPStopHandler = {
	idx: 0,	
	init: TRIPStopHandler_init,
	addLast: TRIPStopHandler_addLast,
	addAfter: TRIPStopHandler_addAfter,	
	remove: TRIPStopHandler_remove,	
	revert: TRIPStopHandler_revert,
	onLocomotionChanged: TRIPStopHandler_onLocomotionChanged,
	toggleLocomotionOption: TRIPStopHandler_toggleLocomotionOption,
	reset: TRIPStopHandler_reset
}


function TRIPStopHandler_remove( rowToRemove ){	
	var n = $("#tabletrip tr[id*='tabletripstopFreetxt_n']").length;
	if( n==1 ){ $("#directionalArrow").show(); }
	rowToRemove.remove();
}

function TRIPStopHandler_addLast(){
	$("#directionalArrow").hide();
	this.addAfter( $("#tabletripstopFreetxt_template").prev() );
}

function TRIPStopHandler_addAfter( row ){	
	var template = $("#tabletripstopFreetxt_template");
	var newrow = template.clone();
	newrow.attr( "id", ("tabletripstopFreetxt_n" + ( ++(this.idx)) ) );
	newrow.find("a[name=removeStopPoint]").bind("click", function(){ TRIPStopHandler.remove(newrow); } );	
	newrow.find("a[name=addStopPoint]" ).bind("click",   function(){ TRIPStopHandler.addAfter(newrow); } );	
	row.after( newrow );	
	newrow.show();	
}

function TRIPStopHandler_revert(){
	
	var tr0 = $("#tabletrip tr:eq(0)");
	var tr1 = $("#tabletrip tr:eq(1)").remove();	
	
	tr0.find("label:first")[0].innerHTML= "A :";
	tr1.find("label:first")[0].innerHTML= "Da :";
	
	var tr0td2 = tr0.find("td:eq(2)").remove();
	var tr1td2 = tr1.find("td:eq(2)").remove();	
	tr0.find("td:eq(1)").after(tr1td2);
	tr1.find("td:eq(1)").after(tr0td2);

	tr0.before(tr1);
	$("#directionalArrow").bind(  "click", function(){TRIPStopHandler.revert()});
}

function TRIPStopHandler_onLocomotionChanged( value ){
	
	var showhide = $("#show_hide_trip_options");
	var topt = $("#tripTableOption");	
	showhide[0].innerHTML = "Mostra Opzioni";
	topt.hide();

	if( value=="G_TRAVEL_MODE_DRIVING" ){		
		showhide.show();
		
	}else
	if( value=="G_TRAVEL_MODE_WALKING" ){
		showhide.hide();
		
	}else{
		alert("Sorry unknown value: " + v);
	}	
}


function TRIPStopHandler_toggleLocomotionOption(){
	var showhide = $("#show_hide_trip_options");
	var topt = $("#tripTableOption");
	topt.toggle();
	if( topt.is(":visible") ){
		showhide[0].innerHTML="Nascondi Opzioni";
	}else{
		showhide[0].innerHTML="Mostra Opzioni";
	}	
}

function TRIPStopHandler_reset(){
	$("#tabletrip tr[id*='tabletripstopFreetxt_n']").remove();
	$("#directionalArrow").show();
    $("#directions_from").val("");
    $('#avoidHighways,#avoidTolls').attr('checked', false);  
    $("#locomotionList").val(["G_TRAVEL_MODE_DRIVING"]); //rimetto 'InAuto'
    this.onLocomotionChanged( "G_TRAVEL_MODE_DRIVING" );
    directionsDisplay.setMap(null);
}

function TRIPStopHandler_init(){
	$("#add_tripstop").bind( "click", function(){TRIPStopHandler.addLast()} );
	$("#directionalArrow").bind(  "click", function(){TRIPStopHandler.revert()} );
	$("#locomotionList").bind( "change", function(){ TRIPStopHandler.onLocomotionChanged( this.value )});
	$("#show_hide_trip_options").bind( "click",  function(){ TRIPStopHandler.toggleLocomotionOption();});
    $("#cancelDirections").bind( "click", function(){ TRIPStopHandler.reset(); });
}


/**
 * enumerativo per la gestione insegne/imagini segnapsto sulla mappa
 */
var EInsegna = {IPER:0, MARKET:1, EXPRESS:2, PLANET:3, UNKNOWN:4, toEnum:EInsegna_toEnum, toMarkerImage:EInsegna_toMarkerImage  }
function EInsegna_toEnum( insegnaStr ){
	insegnaStr=insegnaStr.toLowerCase();
    if (insegnaStr == "carrefour iper") return EInsegna.IPER;
    if (insegnaStr == "carrefour planet") return EInsegna.PLANET;
    if (insegnaStr == "carrefour market")  return EInsegna.MARKET;
    if (insegnaStr == "carrefour express") return EInsegna.EXPRESS;
	return EInsegna.UNKNOWN;    		
}
function EInsegna_toMarkerImage( insegnaStr ){
	return _EInsegna_toMarkerImage( EInsegna_toEnum( insegnaStr ) );
}
/*private*/function _EInsegna_toMarkerImage( einsegna ){	
	var ret = "core/media/img/gmaps/marker_";	
	switch (einsegna) {
		case EInsegna.IPER: 	ret += "iper.png"; break;
		case EInsegna.MARKET: 	ret += "market.png"; break;
		case EInsegna.EXPRESS: 	ret += "express.png"; break;
		case EInsegna.PLANET: 	ret += "planet.png"; break;
		default: ret=null; break;
	}
	return ret;	
}

/**
 * Contiene i dati del punto vendita e dati di supporto alla gestione dei maker-gmaps visualizzati sulla mappa
 * @param pdv contiene i dati del punto vendita letti da DBase
 */function MapMarker( pdv ){
	this.pdv  = pdv; 
	this.gmapMarker  = null;
	this.infowindow = null;
	this.getCodicePdv = MapMarker_getCodicePdv;	
	this.setFavorite  = MapMarker_setFavorite;
	this.generateHtml = MapMarker_generateHtml;
	this.close = MapMarker_close;
}
function MapMarker_getCodicePdv(){
	if(this.pdv==null) return null;
	return this.pdv.getAttribute("codicePdv"); 
}
function MapMarker_setFavorite( trueFalse ){
	if(this.pdv==null) return null;
	this.pdv.setAttribute("favorite", trueFalse );
}
function MapMarker_close(){
	if(this.infowindow!=null) this.infowindow.close();	
	if(this.gmapMarker!=null) this.gmapMarker.setMap(null);
}
function MapMarker_generateHtml( isPopin ){

	var code = this.pdv.getAttribute("codicePdv");
	var favorite = this.pdv.getAttribute("favorite");
    var insegna =  this.pdv.getAttribute("insegna");
	var promolinklogged = "/promozioni-sconti/offerte/volantini.html";
	var promolinkfavornotlogged = "/promozioni-sconti/offerte/volantini.html?group=" + escape(insegna);
        
    //variables used to set correct css classes
    var baloonclass;
    var formatoclass;
    var thisnumber;
    var balooncontent;
    switch ( EInsegna.toEnum(insegna) ){
		case EInsegna.IPER:{
        	baloonclass = "balloon1";
        	formatoclass = "Ipermercato";
        	balooncontent = "Iper";
        	ipermercatinumber++;
        	thisnumber = ipermercatinumber;			
			break;
		}
		case EInsegna.PLANET:{
        	baloonclass = "balloon4";
        	formatoclass = "Planet";
        	balooncontent = "Planet";
        	planetnumber++;
        	thisnumber = planetnumber;			
			break;
		}

		case EInsegna.MARKET:{
        	baloonclass = "balloon2";
        	formatoclass = "Supermercato";
        	balooncontent = "Market";
        	supermercatinumber++;
        	thisnumber = supermercatinumber;
			break;
		}

		case EInsegna.UNKNOWN: //si spera che non capiti 
		case EInsegna.EXPRESS:{
        	baloonclass = "balloon3";
        	formatoclass = "Express";
        	balooncontent = "Express";
        	expressnumber++;
        	thisnumber = expressnumber;
			break;
		}
	}
        
    var html;
    if (favorite != 'true') {
    	html = "<div style='height: 138px;' class='resultat " + baloonclass + "' id='" + code + "'>" +
        			"<a class='aggiungi add' href='#' id='addToMyC4" + code + "'>Aggiungi in MyCarrefour</a>";
    } else {
    	html = "<div style='height: 138px;'  class='resultat " + baloonclass + "' id='" + code + "'>" +
        			"<a class='aggiungi remove' href='#' id='removeFromMyC4" + code + "'>Elimina da MyCarrefour</a>";
    }
    html += "<p class='balloon_legend'>" + balooncontent + "</p>" +
	        "<div class='result_text'>" +
	        	"<a href='" + this.pdv.getAttribute("link") + "'>";
    if (insegna == "Carrefour"){
    	var nomecc = this.pdv.getAttribute("name");
    	if (nomecc.indexOf("Centro Commerciale") == -1) {
    		nomecc = "Centro Commerciale " + nomecc;
    	}
    	html += nomecc + " - " + 
    			"<span class='" + formatoclass + "'>" +	this.pdv.getAttribute("formato") + "</span>&nbsp;" + 
    			this.pdv.getAttribute("insegna") + "&nbsp;" + this.pdv.getAttribute("namePdv");
    } else {
    	html +=	"<span class='" + formatoclass + "'>" +	this.pdv.getAttribute("formato") + "</span>&nbsp;" +
		this.pdv.getAttribute("insegna") + " - " + this.pdv.getAttribute("city") + "&nbsp;" + this.pdv.getAttribute("address");        	
    }        
        
    html +=     "</a>" + 
    			"<p>" +
				        this.pdv.getAttribute("address") +
				        ", " +
				        this.pdv.getAttribute("civic") +
				        "<br />" +
				        this.pdv.getAttribute("cap") +
				        " - " +
				        this.pdv.getAttribute("city") +
				        "(" +
				        this.pdv.getAttribute("province") +
				        ")" +
				        "<br />" +
				        this.pdv.getAttribute("phone") +
		        "</p>" +
	        "</div>";
    if (favorite == 'true') {  	
//    	html += "<p id='"+BUGSpan.id(code)+"' class='punto_preferito'>"+BUGSpan.innerhtm+"</p>";
    	html += "<p id='"+ILTUOPDVPrefix + code +"' class='punto_preferito'><span></span>Il tuo punto vendita preferito</p>";   	
    	promolink = promolinkfavornotlogged;
    } else if (logged) {
    	promolink = promolinklogged;
    } else {
    	promolink = promolinkfavornotlogged;
    }
    
    if(isPopin){
    	html += "<ul style='height:20px'>"; //casini IE6
    }else{
    	html += "<ul>";
    }
    
    	html +=
	        	"<li>" +
	        	"	<a class='trovar' href='#' onclick=\"findPath('"  + 
	        			this.pdv.getAttribute("insegna") + "','" + 
	        			this.pdv.getAttribute("address").replace(/'/g,"\\'").replace(/",/g,"\\,")  + "','" + 
	        			this.pdv.getAttribute("civic") + "','" + 
	        			this.pdv.getAttribute("cap") + "','" + 
	        			this.pdv.getAttribute("city").replace(/'/g,"\\'").replace(/,/g,"\\,") + "','" + 
	        			this.pdv.getAttribute("province") + "','" + 
	        			this.pdv.getAttribute("lat") +"','" + 
	        			this.pdv.getAttribute("lng") +
	        		"'); return false\"" + ">" + 
	        			"<span></span>Trova il percorso" +
			        "</a>" +
		        "</li>" +
		        "<li><a class='news' href='" + this.pdv.getAttribute("linkNews") +"'><span></span>News</a></li>" +
		        //"<li><a class='promozioni' href='/promozioni-sconti/offerte/volantini.html?group=all&codicePdv=" + code + "'><span></span>Promozioni</a></li>" +
		        "<li><a class='promozioni' href='" + promolink + "'><span></span>Promozioni</a></li>" +
	        "</ul>" +
        "</div>";
    
    	
    	
    if(isPopin){ //casini IE6    	
    	html = "<div style='width:400'>"+ html + "</div>"; 
    }
    
    return  html;
    
}

/*2010.10.28 pre ora non in uso
var EPdvAction = { NOTHING:0, REMOVEPrimaryPdv:1, REMOVESecondaryPdv:2, REPLACEPrimaryPdv:3, REPLACESecondaryPdv:4, ADDPdv:5 }
*/
/**
 * contenitore delle istanze di MapMarker che rappresentano il puntivendita correntemente visualizzati sulla mappa
 */
var MAPMarkers = {
/*2010.10.28 per ora non in uso
	primaryPdvCode:null, 
	secondaryPdvCode:null,
*/
	mapmarkers: new Array(),	
/*2010.10.28 per ora non in uso
	loadUserPdv:MAPMarkers_loadUserPdv,
	getAddPdvValidActions: MAPMarkers_getAddPdvValidActions,
*/
	setPdvs:MAPMarkers_setPdvs,
	getMapMarker:MAPMarkers_getMapMarker	
}
function MAPMarkers_getMapMarker(codicePdv){
	return this.mapmarkers[codicePdv];
}
/*2010.10.28 per ora non in uso
function MAPMarkers_getAddPdvValidActions(){
	if( this.secondaryPdvCode==null ){
		return [EPdvAction.REPLACEPrimaryPdv, EPdvAction.ADDPdv];
	}else{
		return [EPdvAction.REPLACEPrimaryPdv, EPdvAction.REPLACESecondaryPdv];		
	}
function MAPMarkers_loadUserPdv(){
	if( logged ){
	    $.getJSON("/AjaxRpc/c4UserValidationWeb.getUserPdvInfo", null, function(data, textstatus){
	        if (data.result) {
	            eval('res=' + data.data);
				this.primaryPdvCode=res.code1;
				this.secondaryPdvCode=res.code2;
	        }else{
	        	this.primaryPdvCode=this.secondaryPdvCode=false;
	        }
	    });
		
	}else{
		this.primaryPdvCode=this.secondaryPdvCode=false;
	}
}
}*/
/*private static*/function _MapMarker_createMapMarker(pdv){
	
	var mmarker = new MapMarker(pdv);
	
    var latlng = new google.maps.LatLng(parseFloat(pdv.getAttribute("lat")), parseFloat(pdv.getAttribute("lng")));
    mmarker.gmapMarker = new google.maps.Marker({
    	position:latlng, 
    	map: map,
    	title: pdv.getAttribute("namePdv"),
    	icon: EInsegna.toMarkerImage( pdv.getAttribute("insegna") )
    });
 
    google.maps.event.addListener( mmarker.gmapMarker, "click", function(){
    	mmarker.infowindow = new google.maps.InfoWindow({ content: mmarker.generateHtml(true) });
        google.maps.event.addListener( mmarker.infowindow, "closeclick", function(){ mmarker.infowindow=null;} );
        mmarker.infowindow.open(map,mmarker.gmapMarker);
	});
    return mmarker;
}
function MAPMarkers_setPdvs( pdvs ){
	var mmmarker = null;
	
	for( codicePdv in this.mapmarkers ){
		this.mapmarkers[codicePdv].close(); //tolgo i vecchi dalla mappa				
	}
	this.mapmarkers = new Array();

	for( i=0; i<pdvs.length; i++ ){
		var mapMarker = _MapMarker_createMapMarker(pdvs[i]);
		this.mapmarkers[mapMarker.getCodicePdv()] = mapMarker;		
	}
}



/*
 * These functions should be here because else they are not found
 */

function getStringAddress(address, civic, city, cap, province){
    var ddd = address + ", ";
    if (civic != null && civic != "") {
        ddd += civic + ", ";
    }
    ddd += cap + " " + city + " " + province;
    
    return ddd;
}

function findPath( insegna, address, civic, cap, city, province, latitude, longitude){
	
	$("#controltab2").show();
    ddd = getStringAddress(address, civic, city, cap, province);
    $("#directions_to").val(ddd);
    $("#latitudeToField").val(latitude);
    $("#longitudeToField").val(longitude);
	
	$("#controltab2").attr("href", "#storelocator-tab2");
	var pdvpin = $("#pdvpin");
	var ivalue = EInsegna.toEnum( insegna ); 	
	switch ( ivalue ) {
		case EInsegna.IPER: 	pdvpin.attr( "class", "balloon1_iper");    pdvpin.attr( "innerHTML", "Iper");  break;
		case EInsegna.MARKET: 	pdvpin.attr( "class", "balloon2_market");  pdvpin.attr( "innerHTML", "Market");  break;
		case EInsegna.EXPRESS: 	pdvpin.attr( "class", "balloon3_express"); pdvpin.attr( "innerHTML", "Express" );  break;
	}
    jQuery("#controltab2").click();
    resetSearch();
}

function resetSearch() {
	$("#directions").hide();
    $("#searchDirections").show();
}


/* 2010.10.28 per ora non in uso (codice sperimentale che utilizzava jQuey-UI per costruire un dialog per la gestione delle azioni da compiersi con l'aggiungi PDV )
function executeAddPdv( mapmarker, pdvaction ){
	
	alert( mapmarker.getCodicePdv() + "action:" + pdvaction  );
	
}

function showAddPdvDialog( codicePdv ){
	
	var ret = EPdvAction.NOTHING;
	
	if(logged){

		
		
    	var pdvactions = MAPMarkers.getAddPdvValidActions();	    	
    	var actButtons = new Array(pdvactions.length);
    	for( var i=0; i<pdvactions.length; i++ ){
    		switch (pdvactions[i]) {
			case EPdvAction.REPLACEPrimaryPdv:
				actButtons[i] = {text:"Sostituire il punto vendita preferito", func:function() { action:pdvactions[i] }};							
				break;
			case EPdvAction.REPLACESecondaryPdv:					
//				actButtons[i] = {"Sostituire il secondo punto vendita preferito", function() { action:pdvactions[i] }};						
				break;
			case EPdvAction.ADDPdv:					
//				actButtons[i] = {"Aggiungere punto vendita ai preferiti", function() { action:pdvactions[i] }};							
				break;

			default:
				alert("Unexpected case: " + pdvactions[i] );
			}
    	}
    	
	
		var $dialog = $("<div></div>")
		.html( MAPMarkers.getMapMarker(codicePdv).generateHtml() )
		.dialog({
			title: 'Aggiungi in MyCarrefour',
			autoOpen: false,
			modal: true,
			close: function(event, ui) { $(this).dialog().remove();},
			buttons: { 
				"Sostituisci  primo  preferito":   function() { $(this).dialog("close") }, 
				"Sostituisci secondo preferito":   function() { $(this).dialog("close") } 
			}
//			
//			buttons: {
//				"actButtons[0].text": actButtons[0].func  
////				"actButtons[0].text":  function() { var n=actButtons[0].action; $(this).dialog("close") },
////				"actButtons[1].text":  function() { var n=actButtons[1].action; $(this).dialog("close") } 					
////				"Primario":   function() { $(this).dialog("close") },
////				"Secondario": function() { $(this).dialog("close") }				
//			}
//			
		});
		
		
		
		if( this.secondaryPdvCode==null ){
			return [EPdvAction.REPLACEPrimaryPdv, EPdvAction.ADDPdv];
			$dialog.dialog( "option", "buttons", 
					{ "Sostituisci  primo  preferito": function() { $(this).dialog("close"); }, 
					  "Aggiungi secondo preferito": 	function() { $(this).dialog("close"); } } 
			);

		}else{
			return [EPdvAction.REPLACEPrimaryPdv, EPdvAction.REPLACESecondaryPdv];
			$dialog.dialog( "option", "buttons", { "Ok": function() { $(this).dialog("close"); }, "Ko": function() { $(this).dialog("close"); } } );

		}
		
		$dialog.dialog('open');
		
    }

	return ret;

}
*/

function addToMyCarrefour(event){
	
	var code = jQuery(this).attr('id').substring(9, jQuery(this).attr('id').length);
    jQuery(this).hide().after(waitingforajaxcall);


    $.getJSON("/AjaxRpc/storeLocator.addFavoritePdv?codicePdv=" + code, null, function(data, textstatus){
        if (data.result) {
            eval("bean=" + data.data);
            $(".tempLoading").remove();
            alert("Il punto vendita preferito e' stato correttamente aggiornato!");
            window.location = bean['address'];
        } else {
            alert(data.message);
            $(".tempLoading").remove();
            //jQuery(this).show();
            if (data.data != null) {
            	eval('bean=' + data.data);
            	if (bean['register'] != null) {
            		window.location = "/index-registration.html?&puntoVendita=" + escape(bean['codicePuntoVendita']);
            	}
            }
        }
    });
}

function removeFromMyCarrefour(event){
    //building animated div
    //jQuery(this).after("<div id='calling' style=''></div>");
	var addremove = jQuery(this);
	addremove.hide().after(waitingforajaxcall);
    var code = jQuery(this).attr('id').substring(14, jQuery(this).attr('id').length);
    
    $.getJSON("/AjaxRpc/storeLocator.removeFavoritePdv?codicePdv=" + code, null, function(data, textstatus){
        if (data.result) {        	
        	MAPMarkers.getMapMarker( code ).setFavorite(false);
        	
            $(".tempLoading").remove();
            // changing link
            var allremove = $("a[id*='removeFromMyC4"+code+"']"); //risultati + eventuale nuvoletta aperta    
            var html = "<a class='aggiungi add' href='#' id='addToMyC4" + code + "'>Aggiungi in MyCarrefour</a>";
            allremove.after(html).remove();

            allremove = $("p[id='"+ILTUOPDVPrefix+code+"']"); //le bandierine che segnalano il pdv prerito (risultato ricerca + nuvoletta)
            refreshUserBar();
            allremove.remove();
            
        }
        else {
        	refreshUserBar();
            alert(data.message);
            $(".tempLoading").remove();
            addremove.show();
        }
    });
}

$(document).ready(function(){
	//checking if logged
	var cookie = $.cookie("jcmUserCookie");
	if (cookie != null && cookie != '' && cookie != 'undefined') {
		logged = true;
	}
/*2010.10.28 per ora non in uso
	MAPMarkers.loadUserPdv();
*/
	$("div.clickable").click(resize);
	TRIPStopHandler.init();
	$("#search_map").focus();

	
    //if (GBrowserIsCompatible()) {
		var myOptions = {
		    zoom: 5,
		    center: new google.maps.LatLng(41.87194, 12.56738),//centering of Italy
		    mapTypeId: google.maps.MapTypeId.ROADMAP
		  }
		map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
        //map.setUIToDefault();
		directionsDisplay = new google.maps.DirectionsRenderer();
		directionsDisplay.setPanel(document.getElementById("directions"));
        
        var geocoder = new google.maps.Geocoder();
        //geocoder.setBaseCountryCode('it');
        
        var directionsPanel = document.getElementById("directions");
        var directions = new google.maps.DirectionsService();
        
        google.maps.event.addListener(directions, "load", function(){
            $(".tempLoading").remove();
        });
        google.maps.event.addListener(directions, "error", function(){
            alert("Inserire l'indirizzo secondo il formato indicato");
            $(".tempLoading").remove();
            resetSearch();
        });
        
        $("#search_map").submit(function(){
            // resetting global variables
            supermercatinumber = 0;
            ipermercatinumber = 0;
            planetnumber = 0;
            expressnumber = 0;
            // centering on given location
            centerAddress($("#location_searchField").val());
            $("#search_map").focus();
            return false;
        });
        var travelSelectedValue = "";
        
        $("#submitDirections").click(function(){
            jQuery("#directions").append(waitingforajaxcall);
            jQuery.each($("#locomotionList").selectedValues(), function(index, value){ travelSelectedValue = value; });

            var inputs = $("input[name=waypoint]");            
            var waypoints = new Array();   
            for(i=0; i<inputs.length-1/*salto il template*/; i++){
            	if( inputs[i].id == "directions_to" ){
            	//è ol negozio carrefour
            		waypoints[i] = { location: new google.maps.LatLng( $("#latitudeToField").val(),  $("#longitudeToField").val() ), stopover:true};            		
            	}else{
            		var loc = inputs[i].value;
                    if (loc.toLowerCase().indexOf("italia") == -1) {
                    	loc += " italia";
                    }
            		waypoints[i] = { location: loc, stopover:true };             		
            	}            	
            }
            
            var start = waypoints[0].location;
            var end = waypoints[waypoints.length-1].location;
            waypoints = waypoints.slice( 1, waypoints.length-1 ); 

        	var req = { 
        			origin: start,
        			destination: end,
                    waypoints: waypoints,
                    travelMode: (travelSelectedValue.indexOf("WALKING")!= -1) ? google.maps.DirectionsTravelMode.WALKING : google.maps.DirectionsTravelMode.DRIVING,
                    avoidHighways: $("#avoidHighways").is(":checked"),
                    avoidTolls: $("#avoidTolls").is(":checked")
        	};
        	
    		directionsDisplay.setMap(map);        	
        	directions.route(req, function(res,status){
        		if (status==google.maps.DirectionsStatus.OK){
        			jQuery("#directions").html("");
        			directionsDisplay.setDirections(res);
        			jQuery("#getSearchDirections").show();
        		} else {
        			jQuery("#directions").html("Località di partenza o arrivo non trovata.");
        			jQuery("#getSearchDirections").show();
        		}
        	});
            
       });
    //}
    
	$("#controltab2").hide();
//	$("#controltab2").attr('href','#');
	
    $("a[id*='addToMyC4']").live('click', addToMyCarrefour);
    $("a[id*='removeFromMyC4']").live('click', removeFromMyCarrefour);
    
    var cmd = $.getUrlVar('cmd');

    // pre-selecting filter if parameter is found on the url
    var openfilter = false;
    $(":checkbox[name='services']").each(function(){
    	var value = $.getUrlVar(escape(jQuery(this).val()));
	
    	if (value != null) {
    		jQuery(this).attr("checked", "checked");
    		openfilter = true;
    	}
    });
    if (openfilter) {
    	//alert("click");
    	$("#toggle-store_criteria").click();
    }    

    // maybe there is a location set
    var location = $.getUrlVar('location');
    if (location != null) {
    	$("#location_searchField").val(location);
    }

    //checking if we come from myc4 page - we could calculate path or find pdv
    var puntovenditacode = $.getUrlVar('codicePdv');

    if (puntovenditacode != null && cmd != null) {
//    	alert("dehiho");
    	// should init direction panel or map!
    	// ajax call to retrieve pdv data
    	$.getJSON(	"/AjaxRpc/storeLocator.getPuntoVenditaAddress?codicePdv=" + puntovenditacode, 
    				null, 
    				function(data, textstatus){
    					if (data.result) {
				            //alert(data.data);
				            var puntovendita = eval('(' + data.data + ')');
				            if (cmd == 'calculate') {
					            findPath(	puntovendita.insegna,
					            			puntovendita.via, 
					            			puntovendita.numeroCivico, 
					            			puntovendita.cap, 
					            			puntovendita.comune, 
					            			puntovendita.provincia, 
					            			puntovendita.latitudine, 
					            			puntovendita.longitudine);
    						} else if (cmd == 'view') {
//    							/*if(cmd == 'extraOpen') {
//    								var today = new Date();
//    								var date = today.getDay() + "/" + (today.getMonth() + 1) + "/" + today.getYear();
//    								var newdate = {date : "Oggi"};
//    								$("#apertureList").addOption(newdate,true);
//    							}*/
				            	$("#location_searchField").val(getStringAddress(puntovendita.via, 
														            			puntovendita.numeroCivico, 
														            			puntovendita.cap, 
														            			puntovendita.comune, 
														            			puntovendita.provincia));
				            	$("#search_map").submit();
				            }
    					} else {
    						alert(data.message);
    					}
        });    	
    } 
    
    var codiceAziendale = $.getUrlVar('codiceAziendale');
    var stageExec = $.getUrlVar('stageExec');    
    if(codiceAziendale != null && stageExec != null) {
    	$("#codiceAziendale").val(codiceAziendale);
    	$("#stageExec").val(stageExec);
    }
    
    // getting next extra openings
    $.getJSON("/AjaxRpc/storeLocator.getExtraOpenNew", null, function(data, textstatus){
        //alert(data.data);
        var aperture = eval('(' + data.data + ')');
        $("#apertureList").addOption(aperture, false);
        
        // maybe there is extraopen to set
        var extraopen = $.getUrlVar('extraOpen');
        if(extraopen != null) {
        	if ($("#apertureList").containsOption(extraopen)) {
//        		alert("contains! selecting " + extraopen);
        		$("#apertureList").selectOptions(extraopen);
        	} else {
//        		alert("adding " + extraopen);
        		$("#apertureList").addOption(extraopen, extraopen, true);
        	}
    	}
        
        // search should be triggered only after returning from getting extra opens
        if(cmd == 'search') {
        	$("#search_map").submit();
        }
    });
        
    /*
     * Utility functions
     */    
    function centerAddress(address){
    	geocoder.geocode({'address': address+" italy"}, function(results, status) {
    		if (status == google.maps.GeocoderStatus.OK) {
    	    		  map.setZoom(10);
                	  var html = "<div class='resultat balloon1' id='noResults'>" +
										"<div class='result_text'>" +
										"<p>Siamo spiacenti, nessun punto vendita corrisponde ai criteri selezionati, ti invitiamo a cambiare i criteri di ricerca.</p>" +
										"</div>" +
								"</div>";
                	  
    	        	  if (results.length > 0) {         
    	        		  map.setCenter(results[0].geometry.location);                   
                          //*******
                          var bounds, swBounds, neBounds;
                          bounds = map.getBounds();
                          swBounds = bounds.getSouthWest();
                          neBounds = bounds.getNorthEast();
                          $("#centerLat").val(results[0].geometry.location.lat());
                          $("#centerLon").val(results[0].geometry.location.lng());
                          $("#north").val(neBounds.lat());
                          $("#south").val(swBounds.lat());
                          $("#east").val(neBounds.lng());
                          $("#west").val(swBounds.lng());
                          
                          $("#storelocator-tab1").empty().append(waitingforajaxcall);
                          $.post(	"/solutions/carrefour/storeLocator/searchStores.jsp", 
                          		$("#search_map").serialize(), 
                          		function(data){		                                
		                                $(".tempLoading").remove();
		                                $("#storelocator-tab1").empty();
		                                xml = data;
		                                var markers = xml.documentElement.getElementsByTagName("marker");
	                                	MAPMarkers.setPdvs(markers);
		                                if (markers.length > 0) {
		                                    for (var i = 0; i < markers.length; i++) {
		                                    	var mmarker = MAPMarkers.getMapMarker(markers[i].getAttribute("codicePdv"));		                                    	
		                                        html = mmarker.generateHtml(false); 
		                                     // appending html to result tab
		                                        $("#storelocator-tab1").append(html);
		                                    }
		                                } else {
		                                // take attention - if there are no markers, html variable value is something like "No results"
		                                	$("#storelocator-tab1").append(html);
		                                }
		                                // $("#storelocator-tab1").unblock();
		                                //alert("Data Loaded: " + data);    						          			
		                                // cleaning interface
		                                resetSearch();
		                                //$("#cancelDirections").click();
                          		}, 
                          		"xml");  
                      
    	        	} else {
							$("#storelocator-tab1").empty().append(html);
					}
                      
    	        	jQuery("#controltab1").click();
    	        	
    	      } else {
    	    	  
    	    	  alert("Geocoder failed due to: " + status);
    	      }
    	});
    }
});




function resize(){
	var isLargeMap = ! $("div.wrapper").is(":visible"); 
	var mapw = $("#map_canvas").width();	
	
	if(!isLargeMap ){
		//allargo
		$("div.wrapper").hide();
		//$("#textpane").width(50);
		$("#textpane").animate({width:50},200);
		map.panBy(-(910-mapw),0);
		$("#map_canvas").width(910);	
		$("#toggler").css("background","#EFEFEE url('/core/media/img/bg_spriteStoreLocator.png') no-repeat scroll -64px -13px");
	}else{
		//stringo
		map.panBy( (mapw-488),0);
		$("#map_canvas").width(488);
		//$("#textpane").width(473);
		$("#textpane").animate({width:473},200);
		$("div.wrapper").show();
		$("#toggler").css("background","#EFEFEE url('/core/media/img/bg_spriteStoreLocator.png') no-repeat scroll -13px -13px");
	}
	google.maps.event.trigger(map, 'resize');
}
