var Site = {

    options:
	{
	    searchBox: '#search input.searchboxtop',
	    searchText: 'S\370g p\345 m.dk',
	    cityringSearchBox: 'input.cityringsearch',
	    cityringSearchText: 'Navn på gade/vej',
	    ajaxErrorText: 'Du har desværre ikke mulighed for at se stationsinfo her.<br /><a href="/Koer+med+Metroen/Brug+metroen/Stationer.aspx">Se evt. generel info for stationerne</a>'
	},

    // initialize array for custom load events
    // all strings in the Site.loadEvents array will be eval()'ed as the last step i Site.start()
    // add load events by: Site.loadEvents.push( 'newCommand(1,2,3)' );
    loadEvents: [],

    start: function() {
		
		var widgetBox = $$('#metro-widgetbox');
		if (widgetBox.length)
		{
			var x = new Fx.Accordion($$('.widgetbox-header'), $$('.widgetbox-element'), {
				display: 0,
				alwaysHide: false,
				duration: 350
			});
			
			
		}
		
        var heightCont = jQuery('#maincontainer #main').height();
        if (jQuery('#subnav').height() > jQuery('#main #content').height()) {
            jQuery('#main #content').css('min-height', heightCont - '10');
        }

        // Events for searchbox
        var searchbox = $$(Site.options.searchBox);
        if (searchbox.length > 0)
            Site.addSearchboxEvents(searchbox);

        // Event for cityring searchbox
        var cityringSearchbox = $$(Site.options.cityringSearchBox);
        if (cityringSearchbox.length > 0)
            Site.addCityringSearchboxEvents(cityringSearchbox);
            
        var map = $('cityRingMap');
        if (map) {
            if (map.className == 'google_map large')
                Site.initializeCityRingMap('/Services/CityRingMapService.ashx?CookieFilter=1');
            else
                Site.initializeCityRingMap('/Services/CityRingMapService.ashx');
        }
        // Tab events
        if ($$('div.section').length > 0)
            Site.tabSlider();

        if ($$('div.tag-list').length > 0)
            Site.addTagListEvents();

        if ($$('#content .accordion').length > 0)
            Site.loadAccordion();

        // run load events
        for (var i = 0; i < Site.loadEvents.length; i++)
            eval(Site.loadEvents[i]);
    },

    initializeCityRingMap: function(serviceUrl) {
        Creuna.GoogleMaps.initialize();
        Creuna.GoogleMaps.maps.cityRingMap.loadMarkersFromJson(serviceUrl, false);
        Creuna.GoogleMaps.maps.cityRingMap.addOverlay(new GGroundOverlay('/Metro/gfx/overlay/cityring_overlay_ny.png', new GLatLngBounds(new GLatLng(55.65595, 12.5313), new GLatLng(55.7107, 12.5922))));

        // attach event handlers to move, drag and zoom end events to update cookie values
        GEvent.addListener(Creuna.GoogleMaps.maps.cityRingMap, 'dragend', this.updatePositionCookie)
        GEvent.addListener(Creuna.GoogleMaps.maps.cityRingMap, 'moveend', this.updatePositionCookie)
        GEvent.addListener(Creuna.GoogleMaps.maps.cityRingMap, 'zoomend', this.updatePositionCookie)
    },

    updatePositionCookie: function() {
        // update cookie values with new center lat, lng and zoom level
        Site.setCookie('CityRingLatitude', Creuna.GoogleMaps.maps.cityRingMap.getCenter().lat().toString(), 30, '/', '', '');
        Site.setCookie('CityRingLongitude', Creuna.GoogleMaps.maps.cityRingMap.getCenter().lng().toString(), 30, '/', '', '');
        Site.setCookie('CityRingZoom', Creuna.GoogleMaps.maps.cityRingMap.getZoom().toString(), 30, '/', '', '');
    },

    addTagListEvents: function() {
        var list = $$('div.tag-list a');

        list.each(function(element) {

            var fx = new Fx.Styles(element, { duration: 100, wait: false });
            var defaultBg = element.getStyle('background-color');
            var defaultColor = element.getStyle('color');

            element.addEvent('mouseenter', function() {
                fx.start({
                    'background-color': '#ff561b',
                    'color': '#fff'
                });
            });

            element.addEvent('mouseleave', function() {
                fx.start({
                    'background-color': defaultBg,
                    'color': defaultColor
                });
            });
        });
    },

    tabSlider: function() {
        var accordion = new Accordion('#subnav a', '#content div.tab',
		{
		    show: 0,
		    display: 0,
		    opacity: false,
		    height: true,
		    alwaysHide: false,
		    duration: 0,
		    transition: Fx.Transitions.Quad.easeOut,
		    onActive: function(toggler, element) {
		        toggler.addClass('selected');
		        toggler.getParent().getParent().addClass('selected');
		        var opacityChange = new Fx.Style(element, 'opacity', { duration: 200 });
		        opacityChange.start(0, 1);
		    },
		    onBackground: function(toggler, element) {
		        toggler.removeClass('selected');
		        toggler.getParent().getParent().removeClass('selected');
		    }
		}, $('content'));

        // Show corresponding tab from location
        var found = 0;
        $$('#subnav li a').each(function(link, i) {
            link.addEvent('click', function(e) {
                new Event(e).stop();
            });

            if (window.location.hash.test(link.hash)) found = i;
        });

        if (found == 0 && window.ie6 == true) {
            accordion.display(1);
            accordion.display(found);
        }
        else
            accordion.display(found);
    },

    tabSlide: function(element) {
        // Active 'tabSlider' from inline content
        window.location = element.href;
        Site.tabSlider();
    },

    submit: function(event, target) {
        // Submit form if keyCode is "enter"
        if (event.keyCode == 13 && !(event.srcElement && (event.srcElement.tagName.toLowerCase() == "textarea"))) {
            var defaultButton = document.getElementById(target);

            if (defaultButton && typeof (defaultButton.click) != "undefined") {
                defaultButton.click();
                event.cancelBubble = true;

                if (event.stopPropagation) event.stopPropagation();
                return false;
            }
        }
        return true;
    },

    addSearchboxEvents: function(elements) {
        elements.each(function(element) {
            // Add default text
            element.value = Site.options.searchText;

            // Add events
            element.addEvents({
                'focus': function(e) {
                    /* Clear value on focus */
                    if (this.value == Site.options.searchText)
                        this.value = '';
                },
                'blur': function(e) {
                    /* Bring back default text if value is empty */
                    if (this.value == '')
                        this.value = Site.options.searchText;
                }
            });
        });
    },

    addCityringSearchboxEvents: function(elements) {
        elements.each(function(element) {
            // Add default text
            element.value = Site.options.cityringSearchText;

            // Add events
            element.addEvents({
                'focus': function(e) {
                    /* Clear value on focus */
                    if (this.value == Site.options.cityringSearchText)
                        this.value = '';
                },
                'blur': function(e) {
                    /* Bring back default text if value is empty */
                    if (this.value == '')
                        this.value = Site.options.cityringSearchText;
                }
            });
        });
    },
    setGoogleStatUrl: function(stationId) {
        urlArray = new Array(
			"/metrokort/vanloese.aspx",
			"/metrokort/flintholm.aspx",
			"/metrokort/lindevang.aspx",
			"/metrokort/fasanvej.aspx",
			"/metrokort/frederiksberg.aspx",
			"/metrokort/forum.aspx",
			"/metrokort/noerreport.aspx",
			"/metrokort/kongens+nytorv.aspx",
			"/metrokort/christianshavn.aspx",
			"/metrokort/amagerbro.aspx",
			"/metrokort/lergravsparken.aspx",
			"/metrokort/oeresund.aspx",
			"/metrokort/amager+strand.aspx",
			"/metrokort/femoeren.aspx",
			"/metrokort/kastrup.aspx",
			"/metrokort/lufthavnen.aspx",
			"/metrokort/islands+brygge.aspx",
			"/metrokort/dr+byen.aspx",
			"/metrokort/bella+center.aspx",
			"/metrokort/oerestad.aspx",
			"/metrokort/vestamager.aspx",
			"/metrokort/sundby.aspx"
		)
        //alert("setGoogleStatUrl: " + urlArray[stationId-1]);
        pageTracker._trackPageview(urlArray[stationId - 1]);
    },
    parseQuery: function(query) {
        var params = {};
        if (!query) { return params; }
        var pairs = query.split(/[;&]/);
        var length = pairs.length;
        for (var i = 0; i < length; i++) {
            var keyVal = pairs[i].split('=');
            if (!keyVal || keyVal.length != 2) { continue; }

            var key = unescape(keyVal[0]);
            var val = keyVal[1];
            val = val.replace(/\+/g, ' ');
            params[key] = val;
        }
        return params;
    },

    updateMainFeature: function(url, targetId) {
        var query = url.replace(/^[^\?]+\??/, '');
        var params = Site.parseQuery(query);
        var stationId = params['StationId'];
        //alert("targetId: " + targetId);
        //alert("stationId: " + stationId);
        //alert("url: " + url);
        var targetElement = $(targetId);
        var featureContainer = jQuery('#feature-container').hide();
        
        setTimeout(function(){
			// Move the position of the flash map after clicked on station
			jQuery('#feature #metro-map').css("margin-left", '-20px');
			
			// Hide journeyplanner if present
	        var journeyplanner = $('metro-rejseplanen');
	        if (journeyplanner) {
	            journeyplanner.setStyle('display', 'none');
	        }
	        // Hide journeyplanner if present
	        var widgetboxHeader = $$('.widgetbox-header');
	        if (widgetboxHeader) {
	            widgetboxHeader.setStyle('display', 'none');
	        }
		
	        // Hide journeyplanner if present
	        var introduction = $('metro-introduction');
	        if (introduction) {
	            introduction.setStyle('display', 'none');
	        }
	        // Hide journeyplanner if present
	        var ticket = $('metro-ticket');
	        if (ticket) {
	            ticket.setStyle('display', 'none');
	        }
		}, 500);
        
        new Ajax(url,
		{
		    method: 'get',
		    update: targetElement,
		    onRequest: function() {

		        // Setting url in google analytics based on stationId
		        Site.setGoogleStatUrl(stationId);
		        //alert('updateMainFeature');

		        // Reset targetElement (div feature-container)
		        targetElement.empty();
		    },
		    onSuccess: function() {
				featureContainer.fadeIn();
		        //Site.initializeGoogleMaps();
		    },
		    onFailure: function() {
		        targetElement.setHTML('<div id="metro-info"><div class="metroline-info error"><p>' + Site.options.ajaxErrorText + '<p></div></div>');
		    }
		}).request();
    },

    updateStationFeature: function(latitude, longitude, url, targetId) {
        jQuery('#feature-container').fadeOut(50);
        $('feature').setStyle('min-height', '800px');
        var query = url.replace(/^[^\?]+\??/, '');
        var params = Site.parseQuery(query);
        var stationId = params['StationId'];
        var targetElement = $(targetId);
        new Ajax(url, {
            method: 'get',
            update: targetElement,
            onRequest: function() {
                // Setting url in google analytics based on stationId
                Site.setGoogleStatUrl(stationId);
                //alert('updateStationFeature');
            },
            onSuccess: function() {
                //Creuna.GoogleMaps.maps.metrogooglemap.panTo(new GLatLng(latitude, longitude));
                jQuery('#feature-container').fadeIn(400);
            },
            onFailure: function() {
                targetElement.empty();

                if (!targetElement.hasClass('error'))
                    targetElement.addClass('error')

                targetElement.setHTML(Site.options.ajaxErrorText);
            }
        }).request();
    },

    initializeGoogleMaps: function() {
        Creuna.GoogleMaps.initialize();

        // Add marker to each Metro station
        var GM = Creuna.GoogleMaps.Metro;
        var GT = 'metrogooglemap';
        GM.addMarker(GT, 55.6873409, 12.4915194);
        GM.addMarker(GT, 55.6858833, 12.4992763);
        GM.addMarker(GT, 55.6834640, 12.5129127);
        GM.addMarker(GT, 55.6815405, 12.5228583);
        GM.addMarker(GT, 55.6815828, 12.5303685);
        GM.addMarker(GT, 55.6817583, 12.5527060);
        GM.addMarker(GT, 55.6839660, 12.5711810);
        GM.addMarker(GT, 55.6794899, 12.5849139);
        GM.addMarker(GT, 55.6721576, 12.5911796);
        GM.addMarker(GT, 55.6635169, 12.6025629);
        GM.addMarker(GT, 55.6624518, 12.6173472);
        GM.addMarker(GT, 55.6616363, 12.6286339);
        GM.addMarker(GT, 55.6561181, 12.6318365);
        GM.addMarker(GT, 55.6454214, 12.6382523);
        GM.addMarker(GT, 55.6356029, 12.6470446);
        GM.addMarker(GT, 55.6295707, 12.6493835);
        GM.addMarker(GT, 55.6628996, 12.5848281);
        GM.addMarker(GT, 55.6566840, 12.5885403);
        GM.addMarker(GT, 55.6381281, 12.5827896);
        GM.addMarker(GT, 55.6290559, 12.5792598);
        GM.addMarker(GT, 55.6192969, 12.5754511);
        GM.addMarker(GT, 55.6452125, 12.5855576);
    },

    getCookie: function(key) {
        if (document.cookie.length > 0) {
            start = document.cookie.indexOf(key + "=");
            if (start != -1) {
                start = start + key.length + 1;
                end = document.cookie.indexOf(";", start);
                if (end == -1) end = document.cookie.length;
                return unescape(document.cookie.substring(start, end));
            }
        }
        return "";
    },

    setCookie: function(key, value, expiryDays, path, domain, secure) {
        // set time, it's in milliseconds
        var today = new Date();
        today.setTime(today.getTime());

        /*
        if the expiryDays variable is set, make the correct
        expiryDays time, the current script below will set
        it for x number of days, to make it for hours,
        delete * 24, for minutes, delete * 60 * 24
        */
        if (expiryDays) {
            expiryDays = expiryDays * 1000 * 60 * 60 * 24;
        }
        var expiryDate = new Date(today.getTime() + (expiryDays));

        document.cookie = key + "=" + escape(value) +
		((expiryDays) ? ";expires=" + expiryDate.toGMTString() : "") +
		((path) ? ";path=" + path : "") +
		((domain) ? ";domain=" + domain : "") +
		((secure) ? ";secure" : "");
    },

    addLoadEvent: function(func) {
        var oldonload = window.onload;
        if (typeof window.onload != 'function') {
            window.onload = func;
        }
        else {
            window.onload = function() {
                oldonload();
                func();
            }
        }
    },

    loadAccordion: function() {
        $$('#content .accordion h4.toggler').each(function(element) {
            element.addEvent('mouseenter', function() {
                element.addClass('hover');
            });

            element.addEvent('mouseleave', function() {
                element.removeClass('hover');
            });
        });


        var accordion = new Accordion('#content .accordion h4.toggler', '#content .accordion div.element',
		{
		    show: 0,
		    display: 0,
		    opacity: false,
		    height: true,
		    alwaysHide: false,
		    duration: 300,
		    transition: Fx.Transitions.Quad.easeOut,
		    onActive: function(toggler, element) {
		        toggler.addClass('selected');
		    },
		    onBackground: function(toggler, element) {
		        toggler.removeClass('selected');
		    }
		}, $('content'));
    }
};

Site.addLoadEvent( Site.start );	// changed from domready to onload. and to not use mootools' addEvent
// window.addEvent('domready', Site.start);
