var geocoder = new google.maps.Geocoder();
var map;
var loggedIn;
var connectedWithFacebook;
var language;
var gloves = new Array();
var tips = new Array(5);
var activeCat=0;
var solutionMarkers = new Array();
var visibleInfoWindow;

$(document).ready(function(){
  if($('#mj-map').length>0){
    initMjMap();
    fetchTips();
    initLogin();
    initSearch();
    initTipBox();
    initNav();
    
  }
});

function setUserConnectedWithFacebook(isConnectedWithFacebook) {
    connectedWithFacebook = isConnectedWithFacebook;
}

function setUserLoggedIn(isLoggedIn) {
    loggedIn=isLoggedIn;
}

function setUserLanguage(userLanguage) {
    language = userLanguage;
}

function initMjMap(){
  setMjMap(51.484576,4.866943,5);
}

function save_glove(category,latLng) {
    $.ajax({
        type: "POST",
        url: "save_glove.php",
        data: ({c:category, lt:latLng.lat(), ln:latLng.lng()}) ,
        success: function(html) {
            //alert("glove saved successfully!");
        }
    });
    $.each(gloves, function (i,glove) {
        if (glove.category==category) {
            glove.latitude=latLng.lat();
            glove.longitude=latLng.lng();
            gloves[i]=glove;
        }
    });
}

function setMjMap(vLat,vLong,vZoom){
  var latlng = new google.maps.LatLng(Number(vLat),Number(vLong));
  var myOptions = {
    zoom:vZoom,
    center: latlng,
    navigationControl: true,
    navigationControlOptions: {
        style: google.maps.NavigationControlStyle.SMALL
    },      
    scaleControl: true,
    mapTypeControl: false,
    mapTypeId: google.maps.MapTypeId.ROADMAP
  };

  map = new google.maps.Map(document.getElementById('mj-map'),myOptions);
    if (loggedIn) {
        $.getJSON("get_gloves.php",
            function(data) {
                var gloveCategories = new Array();
                var counter = 0;
                // [{"c":"1","la":"50.837308","lo":"4.347296"},{"c":"2","la":"36.087359","lo":"-118.752594"}]
                $.each(data, function (i,val) {
                      var glove = new Glove(val.c,val.la,val.lo);
                      createGloveMarker(glove);
                      gloves[gloves.length] = glove;
                      gloveCategories[counter] = val.c;
                    counter++;
                 });
            });
    }
    createSolutionMarkers();
    clickTipCategory(0);
}

function array_contains(array,value){
    for (var i = 0; i < array.length; i++){
        if (array[i] == value){
            return true;
        }
    }
    return false;
}

function Glove(cat,lat,lon) {
    this.category=String(cat);
    this.latitude=lat;
    this.longitude=lon;
    this.marker='';
}

function createSolutionMarkers() {
    createSolutionMarker(51.224752,2.902401,"/img/win-pointerM.png",getSolutionText(0));
    createSolutionMarker(35.046296,-90.02492,"/img/win-pointerF.png",getSolutionText(1));
    createSolutionMarker(34.101566,-118.34135,"/img/win-pointerC.png",getSolutionText(2));
    createSolutionMarker(33.724946,-116.399632,"/img/win-pointerV.png",getSolutionText(3));
    createSolutionMarker(41.576823,-87.343521,"/img/win-pointerP.png",getSolutionText(4));;
}

function getSolutionText(categoryId) {
    var solutionsNL = new Array("Concert in Oostende Hippodroom","Graceland (ouderlijk huis van ex-vrouw Lisa Marie Presley)", "Ster op Walk of Fame","The Heal The World Foundation","Ouderlijk huis");
    var solutionsFR = new Array("Concert à l’Hippodrome d’Ostende","Graceland (l’ancienne demeure de son ex-femme Lisa Marie Presley)","Étoile sur Walk of Fame","The Heal The World Foundation","Maison parentale");

    return (language=='fr'?'Thème':'Categorie') + ": " + categoryNames[categoryId] + " <br/><br/> " +
           (language=='fr'?'Solution':'Oplossing') + ": " + (language=='fr'?solutionsFR[categoryId]:solutionsNL[categoryId]) ;
}

