/*
         ___                         _____       __
        /  /\        ________       /    /\     / /\
(-----//  /  \//----/_____/__\\--) /____/  \___/_/ //--------------------------)
      /  /   /      \     | //     \    \  /    /\/    this code was created by
     /__/   /        \    |///-----\\____\/____/  \                       sigea
(---\\  \  /   (-----\\___|/        /    /\    \  /       
      \__\/                        /____/ /\____\/            __       sigea.ch
                                   \____\/  \  /             /\_\--------------)
                                         \___\//-------------\/_/  

*/
var imagezoom;
function Imagezoom(){
	var contentID='content';
	var placeholderClass='zoom';
	var zoomElementID='zoomelement';
	var closeSource=path+'_img/buClose.png';
	var timeout,showTimeout,opacity;
	var imageArray,linkArray,closeButton,zoomData;
	var showInterval=4200;
	var windowHeight=0;
	var windowWidth=0;
	var ieFilters=false;
	this.show=function(whichpic,pos){
		setWindowSize();
		linkArray[pos].blur();
		zoomData=new Object()
		zoomData['startWidth']=linkArray[pos].offsetWidth+5;
		zoomData['startHeight']=linkArray[pos].offsetHeight+5;
		zoomData['startTop']=getOffsetY(linkArray[pos])-5;
		zoomData['startLeft']=getOffsetX(linkArray[pos])-5;
		zoomData['finalWidth']=imageArray[pos].width+5;
		zoomData['finalHeight']=imageArray[pos].height+5;
		//alert(zoomData['finalHeight']+'x'+zoomData['finalWidth']);
		var padding=50;
		if(windowHeight>0 && windowWidth>0 && (zoomData['finalWidth']>windowWidth-padding || zoomData['finalHeight']>windowHeight-padding)){
			if(zoomData['finalWidth']>windowWidth-padding){
				zoomData['finalWidth']=windowWidth-padding;
				zoomData['finalHeight']=Math.floor((imageArray[pos].height/imageArray[pos].width)*zoomData['finalWidth']);
			}
			if(zoomData['finalHeight']>windowHeight-padding){
				zoomData['finalHeight']=windowHeight-padding;
				zoomData['finalWidth']=Math.floor((imageArray[pos].width/imageArray[pos].height)*zoomData['finalHeight']);
			}
			zoomData['finalHeight']+=5;
			zoomData['finalWidth']+=5;
			//alert(zoomData['finalHeight']+'x'+zoomData['finalWidth']);
		}
	//	var finalX=Math.max(20,getOffsetX(linkArray[pos])-Math.ceil(parseInt(imageArray[pos].width-linkArray[pos].offsetWidth,10)/2));
		//var finalY=Math.max(20,getOffsetY(linkArray[pos])-Math.ceil(parseInt(imageArray[pos].height-linkArray[pos].offsetHeight,10)/2));
		if(zoomData['finalWidth']+padding>windowWidth){
			zoomData['finalLeft']=15;
		}else{
			zoomData['finalLeft']=Math.max(20,zoomData['startLeft']-Math.ceil((zoomData['finalWidth']-zoomData['startWidth'])/2));
		}
		zoomData['finalTop']=Math.max(20,zoomData['startTop']-Math.ceil((zoomData['finalHeight']-zoomData['startHeight'])/2));
		var scrollPosition=getSrollPosition();
		if(scrollPosition>=0){
			if(zoomData['finalTop']<scrollPosition){
				zoomData['finalTop']=scrollPosition+20;
				zoomData['finalTop']=Math.min(zoomData['startTop'],zoomData['finalTop']);
			}else if((zoomData['finalTop']-scrollPosition+zoomData['finalHeight'])>windowHeight){
				//alert('test');
				zoomData['finalTop']=scrollPosition+windowHeight-zoomData['finalHeight']-20;
				zoomData['finalTop']=Math.max(zoomData['startTop']-(zoomData['finalHeight']-zoomData['startHeight']),zoomData['finalTop']);
			}
		}
		zoomData['pos']=pos;
		if(document.getElementById(zoomElementID)){
			var div=document.getElementById(zoomElementID);
			div.style.width=zoomData['finalWidth']+'px';
			div.style.height=zoomData['finalHeight']+'px';
			div.style.top=zoomData['finalTop']+'px';
			div.style.left=zoomData['finalLeft']+'px';
			div.getElementsByTagName('img')[0].src=imageArray[pos].src;
			div.getElementsByTagName('div')[0].style.width = (zoomData['finalWidth']-5)+ "px";
		}else{
			var img=document.createElement('img');
			img.style.width='100%';
			img.style.height='100%';
			img.src=imageArray[pos].src;
			var div=document.createElement('div');
			addClass(div,'zoombox');
			div.style.width=zoomData['startWidth']+'px';
			div.style.height=zoomData['startHeight']+'px';//linkArray[pos].offsetHeight+'px';
			div.style.top=zoomData['startTop']+'px';
			div.style.left=zoomData['startLeft']+'px';
			div.style.position='absolute';
			div.id=zoomElementID;
			var divC=document.createElement('div');
			addClass(divC,'cwrapper');
			var divT=document.createElement('div');
			addClass(divT,'t');
	//		divT.innerHTML='<!-- -->';
			divC.appendChild(divT);
	//		divC.innerHTML='<div class="t"><!-- --></div>';
			var divContent=document.createElement('div');
			addClass(divContent,'content');
			divContent.appendChild(img);
			divC.appendChild(divContent);
	//		divC.innerHTML+=divContent.outerHTML+'test';
			var divB=document.createElement('div');
			addClass(divB,'b');
			var divBb=document.createElement('div');
			divB.appendChild(divBb);
			div.appendChild(divC);
			div.appendChild(divB);
	//		div.innerHTML=div.innerHTML.replace(/(\r\n)|(\r)|(\n)/g,'');
	//		alert(div.innerHTML);
			document.getElementsByTagName('body')[0].appendChild(div);
	//		alert(finalX+' '+finalY+' '+getOffsetX(linkArray[pos])+' '+Math.ceil(parseInt(imageArray[pos].width,10)));
			imagezoom.zoomElement();
		}
		return true;
	}
	var preloadImages=function(){
		var source;
		imageArray=new Array();
		for ( var i=0; i < linkArray.length; i++){
			source = linkArray[i].getAttribute('href');
			imageArray[i]=new Image();
			imageArray[i].src=source;
			imageArray[i].title=linkArray[i].title;
			imageArray[i].loaded=false;
			imageArray[i].onload=function(){
				this.loaded=true;
			}
		}
		var closeImg=new Image();
		closeImg.src=closeSource;
	}
	var finishZoom=function(element){
		opacity=10;
		closeButton=document.createElement('button');
/*		closeButton.style.width='30px';
		closeButton.style.height='30px';
		closeButton.style.position='absolute';
		closeButton.style.cursor='pointer';
		closeButton.style.top='-10px';
		closeButton.style.left='-15px';*/
		if(ieFilters){
			closeButton.style.filter='progid:DXImageTransform.Microsoft.AlphaImageLoader(src="'+closeSource+'", sizingMethod="crop")';
		}else{
			closeButton.style.backgroundImage='url('+closeSource+')';
		}
		addClass(closeButton,'close');
		closeButton.onclick=function(){
			imagezoom.fadeOut();
			imagezoom.close(this);
		}
		element.appendChild(closeButton);
		element.onclick=function(){
			imagezoom.fadeOut();
			imagezoom.close(this);
		}
		if(ieFilters){
			closeButton.style.filter=closeButton.style.filter.replace(/ alpha\(opacity=(\d+?)\)/i,'');
			closeButton.style.filter+=' alpha(opacity=0)';
		}else{
			closeButton.style.opacity=1-opacity/10;
		}
		imagezoom.fadeIn();
	}
	this.fadeIn=function(){
		var interval=20;
		if(timeout){
			clearTimeout(timeout);
		}
		if(opacity<=0){
			if(ieFilters){
				closeButton.style.filter=closeButton.style.filter.replace(/ alpha\(opacity=(\d+?)\)/i,'');
			}else{
				closeButton.style.opacity=1;
			}
		}else{
			opacity--;
			if(ieFilters){
				closeButton.style.filter=closeButton.style.filter.replace(/ alpha\(opacity=(\d+?)\)/i,'');
				closeButton.style.filter+=' alpha(opacity='+(100-opacity*10)+')';
			}else{
				closeButton.style.opacity=1-opacity/10;
			}
			timeout=setTimeout('imagezoom.fadeIn();',interval);
		}
	}
	this.fadeOut=function(){
		var interval=20;
		if(timeout){
			clearTimeout(timeout);
		}
		if(opacity<=0){
			closeButton.style.display='none';
		}else{
			opacity--;
			if(ieFilters){
				closeButton.style.filter=closeButton.style.filter.replace(/ alpha\(opacity=(\d+?)\)/i,'');
				closeButton.style.filter+=' alpha(opacity='+(opacity*10)+')';
			}else{
				closeButton.style.opacity=opacity/10;
			}
			timeout=setTimeout('imagezoom.fadeOut();',interval);
		}
	}
	var finishClose=function(element){
		document.getElementsByTagName('body')[0].removeChild(document.getElementById('zoomelement'));
		//linkArray[zoomData['pos']].onclick=function(){
		//	return !imagezoom.show(this,this.arg);
		//}
		//linkArray[zoomData['pos']].onkeypress = linkArray[zoomData['pos']].onclick;
	}
	//domscripting by Jeremy Keith (domscripting.com)
	this.zoomElement=function() {
		var element = document.getElementById('zoomelement');
		if(element.zoom){
			clearTimeout(element.zoom);
		}
//		if(!element.style.left) {
//			element.style.left = "0px";
//		}
//		if(!element.style.top) {
//			element.style.top = "0px";
//		}
		var width = parseInt(element.style.width,10);
		var height = parseInt(element.style.height,10);
		var top = parseInt(element.style.top,10);
		var left = parseInt(element.style.left,10);
		if(width >= zoomData['finalWidth'] && height >= zoomData['finalHeight']) {
			finishZoom(element);
			return true;
		}
		if(width < zoomData['finalWidth']) {
			var dist = Math.ceil((zoomData['finalWidth'] - width)/5);
			width = width+dist;
		//	left=left - Math.ceil((dist)/2);
		//	if(left<10){
		//		left=10;
		//	}
		}
		if(left > zoomData['finalLeft']) {
			var dist = Math.ceil((left - zoomData['finalLeft'])/5);
			left = left - dist;
			left=Math.max(zoomData['finalLeft'],left);
			//alert(dist+' asd'+finalX+' '+left);
		}
		if(width > zoomData['finalWidth']) {
			width=zoomData['finalWidth'];
		}
		if(height < zoomData['finalHeight']) {
			var dist = Math.ceil((zoomData['finalHeight'] - height)/5);
			height = height+dist;
			//top=top - Math.ceil((dist)/2);
			//if(top<10){
			//	top=10;
			//}
		}
		if(top > zoomData['finalTop']) {
			var dist = Math.ceil((top - zoomData['finalTop'])/5);
			top = top - dist;
			top=Math.max(zoomData['finalTop'],top);
			//alert(dist+' asd'+finalY+' '+top);
		}
		if(height > zoomData['finalHeight']) {
			height=zoomData['finalHeight'];
		}
		element.style.height = height + "px";
		element.style.width = width + "px";
		element.style.top = top + "px";
		element.style.left = left + "px";
//		element.getElementsByTagName('div')[0].style.height = (height-5)+ "px";
		element.getElementsByTagName('div')[0].style.width = (width-5)+ "px";
		var repeat = 'imagezoom.zoomElement()';
		element.zoom = setTimeout(repeat,20);
		return true;
	}
	this.close=function(){
		var element = document.getElementById('zoomelement');
		if(element.zoom){
			clearTimeout(element.zoom);
		}
		var width = parseInt(element.style.width,10);
		var height = parseInt(element.style.height,10);
		var top = parseInt(element.style.top,10);
		var left = parseInt(element.style.left,10);
		if(width <= zoomData['startWidth'] && height <= zoomData['startHeight']) {
			finishClose(element);
			return true;
		}
		if(width > zoomData['startWidth']) {
			var dist = Math.ceil((width-zoomData['startWidth'])/3);
			width = width-dist;
		}
		if(left < zoomData['startLeft']) {
			var dist = Math.ceil((zoomData['startLeft']-left)/3);
			left = left + dist;
			left=Math.min(zoomData['startLeft'],left);
		}
		if(width < zoomData['startWidth']) {
			width=zoomData['startWidth'];
		}
		if(height > zoomData['startHeight']) {
			var dist = Math.ceil((height-zoomData['startHeight'])/3);
			height = height-dist;
		}
		if(top < zoomData['startTop']) {
			var dist = Math.ceil((zoomData['startTop']-top)/3);
			top = top + dist;
			top=Math.min(zoomData['startTop'],top);
		}
		if(height < zoomData['startHeight']) {
			height=zoomData['startHeight'];
		}
		element.style.height = height + "px";
		element.style.width = width + "px";
		element.style.top = top + "px";
		element.style.left = left + "px";
//		element.getElementsByTagName('div')[0].style.height = (height-5)+ "px";
		element.getElementsByTagName('div')[0].style.width = (width-5)+ "px";
		var repeat = 'imagezoom.close()';
		element.zoom = setTimeout(repeat,5);
		return true;
	}
	var getOffsetY=function(element){
		var offsetY=element.offsetTop;
		while(element.offsetParent){
			element=element.offsetParent
			offsetY+=element.offsetTop;
		}
		return offsetY;
	}
	var getOffsetX=function(element){
		var offsetX=element.offsetLeft;
		while(element.offsetParent){
			element=element.offsetParent
			offsetX+=element.offsetLeft;
		}
		return offsetX;
	}
	this.prepare=function(){
		if (!document.getElementsByTagName) return false;
		if (!document.getElementById) return false;
		if (!document.getElementById(contentID)) return false;
		var content=document.getElementById(contentID);
		var imgCount=0;
		var imgTags=document.getElementById(contentID).getElementsByTagName('img');
		if(imgTags.length>0){
			if(document.getElementsByTagName('img')[0].filters){
				ieFilters=true;
			}else{
				ieFilters=false;
			}
			linkArray=new Array();
			for( var i=0; i < imgTags.length; i++){
				if(imgTags[i].parentNode.nodeName.toLowerCase()=='a' && imgTags[i].parentNode.className==placeholderClass){
					linkArray[imgCount]=imgTags[i].parentNode;
					linkArray[imgCount].arg=imgCount;
					linkArray[imgCount].onclick = function(){
						return !imagezoom.show(this,this.arg);
					}
					linkArray[imgCount].onkeypress = linkArray[imgCount].onclick;
					imgCount++;
				}
			}
		}
		if(imgCount){
			preloadImages();
		}
		return true;
	}
	var setWindowSize=function(){
		if(typeof(window.innerHeight)=='number'){
			windowHeight = window.innerHeight;
			windowWidth = window.innerWidth;
		}else if(document.documentElement && document.documentElement.clientHeight) {
			windowHeight = document.documentElement.clientHeight;
			windowWidth = document.documentElement.clientWidth;
		}else if( document.body && document.body.clientHeight){
			windowHeight = document.body.clientHeight;
			windowWidth = document.body.clientWidth;
		}
	}
	var getSrollPosition=function(){
		var position=-9;
		if(typeof(window.pageYOffset)=='number'){
			position = window.pageYOffset;
		}else if(document.documentElement && document.documentElement.scrollTop) {
			position = document.documentElement.scrollTop;
		}else if( document.body && document.body.clientHeight){
			position = document.body.scrollTop;
		}
		return position;
	}
}
addLoadEvent(function(){
	imagezoom=new Imagezoom();
	imagezoom.prepare();
});
