/**
 * hml_modinterface.js (2009-may-21)
 * (c) by Alejandro Gudiel
 * All Rights Reserved
 * License does not permit use by third parties
**/
function highlightRow(objRow, boolHighlight, intStartCol, intEndCol, strHighLightClass) {
	if (objRow.tagName == "td" || objRow.tagName == "th" ||
	    objRow.tagName == "TD" || objRow.tagName == "TH") objRow = objRow.parentNode;
	if (!intStartCol) intStartCol = 0;
	if (!intEndCol) intEndCol = objRow.cells.length - 1;
	if (!strHighLightClass) strHighLightClass = "highlighted";

	if (intEndCol > objRow.cells.length) intEndCol = objRow.cells.length - 1;

	if (boolHighlight) {
		for (i=intStartCol; i<=intEndCol; i++) {
			if (!objRow.cells[i].classBackup) objRow.cells[i].classBackup = objRow.cells[i].className;
			objRow.cells[i].className = strHighLightClass;
		}
	}
	else {
		for (i=intStartCol; i<=intEndCol; i++) {
			objRow.cells[i].className = objRow.cells[i].classBackup;
		}
	}
}

function highlightCell(objCell, boolHighlight, strHighLightClass) {
	if (!strHighLightClass) strHighLightClass = "highlighted";

	if (boolHighlight) {
		objCell.classBackup = objCell.className;
		objCell.className = strHighLightClass;
	}
	else {
		objCell.className = objCell.classBackup;
	}
}

var intGlobalGridcounter = 0;
function hmlModInterface_buttonGrid(objTable) {
	var intRow, intCell, intTMP, objRow, objCell, strClassInfo, arrClassInfo;
	var intRows = objTable.rows.length;

	strClassInfo = objTable.className;
	arrClassInfo = strClassInfo.split(" ");
	if (arrClassInfo[0] == "hmlInterface") {
		if (!objTable.backGroundShape) {
			objTable.objContainer = objTable.parentNode;
			objTable.gridID = "grid_" + intGlobalGridcounter;
			objTable.shape = "roundrect";
			objTable.sinArcPCT = 0.1;
			objTable.fillCol = "#f8f8f8";
			objTable.strokeCol = "#dadada";
			objTable.strokeW = "1";
			objTable.fillAlpha = "100";		
			
			var intTMP;
			var arrCommand = new Array();
			for (intTMP = 1; intTMP < arrClassInfo.length; intTMP++) {
				arrCommand = arrClassInfo[intTMP].split(":");

				switch (arrCommand[0]) {
					case "gridID":
						objTable.gridID = arrCommand[1];
						break;
					case "shape":
						objTable.shape = arrCommand[1];
						break;
					case "sinArcPCT":
						objTable.sinArcPCT = arrCommand[1];
						break;
					case "fillCol":
						objTable.fillCol = arrCommand[1];
						break;
					case "strokeCol":
						objTable.strokeCol = arrCommand[1];
						break;
					case "strokeW":
						objTable.strokeW = arrCommand[1];
						break;
					case "fillAlpha":
						objTable.fillAlpha = arrCommand[1];
						break;						
				}
			}			
			
			var arrDimmentions = getObjDimentions(objTable);
			var arrCoordinates = getObjAbsoluteCoordinates(objTable);
			var arrDivCoordinates = getObjAbsoluteCoordinates(objTable.objContainer);
			var intLeft = 1*arrCoordinates["left"] - 1*arrDivCoordinates["left"];
			var intTop = 1*arrCoordinates["top"] - 1*arrDivCoordinates["top"];
			
			objTable.backGroundShape = new objHMLShapesRect(objTable.gridID, objTable.objContainer,
															intLeft, intTop, 
															arrDimmentions["width"], arrDimmentions["height"],
															objTable.fillCol, objTable.strokeCol, objTable.strokeW, objTable.fillAlpha, true);
			objTable.backGroundShape.sinArcPCT = objTable.sinArcPCT;
			objTable.backGroundShape.show();		
			objTable.backGroundShape.objVector.style.zIndex = 2;			
			objTable.style.zIndex = 3;
			 
			intGlobalGridcounter++;
		}
	}
			
	if (!objTable.arrButtons) objTable.arrButtons = new Array();

	for (intRow = 0; intRow < objTable.rows.length; intRow++) {
		objRow = objTable.rows[intRow];
		for (intCell = 0; intCell < objRow.cells.length; intCell++) {
			objCell = objRow.cells[intCell];

			strClassInfo = objCell.className;
			arrClassInfo = strClassInfo.split(" ");
			if (arrClassInfo[0] == "hmlInterface") {
				intTMP = intRow + intCell*intRows;
				if (objTable.arrButtons.length == 0 || (objTable.arrButtons.length > 0 && !objTable.arrButtons[intTMP])) {
					objTable.arrButtons[intTMP] = new hmlModInterface_buttonObject(objCell, arrClassInfo);
					objTable.arrButtons[intTMP].intIndexInArray = intTMP;
					objCell.objButton = objTable.arrButtons[intTMP];
				}
				objTable.arrButtons[intTMP].objShape.hide();
				objTable.arrButtons[intTMP].show();
			}
		}
	}
}

