Behaviour.register({
	"#FormContactForm_ContactForm": {
		validateEmailField: function(fieldName) {
			var el = _CURRENT_FORM.elements[fieldName];
			if(!el || !el.value){
        var label = GetLabelByEL(el);
        Element.setStyle(label, {color: ''});
        return true;
      }

		 	if(el.value.match(/^([a-zA-Z0-9_+\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/)) {
        var label = GetLabelByEL(el);
        Element.setStyle(label, {color: ''});
        return true;
		 	} else {
        _HAS_HAD_FORM_ERROR = true;
        var label = GetLabelByEL(el);
        Element.setStyle(label, {color: 'red'});
		 		return false;
		 	} 	
		}
	}
});


Behaviour.register({
	'#FormContactForm_ContactForm': {
		validate : function(fromAnOnBlur) {
			initialiseForm(this, fromAnOnBlur);
			
      if(typeof fromAnOnBlur != 'undefined'){
        if(fromAnOnBlur.name == 'Email')
    		  $('FormContactForm_ContactForm').validateEmailField('Email');
      }else{
        $('FormContactForm_ContactForm').validateEmailField('Email');
      }
			
      if(typeof fromAnOnBlur != 'undefined'){

							if(fromAnOnBlur.name == 'Name')

								requireForms(fromAnOnBlur);

						}else{
							requireForms('Name');
						}						if(typeof fromAnOnBlur != 'undefined'){

							if(fromAnOnBlur.name == 'Address')

								requireForms(fromAnOnBlur);

						}else{
							requireForms('Address');
						}						if(typeof fromAnOnBlur != 'undefined'){

							if(fromAnOnBlur.name == 'Email')

								requireForms(fromAnOnBlur);

						}else{
							requireForms('Email');
						}						if(typeof fromAnOnBlur != 'undefined'){

							if(fromAnOnBlur.name == 'Number')

								requireForms(fromAnOnBlur);

						}else{
							requireForms('Number');
						}
			
			var error = hasHadFormError();
			if(!error && fromAnOnBlur) clearErrorMessage(fromAnOnBlur);
			
			return !error;
		},
		onsubmit : function() {
			if(typeof this.bypassValidation == 'undefined' || !this.bypassValidation) return this.validate();
		}
	},
	'#FormContactForm_ContactForm input' : {
		initialise: function() {
			if(!this.old_onblur) this.old_onblur = function() { return true; } 
			if(!this.old_onfocus) this.old_onfocus = function() { return true; } 
		},
		onblur : function() {
			if(this.old_onblur()) {
				// Don't perform instant validation for CalendarDateField fields; it creates usability wierdness.
				if(this.parentNode.className.indexOf('calendardate') == -1 || this.value) {
					return $('FormContactForm_ContactForm').validate(this);
				} else {
					return true;
				}
			}
		}
	},
	'#FormContactForm_ContactForm select' : {
		initialise: function() {
			if(!this.old_onblur) this.old_onblur = function() { return true; } 
		},
		onblur : function() {
			if(this.old_onblur()) {
				return $('FormContactForm_ContactForm').validate(this); 
			}
		}
	}
});


function GetLabelByEL(el) {
  if(el) {
		if(el.className == "undefined") {
			return null;
		} else {
			if(el.className) {
				if(el.className.indexOf('field') == 0) {
					labels = el.getElementsByTagName('label');
					if(labels){
						var left = findIndexOf(labels,'left');
						var right = findIndexOf(labels,'right');
						if(left) {
							return left;
						} else if(right) {
							return right;
						} else {
							return GetLabelByEL(el.parentNode);
						}
					}
				}
				else if(el.className.indexOf('tablecolumn') != -1){ 
					return el.className.substring(0, el.className.indexOf('tablecolumn')-1); 
				}else{
					return GetLabelByEL(el.parentNode);
				}
			} else {
				if(el.id) {
					var labels = $$('label[for=' + el.id + ']');
          if(labels && labels.length > 0) return labels[0];
				}
			
				return GetLabelByEL(el.parentNode);
			}
		}
	}
	// backup
	return "this";
}

function requireForms(fieldName,cachedError){
  
  el = _CURRENT_FORM.elements[fieldName];
  
  if(el == null) {
    
    var descendants = _CURRENT_FORM.getElementsByTagName('*');

		el = $(fieldName);
		
		if(el == null)
			return true;
  }
  
  if(el != null) {
    
    var set = el.value;
    
    var baseEl;
		var fieldHolder = el;
		
		
		if(el.type) {
			if(el.parentNode.className.indexOf('form') != -1) set = true;
			baseEl = el;
		}else{
      
      if(_CURRENT_FORM.elements[fieldName]) {
				var i, hasValue = false;
				if(_CURRENT_FORM.elements[fieldName].length > 1) {
					for(i=0; i < el.length; i++) {
						if(el[i].checked && el[i].value) {
							hasValue = true;
							break;
						}
					}

					if(hasValue) set = true;
					else set = "";
					baseEl = el[0].parentNode.parentNode;

				} else {
					set = "";
					baseEl = el.parentNode;
				}

			} else {
				set = true;
			}
    }
    
    if( ( typeof set == 'undefined' || (typeof(set) == 'string' && set.match(/^\s*$/)) ) ) {
			var fieldLabel = findParentLabel(baseEl);

			if(fieldLabel == null || fieldLabel == "") {
				fieldlabel = "this field";
			}
			
      _HAS_HAD_FORM_ERROR = true;
      var label = GetLabelByEL(el);

      Element.setStyle(label, {color: 'red'});
      
      
			
			return false;
    }
    else {
			if(!hasHadFormError()) {
				if(baseEl) fieldHolder = baseEl.parentNode;
				var label = GetLabelByEL(el);
        Element.setStyle(label, {color: ''});
			}
			return true;
		}

  }
}