if(typeof(BC.widget) == 'undefined') BC.widget = {};

BC.widget.Timendar = Class.create();

Object.extend(BC.widget.Timendar.prototype, {
	initialize: function(_containerId, _labels,_hour, _minute) {
		this.container = $(_containerId);

		this.id = _containerId + 'Tbl';
		this.hId = _containerId + 'Hr';
		this.mId = _containerId + 'Min';
		this.apId = _containerId + 'AP';
		this.okId = _containerId + 'ok';
		this.cnclId = _containerId + 'cncl';

		this.cssClass = 'timendar';
		this.labels = _labels;

		if(!_minute || !_hour) {
			var _date = new Date();
			this.hour = _date.getHours();
			this.minute = _date.getMinutes();
		} else {
			this.hour = _hour;
			this.minute = _minute;
		}

		this.hide();
	},

	render: function() {

		if(!window.ActiveXObject || document.readyState == 'loaded' || document.readyState == 'complete') {
			if($(this.id)) this.container.removeChild($(this.id));

			var _div = document.createElement('DIV');
			var _tbl = document.createElement('TABLE');
			var _tbd = document.createElement('TBODY');
			var _tr = document.createElement('TR');

			_div.id = this.id;
			_div.className = this.cssClass;
			this.container.appendChild(_div);
			_div.appendChild(_tbl);
			_tbl.appendChild(_tbd);
			_tbd.appendChild(_tr);

			var _tds = [];
			var _slct = [];
			var _hrsOpt = [];
			var _mntsOpt = [];
			var _ampmOpt = [];
			var _ok = document.createElement('SPAN');
			var _cncl = document.createElement('SPAN');

			_ok.id = this.okId;
			_ok.innerHTML = this.labels.length > 0 ? this.labels[0] : '';
			_cncl.id = this.cnclId;
			_cncl.innerHTML = this.labels.length > 1 ? this.labels[1] : '';

			_ok.onclick = this.ok.bind(this);
			_cncl.onclick = this.cancel.bind(this);

			for(var i = 0; i < 5 + this.labels.length; i++) {
				_tds[i] = document.createElement('TD');
				_tr.appendChild(_tds[i]);
			}

			_tds[1].innerHTML = ':';
			_tds[3].innerHTML = ' ';

			for(var i = 0; i < 3; i++) {
				_slct[i] = document.createElement('SELECT');
				_tds[i*2].appendChild(_slct[i]);
			}

			if(this.labels.length > 0) _tds[5].appendChild(_ok);
			if(this.labels.length > 1) _tds[6].appendChild(_cncl);

			_slct[0].id = this.hId;
			_slct[1].id = this.mId;
			_slct[2].id = this.apId;

			for(var i = 0; i < 12; i++) {
				_hrsOpt[i] = document.createElement('OPTION');
				_mntsOpt[i] = document.createElement('OPTION');

				if(!window.ActiveXObject) {
					_slct[0].options[_slct[0].length] = _hrsOpt[i];
					_slct[1].options[_slct[1].length] = _mntsOpt[i];
				} else {
					_slct[0].options.add(_hrsOpt[i]);
					_slct[1].options.add(_mntsOpt[i]);
				}

				_hrsOpt[i].value = i > 0 ? i < 10 ? '0' + i : i : 12;
				_hrsOpt[i].innerHTML = i > 0 ? i < 10 ? '0' + i : i : 12;

				if(this.hour == i || this.hour - 12 == i) {
					_hrsOpt[i].selected = true;
				}

				_mntsOpt[i].value = (i < 2 ? '0' : '') + i * 5;
				_mntsOpt[i].innerHTML = (i < 2 ? '0' : '') + i * 5;

				if( (i - 1) * 5 < this.minute && this.minute <= i * 5 ) {
					_mntsOpt[i].selected = true;
				}
			}

			_ampmOpt[0] = document.createElement('OPTION');
			_ampmOpt[1] = document.createElement('OPTION');

			if(!window.ActiveXObject) {
				_slct[2].options[_slct[2].length] = _ampmOpt[0];
				_slct[2].options[_slct[2].length] = _ampmOpt[1];
			} else {
				_slct[2].options.add(_ampmOpt[0]);
				_slct[2].options.add(_ampmOpt[1]);
			}

			_ampmOpt[0].value = 'AM';
			_ampmOpt[0].innerHTML = 'AM';

			if(this.hour < 12) {
				_ampmOpt[0].selected = true;
			}

			_ampmOpt[1].value = 'PM';
			_ampmOpt[1].innerHTML = 'PM';

			if(this.hour >= 12) {
				_ampmOpt[1].selected = true;
			}
		}

		this.onRender();
	},

	getString : function() {
		return '' + $(this.hId).value + ':' + $(this.mId).value + ' ' + $(this.apId).value;
	},

	show : function() {
		this.container.style.display = 'block';
		this.onShow();
	},

	hide : function() {
		this.container.style.display = 'none';
		this.onHide();
	},

	cancel : function() {
		this.hide();
		this.onCancel();
	},

	ok : function() {
		this.hide();
		this.onOk();
	},

	onHide : function() {},
	onCancel : function() {},
	onOk : function() {},
	onShow : function() {},
	onRender : function() {}

});