﻿/* Start config variables - please customize location of image ordner and translations of button texts change*/
var PROVIDERURL = "/worldwide-provider.php";
// button aus localer js datei
//var buttons = {
//    'vcard': 'save VCard',
//    'print': 'print'
//};
var centerInit = {
    'lat' : '',
    'lon' : ''
};
/* End config variables */
var merchants = new Merchants();
function initApp() {
    var officeMap = new OfficeApp.Map();
}
var OfficeApp = {};
OfficeApp.Map = function() {
    var map = new GMap2(document.getElementById("offices-map"));
    //map.disableDragging();
    $.getJSON('http://www.pferd.com/admin/servlet/GoogleServlet.php', {getGeoCodes : 1, search : $('#country').val()}, function(data){
       map.setCenter(new GLatLng(parseFloat(data.lat), parseFloat(data.lon)), 5);
    });
    var mapControl = new GLargeMapControl();
    map.addControl(mapControl);
    merchants.setMap(map);
    GEvent.addListener(map, 'zoomend', function() {
        this.clearOverlays();
        merchants.setZoom(true);
        merchants.setMarkers();
        merchants.setZoom(false);
    });
    GEvent.addListener(map, 'dragstart', function() {
        if (this.infoBox) {
            this.removeOverlay(this.infoBox);
        }
    });
}
G_NORMAL_MAP.getMinimumResolution = function(){return 5};
G_NORMAL_MAP.getMaximumResolution = function(){return 15};
function Merchants() {
    this.xml;
    this.map;
    this.zoom = false;
    this.plzLength = 0;
}
Merchants.prototype.setZoom = function(zoom) {
    this.zoom = zoom;
}
Merchants.prototype.setXml = function(xml) {
    this.xml = xml;
}
Merchants.prototype.setMap = function(map) {
    this.map = map;
}
Merchants.prototype.getMap = function() {
    return this.map;
}
Merchants.prototype.setMarkers = function() {
    if (this.xml) {
        this.map.clearOverlays();
        var markers = this.xml.documentElement.getElementsByTagName("marker");
        var center  = this.xml.documentElement.getElementsByTagName("center");
        var countMarkers = markers.length;
        for (var i = 0; i < countMarkers; i++) {
            var latlng = new GLatLng(parseFloat(markers[i].getAttribute("lat")), parseFloat(markers[i].getAttribute("lng")));
            var icon = new GIcon(G_DEFAULT_ICON);
            icon.image = "/images/pferd_zeiger_schatten.png";
            icon.iconSize = new GSize(21, 21);
            icon.iconAnchor = new GPoint(0, 0);
            icon.shadow = '';
            var marker = new GMarker(latlng, {
                icon: icon
            });
            marker.content = {
                "id": markers[i].getAttribute("id"),
                "title": markers[i].getAttribute("title"),
                "short": markers[i].getAttribute("short"),
                "name": markers[i].getAttribute("name"),
                "address": markers[i].getAttribute("address"),
                "plz": markers[i].getAttribute("plz"),
                "ort": markers[i].getAttribute("ort"),
                "phone": markers[i].getAttribute("phone"),
                "fax": markers[i].getAttribute("fax"),
                "email": markers[i].getAttribute("email"),
                "homepage": markers[i].getAttribute("homepage")
            };

            GEvent.addListener(marker, 'click', function() {
                if (merchants.getMap().infoBox) {
                    merchants.getMap().removeOverlay(merchants.getMap().infoBox);
                }
                var infoBox = new OfficeInfobox(this.content);
                merchants.getMap().infoBox = infoBox;
                merchants.getMap().addOverlay(infoBox);
            });
            this.map.addOverlay(marker);
        }

    if (!this.zoom && countMarkers)
        {
            var zoomlevel;
            switch (countMarkers)
            {
                case 1:
                    zoomlevel = 15;
                break;
                case 2:
                case 3:
                    zoomlevel = 11;
                break;
                case 4:
                case 5:
                    zoomlevel = 7;
                break;
                default:
                    zoomlevel = 6;
                break;
            }
            this.map.setCenter(new GLatLng(center[0].getAttribute("lat"), center[0].getAttribute("lng")), zoomlevel);
        }
    }
}
function OfficeInfobox(content) {
    this.content_ = content;
    this.width  = 300;
    this.height = 200;
    this.left   = 109;
    this.top    = 40;
    this.div;
}
OfficeInfobox.prototype = new GOverlay();
OfficeInfobox.prototype.initialize = function(map) {
    var div = document.createElement("div");
    div.id  = "detailLayer";
    div.style.width  = this.width + "px";
    div.style.height = this.height + "px";
    div.style.left = this.left +"px";
    div.style.top = this.top +"px";
    div.style.position = "absolute";
    var html = '<div class="officeLayer">' +
                    '<div class="h2Outer">' +
                        '<div class="headline">' + this.content_['name'] + '</div>' +
                        '<div class="icClose"><a href="javascript:void(0);" id="closeImg"><img src="/images/ic_close.gif" /></a></div>' +
                        '<div class="clear2">&nbsp;</div>' +
                    '</div>' +
                    '<div class="officeLayerContent heightAndScroll">' +
                        '<div class="addressBox">' + this.content_.address + '<br />' + this.content_.plz + ' ' + this.content_.ort + '</div>';
        if (this.content_.phone != "" || this.content_.fax != "" || this.content_.email != "" || this.content_.homepage != "")
        {
            html += '<div class="addressBox">';
            if (this.content_.phone != "")
            {
                html += '<span class="addressLeft">Tel:</span> ' + '<a href="phone:' + this.content_.phone + '">' + this.content_.phone + '</a><br />';
            }
            if (this.content_.fax != "")
            {
                html += '<span class="addressLeft">Fax:</span> ' + this.content_.fax + '<br />';
            }
            if (this.content_.email != "")
            {
                html += '<span class="addressLeft link">E-Mail:</span> ' + '<a href="mailto:' + this.content_.email + '" class="weiterlink">' + this.content_.email + '</a><br />';
                html += '<div class="clearleft">&nbsp;</div>';

            }
            if (this.content_.homepage != "" && this.content_.homepage != "http://")
            {
                html += '<span class="addressLeft';
                if (this.content_.email == "")
                {
                html += ' link';
                }
                html += '">URL:</span> ' + '<a href="' + this.content_.homepage + '" target="_blank" class="weiterlink">' + this.content_.homepage + '</a>';
            }                
            html += '<div class="clearleft">&nbsp;</div>' +'</div>';
        }
            html += '</div>' +
                    '<div class="officeLayerContent">' +
                        '<div class="addressBox boxMarginTop">' + 
                            '<span class="addressLeft">&nbsp;</span> ' +
                            '<span class="addressLeft2"><a href="' + PROVIDERURL + '?method=getvcard&kdnr=' + this.content_.id + '" class="vcardlink">' + buttons.vcard + '</a></span>' +
                            '<span class="addressLeft"><a href="javascript:window.print();" class="printlink">' + buttons.print + '</a></span>' +
                            '<div class="clearleft">&nbsp;</div>' +
                        '</div>' +
                    '</div>' +
               '</div>';
    div.innerHTML = html;
    map.getPane(G_MAP_MARKER_PANE).appendChild(div);
    var closeImg = document.getElementById("closeImg");
    function removeInfoBox(ib, m) {
        return function() {
            GEvent.trigger(ib, "closeclick");
            m.removeOverlay(ib);
        };
    }
    GEvent.addDomListener(closeImg, 'click', removeInfoBox(this, map));
    this.map_ = map;
    this.div = div;
}
OfficeInfobox.prototype.remove = function() {
    this.div.parentNode.removeChild(this.div);
}
OfficeInfobox.prototype.copy = function() {
    return new OfficeInfobox(this.content_);
}
OfficeInfobox.prototype.redraw = function(force) {
    if (!force) return;
    var c1 = this.map_.fromLatLngToDivPixel(this.map_.getBounds().getSouthWest());
    var c2 = this.map_.fromLatLngToDivPixel(this.map_.getBounds().getNorthEast());
    this.div.style.width  = this.width + "px";
    this.div.style.height = this.height + "px";
    this.div.style.left = (c1.x + this.left) +"px";
    this.div.style.top = (c2.y + this.top) +"px";
}

