function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	
	for (var i=0; i<ca.length; i++) {
		var c = ca[i];
		while (c.charAt(0)==' ')
			c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0)
			return c.substring(nameEQ.length,c.length);
	}
	
	return null;
}

function setCookie(c_name,value,expiredays) {
	var exdate = new Date();
	exdate.setDate(exdate.getDate()+expiredays);
	document.cookie = c_name+ "=" + escape(value) + ((expiredays==null) ? "" : ";expires="+exdate.toGMTString()) + ";path=/";
}

function validate_email(email) {
   var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
   if (reg.test(email) == false)
      return false;
   return true;
}

/**--------------------------------------------------------------------------*/ 
// Jument Communicator
/**--------------------------------------------------------------------------*/ 
var Jument = {};
Jument.ajax = Class.create({
	initialize: function(params) {
		this.response_data = '';
		this.params = {};
		
		this.params = params;
		
		if(this.params.options == undefined) {
			this.params.options = {};
		}
		
		this.request();
	},
	
	request: function() {
		this.show_loader();
		
		this.params.options.method = this.params.options.method ? this.params.options.method : 'post';
		
		if(this.params.form) {
			if(this.params.options.parameters == undefined) {
				this.params.options.parameters = Form.serialize(this.params.form);
			} else {
				this.params.options.parameters = this.params.options.parameters.concat('&', Form.serialize(this.params.form));
			}
		}
		
		if(!this.params.url) alert('AJAX: Requires URL');
		if(this.params.debug) console.log('url: %o \npars: %o', this.params.url, pars);
		
		// prep the onComplete function. Add on the hide_loader function
		if(!this.params.options.onComplete) {
			var onComplete = function() { this.hide_loader(); }.bind(this);
		} else if(this.params.onComplete instanceof Array) {
			var funtions = "";
			for(i=0; i < this.params.options.onComplete.length; i++) {
				functions += "this.params.options.onComplete["+i+"]();";
			}
			var onComplete = function(){ eval(functions); this.hide_loader(); }.bind(this);
		} else {
			var func = this.params.options.onComplete;
			var onComplete = function() { func(); this.hide_loader(); }.bind(this);
		}
		
		this.params.options.onComplete = onComplete;
		
		if(this.params.div) {
			new Ajax.Updater(this.params.div, this.params.url, this.params.options);
		} else {
			this.params.options.onSuccess = this.params.options.onSuccess ? this.params.options.onSuccess : this.response;
			new Ajax.Request(this.params.url, this.params.options);
		}
	},
	
	response: function(r) {
		eval('this.response_data = '+r.responseText);

		if(this.response_data.debug) {
			console.log(this.response_data);
			console.log(this.response_data.javascript.replace(/;/, "\n"));
		}
	
		if(this.response_data.javascript) eval(this.response_data.javascript); 
	},
	
	show_loader: function() {
		var loader;
		if (loader = $(this.params.loader)) loader.show();
		document.body.style.cursor = "wait";
	},
	
	hide_loader: function() {
		var loader;
		if (loader = $(this.params.loader)) loader.hide();
		document.body.style.cursor = "default";
	}
});

Jument.submit_form = Class.create({
	initialize: function(url, frm, btn, xpars) {		
		this.submit_form(url, frm, btn, xpars);
	},
	submit_form: function(url, frm, btn, xpars) {
		var btn = $(btn);
		var original_btn_value = btn.value;
		btn.value = 'Please wait...';
		btn.disabled = true;
		
		var pars;
		if(xpars != undefined) pars += '&' + xpars;
		
		new Jument.ajax({
			url: url,
			form: frm,
			options: {
				parameters: pars,
				onFailure: function() { alert('An error occurred. Please try again.'); },
				onComplete: function() { btn.disabled = false; btn.value = original_btn_value; }
			}
		});
	}
});
