/**
* Si klase leidzia paspaudus mygtuka redaguoti ivesta teksta, atstatydama kursoriu i reikiama vieta (ne i pabaiga)
* @author Algirdas Gurevicius
* @param string input_field_id - input lauko ID
* @param function edit_function - funkcija, kuri turetu redaguoti input lauko reiksme. Jai perduodamas vienas parametras - input lauko objektas.
*/
function EditInputField( input_field_id, edit_function ) {

	this.caret_position = 0;
	this.ignoreKeyUp = false;
	this.edit_function = edit_function;
	this.lastKey = 0;
	
	this.obj_input = document.getElementById( input_field_id );

	/**
	* Funkcija padedanti kursoriu i atitinkama pozicija
	* @param int pos - Pozicija, kurioje turi buti kursorius
	*/
	this.setCaret = function ( pos ) {
		
		// IE:
		if ( this.obj_input.createTextRange ) {

			var range = this.obj_input.createTextRange();
			range.move( 'character', pos );
			range.select();
		} else if ( this.obj_input.selectionStart ) {
			// Other:
			this.obj_input.focus();
			this.obj_input.setSelectionRange( pos, pos );
		}
	}

	/**
	* Gauna kursoriaus pozicija
	* @return int
	*/
	this.getCaret = function ( ) {

		var iCaretPos = 0;
		
		// IE:
		if (document.selection) { 

			this.obj_input.focus ();
			var oSel = document.selection.createRange ();

			oSel.moveStart ('character', -this.obj_input.value.length);
			iCaretPos = oSel.text.length;
		} else if ( this.obj_input.selectionStart || this.obj_input.selectionStart == '0' ) {
			// Other:
			iCaretPos = this.obj_input.selectionStart;
		}
		
		return (iCaretPos);
	}

	/**
	* Iskvieciamas, kai nuspaudziamas mygtukas ant input'o.
	* @param int key - Mygtuko kodas.
	* @param object obj - Sios klases objektas.
	*/
	this.keydown = function ( key, obj ) {

		// Jeigu paspaustas <= arba => mygtukas, tada nereikia ivykdyti kursoriaus atstatymo
		if ( ( key < 48 ) && ( key != 32 ) ) {
			
			obj.ignoreKeyUp = true;
		} else {
		
			obj.ignoreKeyUp = false;
		}
		
		// Jeigu pries tai buvo paspaustas tarpas, tada islaikom kursoriaus pozicija, tokia, kokia ir buvo (jis bus istrintas)
		if ( this.lastKey != 32 ) {
		
			obj.caret_position = obj.getCaret( );
		}
		
		this.lastKey = key;
	}

	/**
	* Iskvieciama, kai atleidziamas paspaustas mygtukas
	* @param int key - Mygtuko kodas
	* @param object obj - Sios klases objektas.
	*/
	this.keyup = function ( key, obj ) {
		
		if ( !obj.ignoreKeyUp ) {
			
			obj.edit_function( obj.obj_input );
			obj.setCaret( obj.caret_position + ( key != 32 ? 1 : 0 ) );
		}
	}

	// kintamasis rodantis i sia klase, jeigu naudotume "this" kiltu problemu...
	var dummy = this;
	
	// Prilipinam eventlistenerius:
	try {
		this.obj_input.onkeydown = function ( e ) { 
		
			dummy.keydown ( e ? e.keyCode : event.keyCode, dummy );
		}
	
		this.obj_input.onkeyup = function ( e ) { 
		
			dummy.keyup ( e ? e.keyCode : event.keyCode, dummy );
		}
	} catch( e ) {} 
}