/*
	Zoom Image 0.0.1
	Copyright (c) 2008. by Mladen Mijatov, MASSVision
*/

var src_Loading = 'Modules/Zoom/UI/Script/loading.gif';
var src_CloseText = 'Close';
var cnt_Loop = 0;

function zoomImg(pic, w, h, _width, _height, _align, _valign){
	zImage_Show(pic);
}

function zImage_Show(img,url_core) {
	var div_back = document.getElementById('zimage_back');
	var div_holder = document.getElementById('zimage_holder');
	var img_main = document.getElementById('zimage_image');
	var img_loading = document.getElementById('zimage_loading');
	if (url_core) src_Loading = url_core + '/Modules/Zoom/UI/Script/loading.gif';

	// get video player container
	var div_list = document.getElementsByTagName('div');
	var div_video = null;

	if (div_list)
		for (var i=0; i<div_list.length; i++) {
			var div_obj = div_list[i];

			if (div_obj.className == 'video_player') {
				div_video = div_obj;
				break;
			}
		}


	if (div_back == null) {
		// if object is not created
		zImage_Create();
		zImage_Show(img);

	} else {
		// hide video player if it exists
		if (div_video != null)
			div_video.style.display = 'none';

		// change the image and align it properly
		page_scroll = zImage_GetScroll();
		page_size = zImage_GetPageSize();
		div_back.style.height = page_size[1]+'px';
		div_back.style.display = 'block';

		if (img_loading) {
			dim_loading = zImage_GetDim(img_loading);
			img_loading.style.left = (Math.round((page_size[0] - dim_loading[0]) / 2)) + 'px';
			img_loading.style.top = (page_scroll + Math.round((page_size[3] - dim_loading[1]) / 2)) + 'px';
			img_loading.style.display = 'block';
		}

		img_preload = new Image();
		img_preload.onload = function () {
			// show image
			img_main.src = img;
			div_holder.style.display = 'block';

			// align
			dim_image = zImage_GetDim(this);
			zImage_Align(dim_image);

			//hide loading animation
			img_loading.style.display = 'none';
		}

		img_preload.src = img;
	}
}

function zImage_Hide() {
	var div_back = document.getElementById('zimage_back');
	var div_holder = document.getElementById('zimage_holder');

	// get video player container
	var div_list = document.getElementsByTagName('div');
	var div_video = null;

	if (div_list)
		for (var i=0; i<div_list.length; i++) {
			var div_obj = div_list[i];

			if (div_obj.className == 'video_player') {
				div_video = div_obj;
				break;
			}
		}

	if (div_video != null)
		div_video.style.display = 'block';

	// hide holder and image container
	div_holder.style.display = 'none';
	div_back.style.display = 'none';

	// hide select components
	selects = document.getElementsByTagName("select");
	for (i = 0; i != selects.length; i++) {
		selects[i].style.visibility = "visible";
	}
}

// Returns array with page width, height and window width, height
// Core code from - quirksmode.org
// Edit for Firefox by pHaez
function zImage_GetPageSize () {
	var xScroll, yScroll;

	if (window.innerHeight && window.scrollMaxY) {
		xScroll = document.body.scrollWidth;
		yScroll = window.innerHeight + window.scrollMaxY;
	} else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
		xScroll = document.body.scrollWidth;
		yScroll = document.body.scrollHeight;
	} else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
		xScroll = document.body.offsetWidth;
		yScroll = document.body.offsetHeight;
	}

	var windowWidth, windowHeight;
	if (self.innerHeight) { // all except Explorer
		windowWidth = self.innerWidth;
		windowHeight = self.innerHeight;
	} else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
		windowWidth = document.documentElement.clientWidth;
		windowHeight = document.documentElement.clientHeight;
	} else if (document.body) { // other Explorers
		windowWidth = document.body.clientWidth;
		windowHeight = document.body.clientHeight;
	}

	// for small pages with total height less then height of the viewport
	if(yScroll < windowHeight){
		pageHeight = windowHeight;
	}else{
		pageHeight = yScroll;
		}

	// for small pages with total width less then width of the viewport
	if(xScroll < windowWidth){
		pageWidth = windowWidth;
	} else {
		pageWidth = xScroll;
	}

	return [pageWidth,pageHeight,windowWidth,windowHeight];
	}

// Returns array with x,y page scroll values.
// Core code from - quirksmode.org
function zImage_GetScroll () {
	var yScroll;

	if (self.pageYOffset) {
		yScroll = self.pageYOffset;
	} else if (document.documentElement && document.documentElement.scrollTop){	 // Explorer 6 Strict
		yScroll = document.documentElement.scrollTop;
	} else if (document.body) {// all other Explorers
		yScroll = document.body.scrollTop;
	}

	return yScroll;
}

function zImage_GetDim(obj) {
	if (obj.clientWidth)
		return [obj.clientWidth, obj.clientHeight]; else
		return [obj.width, obj.height];
}

function zImage_GetPos(obj) {
	var curX = 0;
	var curY = 0;

	// find position using offsetParent
	// NOTE: IE skips objects with positon: relative
	if (obj.offsetParent) {
		do {
			curX += obj.offsetLeft;
			curY += obj.offsetTop;
		} while (obj = obj.offsetParent);
	}

	return [curX, curY];
}

