/*
 * File           : $Header: //depot/projects/hallingdolen/hallingdolen-publication/src/main/webapp/template/version/javascript/formValidator.js#4 $
 * Last edited by : $Author: shaon $ $Date: 2008/07/02 $
 * Version        : $Revision: #4 $
 *
 * Copyright (C) 2007 Escenic AS.
 * All Rights Reserved.  No use, copying or distribution of this
 * work may be made except in accordance with a valid license
 * agreement from Escenic AS.  This notice must be included on
 * all copies, modifications and derivatives of this work.
 */

var positiveIntegerFilter = /^\d+$/;
var emailAddressFilter = /^([a-zA-Z0-9])+([\.a-zA-Z0-9_-])*@([a-zA-Z0-9])+(\.[a-zA-Z0-9_-]+)+$/;

function isEmpty(form, fieldName) {
  var value = form[fieldName].value;
  return value == null || value == "";
}

function validatePositiveInteger(form, fieldName, spanId, errorMessage) {
  return validateField(form, fieldName, spanId, positiveIntegerFilter, errorMessage)
}

function validateEmailAddress(form, fieldName, spanId, errorMessage) {
  return validateField(form, fieldName, spanId,
      emailAddressFilter, errorMessage)
}

function validateField(form, fieldName, spanId, filter, errorMessage) {
  var field = form[fieldName];
  var value = field.value;

  if (filter.test(value)) {
    return true;
  }

  field.focus();
  var errorSpan = document.getElementById(spanId);
  errorSpan.innerHTML = errorMessage;
  errorSpan.className = "error";
  errorSpan.style.display = 'block';
  field.style.border = '1px solid red';

  return false;
}

function validateEmptyField(form, fieldName, spanId, errorMessage) {

  var field = form[fieldName];
  var errorSpan = document.getElementById(spanId);

  if (isEmpty(form,fieldName)) {
    field.focus();
    errorSpan.innerHTML = errorMessage;
    errorSpan.style.display = 'block';
    field.style.border = '1px solid red';
    return false;
  } else {
    return true;
  }
}

function revertToNormalField(form, fieldName, spanId) {
  var field = form[fieldName];
  var errorSpan = document.getElementById(spanId);
  if (errorSpan) {
    errorSpan.innerHTML = "";
    errorSpan.style.display = 'none';
    field.style.border = null;
  }
}

function validateCommentForm(form, titleErrorMessage, bodyErrorMessage, bylineErrorMessage, emailErrorMessage) {
  var success = true;

  if (form['title'].type == 'hidden' ||
      validateEmptyField(form, 'title', 'forum.comment.title.error', titleErrorMessage)) {
    revertToNormalField(form, 'title', 'forum.comment.title.error');
  } else {
    success = false;
  }

  if (validateEmptyField(form, 'body', 'forum.comment.body.error', bodyErrorMessage)) {
    revertToNormalField(form, 'body', 'forum.comment.body.error');
  } else {
    success = false;
  }

  if (validateEmptyField(form, 'byline', 'forum.comment.byline.error', bylineErrorMessage)) {
    revertToNormalField(form, 'byline', 'forum.comment.byline.error');
  } else {
    success = false;
  }

  if (form['email'].type == 'hidden' ||
      validateEmailAddress(form, 'email', 'forum.comment.email.error', emailErrorMessage)) {
    revertToNormalField(form, 'email', 'forum.comment.email.error');
  } else {
    success = false;
  }

  return success;
}
