function doLoad()
{
  top.browser = document.documentElement.className.match(/gecko|ie/);
  var m = document.body.className.match(/(archieven|verhalen)/);
  if(m)
  {
    var rubriek = m[1];
    switch(rubriek)
    {
      case "archieven":
        initPlaatsen();
        initSearch();
        break;
      case "verhalen":
        initPlaatsen();
        initSearch();
        break;
      default:
        break;
    }
  }
  Spif.DOMEvents.attach(document.body,"click",DynLinks.catchEmAll);
  SearchHighlighter.load();
  stretchMainColumn();
}

var DynLinks = {
  linkClasses: {
    printlink: function(evt,el) { evt.preventDefault(); window.print(); return false; },
    helplink: function(evt,el) { window.location = '/algemeen/help'; return false; },
    imagewindowlink: function(evt,el) { evt.preventDefault(); window.open(el.href); return false; }
  },
  externallink: function(evt,el) { evt.preventDefault(); window.open(el.href); return false; },
  catchEmAll: function(evt) {
    var el = evt.target || evt.srcElement;
    while( el && el != document.firstChild ) {
      // handle javascript links
      for(prop in DynLinks.linkClasses) {
        if(Spif.ClassNameAbstraction.contains(el,prop)) {
          var f = DynLinks.linkClasses[prop];
          return f(evt,el);
        }
      }
      // handle external links
      if(el.nodeName == "A" && el.getAttribute('href',2).match(/^http:/))
        return DynLinks.externallink(evt,el);
      
      el = el.parentNode;
    }
  }
};

function flashPlaceSelected(plaats)
{
  var type = document.body.className.match(/(homepage|archieven|verhalen)/)[1];
  plaats = plaats.replace('a/d','ad').replace('\'','');
  document.location.href = "/actions/NaarPlaats.aspx?type=" + type+ "&plaats=" + plaats;
}

function initPlaatsen()
{
  var select = document.getElementById("plaatsen") || document.getElementById("instellingen-selection");
  if(select !== null)
    Spif.DOMEvents.attach(select,"change",doSelectItem);
}
function initSearch()
{
  var searchForm = document.forms["search"];
  if(searchForm)
  {
    Spif.DOMEvents.attach(document.forms["search"], "submit", function(event)
    {
      if(searchForm.text.value == "" && (searchForm.periode != null && searchForm.periode.value == "" || searchForm.periode == null))
      {        
        document.getElementById("search-message").style.display = "block";
        return false;
      }
    });
  }
}
function doSelectItem(evt,obj)
{
  var rubriek = document.body.className.match(/(archieven|verhalen)/)[1];
  var selected = this.options[this.selectedIndex];
  var plaats = selected.innerHTML.replace(" ","-");
  var id = selected.value;
  if(id == "-1") return;
  
  if(rubriek == "verhalen")
    var url = "/verhalen/geografischelocatie/" + id + "/" + plaats;
  else if(rubriek == "archieven" && obj.id == "plaatsen")
    var url = "/archieven/perplaats/" + id + "/" + plaats;
  else if(rubriek == "archieven" && obj.id == "instellingen-selection")
    var url = "/archieven/bezoekadressen/" + id + "/" + plaats;
  
  document.location.href = url;
}

function changeResultsPerPage(select)
{
  var newValue = select.options[select.selectedIndex].value;
  var location = document.location.href;
  if(location.indexOf("&resultsperpage=") > -1)
    location = (location+"").replace(/&resultsperpage=[\d]+(&|[\s]*)/,"&resultsperpage="+newValue+"$1");
  else
    location += ("&resultsperpage="+newValue);
  if(location.indexOf("&page=") > -1)
    location = (location+"").replace(/&page=[\d]+(&|[\s]*)/,"&page=1"+"$1");
  else
    location += ("&page="+1);
  document.location.href = location;
}

function createHref(id,titel,type)
{
  var url = "";
  
  switch(type)
  {
    case "themas":
      url = "/verhalen/thema/";
      break;
    case "agendaitems":
      url = "/nieuws/agenda/";
      break;
    case "nieuwsberichten":
      url = "/nieuws/bericht/";
      break;
    case "bezoekadressen":
      url = "/archieven/bezoekadressen/";
      break;
    case "archiefstukken":
      url = "/archieven/archiefstuk/";
      break;
    case "locaties":
      url = "/verhalen/geografischelocatie/";
      break;
    case "themas":
      url = "/verhalen/thema/";
      break;
    case "tijdvakken":
      url = "/verhalen/tijdvak/";
      break;
    case "verhalen":
      url = "/verhalen/verhaal/";
      break;
    case "archieven":
    case "bijzonderecollecties":
      url = "/archieven/archief/";
      break;
  }
  titel = titel.replace(/[\s*]/g,"-");
  return url + id + "/" + titel;
}
// gets a parameter from the querystring
function getParameter(name, defaultValue)
{
  var qa = document.location.search.substring(1).split("&");
  for (var i=0; i<qa.length; i++)
  {
    if (qa[i].indexOf(name + "=") == 0)
      return unescape(qa[i].substring(name.length+1, qa[i].length));
  }
  return defaultValue ? defaultValue : null;
}

function getElementsByTagNameAttributeValue(ancestorEl, tagName, attrName, attrValue)
{
  if (typeof(attrValue) == "undefined")
    attrValue = null;

  var els = [];
  var a = ancestorEl.getElementsByTagName(tagName);
  for (var i=0; i<a.length; i++)
  {
    var el = a[i];
    switch (attrName)
    {
      case "className":
      case "class":
        if (Spif.ClassNameAbstraction.contains(el,attrValue))
          els.push(el);
        break;
      default:
        var val = el.getAttribute(attrName);
        if ((val != null) && ((attrValue == null) || (val == attrValue)))
          els.push(el);
    }
  }
  return els;
}

