/**
 * Wechselwelle.eu map.js
 * 09/2010 Michael Neuhaus & Marek Sonnabend
 */

var useUserLocation = true;

var defaultLocationLatitude = 50.8961;
var defaultLocationLongitude = 14.8072;

var gmap;
var map;
var infowindow;

var allMarkers = new Array();
var allInfoWindows = new Array();
var allOptions = new Array();

var mapDataURL = "index/mapdata";

function initialize(){



    if (useUserLocation == true){

        try {
            currentLatitude = geoip_latitude();
            currentLongitude = geoip_longitude();
        } catch (err) {
            currentLatitude = defaultLocationLatitude;
            currentLongitude = defaultLocationLongitude;
        }
    } else {
        // use this, if we get no user client location
        currentLatitude = defaultLocationLatitude;
        currentLongitude = defaultLocationLongitude;
    }  
    var latlng = new google.maps.LatLng(currentLatitude, currentLongitude);

    //var latlng = new google.maps.LatLng(defaultLocationLatitude, defaultLocationLongitude);
    var myOptions = {
        zoom: 4,
        center: latlng,
        mapTypeId: google.maps.MapTypeId.SATELLITE,
        scrollwheel: false,
        navigationControl: true,
        mapTypeControl: true,
        scaleControl: true,
        draggable: true
    };
  
    map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
    
    google.maps.event.addListener(map, 'bounds_changed', function() {
        
        var eventFired = false;
//        alert('lat sw ' + map.getBounds().getSouthWest().lat() + ' lat ne ' +map.getBounds().getNorthEast().lat());
//        alert('lon sw ' + map.getBounds().getSouthWest().lng() + ' lon ne ' +map.getBounds().getNorthEast().lng());
        if(eventFired === true) {
            return true;
        }
        $.ajax({
            url: 'map/getlist',
            data: {
                lat1: map.getBounds().getSouthWest().lat(),
                lat2: map.getBounds().getNorthEast().lat(),
                lng1: map.getBounds().getSouthWest().lng(),
                lng2: map.getBounds().getNorthEast().lng()
            },
            type: 'post',
            dataType: 'json',
            success: function(response) {
                eventFired = true;
                if(response.users.length > 0) {
                    $.each(response.users, function(key, user) {
                        var latlng = new google.maps.LatLng(parseFloat(user.latitude), parseFloat(user.longitude));

                        var uid = user.uid;                  
                        var firstname = user.firstname;
                        var lastname = user.lastname;
                        var gender = user.gender;
                        var street_name = user.street_name;
                        var street_nr = user.street_nr;
                        var city = user.city;
                        var profession = user.profession;
                        var team = user.team;
                        var teamurl = user.teamurl;
                        var no_of_teammember = user.no_of_teammember;
                        //quote muss noch in der xml mitgeschickt werden
                        var quote = user.quote;
                        var isCompany = user.isCompany;
                        var companyName = user.companyName;
                        var powerProvider = user.powerProvider;
                        var gasProvider = user.gasProvider;
                        var image = user.image;
                        var userUrl = user.userUrl;
                        var powerIsPartner = user.powerIsPartner;
                        var gasIsPartner = user.gasIsPartner;
                        var powerIsEco = user.powerIsEco;
                        var powerRec = user.powerRec;
                        var gasIsEco = user.gasIsEco;
                        var gasRec = user.gasRec;

                        var iconimage = getIconImage(isCompany, powerProvider, gasProvider);

                        var marker = createMarker(
                                isCompany,
                                uid, 
                                firstname,
                                lastname,
                                gender,
                                city,
                                street_name,
                                street_nr,
                                profession,
                                team, 
                                teamurl, 
                                no_of_teammember, 
                                quote,
                                companyName, 
                                powerProvider,
                                gasProvider, 
                                image,
                                userUrl,
                                iconimage,
                                powerIsPartner,
                                gasIsPartner,
                                powerIsEco,
                                powerRec,
                                gasIsEco,
                                gasRec,
                                latlng, 
                                false
                        );

                        allMarkers[uid] = marker;
                    });
                }
            }
        });
    });
    gmap = map;
}

