function fnControls(obj){
	var controlname = obj.getAttribute("controlname");
	if(!controlname) return;

	if(!obj.ini){
		switch(controlname){
			case 'radio':
			case 'checkbox':
				iniCheckbox(obj, controlname);
				break;
			case 'inlinelookup':
				iniInlineLookup(obj);
				break;
			case 'select':
				iniSelect(obj);
				break;
		}
	}
}

function iniCheckbox(obj, controlname){
	var isRadio = controlname == 'radio';

	obj.oinput = obj.getElementsByTagName("INPUT")[0];

	obj.checkOn = function(){
		this.className = isRadio ? "radio selected" : "checkbox checked";
		this.oinput.checked = true;
	}

	obj.checkOff = function(){
		this.className = isRadio ? "radio" : "checkbox";
		this.oinput.checked = false;
	}

	obj.setCheck = function(){
		if(this.className.indexOf('checked') != -1) this.checkOff();
		else this.checkOn();

		var form;
		var elm = this;
		while(elm){
			if(elm.nodeName == 'FORM'){
				form = elm;
				break;
			}
			elm = elm.parentNode;
		}

		var isChecked = this.oinput.checked;
		var oneIsChecked = false;
		var elmnts = form.elements;

		for(var i = elmnts.length - 1; i >= 0; i--){
			var elm = elmnts[i];
			if(isChecked && elm.name == this.oinput.name + '_remove'){
				elm.parentNode.removeChild(elm);
				continue;
			}
			if(!isRadio && !isChecked && elm.name == this.oinput.name && elm.checked){
				oneIsChecked = true;
			}

			if(isRadio && isChecked && elm.name == this.oinput.name && elm != this.oinput){
				if(elm.parentNode.checkOff){
					elm.parentNode.checkOff();
				}else{
					elm.parentNode.className = 'radio';
				}
			}
		}

		if(!isChecked && !oneIsChecked && !isRadio){
			if(!form.elements[obj.name + '_remove']){
				var oi = document.createElement("INPUT");
				with(oi){
					type = 'hidden';
					name = this.oinput.name + '_remove';
					value = 1;
				}
				this.appendChild(oi);
			}
		}

		if(this.getAttribute('onchange')){
			eval( this.getAttribute('onchange') );
		}
	}

	obj.onclick = function(){
		this.setCheck();
	}

	obj.setCheck();
}