AanmeldValidator = {
  required_fields: ['naam','email','bericht'],
  required_msg: ' veld is leeg!',
  email_invalid_msg: ' is geen geldig e-mail adres!',
  email_re: /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
}

AanmeldValidator.is_required = function(name) {
  for(var i=0;i<AanmeldValidator.required_fields.length;i++)
    if(AanmeldValidator.required_fields[i] == name)
      return true;
  return false;
}

AanmeldValidator.validate = function(form) {
  for(var i=0;i<form.elements.length;i++) {
    el = form.elements[i]
    if(AanmeldValidator.is_required(el.name) && el.value.match(/^\s*$/)) {
      alert(el.name + AanmeldValidator.required_msg);
      return false;
    }
    if(el.name == 'email' && !el.value.match(AanmeldValidator.email_re)) {
      alert(el.value + AanmeldValidator.email_invalid_msg);
      return false;
    }
  }
  return true;
}

SearchHighlighter = {
  nodes_per_batch: 300,
  terms_to_highlight: function() {
    var elTerms = document.getElementById('search-terms');
    var termstr = elTerms ? elTerms.innerHTML : '';
    var quoteds = termstr.split('"');
    var terms = [];
    var inquote = false;
    for(var i=0; i<quoteds.length; i++) {
      if(inquote) {
        terms.push(quoteds[i]);
      } else {
        terms = terms.concat(quoteds[i].split(' '));
      }
      inquote = !inquote;
    }
    // filter out empty terms
    var filtered_terms = [];
    for(var i=0; i<terms.length; i++)
      if(terms[i] != '')
        filtered_terms.push(terms[i]);
    return filtered_terms;
  },
  elements_to_highlight: function() {
    var results = document.getElementById('search-result');
    if(!results)
      return [];
    else {
      if(Spif.ClassNameAbstraction.contains(document.body,'archieven')) {
        // #search-result//span[@class='value']
        var spans = results.getElementsByTagName('SPAN');
        var values = [];
        for(var i=0;i<spans.length;i++)
          if(Spif.ClassNameAbstraction.contains(spans[i], 'value'))
            values.push(spans[i]);
        return values;
      } else {
        var elems = [];
        // #search-result//dt/a
        var dts = results.getElementsByTagName('DT');        
        for(var i=0;i<dts.length;i++)
          elems.push(dts[i].firstChild);
        // #search-result//dd
        var dds = results.getElementsByTagName('DD');
        for(var i=0;i<dds.length;i++)
          elems.push(dds[i]);
        
        return elems;
      }
    }
  },
  highlight: function() {
    elems = SearchHighlighter.elements_to_highlight();
    if (elems.length == 0) return;
    var dict = SearchHighlighter.terms_to_highlight();
    if (dict.length == 0) return;
    
    // build a regexp for the terms
    var words = [];
    for(var i=0; i<dict.length; i++) {
      words.push(dict[i].toLowerCase().replace('*','\\w*'));
    }
    query = new RegExp('\\b'+words.join('\\b|\\b')+'\\b','i');

    // define a function that processes a textnode
    var processor = function(node) {

      var match = query.exec(node.data);
      if (match && node.parentNode.className != "searchterm") {
        var val = match[0];
        var before = node.splitText(match.index);
        var after = before.splitText(val.length);
        var span = node.ownerDocument.createElement('span'); 
        node.parentNode.replaceChild(span, before);
        span.className = 'searchterm';
        span.appendChild(before);
        if(after.data != '' && after != '') {
          processor(after);
        } 
        return false;
        
      } else {
        return false;
      }
    };
    
    // walk the elements under elem and apply the processor
    SearchHighlighter.todo = elems;
    SearchHighlighter.doHighlight(processor);
  },
  doHighlight: function(textproc) {
    var count = 0;
    while(SearchHighlighter.todo.length > 0) {
      if (count++ >= SearchHighlighter.nodes_per_batch) {
        var handler = function() {
          SearchHighlighter.doHighlight(textproc);
        };
        setTimeout(handler, 50);
        return;
      } else 
        SearchHighlighter.walkElements(SearchHighlighter.todo.shift(),textproc);
    }
  },
  // Applies textproc to every (real) textnode starting with node
  walkElements: function(node, textproc) {
    var skipre = /^(script|style|textarea)/i;
    if (node.nodeType == 1) { // element
      for(var i=0;i<node.childNodes.length;i++)
        if(!skipre.test(node.tagName))
          SearchHighlighter.walkElements(node.childNodes[i], textproc);
    } else if (node.nodeType == 3) { // textnode
      textproc(node);
    }
  },
  load: function() {
    SearchHighlighter.highlight();  
  }
}

function stretchMainColumn() {
  var contentColumn = null;
  var extraColumn = null;
  var els = document.getElementById('content').firstChild.childNodes;
  for (var i=0; i<els.length; i++) {
    var el = els[i];
    if (el.className == 'content-column') contentColumn = el;
    if (el.className == 'extra-column') extraColumn = el;
  }
  if (contentColumn && extraColumn && extraColumn.clientHeight > contentColumn.clientHeight ) {
    contentColumn.style.height = (extraColumn.clientHeight - 1) + 'px';
  }
}

Spif.DOMEvents.attach(window,"load",doLoad);
