
/* Merged Plone Javascript file
 * This file is dynamically assembled from separate parts.
 * Some of these parts have 3rd party licenses or copyright information attached
 * Such information is valid for that section,
 * not for the entire composite file
 * originating files are separated by - filename.js -
 */

/* - store_locator.js - */
var store_locator = {
    'COOKIE_NAME': 'gut.2011.position',
    'LL_DEFAULT': {'lat':45.46369 , 'lng': 9.188143 },
    'REQ_URL':'pos-locator'
  };

(function(context){
  context.position = function(){
    //onLoad
    var lat = null;
    var lng = null;
    var params = store_locator['LL_DEFAULT'];
    //leggere cookie e recuperare ll
    ll = readCookie(store_locator['COOKIE_NAME'])
    if(!geo_position_js.init()){
      //funzione non disponibile
      return store_locator['LL_DEFAULT']
    }
    if (!ll && geo_position_js.init()) {
      //console.log('geolocalizzazione');
      //recuperare codice posizione calcolato da geolocation
      geo_position_js.getCurrentPosition(
          store_locator.setLocationCookie,
          function(p){p.message},
          {enableHighAccuracy:true,options:5000}
      );

    }else{
      ll = ll.split(',')
      params = {'lat':ll[0], 'lng':ll[1]}
    }
    return params;
  }


  context.setLocationCookie = function(position) {

    lat = position.coords.latitude.toFixed(2)
    lng = position.coords.longitude.toFixed(2)

    if(!lat || !lng){
      ll = store_locator['LL_DEFAULT'];
    }else{
      ll = lat+','+lng;
    }
    createCookie(store_locator['COOKIE_NAME'],ll,0.5);

    params = {'lat':lat,'lng':lng};

    store_locator.setStores(params,function(){$('#place-map').jMapping('update')})
  }



  context.setStores = function(params, callback){
    $('.store-error-message').hide()
    $('.store-none').hide()

    $.getJSON(store_locator['REQ_URL'],params, function(data){
      main_store = null;
      pos_request = data.position;
      store_locator.removeStores();

      $.each(data.markers,function(i,item){
        el_snippet = $('[data-snippet="store"]').clone()
        //[{"phone": "02/74.12.45", "name": "La Bottega Per L'ufficio Srl ", "level": "0", "lat": 45.462039300000001, "image": "", "address": "Viale Corsica, 74, 20137 Milano (Mi)", "lng": 9.2329901999999997}]
        el_snippet.removeAttr('data-snippet');

        //id: 1, point: {lat: 45.541946, lng: 9.582825}
        idx = i+1;
		if(item.level=='1'){
            category = 'keystores';
            el_snippet.addClass('keystores');
        }else{
            category = 'stores';
        }
        data_jmapping = '{id:'+ idx +', point:{lat:' + item.lat +', lng:' + item.lng + '},category:"'+category+'"}';
        el_snippet.attr('data-jmapping', data_jmapping)
        el_snippet.find('.org').text(item.name);
        el_snippet.find('.tel').text(item.phone);
        el_snippet.find('.street-address').text(item.address);
        website = item.website
        if(website.indexOf('http://')!=0){
            website = 'http://'+website;
        }
        el_snippet.find('.website a').attr('href',website).text(item.website);
        if(item.image != ''){
            var src_image = item.image + "_thumb";
            $($('<img/>').attr('src',src_image)).appendTo(el_snippet.find('.thumb'));
            el_snippet.addClass('thumb');
        }
        el_snippet.show();
        $(el_snippet).appendTo('.store-items');
        if(i==0){
          store_locator.setMainStore(item, {'lat':item.lat,'lng':item.lng});
        }
      })

      //nessun risultato, vengono mostrati i risultati di default (milano)
      if(data.markers.length == 0){
        store_locator.setMainStore(null, pos_request);
        store_locator.setEmptyStores();
      }

      if(data.totmarkers == 0){
        store_locator.setEmptyStores();
      }

      //stampo la posizione richiesta
      if(pos_request.lat==0 && pos_request.lng==0){
        //nel caso fosse stata ricercata una via o citta inesistente
        pos_request = store_locator.LL_DEFAULT
      }
      el_snippet = $('[data-snippet="store"]').clone()
      el_snippet.removeAttr('data-snippet');
      data_jmapping = '{id:0, point:{lat:' + pos_request.lat +', lng:' + pos_request.lng + '},category:"user"}';
      el_snippet.attr('data-jmapping', data_jmapping)
      el_snippet.find('.info-box').remove();
      $(el_snippet).appendTo('.store-items');


      //callback
      if(typeof callback == 'function'){callback.call(this, data);}
    })
  }


  context.setMainStore = function(item, position){

    el_snippet = $('[data-snippet="main_store"]');

    if(item){
	  if(item.level=='1'){category = 'keystores'}else{category = 'stores'}

      data_jmapping = '{id:0, point:{lat:' + position.lat +', lng:' + position.lng + '},category:"'+category+'"}';
      el_snippet.attr('data-jmapping', data_jmapping);
      el_snippet.find('.org').text(item.name);
      el_snippet.find('.tel').text(item.phone);
      el_snippet.find('.street-address').text(item.address);
    }else{
      data_jmapping = '{id:0, point:{lat:' + position.lat +', lng:' + position.lng + '},category:"user"}';
      el_snippet.attr('data-jmapping', data_jmapping);
      el_snippet.find('.org').text("Nessun punto vendita nelle tue vicinanze");
      el_snippet.find('.adr').hide();
      el_snippet.find('.tel').hide();
    }
    //el_snippet.removeAttr('data-snippet');
    el_snippet.show();

  }



  context.setEmptyStores = function(){
    $('.store-error-message').appendTo('#store-list').show()
  }

  context.removeStores = function(){
    $('.store-items').children().remove();
    $('#place-map-selector').children().remove();
  }

})(store_locator);



