/**
 * @fileoverview eingabefeld.js Ein Eingabefeld wird auf Events überwacht.
 * 
 * @author Sascha Hüdepohl sascha@ravenworks.de
 * @version 0.1
 */

var Eingabefelder = {
  forms : null,

  init : function() {
    Eingabefelder.forms = new Array();
  },

  addFeld : function(form,feld) {
  	Eingabefelder.getFelder(form).push(feld);
  },
  
  getFelder : function(form) {
  	for (var i = 0; i < Eingabefelder.forms.length; i++) {
  		if( Eingabefelder.forms[i]["form"] == form) {
  			return Eingabefelder.forms[i]["felder"]
  		}
  	}
  	var len = Eingabefelder.forms.length;
  	Eingabefelder.forms[len] = new Object();
  	Eingabefelder.forms[len]["form"] = form;
  	Eingabefelder.forms[len]["felder"] = new Array();
  	return Eingabefelder.forms[len]["felder"];
  },	
  
  setDefaultIfNotSet : function(form) {
  	var felder = Eingabefelder.getFelder(form);
  	if(felder ) {
	  	for (var i = 0; i < felder.length; i++) {
	  		felder[i].setDefaultIfNotSet();
	  	}
  	}
  },
  
  clearIfNotSet : function(form) {
  	var felder = Eingabefelder.getFelder(form);
  	if(felder ) {
	  	for (var i = 0; i < felder.length; i++) {
	  		felder[i].clearIfNotSet();
	  	}
  	}
  }
  
}

Eingabefelder.init();


/**
 * Eingabefeld überwacht ein HTML-Input Element auf Events.
 *
 * @param {string} id Die id des Eingabefeldes im HTML-Dokument.
 * @param {string} defaultText Text der angezeigt wird, wenn das Feld leer ist.
 * @param {funcptr} csh Zeiger (Name) einer Funktion die als custom_submit_handler aufgerufen werden soll.
 * @constructor
 * @return Ein neues Eingabefeld Objekt
 */
function Eingabefeld(id, defaultText, csh) {
  var input = document.getElementById(id);
  var form = input.form;
  var abort = true;
  var skipsubmithandler = false;
  
  Eingabefelder.addFeld(form,this);
  
  if (!csh) {
    this.custom_submit_handler = function(e) {
      return true;
    }
  } else {
    this.custom_submit_handler = csh;
  }

  this.setAbort = function(b) {
  	abort = b;
  }

  this.setSkipSubmitHandler = function(b) {
  	skipsubmithandler = b;
  }
  
  this.focus_handler = function(e) {
    if (input.value == defaultText) {
      input.value = "";
   	  input.style.color = '';
    }
    else {
      input.select();
    }
  }

  this.blur_handler = function(e) {
  	this.setDefaultIfNotSet();
  }

  this.submit_handler = function(e) {
  	if(skipsubmithandler) {
  		return;
  	}
  	
  	// alert("in Eingabe submithandler");
    if ( (input.value.trim() == "" || input.value == defaultText) && abort) {
    /*
    	alert(input.labels);
      	if (input.labels && input.labels.length == 1) {
	    	alert("input required for " + input.labels[0].text);
      	}
      */
      e.preventDefault ? e.preventDefault() : e.returnValue = false;
      return;
    } 
    
    this.clearIfNotSet();

    if (!this.custom_submit_handler(e)) {
      e.preventDefault ? e.preventDefault() : e.returnValue = false;
      return;
    }
  }

  this.hasInput = function() {
  	return !(input.value.trim() == "" || input.value == defaultText);
  }
  
  this.clearIfNotSet = function() {
    if (input.value == defaultText || input.value.trim() == "" ) {
    	// alert("clear");
    	input.value = '';
    }
  }

  this.setDefaultIfNotSet = function() {
    if (input.value.length == 0 || input.value.trim() == "") {
      input.value = defaultText;    
      input.style.color = '#666666';    
    }
    if (input.value != defaultText) {
    	input.style.color = '';
    }
  }

  if (input.addEventListener) {
    input.addEventListener('focus', this.focus_handler.bindAsEventListener(this), false);
    input.addEventListener('blur', this.blur_handler.bindAsEventListener(this), false);
    form.addEventListener('submit', this.submit_handler.bindAsEventListener(this), false);
  } else {
    input.attachEvent('onfocus', this.focus_handler.bindAsEventListener(this));
    input.attachEvent('onblur', this.blur_handler.bindAsEventListener(this));
    form.attachEvent('onsubmit', this.submit_handler.bindAsEventListener(this));
  }
  
  this.setDefaultIfNotSet();
/*
  if (input.value == "") {
    input.value = defaultText;
  }
*/   

}

/**
 * Handler der vor dem Submit des Formulars aufgerufen wird.
 * Der Rückgabewert bestimmt den Versand des Formulars.
 *
 * Diese Funktion kann überschrieben werden:
 * Eingabefeld.prototype.custom_submit_handler = function(e) { alert("hier"); return true; }
 * 
 *
 * @return Boolean
 */
/*
Eingabefeld.prototype.custom_submit_handler = function() {
  return true;
}
*/


String.prototype.trim = function() {
  return this.replace(/^[ ]+/, '').replace(/[ ]+$/, '')
}