/* (C) Copyright 2009 David Beck */
function removeStyleClass(sender, className) {
    if (hasStyleClass(sender, className))
        sender.className = sender.className.replace(className, "");
}
function addStyleClass(sender, className) {
    if (!hasStyleClass(sender, className))
        sender.className += (sender.className.length ? " " + className : className);
}
function hasStyleClass(sender, className) {
    return sender.className.indexOf(className) !== -1;
}
function getStyle(sender, strCssRule) {
	var strValue = "";
	if(document.defaultView && document.defaultView.getComputedStyle){
		strValue = document.defaultView.getComputedStyle(sender, "").getPropertyValue(strCssRule);
	} else if(this.currentStyle){
		strCssRule = strCssRule.replace(/\-(\w)/g, function (strMatch, p1){
			return p1.toUpperCase();
		});
		strValue = sender.currentStyle[strCssRule];
	}
	return strValue;
}


function addEvent(sender, event, func) {
	try {
		return sender.addEventListener(event, func, false); 
	} catch (err){
		return sender.attachEvent('on' + event, func);
	}
}
function removeEvent(sender, event, func) {
	try {
		return sender.removeEventListener(event, func, false);
	} catch (err) {
		return sender.detachEvent('on' + event, func);
	}
}
function getSubClass(sender, className) {
	var classes = new Array();
	
	var els = sender.getElementsByTagName("*");
	if(els.length < 1 && sender.all)els = sender.all;
	for(var count=0; count < els.length; count++) {
		if(hasStyleClass(els[count], className))
			classes.push(els[count]);
	}
	return classes;
}
function createPlaceHolder(sender, text) {
	addEvent(sender, 'change', function() { if(sender.value == "" || !sender.value) {sender.value = text; addStyleClass(sender, "default");} });
	
	addEvent(sender, 'blur', function() { if(sender.value == "") {sender.value = text; addStyleClass(sender, "default");} });
	
	addEvent(sender, 'focus', function() { if(hasStyleClass(sender, "default")) {sender.value = ""; removeStyleClass(sender, "default")} });
	
	if(sender.value == "") {
		sender.value = text;
		addStyleClass(sender, "default");
	}
	
	sender.isEmpty = function() {
		return hasStyleClass(sender, "default");
	}
}
function createInput(name, value) {
	var input = document.createElement('input');
	input.type = 'hidden';
	input.name = name;
	input.value = value;
	return input;
}


//timer object
function Timer(time, func, args) {
	this.callBack = function(){};
	this.func = func;
	this.args = args;
	this.time = time;
	return this;
}
Timer.prototype.start = function() {
	this.start = new Date().getTime();
	this.end = this.start + this.time;
	var thisTimer = this;
	this.intervalTimer = setInterval(function() {thisTimer.interval();}, 10);
}
Timer.prototype.stop = function() {
	window.clearInterval(this.intervalTimer);
	this.callBack();
}
Timer.prototype.interval = function() {
	var time = new Date().getTime();
	if(time > this.end) {
		window.clearInterval(this.intervalTimer);
		this.callBack();
		var percent = 1;
	} else {
		var percent = (time - this.start) / (this.end - this.start);
	}
	this.func(percent, this.args);
}


//toolTip functions
var currentTip = "";
function showTip(e, tip) {
	currentTip = tip;
	var toolTip = document.getElementById("toolTip");
	if(!toolTip) {
		var toolTip = document.createElement("span");
		toolTip.id = "toolTip";
		document.body.appendChild(toolTip);
	}
	//toolTip.onclick = sender.onclick;
	toolTip.innerHTML = tip;
	
	moveTip(e);
	
	addEvent(this, 'mousemove', moveTip);
	
	var sender = this;
	setTimeout(function() {if(currentTip==tip) {
		removeEvent(sender, 'mousemove', moveTip);
		toolTip.style.display = 'inline';
	} }, 500);
}
function moveTip(e) {
	var toolTip = document.getElementById("toolTip");
	
	var posx = 0;
	var posy = 0;
	if (!e) var e = window.event;
	if (e.pageX || e.pageY) 	{
		posx = e.pageX;
		posy = e.pageY;
	} else if (e.clientX || e.clientY) 	{
		posx = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
		posy = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;
	}
	toolTip.style.top = posy + 15 + 'px';
	toolTip.style.left = posx + 'px';
}
function hideTip(tip, sender) {
	if(currentTip != tip)
		return;
	currentTip = '';
	var toolTip = document.getElementById('toolTip');
	toolTip.style.display = 'none';
}
function applyOpac(sender, opacity) {
	sender.style.opacity = opacity;
	sender.style.mozOpacity = opacity;
	sender.style.filter = 'alpha(opacity=' + (opacity * 100) + ')';
}


var corners = document.createElement('div');
corners.className = 'corners';
for(var i=0; i<4; i++) {
	var corner = document.createElement('div');
	corners.appendChild(corner);
	corner.className = 'c-' + i;
}
function addCorners(sender) {
	sender.style.position = 'relative';
	sender.appendChild(corners.cloneNode(true));
}

function log(message) {
	if (!log.window_ || log.window_.closed) {
		var win = window.open("", null, "width=400,height=200," +
													"scrollbars=yes,resizable=yes,status=no," +
													"location=no,menubar=no,toolbar=no");
		if (!win) return;
		var doc = win.document;
		doc.write("<html><head><title>Debug Log</title></head>" +
							"<body></body></html>");
		doc.close();
		log.window_ = win;
	}
	var logLine = log.window_.document.createElement("div");
	logLine.appendChild(log.window_.document.createTextNode(message));
	log.window_.document.body.insertBefore(logLine, log.window_.document.body.firstChild);
}

function clearChildren(sender) {
	for(var i=0; sender.childNodes.length > 0; i++) {
		sender.removeChild(sender.firstChild);
	}
}