
var stores = {};

KikGooglemapsMarker = {
    options: {
        
    },
    normalOverlay : function(storeInfo, icon, translations, withLinks, noDistance, selectLink){
        var options = {};
        options.icon = new GIcon(G_DEFAULT_ICON);
        options.icon.image = icon;
        options.icon.shadowSize = new GSize(0, 0);
        var point = new GLatLng(parseFloat(storeInfo.latitude), parseFloat(storeInfo.longitude));
        var marker = new GMarker(point, options);
        var html = '<div class="gmap-info-window-kik" style="width:280px">'+this.createInfoText(storeInfo, translations, withLinks, noDistance, 'gmap', selectLink)+'</div>';
//        var openingTimesStr = this.formatOpeningHours(storeInfo.opening_times);
//        var html = '<div class="gmap-info-window-kik" style="width:280px"><strong>KiK Textilien & Non-Food GmbH</strong><br/>'+
//        storeInfo.address+'<br/>'+storeInfo.zip+' '+storeInfo.city+'<br/>'+
//        (!noDistance ? translations.distance+': <span class="highlight">'+Math.round((storeInfo.Entfernung)/1000)+' km</span><br/>':'')+'<strong>'+
//        translations.openinghours+':</strong><br/><table class="opening-hours">'+openingTimesStr+'</table>'+
//        ((withLinks==true) ?('<a href="kikshop/storefinder/detail/?id='+storeInfo.filiale+'" id="store_id:'+storeInfo.filiale+'" class="gmap-storeselector" target="_blank" onclick="kikGM.showSingleMap('+storeInfo.filiale+'); return false;"><span>'+translations.details+'</span></a>'):'')+'</div>';
        GEvent.addListener(marker, 'click', function(){
            marker.openInfoWindowHtml(html);
        });
        
        return marker;
    },
    toBeOpenedOverlay: function(storeInfo, icon, translations, noDistance){
//        console.log(storeInfo);
        var options = {};
        options.icon = new GIcon(G_DEFAULT_ICON);
        options.icon.image = icon;
        options.icon.shadowSize = new GSize(0, 0);
        var point = new GLatLng(parseFloat(storeInfo.latitude), parseFloat(storeInfo.longitude));
        var marker = new GMarker(point, options);
        //        var openingTimesStr = this.formatOpeningHours(storeInfo.opening_times);
        var openingDate = new Date(parseInt(storeInfo.opening_date)*1000);
        var dateStr = openingDate.getDate()+'.'+(openingDate.getMonth()+1)+'.'+openingDate.getFullYear();
        var html = '<div class="gmap-info-window-kik" style="width:220px"><div class="inauguration"><span class="upper-case">'+translations.openingAt
        +'</span><br/><span>'+translations.at+' '+dateStr+'</span></div>'+
        storeInfo.address+'<br/>'+storeInfo.zip+' '+storeInfo.city+'<br/>'+
        (!noDistance ? translations.distance+': <span class="highlight">'+Math.round((storeInfo.Entfernung)/1000)+' km</span><br/>':'')+'<strong>'+
        '</div>';
        GEvent.addListener(marker, 'click', function(){
            marker.openInfoWindowHtml(html);
        });
        
        return marker;
    },
    formatOpeningHours: function(str){
        var openingTimes = str.split('*');
        var openingTimesStr = '';
        for(var i=0; i<openingTimes.length; ++i)
            if(openingTimes[i] != ''){
                var row = openingTimes[i].split(': ');
                openingTimesStr += '<tr><td class="days">'+row[0]+':</td><td class="times">'+row[1]+'</td></tr>';
            }
        
        return openingTimesStr;
    },
    centerMarker: function(latitude, longitude, icon){
        var options = {};
        options.icon = new GIcon(G_DEFAULT_ICON);
        options.icon.image = icon;
        options.icon.shadowSize = new GSize(0, 0);
        var point = new GLatLng(parseFloat(latitude), parseFloat(longitude));
        var marker = new GMarker(point, options);
        
        return marker;
    },
    createInfoText: function(storeInfo, translations, withLinks, noDistance, classPrefix, selectLink){
        var openingTimesStr = this.formatOpeningHours(storeInfo.opening_times);
        var html = '<strong>KiK Textilien & Non-Food GmbH</strong><br/>'+translations.storenumber+': '+storeInfo.filiale+'<br/>'+
        storeInfo.address+'<br/>'+storeInfo.zip+' '+storeInfo.city+'<br/>'+
        (!noDistance ? translations.distance+': <span class="">'+Math.round((storeInfo.Entfernung)/1000)+' km</span>':'')+
        ((selectLink==true) ? (' <a href="kikshop/storefinder/selectStore/?storeid='+storeInfo.filiale+'" id="store_id_remember:'+storeInfo.filiale+'" class="'+classPrefix+'-currentStore highlight" target="_blank" onclick="kikGM.selectStore('+storeInfo.filiale+'); return false;"><span>('+translations.select+')</span></a><br/>'):'<br/>')+
        '<strong>'+translations.openinghours+':</strong><br/><table class="opening-hours">'+openingTimesStr+'</table>'+
        ((withLinks==true) ?('<a href="kikshop/storefinder/detail/?id='+storeInfo.filiale+'" id="store_id_detail:'+storeInfo.filiale+'" class="'+classPrefix+'-storeselector" target="_blank" onclick="kikGM.showSingleMap('+storeInfo.filiale+'); return false;"><span>'+translations.details+'</span></a>'):'');
        
        return html;
    }
};

