﻿/*
* File: knapzakvaart.js
* Date: 04/04/2010
* Author: F. van Beelen
* Company:  BICT Advies & Ontwikkeling
* History :
* - 10/03/2009 Build 
* - 04/04/2010 Update: Replace Zakelijk into Doesburg
*/
   var selectedLanguage = 'NL';   // Global var
   // Define menu-items.
   var oMenu = new Object();
       oMenu['TPL'] = new Array()
          oMenu.TPL[0] = new Array("trossenlos", "doesburg", "particulier", "schip", "historie");
          oMenu.TPL[1] = new Array("cultuur", "vaargebied", "uitkombuis", "tarieven", "contact");
       oMenu['NL'] = new Array();
          oMenu.NL[0] = new Array("Trossen los", "Doesburg-Doetinchem", "Particulier", "Schip", "Historie");
          oMenu.NL[1] = new Array("Cultuur", "Vaargebied", "Uit de kombuis", "Tarieven", "Contact");
       oMenu['EN'] = new Array();
          oMenu.EN[0] = new Array("Sailng", "Doesburg-Doetinchem", "Private", "Ship", "History");
          oMenu.EN[1] = new Array("Culture", "Where to Sail", "Catering", "Tariff", "Contact");


   function init() {
      getTemplate($('home'));
      setLanguage(selectedLanguage);
   }

   // Get the selected template (.tpl file) and fill Div-tag "template".
   // Based on AJAX.
   // If template is loaded, change the content of attribute Title with loaded template name. Necessary for callback "setTemplate()".
   // Params:
   // - name: string, name of tamplate file
   // Return: void
   function getTemplate(name) {
      var parent = name.parentNode;
      var aGrandParents = parent.parentNode.getElementsByTagName("div");
      for (var x=0; x<aGrandParents.length; x++) {
         if (name.parentNode == aGrandParents[x]) {
            var aAs = aGrandParents[x].getElementsByTagName("a");
            for (var y=0; y<aAs.length; y++) {
               if (name == aAs[y]) {
                   var tplName = oMenu.TPL[x][y].toLowerCase();
                   var element = $('template');   // Define context element for callback 'setTemplate'.
                   element.title =  tplName;
                   OpenLayers.loadURL('template/' + tplName  + '.tpl.php', '', element, setTemplate,  setTemplateerror);
                }   
            }    
         } 
      }
   }

   // Callback succes
   // Params:
   // - request = object, XMLHTTPrequest
   function setTemplate(request) {
      if (request.responseText.length != 0) {
         this.innerHTML = request.responseText;
         if (this.title == 'route' ) {  
            initMap();
         } else {
            getContentDivs();
         }   
      } else {
         alert("Sorry!\r\nFout: Kan pagina niet tonen!\r\nError: Can't show page!\r\nFehler: Seite kann nicht angezeigt werden!");
      }
   }

   // Callback errror handling
   // Params:
   // - request = object, XMLHTTPrequest
   function setTemplateerror(request) {
      alert("Sorry!\r\nFout: Kan pagina niet tonen!\r\nError: Can't show page!\r\nFehler: Seite kann nicht angezeigt werden!");
   }

   // Get content from database
   function getContentDivs()  { 
     var divs = document.getElementsByTagName("div");
     for (x=0; x<divs.length; x++) {
        if (divs[x].className.toLowerCase() == 'content') {
           var element = $(divs[x].id);   // Define context element for LoadURL.
             loadURL(element);
         }
      } 
   }

   // AJAX call
   // Params:
   // - element = object, context element
   function loadURL(element) {
      OpenLayers.loadURL('php/dbGetData.php?node=' + element.id + '&language=' + selectedLanguage, '', element, setInnerHTML,  setBoxInnerHTMLerror);
   }
 
   
   // Callback succes
   function setInnerHTML(request) {
      this.innerHTML = request.responseText;
   }

   // Callback error handling
   function setBoxInnerHTMLerror(request) {
      if (selectedLanguage.toUpperCase == 'NL') {
        alert("Fout: Gegevensbank heeft een fout geconstateerd! Start opnieuw de website met toets 'F5'. Als deze fout zich blijft voordoen, neem a.u.b. contact op met de beheerder. " + request.responceText);
      } else if (selectedLanguage.toUpperCase == 'EN') {
        alert("Error: Database has a error! Start website again with key 'F5'. If error not disapear, please contact administrator. " + request.responceText);
      } else if (selectedLanguage.toUpperCase == 'DE') {
        alert("Fehler: Datenbank hat einen Fehler! Start der Website erneut mit F5. Wenn dieser Fehler nicht verschwinden, wenden Sie bitte an den Administrator. " + request.responceText);
      }     
   }  

   // Change language menu items and get new content.
   // Params: 
   // - lang = string, selected language.
   // Return: void
   function setLanguage(lang) {
      selectedLanguage = lang.toUpperCase();  // Global var
      var divs = $('menucontent').getElementsByTagName("div");
      for (y=0; y<divs.length; y++) {  // Change innerHTML for each menu item (<a> tag)
        var as = divs[y].getElementsByTagName("a");
        for (x=0; x<as.length; x++) {
          as[x].innerHTML = oMenu[selectedLanguage][y][x] ;
        }   
      }
      if ($('template').title != 'route') { // Change content for current template, except route because of coding in template.
        getContentDivs();
      }  
   }
         
  // Hide or show Display
   function displayToggle(id, element) {
      if ( $('parent_' + id) != null ) {  // If Div not exist, create a new Div.
        var el = $('parent_' + id);
        if (el.style.visibility == "hidden"){
          el.style.visibility ="visible";
        } else {  
          el.style.visibility = "hidden";
        }
      } else {
         //var newDiv = OpenLayers.Util.createDiv(element.title, OpenLayers.Pixel(100,100),OpenLayers.Size(100,50), '', '', '', '', 0.8) 
         var newParentDiv = document.createElement('div');
         newParentDiv.id = 'parent_' + id;
         newParentDiv.className = 'content displayDiv'; 
         newParentDiv.style.left = $('master').offsetLeft + "px";
         newParentDiv.style.top = element.offsetTop + "px";
         newParentDiv.onmousedown = function(evnt) {dragStart(evnt,this.id);};
         newParentDiv.innerHTML = '<div onclick="displayToggle(\'' + id + '\');" class="displayBar content">x</div>';

         var newDiv = document.createElement('div');         
         newDiv.id = id; 
         //newDiv.addEventListener('mousedown',function (evnt) {dragStart(evnt,this.id);},false); // Only FF and Opara
         newParentDiv.appendChild(newDiv);
         loadURL(newDiv);
         document.body.appendChild(newParentDiv);
      }
   } 


  // Google, create a directions object and register a map and DIV to hold the
  // resulting computed directions
  var map;
  var gDirPanel;
  var gDir;

  function initMap() {
    var address = "Knapzak Vaart<br />Sandtlaan 50<br  />2223 KW Katwijk"; 
    map = new GMap2(document.getElementById("map"));
    map.setCenter(new GLatLng(52.205187,4.398093), 15);
    var marker = new GMarker(new GLatLng(52.20605502,4.3963873386));
    map.addOverlay(marker);
    map.addControl(new GSmallMapControl());
    map.addControl(new GMapTypeControl());
    marker.openInfoWindowHtml(address);
  }

  function getRoute(targetDivId, fromAddress, fromCity) {
    var address = $(fromAddress).value + "," + $(fromCity).value;
    if (address.length == 1) {
       alert('Geen adres en/of plaats ingevuld!\nVul een adres en of plaats in om uw route te tonen.');
       return;
    }   
    var divBox = $(targetDivId).parentNode;
    divBox.style.height = "auto";  // Make the box vertical flexible, when route content is filling the box. 
    gDirPanel = document.getElementById("route_2c");
    gDir = new GDirections(map, gDirPanel);
    GEvent.addListener(gDir, "error", gHandleErrors);
    var fromTo = "from: " + address + " to: Sandtlaan 50, katwijk";
    gDir.load(fromTo); 
  }
  
 
 function gHandleErrors(){
	   if (gDir.getStatus().code == G_GEO_UNKNOWN_ADDRESS)
	     alert("Geen corresponderend adreses gevonden.\nHet ingevulde adres kan relatief nieuw zijn of onjuist.\nFoutcode: " + gDir.getStatus().code);
	   else if (gDir.getStatus().code == G_GEO_SERVER_ERROR)
	     alert("De route kan niet worden weergegeven, de reden van deze foutsituatie is onbekend.\nFoutcode: " + gDir.getStatus().code);
	   else if (gDir.getStatus().code == G_GEO_MISSING_QUERY)
	     alert("Fout: HTTP q parameter ontbreekt of heeft geen waarde. Geen zoekwaarden aanwezig.\nFoutcode: " + gDir.getStatus().code);
	   else if (gDir.getStatus().code == G_GEO_BAD_KEY)
	     alert("The given key is either invalid or does not match the domain for which it was given. \n Error code: " + gDir.getStatus().code);
	   else if (gDir.getStatus().code == G_GEO_BAD_REQUEST)
	     alert("De route kan helaas niet weergegeven worden.\nFoutcode: " + gDir.getStatus().code);
      else alert("Onbekende fout opgetreden.\nStart opnieuw de site op met functietoets-F5");
  }
  

