var tf_DOM = 
{
	$: function(objId)
	{
		return document.getElementById(objId);
	},
	
	$$: function(objName)
	{
		return document.getElementsByName(objName);
	},
	
	$_tag: function(objTagName)
	{
		return document.getElementsByTagName(objTagName);
	},
	
	get_WH: function(cObj)
	{
		if(!cObj) return false;
		var w = cObj.offsetWidth;
		var h = cObj.offsetHeight;
		return [w, h];
	},

	get_LT: function(cObj)
	{
		if(!cObj) return false;
		var xPos = cObj.offsetLeft;
		var yPos = cObj.offsetTop;
		tempEl = cObj.offsetParent;
			while (tempEl != null) 
			{
				xPos += tempEl.offsetLeft;
				yPos += tempEl.offsetTop;
		  		tempEl = tempEl.offsetParent;
	  		}
		return [xPos, yPos];
	},
	
	get_MCoords: function(e)
	{
		var xPos = 0;
		var yPos = 0;
		if(!e) var e = window.event;
		if(e.pageX || e.pageY)
		{
			xPos = e.pageX;
			yPos = e.pageY;
		}
		else if(e.clientX || e.clientY)
		{
			xPos = e.clientX + document.body.scrollLeft
				+ document.documentElement.scrollLeft;
			yPos = e.clientY + document.body.scrollTop
				+ document.documentElement.scrollTop;
		}
		return [xPos, yPos];
	},
	
	get_WSize: function()
	{
		var w = 0;
		var h = 0;
		
		if(!window.innerWidth) //IE
		{
			if(!(document.documentElement.clientWidth == 0)) //strict mode
			{
				w = document.documentElement.clientWidth;
				h = document.documentElement.clientHeight;
			}
			else //quirks mode
			{
				w = document.body.clientWidth;
				h = document.body.clientHeight;
			}
		}
		else //w3c
		{
			w = window.innerWidth;
			h = window.innerHeight;
		}
		
		return [w, h];
	},

	get_WCenter: function()
	{
		var w = arguments[0][0] ? arguments[0][0] : 0;
		var h = arguments[0][1] ? arguments[0][1] : 0;
		
		var xPos = 0;
		var yPos = 0;
		
		var offsetX = 0;
		var offsetY = 0;
		
		if(!window.pageYOffset) //IE
		{
			if(!(document.documentElement.scrollTop == 0)) //strict mode
			{
				offsetY = document.documentElement.scrollTop;
				offsetX = document.documentElement.scrollLeft;
			}
			else //quirks mode
			{
				offsetY = document.body.scrollTop;
				offsetX = document.body.scrollLeft;
			}
		}
		else //w3c
		{
			offsetX = window.pageXOffset;
			offsetY = window.pageYOffset;
		}
		
		var size = tf_DOM.get_WSize();
		xPos = ((size[0] - w)/2) + offsetX;
		yPos = ((size[1] - h)/2) + offsetY;
		
		return [xPos, yPos];
	},
	
	/*CREATE ELEMENT*/
	CE: function(eTag, eId, eName)
	{
		var cObj = document.createElement(eTag);
		if(cObj)
		{
			if(eId)
				cObj.setAttribute('id', eId);
			if(eName)
				cObj.setAttribute('name', eName);
		}
		return cObj;
	},
	
	/*APPEND ELEMENT*/
	AE: function(cObj, parentNode)
	{
		if(parentNode)
			parentNode.appendChild(cObj);
		else	
			document.body.appendChild(cObj);
	},
	
	/*REMOVE ELEMENT*/
	RE: function(cObj) 
	{
		cObj.parentNode.removeChild(cObj);
	},
	
	/* DROP ELEMENT*/
	/*DE: function(cObj) 
	{
		cObj.parentNode.removeChild(cObj);
	},*/
	
	/*SHOW ELEMENT*/
	SE: function(cObj, display) 
	{
		cObj.style.visibility = 'visible';
		if(display)
			cObj.style.display = display;
	},
	
	/*HIDE ELEMENT*/
	HE: function(cObj, display) 
	{
		cObj.style.visibility = 'hidden';
		if(display)
			cObj.style.display = display;
	},
	
	/*OPACITY ELEMENT*/
	OE: function(cObj, value)
	{
		cObj.style.filter = 'progid:DXImageTransform.Microsoft.Alpha(opacity=' + value + ')';
		cObj.style.opacity = value / 100;
	},
	
	// 0 100 => show 100 0 => hide
	SAE: function(cObj, display, startOp, stopOp, step, rate, fn) 
	{
		this.SE(cObj, display);
		if(startOp <= stopOp)
		{ 
			this.OE(cObj, startOp);
			startOp += step;
			
			var obj = this;
			setTimeout(function() { obj.SAE(cObj, display, startOp, stopOp, step, rate, fn); }, rate);
		}
		else
			if(typeof fn == 'function')
				fn();
	},
	
	HAE: function(cObj, display, startOp, stopOp, step, rate, fn)
	{
		if(startOp >= stopOp)
		{ 
			this.OE(cObj, startOp);
			startOp -= step;
			
			var obj = this;
			setTimeout(function() { obj.HAE(cObj, display, startOp, stopOp, step, rate, fn); }, rate);
		}
		else
		{
			this.HE(cObj, display);
			if(typeof fn == 'function')
				fn();
		}	
	},
	
	addEvent: function(cObj, evType, fn, useCapture)
	{
	    if(cObj.addEventListener) 
	    {
	        cObj.addEventListener(evType, fn, useCapture);
	    	return true;
	    }
	    else if(cObj.attachEvent)
	    {
	        var r = cObj.attachEvent('on' + evType, fn);
	        return r;
	    }
	    else 
	    	cObj['on' + evType] = fn;
	}
};


