function querystring(myQS) {
    
    var querystring = location.search;
    var groups = querystring.substring(1).split("&");
 
    var group;
    var querystringvalue = ""; 

    for (var i = 0; i < groups.length; i++) {   
        group = groups[i].split("=");   

        if (group[0] == myQS) {
            querystringvalue += group[1] + ",";
        }
    }
    
    return querystringvalue.substr(0,querystringvalue.length-1);
}


String.prototype.format = function()
{
    var str = this;

    for(var i=0; i < arguments.length; i++){
        var re = new RegExp('\\{' + (i) + '\\}','gm');
        str = str.replace(re, arguments[i]);
    }
    
    return str;
}

var map_loaded = false;

function loadMap() {
    
    try{
    
        if (GBrowserIsCompatible() && !Headlines.loading && !map_loaded) {
            
            var map = new GMap2(document.getElementById("gmap"));
            map.enableContinuousZoom();
            map.addControl(new GMapTypeControl());
            map.addControl(new GSmallZoomControl());
            
            //directionsPanel = document.getElementById("gdir");
            //directions = new GDirections(map, directionsPanel);
            //directions.load("Oslo, Norge to Valle i Bamble, Norge");
            
            GEvent.addListener(map, "zoomend", function() {
                setCookie("GMAPCENTERLAT", map.getCenter().lat());
                setCookie("GMAPCENTERLNG", map.getCenter().lng());
                setCookie("GMAPZOOM", map.getZoom());
                
                var d = document.getElementById("coords");
                
                var lang = map.getCenter().lng();
                var lat = map.getCenter().lat();
                
                d.innerHTML = "Breddegrad<br /> " + lat + "<br /> lengdegrad<br /> " + lang;
                
                d = document.getElementById("coordsUrl");
                d.value = "http://www.ettsted.com/Default.aspx?mode=map&lat=" + lat + "&lng=" + lang + "&zoom=" + map.getZoom();
            });
            
            GEvent.addListener(map, "click", function() {
                var lang = map.getCenter().lng();
                var lat = map.getCenter().lat();
                
                d.innerHTML = "Breddegrad<br /> " + lat + "<br /> lengdegrad<br /> " + lang;
            });
            
            var lat = getCookie("GMAPCENTERLAT");
            var lng = getCookie("GMAPCENTERLNG");
            var zoom = getCookie("GMAPZOOM");
            
            if(querystring("mode") == "map"){
                lat = querystring("lat");
                lng = querystring("lng");
                zoom = querystring("zoom");
            }
            
            //alert(zoom);
            
            if(lat != "" && lng != "" && zoom != "")
            {
                map.setCenter(new GLatLng(parseFloat(lat), parseFloat(lng)), parseInt(zoom));
            }
            else{
                map.setCenter(new GLatLng(60.0, 10), 3);
            }
            
            map_loaded = true;
            
            
        }
    }
    catch(e){
    }
}

function setCookie(cookieName,cookieValue) {
    var today = new Date();
    var expire = new Date();
    var nDays = 365;
    if (nDays==null || nDays==0) nDays=1;
        expire.setTime(today.getTime() + 3600000*24*nDays);
    document.cookie = cookieName+"="+escape(cookieValue)
    + ";expires="+expire.toGMTString();
}

function getCookie(cookieName) {
    var theCookie=""+document.cookie;
    var ind=theCookie.indexOf(cookieName);
    if (ind==-1 || cookieName=="") 
        return ""; 
    var ind1=theCookie.indexOf(';',ind);
    if (ind1==-1) 
        ind1=theCookie.length; 
    
    return unescape(theCookie.substring(ind+cookieName.length+1,ind1));
}

var SearchEngines = {
    GOOGLE: "http://www.google.no/search?hl=no&q={0}&btnG=Google-s%C3%B8k&meta=",
    KVASIR: "http://www.kvasir.no/nettsok/searchResult.html?searchExpr={0}&searchRegion=country",
    SESAM: "http://www.gulesider.no/tk/search.c?q={0}&x=0&y=0",
    ALTAVISTA: "http://www.altavista.com/web/results?itag=ody&q={0}&kgs=0&kls=0"
}