//KikStoreList = {
//    create : function(storeInfo, translations, withLinks){
//        var html = '<div class="store-list-single"><strong>KiK Textilien & Non-Food GmbH</strong><br/>'+
//        storeInfo.address+'<br/>'+storeInfo.zip+' '+storeInfo.city+'<br/>'+
//        translations.distance+': '+Math.round((storeInfo.Entfernung)/1000)+' km<br/>'+
//        ((withLinks==true) ?('<a href="kikshop/storefinder/detail/?id='+storeInfo.filiale+'" class="list-storeselector" target="_blank" onclick="kikGM.showSingleMap('+storeInfo.filiale+'); return false;"><span>'+translations.details+'</span></a>'):'')+'</div>';
//        
//        return html;
//    }
//}

KikGooglemaps = Class.create();
KikGooglemaps.prototype = {
    initialize : function(plz_place, lang, country, controller, icon, toBeOpenedIcon, centerIcon, translations, collection){
        this.plz_place = plz_place;
        this.lang = lang;
        this.controller = controller;
        this.country = country;
        this.translations = translations;
        this.icon = icon;
        this.toBeOpenedIcon = toBeOpenedIcon;
        this.centerIcon = centerIcon;
        this.collection = collection;
        this.singleStoreContainer = null;
        this.singleStoreController = null;
        this.ajaxContainer = null;
        this.selectLink = false;
        this.selectLinkController = null;
    },
    init: function(target){
        var geocoder = new google.maps.Geocoder();
        var centerIcon = this.centerIcon;
        var country = this.country
        var address = country;
        geocoder.geocode( {
            'address': address
        }, function(results, status) {
            if (status == google.maps.GeocoderStatus.OK) {	
                var latitude = (results[0].geometry.location.lat());
                var longitude = (results[0].geometry.location.lng());
            }
            var map = new GMap2($(target));
            map.setCenter(new GLatLng(latitude, longitude), 5);
            map.addControl(new GLargeMapControl());
            map.addControl(new GMapTypeControl());
            map.enableScrollWheelZoom();
            map.addOverlay(KikGooglemapsMarker.centerMarker(latitude, longitude, centerIcon));
        });
    },
    setSelectLinkController: function(selectController){
      this.selectLink = true;  
      this.selectLinkController = selectController;
    },
    setCollection: function(collection){
        this.collection = collection;
    },
    setSingleStoreConfig: function(target, controller){
        this.singleStoreContainer = target;
        this.singleStoreController = controller;
    },
    setMapConfig: function(ajaxContainer){
        this.ajaxContainer = ajaxContainer;
    },
    showSingleMap: function(storeId){
        preloader.show();
        var listContainer = $(this.ajaxContainer);
        var singleContainer = $(this.singleStoreContainer);
        //        alert(this.singleStoreController);
        new Ajax.Request(this.singleStoreController, 
        {
            parameters:{
                id:storeId
            },
            method: 'get',
            onSuccess: function(transport){
                var jsonResult = transport.responseText.evalJSON();
                singleContainer.update(jsonResult.html);
                listContainer.hide();
                singleContainer.show();
                preloader.hide();
            },
            onFailure: function(){
                preloader.hide();
            },
            onException: function(){
                preloader.hide();
            }
        });
    },
    selectStore: function(storeId){
        //        alert(this.singleStoreController);
        new Ajax.Request(this.selectLinkController, 
        {
            parameters:{
                storeid:storeId
            },
            method: 'get',
            onSuccess: function(transport){
                var jsonResult = transport.responseText.evalJSON();
                alert(jsonResult.message);
                lightbox.hide();
            },
            onFailure: function(){
                alert('failed');
            },
            onException: function(){
            }
        });
    },
    showMapHTML : function(target, withLinks, listTarget){
        preloader.show();
        var self = this;
        var geocoder = new google.maps.Geocoder();
        var plz_place = this.plz_place;
        var country = this.country
        var address = plz_place+', '+country;
        var controller = this.controller;
        var lang = this.lang;
        var icon = this.icon;
        var toBeOpenedIcon = this.toBeOpenedIcon;
        var centerIcon = this.centerIcon;
        var translations = this.translations;
        var collection = this.collection;
        var listContainer = $(this.ajaxContainer);
        var singleContainer = $(this.singleStoreContainer);
        var selectLink = this.selectLink;
        if(listTarget == null)
            listTarget = lightbox.lightboxContent;
        //        listTarget.update('');
        	
        geocoder.geocode( {
            'address': address
        }, function(results, status) {
            if (status == google.maps.GeocoderStatus.OK) {	
                var latitude = (results[0].geometry.location.lat());
                var longitude = (results[0].geometry.location.lng());
                //console.log(results);
                var params = {
                    'searchlocation': plz_place, 
                    'lat': latitude, 
                    'long': longitude, 
                    'country': lang,
                    'collection': collection
                };
                new Ajax.Request(controller,
                {
                    method: 'get',
                    parameters: params,
                    onSuccess: function(transport){
                        if(transport != ''){
                            singleContainer.update('');
                            singleContainer.hide();
                            listContainer.show();
                            var map = new GMap2($(target));
                            map.setCenter(new GLatLng(latitude, longitude), 11);
                            map.addControl(new GLargeMapControl());
                            map.addControl(new GMapTypeControl());
                            map.enableScrollWheelZoom();
                            var json = transport.responseText.evalJSON();
                            //                            console.log(json);
                            map.addOverlay(KikGooglemapsMarker.centerMarker(latitude, longitude, centerIcon));
                            if(json.success){
                                var jresults = json.results;
                                var resultsText = '';	
                                var counter = 1;
                                for(var i in jresults){
                                    if(typeof(jresults[i]) == 'object'){
                                   
                                        var storeInfo = jresults[i];
                                        stores[storeInfo.filiale] = storeInfo;
                                        if(storeInfo.toBeOpened != true){
                                            map.addOverlay(KikGooglemapsMarker.normalOverlay(storeInfo, icon, translations, withLinks, false, selectLink));
                                        }else{
                                            map.addOverlay(KikGooglemapsMarker.toBeOpenedOverlay(storeInfo, toBeOpenedIcon, translations));
                                        }
                                        resultsText += '<div class="store-list-single">'+KikGooglemapsMarker.createInfoText(storeInfo, translations, withLinks, false, 'list', selectLink)+'</div>'+(counter%2==0 ? '<br class="clearer"/>':'');
                                        counter++;
                                }
                                }
                                
                                var divList = resultsText+'<br class="clearer"/>';
                                $('map-caption').update('<p class="caption">'+json.caption+'</p>');
                                listTarget.update(divList);
                                preloader.hide();
                            }
                        }
                    },
                    onFailure: function(){
                        var map = new GMap2($(target));
                        map.setCenter(new GLatLng(latitude, longitude), 11);
                        map.addControl(new GLargeMapControl());
                        map.addControl(new GMapTypeControl());
                        map.enableScrollWheelZoom();
                        map.addOverlay(KikGooglemapsMarker.centerMarker(latitude, longitude, centerIcon));
                        preloader.hide();
                    },
                    onExeption: function(){
                        var map = new GMap2($(target));
                        map.setCenter(new GLatLng(latitude, longitude), 11);
                        map.addControl(new GLargeMapControl());
                        map.addControl(new GMapTypeControl());
                        map.enableScrollWheelZoom();
                        map.addOverlay(KikGooglemapsMarker.centerMarker(latitude, longitude, centerIcon));
                        preloader.hide();
                    },
                    onCreate: function(){
//                        var map = new GMap2($(target));
//                        map.setCenter(new GLatLng(latitude, longitude), 11);
//                        map.addControl(new GLargeMapControl());
//                        map.addControl(new GMapTypeControl());
//                        map.enableScrollWheelZoom();
//                        map.addOverlay(KikGooglemapsMarker.centerMarker(latitude, longitude, centerIcon))
//                        self.init();
                    }
                });
            }
        });
    },
    backToSearchResult: function(){
        var listContainer = $(this.ajaxContainer);
        var singleContainer = $(this.singleStoreContainer);
        singleContainer.update('');
        singleContainer.hide();
        listContainer.show();
    }
    
};

KikGoogleMapsStore = Class.create();
KikGoogleMapsStore.prototype = {
    initialize: function(storeInfo, target, icon, translations){
        var map = new GMap2($(target));
        map.setCenter(new GLatLng(storeInfo.latitude, storeInfo.longitude), 15);
        map.addControl(new GLargeMapControl());
        map.addControl(new GMapTypeControl());
        map.enableScrollWheelZoom();
        if(storeInfo.toBeOpened != true){
            map.addOverlay(KikGooglemapsMarker.normalOverlay(storeInfo, icon, translations, false, true));
        }else{
            map.addOverlay(KikGooglemapsMarker.toBeOpenedOverlay(storeInfo, icon, translations, false, true));
        }
    }
};