/*PHP FUNCTIONS*/
var tf_PHP =
{
	setcookie: function(name, value, expires, path, domain, secure) 
	{
	    expires instanceof Date ? expires = expires.toGMTString() : typeof(expires) == 'number' && (expires = (new Date(+(new Date) + expires * 1e3)).toGMTString());
	    var r = [name + "=" + escape(value)], s, i;
	    for(i in s = {expires: expires, path: path, domain: domain})
	        s[i] && r.push(i + "=" + s[i]);
	    return secure && r.push('secure'), document.cookie = r.join(';'), true;
	},
	
	implode: function(glue, pieces) 
	{
	    return ((pieces instanceof Array) ? pieces.join (glue) : pieces);
	},
	
	explode: function(delimiter, string)
	{
	    var emptyArray = { 0: '' };
	
	    if(arguments.length != 2 || typeof arguments[0] == 'undefined' || typeof arguments[1] == 'undefined')
	        return null;
	
	    if(delimiter === '' || delimiter === false || delimiter === null)
	        return false;
	
	    if(typeof delimiter == 'function' || typeof delimiter == 'object' || typeof string == 'function' || typeof string == 'object')
	        return emptyArray;
	
	    if(delimiter === true)
	        delimiter = '1';
	
	    return string.toString().split(delimiter.toString());
	},
	
	strtoupper: function(str)
	{
	    return str.toUpperCase();
	},
	
	strtolower: function(str) 
	{
	    return str.toLowerCase();
	},
	
	str_ireplace: function(f_needle, f_replace, f_haystack)
	{
	    var result = '';
	    var index = 0;
	
	    var haystack = f_haystack.toLowerCase();
	    var needle = f_needle.toLowerCase();
	
	    while((index = haystack.indexOf(needle)) > -1)
	    {
	        result += f_haystack.substring(0, index);
	        result += f_replace;
	
	        haystack = haystack.substring(index + f_needle.length);
	        f_haystack = f_haystack.substring(index + f_needle.length);
	    }
	
	    return result + f_haystack;
	},
	
	basename: function(path, suffix)
	{
	    var b = path.replace(/^.*[\/\\]/g, '');
	    if (typeof(suffix) == 'string' && b.substr(b.length-suffix.length) == suffix)
	        b = b.substr(0, b.length - suffix.length);
	    return b;
	},
	
	str_replace: function(search, replace, subject) 
	{
	    if(!(replace instanceof Array))
	    {
	        replace=new Array(replace);
	        if(search instanceof Array)
	            while(search.length>replace.length)
	                replace[replace.length] = replace[0];
	    }
	
	    if(!(search instanceof Array))
	    	search=new Array(search);
	    while(search.length>replace.length)
	        replace[replace.length] = '';
	
	    if(subject instanceof Array)
	    {
	        for(k in subject)
	            subject[k] = str_replace(search,replace,subject[k]);
	        return subject;
	    }
	
	    for(var k=0; k<search.length; k++)
	    {
	        var i = subject.indexOf(search[k]);
	        while(i>-1)
	        {
	            subject = subject.replace(search[k], replace[k]);
	            i = subject.indexOf(search[k],i);
	        }
	    }
	
	    return subject;
	},
	
	str_ireplace: function(f_needle, f_replace, f_haystack)
	{
	    var result = '';
	    var index = 0;
	
	    var haystack = f_haystack.toLowerCase();
	    var needle = f_needle.toLowerCase();
	
	    while((index = haystack.indexOf(needle)) > -1)
	    {
	        result += f_haystack.substring(0, index);
	        result += f_replace;
	
	        haystack = haystack.substring(index + f_needle.length);
	        f_haystack = f_haystack.substring(index + f_needle.length);
	    }
	
	    return result + f_haystack;
	},
	
	isset: function(mixed_var) 
	{
	    var i = 0, argc = arguments.length, argv = arguments, set = true;
	    for(i=0; i<argc; i++)
	        if(argv[i] == undefined)
	        {
	            set = false;
	            break;
	        }
	    return set;
	},
	
	trim: function(str, charlist) 
	{
	    charlist = !charlist ? ' \s\xA0' : charlist.replace(/([\[\]\(\)\.\?\/\*\{\}\+\$\^\:])/g, '\$1');
	    var re = new RegExp('^[' + charlist + ']+|[' + charlist + ']+$', 'g');
	    return str.replace(re, '');
	}
};