function iniInlineLookup(obj){
//	var lookup = obj.lookup || obj.getAttribute("lookup");
//	obj.lookup = typeof(lookup) == 'string' ? eval(lookup) : lookup;


	var lookup = obj.getAttribute("lookup");
	var lookupsrc = obj.getAttribute("lookupsrc");
	obj.popupsrc = lookupsrc ? lookupsrc : false;

	if(lookup){
		obj.lookup = eval(lookup);
	}

	obj.openpopup = function(){
		this.popup = new modalwindow(this, this.popupsrc + (this.oinput && this.oinput.value ? '&value=' + this.oinput.value : ''), {});

		this.popup.onSubmitWindow = function(result){
			for(var i in result){
				this.parent.setValue(result[i]);
			}
			this.close();
		}
	}

	obj.openlookup = function(){
		var screen = new solidscreen;
		screen.parent = this;

		var oLeft = offsetX(obj);
		var oTop = offsetY(obj) + obj.offsetHeight;
		var oWidth = obj.offsetWidth;

		var odiv = document.createElement("DIV");
		odiv.style.visibility = 'hidden';
		odiv.className = 'inlinelookup';
		screen.element.appendChild(odiv);

		var d = document.createElement("DIV");
		d.className = 'header';
		odiv.appendChild(d);
		var dd = document.createElement("DIV");
		d.appendChild(dd);

		var dbck = document.createElement("DIV");
		dbck.className = 'back';
		odiv.appendChild(dbck);

		var cdiv = document.createElement("DIV");
		cdiv.className = 'container';
		dbck.appendChild(cdiv);

		var d = document.createElement("DIV");
		d.className = 'footer';
		odiv.appendChild(d);
		var dd = document.createElement("DIV");
		d.appendChild(dd);

		var addrows = new Array();

		var i = 0;
		for(var key in this.lookup){
			var value = this.lookup[key];

			var title, hightlight = false, blur = false, imgurl = false, rows=false;
			switch(typeof(value)){
				case 'string':
					title = value;
					break;
				default:
					title = value.title;
					highlight = value.highlight;
					blur = value.blur;
					imgurl = value.img;
					rows = value.rows;
			}

			var opt = document.createElement("DIV");
			cdiv.appendChild(opt);

			if(blur) opt.className = 'blur';

			var optc = document.createElement("DIV");
			optc.style.styleFloat = 'left';
			opt.appendChild(optc);

			if(rows){
				for(var row in rows){
					var rdiv = document.createElement("DIV");
					with(rdiv.style){
						styleFloat = cssFloat  = 'left';
						paddingRight = '10px';
					}
					rdiv.appendChild(document.createTextNode(rows[row]));
					optc.appendChild(rdiv);
					addrows.push(rdiv);
				}
			}

			if(imgurl){
				var odivimg = document.createElement("DIV");
				odivimg.className = 'icon';
				var oimg = document.createElement("IMG");
				oimg.src = imgurl;
				odivimg.appendChild(oimg);
				optc.appendChild(odivimg);
			}
			optc.appendChild(document.createTextNode(title));
			var cwidth = optc.offsetWidth + 20;
			oWidth = cwidth > oWidth ? cwidth : oWidth;
			optc.style.styleFloat = 'none';

			opt.parent = obj;
			opt.val = key;
			opt.onclick = function(){
				obj.setValue(this.val);
				screen.clear();
				return false;
			}

			opt.onmouseover = function(){
				this.prvClassName = this.className;
				this.className = 'selected';
			}

			opt.onmouseout = function(){
				this.className = this.prvClassName;
			}

			i++;
		}
		obj.lookupelement = odiv;

		var oHeight = 20 * i + 6;
		dbck.style.height = oHeight - 14;
		cdiv.style.height = oHeight - 6;

		oLeft = oLeft + oWidth > screen.element.offsetWidth ? screen.element.offsetWidth - oWidth : oLeft;

		for(var i = 0; i < addrows.length; i++){
				addrows[i].style.styleFloat = addrows[i].style.cssFloat = 'right';
		}

		with(odiv.style){
			left		= oLeft;
			top			= oTop;
			width		= oWidth < 100 ? 100 : oWidth;
			height		= oHeight;
			visibility	= 'visible';
		}
	}

	obj.hidescreen = function(){
		this.onDone();
	}

	obj.open = function(){
		if(this.popupsrc){
			this.openpopup();
		}else{
			this.openlookup();
		}
	}

	obj.onclick = function(){
		this.open();
	}

	obj.open();
}


