String.prototype.regexmatch = function (format) {
  var result = new RegExp(format, 'im').exec(this);
  return !result ? null : (result.length === 1 ? result[0] : (result.length === 2 ? result[1] : result));
}

function add_or_remove_class(element, new_class, add_class, to_add, to_remove) {
  var classes_now = element.className;
  var regexp = new RegExp('\\b' + new_class + '\\b');
  var classes_new = '' +
    (add_class
    ? (to_add || element.keepchecking ? (regexp.exec(classes_now) ? classes_now : classes_now + ' ' + new_class) : classes_now)
    : (to_remove || element.keepchecking ? classes_now.replace(regexp, '') : classes_now)
    );
  if (classes_new != classes_now)
    element.className = classes_new;
}

function initall() {
//initexternal();
  initimages();
  initform();
  inittext();
  initprint();
}

function inittext() {
  if (document.getElementById('tekst'))
    document.getElementById('tekst').innerHTML = unescape(document.location.href.regexmatch('[\?\&]tekst=([^\?\&]*)')).replace(/\+/g, ' ').replace(/\. /, '.<br/>');
}

function initform() {
  var form = document.getElementById('gift');
  if (form) {
    form.onsubmit = submitform;
    var inputs = form.getElementsByTagName('input');
    for (var i = 0; i < inputs.length; i++) {
      var input = inputs[i];
      if ((input.type == 'text' || input.type == 'radio') && !input.readOnly) {
        input.onkeyup = checkform;
      }
    }
    var selects = form.getElementsByTagName('select');
    for (var j = 0; j < selects.length; j++) {
      var select = selects[j];
      select.onchange = checkform;
    }
  }
}

function doform(submit) {
  var form = document.getElementById('gift');
  var amount = form['amount'];
  add_or_remove_class(amount, 'fout', amount.value != Math.abs(parseInt(amount.value)), submit, true);
  var ok = true;
  var controls = form.getElementsByTagName('*');
  for (var i = 0; i < controls.length; i++) {
    var control = controls[i];
    var fout = /\bfout\b/.exec(control.className);
    if (submit || fout)
      control.keepchecking = true;
    if (fout) {
      if (submit)
        control.focus();
      ok = false;
    }
  }
  return ok;
}

function checkform() {
  doform(false);
}

function submitform() {
  return doform(true);
}

function initexternal() {
  var as = document.getElementsByTagName('a');
  for (var i = 0; i < as.length; i++) {
    if (as[i].getAttribute('rel') == 'external' || as[i].href.regexmatch('/wp-admin/')) {
      if (as[i].getAttribute('rel'))
        as[i].className += (as[i].className ? ' ' : '') + as[i].getAttribute('rel');
      as[i].title += 'Deze link opent in een nieuw venster';
      as[i].onclick = function() { window.open(this.href); return false; };
    }
  }
}

function initimages() {
  var imgs = document.getElementsByTagName('img');
  for (var i = 0; i < imgs.length; i++) {
    if (imgs[i].className.regexmatch('\\bfoto\\b')) {
      var toReplace = imgs[i].parentNode.tagName == 'P' && imgs[i].parentNode.childNodes.length == 1 ? imgs[i].parentNode : imgs[i];
      var className = imgs[i].className;
      imgs[i].className = null;
      var caption = makeElement('div', {}, '');
      caption.innerHTML = imgs[i].alt.replace(/\[/g, '<').replace(/\]/g, '>');
      toReplace.parentNode.replaceChild(
        makeElement('div', {className: className},
          [
            imgs[i].cloneNode(true),
            caption
          ]
        ),
        toReplace
      );
    }
  }
}

function makeElement(tag, attributes, children) {
  var element = document.createElement(tag);
  if (typeof(children) == 'object')
    for (var i = 0; i < children.length; i++)
      element.appendChild(children[i]);
  else if (typeof(children) == 'string')
    element.appendChild(document.createTextNode(children));
    for (var attribute in attributes) {
      if (attribute == 'style') {
        var params = attributes[attribute].split(';');
        for (var j = 0; j < params.length; j++) {
          var properties = params[j].split(':');
          var styleName   = properties[0].trim();
          var styleValue  = properties[1];
          if (styleName != '') {
            element.style[styleName.css()] = styleValue.trim();
          }
        }
      }
      else
        element[attribute] = attributes[attribute];
    }
  return element;
}

function initprint() {
  var divs = document.getElementsByTagName('div');
  for (var i = 0; i < divs.length; i++) {
    var marginTop = divs[i].className.regexmatch('\\bduplicate(\\d\\S*)\\b');
    if (marginTop) {
      var duplicate = divs[i].cloneNode(true);
      duplicate.className = 'duplicate print';
      duplicate.style.marginTop = marginTop.replace(/comma/, '.');
      divs[i].parentNode.insertBefore(duplicate, divs[i].nextSibling);
    }
  }
}
