$(document).ready(function() {
  if (link_prefix != "http://duran2.de/felektro/" && top != self) top.location = self.location; // nicht im fremden Frameset anzeigen lassen, aber Gästebuch im eigenen Frame anzeigen
  initFontSize();
  $("#searchboxContainer").html('<form id="searchform" action="'+link_prefix+'suche.html" method="get"><div><label for="q">Suche&nbsp;</label><input value="" title="Suche" name="q" id="q" type="text"><button type="submit" id="submit"><span>Suche</span></button></div></form>');
  $("#logo_icons").html('<div class="logo_icon"><img src="'+link_prefix+'src/menu-items-font_plus.png" alt="Schrift vergrößern" style="cursor:pointer;" onclick="IncreaseFont(\''+link_prefix+'\')" /></div><div class="logo_icon"><img src="'+link_prefix+'src/menu-items-font_minus.png" alt="Schrift verkleinern" style="cursor:pointer;" onclick="DecreaseFont(\''+link_prefix+'\')" /></div><b id="logo_icons_help"><span class="helptext">Schriftgröße einstellen (Cookies müssen aktiviert sein!)</span></b>');
  setBorderRadiusCSS(link_prefix);
  showSearchInfo(link_prefix);
  AddTableLastChildClasses();
  initSmoothScroll();
  $("#nav").superfish();
  initSearchSuggestions();
  setReferrerInfo(link_prefix);
});

if(link_prefix != "http://duran2.de/felektro/") {
  ChiliBook.recipeFolder = link_prefix+"src/jquery/chili/";
  ChiliBook.elementPath = "div";
  ChiliBook.elementClass = "";
}

initSmoothScroll = function() {
  if (document.location.hash) {
    $.scrollTo($(document.location.hash).offset().top - $("#searchform div").outerHeight());
    highlight($(document.location.hash), "#ff6", {
      start: 1000,
      stay: 1200,
      stop: 3000
    });
  }
  $("a[href*=#]").click(function(){
    hash = $(this).attr('href').split('#')[1]
    if(hash != "top") {
      highlight($('#' + hash), "#ff6", {
        start: 2000,
        stay: 1000,
        stop: 3000
      });
    }
  });
  $.localScroll({
    hash: true,
    lazy: true
  });
}

function highlight(element, color, speed) {
  if (speed == null) speed = "fast";
  var e;
  var position;
  element.each(function() {
    e = $(this);
    position = e.css('position');
    if ((position != 'absolute') && (position != 'fixed')) {
      e.css('position', 'relative');
    }
    uuid = "highlightedBoxWithjQuery" + e.attr("id") + color + speed;
    a = $("<div>").attr("id", uuid).css({
      "display": "none",
      "background-color": color,
      "position": "absolute",
      "top": 0,
      "left": 0,
      "z-index": -1,
      "width": e.innerWidth(),
      "height": e.innerHeight()
    }).fadeIn(speed.start).appendTo(e);
    window.setTimeout(function() {
      a.fadeOut(speed.stop, function() {
        $(this).remove();
        e.css('position', position);
      });
    }, speed.stay);
  });
}

function dom() {
  return (document.getElementById) ? 1:0;
}
function ie() {
  return (document.all) ? 1:0;
}

var addthis_config = {
  username: "elektronikLexikon",
  ui_language: "de",
  ui_header_color: "#000000",
  ui_header_background: "#00bb00",
  ui_click: true,
  data_ga_tracker: "pageTracker"
};
var addthis_localize = {
  share_caption: "Bookmarken / Weitersagen",
  favorites: "Browser"
};

function setBorderRadiusCSS(prefix) {
  if (dom() && !ie()) {
    $("head").append('<link rel="stylesheet" type="text/css" media="all" href="'+prefix+'src/mozilla.css" />');
  } else {
    $("head").append('<link rel="stylesheet" type="text/css" media="all" href="'+prefix+'src/khtml.css" />');
  }
}

