// Contact us class
// George (rules)
var Contact = new Class ({
  initialize : function(options){
    this.options = options;
    this.fields = new Array();
    this.contactForm = $("contactForm");
  
  },
  
  init : function() {
    this.contactForm.addEvent("submit" , this.submitted.bindWithEvent(this));
  },
  
  addField : function(field) {
    this.fields.push(field);
  
  },
  
  
  
  submitted : function(event) {
    var valid = true;
    for (i = 0; i < this.fields.length; i++) {
      $currentControlValid = this.fields[i].isValid()
      valid = valid && $currentControlValid;
    }
    if (valid) {
      this.sendEmail();
      pageTracker._trackPageview("/contact-submit.php"); 
    }
    event.stop();
  },
  
  sendEmail : function() {
  	$('divContactForm').setStyle('display', 'none');
	$('divLoadingBar').setStyle('display', 'block');
  	var variables = this.getPostObject();
  	var jSonRequest = new Request.JSON({url: "includes/mailer_JSON.php", onComplete: function(summary) {
  		$('divConfirm').setStyle('opacity', 0);
  		$('divConfirm').setStyle('display', 'block');
  		var myFx = new Fx.Tween('divLoadingBar');
  		var myFx1 = new Fx.Tween('divConfirm');
  		
	  	myFx.start('opacity', 1, 0).chain(function(){
	  		$('divLoadingBar').setStyle('display', 'none');
			myFx1.start('opacity', 0, 1);
		})
  	}}).POST(variables);
  },
  
  getPostObject : function() {
  	var x = new Object();
  	this.fields.each(function(fields) {
  		var valuesArray = fields.getValues();
  		valuesArray.each(function(values) {
  		  var value = values[1];
  		  value = value.replace(/'/g, "");
  			eval("x." + values[0] + "='" + value + "';");
  		});
  	});
  	return x;
  }
  
  
  
});


window.addEvent('domready', function(){
var evolutiaContact = new Contact();
var nameField = new RequiredField({
  name: 'name',	
  input : $("txtName"),
  errorImgSrc : "images/errorbox-name.gif"
});

var commentsField = new RequiredField({
  name: 'enquiry',
  input : $("txtEnquiry"),
  errorImgSrc : "images/errorbox-comments.gif",
  offsetx: 270
});

var contactField = new RequiredFields({
  name: 'email',
  otherName: 'phone',
  input : $("txtEmail"),
  otherInput: $("txtPhone"),
  errorImgSrc : "images/errorbox-email-tel.gif"
});


evolutiaContact.addField(nameField);
evolutiaContact.addField(commentsField);
evolutiaContact.addField(contactField);
evolutiaContact.init(); 
});


var RequiredField = new Class ({
  options: {
      offsetx: 280,
      offsety: -5,
      input: Class.empty,
      errorImgSrc : "",
      name: 'default'
  },

  initialize : function(options) {
    this.setOptions(options);
    
    this.input = this.options.input;
    this.name = this.options.name;
    this.errorImgSrc = this.options.errorImgSrc;
    this.text = "";
    this.offsetx = this.options.offsetx;
    this.offsety = this.options.offsety;
    this.imgError = new Element("img");
    this.isErrorDisplayed = false;
  
  },
  
  isValid : function() {
    this.input.removeEvents();
    this.text = this.input.value;
    var valid = this.text.trim() != "";
    if (valid) {
      return true;
    }
    this.displayError();
    this.addErrorHandler();
    return false;
  },
  
  displayError : function() {
  	if (!this.isErrorDisplayed) {
    this.imgError.src = this.errorImgSrc;
    this.imgError.setStyle('opacity',0);
    this.imgError.style.position = "absolute";
    this.imgError.injectInside($("wholesite"));
    this.imgError.style.top = this.input.getTop() + this.offsety + "px";
  
    this.imgError.style.left = this.input.getLeft() + this.offsetx + "px";
    
  	this.imgError.fade(1); 
    this.isErrorDisplayed = true;
    }
    
  },
  
  addErrorHandler : function() {
    this.input.addEvent("focus", this.hideError.bindWithEvent(this));
  },
  
  hideError : function() {
    this.imgError.fade(0);
    this.input.removeEvents();
    this.isErrorDisplayed = false;
  },
  
  getValues : function() {
  	return [[this.name, this.input.get('value')]];
  }

});

var RequiredFields = new Class({
	Extends: RequiredField,
  initialize : function(options) {
    this.parent(options);
    this.otherInput = this.options.otherInput;
    this.otherName = this.options.otherName;
  },
  
  isValid : function() {
    this.input.removeEvents();
    this.otherInput.removeEvents();
    this.text = this.input.value.trim();
    this.otherText = this.otherInput.value.trim();
    var valid = (this.text != "") || (this.otherText != "");
    if (valid) {
      return true;
    }
    this.displayError();
    this.addErrorHandler();
    return false;
    
  },
  
  addErrorHandler : function() {
    this.input.addEvent("focus", this.hideError.bindWithEvent(this));
    this.otherInput.addEvent("focus", this.hideError.bindWithEvent(this));
  },

  hideError : function() {
  	
     if (!this.isErrorDisplayed) {
     	return;
     }
     
      
  	this.imgError.fade(0);
    this.input.removeEvents();
    this.otherInput.removeEvents();
    this.isErrorDisplayed = false;
  },
  
  getValues : function() {
  	return [[this.name, this.input.get('value')], [this.otherName, this.otherInput.get('value')]];
  }
  
  
  
  
  
  

});

RequiredField.implement(new Options);
