/* 
 * JSUCIC v2.0 - Copyright (c) 2006-2007 George Huang
 *                            2007-2008 UCICSoft.com
 * This copyright notice MUST stay intact for use (see LICENSE.TXT).
 * For full source code and docs, visit http://www.ucicsoft.com/
 * 
 * @author George Huang
*/
function bindTextField(widgetId,valueModel){
	var widget=getWidget(widgetId);
	if(widget && valueModel){
		valueModel.addChangedListener(widget);
		widget._valueModel=valueModel;
		widget.setWidgetValue=setInputValue;
		addEvent(widget,"keyup",updateModel);
		addEvent(widget,"change",updateModel);
		var _v=valueModel.getValue();
		if(!_v&&_v!=false) _v='';
		widget.setWidgetValue(_v);
	}
}

function bindTextArea(widgetId,valueModel){
	var widget=getWidget(widgetId);
	if(widget && valueModel){
		valueModel.addChangedListener(widget);
		widget._valueModel=valueModel;
		widget.setWidgetValue=setAreaValue;
		addEvent(widget,"keyup",updateModel);
		addEvent(widget,"change",updateModel);
		widget.setWidgetValue(valueModel.getValue());
	}
}
function bindLabel(widgetId,valueModel){
	var widget=getWidget(widgetId);
	if(widget && valueModel){
		valueModel.addChangedListener(widget);
		widget._valueModel=valueModel;
		widget.setWidgetValue=setLabelValue;
		widget.setWidgetValue(valueModel.getValue());
	}
}
function bindRadios(widgetId,valueModel){
	var widget=getWidget(widgetId);
	if(widget && valueModel){
			valueModel.addChangedListener(widget);
			widget._valueModel=valueModel;
			widget.setWidgetValue=setRadioValue;
			addEvent(widget,"click",updateModel);
			widget.setWidgetValue(valueModel.getValue());
	}
}

function bindCheckBox(widgetId,valueModel){
	var widget=getWidget(widgetId);
	if(widget && valueModel){
		valueModel.addChangedListener(widget);
		widget._valueModel=valueModel;
		widget.setWidgetValue=setRadioValue;
		addEvent(widget,"click",updateCheckModel);
		widget.setWidgetValue(valueModel.getValue());
	}
}
function bindSelect(widgetId,valueModel){
	var widget=getWidget(widgetId);
	if(widget && valueModel){
		valueModel.addChangedListener(widget);
		widget._valueModel=valueModel;
		widget.setWidgetValue=setInputValue;
		addEvent(widget,"change",updateModel);
		widget.setWidgetValue(valueModel.getValue());
	}
}

function bindList(widgetId,valueModel){
	var widget=getWidget(widgetId);
	if(widget && valueModel){
		valueModel.addChangedListener(widget);
		addEvent(widget,"keyup",updateModel);
	}
}

function bindProgressBar(widgetId,valueModel){
	var widget=new UCICProgressBar(widgetId);
	if(widget && valueModel){
		valueModel.addChangedListener(widget);
		widget.setWidgetValue(valueModel.getValue());
	}
}

function bindSlider(widgetId,valueModel){
	var widget=new UCICSlider(widgetId);
	//sslider=document.getElementById(widgetId);
	if(widget && valueModel){
		valueModel.addChangedListener(widget);
		widget._valueModel=valueModel;
		addEvent(widget._display,"keyup",updateSliderModel);
		addEvent(widget._display,"change",updateSliderModel);
		widget.setWidgetValue(valueModel.getValue());
	}
}

function updateSliderModel(value){
	this._parent._valueModel.setValue(this.value);
}

function bindTable(widgetId,valueModel){
	var widget=new UCICTable(widgetId);
	if(widget && valueModel){
		valueModel.addChangedListener(widget);
		widget._valueModel=valueModel;
		widget.setWidgetValue(valueModel.getValue());
	}
}

/**
 * TODO..step/length/digit
 * @param {Object} widgetId
 * @param {Object} valueModel
 */
