/*******************************************************************************
*                                                                              *
*  Door Krijn Hoetmer <http://krijnhoetmer.nl/>, Qontent <http://qontent.nl/>  *
*  Voor Badminton Vereniging Almere <http://www.bvalmere.nl/>                  *
*                                                                              *
*  Voor vragen over onderstaande code; <webmaster@bvalmere.nl>                 *
*  Zonder toestemming regelrecht overnemen mag natuurlijk niet                 *
*                                                                              *
*******************************************************************************/

var bvalmere = {

 /* Omdat JSON stoer staat; http://krijnhoetmer.nl/stuff/javascript/json/ */

 initialized: false,
 initialize: function() {
  this.initialized = true;
  this.addFormValidation();
  this.addSmileClickers();
  this.spamPrevent();
 },
 spamPrevent: function() {
  if (document.getElementById('reactie-spam-tr')) {
   document.getElementById('reactie-spam-input').value = 'no';
   document.getElementById('reactie-spam-tr').style.display = 'none';
  }
 },
 /* Idee van http://krijnhoetmer.nl/stuff/javascript/validation/ */
 addFormValidation: function() {
  var forms = document.getElementsByTagName('form');
  for (var i = 0; i < forms.length; i++) {
   forms[i].onsubmit = function() {
    var pass = true;
    var first = true;
    for (j = 0; j < this.length; j++) {
     var field = this.elements[j];
     if (cssClass.has(field, 'required')) {
      field.value = field.value.trim();
      if (field.value == '') {
       formValidation.addError(field, 'This field is required.');
       pass = false;
       if (first) {
        field.focus();
        first = false;
       }
      }
     }
     if (field.value && field.value != '') {
      if (cssClass.has(field, 'email')) {
       // Beetje simpel wellicht, maar boeie
       if (field.value.indexOf('@') == -1) {
        formValidation.addError(field, 'This is an invalid e-mail address.');
        pass = false;
        if (first) {
         field.focus();
         first = false;
        }
       }
      }
      if (cssClass.has(field, 'uri')) {
       var r = /^(http:\/\/)|(https:\/\/)|(ftp:\/\/)/;
       if (!r.test(field.value)) {
        formValidation.addError(field, 'The protocol (\'http://\' for example) is required.');
        pass = false;
        if (first) {
         field.focus();
         first = false;
        }
       }
      }
     }
    }
    return pass;
   }
  }
 },
 addSmileClickers: function() {
  if (document.getElementById('smilies')) {
   var smilies = document.getElementById('smilies');
   var lis = smilies.getElementsByTagName('li');
   for (var i = 0; i < lis.length; i++) {
    lis[i].onmouseover = function() {
     this.className = 'clickable';
    }
    lis[i].onmouseout = function() {
     this.className = '';
    }
    lis[i].onclick = function() {
     var s = this.getElementsByTagName('img')[0].getAttribute('title');
     var e = document.getElementById('txtBericht');
     if (document.selection) {
      e.focus();
      sel = document.selection.createRange();
      sel.text = sel.text + ' ' + s;
     } else if (e.selectionStart || e.selectionStart == '0') {
      e.focus();
      var startPos = e.selectionStart;
      var endPos = e.selectionEnd;
      e.value = e.value.substring(0, startPos) + e.value.substring(startPos, endPos) + ' ' + s + e.value.substring(endPos, e.value.length);
     } else {
      e.value += ' ' + s;
     }
    }
   }
  }
 }
}
var cssClass = {
 add: function(o, c) {
  this.remove(o, c);
  return o && (o.className += (o.className.length > 0 ? ' ' : '') + c);
 },
 remove: function(o, c) {
  return o && (o.className = o.className.replace(new RegExp('^' + c + '\\b\\s*|\\s*\\b' + c + '\\b', 'g'), ''));
 },
 has: function(o, c) {
  return (!o || !o.className) ? false : (new RegExp('\\b' + c + '\\b')).test(o.className);
 }
}

/* http://krijnhoetmer.nl/stuff/javascript/validation/ */
var formValidation = {
 addError: function(obj, message) {
  cssClass.add(obj.parentNode, 'error');
  obj.onchange = function() {
   formValidation.removeError(this);
  };
  if (!obj.error) {
   if (obj.parentNode.nodeName == 'DD') {
    var dd = document.createElement('dd');
    dd.className = 'error-tekst';
    dd.appendChild(document.createTextNode(message));
    insertAfter(obj.parentNode.parentNode, dd, obj.parentNode);
    obj.error = dd;
   } else if (obj.parentNode.nodeName == 'TD') {
    var tr = document.createElement('tr');
    var td1 = document.createElement('td');
    var td2 = document.createElement('td');
    tr.className = 'error-tekst';
    td2.appendChild(document.createTextNode(message));
    tr.appendChild(td1);
    tr.appendChild(td2);
    insertAfter(obj.parentNode.parentNode.parentNode, tr, obj.parentNode.parentNode);
    obj.error = tr;
   }
  }
 },
 removeError: function(obj) {
  cssClass.remove(obj.parentNode, 'error');
  if (obj.error) {
   if (obj.parentNode.nodeName == 'DD') {
    obj.parentNode.parentNode.removeChild(obj.error);
   } else if (obj.parentNode.nodeName == 'TD') {
    obj.parentNode.parentNode.parentNode.removeChild(obj.error);
   }
   obj.error = null;
  }
 }
}
Array.prototype.contains = function(element) {
 for (var i = 0; i < this.length; i++) {
  if (this[i] == element) {
   return true;
  }
 }
 return false;
}
String.prototype.trim = function() {
 return this.replace(/^\s+|\s+$/, '');
}
function insertAfter(parent, node, referenceNode) {
 parent.insertBefore(node, referenceNode.nextSibling);
}
addEvent(window, 'load', init);
function init() {
 if (bvalmere.initialized || (!document.getElementById && !document.getElementsByTagName && !document.createElement)) {
  return;
 }
 bvalmere.initialize();
}
if (document.addEventListener) {
 document.addEventListener('DOMContentLoaded', init, null);
}

/* Regelrechte kopie van http://ejohn.org/projects/flexible-javascript-events/ */
function addEvent(obj, type, fn) {
 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]);
 } else {
  obj.addEventListener(type, fn, false);
 }
}