﻿var Karteninhalt = new Class({
    initialize: function() {
        this._items = new Array();
        this._dialog = $('dialog-karteninhalt');

        this._standpunkte = new Standpunkte();
        this._standpunkte.addEvent('onLoaded', this.gruppenAnzeigen.bind(this));

        this.addEvents();
    },

    addEvents: function() {
        var btn1 = $$('#kopfzeile .menubar .karteninhalt')[0];
        btn1.addEvent('click', function() {
            suche.dialogSchliessen(); 
            this.dialogAnzeigen()           
        } .bind(this));

        var btn2 = $$('#dialog-karteninhalt a')[0];
        btn2.addEvent('click', function() {
            this.dialogSchliessen();
            var str = this.getValues();
            this._standpunkte.laden(str);
        } .bind(this));
    },

    dialogAnzeigen: function() {
        if (!this._dialog.hasClass('geschlossen')) 
            return;

        this._dialog.removeClass('geschlossen')
    },

    dialogSchliessen: function() {
        if (this._dialog.hasClass('geschlossen'))
            return;
        
        this._dialog.addClass('geschlossen')
    },

    gruppenAnzeigen: function() {
        map.clearOverlays();
        var standpunkte = this._standpunkte.items();
        var parent = $$('#inhalt .seite')[0];
        var ul = new Element('ul', { 'class': 'kategorie' });
        var h1 = new Element('h1', { 'class': 'karteninhalt', 'html': standpunkte.length + ' Standpunkte ermittelt' });

        var letzteKategorie = "";

        for (var i = 0; i < standpunkte.length; i++) {
            if (letzteKategorie != standpunkte[i].getGruppe()) {
                var li = new Element('li');
                var h2 = new Element('h2', { 'html': standpunkte[i].getGruppe() });
                var a = new Element('a', { 'title': 'Liste anzeigen', 'href': '#' });
                a.grab(h2);
                li.grab(a);
                ul.grab(li);

            }
            letzteKategorie = standpunkte[i].getGruppe();
            standpunkte[i].addMarkerToMap();

        }
        parent.empty();
        parent.adopt(h1, ul);

        var items = ul.getElements('li');

        items.each(function(item, index) {
            var h2 = item.getElement('h2')
            var a = item.getElement('a')
            a.addEvent('click', function() {
                this.standpunkteAnzeigen(item, h2.get('html'));
            } .bind(this));
        } .bind(this));



    },

    standpunkteAnzeigen: function(elem, str) {
        var parent = elem;

        if (parent.getFirst('ul') != null) {
            var item = parent.getFirst('ul');

            if (item.getStyle('display') == 'none')
                item.setStyle('display', 'block');
            else
                item.setStyle('display', 'none');
            return;
        }

        var items = this._standpunkte.items();
        var ul = new Element('ul', { 'class': 'standpunkte' });

        for (var i = 0; i < items.length; i++) {
            if (items[i].getGruppe() == str) {
                var li = items[i].getListItem();
                ul.grab(li);
            }
        }

        parent.adopt(ul);
        return;

    },

    getValues: function() {
        var str = "";
        var items = this._dialog.getElements('input')
        items.each(function(item, index) {
            if (item.checked) {
                var parent = item.getParent();
                var h2 = parent.getParent().getParent().getElement('h2');
                str += ";" + h2.get('text') + "\\" + parent.get('text');
            }
        });

        if (str != "")
            str = str.substr(1);

        return str;
    }
});