function get_GET_params(where) {
  if(!where) where = location.search;
  var GET = new Array();
  if(where.length > 0) {
    var get_param_str = where.substring(1, where.length);
    var get_params = get_param_str.split("&");
    for(i = 0; i < get_params.length; i++) {
      var key_value = get_params[i].split("=");
      if(key_value.length == 2) {
        var key = key_value[0];
        var value = key_value[1];
        GET[key] = value;
      }
    }
  }
  return(GET);
}

function get_GET_param(key) {
  var get_params = get_GET_params();
  if(get_params[key]) {
    return(get_params[key]);
  }
  else {
    return false;
  }
}

function AddTableLastChildClasses(){
  $("tr:last, td:last", "table").addClass('last-child');
}

function toHTML(str) {
  str = str.replace(new RegExp(unescape('%C3%A4'), 'g'), "&auml;");
  str = str.replace(new RegExp(unescape('%C3%B6'), 'g'), "&ouml;");
  str = str.replace(new RegExp(unescape('%C3%BC'), 'g'), "&uuml;");
  str = str.replace(new RegExp(unescape('%C3%9F'), 'g'), "&szlig;");
  str = str.replace(new RegExp(unescape('%C3%84'), 'g'), "&Auml;");
  str = str.replace(new RegExp(unescape('%C3%96'), 'g'), "&Ouml;");
  str = str.replace(new RegExp(unescape('%C3%9C'), 'g'), "&Uuml;");
  return str;
}

function toText(str) {
  str = str.replace(new RegExp("&auml;", 'g'), unescape("%E4"));
  str = str.replace(new RegExp("&ouml;", 'g'), unescape("%F6"));
  str = str.replace(new RegExp("&uuml;", 'g'), unescape("%FC"));
  str = str.replace(new RegExp("&szlig;", 'g'), unescape("%DF"));
  str = str.replace(new RegExp("&Auml;", 'g'), unescape("%C4"));
  str = str.replace(new RegExp("&Ouml;", 'g'), unescape("%D6"));
  str = str.replace(new RegExp("&Uuml;", 'g'), unescape("%DC"));
  return str;
}

function showSearchInfo(prefix) {
  myReferrer = document.referrer;
  searchEngineList = new Array(
    // RegExp, Get-Parameter, Name
    [(/merkur.*?search\.html/), 'q', 'Merkur'],
    [(/google\....?\/search/), 'q', 'Google'],
    [(/search\.yahoo\.com\/search/), 'p', 'Yahoo'],
    [(/abacho\.de\/suche/), 'q', 'Abacho'],
    [(/acoon\.de\/cgi-bin\/search\.exe/), 'begriff', 'Acoon'],
    [(/fireball\.de\/ajax\.asp/), 'q', 'Fireball'],
    [(/hotbot\.com\/?/), 'query', 'Hotbot'],
    [(/search\.lycos\....?\/?/), 'query', 'Lycos'],
    [(/witch\.de\/search-result\.php/), 'search', 'Witch'],
    [(/altavista\.com\/web\/results/), 'q', 'Altavista'],
    [(/bing\.com\/search/), 'q', 'Bing'],
    [(/ask\.com\/web/), 'q', 'ask.com']
  );
  if((myReferrer != undefined) && (myReferrer != '')) {
    for(searchEngine=0; searchEngine<searchEngineList.length; searchEngine++) {
      if(searchEngineList[searchEngine][0].test(myReferrer) == true) {
        GET = get_GET_params(myReferrer.substring(myReferrer.indexOf('?'), myReferrer.length));
        if(GET[searchEngineList[searchEngine][1]]) {
          $("#path_master_layout").after('<div id="searchInfo"><span class="closeLink" onclick="closeSearchInfo()">schlie&szlig;en</span><p>Willst Du im Elektronik-Lexikon <a href="' + prefix + 'suche.html?q=' + GET[searchEngineList[searchEngine][1]] + '">nach <b>&raquo;' + toHTML(unescape((GET[searchEngineList[searchEngine][1]].replace(/\+/g, " ")))) + '&laquo;</b> suchen</a>?</p>');
          danach = $("#searchInfo + *");
          danach.css("margin-top", (parseInt(danach.css("margin-top"))+$("#searchInfo").height()+5)+"px");
        }
        break;
      }
    }
  }
}

