 /**
 * Diese JavaScript Datei definiert allgemeine Funktionalitäten bezüglich Fomular und 
 * Input-Feldern. z.B. 
 *   - Defaultwert eines Input-Feldes setzen und dessen Eventhandling.
 *   - den Wert eines Input-Feldes setzen und lesen anhand namen oder id, 
 *     wobei dessen Defaultwert berücksichtigt wird. 
 * 
 * Bemerkungen:
 * Diese Datei befindet sich in Aufbau.
 * Spezielle Funktionalität einer Formular sollte nicht hier definiert sein, sondern in 
 * Datei speziell für diese Seite oder Formular gedacht ist.
 *
 * Bearbeiter: ych am 17.08.2009
 *
 * Bibliothek(en): jquery
 *
 */

	
/**
 * benutzt den erweiterte function DefaultValue().
 * setzen den Defaultwert aller zu Selector passenden Elements und entsprechend
 * Eventhandling. 
 * Die andere Operationen 'setTxtToExamplesMode' und 'setTxtToStandardMode' 
 * beziehen sich nur auf das erste Element. 
 * 
 * Für die meisten Fällen reichen die Eventhandling eines Feldes aus.
 * 
 * Nur in seltenen Fällen werden die Operationen noch benötigt (momentan searchNav).
 * In diesem Fall soll man den Selector so wählen dass nur ein Element in Frage kommt, 
 * oder man ist sicher dass das erste Element ist das gewollte.
 * 
 * Beispiel der Initialisierung:
 * 1)	 new InputDefault("#getroute input");
 * 	 - alle Input-Felder mit inputType werden mit Defaultwert verpasst
 *   - keine extra Operationen mehr nötig
 *
 * 2) 	 var inputWhere  = new InputDefault(".searchforms input[inputType='where']"); 
 * In diesem Fall gibt es 2 Felder mit id: where + emergency_where, beide haben gleiche inputType
 *   - für das Feld 'where' (1.) kann man später mit var inputWhere die Operationen 
 *     'setTxtToExamplesMode' und 'setTxtToStandardMode' ausführen, 
 *   - für das Feld 'emergency_where' reicht die Eventhandling aus.
 */
function InputDefault (selector) {
	this.selector = selector;
	this.selected = this.firstselected = this.def = null;
	
  	this.selected = $(selector).each(function() {
	  	var inputtype = $(this).attr('inputtype');
	  	if (inputtype && inputtype.length > 0) {
	  		$(this).DefaultValue(goVars.txtFld[inputtype]);
	  	}
	});
	
  	if (this.selected && this.selected.length > 0) { 
  		this.firstselected = this.selected.filter(":first");
  		this.def = this.firstselected.val();
  	}
  		
	this.setTxtToExamplesMode = function(){
  		if (! this.firstselected) return ;
		this.firstselected.val(this.def).addClass("default");
		return this.firstselected; // to allow cmd chain
	};
	
	this.setTxtToStandardMode = function(){
  		if (! this.firstselected) return ;
		this.firstselected.removeClass("default");
		return this.firstselected; // to allow cmd chain
	}

	this.isEmpty = function(){
  		if (! this.firstselected) return ;
		var val = getInputValueWithObj(this.firstselected);
		if (val && val.isNotEmpty()) return false;
		return this.firstselected; // to allow cmd chain
	}

	this.focus = function(){
  		if (! this.firstselected) return ;
  		this.firstselected.focus();
		return this.firstselected; // to allow cmd chain
	}

	this.val = function(sValue){
  		if (! this.firstselected) return ;
  		this.firstselected.val(sValue);
		return this.firstselected; // to allow cmd chain
	}
	return this;
}
  
/* set default value depends on inputType 
 * ych on 10.6.2009
 * Beispiele der Initialisierung
 *  $(document).ready(function(){
 *    $("input[inputtype='cityMap']").DefaultValue(goVars.txtFld['cityMap']);
 *    $("input[inputtype='streetMap']").DefaultValue(goVars.txtFld['streetMap']);
 *  });
 */
jQuery.fn.DefaultValue = function() {

	// Scope
	var elements = this;
	var args = arguments;
	var c = 0;

	return(
		elements.each(function() {				

			// Default values within scope
			var el = $(this);
			var def = args[c];
				
			// first set wenn load
			if (el.val() == "" ) { el.val(def).addClass("default"); }
			if (el.val() == def ) { el.addClass("default"); }

			el.focus(function() {
				if(el.val() == def) {
					el.removeClass("default");
					el.val("");
				}

				if (el.val() == "") 
					{ el.select(); /* IDT-1755: cursor sichtbar */ }
				else if (el.hasClass("nobluemark")) 
					{ el.val(el.val()); /* To take care of setting focus at the end of string */ }
				else
				 	{ el.select(); /* default: IDT-1764+1769 */ }
								 
				el.blur(function() {
					if(el.val() == "") {
						el.addClass("default");
						el.val(def);
					}
					el.removeClass("nobluemark"); 
				});
			});
//			el.keypress( function(){el.val("").removeClass("default");});      
		})
	);
}

/*****************************************************************************/

/* 
 * benutzt getInputValueWithObj (oField)
 * den Wert des Input-Feldes lesen anhand Namen
 * without defaut string 
 */
function getInputValueWithName (fieldName) {
  	var oField = $("input[name='"+fieldName + "']");
  	var val = getInputValueWithObj (oField);
  	return val;
}

/* 
 * benutzt getInputValueWithObj (oField)
 * den Wert des Input-Feldes lesen anhand id
 * without defaut string 
 */
function getInputValueWithId (id) {
  	var oField = $("#"+id);
  	var val = getInputValueWithObj (oField);
  	return val;
};
 
/* 
 * den Wert des Input-Feldes (Object) lesen.
 * without defaut string 
 */
function getInputValueWithObj (oField) {
  	var attr = (typeof oField != 'undefined' && oField) ? oField.attr('value') : "";
  	if (! attr || attr.length == 0) return "";
  	 
	var inputtype = oField.attr('inputtype');
	if (typeof inputtype == 'undefined' || ! inputtype) return attr;
	 
	if (attr == goVars.txtFld[inputtype]) attr = "";
    return attr;
}
 
