/**
* \file PortaMx.js
* Common Javascript functions
*
* \author PortaMx - Portal Management Extension
* \author Copyright 2008-2011 by PortaMx - http://portamx.com
* \version 1.0
* \date 12.06.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;
}

// Print the block content
function PmxPrintPage(pdir, cid, cttl)
{
	var pmxprint = window.open(window.location.href, 'printer', '');
	pmxprint.document.open();
	pmxprint.document.write('<html><head><title>Print of "'+ cttl +'"</title>');
	pmxprint.document.write('<link rel="stylesheet" type="text/css" href="'+ smf_default_theme_url +'/PortaMx/SysCss/portamx_print.css" /></head>');
	pmxprint.document.write('<body class="pmx_printbody" style="direction:'+ pdir +';">'+ document.getElementById('print'+ cid).innerHTML +'</body></html>');
	pmxprint.document.close();
}

// Get a cookie
function pmx_getCookie(sFind)
{
	var cookies = document.cookie.split(';');
	var cook;
	var result = '';
	for(var i = 0; i < cookies.length; i++)
	{
		cook = cookies[i].split('=');
		if(cook[0].replace(/ /g, '') == sFind && cook[1] != '' && cook[1] != 0)
			result = cook[1];
	}
	return result;
}

// Submit a static block
function pmx_StaticBlockSub(id, elm, pValue, uid)
{
	if(pValue == 'pg')
	{
		pValue = pmx_getCookie('pmxLSBsub'+ id);
		var sUrl = decodeURI(elm.href).match(/(pg[\[a-zA-Z0-9\-\]]+).([0-9]+)/);
		pValue = (pValue == '' ? '' : pValue +'&') + sUrl[1] +'->'+ sUrl[2];
		document.cookie = 'pmxLSBsub'+ id +'='+ pValue +';path='+ pmx_cookie_path;
	}
	else
		document.cookie = 'pmxLSBsub'+ id +'='+ pValue.replace(/=/g, '->').replace(/;/g, '&') +';path='+ pmx_cookie_path;

	pmxWinGetTop(uid);
	elm.href = 'javascript:void(0)';
	document.getElementById('pmx_static'+ id +'_data').value = pValue.replace(/->/g, '=').replace(/\&/g, ';');
	document.getElementById('pmx_static'+ id +'_form').submit();
}

// 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)";
	}
}

// expand / collapse a message attaches
function ShowMsgAtt(elm, sID)
{
	var atthref = elm.href;
	elm.href = 'javascript:void(0)';
	elm.style.display = 'none';
	var cstat = document.getElementById(sID).style.display;
	do
		elm = (cstat == 'none' ? elm.nextSibling : elm.previousSibling);
	while(elm.tagName != 'a' && elm.tagName != 'A');
	elm.href = atthref;
	elm.style.display = '';
	document.getElementById(sID).style.display = (cstat == 'none' ? '' : 'none');
	portamx_EqualHeight();
}

// Get window top postion
function pmxWinGetTop(uid)
{
	var ypos = 0;
	if(window.pageYOffset)
		ypos = window.pageYOffset;
	else if(document.body.scrollTop)
		ypos = document.body.scrollTop;
	else if(document.documentElement.scrollTop)
		ypos = document.documentElement.scrollTop;
	if(uid)
		document.cookie = 'pmxPYO'+ uid +'='+ ypos +';path='+ pmx_cookie_path;
}

// Pmx onLoad fuction
function portamx_onload()
{
	if(pmx_restore_top && (is_chrome || is_safari || is_ie || is_opera) && pmx_RestoreScrollTop())
		document.getElementsByTagName('body')[0].style.visibility = 'hidden';
	portamx_imgResize();
}

var pmxImgFailed = [];
function portamx_imgResize()
{
	var j = 0;
	var possibleRows = pmxImgFailed.length == 0 ? document.getElementsByTagName('img') : possibleRows = pmxImgFailed;
	pmxImgFailed = [];

	for(var i = 0; i < possibleRows.length; i++)
	{
		if(!possibleRows[i].complete)
			pmxImgFailed[j++] = possibleRows[i];
	}

	if(pmxImgFailed.length > 0)
		window.setTimeout('portamx_imgResize()', 100);
	else
	{
		var Xsize, Ysize, fact;
		for(var i = 0; i < pmx_rescale_images.length; i++)
		{
			possibleRows = document.getElementsByName(pmx_rescale_images[i].name);
			for(var j = 0; j < possibleRows.length; j++)
			{
				Xsize = possibleRows[j].width;
				Ysize = possibleRows[j].height;
				fact = ((Xsize > pmx_rescale_images[i].scale || Ysize > pmx_rescale_images[i].scale) ? (Xsize > Ysize ? Xsize : Ysize) : pmx_rescale_images[i].scale);
				possibleRows[j].width = Math.ceil(Xsize * (pmx_rescale_images[i].scale / fact));
				possibleRows[j].height = Math.ceil(Ysize * (pmx_rescale_images[i].scale / fact));
			}
		}
		portamx_EqualHeight(true);
	}
}

// set div's to equal height
function portamx_EqualHeight(isInit)
{
	var modifyRow = [];
	var modifyTypes = [];
	var cName = '';
	var j = 0;
	var parent;
	var possibleRows;

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

		possibleRows[i].style.minHeight = '0';
		possibleRows[i].style.height = null;
		cName = possibleRows[i].className.replace(/pmxEQH/, '');
		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[modifyTypes[t]].elm[i].style.height = modifyRow[modifyTypes[t]].height[i] +'px';
			}
		}
	}
	modifyRow = null;

	if(isInit)
	{
		document.getElementsByTagName('body')[0].style.visibility = 'visible';
		pmx_RestoreScrollTop(true);
	}
}
window.onresize = portamx_EqualHeight;

// Restore window top postion
function pmx_RestoreScrollTop(doClean)
{
	var result = false;
	var cookies = document.cookie.split(';');
	for(var i = 0; i < cookies.length; i++)
	{
		var cook = cookies[i].split('=');
		var cookname = cook[0].match(/pmxPYO[a-zA-Z0-9\-]+/);
		if(cookname && cook[1] != '' && cook[1] != 0 && !isNaN(cook[1]))
		{
			if(doClean)
			{
				document.cookie = cookname +'=0;path='+ pmx_cookie_path;
				if(pmx_restore_top)
					window.scrollTo(0, cook[1]);
			}
			result = true;
			break;
		}
	}
	return result;
}

// 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;
/* eof */