var intGlobalButCounter = 0;
function hmlModInterface_buttonObject(objContainer, arrCommands, intOffsetLeft, intOffsetTop) {
	if (!intOffsetLeft) intOffsetLeft = 0;
	if (!intOffsetTop) intOffsetTop = 0;

	this.objContainer = objContainer;
	this.butID = "but" + intGlobalButCounter;
	this.butShape = "roundrect";
	this.sinArcPCT = 0.2;
	this.fillCol = "#d7d7d7";
	this.overFillCol = "#cccccc";
	this.clickFillCol = "#c2c2c2";
	this.strokeCol = "transparent";
	this.strokeW = "1";
	this.fillAlpha = "100";
	this.contentAlpha = "100";	
	this.strContents = objContainer.innerHTML;

	this.show = hmlModInterface_buttonObject_show;
	this.hide = hmlModInterface_buttonObject_hide;
	this.reDefineColors = hmlModInterface_buttonObject_reDefineColors;

	var intTMP;
	var arrCommand = new Array();
	for (intTMP = 1; intTMP < arrCommands.length; intTMP++) {
		arrCommand = arrCommands[intTMP].split(":");

		switch (arrCommand[0]) {
			case "butID":
				this.butID = arrCommand[1];
				break;
			case "butShape":
				this.butShape = arrCommand[1];
				break;
			case "sinArcPCT":
				this.sinArcPCT = arrCommand[1];
				break;
			case "fillCol":
				this.fillCol = arrCommand[1];
				break;
			case "strokeCol":
				this.strokeCol = arrCommand[1];
				break;
			case "strokeW":
				this.strokeW = arrCommand[1];
				break;
			case "fillAlpha":
				this.fillAlpha = arrCommand[1];
				break;
			case "contentAlpha":
				this.contentAlpha = arrCommand[1];
				break;
			case "overFillCol":
				this.overFillCol = arrCommand[1];
				break;
			case "clickFillCol":
				this.clickFillCol = arrCommand[1];
				break;
		}
	}
	intGlobalButCounter++;

	if (objContainer.tagName == "TD") {
		var arrContainerCoordinates = getObjAbsoluteCoordinates(objContainer);
		var objDiv = objContainer.parentNode.parentNode.parentNode.parentNode;
		var arrDivCoordinates = getObjAbsoluteCoordinates(objDiv);

		intOffsetLeft = 1*intOffsetLeft + 1*arrContainerCoordinates["left"] - 1*arrDivCoordinates["left"];
		intOffsetTop = 1*intOffsetTop + 1*arrContainerCoordinates["top"] - 1*arrDivCoordinates["top"];
	}

	var arrDimmentions = getObjDimentions(objContainer);
	switch (this.butShape) {
		case "roundrect":
			this.objShape = new objHMLShapesRect(this.butID, this.objContainer,
												 intOffsetLeft, intOffsetTop, arrDimmentions["width"], arrDimmentions["height"],
												 this.fillCol, this.strokeCol, this.strokeW, this.fillAlpha,
												 true, true, this.strContents);
			this.objShape.buttonObject = this;
			this.objShape.sinArcPCT = this.sinArcPCT;
			break;
		case "rect":
			this.objShape = new objHMLShapesRect(this.butID, this.objContainer,
												 intOffsetLeft, intOffsetTop, arrDimmentions["width"], arrDimmentions["height"],
												 this.fillCol, this.strokeCol, this.strokeW, this.fillAlpha,
												 false, true, this.strContents);
			this.objShape.buttonObject = this;
			this.objShape.sinArcPCT = this.sinArcPCT;
			break;
		default:
			this.objShape = new objHMLShapesRect(this.butID, this.objContainer,
												 intOffsetLeft, intOffsetTop, arrDimmentions["width"], arrDimmentions["height"],
												 this.fillCol, this.strokeCol, this.strokeW, this.fillAlpha,
												 true, true, this.strContents);
			this.objShape.buttonObject = this;
			this.objShape.sinArcPCT = this.sinArcPCT;
			break;
	}
}