function closeSearchInfo() {
  $("#searchInfo").slideUp("slow").add("#searchInfo + *").animate({
    marginTop: (parseInt($("#searchInfo + *").css("margin-top")) - $("#searchInfo").height()-5)+"px"
  }, "slow");
}

function getLevenshtein (s1, s2) {
  // Calculate Levenshtein distance between two strings
  //
  // version: 909.322
  // discuss at: http://phpjs.org/functions/levenshtein
  // +            original by: Carlos R. L. Rodrigues (http://www.jsfromhell.com)
  // +            bugfixed by: Onno Marsman
  // +             revised by: Andrea Giammarchi (http://webreflection.blogspot.com)
  // + reimplemented by: Brett Zamir (http://brett-zamir.me)
  // + reimplemented by: Alexander M Beedie
  // *                example 1: levenshtein('Kevin van Zonneveld', 'Kevin van Sommeveld');
  // *                returns 1: 3
  if (s1 == s2) {
    return 0;
  }

  var s1_len = s1.length;
  var s2_len = s2.length;
  if (s1_len === 0) {
    return s2_len;
  }
  if (s2_len === 0) {
    return s1_len;
  }

  // BEGIN STATIC
  var split = false;
  try{
    split=!('0')[0];
  } catch (e){
    split=true; // Earlier IE may not support access by string index
  }
  // END STATIC
  if (split){
    s1 = s1.split('');
    s2 = s2.split('');
  }

  var v0 = new Array(s1_len+1);
  var v1 = new Array(s1_len+1);

  var s1_idx=0, s2_idx=0, cost=0;
  for (s1_idx=0; s1_idx<s1_len+1; s1_idx++) {
    v0[s1_idx] = s1_idx;
  }
  var char_s1='', char_s2='';
  for (s2_idx=1; s2_idx<=s2_len; s2_idx++) {
    v1[0] = s2_idx;
    char_s2 = s2[s2_idx - 1];

    for (s1_idx=0; s1_idx<s1_len;s1_idx++) {
      char_s1 = s1[s1_idx];
      cost = (char_s1 == char_s2) ? 0 : 1;
      var m_min = v0[s1_idx+1] + 1;
      var b = v1[s1_idx] + 1;
      var c = v0[s1_idx] + cost;
      if (b < m_min) {
          m_min = b; }
      if (c < m_min) {
          m_min = c; }
      v1[s1_idx+1] = m_min;
    }
    var v_tmp = v0;
    v0 = v1;
    v1 = v_tmp;
  }
  return v0[s1_len];
}

function getBrowserInfos() {
  ua = navigator.userAgent;
  sw = window.innerWidth + "(" + screen.width + ")";
  sh = window.innerHeight + "(" + screen.height + ")";
  ce = navigator.cookieEnabled;
  return "userAgent: "+ua+", screen: "+sw+" x "+sh+", cookieEnabled: "+ce;
}
function getReferrerInfo() {
  return readCookie("myReferrer");
}

function createCookie(Bezeichner, Wert, sitzungscookie, prefix) {
  if(!sitzungscookie) sitzungscookie = 0;
  var jetzt = new Date();
  if(sitzungscookie == 0) {
    var Auszeit = new Date(jetzt.getTime() + (60 * 60 * 24 * 365 * 1000));
    Auszeit = Auszeit.toGMTString();
  }
  else {
    var Auszeit = "";
  }
  pfad = document.URL.substring(document.URL.indexOf('//')+2, document.URL.lastIndexOf('/'));
  pfad = pfad.split('/')
  pfad[0] = '';
  pfad = pfad.join('/');

  prefix_list = prefix.split("/");
  for(i=1;i<prefix_list.length;i++) {
    pfad = pfad.substring(0, pfad.lastIndexOf('/'));
  }
  document.cookie = Bezeichner + "=" + Wert + "; expires=" + Auszeit + "; path=" + pfad + ";";
  if(sitzungscookie == 0) {
    window.location.reload();
  }
  return Wert;
}

