var serverURL = '/server/actions.php';

var phrases = {
	activeForm: null,
	activeGlitter: 0,
	hiddenLabel: 0,
	
	ping: function(phraseid) {
		var params = {
			parameters: 'action=ping&phraseid=' + parseInt(phraseid),
			onComplete: function(request) {
				return false;
			}
		};
		
		new Ajax.Request(serverURL, params);
	},
	
	getCode: function(glitterid, glitterpath) {
		var labels = $('labels_' + glitterid);
		var glitter = $('glitter_' + glitterid);
		if (!labels || !glitter) return;
		
		var form = $('phrases_form');
		if (!$('form_' + glitterid))
		{
			var formClone = form.cloneNode(true);
			formClone.id = 'form_' + glitterid;
		}
		else
		{
			var formClone = $('form_' + glitterid);
		}
		
		if (this.activeForm)
			Element.hide(this.activeForm);
		this.activeForm = formClone;
		this.activeGlitter = glitterid;

		// set needed values
		var inputs = formClone.getElementsByTagName('INPUT');
		for(var i=0; i<inputs.length; i++) {
			var inp = inputs[i];
			inp.value = inp.value.replace('%s', glitterpath);
		}
		
		
		if (form) {
			// insert form in needed place
			labels.parentNode.insertBefore(formClone, labels);
			Element.show(formClone);
			
			// scroll to glitter
			var myEffect = new fx.Scroll({duration: 500});
			myEffect.scrollTo(glitter);
		}
		
		return false;
	},
	
	showEmailForm: function(glitterid) {
		var labels = $('labels_' + glitterid);
		var glitter = $('glitter_' + glitterid);
		if (!labels || !glitter) return;
		
		var form = $('mail_form');
		
		if (this.activeForm)
			Element.hide(this.activeForm);
		this.activeForm = form;
		this.activeGlitter = glitterid;
		
		if (form) {
			// insert form in needed place
			labels.parentNode.insertBefore(form, labels);
			Element.show(form);
			
			// scroll to glitter
			var myEffect = new fx.Scroll({duration: 500});
			myEffect.scrollTo(glitter);
			
			// focus on needed field
			var n = $('name');
			var m = $('message');
			if (n && n.tagName == 'INPUT' && !n.value) n.focus();
			else if (m && m.tagName == 'TEXTAREA') m.focus();
		}
		
		this.preloadLoader();
		this.hideErrors();
		return false;
	},
	
	preloadLoader: function() {
		var img = new Image();
		img.src = '/images/loader.gif';
	},
	
	sendEmail: function() {
		var params = {
			parameters: 'action=send_mail&glitterid=' + this.activeGlitter + '&' + Form.serialize('mailform'),
			onSuccess: this.onSendSuccess.bind(this),
			onFailure: this.onSendFailure.bind(this)
		};
		
		this.showLoading();
		this.hideErrors();
		new Ajax.Request(serverURL, params);
		return false;
	},
	
	onSendSuccess: function(request) {
		this.hideLoading();
		eval("var ajaxres = ("+ request.responseText +");");
		
		// handle server error
		if (!ajaxres || (!ajaxres.status && !ajaxres.errors))
		{
			this.onSendFailure(request);
			return false;
		}
		
		// handle user errors
		if (!ajaxres.status && ajaxres.errors) {
			this.showErrors(ajaxres.errors);
			return false;
		}
		
		// successfully sent
		this.hideMailForm();
		alert("Mail to "+ ajaxres.friendname +" successfully sent!");
	},
	
	onSendFailure: function(request) {
		this.hideLoading();
		alert("Can't send mail right now due to server error. Please try a bit later!");
	},
	
	hideMailForm: function() {
		Element.hide('mail_form');
	},
	
	showErrors: function(errors) {
		var errObj = $('errors');
		errObj.innerHTML = '<strong>Fix the following errors and try again:</strong><br />' + 
			errors.join('<br />');
		Element.setStyle(errObj, {display: 'block'});
	},
	
	hideErrors: function() {
		Element.hide('errors');
	},
	
	showLoading: function() {
		var loader = $('loader');
		var mailform = $('mailform');
		if (!loader || !mailform) return;
		
		Element.hide(mailform);
		Element.setStyle(loader, {display: 'block'});
		
		if (this.activeGlitter) {
			var labels = $('labels_' + this.activeGlitter);
			this.hiddenLabel = this.activeGlitter;
			Element.hide(labels);
		}
	},
	
	hideLoading: function() {
		var loader = $('loader');
		var mailform = $('mailform');
		if (!loader || !mailform) return;
		
		Element.hide(loader);
		Element.show(mailform);

		if (this.hiddenLabel) {
			var labels = $('labels_' + this.hiddenLabel);
			this.hiddenLabel = 0;
			Element.show(labels);
		}
	}
};

function _print(e) {
	document.body.appendChild(document.createElement('BR'));
	document.body.appendChild(document.createTextNode(e));
}

function _print_props(obj) {
	for(var i in obj) 
		if (typeof obj[i] == 'function')
			_print(i + ': Function');
		else
			_print(i + ': ' + obj[i]);
	
}

