function createHelper()
{
	hasHelper = true;
	
	var helper_div = document.createElement('div');
	helper_div.id = 'helper_div';
	
	var title_span = document.createElement('span');
	title_span.id = 'helper_div_title';
	helper_div.appendChild(title_span);
	
	body_div = document.createElement('div');
	body_div.id = 'helper_div_body';
	helper_div.appendChild(body_div);
	
	document.body.appendChild(helper_div);
}

function openWindow(address)
{
	return window.open(address,'','width=850,height=650');
}

function createMiniWindow(title,body,restorer)
{
	if (typeof(miniWindowCtn) == 'undefined') { miniWindowCtn = -1;}
	miniWindowCtn++;
	
	var helper_div = document.createElement('div');
	helper_div.id = 'miniWindow' + miniWindowCtn;
	helper_div.className = 'miniWindow';
	helper_div.style.top = '150px';
	helper_div.style.left = '150px';
	helper_div.style.zIndex = 64;
	
	if (title)
	{
		var title_span = document.createElement('div');
		title_span.id = 'miniWindow_title' + miniWindowCtn;
		title_span.className = 'miniWindow_title';
		title_span.style.cursor = 'move';
		title_span.innerHTML = title;
		helper_div.appendChild(title_span);
	}
	else
	{
		var title_span = document.createElement('div');
		title_span.innerHTML = 'Mover';
		title_span.className = 'miniWindow_action';
		title_span.style.cursor = 'move';
		helper_div.appendChild(title_span);
	}
	
	var body_div = document.createElement('div');
	body_div.id =  'miniWindow_body' + miniWindowCtn;
	body_div.className = 'miniWindow_body';
	body_div.innerHTML = body;
	body_div.style.textAlign = 'center';
	helper_div.appendChild(body_div);
	
	var close_div = document.createElement('div');
	close_div.innerHTML = 'X';
	close_div.onclick = function() {helper_div.parentNode.removeChild(helper_div); if(gebI(restorer)){gebI(restorer).style.visibility = 'visible';}}
	close_div.className = 'miniWindow_action';
	title_span.appendChild(close_div);
	
	close_div = document.createElement('div');
	close_div.innerHTML = '-';
	close_div.onclick = function() {toggleDisplay(body_div,'');}
	close_div.className = 'miniWindow_action';
	title_span.appendChild(close_div);
	
	new Drag(helper_div,title_span);
	
	document.body.appendChild(helper_div);
	
	return miniWindowCtn;
}

function showHelper(e,titletext,bodytext)
{

	if (typeof(hasHelper) == 'undefined' || !hasHelper)
	{
		createHelper();
	}
	
	if (typeof(lastHelperTimeout) == 'undefined')
	{
		lastHelperTimeout = 0;
		helperTimeout = -1;
	}	
	
	var helper_div=document.getElementById('helper_div');
	var helper_title=document.getElementById('helper_div_title');
	var helper_body=document.getElementById('helper_div_body');
	var IE=document.all?true:false;
	var tempX=0;
	var tempY=0;
	if(IE)
		{
		tempX=event.clientX+document.body.scrollLeft;
		tempY=event.clientY+document.body.scrollTop
	}
	else
		{
		tempX=e.pageX;
		tempY=e.pageY
	}
	if(tempX<0)
		{
		tempX=0
	}
	if(tempY<0)
		{
		tempY=0
	}
	tempX=(tempX+helper_div.offsetWidth+50>window.innerWidth)?tempX-helper_div.offsetWidth:tempX;
	tempY=(tempY+helper_div.offsetHeight+50>window.innerHeight)?tempY-helper_div.offsetHeight:tempY;
	tempY+=5;
	tempX+=5;
	helper_title.innerHTML=titletext;
	helper_body.innerHTML=bodytext;
	helper_div.style.top=tempY+'px';
	helper_div.style.left=tempX+'px';

	
	if (lastHelperTimeout != helperTimeout)
	{
	
			
		setAlpha(helper_div,0);
		setAlpha(helper_body,0);
	
		helperTimeout = setTimeout(function(){
			helper_div.style.display='block';
			fadeIn('helper_div',0.5,85);
			
			setTimeout(function(){
				helper_body.style.display = 'block';
				fadeIn('helper_div_body',0.5);
				},1000);
			
			},200);
	}
		
	lastHelperTimeout = helperTimeout;
	
	return true;
}

function hideHelper()
{
	clearTimeout(helperTimeout);
	lastHelperTimeout = 0;

	var helper_div=document.getElementById('helper_div');
	var helper_div_body=document.getElementById('helper_div_body');
	
	setAlpha(helper_div,0);
	setAlpha(helper_div_body,0);
	helper_div.style.display='none';
	
	helper_div_body.style.display='none';
}

function appendTooltip(element,title,text)
{
	if(typeof(element) == 'string')
	{
		element = document.getElementById(element);
	}
	
	if (element)
	{
		element.onmousemove=function(e){showHelper(e,title,text);};
		element.onmouseout=function(){hideHelper()}; 
	}
}

function hideElm(element)
{
	if(typeof(element) == 'string')
	{
		element = document.getElementById(element);
	}
	
	if (element)
	{
		element.style.display = 'none';
	}
}