var Standpunkte = new Class({
    Implements: Events,
    initialize: function() {
        this._items = new Array();
    },

    laden: function(str) {
        if (str == "") {
            alert("Bitte wählen Sie einen oder mehrere Eintrage aus.");
            return;
        }

        this.clear();

        var req = new Request({
            url: 'requests/karteninhalt.aspx',
            data: 'aktion=laden&sucheIn=' + str,
            onSuccess: function(str) {
                var res = new Results(str);

                if (res.getValue("Status") != "ok") {
                    alert(res.toString());
                    return;
                }

                var name = res.getValues("Name");
                var kategorie = res.getValues("Kategorie");
                var strasse = res.getValues("Strasse");
                var hausnummer = res.getValues("Hausnummer");
                var ortsteil = res.getValues("Ortsteil");
                var plz = res.getValues("PLZ");
                var vorwahl = res.getValues("Vorwahl");
                var telefon = res.getValues("Telefon");
                var symbol = res.getValues("Symbol");
                var symbolHoehe = res.getValues("SymbolHoehe");
                var symbolBreite = res.getValues("SymbolBreite");
                var lat = res.getValues("breite");
                var lon = res.getValues("laenge");
                var email = res.getValues("Email");
                var url = res.getValues("Url");
                var infoBild = res.getValues("InfoBild");

                for (var i = 0; i < name.length; i++) {
                    var item = new Standpunkt();
                    item.setName(name[i]);
                    item.setKategorie(kategorie[i]);
                    item.setStrasse(strasse[i]);
                    item.setHausnummer(hausnummer[i]);
                    item.setOrtsteil(ortsteil[i]);
                    item.setPLZ(plz[i]);
                    item.setVorwahl(vorwahl[i]);
                    item.setTelefon(telefon[i]);
                    item.setEmail(email[i]);
                    item.setUrl(url[i]);
                    item.setSymbol(symbol[i]);
                    item.setSymbolHoehe(symbolHoehe[i]);
                    item.setSymbolBreite(symbolBreite[i]);
                    item.setLat(lat[i]);
                    item.setLon(lon[i]);
                    item.setInfoBild(infoBild[i]);

                    this.add(item);
                }

                this.fireEvent('onLoaded')

            } .bind(this),
            onFailure: function() {
                alert('Fehler bei <<standpunkte-laden>>');
            }
        });
        req.send();
    },

    add: function(obj) {
        this._items.push(obj);
    },

    items: function() {
        return this._items;
    },

    count: function() {
        if (typeof (this._items) == "undefined")
            return null;
        else
            return this._items.length;
    },

    clear: function() {
        this._items.empty();
    }
});