function hmlModInterface_buttonObject_show() {
	if (!this.objShape.boolStroked) {
		this.objContainer.style.width = this.objShape.intWidth;
		this.objContainer.style.height = this.objShape.intHeight;
		this.objContainer.innerHTML = "&nbsp;";
		this.objShape.stroke();

		this.objShape.objContents.style.cursor = "pointer";
		this.objShape.objContents.onmouseover = hmlModInterface_buttonObject_OverContents;
		this.objShape.objContents.onmouseout = hmlModInterface_buttonObject_OutOfContents;
		this.objShape.objContents.onmousedown = hmlModInterface_buttonObject_mousedown;
		this.objShape.objContents.onmouseup = hmlModInterface_buttonObject_OverContents;
	}
	this.objShape.show();
}
function hmlModInterface_buttonObject_hide() {
	this.objContainer.innerHTML = this.strContents;
	this.objShape.hide();
}
function hmlModInterface_buttonObject_reDefineColors(strFillColor, strStrokeColor, strStrokeWeight) {
	if (boolHMLShapesUseMicrosoftVectors) {
		this.objShape.objVector.fillcolor = strFillColor;
		this.objShape.objVector.strokecolor = strStrokeColor;
		this.objShape.objVector.strokeweight = strStrokeWeight;

		this.objShape.objVector.filled = (strFillColor == "" || strFillColor == "transparent")?"f":"t";
		this.objShape.objVector.stroked = (strStrokeColor == "" || strStrokeColor == "transparent")?"f":"t";
	}
	else if (boolHMLShapesUseCanvasVectors) {
		if (strFillColor != "" && strFillColor != "transparent") {
			this.objShape.objCanvasContext.fillStyle = strFillColor;
		}
		if (strStrokeColor != "" && strStrokeColor != "transparent") {
			this.objShape.objCanvasContext.lineWidth = strStrokeWeight;
			this.objShape.objCanvasContext.strokeStyle = strStrokeColor;
		}

		if (strFillColor != "" && strFillColor != "transparent") this.objShape.objCanvasContext.fill();
		if (strStrokeColor != "" && strStrokeColor != "transparent") this.objShape.objCanvasContext.stroke();
	}
}

function hmlModInterface_buttonObject_OverContents() {
	var objShape = this.shapeObject;
	var objButton = objShape.buttonObject;

	objButton.reDefineColors(objButton.overFillCol, objButton.strokeCol, objButton.strokeW);
}
function hmlModInterface_buttonObject_OutOfContents() {
	var objShape = this.shapeObject;
	var objButton = objShape.buttonObject;

	objButton.reDefineColors(objButton.fillCol, objButton.strokeCol, objButton.strokeW);
}
function hmlModInterface_buttonObject_mousedown() {
	var objShape = this.shapeObject;
	var objButton = objShape.buttonObject;

	objButton.reDefineColors(objButton.clickFillCol, objButton.strokeCol, objButton.strokeW);
}