// CMS tasks v1.01
// Relies on jQuery 1.2.1 loading first
// 27.11.2007

var itemDetails;
var advOptions;
var itemTitle;
var itemDesc; 
var itemDate; 
var itemAuthor;
var itemType;
var itemPublish;

function clickLinks() {
$('.metadata-links .modTitle').unbind().click(function() { 
    $(this).parent().parent().toggleClass('open') 
    });
}  

function linkingGreyBox(caption,url,height,width,linkDefId) {
if (document.getElementById('currentLink') && document.getElementById('namespace')) {
  document.getElementById('currentLink').value = linkDefId;
  GB_showCenter(caption,url,height,width,clickLinks);
}
else { alert("currentLink or namespace input missing. Please include hidden inputs in your content template called currentLink and namespace"); }
}
/* change from /w to . in order to accommodate Chinese characters */
ValidationRules = {
  "date":{
    regex:/^((((0?[1-9]|[12]\d|3[01])[\.](0?[13578]|1[02])[\.]((1[6-9]|[2-9]\d)?\d{2}))|((0?[1-9]|[12]\d|30)[\.](0?[13456789]|1[012])[\.]((1[6-9]|[2-9]\d)?\d{2}))|((0?[1-9]|1\d|2[0-8])[\.]0?2[\.]((1[6-9]|[2-9]\d)?\d{2}))|(29[\.]0?2[\.]((1[6-9]|[2-9]\d)?(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00)|00)))|(((0[1-9]|[12]\d|3[01])(0[13578]|1[02])((1[6-9]|[2-9]\d)?\d{2}))|((0[1-9]|[12]\d|30)(0[13456789]|1[012])((1[6-9]|[2-9]\d)?\d{2}))|((0[1-9]|1\d|2[0-8])02((1[6-9]|[2-9]\d)?\d{2}))|(2902((1[6-9]|[2-9]\d)?(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00)|00))))$/,
    message:"Invalid date format, please use dd.mm.yyyy"
    },
  "mandatory":{
    regex:/.+/,
    message:"Please provide a value"
    }
};

ErrorField = function(element,message,input) {
  this.element = element;
  this.message = message;
  this.input = input;
  this.toString = function() {
    return element.id +' ' + message;
  }
};

Validator = function(settings) {
  this.handlers = [];
  if( typeof settings != "undefined" ) {
    for( var property in this) {
      if(typeof settings[property] != "undefined") {
        this[property] = settings[property];
      }
    }
  }
  this.errors = [];
};

Validator.prototype = {
  validate:function() {
    this.errors = [];
    var fields = $('.validate');
    for (var i=0; i<fields.length; i++) {
      var field = fields[i];
      for (var rule in ValidationRules) {
        if ($(field).hasClass(rule)) {
          this.validateField(field, rule);
        }
      }
    }
    this.notifyHandlers();
    return this.errors.length == 0;
  },
  
  validateField:function(field, className) {
    var input = $(field).find('input[type=text], textarea, select').filter(function() { return !$(this).parents('.mceEditorContainer').length; });
    var rule = ValidationRules[className];
    if (rule != undefined) {
      if (rule.regex != undefined) {
        if (!input.val().match(rule.regex)) {
          this.errors.push(new ErrorField(field,rule.message,input));
        }
      }
      else if (rule.process != undefined) {
        if (!rule.process(input)) {
          this.errors.push(new ErrorField(field,rule.message,input));
        }
      }
    }
  },
  
  notifyHandlers:function() {
    for (var i=0;i<this.handlers.length;i++) {
      this.handlers[i](this.errors);
    }
  }
};

AlertBoxErrorHandler = function(errors) {
  if (errors.length > 0) {
    var errorReport = '';
    for (var i=0;i<errors.length;i++) {
      errorReport += $(errors[i].input).siblings('label').html() +': '+ errors[i].message + '\n';
    }
    alert(errorReport);
  }
}

FieldHighlighterErrorHandler = function(errors) {
  $('.validate.error').removeClass("error");
  if (errors.length > 0) {
    for (var i=0;i<errors.length;i++) {
      $(errors[i].element).addClass('error');
    }
  } 
}


$(document).ready(function(){
  validator = new Validator({
    handlers:[AlertBoxErrorHandler,FieldHighlighterErrorHandler]
  });
  $('form').submit(function() {return validator.validate(); });
});