function createMarker(isCompany,uid, firstname, lastname, gender, city, street_name, street_nr, profession, team, teamurl, no_of_teammember, quote, companyName, powerProvider, gasProvider, image, userUrl, iconimage, powerIsPartner, gasIsPartner, powerIsEco, powerRec, gasIsEco, gasRec, latlng, openWindow) {
    
    var markerTitle = firstname + ' ' + lastname;
    if ((companyName!="")&&(isCompany=="y")) {
        markerTitle = companyName;
        
    }
    
    var marker = new google.maps.Marker({
        position: latlng, 
        map: map, 
        icon:iconimage, 
        title:markerTitle
        });
        
    htmlcontent=  '<div class="map_infobox">';
    htmlcontent+=   '<div class="row1 clearfix"><div class="fleft">';  

    if ((companyName!="")&&(isCompany=="y")) {
        if ((userUrl!="")) {
            htmlcontent+=   '  <a href=\"http://' + userUrl + '\" target=\"_blank\" class=\"linktype3\"><span class="mapbubblename">' + companyName + '</span></a><br/>';
        }else {
            htmlcontent+=   '  <span class="mapbubblename">' + companyName + '</span><br/>';
        }
    }else{
        if ((userUrl!="")) {
            htmlcontent+=   '  <a href=\"http://' + userUrl + '\" target=\"_blank\" class=\"linktype3\"><span class="mapbubblename">' + firstname + ' ' + lastname + '</span></a><br/>';
        }else {
            htmlcontent+=   ' <span class="mapbubblename">' + firstname + ' ' + lastname + '</span><br/>';
        }
    }
    if (companyName=="") {
        htmlcontent+=   '  <span class="mapbubbleprofession">' + profession + '</span><br/><span class="mapbubblecity">' + city + '</span><br/></div>';
        if (image=="" || image == "type not accepted"){
            if (gender=="m") {
                htmlcontent+=   '<div class=\"imagewrapper\"><img src=\"images/profile_male.png\" /></div>';
            }else{
                htmlcontent+=   '<div class=\"imagewrapper\"><img src=\"images/profile_female.png\" /></div>';
            }
        }else{      
            htmlcontent+=   '<div class=\"imagewrapper\"><span style=\"display: block; height: 112px; width: 92px; background: url('+image+') no-repeat 50% 50%;\"></span></div>';
        }
    }else {
        htmlcontent+=   '  <span class="mapbubbleprofession">' + street_name +'&nbsp;' + street_nr + '</span><br/><span class="mapbubblecity">' + city + '</span><br/></div>';
        if (image=="" || image == "type not accepted"){
            htmlcontent+=   '<div class=\"imagewrapper\"><img src=\"images/dummy_company.png\" /></div>';
        }else{      
            htmlcontent+=   '<div class=\"imagewrapper\"><span style=\"display: block; height: 112px; width: 92px; background: url('+image+') no-repeat 50% 50%;\"></span></div>';
        }
    }
      
    htmlcontent+=   '</div><div class="row2">';
      
    if(team!="") {
        htmlcontent+=   ' Team: ';
        if(teamurl!='') {
            htmlcontent+=   '<a href="http://' + teamurl + '" target="_blank" class="linktype3">';
        }
        htmlcontent+=   '<span class="mapbubbleteam">' + team + '</span>';
        if(teamurl!='') {
            htmlcontent+=   '</a>';
        }
        htmlcontent+=   ' ('+no_of_teammember+') </span><br/>';
    }else
        htmlcontent+=   ' <br/>';
    htmlcontent+=   '</div>';
      
    if (quote!="" && quote != 'Wir haben gewechselt, weil...' && quote != 'Ich habe gewechselt, weil...') {
        htmlcontent+=   '<div class="mapbubblequote row3">';
        htmlcontent+=   '<span class="mapbubblequote">&quot;' + quote + '&quot;</span>';
        htmlcontent+=   '</div>';    
    }
    htmlcontent+=   '<div class="row4">';    

    if ( (powerIsPartner == "0") )  {
        htmlcontent+=   '  Ökostrom von: '+powerProvider+'<br/>';
    }else{
        htmlcontent+=   '  Ökostrom von: <a href=\"/index/goto?uid=' + uid + '&topic=1\" target=\"_blank\" class=\"linktype3 profile_powerprovider\">' + powerProvider + '</a><br/>';
    }
      
    if  ( gasProvider == ""  || gasProvider == 'Kein Gasanschluss'){
        htmlcontent+=   '<br/>';
    }else if(gasIsPartner == "0"){
        htmlcontent += ' Ökogas von: ' + gasProvider + '</span><br/>';
    }else {
        htmlcontent += ' Ökogas von: <a href=\"/index/goto?uid=' + uid + '&topic=2" target=\"_blank\" class=\"linktype3\"><span id=\"profile_gasprovider\">' + gasProvider + '</span></a><br/>';
    }
    htmlcontent+=   '</div>';
    htmlcontent+=   '<div class="abusemapbubblegasprovider">';      
    htmlcontent+=   '<a onClick="openLightbox(\'map/abuse?abuser_userid=' + uid + '\',\'Profil melden\',418); return false;" href="map/abuse?abuser_userid=' + uid + '"  class="mapThickbox">Profil melden</a>';
      
    htmlcontent+=   '</div>';
    htmlcontent+=  '</div>';
    htmlcontent+=  '<div style="margin-top:-1px; margin-left:20px;"><img src="images/infobox_ende.png" /></div>';



    var boxText = document.createElement("div");
    boxText.style.cssText = "";
    boxText.innerHTML = htmlcontent;
 
    var myOptions = {
        content: boxText
        ,
        disableAutoPan: false
        ,
        alignBottom: true
        ,
        maxWidth: 0
        ,
        pixelOffset: new google.maps.Size(-20, -39)
        ,
        zIndex: null
        ,
        boxStyle: { 

        }
        ,
        closeBoxMargin: "-16px -16px -16px -16px"
        ,
        closeBoxURL: "images/close_map.png"
        ,
        infoBoxClearance: new google.maps.Size(16, 16)
        ,
        isHidden: false
        ,
        pane: "floatPane"
        ,
        enableEventPropagation: false
    };

    google.maps.event.addListener(marker, "click", function() {
        if (infowindow) infowindow.close();
        $("#mapinfoboxwrapper").hide();
        infowindow = new InfoBox(myOptions);
        infowindow.open(map, marker);
        google.maps.event.addListener(infowindow, "closeclick", function() {
            $("#mapinfoboxwrapper").show()
        });
    });
    
  
    if (openWindow){
                    
        if (infowindow) infowindow.close();
        infowindow = new InfoBox(myOptions);
        infowindow.open(map, marker);
        google.maps.event.addListener(infowindow, "closeclick", function() {
            $("#mapinfoboxwrapper").show()
        });
    }
    allOptions[uid] = myOptions;
    allInfoWindows[uid] = infowindow;
    return marker;
}


