var NS6 = document.getElementById && !document.all;
var IE5 = document.getElementById && document.all;
var IE4 = document.all;

var minOffsetLeft = 10; // Minimum offset for the images centered
var minOffsetTop  = 10;

var curImageWidth  = 0; // Current image dimensions
var curImageHeight = 0;


// Fakes a fized div using the scroll value
//alert ('checking version');
if (IE4 || IE5)
{
	//alert ('Setting an IE scrollbar callback');
	function doOnScroll()
	{
		mediaEl = getElement('mediaDIV');
		
		if (mediaEl.style.visibility == 'visible')
		{
			//debug('Calling absolute element');
			centerAbsoluteElement (mediaEl);
		}
	}
	window.onscroll = doOnScroll;
}

// Return the viewport (screen) offset
function viewportOffsetY ()
{
	if (document.documentElement && document.documentElement.scrollTop)
		scrollY = document.documentElement.scrollTop;
	else if (document.body)
		scrollY = document.body.scrollTop;
	else
		scrollY = window.pageYOffset;
	
	return scrollY;
}
function viewportOffsetX ()
{
	if (document.documentElement && document.documentElement.scrollLeft)
		scrollX = document.documentElement.scrollLeft;
	else if (document.body)
		scrollX = document.body.scrollLeft;
	else
		scrollX = window.pageXOffset;
	
	return scrollX;
}


function showMediaImage(mediaDBId)
{
	//alert("showMediaImage(mediaDBId = "+mediaDBId+")");
	var fullEl = getElement('full');
	
	var mediaOrderNo = swapMediaImage('media', 'mediaDIV', mediaDBId);
	
	// Make the background darker...
	
	fullEl.style.filter  = 'alpha(opacity=35)';
	fullEl.style.opacity = 0.35;
	fullEl.style.MozOpacity = 0.35;
	
	mediaShown = 1;
}


function hideMediaImage()
{
	var mediaCntEl = getElement('mediaDIV');
	var mediaEl    = getElement('media');
	var fullEl     = getElement('full');
	
	// Restore
	mediaCntEl.style.visibility = 'hidden';
	mediaCntEl.style.left = '400px';
	mediaCntEl.style.width = '0px';
	mediaCntEl.style.height = '0px';
	
	mediaEl.style.visibility = 'hidden';
	mediaEl.src = '';
	mediaEl.width = 0;
	mediaEl.height = 0;
	
	fullEl.style.filter  = '';
	fullEl.style.opacity = '';
	fullEl.style.MozOpacity = '';
	
	mediaShown = 0;
}

/**********
 * Swap the IMG with a new one.
 *
 * @param str imageDOMId
 * @param str containerDOMId Image container (optionnal)
 * @param int mediaDBId MediaId of database
 * @return int orderno
 *
 * @author David Lauzon, New Commerce Solutions
 *
 * Note : The variable mediasProperties must be defined in the page where it is used
 **********/
function swapMediaImage(imageDOMId, containerDOMId, mediaDBId)
{
	var imageEl	  = getElement(imageDOMId);
	var imageCont = getElement(containerDOMId);

	var imageProperties = extractMediaProperties(mediaDBId);
	
	var imageSrc	      = imageProperties[0];
	var imageWidth      = imageProperties[1];
	var imageHeight     = imageProperties[2];
	var imageOrderNo    = imageProperties[3];
//	alert ('Changing Image : '+imageSrc+' '+imageWidth+" x "+imageHeight);
	
	curImageWidth  = imageWidth;
	curImageHeight = imageHeight;
	centerElement (imageCont, imageWidth, imageHeight);
	
	imageEl.src	   = imageSrc;
	imageEl.width  = imageWidth;
	imageEl.height = imageHeight;
	
	if (imageCont != null)
	{
		if (IE5 || IE4)
		{
			imageCont.style.position = 'absolute';
			centerAbsoluteElement (imageCont);
		}
		
		//alert ('Setting image container width to '+imageWidth);
		imageCont.style.width  = imageWidth + "px";
		imageCont.style.height = imageHeight + "px";
		imageCont.style.visibility = 'visible';
		//alert('swapMediaImage() height : '+imageCont.style.height);
	}
	imageEl.style.visibility = 'visible';
	
	return imageOrderNo;
}

