///////////////////////////////////////////////////////////////////////////
//                                                                       //
//  Name:   tools.js                                                     //
//  Autor:  Philipp Schäufele                                            //
//  Email:  philipp.schaeufele[at]gmx.de                                 //
//                                                                       //
//  diverse Funktionen                                                   //
//                                                                       //
//  Diese Funktionen sind urheberrechtlich geschützt! Verwendung (auch   //
//  partiell) nicht ohne meine schriftliche Genehmigung. Auch in         //
//  kommerziellem Umfeld wird sich die "Entlohnung" normalerweise durch  //
//  eine Namensnennung und einen Link erledigt haben!                    //
//                                                                       //
///////////////////////////////////////////////////////////////////////////


/****************************************************
 * Diese Funktion wird aufgerufen, sobald die Seite *
 * - inklusive Vorschaubilder ??? - geladen wurde   *
 ****************************************************/
var baseDir = "../";
function pageLoaded()
{
  var journals = parent.sidebar.journals;
  // wurde die Sidebar schon geladen?
  if (typeof journals == 'undefined')
  {
    // Nein ==> 100 ms warten und nochmal versuchen 
    window.setTimeout (function(){ pageLoaded(); },100);
    return;
  }

  // aus debug.js
//  InitDebug();
  
  // im Internet-Explorer die Anführungszeichen einfügen
  fixIEQuotes();

  // wenn es eine Journal-Seite ist die Navigationsbuttons aufbauen
  var navBarDiv = document.getElementById("journalNavBar1");
  if (navBarDiv)
    createNavBar (navBarDiv);
  var navBarDiv = document.getElementById("journalNavBar2");
  if (navBarDiv)
    createNavBar (navBarDiv);

  // Sidebar in die richtige Position rücken mittels Anchor
  var sidebarURL = parent.sidebar.location.href;
  if (sidebarURL.indexOf("#") != -1)
    sidebarURL = sidebarURL.substring (0,sidebarURL.indexOf("#"));
  if (getJournalNumber() != -1)
    parent.sidebar.location.href =  sidebarURL + "#" + getJournalNumber();
  
  // BUGME: Discaimer zu den Reisetipps hinzufügen
  var travelTippsDiv = document.getElementById("travelTipps");
  if (travelTippsDiv)
  {
/*    var a = document.createElement('a');
    a.href = "#";
    
    var disclaimer = document.createTextNode("*");
    travelTippsDiv.appendChild(a);
    a.appendChild(disclaimer);   
*/  
  }
    
  // aus gallery.js
  if (window.galleryPageLoaded)
    galleryPageLoaded();
    
  // externe Links mit ga-Code versehen
  var links = document.getElementsByTagName("a");
  for (var i=0; i<links.length; i++)
  {
    if (links[i].className == "extLink")
      setonclick(links[i],i);
  }
}

// BUGME: Hilfsfunktion, ist notwendig, um "obj" irgendwie zu speichern
function setonclick(obj, name)
{
      obj.onclick =  function() { _gaq.push(['_trackEvent', 'extLink', 'clicked', obj.innerHTML]);
                                };
}

/****************************************************
 * Diese Funktion überprüft, ob das Framset vor-    *
 * handen ist. Wenn nicht, dann wird es geladen.    *
 ****************************************************/
// BUGME: Sidebar zeigt manchmal noch kurz "unknown Document"
function restoreFrames()
{
  if (parent.location.href != document.location.href) 
    return false;

  // BUGME: funktioniert leider lokal nicht... vielleicht mit window.location.pathname? 
  parent.location.replace("/index.htm?subURL=" + escape(document.location.href));

  return true;
}

/****************************************************
 * Diese Funktion ändert die Sidebar                *
 *                                                  *
 ****************************************************/
// BUGME: vor dem laden wird teilweise noch eine fehlerhafte Seite geladen
function setSidebar(name)
{

  if (name == "Empty")
    parent.sidebar.location.href = "./sidebar_Empty.htm";
  else if (name == "Thailand")
    parent.sidebar.location.href = "./Thailand/sidebar.htm";
  else if (name == "Southern Africa")
    parent.sidebar.location.href = "./Southern_Africa/sidebar.htm";
  else
    parent.sidebar.location.href = name + "/sidebar.htm";

}

