﻿/*--
标题：数字显示牌
说明：这个控件主要避免IE元素被修改后会导致输入撤销失败而设计，因为修改样式表不会导致
设计：王集鹄
博客：http://blog.csdn.net/zswang
日期：2008年11月9日
--*/

if (!Common.scripts["DigitalCard"]) {
	loadCss("/Scripts/DigitalCard.css?version=2008102601");
	Common.scripts["DigitalCard"] = true;
}

/// <summary>
/// 构造数字显示牌
/// </summary>
/// <param name="parent">容器</param>
/// <param name="digital">数值</param>
function DigitalCard(parent, digital) {
	this.parent = typeof parent == "object" ? parent : document.body;
	this.charWidth = 9;
	
	this.table_digital = document.createElement("table");
	this.table_digital.className = "DigitalCard";
	this.table_digital.cellPadding = "0px";
	this.table_digital.cellSpacing = "0px";

	this.tr_digital = this.table_digital.insertRow(-1);
	this.parent.appendChild(this.table_digital);
	this.table_digital.style.height = "11px";

	this.digitals = {};
	for (var i = 0; i < 10; i++) {
		this.digitals[i] = this.tr_digital.insertCell(-1);
		this.digitals[i].className = "td_digital";
	}

	this.setDigital(digital);
}

/// <summary>
/// 更新数字显示牌
/// </summary>
/// <param name="digital">数值</param>
DigitalCard.prototype.setDigital = function(digital) {
	digital = typeof digital == "number" ? digital : parseInt(digital);
	if (this.digital == digital) return;
	var text = Math.floor(digital).toString();
	this.length = text.length;
	this.table_digital.style.width = (this.charWidth * this.length) + "px";

	for (var i = 0; i < 10; i++) {
		if (i < text.length) {
			var c = text.charAt(i);
			var j = digital < 0 ? "-0123456789".indexOf(c) + 10 : "0123456789".indexOf(c);
			this.digitals[i].style.backgroundPosition = "-" + j * this.charWidth + "px 0";
			this.digitals[i].style.display = "";
		} else this.digitals[i].style.display = "none";
	}
}

/// <summary>
/// 释放数字显示牌
/// </summary>
DigitalCard.prototype.dispose = function() {
	this.disposed = true;
	for (var i in this) {
		if (this[i].disposed) continue;
		if (typeof this[i].dispose == "function") this[i].dispose();
		if (typeof this[i].parentNode == "object")
			this[i].parentNode.removeChild(this[i]);
		delete this[i];
	}
}