_abort_form_submit = false;

function insertAfter(newElement, refElement)
{
	if ( refElement.nextSibling ) {
		refElement.parentNode.insertBefore(newElement, refElement.nextSibling);
	} else {
		refElement.parentNode.appendChild(newElement);
	}
}

function findPos(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}
	return [curleft,curtop];
}

var Rules = {

	/* Alert on blocks */
	'.block:click': function(element,event) {
		if ( !confirm(Lang.say('block this user')+' ?') ) {
			Event.stop(event);
		}
	},

	/* Simulate min-midth in IE6 */
	'.frame': function(element) {
		if ( element.offsetWidth < 800 ) {
			element.getElementsByClassName('body')[0].style.width = '99%';
		}
	},

	/* Display blocked comments */
	'.blocker:click': function(element) {
	
		while ( element.tagName != 'DIV' ) {
			element = element.parentNode;
		}
	
		if ( showme = $(element.getAttribute('for')) ) {
			showme.style.display = 'block';
			Element.hide(element);
		}
	},

	/* Help links */
	'a.help:click': function(element, event) {
		window.open(element.href, 'help', 'scrollbars=1,titlebar=0,resizable=1,width=400,height=500');
		Event.stop(event);
	},

	/* Sidebar signup form */
	'form.sidebar .username:focus': function(element) {
		element.value = '';
	},

	'form.sidebar .password:focus': function(element) {
		var nelem		= document.createElement('input');
		nelem.type		= 'password';
		nelem.className	= 'password input_text';
		nelem.name		= '_auth_password';
		element.parentNode.insertBefore(nelem,element);
		element.parentNode.removeChild(element);
		nelem.focus();
	},

	/* Document layout options */
	'#set_decrease:click': function(element)
	{
		if ( typeof document.body.fontsize == 'undefined' )  {
			document.body.fontsize = 0.8;
		}
		document.body.fontsize = Math.max(document.body.fontsize -= 0.1, 0.8);

		
		document.body.style.fontSize = document.body.fontsize+'em';
	},

	'#set_increase:click': function(element)
	{
		if ( typeof document.body.fontsize == 'undefined' )  {
			document.body.fontsize = 0.8;
		}
		document.body.fontsize = Math.min(document.body.fontsize += 0.1, 1.6);
		document.body.style.fontSize = document.body.fontsize+'em';
	},

	'#set_expand:click': function(element)
	{
		Element.toggleClassName(element.parentNode,'contract');
		Element.toggle('sidebar');
		$('home').style.paddingRight	= Element.visible('sidebar') ? '220px' : '0';
	},

	'#set_wider:click': function(element)
	{
		if ( typeof curwidth == 'undefined' ) {
			curwidth = 60;
		}
		curwidth = Math.min(curwidth += 5, 95);

		document.getElementsByClassName('body').map( function(bl) {
			bl.style.width	= curwidth+'%';
		} );
	},

	'#set_narrower:click': function(element)
	{
		if ( typeof curwidth == 'undefined' ) {
			curwidth = 60;
		}
		curwidth = Math.max(curwidth -= 5, 25);

		document.getElementsByClassName('body').map( function(bl) {
			bl.style.width	= curwidth+'%';
		} );
	},

	'#set_printer:click': function(element)
	{
		alert(Lang.say('Take Deliric with you!.  Soon you will be able to print all submissions from this page'));
	},



	/* Secure passwords */
	'input.secure': function(element)
	{
		var notice			= document.createElement('SPAN');
		notice.className	= 'notice';
		element.notice		= notice;
		insertAfter(notice,element);
	},
	
	'input.secure:keyup': function(element)
	{
	
		var prefix = '<span class="red">Contraseña Insegura: </span>';
	
		if ( !element.value ) {
			element.notice.innerHTML = '';
			return;
		}
	
		if ( element.value.length < 6 ) {
			element.notice.innerHTML = prefix+'La contraseña es demasiado corta';
			return;
		}
	
		if ( !element.value.match(/[a-z]/) ) {
			element.notice.innerHTML = prefix+'Incluya al menos una letra minúscula';
			return;
		}
	
		if ( !element.value.match(/[A-Z]/) ) {
			element.notice.innerHTML = prefix+'Incluya al menos una letra mayúscula';
			return;
		}
	
		if ( !element.value.match(/[0-9]/) ) {
			element.notice.innerHTML = prefix+'Incluya al menos un número';
			return;
		}
	
		element.notice.innerHTML = '<span class="green">Contraseña segura </span>';	
	},


	/* Input buttons */
	'input[type=submit]:click': function(element) {
		
		if ( element.getAttribute('type') != 'submit' || _abort_form_submit ) {
			return;
		}
		
		element.originalValue	= element.value;
		element.value			= Lang.say('sending')+'...';
		Element.addClassName(element,'sending');
	},

	/* Prevent multiple submissions */
	'form': function(form)
	{	
		form.onsubmit = function(event)
		{
			if (_abort_form_submit) {
				return false;
			}
			
			if (this.submitting) {
				return false;
			}
			this.submitting = true;
		}
	},


	/* Validate forms */
	'form.validable': function(element)
	{
		element.onsubmit = function() {

			/* ONLY SUBMIT ONCE */
			if (this.submitting) {
				return false;
			}
			this.submitting = true;

			/* Clear all errors */
			document.getElementsByClassName('error').map(function(err){
				err.parentNode.removeChild(err);
			});

			new Ajax.Request(this.action,{
				parameters: Form.serialize(this),
				onComplete: function(req) {
					response	= eval(req.responseText);

					if (response.location) {
						window.location = response.location;
						return false;
					}

					for ( var i in response) {
						input = document.getElementsByName(i)[0];
						if (input) {
							var addme			= document.createElement('SPAN');
							addme.className		= 'error';
							addme.innerHTML		= response[i];
							input.error			= addme;	
							input.parentNode.appendChild(addme);

							input.onfocus		= function()
							{
								if (this.error) {
									this.error.parentNode.removeChild(this.error);
									this.error	= false;
								}
							}
						}
					}

					/* Reactivate form and input buttons */
					element.submitting = false;
					$A(element.getElementsByTagName('INPUT')).map(function(input){
						if (input.type == 'submit') {
							Element.removeClassName(input,'sending');
							if (input.originalValue){
								input.value = input.originalValue;
							}
						}
					});
				
				}
			});

			return false;
		}
	}

}

Event.observe(window, 'load', function() {
  EventSelectors.start(Rules);
});

