/*
-- CONSTANTS
---------------------------------------------------*/

// Stylesheet only in combination with JS...
// The DOM way has issues with Opera 9 and Safari, so we use document.write
document.write('<link rel="stylesheet" media="screen" href="/?css=home/css_withjsonly" />');

// Extend String with getHash()
String.extend({
 getHash : function() {
  var hash = this.split('#');
  return (hash[1]) ? hash[1] : false;
 }
});

/*
-- LINKAGE
---------------------------------------------------*/

var Links = {
 images : [],
 
 scan : function() {
  // get current domain
  var domain = location.href.match(/http:\/\/([.0-9a-z]*)\/.*/)[1];
  
  $$('#content a').each(
   function (a) {
    // skip link params
    if (a.href.test("(mailto:|javascript:)","ig")) return;
    
    // pdf link
    if (a.href.test("(.+)\.pdf$","ig")) { Links.setPdf(a); }
    
    // add external rel
    if (!a.href.test("("+domain+"|localhost|abvakabofnv\.nl|abvakabo\.nl)","ig") || a.rel == 'external') { Links.setExternal(a); }
    
    // 'toggle' links
    if (a.rel == 'toggle') { Links.setToggle(a); }
    
    if (a.rel == 'pan' || a.rel == 'sq') {
      var img = document.createElement('img');
      img.src = a.href;
      Links.images.push(img);  
    }
   }
  );
 },
 
 setPdf : function(a) {
  a.addClass('pdf');
 },
 
 setExternal : function(a) {
  a.addClass('external');
  a.setAttribute('rel','external');
  a.setAttribute('title','Deze link opent in nieuw venster');
 },
 
 setToggle : function(a) {
  // add classname to link
  a.addClass('toggle');
  
  // append span to link
  var toggleSpan = document.createElement('span');
  toggleSpan.appendChild(document.createTextNode(' ')); // IE doesn't show an empty span at all, hence the space
  a.appendChild(toggleSpan);
 },
 
 toggle : function(href) {
  var el = href.getHash();
  if (!el || !$(el)) return;
  
  $(el).setStyle('display','');
  $(el).toggleClass('hidden');
 },
 
 showAll : function(el) {
  $ES('a.toggle',el).each(
   function(el) {
    var hash = el.href.getHash();
    if (hash && $(hash)) {
     $(hash).removeClass('hidden');
    }
   }
  );
 },
 
 hideAll : function(el) {
  $ES('a.toggle',el).each(
   function(el) {
    var hash = el.href.getHash();
    if (hash && $(hash)) {
     $(hash).addClass('hidden');
    }
   }
  );
 },
 
 controllers : function() {
  var tgls = $$('.togglelist a.toggle');
  if(tgls.length < 2) return;
  $$('.togglelist').each(
   function(el) {
    // create container div
    var div   = new Element('div');
    
    // create 'show all' button
    var open  = new Element('button');
    open.setAttribute('type','button');
    open.onclick = function() { Links.showAll(el) };
    open.appendChild(document.createTextNode('Toon alle'));
    
    // create 'close all' button
    var close = new Element('button');
    close.setAttribute('type','button');
    close.onclick = function() { Links.hideAll(el) };
    close.appendChild(document.createTextNode('Verberg alle'));
    
    // append buttons to div, prepend div to togglelist
    div.appendChild(open);
    div.appendChild(close);
    $(div).injectBefore(el);
   }
  );
 },
 
 handleClick : function (e) {
  // thanks to http://www.naarvoren.nl/artikel/links.html
  var event = e || window.event;
  
  if (event.ctrlKey || event.shiftKey || event.altKey) return true;
  if (event.which && event.which != 1) return true;
  
  var target = event.target || event.srcElement;
  while(target && !/^a$/i.test(target.nodeName)) {
   target = target.parentNode;
  }
  
  if (!target || !target.getAttribute('rel')) return true;
  
  var rel = target.getAttribute('rel');
  var href = target.getAttribute('href');
  
  switch(rel) {
	case 'popup':
	 window.open(href, '', 'width=660,height=500');
    break;
   case 'external':
	 window.open(href);
    break;
   case 'confirm':
    if (confirm('Zeker weten?')) { return true; }
    break;
   case 'print':
    window.print();
    break;
   case 'dontgo':
    return false;
    break;
   case 'feed':
    // Small feed popup thingie...
    break;
   case 'toggle':
    Links.toggle(href);
    break;
   case 'sq':
    Links.showSquare(target);
    break;
	default:
	 return true;
  }

  try { event.preventDefault(); } catch(e){/* nothin' */}
  return false;
 },
 
 showSquare : function(a) {
  if (!$('one')) return;
  $$("#content a").each(
   function(el) {
    if (el.rel == 'sq') {
     el.removeClass('activesq');
    }
   }
  ); // end each #content a
  $('one').setStyle('background-image', 'url('+a.href+')');
  $(a).addClass('activesq');
 },
 
 openCurrent : function() {
  var hash = location.href.getHash();
  if (!hash || !(el = $(hash)) ) return;
  el.removeClass('hidden');
  new Fx.Scroll(window).toElement(el);
 },
 
 init : function() {
  window.addEvent('load', function() {
   Links.scan();
   Links.openCurrent();
   Links.controllers();
  });
  document.addEvent('click', Links.handleClick);
 } 
}

Links.init();