function zImage_SetBackOpacity(obj_opacity) {
	var div_back = document.getElementById('zimage_back');

	// change opacity of the object
	with(div_back.style) {
		opacity = (obj_opacity / 100);
		MozOpacity = (obj_opacity / 100);
		KhtmlOpacity = (obj_opacity / 100);
		filter = "alpha(opacity=" + obj_opacity + ")";
	}
}

function zImage_Create() {
	// create elements
	var div_back = document.createElement('div');
	var div_holder = document.createElement('div');
	var div_toolbar = document.createElement('div');
	var btn_close = document.createElement('span');
	var img_main = document.createElement('img');
	var img_loading = document.createElement('img');

	// set back element properties
	div_back.setAttribute('id', 'zimage_back')
	with (div_back.style) {
		display = 'none';
		position = 'absolute';
		left = '0px';
		top = '0px';
		width = '100%';
		height = '100%';
		backgroundColor = 'rgb(50, 50, 50)';
		zIndex = '100000';
	}
	document.body.appendChild(div_back);
	zImage_SetBackOpacity(50);

	// set holder element properties
	div_holder.setAttribute('id', 'zimage_holder')
	with (div_holder.style) {
		display = 'none';
		position = 'absolute';
		left = '50%';
		top = '50%';
		backgroundColor = '#FFFFFF';
		padding = "5px";
		border = "1px solid rgb(0,0,0)";
		zIndex = '100001';
	}
	document.body.appendChild(div_holder);

	// set image properties
	img_main.setAttribute('id', 'zimage_image');
	img_main.onclick= function(){zImage_Hide()};
	img_main.style.cursor = 'pointer';
	div_holder.appendChild(img_main);

	// set image properties
	img_loading.setAttribute('id', 'zimage_loading');
	with (img_loading.style) {
		position = 'absolute';
		left = '50%';
		top = '50%';
		zIndex = '100002';
		display = 'none';
	}
	img_loading.src = src_Loading;
	document.body.appendChild(img_loading);

	// set toolbar options
	div_toolbar.setAttribute('id', 'zimage_toolbar')
	with (div_toolbar.style) {
		height = '10px';
		width = '100%';
		marginTop = '5px';
		position = 'relative';
	}
	div_holder.appendChild(div_toolbar);

	// set close button properties
	btn_close.innerHTML = src_CloseText;
	with (btn_close.style) {
		display = 'block';
		width = '40px';
		height = '10px';
		color = 'rgb(0,0,0)';
		fontFamily = 'Verdana, Tahoma, Arial';
		fontSize = '10px';
		fontWeight = 'bold';
		cursor = 'pointer';
		position = 'absolute';
		right = '0px';
		textAlign = 'center';
		padding = '0px 0px 3px 0px';
	}
	btn_close.onclick = function() { zImage_Hide() };
	div_toolbar.appendChild(btn_close);
}

function zImage_GetRatio(dim_back, dim_image) {
	cnt_Loop++;

	// default ratio, no resize
	ratio = 1;
	ratioW = 1;
	ratioH = 1;

	if (dim_image[0] > dim_back[0] - 30)
		ratioW = (dim_back[0] - 30) / dim_image[0];
	if (dim_image[1] > dim_back[1] + 45)
		ratioH = (dim_back[1] - 45) / dim_image[1];

	ratio = (ratioW < ratioH)? ratioW : ratioH;

	// if calculated ratio needs to be recalculated
	if ((Math.round(dim_image[0] * ratio) > (dim_back[0]-30)) || (Math.round(dim_image[1] * ratio) > (dim_back[1]-45))) {
		dim_image = [ Math.round(dim_image[0] * ratio), Math.round(dim_image[1] * ratio) ];
		if (cnt_Loop < 3) ratio = zImage_GetRatio(dim_back, dim_image);
	}

	return ratio;
}

function zImage_Align(dim_image) {
	// find the right objects
	var div_back = document.getElementById('zimage_back');
	var div_holder = document.getElementById('zimage_holder');
	var img_main = document.getElementById('zimage_image');
	var div_toolbar = document.getElementById('zimage_toolbar');
	var page_size = zImage_GetPageSize();
	var page_scroll = zImage_GetScroll();

	// get their dimensions
	dim_back = zImage_GetDim(div_back);
	dim_holder = zImage_GetDim(div_holder);

	// discover wheter image needs to be resized and calculate ratio
	cnt_Loop = 0;
	ratio = zImage_GetRatio([page_size[0], page_size[3]], dim_image);

	// resize image
	dim_image = [Math.round(dim_image[0] * ratio), Math.round(dim_image[1] * ratio)];
	img_main.style.width = dim_image[0] + 'px';
	img_main.style.height = dim_image[1] + 'px';

	// position and resize center element
	div_holder.style.left = (Math.round((page_size[0] - dim_image[0]) / 2)) + 'px';
	div_holder.style.top = (page_scroll + Math.round((page_size[3] - dim_image[1]) / 2) - 15) + 'px';
	div_toolbar.style.width = div_holder.style.width = (dim_image[0]) + 'px';
	div_holder.style.height = (dim_image[1] + 15) + 'px';
}