// intern: ermittelt die Journalnummer aus der journals-Struktur der Sidebar
function getJournalNumber()
{
  var i;

  var journals = parent.sidebar.journals;
  var currURL = document.location.href;
  
  for (i=0; typeof journals[i] != 'undefined'; i++)
  { 
    if (typeof(journals[i].dir) == 'undefined')
      continue;
    if (journals[i].dir == '')
      continue;
    if (currURL.search(journals[i].dir) != -1) 
      return i;
  }

  // BUGME: dieser Fehler tritt noch auf!!!
  // alert ("Aktuelle Journalnummer nicht gefunden!");     
  
  return -1;  
}

// intern: fügt einen Nagigationsbar ein
// es müssen leere div-Container dafür im HTML vorgesehen sein
function createNavBar(navBarDiv)
{
  var journals = parent.sidebar.journals;
  var currJournalNumber = getJournalNumber();

  // Pfeil vor
  var nextJournalNumber = -1;
  for (var i = currJournalNumber+1; ; i++)
  {
    // letztes Journal?
    if (typeof journals[i] == 'undefined')
      break;
  
    if (!isDraft(journals[i]))
    {
      nextJournalNumber = i;
      break;
    }
  }
  if (nextJournalNumber != -1)
  {
    var navDiv = document.createElement('div');
    navDiv.className = "navDiv";
    navBarDiv.appendChild(navDiv);

    var a = document.createElement('a');
    a.className = "Right";
    a.href      = "../" + journals[nextJournalNumber].dir + "/Journal.htm";;
    a.onclick   = function(){parent.sidebar.changeURL(nextJournalNumber,"../"); return false;};   
    a.title     = journals[nextJournalNumber].name;    
    navDiv.appendChild(a);
  }

  // Pfeil hoch
  if (typeof parent.sidebar.topURL != 'undefined')
  {
    var navDiv = document.createElement('div');
    navDiv.className = "navDiv";
    navBarDiv.appendChild(navDiv);

    var a = document.createElement('a');
    a.className = "Top";
    a.href      = parent.sidebar.topURL;
    a.onclick   = function(){parent.Main.location.href=parent.sidebar.topURL; return false;};   
    a.title     = "Reisebericht-Übersicht";    
    navDiv.appendChild(a);
  }
 
  // Pfeil zurück 
  var lastJournalNumber = -1;
  for (var i = currJournalNumber-1; ; i--)
  {
    // erstes Journal?
    if (typeof journals[i] == 'undefined')
      break;
  
    if (!isDraft(journals[i]))
    {
      lastJournalNumber = i;
      break;
    }
  }
  if (lastJournalNumber != -1)
  {
    var navDiv = document.createElement('div');
    navDiv.className = "navDiv";
    navBarDiv.appendChild(navDiv);
    
    var a = document.createElement('a');
    a.className = "Left";
    a.href      = "../" + journals[lastJournalNumber].dir + "/Journal.htm";
    a.onclick   = function(){parent.sidebar.changeURL(lastJournalNumber,"../"); return false;};
    a.title     = journals[lastJournalNumber].name;    
    navDiv.appendChild(a);
  }    
      
}

/****************************************************
 * Intern: Prüft, ob das Journal noch im            *
 * Entwurfs-Stadium ist.                            *
 ****************************************************/
function isDraft(journal)
{
  //var journal = journals[i];

  if ((typeof journal.draft != 'undefined') && (journal.draft == true))
  {
    if (cookieExists("showDrafts"))
    {
      if (cookieGetValue("showDrafts") == 'false')
        return true;
    }
    else
      return true; 
  }

  if ((typeof journal.dir != 'undefined' ) && (journal.dir != ""))
    return false;
     
  return true;
}


/****************************************************
 * nur Anzeigen, wenn "Draft" bei den Einstellungen *
 * ausgewählt ist.                                  *
 ****************************************************/
 // usage:
 // <script type="text/javascript"> displayDraft("") </script>
function displayDraft(what)
{
  if ( (cookieExists("showDrafts")) && (cookieGetValue("showDrafts") == 'true') )
    document.write (what);
}


/****************************************************
 * Karte im Kartenfenster ändern                    *
 * so implementiert, damit später mal die Frames    *
 * ersetzt werden können                            *
 ****************************************************/
function changeMap(name, maps, places)
{
  if (typeof parent.map == 'undefined')
    return;
    
  parent.map.changeMapInt(name, maps, places);
}

/****************************************************
 * angeben des Ortes                                *
 * so implementiert, damit später mal die Frames    *
 * ersetzt werden können                            *
 ****************************************************/
