/*
 * 	jquery.replacetextinput.js
 * 	Ersetzt input[type=text] mit einem DIV
 * 	
 * 	Ersteller: Brühlmann Reto
 * 
 */

// Neue Funktion für extended Features wie config etc.
// Noch in Entwicklung
/*
jQuery.fn.extend({
	replaceinput: {
		config: {
			maxchars:''
		},
		replace: function() {
			alert('test');
		}					
	}
});
*/

// jQuery erweitern
jQuery.fn.replacetextinput = function() {
	
	// Alle Events
	var E=[
		"abort","blur","change","click","dblclick","error","focus","keydown",
		"keypress","keyup","load","mousedown","mousemove","mouseout","mouseover",
		"mouseup","reset","resize","select","submit","unload"	
	];
	
	// Alle Attribute (es dürfen keien Funktionen darauf liegen)
	var A=["id","value","defaultvalue","name","pflichtfeld","replacetextinput","textreplace","modul","style","hideinput"];
	
	// Abfragen ob Feld ein Textfeld ist
	if(this.attr('type')=='text') {
		
		// Parameter
		var maxchars					= 40;
		
		// Aktuelles Text-Input deklarieren
		// Neues Hidden-Input deklarieren
		var srcelement					= this;
		var newelement					= $('<input type="hidden" />');
		var inputDIV = $('<input type="text" />');

		// Alle Events übertragen
		for(i=0;i<E.length;++i) { if( srcelement.attr('on'+E[i]) ) { newelement.bind(E[i],srcelement.attr('on'+E[i])); inputDIV.bind(E[i],srcelement.attr('on'+E[i])); } }
		
		// Alle Attribute übertragen
		for(a=0;a<A.length;++a) { if( srcelement.attr(A[a])) { newelement.attr(A[a],srcelement.attr(A[a])); inputDIV.attr(A[a],srcelement.attr(A[a])) } } 

		// ID und Value auslesen
		var replaceid 					= newelement.attr('id')+'__input';
		var replacevalue 				= newelement.attr('value'); 
		var replacedefaultvalue 		= newelement.attr('defaultvalue'); 

		// Newelement initialisieren
		newelement.insertBefore(srcelement);
		newelement.attr('id',newelement.attr('id')+'__');

		// Inputbox initialisieren
		
			// Formatierungen
			inputDIV.addClass('replacetextinput');
			inputDIV.attr({ 
				'id':replaceid, 
				'value':replacevalue, 
				'defaultvalue':replacedefaultvalue
			});
			
			// Wenn das Value nicht gesetzt ist, Standardtext anzeigen
			(replacevalue!='') ? inputDIV.val(replacevalue) : inputDIV.val(replacedefaultvalue);

			// Einfügen
			inputDIV.insertBefore(newelement);
			
			// Events überwachen
			
				// Beim betreten des Feldes
				inputDIV.focus(function() {
					if($(this).val()==$(this).attr('defaultvalue')) { $(this).val(''); }
					$(this).css('color','#666');
				});
				
				// Beim verlassen des Feldes
				inputDIV.blur(function() {
					if($(this).val()=='') { $(this).val($(this).attr('defaultvalue')); } else {
						// Text aktualisieren
						newelement.attr('value',$(this).val());
					}
					if($(this).val()==$(this).attr('defaultvalue') && $(this).attr('pflichtfeld')=='true') {
						$(this).css('color','#ff0000');
					}
				});
				
				// Beim loslassen
					if(newelement.attr('value').length > 1 && newelement.attr('value')!= inputDIV.val()) {
						inputDIV.val(newelement.attr('value'));
					}				
				inputDIV.keyup(function(event) {
					setTimeout(function(){
						if(maxchars>=inputDIV.val().length) {
							newelement.val(inputDIV.val());
						} else {
							inputDIV.text(inputDIV.val().substr(0,maxchars));
						}						
					},100);
				});
		
		// Ursprungsobject entfernen
		this.remove();
	}
}
