function addEvent(obj, type, fn) {
  if (obj.addEventListener) {
    obj.addEventListener(type, fn, false);
  } else if (obj.attachEvent) {
    obj["e" + type + fn] = fn;
    obj[type + fn] = function() { obj["e" + type + fn] (window.event); }
    obj.attachEvent("on" + type, obj[type + fn]);
  }
}

function O(n) { return document.getElementById(n);}

function trim(x){return x.replace(/^\s+|\s+$/g,'');}

function hasClass(obj, clName) {
  var clN = ' ' + obj.className + ' ';
  return (clN.match(' ' + clName + ' ') != null);
}

function addClass(obj, clName) {
  if (hasClass(obj, clName)) return;
  obj.className = trim(obj.className + ' ' + clName);
}

function removeClass(obj, clName) {
  if (!hasClass(obj, clName)) return;
  var clN = ' ' + obj.className + ' ';
  eval("obj.className = trim(clN.replace(/ " + clName + " /g,' '));");
}

var MTelems = new Array();
var MTelemsCount = 0;
var MT_startV = 0;
var MT_cookie="MTelem";
var City_cookie="Lokal";
var effectLevel = 1;
var moveableDone=false;

var cityFadingIn = false;
var cityFadingOut = false;
var navFading = false;

function faderObj() {
  this.obj = '';
  this.related = '';
  this.effects = 0;
  this.variable = '';
  this.speed = 0;
  this.timer = null;
  this.progress = 0;
  this.maxHeight = 0;
}

var faders = new Array();

function fadeDo(obj, opacity) {
  obj.style.opacity = (opacity / 100);
  obj.style.KhtmlOpacity = (opacity / 100);
  obj.style.filter = "alpha(opacity=" + opacity + ")";
}

function faderTimeout(index) {

  var fader = faders[index];
  var continueFading = true;
  var obj = O(fader.obj);
  var hasRelated = false;
  var related = null;
  var opacity = 0;

  if (fader.related != '-') { hasRelated = true; related = O(fader.related); }

  if (fader.progress == 0) {
    obj.style.display = 'block';
    if (hasRelated) related.style.display = 'block';
  }

  fader.progress += fader.speed;
  if (fader.progress >= 100) { fader.progress = 100; continueFading = false; }

  opacity = ((fader.effects & 1) == 1) ? (100 - fader.progress) : fader.progress;

  fadeDo(obj, opacity);
  if (hasRelated) fadeDo(related, opacity);

  if (((fader.effects & 2) == 2) && (effectLevel == 2)) {
    var cHeight = (opacity / 100) * fader.maxHeight;
    var cMargin = (fader.maxHeight - cHeight) / 2;
    obj.style.height = cHeight + 'px';
    obj.style.marginTop = cMargin + 'px';
  }

  if (continueFading) {
    fader.timer = window.setTimeout('faderTimeout(' + index + ')', 0);
  } else {
    window.clearTimeout(fader.timer);
    if ((fader.effects & 1) == 1) {
      obj.style.display = 'none';
      if (hasRelated) related.style.display = 'none';
    }
    eval(fader.variable + '=false;');
    delete(fader);
    fader = null;
  }
}

function registerFader(obj, effect, speed, related, fadingVar, delay, objHeight) {

  if (effectLevel == 0) {
    display = ((effect & 1) == 1) ? 'none' : 'block';
    O(obj).style.display = display;
    if (related != '-')
      O(related).style.display = display;
    return;
  }

  var faderIndex = faders.length;

  if (faders.length > 0) for (var i = 0; i < faders.length; i++) if (faders[i] == null) { faderIndex = i; break; }

  faders[faderIndex] = new faderObj();
  faders[faderIndex].obj = obj;
  faders[faderIndex].related = related;
  faders[faderIndex].speed = speed;
  faders[faderIndex].variable = fadingVar;
  faders[faderIndex].progress = 0;
  faders[faderIndex].maxHeight = objHeight;
  faders[faderIndex].effects = effect;
  eval(fadingVar + '=true;');
  faders[faderIndex].timer = window.setTimeout('faderTimeout(' + faderIndex + ')', delay);

}

function nav_expand(e) {

  if (navFading) return;

  var obj0 = O('nav_more');
  var obj1 = O('nav_more_all');

  if (obj0.expanded) {
    removeClass(obj0, 'navexp');
    addClass(obj0, 'navfold');
    registerFader('nav_more_all', 1, 15, '-', 'navFading', 0, 0);
  } else {
    removeClass(obj0, 'navfold');
    addClass(obj0, 'navexp');
    registerFader('nav_more_all', 0, 15, '-', 'navFading', 0, 0);
  }

  obj0.expanded = !obj0.expanded;
}

function nav_initialize() {
  O('nav_more').expanded = false;
  addEvent(O('nav_more'), 'click', nav_expand);
  var obj = O('nav_more_close').getElementsByTagName('a');
  addEvent(obj[0], 'click', nav_expand);
}