function setNewMarker()
{
  
}

function locateUserLocation()
{
    return;  
  
    if (navigator.geolocation) {
        getLocation();
    } else {
        alert("Der Browser unterstuetzt keinen Geolocation Dienst.");
    }  
}

function getLocation()
{  
    navigator.geolocation.getCurrentPosition(gotLocation, noLocation);  
}

function gotLocation(position)
{  
    var lat = position.coords.latitude;
    var longtitude = position.coords.longitude;
    alert('Der Standort lautet ' + lat + ', ' + longtitude);
}

function noLocation()
{
    alert('Standortbestimmung nicht erfolgreich.');
}

function devCloseRegform()
{
    regform = document.getElementById('boxContainer');
    regform.style.visibility = 'hidden';
  
    regform.style.zIndex = -1;
    shroud = document.getElementById('shroud');
    shroud.style.visibility = 'hidden';
}

function fadeOut(){
    form = document.getElementById('boxContainerEngery');
    form.style.left = '90%';
  
    link = document.getElementById('linkFade');
    link.href = 'javascript:fadeIn()';
    link.innerHTML='<img src="images/arrow_left.jpg" width="13" height="11" id="imgFade" alt="Einblenden" /> Einblenden ';

}

function fadeIn(){
    form = document.getElementById('boxContainerEngery');
    //form.style.margin = '0 auto';
    form.style.left = '50%';
  
    link = document.getElementById('linkFade');
    link.href = 'javascript:fadeOut()';
    link.innerHTML='Ausblenden <img src="images/arrow_right.jpg" width="13" height="11" id="imgFade" alt="Ausblenden" />';

}

/**
 * Update element with the given id
 * with the given value for innerHTML
 * 
 * @param string id
 * @param string value
 */
