﻿function checkList()
{
    this.visible_rows = 20
    this.cols = 4
	this.colWidth = 220
	this.toString = false
	this.valueElm = null
	this.textElm = null
	this.className = "checkList"
	this._onResize = null
	this._okClickHandler = null
	this._clearClickHandler = null
	this._cancelClickHandler = null
	this._statusHandler = null
	this.win = null;
	this.title = "";
	this.cisKoder = null;
	this.limit = 4
	this.allMeansNothing = true
	this.chkbox = new Array()
}

checkList.prototype =
{
    init : function(cisKoder)
    {
        this.cisKoder = cisKoder;
        this.title = cisKoder.get_title();
        this.textElm = cisKoder.get_element();
        this.valueElm = cisKoder.get_valueElement();
                
        this._onResize = Function.createDelegate(this, this.onResize)
		this._okClickHandler = Function.createDelegate(this, this.onOk)
		this._clearClickHandler = Function.createDelegate(this, this.onClear)
		this._cancelClickHandler = Function.createDelegate(this, this.onCancel)
		this._statusHandler = Function.createDelegate(this, this.setStatus)
		//this._collectItemsHandler = Function.createDelegate(this, this.collectItems)
		//this._removeItemHandler = Function.createDelegate(this, this.removeItem)

		this.generate()

		if(!this.win)
		{
            this.win = new Ext.Window(
			{
                applyTo: this.main,
                layout:'fit',
                width: this.colWidth * this.cols + 46,
                height: 22 * ((this.rows < this.visible_rows) ? this.rows : this.visible_rows) + 94,
                closeAction:'hide',
                plain: true,
				title: this.title,

                items: new Ext.Panel(
				{
                    applyTo: this.div,
                    listeners:
				    {
				        resize: this._onResize 
				    }
                   
                }),

                buttons:
				[
					{ text: 'Potvrdiť',  handler: this._okClickHandler },
					{ text: 'Vyčistiť',  handler: this._clearClickHandler },
					{ text: 'Zatvoriť',  handler: this._cancelClickHandler }
				],

                bbar: new Ext.Toolbar(
				{
					items:
					[
						'Status'
					]
                })
            })
        }

		var info = document.createElement("span")
		info.setAttribute("id", "cblstatus"+this.checkListN)
		this.main.appendChild(info)
		
		var width = this.win.items.get(0).getWidth();
		var height = this.win.items.get(0).getHeight();
		//this.main = main
		this.win.show(this)
		this.setStatus()
	},

	generate : function()
	{
        this.checkListN = this.textElm.id;
		this.pocet = this.items.length / 2

		if(this.pocet < this.cols * this.visible_rows) this.cols = Math.ceil(this.pocet / this.visible_rows)
		this.rows = Math.ceil(this.pocet / this.cols)

		this.div = document.createElement("div")
		this.div.style.width = this.cols * this.colWidth + "px"
		this.div.className = this.className
		var tbl = document.createElement("table")
		tbl.style.width = this.colWidth * this.cols + "px"
		this.div.appendChild(tbl)
		var tbody = document.createElement("tbody")
		tbl.appendChild(tbody)
		for(m = 0; m < this.rows; m++)
		{
			var row = document.createElement("tr");
			tbody.appendChild(row)
			for(n = 0; n < this.cols && this.items[(n*this.rows+m)*2] != null; n++)
			{
				var cell = document.createElement("td")
				cell.style.width = this.colWidth + "px"
				row.appendChild(cell)
				var chkbox = document.createElement("input")
				this.chkbox[this.items[(n*this.rows+m)*2+1]] = chkbox
				chkbox.setAttribute("type", "checkbox")
				chkbox.setAttribute("id", "cb"+this.checkListN+this.items[(n*this.rows+m)*2+1])
				$addHandler(chkbox, "click", this._statusHandler)
				cell.appendChild(chkbox)
				var lbl = document.createElement("label")
				lbl.setAttribute("for", "cb"+this.checkListN+this.items[(n*this.rows+m)*2+1])
				lbl.innerHTML = this.items[(n*this.rows+m)*2]
				cell.appendChild(lbl)
			}
		}
		this.main = document.createElement("div")
		this.main.appendChild(this.div)
		document.getElementsByTagName("BODY")[0].appendChild(this.main)

		this.checkItems()
	},

    show : function() 
    {
		this.win.show(this);
		this.setStatus()
    },

    onResize : function( pan,  adjWidth,  adjHeight,  rawWidth,  rawHeight ) 
    {       
        if(this.win)
        { 
            // *** TU RESORT ***
            //text = ' W:' +  adjWidth + 'H:' + adjHeight
            //this.win.getBottomToolbar().items.get(0).setText(text);    
        }
    },

	checkItems : function()
	{
		var values = this.cisKoder.get_valueElement().value
		if(values != "")
		{
			values = values.split(",")

			for(var n = 0; n < values.length; n++)
			{//alert(values[n])
				this.chkbox[values[n]].checked = true
			}
			//this.setStatus()
		}
	},

	removeItem : function(id)
	{
		this.chkbox[id].checked = false
		this.collectItems()
		this.setStatus()
	},

	collectItems : function()
	{
		var text = new Array()
		var value = new Array()
		for(var n = 0; n < this.pocet; n++)
		{
			if(!this.chkbox[this.items[n*2+1]].checked) continue
			text.push(this.items[n*2])
			value.push(this.items[n*2+1])
		}
		if(this.allMeansNothing && text.length == this.pocet) { text.length = 0; value.length = 0 }
		this.cisKoder.setMultichoice((this.checked <= this.limit) ? text : Array("..."), value)
	},

	onOk : function()
	{
		this.collectItems()
		this.onCancel()
	},

	onClear : function()
	{
		for(n = 0; n < this.pocet; n++)
		{
			document.getElementById("cb"+this.checkListN+this.items[n*2+1]).checked = false
		}
		this.textElm.value = "";
		this.valueElm.value = "";
		this.onCancel()
		this.cisKoder.resetMultichoice()
		this.setStatus()
	},

	onCancel : function()
	{
		this.win.hide(this)
	},

	setStatus : function()
	{
		this.checked = 0
		for(n = 0; n < this.pocet; n++)
		{
			if(document.getElementById("cb"+this.checkListN+this.items[n*2+1]).checked) this.checked++
		}
		this.win.getBottomToolbar().items.get(0).setText("Vybrané " + this.checked + "/" + this.pocet);
	}
}