// Center an fixed element in the document
function centerElement (object, width, height)
{
	var dimensions = getDocumentDimensions();
	var docWidth  = dimensions[0];
	var docHeight = dimensions[1];
	
	var left = (docWidth - width) / 2;
	var top  = (docHeight - height) / 2;
	//debug ('docHeight('+docHeight+') - heigth('+height+') / 2 = '+top);
	
	if (left < minOffsetLeft)
		left = minOffsetLeft;
	
	if (top < minOffsetTop)
		top = minOffsetTop;
	
	//debug ('screen is '+docWidth+' x '+docHeight);
	//debug ('Image : left='+left+', top='+top+', width='+width+', height='+height);
	object.style.left = left;
	object.style.top  = top;
}

// Center an absolute positionned element in the viewport
function centerAbsoluteElement (object)
{
	var dimensions = getDocumentDimensions();
	var docWidth   = dimensions[0];
	var docHeight  = dimensions[1];
	
	var width  = curImageWidth;
	var height = curImageHeight;
 	var left   = (docWidth - width) / 2;
	var top    = (docHeight - height) / 2;
	//debug ('docHeight('+docHeight+') - heigth('+height+') / 2 = '+top);
	
	if (left < minOffsetLeft)
		left = minOffsetLeft;
	
	if (top < minOffsetTop)
		top = minOffsetTop;
	
	top += viewportOffsetY();
	//debug ('screen is '+docWidth+' x '+docHeight);
//	debug ('Image : left='+left+', top='+top+', width='+width+', height='+height);
	object.style.left = left;
	object.style.top  = top;
}



/**********
 * Return media navigation information
 *
 * @param int mediaDBId MediaId of database
 * @return array mediaNav (previousId, nextId, firstId, lastId)
 * @author David Lauzon, New Commerce Solutions
 *
 **********/
function getMediaNav (mediaDBId)
{
	var imageProperties = extractMediaProperties(mediaDBId);
	
	var mediaPrevId  = imageProperties[4];
	var mediaNextId  = imageProperties[5];
	var mediaFirstId = mediasProperties[0][0];
	var mediaLastId  = mediasProperties[mediasProperties.length-1][0];
	
	var mediaNav = Array(mediaPrevId, mediaNextId, mediaFirstId, mediaLastId);
	
	return mediaNav;
}


/**********
 * Extract the media properties
 *
 * @param int mediaDBId MediaId of database
 * @return array properties (src, width, height, orderno, previousid, nextid)
 * @author David Lauzon, New Commerce Solutions
 *
 * Note : The variable mediasProperties must be defined in the page where it is used
 *
 **********/
function extractMediaProperties (mediaDBId)
{
	for (var mediaKey in mediasProperties)
	{
		if (mediasProperties[mediaKey][0] == mediaDBId)
		{
			var mediaSrc     = mediasProperties[mediaKey][1];
			var mediaWidth   = mediasProperties[mediaKey][2];
			var mediaHeight  = mediasProperties[mediaKey][3];
			var mediaOrderNo = mediasProperties[mediaKey][4];
			var mediaPrevId  = -1;
			var mediaNextId  = -1;
			
			var mediaKeyN = parseInt(mediaKey);
			
			if (mediaKeyN > 0)
				mediaPrevId = mediasProperties[mediaKeyN-1][0];
			
			if (mediasProperties.length > (mediaKeyN+1))
				mediaNextId = mediasProperties[(mediaKeyN+1)][0];
			
			
			var oneMediaProperties = Array(mediaSrc, mediaWidth, mediaHeight, mediaOrderNo, mediaPrevId, mediaNextId);
			
			return oneMediaProperties;
		}
	}
}


function getElement(layerID)
{
	if (document.getElementById)
		return document.getElementById(layerID);
	else if (document.all)
	{
		return document.all.layerID;
		//eval('object = document.all.'+layerID+';');
		//return object;
	}
	else
		return null;
}

function getDocumentDimensions() {
		var height;
		var width;
		
    if (document.all)
		{
        height = document.body.offsetHeight;
				width  = document.body.offsetWidth;
		}
    else if (document.layers)
		{
        height = document.body.document.height;
				width  = document.body.document.width;
		}
		else
		{
			height = document.height;
			width  = document.width;
		}
		var dimensions = Array(width,height);
		return dimensions;
}