var Standpunkt = new Class({
    initialize: function() {
    },

    setMarker: function(obj) {
        this._marker = obj;
    },

    markerZeigen: function() {
        var html = this.getHtml();
        this._marker.openInfoWindow(html);
    },

    getStrukturPfad: function() {
        if (typeof (this._strukturPfad) == "undefined")
            return null;
        else
            return this._strukturPfad;
    },

    setStrukturPfad: function(str) {
        this._strukturPfad = str;
    },

    getName: function() {
        if (typeof (this._name) == "undefined")
            return null;
        else
            return this._name;
    },

    setName: function(str) {
        this._name = str;
    },

    getKategorie: function() {
        if (typeof (this._kategorie) == "undefined")
            return null;
        else
            return this._kategorie;
    },

    setKategorie: function(str) {
        this._kategorie = str;
    },

    getGruppe: function() {
        if (typeof (this._kategorie) == "undefined") {
            return null;
        }
        var arr = this._kategorie.split("\\");
        return arr[0]; //+ " \\ " + arr[1];
    },

    getStrasse: function() {
        if (typeof (this._strasse) == "undefined")
            return null;
        else if (this._strasse == "")
            return null;
        else
            return this._strasse;
    },

    setStrasse: function(str) {
        this._strasse = str;
    },

    getHausnummer: function() {
        if (typeof (this._hausnummer) == "undefined")
            return null;
        else if (this._hausnummer == "")
            return null;
        else
            return this._hausnummer;
    },

    setHausnummer: function(str) {
        this._hausnummer = str;
    },

    getOrtsteil: function() {
        if (typeof (this._ortsteil) == "undefined")
            return null;
        else
            return this._ortsteil;
    },

    setOrtsteil: function(str) {
        this._ortsteil = str;
    },

    getPLZ: function() {
        if (typeof (this._plz) == "undefined")
            return null;
        else
            return this._plz;
    },

    setPLZ: function(str) {
        this._plz = str;
    },

    getVorwahl: function() {
        if (typeof (this._vorwahl) == "undefined")
            return null;
        else
            return this._vorwahl;
    },

    setVorwahl: function(str) {
        this._vorwahl = str;
    },

    getTelefon: function() {
        if (typeof (this._telefon) == "undefined")
            return null;
        else
            return this._telefon;
    },

    setTelefon: function(str) {
        if (str == "" || str == null || str == '00000')
            this._telefon = null
        else
            this._telefon = str;
    },

    getEmail: function() {
        if (typeof (this._email) == "undefined")
            return null;
        else
            return this._email;
    },

    setEmail: function(str) {
        if (str == "" || str == null)
            this._email = null;
        else
            this._email = str;
    },

    getUrl: function() {
        if (typeof (this._url) == "undefined")
            return null;
        else
            return this._url;
    },

    setUrl: function(str) {
        if (str == "" || str == null)
            this._url = null;
        else
            this._url = str;
    },

    getInfoBild: function() {
        if (typeof (this._infoBild) == "undefined")
            return null;
        else
            return this._infoBild;
    },

    setInfoBild: function(str) {
        if (str == "" || str == null)
            this._infoBild = null;
        else
            this._infoBild = str;
    },

    getSymbol: function() {
        if (typeof (this._symbol) == "undefined")
            return null;
        else
            return this._symbol;
    },

    setSymbol: function(str) {
        this._symbol = str;
    },

    getSymbolBreite: function() {
        if (typeof (this._symbolBreite) == "undefined")
            return null;
        else
            return this._symbolBreite;
    },

    setSymbolBreite: function(str) {
        this._symbolBreite = str;
    },

    getSymbolHoehe: function() {
        if (typeof (this._symbolHoehe) == "undefined")
            return null;
        else
            return this._symbolHoehe;
    },

    setSymbolHoehe: function(str) {
        this._symbolHoehe = str;
    },

    getLat: function() {
        if (typeof (this._breite) == "undefined")
            return null;
        else
            return this._breite;
    },

    setLat: function(str) {
        str = str.replace(',', '.');
        this._breite = parseFloat(str);
    },

    getLon: function() {
        if (typeof (this._laenge) == "undefined")
            return null;
        else
            return this._laenge;
    },

    setLon: function(str) {
        str = str.replace(',', '.');
        this._laenge = parseFloat(str);
    },

    addMarkerToMap: function() {
        this._point = new GLatLng(this.getLat(), this.getLon());
        
        this._marker = new GMarker(this._point, {
            icon: gibIcon(this.getSymbol(),this.getSymbolBreite(),this.getSymbolHoehe()),
            title: this.getName() 
        });
        
        GEvent.addListener(this._marker, "click", function() {
            var html = this.getHtml();
            this._marker.openInfoWindow(html)
        } .bind(this));
        
        map.addOverlay(this._marker)
    },

    getPoint: function() {
        return new GLatLng(this.getLat(), this.getLon());
    },

    getAdresse: function() {
        var str = "";
        
        if (this.getStrasse() != null)
            str += this.getStrasse();

        if (this.getHausnummer() != null)
            str += " " + this.getHausnummer();

        if (this.getPLZ() != null && this.getOrtsteil() != null)
            str += ", " + this.getPLZ() + " " + this.getOrtsteil();

        if (str == "")
            return null;
        else
            return str;
    },

    getAdresseInfoFenster: function() {
        var ul = new Element('ul');
        var li1 = new Element('li');
        var h3 = new Element('h3', { 'html': 'Adresse' });
        
        li1.grab(h3);
        ul.grab(li1);

        if (this.getStrasse() != null) {
            var li2 = new Element('li');
            var p = new Element('p', { 'html': this.getStrasse() + " " + this.getHausnummer() });
            li2.grab(p);
            ul.grab(li2);
        }

        if (this.getOrtsteil() != null) {
            var li3 = new Element('li');
            var p3 = new Element('p', { 'html': this.getPLZ() + " " + this.getOrtsteil() });
            li3.grab(p3);
            ul.grab(li3);
        }

        if (ul.getChildren().length == 1)
            return null;
        else
            return ul;
    },

    getKontaktInfoFenster: function() {
        var ul = new Element('ul');
        var li1 = new Element('li');
        var h3 = new Element('h3', { 'html': 'Kontakt' });
        
        li1.grab(h3);
        ul.grab(li1);

        if (this.getRufnummer() != null) {
            var li2 = new Element('li');
            var p = new Element('p', { 'html': this.getRufnummer() });
            li2.grab(p);
            ul.grab(li2);
        }

        if (this.getEmail() != null) {
            var li2 = new Element('li');
            //var p = new Element('p', { 'html': this.getEmail() });
            var a = new Element('a', { 'html': 'E-Mail schreiben', 'href': 'mailto:' + this.getEmail() });
            li2.grab(a);
            ul.grab(li2);
        }

        if (this.getUrl() != null) {
            var li3 = new Element('li');
            //var p3 = new Element('p', { 'html': this.getUrl() });
            var a2 = new Element('a', { 'html': 'Webseite aufrufen', 'href': this.getUrl(), 'target': '_blank' });
            li3.grab(a2);
            ul.grab(li3);
        }
        var anzahl = ul.getChildren().length;
        if (ul.getChildren().length == 1)
            return null;
        else
            return ul;
    },

    getRufnummer: function() {
        var str = null;
        if (this.getVorwahl() != null && this.getTelefon() != null)
            str = this.getVorwahl() + " - " + this.getTelefon();

        return str;
    },

    getHtml: function() {
        // Info-Fenster erstellen
        var div = new Element('div', { 'class': 'info-fenster' });

        // Überschrift/Name erstellen
        var h2 = new Element('h2', { 'html': this.getName() });

        // Kategorie erstellen
        var p = new Element('p', { 'class': 'kategorie', 'html': this.getKategorie() });
        div.adopt(h2, p);

        // Vorschaubild erstellen
        if (this.getInfoBild() != null) {
            var img = new Element('div', { 'class': 'rechts' });
            img.setStyle('background', '#e4e4e4 url(images/standorte/' + this.getInfoBild() + ') no-repeat center center');
            div.grab(img);
        }

        // Adresse erstellen
        if (this.getAdresseInfoFenster() != null) {
            div.grab(this.getAdresseInfoFenster());
        }

        // Kontakinformationen erstellen
        if (this.getKontaktInfoFenster() != null) {
            div.grab(this.getKontaktInfoFenster());
        }

        // Fusszeile erstellen
        var fusszeile = new Element('div', { 'class': 'fusszeile' });

        var a1 = new Element('a', { 'html': 'Zoom auf Strasse', 'href': '#' });

        a1.addEvent('click', function() {
            ZoomAufStrasse(this.getLat(), this.getLon());
        } .bind(this)
        );

        var a2 = new Element('a', { 'html': 'Zoom auf Ort', 'href': '#' });

        a2.addEvent('click', function() {
            ZoomAufOrt(this.getLat(), this.getLon());
        } .bind(this)
        );

        fusszeile.adopt(a1, a2);

        div.grab(fusszeile);

        return div;
    },

    getListItem: function() {
        var li = new Element('li', { 'class': this.getSymbol() });
        var h3 = new Element('h3', { 'html': this.getName() });
        var a = new Element('a', { 'title': 'Standort in der Karte anzeigen', 'href': '#' });
        
        a.addEvent('click', function() {
            this.markerZeigen();
        } .bind(this));
        
        a.grab(h3);
        
        var p = new Element('p', { 'class': 'kategorie', 'html': this.getKategorie() });
        li.adopt(a, p);

        if (this.getAdresse() != null) {
            var p2 = new Element('p', { 'html': this.getAdresse() });
            li.grab(p2);
        }

        if (this.getRufnummer() != null) {
            var p3 = new Element('p', { 'html': this.getRufnummer() });
            li.grab(p3);
        }

        return li;

    },

    getThumbnail: function() {

    }


});
