/**
* @file PortaMx.js
* Common Javascript functions
*
* @author PortaMx - Portal Management Extension
* @author Copyright 2008-2011 by PortaMx - http://portamx.com
* @Version: 1.0 RC4
* @Date: 23.02.2011
*/

/**
* PortaMx Opacity Fader
**/
function PmxOpacFader(aOptions)
{
	this.opt = aOptions;
	this.opt.fadeUptime = this.opt.fadeUptime ? this.opt.fadeUptime : 1500;
	this.opt.fadeDowntime = this.opt.fadeDowntime ? this.opt.fadeDowntime : 1500;
	this.opt.fadeHoldtime = this.opt.fadeHoldtime ? this.opt.fadeHoldtime : 1500;
	this.opt.fadeChangetime = this.opt.fadeChangetime ? this.opt.fadeChangetime : 0;
	this.opt.fadeCursor = this.opt.fadeCursor ? this.opt.fadeCursor : 0;

	// start with calling the Fadeup.
	this.FadeUp(90);
}

PmxOpacFader.prototype.FadeUp = function(start)
{
	this.FadeChangeData();
	this.FadeOpacity(start ? start : 0, 100, this.opt.fadeUptime);
	setTimeout(this.opt.fadeName + '.FadeDown();', this.opt.fadeUptime + this.opt.fadeHoldtime);
}

PmxOpacFader.prototype.FadeDown = function()
{
	this.FadeOpacity(100, 0, this.opt.fadeDowntime);
	setTimeout(this.opt.fadeName + '.FadeUp();', this.opt.fadeDowntime + this.opt.fadeChangetime);
}

PmxOpacFader.prototype.FadeOpacity = function(opacStart, opacEnd, millisec)
{
	//speed for each frame
	var speed = Math.round(millisec / 100);
	var timer = 0;

	if(opacStart > opacEnd)
	{
		for(var iOpac = opacStart; iOpac >= opacEnd; iOpac--)
		{
			setTimeout(this.opt.fadeName + '.FadeChangeOpac(' + iOpac + ');', timer * speed);
			timer++;
		}
	}
	else if(opacStart < opacEnd)
	{
		for(var iOpac = opacStart; iOpac <= opacEnd; iOpac++)
		{
			setTimeout(this.opt.fadeName + '.FadeChangeOpac(' + iOpac + ');', timer * speed);
			timer++;
		}
	}
}

PmxOpacFader.prototype.FadeChangeOpac = function(iOpac)
{
   var elm = document.getElementById(this.opt.fadeContId).style;
   elm.opacity = (iOpac / 100);
   elm.MozOpacity = (iOpac / 100);
   elm.KhtmlOpacity = (iOpac / 100);
   elm.filter = 'Alpha(Opacity=' + iOpac + ')';
   elm.filter = 'progid:DXImageTransform.Microsoft.Alpha(Opacity=' + iOpac + ')';

}

PmxOpacFader.prototype.FadeChangeData = function()
{
	var elm = document.getElementById(this.opt.fadeContId);
	elm.innerHTML = this.opt.fadeData[this.opt.fadeCursor];
	this.opt.fadeCursor++;
	if(this.opt.fadeCursor == this.opt.fadeData.length)
		this.opt.fadeCursor = 0;
}

// Toggle the titles for upshrink boxex
function PmxBlock_Toggle(elm, smfToggle, collapse, expand)
{
	eval(smfToggle + ".toggle()");

	var curtitle = elm.title;
	if(curtitle.indexOf(collapse) != -1)
		elm.title = curtitle.replace(collapse, expand);
	else
		elm.title = curtitle.replace(expand, collapse);
	return false;
}

/**
* Toggle the info boxes
**/
function Info_Toggle(elm)
{
	elm2 = elm + "2";
	elm2State = document.getElementById(elm2).style.display;
	document.getElementById(elm2).style.display = document.getElementById(elm).style.display;
	document.getElementById(elm).style.display = elm2State;
}

/**
* expand / collapse a teased html page
**/
function ShowHTML(pageid)
{
	var shortid = "short_" + pageid;
	var fullid = "full_" + pageid;
	if(document.getElementById(fullid).style.display == "none")
	{
		document.getElementById("href_"+ fullid).href = document.getElementById("href_"+ shortid);
		document.getElementById(fullid).style.display = ""
		document.getElementById(shortid).style.display = "none"
		document.getElementById("href_"+ shortid).href = "javascript:void(0)";
	}
	else
	{
		document.getElementById("href_"+ shortid).href = document.getElementById("href_"+ fullid);
		document.getElementById(shortid).style.display = ""
		document.getElementById(fullid).style.display = "none"
		document.getElementById("href_"+ fullid).href = "javascript:void(0)";
	}
}