$(document).ready(function() {
    $("#dealertable").tablesorter();
    
    if ($(document).getUrlParam("plz") != null)
    {
        $("#suchfeld").val($(document).getUrlParam("plz"));
        getupdate($(document).getUrlParam("plz"),$(document).getUrlParam("country"));
    umkreis();
    }
    
    function IsNumeric(sText)
    {
       var ValidChars = "0123456789";
       var IsNumber=true;
       var Char;
    
     
       for (i = 0; i < sText.length && IsNumber == true; i++) 
          { 
          Char = sText.charAt(i); 
          if (ValidChars.indexOf(Char) == -1) 
             {
             IsNumber = false;
             }
          }
       return IsNumber;
       
       }
     
    function umkreis()
    {
        if (IsNumeric($("#suchfeld").val()))
        {
            if (String($("#suchfeld").val()).length > 3)
            {
                $("#unkreissuche").css("display","block");
            } else
            {
                $("#unkreissuche").css("display","none");
            }
        } else
        {
            if (String($("#suchfeld").val()).length > 2)
            {
                $("#unkreissuche").css("display","block");
            } else
            {
                $("#unkreissuche").css("display","none");
            }
        }
    }   
 
    function render(xml)
    {
        var $ret = "";
        
        var $hinweis = 'block';
        var $table = 'none';
        
        merchants.setXml(xml);
        merchants.setMarkers();
        
        $(xml).find("marker").each(function(){
           var marker = $(this);
           $hinweis = 'none';
           $table = 'block';
           $link = marker.attr("homepage").length > 9 ? '<a target=\"_blank\" href=\"'+ marker.attr("homepage") +'\" >' + marker.attr("name") + '</a>' : marker.attr("name");
           $ret += '<tr><td class="darker">'+ $link +'</td><td class="lighter">' + marker.attr("address") + '</td><td class="darker">' + marker.attr("plz") + '</td><td class="lighter">' + marker.attr("ort") + '</td><td class="darker">' + marker.attr("dist");
           if (marker.attr("dist") != "-"){
                $ret += " km";
            }
           $ret += "</td></tr>";
        });
        $("#unkreissuchehinweis").css("display",$hinweis);
        $("#dealertable").css("display",$table);
        $("#dealertable tbody").html($ret);
        
        $("#dealertable tr:even").addClass("darkgrey");
        $("#dealertable tr:odd").addClass("lightgrey");
        
        $("#dealertable").trigger("update");
    };
    
    function getupdate(search, country) 
    {
        $("#loading").css("visibility","visible");
        $.ajax({type: "post", 
                url: PROVIDERURL,
                dataType: ($.browser.msie) ? "text" : "xml",
                data: { method: "getdealersfilter",
                        filter: search,
                        country: country },
                success: function(data){
                     var xml;
                     if (typeof data == "string") {
                       xml = new ActiveXObject("Microsoft.XMLDOM");
                       xml.async = false;
                       xml.loadXML(data);
                     } else {
                       xml = data;
                     }
                     render(xml);
                     $("#result").css("display","block");
                     $("#loading").css("visibility","hidden");
                },
                error: function(data){
                    $("#loading").css("visibility","hidden");
                    $("#unkreissuchehinweis").css("display","block");
                }
           });
    };
    
    function getupdatedist(search, distance, country) 
    {
        $("#loading").css("visibility","visible");
        $.ajax({type: "post", 
                url: PROVIDERURL,
                dataType: ($.browser.msie) ? "text" : "xml",
                data: { method: "getdealersdistance",
                        filter: search,
                        distance: distance,
                        country: country },
                success: function(data){
                     var xml;
                     if (typeof data == "string") {
                       xml = new ActiveXObject("Microsoft.XMLDOM");
                       xml.async = false;
                       xml.loadXML(data);
                     } else {
                       xml = data;
                     }
                     render(xml);
                     $("#result").css("display","block");
                     $("#loading").css("visibility","hidden");
                },
                error: function(data){
                    $("#loading").css("visibility","hidden");
                }
           });
    };
    $("#suchfeld").keyup(function(){
        if ((String($("#suchfeld").val()).length > 0) && (String($("#suchfeld").val()).length <= 5))
        {
            getupdate($("#suchfeld").val(), $("#country").val());
        }
        
        umkreis();       
    });
    $("#finden").click(function() {
        if (String($("#suchfeld").val()).length > 2)
        {
            if (String($("#entfernung").val()).length > 0)
            {
                getupdatedist($("#suchfeld").val(), $("#entfernung").val(), $("#country").val());
            }
        }
   });
});