function setPlace(name)
{
  parent.map.setPlaceInt(name);
}
      
      
      
/*****************************************************
 * fügt das Datum der letzten Änderung der Seite ein *
 *****************************************************/
function lastModified()
{   
  var Datum = new Date(document.lastModified);

  var Tag   = Datum.getDate();
  var Monat = Datum.getMonth()+1;
  var Jahr  = Datum.getFullYear();
  var Std   = Datum.getHours();
  var Min   = Datum.getMinutes();
  
  Min = (Min<10) ? "0" + Min : Min;

  document.write("<p id='lastMod'>Letzte Aktualisierung: ");
  document.write(Tag + "." + Monat + "." + Jahr);    // + "   " + Std + ":" + Min
  document.write("</p>");
}



/*****************************************************
 * fügt einen Hinweis ein, dass dieser Bericht noch  *
 * nicht fertig ist und ergänzt die Statistik bei GA *
 *****************************************************/
function underConstruction(text)
{
  if (typeof(text) == 'undefined')
    document.write ("<p> <b> Reisebericht-Baustelle!!!! </b> </p>");
  else
    document.write ("<p> <b> " + text + " </b> </p>");  
  
  _gaq.push(['_trackEvent', 'Baustelle', 'shown', this.location.href]);
}
 


/****************************************************
 * setzt einen Cookie(-Wert)                        *
 ****************************************************/   
// BUGME: cookie "escapen"?
// BUGME: Ablaufdatum einstellbar
function cookieSetValue(name,value)
{
  var expDays = 365;
  var expires = new Date();
  var later = expires.getTime() + expDays * 24 * 60 * 60 * 1000;
  expires.setTime(later);

  document.cookie = name + "=" + value + ";" +
                    "expires=" + expires.toGMTString() + ";" ;  
}


/****************************************************
 * überprüft, ob ein bestimmter Cookie(-Wert)       *
 * existiert                                        *
 ****************************************************/      
function cookieExists(name)
{
  var cookie = document.cookie;
  
  // Namen suchen
  var value = cookie.split(name + "=");
  
  if (value.length > 1)
    return true;
  else
    return false;
}


/****************************************************
 * Gibt den Wert eines Cookies zurück               *
 ****************************************************/         
function cookieGetValue(name)
{
  var cookie = document.cookie;
  
  // Namen suchen
  var value = cookie.split(name + "=");
  
  // Cookie(-Wert) vorhanden?
  if (value.length <= 1)
    return null;
  
  // Rest abschneiden
  value = value[1].split(";");
  
  return value[0];
}


/****************************************************
 * da der Internet Explorer das <q>-Tag nicht       *
 * beachtet fügt diese Funktion die Anführungs-     *
 * zeichen ein.                                     *
 ****************************************************/   
// von: http://juicystudio.com/article/fixing-ie-quotes.php
function fixIEQuotes()
{
  var objQuotes = document.getElementsByTagName('q');
  var strOpen, strClose;

  // nur für den Internet Explorer
  if (navigator.appName != "Microsoft Internet Explorer")
    return;
  
  for (var i=0; i<objQuotes.length; i++)
  {
    if (isNested(objQuotes[i]))
    {
      // Double-quotes (quotes in quotes)
      strOpen = document.createTextNode('‚');
      strClose = document.createTextNode('‘');
    }
    else
    {
      // Single-quotes
      strOpen = document.createTextNode('„');
      strClose = document.createTextNode('“');
    }
    // Insert quotation marks around quote
    objQuotes[i].parentNode.insertBefore(strOpen, objQuotes[i]);
    objQuotes[i].appendChild(strClose);
  }

  objQuotes = null;
}

function isNested(objElement)
{
  var objParent = objElement;
  do // Check if nested quote
  {
    objParent = objParent.parentNode;
    if (objParent.tagName && objParent.tagName.toLowerCase() == 'q')
      return true;
  } while (objParent.parentNode);

  return false;
}



/****************************************************
 * Gibt eine Fehlermeldung via alert() aus, wenn    *
 * Debugging in den Prefs eingeschaltet wurde       *
 ****************************************************/
// BUGME: könnte ja auch via Google Analytics weitergegeben werden!
function debugAlert(Message)
{
  if (cookieExists("debugAlerts") && cookieGetValue("debugAlerts") == 'true')
    alert(Message);
}
 
 
 
 