var tf_GEN = 
{
	focusValue: function(obj, defaultValue)
	{
		obj.value = obj.value == defaultValue ? '' : obj.value;
	},
	
	blurValue: function(obj, defaultValue)
	{
		obj.value = obj.value == '' ? defaultValue : obj.value;
	}
};	

var tf_Tooltip = 
{
	id: 'tooltip',
	clickEvent: false,
	
	show: function(e, linkObj, content)
	{
		var tooltip = tf_DOM.$(this.id);
		
		if(!tooltip)
		{
			tooltip = tf_DOM.CE('div', this.id);
			tooltip.className = 'tooltip';
			tf_DOM.AE(tooltip, tf_DOM.$_tag('body')[0]);
		}
		
		var wh = tf_DOM.get_WH(linkObj);
		/*var lt = tf_DOM.get_LT(linkObj);*/
		var mouseXY = tf_DOM.get_MCoords(e);
		tooltip.style.left = parseInt(mouseXY[0] + 5) +'px';	
		tooltip.style.top = parseInt(mouseXY[1] + 5) +'px';	
		tooltip.innerHTML = content;
		
		//tf_DOM.SAE(tooltip, '', 0, 100, 20, 10);
		tf_DOM.SE(tooltip);
		
		//clickEventDropDownListDiv = true;
		var obj = this;
		tooltip.onclick = function() { obj.clickEvent = true; }
	},

	hide: function()
	{
		var tooltip = tf_DOM.$(this.id);
		if(tooltip)
			//tf_DOM.HAE(tooltip, '', 100, 0, 20, 10);
			tf_DOM.HE(tooltip);
	},
	
	init: function()
	{
		var obj = this;
		tf_DOM.addEvent(window, 'load', function(){ tf_DOM.addEvent(document, 'click', function(){ if(obj.clickEvent == false) obj.hide(); obj.clickEvent = false;}, false); }, false);
	}
};

tf_Tooltip.init();
