/*
    Copyright (C) 2008  Ivo Toby, Internet Voor Ondernemers, http://www.i-v-o.nl / http://syntacticsugar.nl 

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.

	Crudder Version : 0.50b
 */


	crudderField.linked = Class.create(crudderField, {
		initialize:function($super, field, data, pob){
			$super(field, data,pob)
			this.instID = 'crudderField_linked.' + parseInt(Math.random()*1000000);
		},
		
		drawEditor : function(container,record){
			this.controller.waiter();
			this.container = container;
			this.record = record;

			var RPCObj = new crudderRPC(this.controller.config, this.controller.rpcPath);
			RPCObj.createCall();
			RPCObj.setCallback(this._drawEditor.bind(this));
			RPCObj.setMethod('getLinked');
			RPCObj.addArgument('field', this.field.name);
			if (record[this.pKey]) RPCObj.addArgument('pKey', record[this.pKey]);
			RPCObj.call();
		},
		
		_drawEditor : function(req){
			this.input = new Element('select', {id:this.instID+"_reference", className:'crudderLinkedSelect'})
			var emptyOption = new Element('option', {value:''}).update('');
			this.input.insert(emptyOption);
			
			this.container.insert(this.input);
			req.responseJSON.each(
				(function(row){
					var option = new Element('option', {value:row.id}).update(row.value);
					this.input.insert(option);
					
					var value = '';
					if (this.record[this.field.name]){
						value = this.record[this.field.name];
					}else if (this.field.value && this.field.value !='' ){
						value = this.field.value;
					}
					
					if (value == row.id){
						option.setAttribute('selected', 'selected');
					}
				}).bind(this)
			)
			this.controller.unWaiter();
		},


		getRPCValue: function(){
			return '<![CDATA[' + encodeURIComponent(this.input.getValue()) + "]]>";
		}		
	})
