// eol_form
// version 1.0

var frmInput = new Class({
	initialize:function(elForm, elInput){
		this.elInput=elInput;
		elInput.addEvent('focus', this.OnFocus.bind(this) );
		elInput.addEvent('blur', this.OnBlur.bind(this) );
	},
	OnFocus:function(){
		var eolType=this.elInput.getProperty('eol_type');
		if( eolType=='' ) eolType='text';
		this.elInput.removeClass(eolType+'_std');
		this.elInput.addClass(eolType+'_focus');
	},
	OnBlur:function(){
		var eolType=this.elInput.getProperty('eol_type');
		if( eolType=='' ) eolType='text';
		this.elInput.removeClass(eolType+'_focus');
		this.elInput.addClass(eolType+'_std');
	}
});
var frmPSelector = new Class({
	initialize:function(elForm, elPSelector){
		this.elForm = elForm;
		this.elPSelector = elPSelector;
		this.Words = new Array();		
		//alert( elPSelector );
		
		var pselId = elPSelector.getProperty('id');
		var searchLink = "div#"+pselId+" a";
		var searchData = "div#"+pselId+" input";
		var EOLdatas = elPSelector.getProperty('eol_data');
		var baliseData = null;
		
		var thisClass = this;
		
		if( EOLdatas != "" )
		{
			// Recherche des zones de données de type hidden 
			$$(searchData).each( function(el){
				if( el.getTag() == 'input' && el.getProperty('type') == 'hidden' && el.getProperty('name') == EOLdatas )
				{
					baliseData = el;
				}
			});
			if( $defined(baliseData) )
			{
				var Values = baliseData.getProperty('value');
				this.Words = Values.split('|');

				$$(searchLink).each( function(baliseLink){
					var selTag = baliseLink.getProperty('tag');
					var pos = this.Words.indexOf(selTag);
					baliseLink.removeClass('select'); 
					baliseLink.removeClass('nosel');
					if( pos>-1 ) baliseLink.addClass('select'); else baliseLink.addClass('nosel');
					baliseLink.addEvent('click', this.OnClick.bind(this, [baliseLink,baliseData]) );
				}, this);
			}
		}
	},
	OnClick:function(baliseLink, baliseData)
	{
		var tag = baliseLink.getProperty('tag');
		var pos = this.Words.indexOf(tag);
		// Existe ?? on enleve, sinon on ajoute
		if( pos > -1 ) { this.Words.remove(tag); baliseLink.removeClass('select').addClass('nosel'); }
		else { this.Words.include(tag); baliseLink.removeClass('nosel').addClass('select'); }
		var value = "";	this.Words.each( function(item){ if( value.length>0 ) value += "|"; value+=item; } );
		baliseData.setProperty('value', value );
	}
});

var ControlForm = new Class({
	initialize:function(frmname){
		// frmname = nom du form, mais aussi id du form
		this.frmName=frmname;
	    this.formobj=$(frmname);
	    
	    this.itemList = new Array();
	    
		if(!this.formobj)
		{
	  		alert("Error: couldnot get Form object "+frmname);
			return;
		}
		if(this.formobj.onsubmit)
		{
			this.formobj.old_onsubmit = this.formobj.onsubmit;
			this.formobj.onsubmit=null;
		}
		else
		{
			this.formobj.old_onsubmit = null;
		}
		this.formobj.onsubmit=this.form_submit_handler;
		this.prepare_form();
		//this._form_submit.bind(form_submit, this);
	},
	prepare_form:function(){
		var elPSelector = new Array();
		var updatePSelector=this.update_pselector;
		this.widget_scanner( this.formobj );		
	},
	widget_scanner:function( elRoot )
	{
		elRoot.getChildren().each( function(el)
		{
			if( el.get('tag') == 'input' && el.getProperty('type') == 'text' )
			{
				this.itemList[this.itemList.length]=new frmInput(this.formobj, el); 
			}
			else if( el.get('tag') == 'input' && el.getProperty('eol_type') == 'integer' )
			{
				this.itemList[this.itemList.length]=new frmInput(this.formobj, el); 
			}
			else if( el.get('tag') == 'input' && el.getProperty('type') == 'password' )
			{
				this.itemList[this.itemList.length]=new frmInput(this.formobj, el); 
			}
			else if( el.get('tag') == 'textarea' )
			{
				this.itemList[this.itemList.length]=new frmInput(this.formobj, el); 
			}
			else if( el.get('tag') == 'div' && el.getProperty('eol_type') == 'pselector' )
			{
				this.itemList[this.itemList.length]=new frmPSelector(this.formobj, el); 
			}
			else
				this.widget_scanner( el );
		}, this);
	},
	form_submit_handler:function(ev){
		var Evt = new Event(ev);
		Evt.stop();
		var formElement = Evt.target;
		if( $defined(formElement.getProperty('urlpost')) )
		{
			formElement.submit();
		}
		else
		{
			var options = "{}";
			var ajax = new AjaxEOL(formElement.getProperty('action'), $merge({data: formElement.toQueryString()}, options, {method: 'post'}));
			ajax.request();
		}
	},
	form_submit:function(){
		var formElement=this.formobj;
		if( $defined(formElement.getProperty('urlpost')) )
		{
			formElement.submit();
		}
		else
		{
			//this.sendEOL();
			var options = "{}";
			new AjaxEOL(formElement.getProperty('action'), $merge({data: formElement.toQueryString()}, options, {method: 'post'})).request();
		}
	},
	form_reset:function(){
		alert('Reset...');
	},
	submit:function(){
		this.formobj.__submit.value='submit';
		this.form_submit();
	},
	abort:function(){
		this.formobj.__submit.value='abort';
		this.form_submit();
	}
});
