/**
 *
 * ScrollTable Widget
 *
 * Author: ChieftainY2k[at]gmail[dot]com
 *
 * Supported browsers: IE 5.0+, FFox 1.5+
 *
 */

dojo.provide("dojo.ScrollTable");

dojo.require("dojo.dom");
dojo.require("dojo.lang.*");
dojo.require("dojo.html.*");
dojo.require("dojo.html.util");
dojo.require("dojo.html.style");
dojo.require("dojo.html.selection");
dojo.require("dojo.event.*");
dojo.require("dojo.widget.*");
dojo.require("dojo.widget.HtmlWidget");


dojo.widget.defineWidget(

	// widget name and class
	"dojo.widget.ScrollTable",

	// superclass
	dojo.widget.HtmlWidget,

	{
		// parameters
		title: "Note",

		dataLabelDivs:[],

		// settings
		isContainer: true,
		templatePath: dojo.uri.dojoUri("../dojo-widgets/templates/ScrollTable.tpl.html"),
		templateCssPath: dojo.uri.dojoUri("../dojo-widgets/templates/ScrollTable.css"),
		//templateString: "templates/mywidget.tpl.html",

		fillInTemplate: function(args,fragment)
		{
			//dojo.debug('fillInTemplate');

			var sourceTable = this.getFragNodeRef(fragment);

	 		dojo.dom.removeChildren(this.dataTableNode); /* IE fix */

			//copy original table properties
			this.domNode.style.width = sourceTable.style.width;
			this.domNode.style.height = sourceTable.style.height;

			this.dataTableNode.appendChild(sourceTable['tBodies'][0]);

			//dojo.debugShallow(sourceTable.tBodies);
			//dojo.debugShallow(sourceTable);

	 		//create labels table
			var labelCells = sourceTable['tHead'].rows[0].cells;
			for(var i=0;i<labelCells.length;i++)
			{
				var td = document.createElement("td");
				var div = document.createElement("div");
				div.innerHTML = labelCells[i].innerHTML;
				div.style.overflow="hidden";
				div.style.width="100%";
				td.appendChild(div);
				this.labelsNode.appendChild(td);
				this.dataLabelDivs[this.dataLabelDivs.length] = div;
			};

		},
		mixInProperties: function(args,fragment)
		{
			//dojo.debug('mixInProperties');
		},
		postMixInProperties: function()
		{
			//dojo.debug('postMixInProperties');
		},
		postCreate: function(args,fragment)
		{
			//dojo.debug('postCreate');

			//alert(this.widgetId);

			/* Firefox fix - bottom scroll shows up , why ?! */
		 	if (dojo.render.html.mozilla)
			 dojo.html.setStyle(this.dataTableNode,"width","99.9%");
			else
			 dojo.html.setStyle(this.dataTableNode,"width","100%");

			//this.adjustSizes();

			//attach events (IE hover fix)
			if (dojo.render.html.ie)
			{
				var dataRows = this.dataTableNode['tBodies'][0].rows;
				for(var i=0;i<dataRows.length;i++)
				{
					//dojo.debug(dataRows[i].tagName);
					dojo.event.connect(dataRows[i],"onmouseover",this,"_trOnMouseOver");
					dojo.event.connect(dataRows[i],"onmouseout",this,"_trOnMouseOut");
				};
				//dojo.debugShallow(dataRows);
			};

		},
		resizeTimer:0
		,
		onResized: function()
		{
			//dojo.debug("ScrollTable onResized");
			dojo.lang.clearTimeout(this.resizeTimer);
			this.resizeTimer = dojo.lang.setTimeout(this, "_onResize", 300);
			//this._onResize();
		}
		,
		resizeTo:function(w,h)
		{
			dojo.widget.ScrollTable.superclass.resizeTo.call(this,w,h);
			this.adjustSizes();

		}
		,
		_onResize: function()
		{
			this.adjustSizes();
			this.notifyChildrenOfResize();
		}
		,
		adjustSizes: function()
		{
			//adjust data table container sizes
			var labelTableHeight = this.labelsNode.offsetHeight;//dojo.html.getPixelValue(this.labelsNode,"height",true);
			var outerContainerHeight = dojo.html.getPixelValue(this.domNode,"height",true);
			if (outerContainerHeight) // IE fix
			 dojo.html.setStyle(this.tableContainerDivNode,"height",(outerContainerHeight-labelTableHeight)+"px");

			//adjust label cell sizes
			var dataFirstCells = this.dataTableNode['tBodies'][0].rows[0].cells;
			var labelCells = this.labelsNode.cells;
			for(var i=0;i<dataFirstCells.length;i++)
			{
				var dataCellWidth = dojo.html.getMarginBox(dataFirstCells[i]).width;
				dojo.html.setMarginBox(labelCells[i],{width:dataCellWidth});
			};

			//adjust label cell divs sizes
			dojo.html.setMarginBox(this.labelsTableDivNode,{width:dojo.html.getMarginBox(this.dataTableNode).width})
			//dojo.html.setContentBox(this.labelsTableDivNode,{width:dojo.html.getContentBox(this.tableContainerDivNode).width})

		}
		,
		_trOnMouseOver: function(evt)
		{
			//dojo.debug("_tdOnMouseOver");
			//dojo.debug(evt.srcElement.tagName.toLowerCase());
			if (evt.srcElement.tagName.toLowerCase()=='td')
			 this._trHighlight(evt.srcElement.parentNode,true);
		},
		_trOnMouseOut: function(evt)
		{
			//dojo.debug("_trOnMouseOut");
			//dojo.debug(evt.srcElement.tagName.toLowerCase());
			if (evt.srcElement.tagName.toLowerCase()=='td')
			 this._trHighlight(evt.srcElement.parentNode,false);
		},
		_trHighlight: function(trElm,highlighted)
		{
			//trElm.style.background = highlighted ? "red" : "white";
			dojo.html.setClass(trElm,highlighted?"hover":"");
		}
		,


		foo:"bar"
	}
);



