/**
 * Håndterer visning, skjuling og nullstilling av ledetekst inne i input-felter.
 * 
 * @author	Thomas Sømoen <thomas@apt.no>
 * @version	20061029
 */


var input = new Object();

input.passwordField = null;
input.textField = null;

input.eventHideLabel = null;
input.eventShowLabel = null;

/* aktiverer hendelser på felter i "container" */
input.activateCollection = function(container){
	$(container).getElementsBySelector('input[type="text"]','textarea').each(function(element){
		var fieldset = element.up('fieldset');
		if(fieldset && !fieldset.hasClassName('nolabel')){
			element.label = element.value;
			input.bindEvents(element);
		}
	});
}

/* aktiverer hendelser på alle inputfelter  */
input.activate = function(){
	$$('input[type="text"]','textarea').each(function(element){
		var fieldset = element.up('fieldset');
		if(fieldset && !fieldset.hasClassName('nolabel')){
			element.label = element.value;
			input.bindEvents(element);
		}
	});
}

/* binder ledeteksthendelser til ett element */
input.bindEvents = function(element){
	element = $(element);
	input.eventHideLabel = input.hideLabel.bindAsEventListener(element);
	input.eventShowLabel = input.showLabel.bindAsEventListener(element);
	
	element.observe('focus',input.eventHideLabel);
	element.observe('blur',input.eventShowLabel);
}

/* fjerner ledeteksthendelser til ett element */
input.removeEvents = function(element){
	element = $(element);
	Event.stopObserving(element, 'focus', input.eventHideLabel);
	Event.stopObserving(element, 'blur', input.eventShowLabel);
}

/* skjuler en ledetekst */
input.hideLabel = function(event){
	var element = $(this);
	if(element.value == element.label){
		element.value = '';
		
		// Dersom feltet er ett passordfelt skiftes det til ett passordfelt slik at passordet blir skult.
		if(element.hasClassName('password')){
			element = input.changeInputToPassword(element);
		}
	}
}

/* viser en ledetekst */
input.showLabel = function(event){
	var element = $(this);
	if(element.value == ''){
		element.value = element.label;
		
		// Dersom feltet er ett passordfelt skiftes det til ett tekstfelst slik at ledeteksten er leselig
		if(element.hasClassName('password')){
			element = input.changeInputToText(element);
		}
	}
}

/* skifter ett inputfelt til ett passordfelt */
input.changeInputToPassword = function(textField){
	var returnField = textField;
	if(textField.type != 'password'){
		
		/* oppretter ett passordfelt */
		var passwordField = Builder.node('input',{type:'password',id:textField.id,value:''});
			passwordField.name = textField.name;
			passwordField.className = textField.className;
			
		/* gir passordfeltet to nye atributter*/
		Object.extend(passwordField,{oldValue:textField.value});
		
		/* dersom tekstfeltet har en ledetekst kopierers dette over til passordfeltet */
		if(textField.label){
			Object.extend(passwordField,{label:textField.label});
		}
		
		/* henter beholderen til tekstfeltet */
		var parent = $($(textField.id).up());
		
		/* bytter tekstfeltet ut med ett passordfelt */
		parent.replaceChild(passwordField,textField);
		$(passwordField.id).select();
		$(passwordField.id).focus();
		
		textField = null;
		
		/* legger på hendelser */
		input.bindEvents(passwordField);
		if(form.setActiveField){
			form.setActiveField(passwordField);
		}
		
		returnField = passwordField;
	}
	
	return returnField;
}


/* skifter fra passordfelt til tekstfelt */
input.changeInputToText = function(passwordField){
	var returnField = passwordField;
	if(passwordField.type != 'text'){
		
		/* oppretter tekstfelt */
		var textField = Builder.node('input',{type:'text',id:passwordField.id,value:''});
			textField.name = passwordField.name;
			textField.className = passwordField.className;
			textField.value = passwordField.oldValue;
		
		/*  dersom passordfeltet har ledetekst kopierers dette over til tekstfeltet */	
		if(passwordField.label){
			Object.extend(textField,{label:passwordField.label});
			textField.value = passwordField.label;
		}
		
		/* legger på hendelser */
		input.bindEvents(textField);
		if(form.resetField){
			form.resetField();
		}
		
		/* bytter tekstfeltet ut med ett passordfelt */
		$($(passwordField.id).up()).replaceChild(textField,passwordField);
		passwordField = null;
		
		returnField = textField;
	}
	return returnField;
}

Event.observe(window, 'load', input.activate);