function readCookie(name, returnfalse) {
  var nameEQ = name + "=";
  var ca = document.cookie.split(';');
  for(var i=0;i < ca.length;i++) {
    var c = ca[i];
    while (c.charAt(0)==' ') c = c.substring(1,c.length);
    if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
  }
  return returnfalse ? false : ((navigator.cookieEnabled == false) ? 'keine Cookies erlaubt' : 'keine Cookie-Information');
}
function eraseCookie(name, prefix) {
  createCookie(name,"",-1, prefix);
}

function setReferrerInfo(prefix) {
  r = document.referrer
  if((r != '') && (r.indexOf('http://duran2.de') == -1) && (r.indexOf('http://www.duran2.de') == -1) && (r.indexOf('http://merkur/') == -1)) {
    sitzungscookie = 1;
    createCookie("myReferrer", r, sitzungscookie, prefix);
  }
}

function getFontSize() {
  return Number(readCookie("FontSize", true) || 1);
}
function IncreaseFont(prefix) {
  createCookie("FontSize", getFontSize()+0.05, 0, prefix);
}
function DecreaseFont(prefix) {
  if(getFontSize()-0.05 >= 0.05) {
    createCookie("FontSize", getFontSize()-0.05, 0, prefix);
  } else {
    alert("Kleiner geht nicht!");
  }
}
function initFontSize() {
  $("body").css("font-size", getFontSize()+'em');
}
this.initSearchSuggestions = function() {
  var fields = $("#q, #q2");
  var defaultText = "Suchen ...";
  var classNames = {
    inactive: "ac_inactive",
    active: "ac_active",
    text: "ac_text"
  };
  fields.each(function() {
    $(this).focus(function() {
      if($(this).val() == "" || $(this).val() == defaultText) {
        $(this).val("");
      }
      $(this).removeClass(classNames.inactive).removeClass(classNames.text).addClass(classNames.active);
    });
    $(this).blur(function() {
      $(this).removeClass(classNames.active);
      if($(this).val() == "" || $(this).val() == defaultText) {
        $(this).val(defaultText).addClass(classNames.inactive);
      }
      else {
        $(this).addClass(classNames.text);
      }
    });
    $(this).val(defaultText).addClass(classNames.inactive).autocomplete(suggestions, {
      multiple: true,
      multipleSeparator: " ",
      selectFirst: false,
      highlight: false
    });
  });
};
function initToggleBox(boxId, linkId, prefix, normal) {
  lnk = $("#"+linkId)
  lnk.append("&nbsp;<span>einklappen</span>&nbsp;<img src='"+prefix+"src/aufklapp3.png' alt='&Delta;' />");
  lnk.click(function(){
    toggleBox(boxId, linkId, prefix, "slow");
  });
  if(!normal) normal = 'show';
  if(normal == 'hide') {
    toggleBox(boxId, linkId, prefix);
  }
}
function toggleBox(boxId, linkId, prefix, speed) {
  lnk = $("#"+linkId);
  div = $("#"+boxId);
  img = $("#"+linkId+" img:last");
  spn = $("#"+linkId+" span:last");

  if(!speed) var speed;

  lnk.toggleClass("eingeklappt");
  if(lnk.hasClass("eingeklappt")) {
    // einklappen
    div.hide(speed);
    img.attr("src", prefix+'src/aufklapp2.png');
    img.attr("alt", '&nabla;');
    spn.text('ausklappen');
  } else {
    // ausklappen
    div.show(speed);
    img.attr("src", prefix+'src/aufklapp3.png');
    img.attr("alt", '&Delta;');
    spn.text('einklappen');
  }
}

function DayOfWeek(d,m,y) { // day, month, year
  var a = Math.floor((14 - m)/12);
  var y = y - a;
  var m = m + 12*a - 2;
  var d = (d + y + Math.floor(y/4) - Math.floor(y/100) + Math.floor(y/400) + Math.floor((31*m)/12)) % 7;
  return d + 1;
}

var monthdays   = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
var monthdaysLY = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];