function toggleDisplay(element,display)
{
	
	if(typeof(element) == 'string')
	{
		element = document.getElementById(element);
	}
	
	if (element.style.display != display)
	{
		element.style.display = display;
	}
	else
	{
		element.style.display = 'none';
	}
}

function activateInTime(element,time)
{
	if(typeof(element) == 'string')
		{
			element = document.getElementById(element);
		}
	
	setTimeout(function() {
	element.disabled = false;
	},time);

}

function insertAtCursor(myField, myValue) 
{

  if (document.selection) {

    myField.focus();

    sel = document.selection.createRange();

    sel.text = myValue;

  }

  else if (myField.selectionStart || myField.selectionStart == '0') {

    var startPos = myField.selectionStart;

    var endPos = myField.selectionEnd;

    myField.value = myField.value.substring(0, startPos)

                  + myValue

                  + myField.value.substring(endPos, myField.value.length);

  } else {

    myField.value += myValue;

  }

}

function doSlide(id){
timeToSlide = 6; // in milliseconds

if (typeof(id) == 'string')
{
	obj = document.getElementById(id);
}
else
{
	obj = id;
}

if(obj.style.display == "none"){ // if it's allready hidden we slide it down
	obj.style.visibility = "hidden";
	obj.style.display = "block";
	height = obj.offsetHeight;
	obj.style.height="0px";
	obj.style.visibility = "visible";
	slideDown(obj,0,height,Math.ceil(height/timeToSlide));
} else {
	slideUp(obj,Math.ceil(obj.offsetHeight/timeToSlide),obj.offsetHeight);
}
}

function slideDown(obj,offset,full,px){
if(offset < full){
	obj.style.height = offset+"px";
	offset=offset+px;
	setTimeout((function(){slideDown(obj,offset,full,px);}),1);
} else {
	obj.style.height = full+"px"; //If the data inside is updated on runtime you can use auto instead...
}
}

function slideUp(obj,px,full){
	if((obj.offsetHeight-px) > 0){
		obj.style.height = obj.offsetHeight-px+"px";
		setTimeout((function(){slideUp(obj,px,full);}),1);
	} else {
		obj.style.height=full+"px"; // we reset the height if we were to slide it back down
		obj.style.display = 'none';
	}
}

function fadeOut(id, time) {
	target = document.getElementById(id);
	alpha = target.style.opacity * 100;
	timer = (time*1000)/50;
	var i = setInterval(
			function() {
				if (alpha <= 0)
					clearInterval(i);
				setAlpha(target, alpha);
				alpha -= 2;
			}, timer);
}

function fadeIn(id, time, maximum) {

	if (!maximum) { maximum = 100;}
	
	target = document.getElementById(id);
	alpha = target.style.opacity * maximum;
	timer = (time*1000)/50;
	var i = setInterval(
			function() {
				if (alpha >= maximum)
					clearInterval(i);
				setAlpha(target, alpha);
				alpha += 2;
			}, timer);
}

function setAlpha(target, alpha) {
	target.style.filter = "alpha(opacity="+ alpha +")";
	target.style.opacity = alpha/100;
}

function DHTMLSound(sound) 
{
	
	if (!sound) { sound = 'alert';}
	
	if (!gebI('nosound') || !gebI('nosound').checked)
	{
		var sounder = '<OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" WIDTH="1" HEIGHT="1">';
		sounder += '<PARAM NAME="movie" VALUE="./files/'+sound+'.swf">';
		sounder += '<PARAM NAME="quality" VALUE="high">';
		sounder += '<PARAM NAME="bgcolor" VALUE="#FFFFFF">';
		sounder += '<EMBED src="./files/'+sound+'.swf" quality="high" bgcolor="#FFFFFF" WIDTH="1" HEIGHT="1" TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer"></EMBED>';
		sounder += '</OBJECT>';

		document.getElementById("sounds").innerHTML= sounder;
	}
}

function mouseX(e)
{
	var gpos = mouseXY(e);
	return gpos[0];
}

function mouseY(e)
{
	var gpos = mouseXY(e);
	return gpos[1];
}

function mouseXY(e)
{
	e = e || window.event;

	var mouseCoords = [
		e.pageX ||
		e.clientX +
			document.body.scrollLeft +
			document.documentElement.scrollLeft,
		e.pageY ||
		e.clientY +
			document.body.scrollTop +
			document.documentElement.scrollTop
	];
	
	return mouseCoords;
}

function colorToHex(color) {
    if (color.substr(0, 1) === '#') {
        return color;
    }
	
	if(color.length < 1)
	{
		return "#FFFFFF";
	}
	
    var digits = /(.*?)rgb\((\d+), (\d+), (\d+)\)/.exec(color);
    
    var red = parseInt(digits[2]);
    var green = parseInt(digits[3]);
    var blue = parseInt(digits[4]);
    
    var rgb = blue | (green << 8) | (red << 16);
    return digits[1] + '#' + zeroFill(rgb.toString(16),6);
}

function zeroFill( number, width )
{
  width -= number.toString().length;
  if ( width > 0 )
  {
    return new Array( width + (/\./.test( number ) ? 2 : 1) ).join( '0' ) + number;
  }
  return number;
}