function bindSpinner(widgetId,valueModel){
	var widget=getWidget(widgetId);
	var thtml=widget.innerHTML;
	widget.innerHTML=getSpinnerBody(widgetId);
	var w_view=document.getElementById(widgetId+"_view");
	w_view.innerHTML=thtml;
	var w_value=document.getElementById(widgetId+"_value");
	var w_previous=document.getElementById(widgetId+"_previous");
	var w_next=document.getElementById(widgetId+"_next");
	var _stps=w_value.getAttribute('steps');
	var _c=w_value.getAttribute('constraint');
	var max=w_value.getAttribute('max');
	var min=w_value.getAttribute('min');
	if(w_value && valueModel){
		function _previous(){
			prev(w_value,_stps,_c,min,max);
			w_value._valueModel.setValue(w_value.value);
		}
		function _next(){
			next(w_value,_stps,_c,min,max);
			w_value._valueModel.setValue(w_value.value);
		}
		valueModel.addChangedListener(w_value);
		w_value._valueModel=valueModel;
		w_value.setWidgetValue=setInputValue;
		w_value.setWidgetValue(valueModel.getValue());
		addEvent(w_value,"keyup",updateModel);
		addEvent(w_value,"change",updateModel);
		addEvent(w_previous,"click",_previous);
		addEvent(w_next,"click",_next);
	}
}

function bindNavigation(widgetId,prsModel){
	var widget;
	if(typeof widgetId!='string') widget=widgetId;
	else widget=new UCICNavigation(widgetId,prsModel);
	if(widget && prsModel){
		var tp=prsModel.getValueModel("pageCount");
		var cp=prsModel.getValueModel("currentPage");
		tp.addChangedListener(widget);
		cp.addChangedListener(widget);
		bindLabel(widget.pageCount,tp);
		bindLabel(widget.currentPage,cp);
		widget.setWidgetValue(cp.getValue());
	}
}

function getWidget(widgetId){
	if(typeof(widgetId)!='string')
		return widgetId;
	else
		return document.getElementById(widgetId);
}

function bindProperty(widgetId,valueModel,prop){
	if(typeof(widgetId)=='string')
		var _xwidget=document.getElementById(widgetId);
	else
		var _xwidget=widgetId;
	valueModel.addChangedListener(_xwidget);
	_xwidget._valueModel=valueModel;
	if(prop && prop=='display'){
		_xwidget.setWidgetProp=setDisplay;
	}else if(prop && prop=='readOnly'){
		_xwidget.setWidgetProp=setReadOnly;
	}else{//Default value is disabled
		_xwidget.setWidgetProp=setDisable;
	}
	_xwidget.setWidgetProp(valueModel.getValue());
}

function setDisplay(value){
	if(value && value!='false')
		this.style.display='inline';
	else
		this.style.display='none';
}

function setDisable(value){
	if(value && value!='false')
		this.disabled=true;
	else
		this.disabled=false;
}

function setReadOnly(value){
	if(value && value!='false')
		this.readOnly=true;
	else
		this.readOnly=false;
}
function updateModel(e){
	this._valueModel.setValue(this.value,this);
	if(this.model){
		this.model.setIndex(this['opId']);
	}
}
function updateCheckModel(e){
	if(this.checked){
		this._valueModel.setValue(this.value,this);return;
	}else{
	    this._valueModel.setValue(this.getAttribute('bivalue'),this);
	}
}
function setLabelValue(value){
	if(value){
		this.innerHTML=value;return;
	}else{
		this.innerHTML='';
	}
}
/**
 * Input
 * @param {Object} value
 */
function setInputValue(value){
		this.value=value;
}

function setAreaValue(value){
	this.value=value;
	if(!value){
		this.innerHTML='';
	}
}

function setRadioValue(value){
	if(this.value==value){
		this.checked=true;return;
	}else{
		this.checked=false;
	}
}
/**
 * Table
 * @param {Object} value
 */
function setListValue(value){
	this.widget.setList(value);
}

function updateNavImages(value){
	this.first
}

