/* Set up IE Emualtion for Mozilla */
//if (window.moz == true && (typeof window.emulateAttachEvent != "function" || typeof window.extendEventObject != "function"))
//	alert("Error! IE Emulation file not included.");
//if (window.moz) {
//	emulateAttachEvent();
//	extendEventObject();
//}
/* end Mozilla specific emulation initiation */
function createButton(el) {
	if(window.addEventListener){ // Mozilla, Netscape, Firefox
		el.addEventListener("mouseover",	createButton.overCoolButton, false);
		el.addEventListener("mouseout",	createButton.outCoolButton, false);
		el.addEventListener("mousedown",	createButton.downCoolButton, false);
		el.addEventListener("mouseup",		createButton.upCoolButton, false);
		el.addEventListener("click",		createButton.clickCoolButton, false);
		el.addEventListener("dblclick",	createButton.clickCoolButton, false);
		el.addEventListener("keypress",	createButton.keypressCoolButton, false);
		el.addEventListener("keyup",		createButton.keyupCoolButton, false);
		el.addEventListener("keydown",		createButton.keydownCoolButton, false);
		el.addEventListener("focus",		createButton.focusCoolButton, false);
		el.addEventListener("blur",		createButton.blurCoolButton, false);
	} else {
		el.attachEvent("onmouseover",	createButton.overCoolButton);
		el.attachEvent("onmouseout",	createButton.outCoolButton);
		el.attachEvent("onmousedown",	createButton.downCoolButton);
		el.attachEvent("onmouseup",		createButton.upCoolButton);
		el.attachEvent("onclick",		createButton.clickCoolButton);
		el.attachEvent("ondblclick",	createButton.clickCoolButton);
		el.attachEvent("onkeypress",	createButton.keypressCoolButton);
		el.attachEvent("onkeyup",		createButton.keyupCoolButton);
		el.attachEvent("onkeydown",		createButton.keydownCoolButton);
		el.attachEvent("onfocus",		createButton.focusCoolButton);
		el.attachEvent("onblur",		createButton.blurCoolButton);
	}
	el.className = "coolButton";
	el.setEnabled	= createButton.setEnabled;
	el.getEnabled	= createButton.getEnabled;
	el.setValue		= createButton.setValue;
	el.getValue		= createButton.getValue;
	el.setToggle	= createButton.setToggle;
	el.getToggle	= createButton.getToggle;
	el.setAlwaysUp	= createButton.setAlwaysUp;
	el.getAlwaysUp	= createButton.getAlwaysUp;
	el._enabled		= true;
	el._toggle		= false;
	el._value		= false;
	el._alwaysUp	= false;
	return el;
}
createButton.LEFT = window.moz ? 0 : 1;
/* event listeners */
function CBgetEvent() { return (ie?window.event:window.Event); }
createButton.overCoolButton = function (e) {
	var nodeFrom = ie ? window.event.fromElement : null;
	if (!ie) {
		nodeFrom = e.relatedTarget;
		if (nodeFrom) while (nodeFrom.nodeType != 1) nodeFrom = nodeFrom.parentNode;
	}

	var nodeTo = ie ? window.event.toElement : null;
	if (!ie) {
		nodeTo = e.target;
		if (nodeTo) while (nodeTo.nodeType != 1) nodeTo = nodeTo.parentNode;
	}

	var toEl = createButton.getParentCoolButton(nodeTo);
	var fromEl = createButton.getParentCoolButton(nodeFrom);
	if (toEl == fromEl || toEl == null) return;
	toEl._over = true;
	if (!toEl._enabled) return;
	createButton.setClassName(toEl);
};
createButton.outCoolButton = function (e) {
	var nodeFrom = ie ? window.event.fromElement : null;
	if (!ie) {
		nodeFrom = e.target;
		if (nodeFrom) while (nodeFrom.nodeType != 1) nodeFrom = nodeFrom.parentNode;
	}

	var nodeTo = ie ? window.event.toElement : null;
	if (!ie) {
		nodeTo = e.relatedTarget;
		if (nodeTo) while (nodeTo.nodeType != 1) nodeTo = nodeTo.parentNode;
	}

	var toEl = createButton.getParentCoolButton(nodeTo);
	var fromEl = createButton.getParentCoolButton(nodeFrom);
	if (toEl == fromEl || fromEl == null) return;
	fromEl._over = false;
	fromEl._down = false;
	if (!fromEl._enabled) return;	
	createButton.setClassName(fromEl);
};
createButton.downCoolButton = function () {
	if (CBgetEvent().button != createButton.LEFT) return;
	var el = createButton.getParentCoolButton(CBgetEvent().srcElement);
	if (el == null) return;
	el._down = true;
	if (!el._enabled) return;
	createButton.setClassName(el);
};
createButton.upCoolButton = function () {
	if (CBgetEvent().button != createButton.LEFT) return;
	var el = createButton.getParentCoolButton(CBgetEvent().srcElement);
	if (el == null) return;
	el._down = false;
	if (!el._enabled) return;
	if (el._toggle)
		el.setValue(!el._value);
	else
		createButton.setClassName(el);
};
createButton.clickCoolButton = function (e) {
	var nodeSrc = ie ? CBgetEvent().srcElement : e.target;
	if (!ie) {
		while (nodeSrc.nodeType != 1) nodeSrc = nodeSrc.parentNode;
	}

 	var el = createButton.getParentCoolButton(nodeSrc);
	el.onaction = el.getAttribute("onaction");
	if (el == null || !el._enabled || el.onaction == "" || el.onaction == null) return;
	if (typeof el.onaction == "string")
		el.onaction = new Function ("event", el.onaction);
	el.onaction(ie ? CBgetEvent() : e);
};
createButton.keypressCoolButton = function () {
	var el = createButton.getParentCoolButton(CBgetEvent().srcElement);
	if (el == null || !el._enabled || CBgetEvent().keyCode != 13) return;
	el.setValue(!el._value);
	if (el.onaction == null) return;
	if (typeof el.onaction == "string")
		el.onaction = new Function ("event", el.onaction);
	el.onaction(CBgetEvent());
};
createButton.keydownCoolButton = function () {
	var el = createButton.getParentCoolButton(CBgetEvent().srcElement);
	if (el == null || !el._enabled || CBgetEvent().keyCode != 32) return;
	createButton.downCoolButton();
};
createButton.keyupCoolButton = function () {
	var el = createButton.getParentCoolButton(CBgetEvent().srcElement);
	if (el == null || !el._enabled || CBgetEvent().keyCode != 32) return;
	createButton.upCoolButton();
	if (el.onaction == null) return;
	if (typeof el.onaction == "string")
		el.onaction = new Function ("event", el.onaction);
	el.onaction(CBgetEvent());
};
createButton.focusCoolButton = function () {
	var el = createButton.getParentCoolButton(CBgetEvent().srcElement);
	if (el == null || !el._enabled) return;
	createButton.setClassName(el);
};
createButton.blurCoolButton = function () {
	var el = createButton.getParentCoolButton(CBgetEvent().srcElement);
	if (el == null) return;
	createButton.setClassName(el)
};
createButton.getParentCoolButton = function (el) {
	if (el == null) return null;
	if (/coolButton/.test(el.className))
		return el;
	return createButton.getParentCoolButton(el.parentNode);
};
/* end event listeners */
createButton.setClassName = function (el) {
	var over = el._over;
	var down = el._down;
	var focused;
	try {
		focused = (el == document.activeElement && el.tabIndex > 0);
	}
	catch (exc) {
		focused = false;
	}
	if (!el._enabled) {
		if (el._value)
			el.className = "coolButtonActiveDisabled";
		else
			el.className = el._alwaysUp ? "coolButtonUpDisabled" : "coolButtonDisabled";
	}
	else {
		if (el._value) {
			if (over || down || focused)
				el.className = "coolButtonActiveHover";
			else
				el.className = "coolButtonActive";
		}
		else {
			if (down)
				el.className = "coolButtonActiveHover";
			else if (over || el._alwaysUp || focused)
				el.className = "coolButtonHover";
			else
				el.className = "coolButton";
		}
	}
};
createButton.setEnabled = function (b) {
	if (this._enabled != b) {
		this._enabled = b;
		createButton.setClassName(this, false, false);
	}
};
createButton.getEnabled = function () {
	return this._enabled;
};
createButton.setValue = function (v, bDontTriggerOnChange) {
	if (this._toggle && this._value != v) {
		this._value = v;
		createButton.setClassName(this, false, false);
		this.onchange = this.getAttribute("onchange");
		if (this.onchange == null || this.onchange == "" || bDontTriggerOnChange) return;
		if (typeof this.onchange == "string")
			this.onchange = new Function("", this.onchange);
		this.onchange();
	}
};
createButton.getValue = function () {
	return this._value;
};
createButton.setToggle = function (t) {
	if (this._toggle != t) {
		this._toggle = t;
		if (!t) this.setValue(false);
	}
};
createButton.getToggle = function () {
	return this._toggle;
};
createButton.setAlwaysUp = function (up) {
	if (this._alwaysUp != up) {
		this._alwaysUp = up;
		createButton.setClassName(this, false, false);
	}
};
createButton.getAlwaysUp = function () {
	return this._alwaysUp;
};
