
/**
**/
var TableWidget = function(tableid){
	var isNS = (document.layers)? true:false;
	var isIE = (document.all)? true:false;
	var hide = 'hidetablecolumn';
	var show = 'showtablecolumn';
	var table = null;
	var cookieName = 'TableWidget_'+tableid;
	var showHideColumn = true;
	var enableDragDrop = true;
	var divid = 'divExPopup';
	
	var getHeaderName = function(index){
		var headers = table.getElementsByTagName('th');
		if(headers.length > 0){
			for(var ii=0; ii<headers.length; ii++){
				if(headers[ii].cellIndex == index){
					return headers[ii].innerHTML;
				}
			}
		}
		return '';
	};
	
	var hideColumns = function(){
		if(table){
			var headers = table.getElementsByTagName('th');
			var rIndex = new Array();
			if(headers.length > 0){
				for(var ii=0; ii < headers.length; ii++){
					if(headers[ii].className == hide){
						rIndex.push(headers[ii].cellIndex);
					}
				}
			}
			
			var rows = table.rows;
			if(rows && rows.length > 0){
				for(var ii=0; ii<rows.length; ii++){
					var cells = rows[ii].getElementsByTagName('td');
					if(cells && cells.length > 0){
						for(var jj=0; jj<cells.length; jj++){
							for(var kk=0; kk<rIndex.length; kk++){
								if(cells[jj].cellIndex == rIndex[kk]){
									cells[jj].className = hide;
									break;
								}
							}
						}
					}
				}
			}
		}
	};
	
	var addRemoveColumn = function(obj){
		if(table){
			var headers = table.getElementsByTagName('th');
			if(headers.length > 0){
				//minimum 1 header should be visible
				if(!obj.checked){
					var arr = new Array();
					for(var ii=0; ii<headers.length; ii++){
						if(headers[ii].className == show)
							arr.push(headers[ii].cellIndex);
					}
					if(arr.length == 1)
						return;
				}
				for(var ii=0; ii < headers.length; ii++){
					if(ii == obj.value){
						headers[ii].className = (obj.checked)?show:hide;
						break;
					}
				}
			}
			var rows = table.rows;
			if(rows && rows.length > 0){
				for(var ii=0; ii<rows.length; ii++){
					var cells = rows[ii].getElementsByTagName('td');
					if(cells && cells.length > 0){
						for(var jj=0; jj<cells.length; jj++){
							if(jj == obj.value){
								cells[jj].className = (obj.checked)?show:hide;
							}
						}
					}
				}
			}
		}
		addPopup();
	};
	
	var isColumnHidden = function(obj, cols){
		for(var kk=0; kk<cols.length; kk++){
			if(obj.value == cols[kk]){
				return true;
			}
		}
		return false;
	};
	
	var hidePopup = function(){
		if(document.getElementById(divid)){
			document.body.removeChild(document.getElementById(divid));
		}
	};
	
	var createPopup = function(cols, e){
		if(document.getElementById(divid)){
			hidePopup();
			return;
		}
		var headers = table.getElementsByTagName('th');
		if(headers.length > 0 && cols){
			e = e || event;
			var d = document.createElement('div');
			d.id = divid;
			d.className = 'tableheadpopup';
			var t = document.createElement('table');
			for(var jj=0; jj<headers.length; jj++){
				var r = t.insertRow(jj);
				var c;
				var elm = null;
				c = r.insertCell(0);
				elm = document.createElement('input');
				//elm.id = 'chkFreePopup_'+jj;
				elm.type = 'checkbox';
				elm.value = jj;
				elm.defaultChecked = true;
				elm.checked = 'checked';
				c.appendChild(elm);
				if(isColumnHidden(elm, cols))
					elm.checked = false;
				elm.onclick = function(e){
					addRemoveColumn(this);
					hidePopup();
				};
				c = r.insertCell(1);
				elm = document.createElement('label');
				elm.innerHTML = headers[jj].innerHTML;
				c.appendChild(elm);
			}
			d.appendChild(t);
			
			if(document.all){
				var element = e.target || e.srcElement;
				var left = top = 0;
				var obj = element;
				do{
					left += obj.offsetLeft;
					top += obj.offsetTop;
					obj = obj.offsetParent;
				}while(obj);
				d.style.left = left+'px';
				d.style.top = (top+element.offsetHeight)+'px';
				d.style.display = 'block';
			}
			else{
				var left = e.pageX, top = e.pageY;
				d.style.left = left+'px';
				d.style.top = top+'px';
				d.style.display = 'block';
			}
			document.body.appendChild(d);
		}
	};
	
	var addPopup = function(){
		if(table){
			var headers = table.getElementsByTagName('th');
			for(var ii=0; ii<headers.length; ii++){
				headers[ii].onclick = function(e){};
			}
			var hIndx = new Array();
			if(headers.length > 0){
				for(var ii=0; ii<headers.length; ii++){
					if(headers[ii].className == hide){
						hIndx.push(ii);
					}
				}
			}
			
			for(var ii=0; ii<headers.length; ii++){
				if(headers[ii].className == show){
					headers[ii].onclick = function(e){
						createPopup(hIndx, e);
					};
				}
			}
		}
	};
	
	var setCookie = function(val){
		Delete_Cookie(cookieName);
		Set_Cookie(cookieName, val);
		//alert(document.cookie);
	};
	
	var init = function(){
		if(tableid){
			table = document.getElementById(tableid);
			hideColumns();
			if(showHideColumn){
				addPopup();
			}
		}
	};
	
	new init();
};