$(document).ready(function(){
  if($('.template-brandhome_view').length>0){store_locator['REQ_URL'] = '../pos-locator'}
  if($('#stores_list').length>0){store_locator['REQ_URL'] = './allpos-locator'}

  if($('.template-brandhome_view').length>0 || $('.template-article_view').length>0 || $('#stores_list').length>0){
    var params = store_locator.position();

    store_locator.setStores(params,function(){
        /*mostro la posizione corrente dell'utente o il negozio piu vicino*/
        if($('#stores_list').length>0){
            //creo la mappa nella pagina punti-vendita
            $('#store-map').jMapping({
                side_bar_selector: '#store-list',
                default_zoom_level: 10,
                category_icon_options:{
                    'user': {color: '#C8514B'},
                    'stores': {color: '#00FF00'},
                    'keystores': {color: '#00FF00', starcolor:'#FFFF00'}
                }});
            $('.stats_pos .value').text($('.store-item:visible').length);
            _setCity(params, $('.stats_pos .location'))
        }else{
            $('#place-map').jMapping({
                side_bar_selector: '#store-locator',
                map_config: {disableDefaultUI: true,
                            mapTypeId: google.maps.MapTypeId.ROADMAP,
                            maxZoom:9, minZoom:5, zoom:9},
                force_zoom_level:9,
                always_show_markers:true,
                category_icon_options:{'user': {color: '#C8514B'},
                                        'stores': {color: '#00FF00'},
                                        'keystores': {color: '#00FF00', starcolor:'#FFFF00'}
                                        }
                });
        }
    });


    if($('#stores_list').length==0){
        //creo la mappa nella viewlet
        $('#store-map').jMapping({
          side_bar_selector: '#store-list',
          default_zoom_level: 10,
          category_icon_options:{
              'user': {color: '#C8514B'},
              'stores': {color: '#00FF00'},
    		  'keystores': {color: '#00FF00', starcolor:'#FFFF00'}
            }});


        //overlay
        $("#store-locator-view").appendTo('body');
        $("#store-locator .place-more").overlay({
          top:0,
          fixed:'true',
          left:'center',
          onLoad:function(){
            $('#store-map').jMapping('update');
            //$("#store-list").scrollable({ vertical: true});
          }
        });
    }

     //search store
     $('[data-snippet="store"]').hide();
     $('#storeLocatorForm').submit(function(){
        $(this).find('#cerca').removeClass('submitting');
        msg_default = "Inserire almeno la città";
        adr = $('#address').val();
        if(adr==''){
            adr="Milano";
            $('#address').val(adr)
        }
        var params = {"address" : adr}
        $('.store-items').empty();
        store_locator.setStores(params,function(params){
            $('#store-map').jMapping('update');
            if($('#stores_list').length>0){
               $('.stats_pos .value').text($('.store-item:visible').length);
               _setCity(params.position, $('.stats_pos .location'))
            }
        });
        return false;
     })

  }
})

/* UTILITY
  --------------*/

function _setCity(params, node){
    //http://code.google.com/apis/maps/documentation/javascript/services.html#ReverseGeocoding
    geocoder = new google.maps.Geocoder();
    latlng = new google.maps.LatLng(params.lat, params.lng);
    geocoder.geocode({'latLng': latlng}, function(results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
            if(results.length>0){
                city = results[0].address_components[2].long_name
                node.find('.locvalue').text(city);
                node.show()
            }
        }
    })
}


/* COOKIE
  --------------*/

function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function createCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}


