/*
This script has different functions:
* Adding some end-user UI candy, dynamic "Läs mer…"-links for instance
* Load the admin interface dymanically when needed, to avoid forcing everyone
  to download a heap of javascript most people won't use
* Providing a function used in mail obfuscation to protect from spam.
*/

// Utility functions for cookies from quirksmode.org, modified by Per Eckerdal
function createCookie(name,value,days) {
  if (days) {
    var date = new Date();
    date.setTime(date.getTime()+(days*24*60*60*1000));
    var expires = "; expires="+date.toGMTString();
  }
  else var expires = "";
  document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
  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 null;
}

// Dynamic script loading technique stolen from
// http://cain.supersized.org/archives/2-Dynamic-loading-of-external-JavaScript-.js-files.html
// Modified by Per Eckerdal
function loadScript(file, cacheBuster) {
  if (window.XMLHttpRequest) // Gecko and alike
    var req = new XMLHttpRequest();
  else if (window.ActiveXObject) // IE
    var req = new ActiveXObject("Msxml2.XMLHTTP");
  
  if (cacheBuster) // Hack used when debugging
    file += "?rand="+parseInt(Math.random()*99999999);
  
  if (req) {
    req.open("GET", file, false);
    req.send(null);
    
    if (req.status==200)
      window.eval(req.responseText);
  }
}


// Stolen from Prototype (1.5.1.1)
if (!document.getElementsByClassName) {
  if (document.evaluate) {
    document._getElementsByXPath = function(expression, parentElement) {
      var results = [];
      var query = document.evaluate(expression, parentElement || document,
        null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
      for (var i = 0, length = query.snapshotLength; i < length; i++)
        results.push(query.snapshotItem(i));
      return results;
    };

    document.getElementsByClassName = function(className, parentElement) {
      var q = ".//*[contains(concat(' ', @class, ' '), ' " + className + " ')]";
      return document._getElementsByXPath(q, parentElement);
    }

  } else document.getElementsByClassName = function(className, parentElement) {
    var children = (parentElement || document.body).getElementsByTagName('*');
    var elements = [], child, pattern = new RegExp("(^|\\s)" + className + "(\\s|$)");
    for (var i = 0, length = children.length; i < length; i++) {
      child = children[i];
      var elementClassName = child.className;
      if (elementClassName.length == 0) continue;
      if (elementClassName == className || elementClassName.match(pattern))
        elements.push(child);
    }
    return elements;
  };
}


/// Mail obfuscation
function protect_mail(a, b, c) {
  if (a == false) {
    document.write('</a>');
    return;
  }
  
  a = a.replace(/\|/g, '.');
  b = b.replace(/\|/g, '.');
  
  if (c === false)
    document.write('<a href="mailto:'+a+'@'+b+'">');
  else
    document.write(a+'@'+b);
}

/// Initialization
document.writeln('<script type="text/javascript" src="/js/tiny_mce/tiny_mce_src.js"></script>');

function loadAdminInterface() {
  if (navigator.userAgent.indexOf('Firefox') == -1) {
    alert("Administrationsgränssnittet är tyvärr endast kompatibelt med Mozilla Firefox.");
    return;
  }
  
  //loadScript('/js/tiny_mce/tiny_mce.js');
  //// Hacks needed for tinyMCE when loading dynamically. (strict_loading_mode must also be set to true)
  tinyMCE.baseURL = '/js/tiny_mce';
  tinyMCE.srcMode = '';
  loadScript('/js/prototype.js');
  loadScript('/js/ui.js');
  loadScript('/js/admin.js');
  adminScriptLoaded(readCookie('user') ? 'loggedIn' : 'loginForm');
}

window.onload = function() {
  // Things for the admin interface
  var l = document.getElementById('admin_login_link');
  l.onclick = loadAdminInterface;
  if (readCookie('user')) loadAdminInterface();
  
  // Things for "Läs mer…" links
  var each = function(e) {
    var lessLink = document.createElement('a');
    
    var moreLink = document.getElementsByClassName('readmore_link', e.parentNode)[0];
    if (!moreLink) return;
    moreLink.onclick = function() {
      e.style.display = 'block';
      moreLink.style.display = 'none';
      lessLink.style.display = 'block';
      return false;
    }
    
    lessLink.className = 'readless_link';
    lessLink.style.display = 'none';
    lessLink.href = "#";
    lessLink.onclick = function() {
      e.style.display = 'none';
      moreLink.style.display = 'block';
      lessLink.style.display = 'none';
      return false;
    }
    lessLink.appendChild(document.createTextNode('Stäng'));
    e.parentNode.appendChild(lessLink);
  }
  var elms = document.getElementsByClassName('readmore');
  for (var i=0; i<elms.length; i++) each(elms[i]); // We need a closure
  
  // Things for active calitems
  var m = location.href.match(/#cal_(\d+)$/);
  if (m) {
    var id = m[1];
    var e = document.getElementById('cal_'+id);
    if (e) {
      e.className = e.className+' selected';
      e.parentNode.className = e.parentNode.className+' has_selected';
    }
  }
}
