Suagencia.Classes.FieldInstruction = Class.create({
		initialize: function( field , message ) {
			this.field = $(field);
			this.message = message.toString();
			this.field.observe( "focus" , this._onFocus.bind( this ) );
			this.field.observe( "blur" , this._onBlur.bind( this ) );			
			this._onBlur();
		},
		_onFocus: function() {
			if( this.field.value == "" || this.field.value == this.message )
			{
				this.field.value = "";
				this.field.removeClassName( "show-field-instructions" );
			}
		},
		_onBlur: function() {
			if( this.field.value == "" || this.field.value == this.message )
			{
				this.field.value = this.message;
				this.field.addClassName( "show-field-instructions" );
			}
		}
	});

Suagencia.Classes.ComboBox = Class.create( {
		initialize: function( id , vOptions ) {
			var defaultOptions = new Hash({'comboClass':'suagencia_comboBox','optionsClass':'suagencia_comboOptions'});
			if( vOptions )
				{ this.Options = defaultOptions.merge( vOptions ) }
			else
				{ this.Options = defaultOptions.clone( vOptions ) }
			Suagencia.Forms.Combos.set( id , this );
			this.originalCombo = $(id);
			vElement = this.originalCombo.select("option");

			var vValues = vElement.collect( function (v) {return v.innerHTML } );
			this.originalCombo.setStyle({"display":"none"})
			var vInput = new Element( "input",  {"type":"text","id":(this.Options.get("comboClass") + "_" + id) , "name":(this.Options.get("comboClass") + "_" + id) , "value":vValues[ this.originalCombo.selectedIndex] , "class":this.Options.get("comboClass")} );
			var vList = new Element( "div", {"id":(this.Options.get("optionsClass") + "_" + id ),"class":this.Options.get("optionsClass")});
			this.originalCombo.insert({"before":vInput});
			document.getElementsByTagName('body')[0].appendChild(vList);

			this.ComboList = new Autocompleter.Combo(this.Options.get("comboClass")+ "_" + id, this.Options.get("optionsClass") + "_" + id, vValues , {afterUpdateElement:this.setValue.bind( this )});
	 
		},
		setValue: function( a, b, c ) {
			this.originalCombo.selectedIndex = c;
			this.originalCombo.fire( "suag:comboChange" , {"index": c, "value": this.originalCombo.value});
		},
		setList: function( newList ) {
			var i = 0
			var myoptions = "<ul>"
			this.originalCombo.options.length = newList.length
			var array = new Array()
			for( i = 0 ;  i < newList.length ; i ++ )
			{
				this.originalCombo.options[i].value = newList[i].value;
				this.originalCombo.options[i].text = newList[i].text;
				myoptions += "<li>" + newList[i].text + "</li>";
				array.push(newList[i].text);
			}
			myoptions += "</ul>"
			var vCombo = this.ComboList
		    vCombo.options.array = myoptions;			
			vCombo.Lista = array;
			vCombo.index = 0;
			vCombo.updateElement(vCombo.getCurrentEntry())
		}
	});

Suagencia.Forms = {	
	config: function (event , vDOM) {
		var vCampos;
		var vCombos;
		if( vDOM ) {
			vCampos = $(vDOM).select("[suag:message]");
			vCombos = $(vDOM).select("select[suag:objeto=ComboBox]");
		} else {
			vCampos = $$("[suag:message]");
			vCombos = $$("select[suag:objeto=ComboBox]");
		}	
			
		vCampos.each( function( obj ) {
			new Suagencia.Classes.FieldInstruction( obj , obj.readAttribute("suag:message") );
		});

		vCombos.each( function( obj ) {
			if (obj.readAttribute("suag:Options"))
				{new Suagencia.Classes.ComboBox( obj.id , $H(obj.readAttribute("suag:Options").evalJSON()) );	} 
			else
				{new Suagencia.Classes.ComboBox( obj.id );}
		});

	},
	Combos: new Hash()
}