function createSolutionMarker(latitude,longitude,image,infoWindowText) {
      var marker = new google.maps.Marker({
            map: map,
            position: new google.maps.LatLng(Number(latitude),Number(longitude)),
            icon: image,
            draggable:false
      });
      var infowindow = new google.maps.InfoWindow({
        content: infoWindowText
      });
      google.maps.event.addListener(marker, 'click', function() {
         openInfoWindow(infowindow,marker);
      });
      solutionMarkers.push(marker);
}

function openInfoWindow(window,marker) {
    if (visibleInfoWindow!=null) visibleInfoWindow.close();
    window.open(map,marker);
    visibleInfoWindow=window;
}

function createGloveMarker(glove) {
      var point = new google.maps.LatLng(Number(glove.latitude),Number(glove.longitude));
      var category = glove.category;
      var image = 'img/mj-tii-gmap-bullet.png'; // Please update the path to image if needed
      switch (glove.category) {
            case '0':
                image = 'img/pointerM.png';
                break;
            case '1':
                image = 'img/pointerF.png';
                break;
            case '2':
                image = 'img/pointerC.png';
                break;
            case '3':
                image = 'img/pointerV.png';
                break;
            default:
                image = 'img/pointerP.png';
                break;
      }
      var marker = new google.maps.Marker({
            map: map,
            position: point,
            icon: image,
            draggable:false
      });
      var infowindowText = (language=='fr'?'Th&egrave;me':'Categorie')+': '+categoryNames[category]+' <br/><br/>'+(language=='fr'?'Votre emplacement':'Jouw locatie');
      var infowindow = new google.maps.InfoWindow({
        content: infowindowText
      });
      google.maps.event.addListener(marker, 'click', function() {
         infowindow.open(map,marker);
      });
      google.maps.event.addListener(marker, 'dragend', function() {
          save_glove(category,marker.get_position());
      });
      glove.marker=marker;
}

function clickSearchResult(categoryId,latLng) {
    map.setCenter(new google.maps.LatLng(Number(latLng.lat()),Number(latLng.lng())));
}

function openInfoWindowOfMarker(categoryId) {
    google.maps.event.trigger(solutionMarkers[categoryId], 'click');
}

function fetchTips() {
    // there are 5 categories
    tips = new Array();
    for (var i=0; i<=4; i++) {
        $.getJSON("get_tips.php?c="+i+"&l="+language,
                function(data) {
                    var categoryTips = new Array();
                    var categoryId;
                    $.each(data, function (j,val) {
                        categoryId=val.c;
                        if (val.c!=null && val.t!=null) {
                            categoryTips[j] = new Tip(val.i,val.t);
                        }
                    });
                    tips[categoryId] = categoryTips;
        });
    }
}

function clickTipCategory(categoryId) {
    if (categoryId>=0 && categoryId<=4) {
        var categoryTips = tips[categoryId];
        for(j=0;j<=4;j++){
          if($('#catLnk'+j).parent().hasClass('active')){
            $('#catLnk'+j).parent().removeClass('active');
            $('#catLnk'+categoryId).parent().addClass('active');
            Cufon.replace('#catLnk'+j+',#catLnk'+categoryId,{fontFamily: 'Trajan Pro',hover: true});
            activeCat=categoryId;
          }
        }
        map.setCenter(solutionMarkers[activeCat].getPosition());
        $('#mj-tip-list').find("li").remove();
        if (categoryTips!=null && categoryTips.length>0) {
            var vTipTitle=document.createTextNode($('#catLnk'+categoryId).attr('title'));
            $('#mj-tip-box-wrap h2').html(vTipTitle);
            Cufon.replace('#mj-tip-box-wrap h2',{fontFamily: 'Trajan Pro',hover: true});
            $.each(categoryTips, function (i,n){
                if(i==0){
                  var tipHtml = "<li class='first'>"+n.text+"</li>";
                }else if(i == categoryTips.length-1){
                  var tipHtml = "<li class='last'>"+n.text+"</li>";
                }else{
                  var tipHtml = "<li>"+n.text+"</li>";
                }
                $('#mj-tip-list').append(tipHtml);
            });
        } else {
        }
        openInfoWindowOfMarker(categoryId);
    }
}