function iniSelect(obj){
	obj.oinput = obj.getElementsByTagName("INPUT")[0];
	obj.otitle = obj.getElementsByTagName("DIV")[0];

	var lookup = obj.getAttribute("lookup");
	var lookupsrc = obj.getAttribute("lookupsrc");
	obj.popupsrc = lookupsrc ? lookupsrc : false;

	if(lookup){
		obj.lookup = eval(lookup);
	}

	obj.openpopup = function(){
		this.popup = new modalwindow(this, this.popupsrc + (this.oinput.v2alue ? '&value=' + this.oinput.value : ''), {});

		this.popup.onSubmitWindow = function(result){
			for(var i in result){
				this.parent.setValue(result[i]);
			}
			this.close();
		}
	}

	obj.openlookup = function(){
		var screen = new solidscreen;
		var oLeft = offsetX(obj);
		var oTop = offsetY(obj);
		var oWidth = obj.offsetWidth;

		var odiv = document.createElement("DIV");
		odiv.style.display = 'none';
		odiv.className = 'selectlookup';
		screen.element.appendChild(odiv);

		var d = document.createElement("DIV");
		d.className = 'header';
		odiv.appendChild(d);
		var dd = document.createElement("DIV");
		d.appendChild(dd);

		var dbck = document.createElement("DIV");
		dbck.className = 'back';
		odiv.appendChild(dbck);

		var cdiv = document.createElement("DIV");
		cdiv.className = 'container';
		dbck.appendChild(cdiv);

		var d = document.createElement("DIV");
		d.className = 'footer';
		odiv.appendChild(d);
		var dd = document.createElement("DIV");
		d.appendChild(dd);

		var addrows = new Array();

		var i = 0;
		for(var key in this.lookup){
			var value = this.lookup[key];

			var title, hightlight = false, blur = false, imgurl = false, rows = false;
			switch(typeof(value)){
				case 'string':
					title = value;
					break;
				default:
					title = value.title;
					highlight = value.highlight;
					blur = value.blur;
					imgurl = value.img;
					rows = value.rows;
			}

			var opt = document.createElement("DIV");
			cdiv.appendChild(opt);

			if(blur) opt.className = 'blur';

			var optc = document.createElement("DIV");
			opt.appendChild(optc);

			if(rows){
				for(var row in rows){
					var rdiv = document.createElement("DIV");
					with(rdiv.style){
						styleFloat = cssFloat  = 'right';
						paddingRight = '10px';
						paddingLeft = '10px';
					}
					rdiv.appendChild(document.createTextNode(rows[row]));
					optc.appendChild(rdiv);
					addrows.push(rdiv);
				}
			}

			if(imgurl){
				var odivimg = document.createElement("DIV");
				odivimg.className = 'icon';
				var oimg = document.createElement("IMG");
				oimg.src = imgurl;
				odivimg.appendChild(oimg);
				optc.appendChild(odivimg);
			}
			optc.appendChild(document.createTextNode(title));

			opt.parent = obj;
			opt.val = key;
			opt.onclick = function(){
				obj.setValue(this.val);
				screen.clear();
				return false;
			}

			opt.onmouseover = function(){
				this.prvClassName = this.className;
				this.className = 'selected';
			}

			opt.onmouseout = function(){
				this.className = this.prvClassName;
			}
			i++;
		}
		obj.lookupelement = odiv;

		var oHeight = 22 * i + 2;
		dbck.style.height = oHeight - 20;
		cdiv.style.height = oHeight - 4;

		with(odiv.style){
			left		= oLeft;
			top			= oTop;
			width		= oWidth;
			height		= oHeight;
			display		= '';
		}
	}

	obj.setValue = function(result){
		var value;
		switch(typeof(result)){
			case 'string':
				value = result;
				break;
			default:
				value = result.value;
				break;
		}
		this.oinput.value = value;

		var sourcevalue = this.popupsrc ? result : obj.lookup[value];

		switch(typeof(sourcevalue)){
			case 'string':
				this.otitle.innerHTML = sourcevalue.title ? sourcevalue.title : sourcevalue;
				break;
			default:
				this.otitle.innerHTML = '';
				if(sourcevalue.img){
					var odivimg = document.createElement("DIV");
					odivimg.className = 'icon';
					var oimg = document.createElement("IMG");
					oimg.src = sourcevalue.img;
					oimg.a2lign = 'absmiddle';
					oimg.marginBottom = '30px';
					odivimg.appendChild(oimg);
					this.otitle.appendChild(odivimg);
				}
				this.otitle.appendChild(document.createTextNode(sourcevalue.title || sourcevalue));
				break;
		}

		if(this.getAttribute('onchange')){
			eval( this.getAttribute('onchange') );
		}

		
//		obj.lookupelement.parentNode.removeChild(obj.lookupelement);
	}

	obj.open = function(){
		if(this.popupsrc){
			this.openpopup();
		}else{
			this.openlookup();
		}
	}

	obj.onclick = function(){
		this.open();
	}

	obj.open();
}