var Headlines = {
    
    layout: null,
    ds: null,
    view: null,
    viewSelected: 0,
    timer: null,
    btn_search: null,
    loadingIndicator: null,
    
    loading: true,
    
    STARTPAGE: null,
    NEWSFEED: null,
    SEARCHENGINE: null,
    
    init: function(){
    
        this.setCookies();
        this.setSearchEngine();
        this.setLayout();
        this.setButtons();
        this.setDataSource();
        this.setGrid();
        this.setTopPanel();
        this.setCustomURLs();
        this.setOptions();
        this.setStartPage();
        this.setMapSize();
        this.setSearch();
    
        var searchBoxElement = Ext.get("searchBox");
        searchBoxElement.focus();
    
        this.loadingIndicator = Ext.get("loadingBar");
        this.loadingIndicator.hide();
        
        // Remove mask
        setTimeout("Ext.get('loading').hide()",      1000);
        setTimeout("Ext.get('loading-mask').hide()", 1200);
        
        // Check for favourites import
        if(getCookie("FAVORITESIMPORTED") != ""){
            
        }
    },
    
    reload: function()
    {
        this.loadingIndicator.show();
        this.layout.beginUpdate();
        
        this.ds.proxy = new Ext.data.HttpProxy({url: 'GetFeed.aspx?url=' + encodeURIComponent(getCookie("NEWSSOURCE"))});
        
        this.ds.load();
        this.timer = setTimeout("Headlines.reload()",120000);
    },
    
    setSearch: function(){
        this.searchDs = new Ext.data.Store({
            proxy: new Ext.data.HttpProxy({
                url: 'GetSearch.aspx',
                method: 'GET'
            }),
            reader: new Ext.data.XmlReader({
                   // records will have an "Item" tag
                   record: 'CompleteSuggestion'
               }, [
                   // set up the fields mapping into the xml doc
                   // The first needs mapping, the others are very basic
                   {name: 'suggestion', mapping: 'suggestion'}
               ])
        });

        // Custom rendering Template
        var resultTpl = new Ext.Template(
            '<div class="search-item">',
                '<h3><span>{suggestion}</span></h3>',
            '</div>'
        );
        
        this.search = new Ext.form.ComboBox({
            store: this.searchDs,
            displayField:'title',
            typeAhead: false,
            loadingText: 'S&oslash;k...',
            width: 300,
            pageSize:10,
            hideTrigger:true,
            tpl: resultTpl,
            onSelect: function(record){ // override default onSelect to do redirect
            Ext.get("searchBox").dom.value = record.data.suggestion;
            Headlines.search.collapse();
        }
        });
        
        
        // apply it to the exsting input element
        this.search.applyTo('searchBox');
    },
    
    setCookies: function(){
    
        // STARTPAGE
        if(getCookie("STARTPAGE") == ""){
            setCookie("STARTPAGE", "NEWS");
            this.STARTPAGE = "NEWS";
        }
        else{
            this.STARTPAGE = getCookie("STARTPAGE");
        }
        
        // NEWSFEED
        if(getCookie("NEWSFEED") == ""){
            setCookie("NEWSFEED", "NRK");
            this.NEWSFEED = "NRK";
        }
        else{
            this.NEWSFEED = getCookie("NEWSFEED");
        }
        
        // NEWSSOURCE
        if(getCookie("NEWSSOURCE") == ""){
            setCookie("NEWSSOURCE", "http://www.nrk.no/nyheiter/siste.rss");
            this.NEWSSOURCE = "http://www.nrk.no/nyheiter/siste.rss";
        }
        else{
            this.NEWSSOURCE = getCookie("NEWSFEED");
        }
    },
    
    setCustomURLs: function(){
        var urls = this.getURLsArray();
        var holder = Ext.get("customLinks").dom;
        
        var links = new Array();
        var j = 0;
        
        for(var i = 0; i < urls.length-1; i = i + 2) 
        {
            links[j] = "<a href = '" + urls[i+1] + "'>" + urls[i] + "</a><br />";
            j++;
        }
        
        links.sort();
        
        for(var i = 0; i < links.length; i = i + 1) 
        {
            holder.innerHTML = holder.innerHTML + links[i];
        }
    },
    
    getURLsArray: function(){
        return getCookie("CUSTOMURLS").split(";");
    },
    
    setMapSize: function(){
        
        if (false){//parseInt(navigator.appVersion)>3) {
        
            var map = document.getElementById("gmap");
            var route = document.getElementById("route");
            
            if (navigator.appName=="Netscape") {
                map.style.width = window.innerWidth-200;
                map.style.height = window.innerHeight;
                route.style.width = window.innerWidth-200;
                route.style.height = window.innerHeight;
            }
            if (navigator.appName.indexOf("Microsoft")!=-1) {
                map.style.width = document.body.offsetWidth-29;
                map.style.height = document.body.offsetHeight-129;
                route.style.width = document.body.offsetWidth-29;
                route.style.height = document.body.offsetHeight-129;
            }
        }
    },
    
    setSearchEngine: function(){
        var radios = document.getElementsByName("searchEngine");
        
        for(var i = 0; i < radios.length; i++){
            var radio = Ext.get(radios[i]);
            
            if(radio.getValue() == this.SEARCHENGINE)
                radio.dom.checked = true;
            
        }
    },
    
    setStartPage: function(){
    
        this.loading = false;
    
        // Set correct start page
        switch (this.STARTPAGE){
            case "LINKS":
                this.layout.getRegion("center").showPanel(0);
            break;
            case "MAP":
                this.layout.getRegion("center").showPanel(1);
                loadMap();
            break;
            case "NEWS":
                this.layout.getRegion("center").showPanel(2);
                this.ds.load();
                this.timer = setTimeout("Headlines.reload()",120000);
            break;
        }
    },
    
    setDataSource: function(){
        
        // create the Data Store
        this.ds = new Ext.data.Store({
        
            // load using HTTP
            proxy: new Ext.data.HttpProxy({url: 'GetFeed.aspx?url=' + encodeURIComponent(getCookie("NEWSSOURCE"))}),

            // the return will be XML, so lets set up a reader
            reader: new Ext.data.XmlReader({
                   // records will have an "Item" tag
                   record: 'Item'
               }, [
                   // set up the fields mapping into the xml doc
                   // The first needs mapping, the others are very basic
                   {name: 'Item', mapping: 'Feed > Item'},
                   'Title', 'Description', 'Link'
               ])
        });
        
        this.ds.addListener("load", this.setViewSelectedIndex, this);
    },
    
    setButtons: function(){
        var holder = Ext.get("searchButton");
        this.btn_search = new Ext.Button(holder, {type: "button"});
        this.btn_search.setText("S&oslash;k");
        this.btn_search.on('click', this.excecuteSearchButton, this);
        this.btn_search.show();
        
        var holder = Ext.get("add-link-button");
        this.btn_link = new Ext.Button(holder, {type: "button"});
        this.btn_link.setText("Legg til link");
        this.btn_link.on('click', this.excecuteLinkButton, this);
        this.btn_link.show();
    },
    
    setLayout: function(){
        // create the main layout
            this.layout = new Ext.BorderLayout(document.body, {
                monitorWindowResize: true,
                north: {
                    split:false,
                    initialSize: 100,
                    titlebar: false
                },
                east: {
                    split:true,
                    initialSize: 175,
                    minSize: 175,
                    maxSize: 400,
                    titlebar: false,
                    collapsible: false,
                    tabPosition: 'top',
                    autoScroll:false,
                    collapsed: false,
                    cmargins: {top:0,bottom:2,right:2,left:2}
                },
                center: {
                    titlebar: false,
                    autoScroll:true,
                    tabPosition: 'top',
                    closeOnTab: true,
                    alwaysShowTabs: true,
                    resizeTabs: true
                }
            });
            
            // Start layout update
            this.layout.beginUpdate();
            
            var linksPanel = new Ext.ContentPanel('links', {title: 'Linker', fitToFrame:true});
            this.layout.add('center', linksPanel);
            
            var mapPanel = new Ext.ContentPanel('map', {title: 'Kart', fitToFrame:true});
            mapPanel.addListener("activate", this.tabs_click, this);
            
            var setupPanel = new Ext.ContentPanel('setup', {title: 'Innstillinger', fitToFrame:true});
            setupPanel.addListener("activate", this.tabs_click, this);
            
            var gogolPanel = new Ext.ContentPanel('gogol', {title: 'Reklame', fitToFrame:true});
            
            var region = this.layout.getRegion("center");
            
            // News form
            
            var holder = Ext.get("newsPickButton");
            var btn = new Ext.Button(holder, {type: "button"});
            btn.setText("Lagre");
            btn.on('click', this.exceuteSaveNewsButton, this);
            btn.show();
            
            linksPanel.addListener("activate", this.tabs_click, this);
            this.layout.add('center', mapPanel);
            this.layout.add('east', gogolPanel);
            this.layout.add('east', setupPanel);
            
            this.layout.getRegion("east").showPanel(0);
            
            // Add keylisteners to textboxes
            Ext.get("searchBox").addKeyListener(
                {key: [10,13]},
                this.excecuteSearchButton
            );
            
            // End laytout update
            this.layout.endUpdate();
    },
    
    setTopPanel: function(){
        
        var topPanel = new Ext.ContentPanel('topPanel', {title: 'S&oslash;k', fitToFrame:true});
        this.layout.add('north', topPanel);
        Ext.get("topPanel").dom.style.display = "block";
    },
    
    setGrid: function(){
        
        var el = Ext.get("feed-view");
        
        var tpl = new Ext.Template(
              '<div class = "feed">' + 
              '<div class="feed-item">' +
              '<div class="feed-title" style = "font-weight: bold;">{Title}</div>' +
              '<div class="feed-description">{Description}</div>' +
              '<a href = "{Link}" onclick = "javascript:window.location = (\'{Link}\')">Les mer...</a>' + 
              '</div></div>'
        );
        
        this.view = new Ext.View(el, tpl, {store: this.ds, singleSelect:true, selectedClass:'selected-article'});
        this.view.addListener("click", this.setViewSelected, this);

        var newsPanel = new Ext.ContentPanel('feed-grid', {title: 'Nyheter', fitToFrame:true, autoScroll: true});
        this.layout.add('center', newsPanel);
        
        newsPanel.addListener("activate", this.tabs_click, this);
    },
    
    setOptions: function(){
        
    },
    
    showLinkDialog : function(){
        if(!this.dialog){ // lazy initialize the dialog and only create it once
            this.dialog = new Ext.LayoutDialog("link-dlg", { 
                    modal:true,
                    width:450,
                    height:300,
                    shadow:true,
                    minWidth:450,
                    minHeight:300,
                    proxyDrag: true,
                    center: {
                        autoScroll:true,
                        tabPosition: 'top',
                        closeOnTab: true,
                        alwaysShowTabs: true
                    }
            });
            
            var layout = this.dialog.getLayout();
            layout.beginUpdate();
            layout.add('center', new Ext.ContentPanel('link-dlg-panel', {title: 'Informasjon'}));
            layout.endUpdate();
        }
        this.dialog.show(Ext.get("add-link-button").dom);
    },
      
    setViewSelected: function(view, index, node, e){
        var sel = view.getSelectedIndexes();
        this.viewSelected = sel[0];
        this.layout.endUpdate();
    },
    
    setViewSelectedIndex: function(store, records, options){
        this.view.select(this.viewSelected, false, true);
        setTimeout("Headlines.loadingIndicator.hide()", 1500);
    },
    
    exceuteSaveNewsButton: function(){
        var radios = document.getElementsByName("newsPickRadio");
        
        for(var i = 0; i < radios.length; i++){
            var radio = Ext.get(radios[i]);
            if(radio.dom.checked){
                switch (radio.getValue()){
                    case "NRK":
                        setCookie("NEWS", "NRK");
                        setCookie("NEWSSOURCE","http://www.nrk.no/nyheiter/siste.rss");
                    break;
                    case "DAGBLADET":
                        setCookie("NEWS", "DAGBLADET");
                        setCookie("NEWSSOURCE","http://www.dagbladet.no/rss/nyheter/");
                    break;
                    case "VG":
                        setCookie("NEWS", "VG");
                        setCookie("NEWSSOURCE","http://www1.vg.no/rss/create.php?categories=10,12&keywords=&limit=10");
                    break;
                    case "ITAVISEN":
                        setCookie("NEWS", "ITAVISEN");
                        setCookie("NEWSSOURCE","http://www.itavisen.no/rss/");
                    break;
                    case "HARDWARE":
                        setCookie("NEWS", "HARDWARE");
                        setCookie("NEWSSOURCE","http://www.hardware.no/feeds/general.xml");
                    break;
                }
            }
        }
        
        this.reload();
        
        this.layout.getRegion("center").showPanel(2);
    },
    
    tabs_click: function(){
        var region = this.layout.getRegion("center");
        var panel = region.getActivePanel();
    
        switch (panel.title){
            case "Linker":
                setCookie("STARTPAGE", "LINKS");
            break;
            case "Kart":
                setCookie("STARTPAGE", "MAP");
                loadMap();
            break;
            case "Nyheter":
                setCookie("STARTPAGE", "NEWS");
                if(!this.loading){
                    this.ds.load();
                    this.timer = setTimeout("Headlines.reload()",120000);
                }
            break;
        }
    },
    
    excecuteSearchButton: function(){
        var searchBoxElement = Ext.get("searchBox");
        var searchArguments = searchBoxElement.getValue();
        
        if(Headlines.search.isExpanded())
            return "";
        
        if(searchArguments == ""){
            Ext.Msg.show({
               title:'Tomt s&oslash;kefelt',
               msg: 'Du m&aring; fylle ut s&oslash;kefeltet med s&oslash;keord.',
               buttons: Ext.Msg.OK
            });
        }
        else{
            var radios = document.getElementsByName("searchEngine");
            
            for(var i = 0; i < radios.length; i++){
                var radio = Ext.get(radios[i]);
                if(radio.dom.checked){
                    switch (radio.getValue()){
                        case "GOOGLE":
                            url = SearchEngines.GOOGLE.format(encodeURIComponent(searchArguments));
                            window.location = url;
                        break;
                        case "KVASIR":
                            url = SearchEngines.KVASIR.format(encodeURIComponent(searchArguments));
                            window.location = url;
                        break;
                        case "SESAM":
                            url = SearchEngines.SESAM.format(encodeURIComponent(searchArguments));
                            window.location = url;
                        break;
                        case "ALTAVISTA":
                            url = SearchEngines.ALTAVISTA.format(encodeURIComponent(searchArguments));
                            window.location = url;
                        break;
                        case "NEWSSEARCH":
                            this.excecuteNewsSearch(searchArguments);
                        break;
                    }
                }
            }
        }
    },
    
    excecuteNewsSearch: function(sArgs){

        this.NEWSSOURCE = "GetFeed.aspx?url=" + encodeURIComponent("http://sesam.no/search/?q=" + sArgs + "&x=0&y=0&c=d&output=rss");
        
        this.timer = null;
        
        this.loadingIndicator.show();
        this.layout.beginUpdate();
        
        this.ds.proxy = new Ext.data.HttpProxy({
                                        url: this.NEWSSOURCE
                                    }
                              ); 
        this.ds.load();
        this.layout.getRegion("center").showPanel(2);
        
        this.loadingIndicator.hide();
    },
    
    excecuteLinkButton: function(){
    
        var title = Ext.get("linkTitle").dom.value;
        var url   = Ext.get("linkURL").dom.value;
        
        setCookie("CUSTOMURLS", getCookie("CUSTOMURLS") + title + ";" + url + ";");
        
        Ext.get("customLinks").dom.innerHTML = "";
        this.setCustomURLs();
        
        this.dialog.hide();
    },
    
    deleteLinks: function(){
        setCookie("CUSTOMURLS", "");
        Ext.get("customLinks").dom.innerHTML = "";
    }
}