function LeapYear(y) {
  if ((y/4)   != Math.floor(y/4))   return false;
  if ((y/100) != Math.floor(y/100)) return true;
  if ((y/400) != Math.floor(y/400)) return false;
  return true;
}

function NthDay(nth,weekday,m,y) {
  if (nth > 0) return (nth-1)*7 + 1 + (7 + weekday - DayOfWeek((nth-1)*7 + 1,m,y))%7;
  if (LeapYear(y)) d = daysofmonthLY[m];
  else             d = daysofmonth[m];
  return d - (DayOfWeek(d,m,y) - weekday + 7)%7;
}

function getNextEBGdates(max) {
  max = max || 6;
  exceptions = /-8-\d\d?|-9-(?:[1-9]|1[0-4])$|-12-[23][0-9]/;

  ws = ["Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"]; // weekdays

  n = new Date(); // now
  y = n.getYear()%1900+1900; // year
  m = n.getMonth()+1; // month
  om = m; // original month
  n = []; // next_dates
  r = ''; // return

  for(i=1; i<max+1; i++) {
    w = (i%2 == 1) ? 4 : 6;
    d = NthDay(i, w, m, y); // day
    falsch = false;
    if(monthdays[m-1] < d || i==5) {
      if(m/12>=1) {
        m=1;
        y++;
      }
      else if(m==7) m+=2;
      else m++;
      max -= i;
      i=0;
      max++;
      continue;
    }
    if((m == om && d < new Date().getDate()+1)||exceptions.test(y+"-"+m+"-"+d)) {
      max++;
      continue;
    }
    n.push([w, d, m, y, falsch]);
  }

  for(i=0; i<n.length; i++) {
    t = n[i]; // this
    b = (t[0] == 4) ? "17:00 - 19:00 Uhr: Elektronik / Druse für Kids" : "15:30 - 16:30 Uhr: Microcontroller-Gruppe"; // time
    r += ws[t[0]-1] + ", <b>" + t[1] + "." + t[2] + "." + t[3] + "</b>, " + b + "<br />";
  }
  return r;
}

function twitterCallback2(twitters) {
  var statusHTML = [];
  for (var i=0; i<twitters.length; i++){
    var username = twitters[i].user.screen_name;
    var status = twitters[i].text.replace(/((https?|s?ftp|ssh)\:\/\/[^"\s\<\>]*[^.,;'">\:\s\<\>\)\]\!])/g, function(url) {
      return '<a href="'+url+'">'+url+'</a>';
    }).replace(/\B@([_a-z0-9]+)/ig, function(reply) {
      return  reply.charAt(0)+'<a href="http://twitter.com/'+reply.substring(1)+'">'+reply.substring(1)+'</a>';
    });
    statusHTML.push('<li><span>'+status+'</span> <span class="twitterDateLink">geschrieben <a href="http://twitter.com/'+username+'/statuses/'+twitters[i].id+'" target="_blank">'+relative_time(twitters[i].created_at)+'</a></span></li>');
  }
  document.getElementById('twitter_update_list').innerHTML = statusHTML.join('');
}

function relative_time(time_value) {
  var values = time_value.split(" ");
  time_value = values[1] + " " + values[2] + ", " + values[5] + " " + values[3];
  var parsed_date = Date.parse(time_value);
  var relative_to = (arguments.length > 1) ? arguments[1] : new Date();
  var delta = parseInt((relative_to.getTime() - parsed_date) / 1000);
  delta = delta + (relative_to.getTimezoneOffset() * 60);

  if (delta < 60) {
    return 'vor weniger als eine Minute';
  } else if(delta < 120) {
    return 'vor einer Minute';
  } else if(delta < (60*60)) {
    return 'vor ' + (parseInt(delta / 60)).toString() + ' Minuten';
  } else if(delta < (120*60)) {
    return 'vor einer Stunde';
  } else if(delta < (24*60*60)) {
    return 'vor ' + (parseInt(delta / 3600)).toString() + ' Stunden';
  } else if(delta < (48*60*60)) {
    return 'vor einem Tag';
  } else {
    return 'vor ' + (parseInt(delta / 86400)).toString() + ' Tagen';
  }
}