/* FadeIn is taken as is from. Thanks to the author.
wwww.tigir.com - 06.07.2006
Source: http://www.tigir.com/js/opacity.js
*/
function setElementOpacity(oElem, nOpacity)
{
	var p = getOpacityProperty();
	(setElementOpacity = p=="filter"?new Function('oElem', 'nOpacity', 'nOpacity *= 100;	var oAlpha = oElem.filters["DXImageTransform.Microsoft.alpha"] || oElem.filters.alpha;	if (oAlpha) oAlpha.opacity = nOpacity; else oElem.style.filter += "progid:DXImageTransform.Microsoft.Alpha(opacity="+nOpacity+")";'):p?new Function('oElem', 'nOpacity', 'oElem.style.'+p+' = nOpacity;'):new Function)(oElem, nOpacity);
}

function getOpacityProperty()
{
	var p;
	if (typeof document.body.style.opacity == 'string') p = 'opacity';
	else if (typeof document.body.style.MozOpacity == 'string') p =  'MozOpacity';
	else if (typeof document.body.style.KhtmlOpacity == 'string') p =  'KhtmlOpacity';
	else if (document.body.filters && navigator.appVersion.match(/MSIE ([\d.]+);/)[1]>=5.5) p =  'filter';
	
	return (getOpacityProperty = new Function("return '"+p+"';"))();
}

function fadeOpacity(sElemId, sRuleName, bBackward)
{
	var elem = document.getElementById(sElemId);
	if (!elem || !getOpacityProperty() || !fadeOpacity.aRules[sRuleName]) return;
	
	var rule = fadeOpacity.aRules[sRuleName];
	var nOpacity = rule.nStartOpacity;
	
	if (fadeOpacity.aProc[sElemId]) {clearInterval(fadeOpacity.aProc[sElemId].tId); nOpacity = fadeOpacity.aProc[sElemId].nOpacity;}
	if ((nOpacity==rule.nStartOpacity && bBackward) || (nOpacity==rule.nFinishOpacity && !bBackward)) return;

	fadeOpacity.aProc[sElemId] = {'nOpacity':nOpacity, 'tId':setInterval('fadeOpacity.run("'+sElemId+'")', fadeOpacity.aRules[sRuleName].nDalay), 'sRuleName':sRuleName, 'bBackward':Boolean(bBackward)};
}

fadeOpacity.addRule = function(sRuleName, nStartOpacity, nFinishOpacity, nDalay){fadeOpacity.aRules[sRuleName]={'nStartOpacity':nStartOpacity, 'nFinishOpacity':nFinishOpacity, 'nDalay':(nDalay || 30),'nDSign':(nFinishOpacity-nStartOpacity > 0?1:-1)};};
fadeOpacity.back = function(sElemId){fadeOpacity(sElemId,fadeOpacity.aProc[sElemId].sRuleName,true);};
fadeOpacity.run = function(sElemId)
{
	var proc = fadeOpacity.aProc[sElemId];
	var rule = fadeOpacity.aRules[proc.sRuleName];
	
	proc.nOpacity = Math.round(( proc.nOpacity + .1*rule.nDSign*(proc.bBackward?-1:1) )*10)/10;
	setElementOpacity(document.getElementById(sElemId), proc.nOpacity);
	
	if (proc.nOpacity==rule.nStartOpacity || proc.nOpacity==rule.nFinishOpacity) clearInterval(fadeOpacity.aProc[sElemId].tId);
}
fadeOpacity.aProc = {};
fadeOpacity.aRules = {};

//Determin h/w and scroll features for all browsers
//http://www.softcomplex.com/docs/get_window_size_and_scrollbar_position.html
function f_filterResults(n_win, n_docel, n_body) {
	var n_result = n_win ? n_win : 0;
	if (n_docel && (!n_result || (n_result > n_docel))){
		n_result = n_docel;}
	return n_body && (!n_result || (n_result > n_body)) ? n_body : n_result;
}

function f_clientWidth() {
	return f_filterResults (
		window.innerWidth ? window.innerWidth : 0,
		document.documentElement ? document.documentElement.clientWidth : 0,
		document.body ? document.body.clientWidth : 0
	);
}
function f_clientHeight() {
	return f_filterResults (
		window.innerHeight ? window.innerHeight : 0,
		document.documentElement ? document.documentElement.clientHeight : 0,
		document.body ? document.body.clientHeight : 0
	);
}
function f_scrollLeft() {
	return f_filterResults (
		window.pageXOffset ? window.pageXOffset : 0,
		document.documentElement ? document.documentElement.scrollLeft : 0,
		document.body ? document.body.scrollLeft : 0
	);
}
function f_scrollTop() {
	return f_filterResults (
		window.pageYOffset ? window.pageYOffset : 0,
		document.documentElement ? document.documentElement.scrollTop : 0,
		document.body ? document.body.scrollTop : 0
	);
}
function f_pageHeight() {
	return Math.max(
		(window.innerHeight && window.scrollMaxY) ? window.innerHeight + window.scrollMaxY : 0,
		(document.body.scrollHeight > document.body.offsetHeight) ? document.body.scrollHeight : 0,
		document.body ? document.body.offsetHeight : 0,
		f_clientHeight()
	);
}
function f_pageWidth() {
	return Math.max(
		(window.innerHeight && window.scrollMaxY) ? document.body.scrollWidth : 0,
		(document.body.scrollHeight > document.body.offsetHeight) ? document.body.scrollWidth : 0,
		document.body ? document.body.offsetWidth : 0,
		f_clientWidth()
	);
}
//

