/**
* SendToFriend
* @author Beau Bishop beau [at] webteks [dot] com
* @date 2007-09-15
*
* Extends Element.js.
* Needs work, but eh.. works for now.
*/

var SendToFriend = new Class({
	initialize: function () {
		this.form = $('send_to_friend');
		this.openLink = $('stf_open');
		this.closeLink = $('stf_close');
		this.submitBtn = $('stf_submit');
		this.loader = $('stf_loader');
		this.loader.empty().setStyle('display','none');
		/* add event listeners */
		this.openLink.addEvent('click', this.displayForm.bind(this));
		this.closeLink.addEvent('click', this.hideForm.bind(this));
		this.submitBtn.addEvent('click', this.submitForm.bind(this));
	},
	displayForm: function (e) {
		new Event(e).stop();
		$('stf').getFormElements().each(function(e){
			exclude = /submit|hidden/i;
			if(exclude.test(e.type)) {
				//true
			} else {
				e.setStyle('background-color','#ffffff').value = '';
			}
		});
		$('stf').setStyle('visibility','visible');
		$('frm').setStyle('visibility','visible');
		this.form.setStyle('visibility','visible');
		$('sender_name').focus();
	},
	hideForm: function (e) {
		new Event(e).stop();
		$('stf').setStyle('visibility','hidden');
		$('frm').setStyle('visibility','hidden');
		this.form.setStyle('visibility','hidden');
		$('stf_loader').empty();
		if($defined($('stf_status'))) $('stf_status').remove();
		//this.loader.hide();
	},
	resetForm: function (e) {
		new Event(e).stop();
	},
	validate: function (frm) {
		var opts = new Array;
		var exclude = /form_name_sent|submit_send/;
		var res = true;
		var i = 0;
		frm.getFormElements().each(function(el) {
			if (!exclude.test(el.name)) {
				el.setStyle('background','#ffffff');//b1aa8d
				if (!el.getValue()) {
					var fx = new Fx.Style(el, 'background-color', { duration: 400, transition: Fx.Transitions.Quad.easeInOut }).start('#fa9393', '#ffeeee');
					opts[i++] = el;
					res = false;
				}
			}	
		});
		return res;
	},
	submitForm: function (e) {
		new Event(e).stop();
		if(!this.validate(this.form)) { 
			return false; 
		}
		var frm    = this.form;
		var loader = $('stf_loader');
		loader.empty();
		var status = new Element('div', { id:'stf_status' }).setText("processing...");
		status.injectInside(loader);
		loader.setStyle('display','');
		//frm.setStyle('visibility','hidden');
		$('frm').setStyle('visibility','hidden');
		//send AJAX request
		this.form.send({
			method: 'post',
			onRequest: function() {
				status.setHTML(status.innerHTML + "...");
			},
			onSuccess: function() {
				status.setHTML("......Done!");
			},
			onFailure: function() {
				status.setHTML("<span class='error'>OOPS! An error occurred while processing.</span>"
							 	+ "<p><a href=''>Click here</a> to retry</p>");
			},
			onComplete: function() {
				loader.setStyle('background','#ffffff');
				status.setStyle('margin-top',85).setStyle('margin-right',5);
				
				if (this.response.text!="ERROR") {
					status.setHTML(this.response.text);
				} else {
					loader.empty().setHTML("<div class='error' style='text-align:center;font-size:10px'>Invalid Email!</div>").setStyle('top','15px');
					//frm.setStyle('visibility','visible');
					$('frm').setStyle('visibility','visible');
				}
			}
		});
		
	}
});
SendToFriend.implement(new Events);