/* Prototype plugin for å trigge en event.  */
Element.prototype.triggerEvent = function(eventName) {
    if (document.createEvent)
    {
        var evt = document.createEvent('HTMLEvents');
        evt.initEvent(eventName, true, true);

        return this.dispatchEvent(evt);
    }

    if (this.fireEvent)
        return this.fireEvent('on' + eventName);
};

/**
 * Funksjoner for håndtering av trykk på entertasten.
 * 
 * @author	Thomas Sømoen <thomas@apt.no>
 * @version	20061011
 * @package	array
 */
var form = {
	/* Feltet som har fokus */
	activeField:null,
	
	/* funksjon for å sette aktivt felt*/
	setActiveField:function(element){
		form.activeField = $(element);
	},
	
	/* resette aktivt felt*/
	resetField:function(){
		form.activeField = null;
	},
	
	/* funksjon for å retrunerer aktivt felt.  */
	getActiveField:function(){
		if(form.activeField){
			
			/* når et felt byttes ut med et annet, men har samme id (som ved passord) så må det aktive feltet initieres på nytt eller så blir referansen feil*/
			var id = form.activeField.id;
			if(id.length > 0){
				return $(id);
			}else{
				return $(form.activeField);
			}
			
		}else{
			return false;
		}
	},
	
	/* funksjon som returerer knappen til det aktive skjemaet */
	getButton:function(){
		var button = null;
		if(form.activeField.name == 'password'){
			form.activeField = $(form.activeField.id);
		}
		

		var fieldset = form.activeField.up('fieldset');
		
		button = fieldset.down('a#enlistaddfriend');
		
		if(!button){
			button = fieldset.down('label.button input');
		}
		
		if(!button){
			button = fieldset.down('input.button');
		}
		if(!button && $('mobilepane')){
			button = $('mobilepane').down('a.send');
		}
		
		if(!button && $('personalsettingpane')){
			button = $($($('personalsettingpane').next()).down('input.button'));
		}
		
		return button;
	},
	
	/* funksjon som kalles når ett skjema skal sendes */
	handleSubmit:function(event){
		var field = form.getActiveField();
		if(field && form.isAjaxForm(field)){
		Event.stop(event);
			button = form.getButton();
			if(button){
				$(button).triggerEvent('click');	
			}
			Event.stop(event);
		}
	},
	
	/* funksjon sm legger på focus- og blur-hendleser */
	addEvents:function(element){
		Object.extend(element,{enter:true});
		element.observe('focus',function(){
			form.setActiveField(element);
		});
		element.observe('blur',form.resetField);
	},
	
	/* funksjon som sjekker om et skjema skal ha ajax-kall */
	isAjaxForm:function(input){
		var fieldset = input.up('fieldset');
		return !fieldset.hasClassName('noajax');
	},
	
	/* funksjon som legger på hendelser på alle skjemafelter av type text og password, som ligger i "container" */
	activateCollection:function(container){
		$(container).getElementsBySelector('input[type=text],input[type=password]').each(function(input){
			if(!input.enter && form.isAjaxForm(input)){
				form.addEvents(input);
			}
		});
	},
	
	/* funksjon som legger på hendelser på alle skjemafelter av type text og password på siden  */
	activateEnter:function(){
		$$('input[type=text],input[type=password]').each(function(input){
			if(!input.enter && form.isAjaxForm(input)){
				form.addEvents(input);
			}
		});
	}
};

/* aktiverer funksjonaliteten på på onload */
Event.observe(window, 'load', function(){
	form.activateEnter();
	$('form').observe('submit',form.handleSubmit);
});