//Global const
var GpopupH=615;
var GpopupW=720;
var GprevSimgCSSid;
var GimgGalPath='/img/services/gal/';
var GshadowPageDivCSSid='gal_shadow';
var GgalDivPrefix='gal';
var GgalBigImgPrefix='gbi';
var GgalBigImgPostfix='_b.jpg';
var GgalSmallImgPrefix='gsi';
var GloadingImgPrefix='gli';
//Global vars
var GprevSimgCSSid;
var GactiveGal=1;
var GqstrH = {};

fadeOpacity.addRule('A', 0.3, 1, 30);

function changeGalBimg(galN,srvN,imgN) {
	var bImgCSSid=GgalBigImgPrefix+galN;
	if (!document.getElementById(bImgCSSid)) {galN='1';bImgCSSid=GgalBigImgPrefix+galN;}

	var sImgCSSid=GgalSmallImgPrefix+imgN;
	if (!document.getElementById(sImgCSSid)) {imgN='1';sImgCSSid=GgalSmallImgPrefix+imgN;}

	var lImgCSSid=GloadingImgPrefix+galN;

	var src=GimgGalPath+srvN+'/'+imgN+GgalBigImgPostfix;

    document.getElementById(bImgCSSid).style.visibility='hidden';
    document.getElementById(lImgCSSid).style.display='block';

	var bImg = document.getElementById(bImgCSSid);
    var imgPreload = new Image();

	if (!GprevSimgCSSid) {GprevSimgCSSid=sImgCSSid;}
	if (document.getElementById(bImgCSSid).src!=src) {
		imgPreload.onload=function(){
		  bImg.src = src;
	      document.getElementById(lImgCSSid).style.display='none';
		  document.getElementById(bImgCSSid).style.visibility='visible';  
		};
	    imgPreload.src = src;
	}
	document.getElementById(GprevSimgCSSid).style.border='0';
	document.getElementById(sImgCSSid).style.border='2px solid white';
	GprevSimgCSSid=sImgCSSid;
	
	window.location.hash='a=1'+'&g='+galN+'&s='+srvN+'&i='+imgN;
}

function posGal(galN) {
	var obj=GgalDivPrefix+galN;

	//default offset correction if window size < popup size
	var defOffsetCorr=10;
	var cH=f_clientHeight();
	var cW=f_clientWidth();
	var sT=f_scrollTop();
	var topOffset;
	var leftOffset;

	leftOffset= (cW>GpopupW) ? (cW-GpopupW)/2 : defOffsetCorr;

	//if the diffence is big than add more 40 pix top offset
    if ((cH-GpopupH)>100) {topOffset=sT+(cH-GpopupH)/2-40;}
	else if (cH>GpopupH) {topOffset=sT+(cH-GpopupH)/2;}
    else {topOffset=sT+defOffsetCorr;}

	document.getElementById(obj).style.top=topOffset+'px';
	document.getElementById(obj).style.left=leftOffset+'px';
}

function showHideGal(galN) {
	var obj=GgalDivPrefix+galN;

	if (document.getElementById(obj).style.display=='block') { 
		document.getElementById(obj).style.display='none';
		document.getElementById(GshadowPageDivCSSid).style.display='none';

		window.location.hash='1';

		//html overflow was broke since FF3.3.6 and it seems useless at all
		//document.getElementsByTagName("html")[0].style.overflow='';
		document.getElementsByTagName("body")[0].style.overflow='auto';
		document.getElementById("lay1").style.margin='0 auto';

	    fadeOpacity.back(obj);
	}
	else { 
		if (f_clientHeight()>GpopupH && f_clientWidth()>GpopupW) {

			document.getElementById("lay1").style.margin='0 0 0 '+(f_clientWidth()-1000)/2+'px';
			//html overflow was broke since FF3.3.6 and it seems useless at all
			//document.getElementsByTagName("html")[0].style.overflow='hidden';
			document.getElementsByTagName("body")[0].style.overflow='hidden';
		}

		document.getElementById(GshadowPageDivCSSid).style.height=f_pageHeight()+'px';
		document.getElementById(GshadowPageDivCSSid).style.display='block';

		document.getElementById(obj).style.display='block';

		GactiveGal=galN;

	    fadeOpacity(obj,'A');
	}

}

function actionShowGal(galN,srvN,imgN) {
	var obj=GgalDivPrefix+galN;

	if (document.getElementById(obj)) {
		posGal(galN);
		changeGalBimg(galN,srvN,imgN);
		showHideGal(galN);
	}
}

function parseQstr() {
	var qstr=window.location.hash.replace('#','');
	if (!qstr) {return;}
	var pairs=qstr.split('&');
	if (!pairs[0]) {return;}
	
	for (var i in pairs)  {
	  if (pairs.hasOwnProperty(i)) {
		var kv=pairs[i].split('=');
		var k=kv[0];
		var v=kv[1];
		GqstrH[k]=v;
	  }	
	}
}

function initActions() {
	parseQstr()
	
	//if no actions i.e index.shtml#1
	if (!GqstrH.a) {return;}

	if (GqstrH.a == 1) {
	  actionShowGal(GqstrH.g,GqstrH.s,GqstrH.i);
	} else {return;}
}