function updatePreview(id, value)
{
    if (value != null) document.getElementById(id).innerHTML = value;
  
    // trigger more changes
    onChangeProfilePreview();
  
    // Check whether function exist (in local file)
    // and call them, if so
    if (typeof(window.onChangeCallLocalProfilePreview) == "function") {
        onChangeCallLocalProfilePreview();
    }
}  

/**
 * On every change during the registration
 * process, this function is called.
 *  
 */
function onChangeProfilePreview()
{
  
}

function showUser(lat, lng, fadeout)
{ 
    
    if (fadeout !== false) fadeOut();
    if ((lat != '') && (lng != '')){
        latLong = new google.maps.LatLng(lat, lng);
        gmap.panTo(latLong);
    
        gmap.setZoom(16);      
    }
}

function openUserBubble(uid, firstname, lastname, gender, city, profession, team, isCompany, companyName,
    powerProvider, gasProvider, image, userUrl,
    powerIsPartner, gasIsPartner, powerIsEco, powerRec, gasIsEco,
    gasRec, latitude, longitude
    )
{
       
    
    var iconimage = getIconImage(isCompany, powerProvider, gasProvider);
  
    var latlng = new google.maps.LatLng( parseFloat(latitude), parseFloat(longitude));
  
    var marker = createMarker(uid, firstname, lastname, gender, city, profession, team, companyName, powerProvider, gasProvider, image, userUrl, iconimage, powerIsPartner, gasIsPartner, powerIsEco, powerRec, gasIsEco, gasRec, latlng, true);
    
    fadeOut();
    if ((latitude != '') && (longitude != '')){
        //latLong = new google.maps.LatLng(latitude, longitude);
        gmap.panTo(latlng);
     
        gmap.setZoom(16);      
    }
  
}

function centerCurrentUser()
{
    latLong = new google.maps.LatLng(currentUserLatitude,  currentUserLongitude);
    gmap.setCenter( latLong );
}


function openLightbox(url,mytitle,mywidth,myheight) {
//    if(typeof mywidth == 'undefined') {
        // default-wert:
//        mywidth = 560;
//    }
//    if(typeof myheight == 'undefined') {
        // default-wert:
//        myheight = 340;
//    } 
    mywidth = 560;
    myheight = 340;
    $.fancybox({
        'titlePosition'  : 'inside',
        'type'           : 'ajax',
        'autoDimensions' : false,
        'padding'        : 30,
        'showCloseButton': true,
        'href': url,
        'width': mywidth,
        'height': myheight,
        'title'    : mytitle
    });
    
    return false;

}

function gotoMarker(uid) {
    if(typeof allMarkers[uid] != "undefined") {
        $('html,body').animate({
            scrollTop: 0
            },'slow');
        gmap.panTo(allMarkers[uid].getPosition());
        if(typeof allOptions[uid] != "undefined") {
            $("#mapinfoboxwrapper").hide();
            infowindow = new InfoBox(allOptions[uid]);
            infowindow.open(gmap, allMarkers[uid]);
            google.maps.event.addListener(infowindow, "closeclick", function() {
                $("#mapinfoboxwrapper").show()
            });
        }
    }
}

function getIconImage(isCompany, powerProvider, gasProvider) {
    var iconimage = '';
    if (isCompany != "y"){
        if ( (powerProvider != '') && (gasProvider != '') )
        {
            iconimage = 'images/p_pin_both.png';
        }
        if ( (powerProvider != '') && (gasProvider == '') )
        {
            iconimage = 'images/p_pin_strom.png';
        }
        if ( (powerProvider == '') && (gasProvider != '') )
        {
            iconimage = 'images/p_pin_gas.png';
        }
        if ( (powerProvider == '') && (gasProvider == '') )
        {
            iconimage = 'images/p_pin_none.png';
        }
    }else{
        if ( (powerProvider != '') && (gasProvider != '') )
        {
            iconimage = 'images/c_pin_both.png';
        }
        if ( (powerProvider != '') && (gasProvider == '') )
        {
            iconimage = 'images/c_pin_strom.png';
        }
        if ( (powerProvider == '') && (gasProvider != '') )
        {
            iconimage = 'images/c_pin_gas.png';
        }
        if ( (powerProvider == '') && (gasProvider == '') )
        {
            iconimage = 'images/c_pin_none.png';
        }
    }
    
    return iconimage;
}