/**
* set div's to equal height
**/
function portamx_equalheight()
{
	var modifyRow = [];
	var modifyTypes = [];
	var cName = '';

	var possibleRows = document.getElementsByTagName('div');
	for(var i = 0; i < possibleRows.length; i++)
	{
		if(possibleRows[i].className.indexOf('pmx_equalheight_') == -1)
			continue;

		possibleRows[i].style.minHeight = '0px';
		cName = possibleRows[i].className.replace(/pmx_equalheight_/, '');
		if(!modifyRow[cName])
		{
			modifyTypes[modifyTypes.length] = cName;
			modifyRow[cName] = new Object;
			modifyRow[cName].j = 0;
			modifyRow[cName].jOfs = 0;
			modifyRow[cName].rSplit = 0;
			modifyRow[cName].elm = [];
			modifyRow[cName].height = [];
		}

		modifyRow[cName].elm[modifyRow[cName].j] = possibleRows[i];
		var parent = possibleRows[i];
		while(parent.tagName.toLowerCase() != 'td')
			parent = parent.parentNode;

		if(parent.offsetLeft > 20 && modifyRow[cName].rSplit == 0)
		{
			modifyRow[cName].jOfs = 0;
			modifyRow[cName].rSplit = 1;
		}
		if(!modifyRow[cName].height[modifyRow[cName].jOfs])
			modifyRow[cName].height[modifyRow[cName].jOfs] = 0;

		modifyRow[cName].height[modifyRow[cName].j] = possibleRows[i].offsetHeight > modifyRow[cName].height[modifyRow[cName].jOfs] ? possibleRows[i].offsetHeight : modifyRow[cName].height[modifyRow[cName].jOfs];
		modifyRow[cName].height[modifyRow[cName].jOfs] = modifyRow[cName].height[modifyRow[cName].j];
		modifyRow[cName].j++;
		modifyRow[cName].jOfs++;
	}

	for(var t = 0; t < modifyTypes.length; t++)
	{
		if(modifyRow[modifyTypes[t]])
		{
			for(var i = 0; i < modifyRow[modifyTypes[t]].elm.length; i++)
				modifyRow[modifyTypes[t]].elm[i].style.minHeight = modifyRow[modifyTypes[t]].height[i] +'px';
		}
	}
	modifyRow = null;
}
addLoadEvent(portamx_equalheight);
window.onresize = portamx_equalheight;

/**
* resize images
**/
function ResizeImages(ID, rescale)
{
	var ImgData = eval("MsgImages"+ID);
	var setlen = ImgData.length -1;
	var elements = new Array();
	var elm = 0;
	var failed = 0;

	for(var idx = 0; idx < setlen; idx++)
	{
		for(var i = 0; i < document.getElementsByName(ImgData[idx]).length; i++)
		{
			if(document.getElementsByName(ImgData[idx])[i].src != "")
			{
				if(document.getElementsByName(ImgData[idx])[i].complete)
				{
					elements[elm] = document.getElementsByName(ImgData[idx])[i];
					elm++;
				}
				else
					failed++;
			}
		}
	}

	if(failed == 0)
	{
		window.clearInterval(ImgData[setlen]);
		var imgsrc = "";
		for(var idx = 0; idx < elements.length; idx++)
		{
			if(imgsrc != elements[idx].src)
			{
				imgsrc = elements[idx].src
				var Xsize = elements[idx].width;
				var Ysize = elements[idx].height;
			}
			var fact = ((Xsize > rescale || Ysize > rescale) ? (Xsize > Ysize ? Xsize : Ysize) : rescale);
			elements[idx].width = Math.ceil(Xsize * (rescale / fact));
			elements[idx].height = Math.ceil(Ysize * (rescale / fact));
		}
	}
}

/**
* Get the Popup position (X, Y)
*/
function pmxWindPos(sXname, sYname)
{
	var pWindPos = new Object();
	if(sXname != null)
		pWindPos.x = pmxGetPos(document.getElementById(sXname), 'x');
	if(sYname != null)
		pWindPos.y = pmxGetPos(document.getElementById(sYname), 'y');
	return pWindPos;
}

/**
* Get a elememt position
*/
function pmxGetPos(elem, sPos)
{
	var x = 0, y = 0;

	while((typeof(elem) == 'object') && elem != null  && (typeof(elem.tagName) != 'undefined'))
	{
		y += elem.offsetTop;
		x += elem.offsetLeft;
		if(elem.tagName.toUpperCase() == 'BODY')
			break;

		if(typeof(elem) == 'object')
		{
			if(typeof(elem.offsetParent) == 'object')
				elem = elem.offsetParent;
			else
				break;
		}
	}
	if(sPos == 'x')
		return x;
	else
		return y;
}

/**
* xbarkey events
**/
function xBarKeys(Events)
{
	if(pmx_xBarKeys)
	{
		var xKey = 0;
		if(!Events)
			Events = window.event;
		if(Events.ctrlKey)
		{
			if(Events.which)
				xKey = Events.which;
			else
			{
				if(Events.keyCode)
					xKey = Events.keyCode;
			}
			switch(xKey)
			{
				case 37:
					leftPanel.toggle();
					portamx_equalheight();
					return false;
				case 38:
					topPanel.toggle();
					return false;
				case 39:
					rightPanel.toggle();
					portamx_equalheight();
					return false;
				case 40:
					bottomPanel.toggle();
					return false;
				default:
					return true;
			}
		}
		else if(Events.altKey)
		{
			if(Events.which)
				xKey = Events.which;
			else
			{
				if(Events.keyCode)
					xKey = Events.keyCode;
			}
			switch(xKey)
			{
				case 38:
					headPanel.toggle();
					return false;
				case 40:
					footPanel.toggle();
					return false;
				default:
					return true;
			}
		}
		else
			return true;
	}
	else
		return true;
}
document.onkeydown = xBarKeys;