function Tip(id,text) {
    this.id=id;
    this.text=text;
}
function initTipBox(){
  setTimeout('clickTipCategory(0)', 500); 
}
function codeAddress() {
  var address = document.getElementById("mj-search-field").value;
  if (geocoder) {
    geocoder.geocode( { 'address': address}, function(results, status) {
      if (status == google.maps.GeocoderStatus.OK) {
        
          showResults(results);
        
      } else {
        alert("Geen resultaten gevonden.\nAucun résultat trouvé.");
      }
    });
  }
}
function showResults(results){
    $('#resultHolder').remove();
    
  if(results.length>1){
    var eResultList=document.createElement("ul");
    $(eResultList).attr('id','resultHolder');
    $.each(results, function(i,val) {
      var eResultListItem=document.createElement("li");
      var eResultLink=document.createElement("a");
      $(eResultLink).attr('href',"#");
      $(eResultLink).attr('id','resultLink'+i);
      $(eResultLink).attr('rel',results[i].geometry.location);
      var eResultText=document.createTextNode(results[i].formatted_address);
      
      $(eResultLink).click(function(){
         clickSearchResult(activeCat,results[i].geometry.location);
         $(eResultList).slideUp("fast");
      });
      $(eResultLink).append(eResultText);
      $(eResultListItem).append(eResultLink);
      $(eResultList).append(eResultListItem);
    });
  }else{
      clickSearchResult(activeCat,results[0].geometry.location);
  }
  
  $('#mj-search-box').prepend(eResultList);
  
  
}
function initLogin(){
  if(!userLoggedIn && !connectedWithFacebook){
    var sLoadPage='welcome.php';
    setOverlay(sLoadPage,true);
  } else if(showRegisterBox){
    var sLoadPage='register.php';
    setOverlay(sLoadPage,true);
  }
}
function setOverlay(sLoadPage,small){
  $('#mj-overlay-content').load(sLoadPage);
    var vWindowWidth=$(document).width();
    
    if($('#mj-overlay-wrap').hasClass('small-overlay')){
      
      $('#mj-overlay-wrap').removeClass('small-overlay');
    }
    var vMarginLeft=(vWindowWidth-600)/2;
    if(small==true){
      $('#mj-overlay-wrap').addClass('small-overlay');
      vMarginLeft=(vWindowWidth-252)/2;
    }
    $('#mj-overlay-content-wrap').css('left',Math.round(vMarginLeft)+'px');
    
    $('#mj-close-btn').click(function(e){ 
        $('#mj-overlay-wrap').css('display','none');
    });
    $('#mj-overlay-wrap').css('display','block');
}
function initSearch(){
  $('#mj-search-btn').click(function(){
      codeAddress();
  });
  $('#mj-search-field').keypress(function(e){
      if (e.which == 13){
        codeAddress();
      }
  });
}
function initNav(){
  $('#nav-prizes').click(function(){
      var sLoadPage='prizes.php';
      setOverlay(sLoadPage,false);
  });
  $('#nav-howto').click(function(){
      var sLoadPage='howto.php';
      setOverlay(sLoadPage,false);
  });
  $('#nav-winner').click(function(){
      var sLoadPage='winners.php';
      setOverlay(sLoadPage,false);
  });
  $('#nav-profile').click(function(){
      var sLoadPage='profile.php';
      setOverlay(sLoadPage,true);
  });
}
