/*#################################################################
# Script: Al caricamento della pagina vengono ricercate
# le immagini con classe popUpImg e al click viene
# vsualizzata l' immagine nelle sue dimensioni reali
# in un overlayer con un effetto sulla trasparenza e le dimensioni.	
# -----------------------------------------------------
# Ultima modifica: 27/3/09 11.31
# Autore: U.Alessandro	
# Sito Web: http://greenweb.netsons.org
# Email: alex_guard2000-blog AT yahoo.it	
##################################################################*/

/* funzioni di supporto */
function getPageSize(){
	var xScroll, yScroll;
	if (window.innerHeight && window.scrollMaxY) {	
		xScroll = window.innerWidth + window.scrollMaxX;
		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
		if(document.documentElement.clientWidth){
			windowWidth = document.documentElement.clientWidth; 
		} else {
			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;
	}
	var pageHeight, pageWidth;	
	if(yScroll < windowHeight){
		pageHeight = windowHeight;
	} else { 
		pageHeight = yScroll;
	}
	if(xScroll < windowWidth){	
		pageWidth = xScroll;		
	} else {
		pageWidth = windowWidth;
	}
	var arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight) 
	return arrayPageSize;
}

function getPageScroll(){
	var xScroll, yScroll;
	if (self.pageYOffset) {
		yScroll = self.pageYOffset;
		xScroll = self.pageXOffset;
	} else if (document.documentElement && document.documentElement.scrollTop){	 // Explorer 6 Strict
		yScroll = document.documentElement.scrollTop;
		xScroll = document.documentElement.scrollLeft;
	} else if (document.body) {// all other Explorers
		yScroll = document.body.scrollTop;
		xScroll = document.body.scrollLeft;	
	}
	var arrayPageScroll = new Array(xScroll,yScroll) 
	return arrayPageScroll;
}

function centerElement(objID) {
	var viewport = getPageSize();
	var scrollPage = getPageScroll();
	var elem = document.getElementById(objID);
	var vL = viewport[2];
	var vH = viewport[3];	
	var left = (vL == 0) ? 50 : parseInt((vL - elem.offsetWidth) / 2, 10) + scrollPage[0]; 
	var top = (vH == 0) ? 50 : parseInt((vH - elem.offsetHeight) / 2, 10) + scrollPage[1]; 
	elem.style.left = left+'px';
	elem.style.top =  top+'px';
	viewport, left, top, elem = null;    
}

function getElementsByClass(searchClass,node,tag) {
	var classElements = new Array();
	if ( node == null )
		node = document;
	if ( tag == null )
		tag = '*';
	var els = node.getElementsByTagName(tag);
	var elsLen = els.length;
	var pattern = new RegExp('(^|\\s)'+searchClass+'(\\s|$)');
	for (i = 0, j = 0; i < elsLen; i++) {
		if ( pattern.test(els[i].className) ) {
			classElements[j] = els[i];
			j++;
		}
	}
	return classElements;
}
/* /funzioni di supporto */

function jspopImage(){
	var openT = openL = false;
	var bthumb = 'bigThumb';
	var bigThumb_img = 'bigThumb_img';
	/* vengono ricercati i link con classe popUpImg */
	var popUpImg = 'popUpImg';
	var preloaderN = 'poppreloading';
	var overN = 'overlayer';
	var closelayer = 'closelayer';
	var opacity = 0;
	var t = 0;
	// foto grande dimensioni(bigW,bigH) / overlayer
	var bigW,bigH,over;
	var offsetW = 10;
	var offsetH = 40;
	// misura thumb
	var s = e = 100;
	
	if(document.getElementById(bthumb)==undefined){ 
		if(!document.getElementById || !document.createElement)
				return;
			
		addFile('jspopImage.css','css');
				
		var body = document.getElementsByTagName('body')[0];
		var bimg = document.createElement('div');
		bimg.setAttribute('id','bigThumb');
		body.appendChild(bimg);
		
		// contenitore immagine grande
		var bpicture = document.getElementById(bthumb); 
		bpicture.style.width = 0;
		bpicture.style.height = 0;
		
		bpicture.onclick = function() {
			if(openL == true){
			t = setInterval(function(){restringi()},45); 
			}	
		}

		bpicture.onmouseover = function(){
			this.style.cursor = 'pointer';
		}

		// descrizione immagine
		var desImg = document.createElement('p');
		
		// immagine grande
		var bigImg = document.createElement('img');
		bigImg.setAttribute('id',bigThumb_img);
		
		// closelayer
		var closelayerL = document.createElement(closelayer);
		closelayerL.setAttribute('id',closelayer);
		closelayerL.onclick = function(){
			restringi;
		}
		
		bpicture.appendChild(closelayerL);
		bpicture.appendChild(bigImg);
		bpicture.appendChild(desImg);
		
		// preloader
		var preloader = document.createElement('div');
		preloader.setAttribute('id',preloaderN); 
		body.appendChild(preloader);
		preloader.style.display = 'none';
		
		// overlayer
		var over = document.createElement('div');
		over.setAttribute('id',overN);
		var misure = getPageSize();
		over.style.width = misure[0] + 'px';  
		over.style.height = misure[1] + 'px';
		body.appendChild(over);
		changeOpac(50,overN);
		over.style.display = 'none';
	}
	
	function addFile(file,tipo){
		var head = document.getElementsByTagName('head')[0];
		if(tipo=='css'){
			var link = document.createElement('link');
			link.setAttribute('rel','stylesheet');
			link.setAttribute('href',file);
			link.setAttribute('type','text/css');
			head.appendChild(link);
		}
	}
		
	function Carica(BBimg,w,h,title){ 
		bigImg.setAttribute('src',BBimg);
		var textDesc = document.createTextNode(title);
		desImg.appendChild(textDesc);
		bigW = w + offsetW;
		bigH = h + offsetH;
		t = setInterval(function(){allarga()},45); 
	}

	function Loadimg(BBimg,img,title){
		over.style.display = 'block';
		// preloading
		preloader.style.display = 'block';
		centerElement(preloaderN);
		
		// preload immagine grande
		var Loader = new Image(); 
		Loader.onload = function(){
			var imgW = this.width;
			var imgH = this.height;
			Carica(BBimg,imgW,imgH,title);
			preloader.style.display = 'none'; 
			Loader.onload = null;
			Loader = null;
		}
		Loader.src = BBimg;
	}
	
	function Init(){
		var imgArr = getElementsByClass(popUpImg,null,'img');
		for(var i=0; i<imgArr.length; i++){
			var a,bt,title;
			// link della thumb
			a = imgArr[i].parentNode; 
			// immagine grande
			bt = imgArr[i].parentNode.href; 
			// title
			title = imgArr[i].title;
			
			a.bt = bt;
			a.imag = imgArr[i];	
			a.title = title;
			a.onclick = function(){
				if(openT == false){
					Loadimg(this.bt,this.imag,this.title);
					return(false);
				}	
			}
		}
	}
			
	function allarga(){
		openT = true;
		openL = false;
		opacity+=10;
		changeOpac(opacity,bthumb);
		var wop  = parseInt(bpicture.style.width); 
		var change = bigW-wop;
		var totalw = wop+Math.ceil((change/2)); 
		bpicture.style.width = totalw+'px';
		
		var hop  = parseInt(bpicture.style.height); 
		change = bigH-hop;
		var totalh = hop+Math.ceil((change/2)); 
		bpicture.style.height = totalh+'px';
		if(wop>=bigW && hop>=bigH){
			bpicture.style.width = bigW + 'px';
			bpicture.style.height = bigH + 'px';
			changeOpac(100,bthumb);
			openL = true;
			clearInterval(t);
		}
		centerElement('bigThumb');
	}
	
	function changeOpac(opacity,id) { 
		var obj = document.getElementById(id);
		if(obj!=null){	
		var object =document.getElementById(id).style;
		object.opacity = (opacity / 100); 
		object.MozOpacity = (opacity / 100); 
		object.KhtmlOpacity = (opacity / 100); 
		object.filter = "alpha(opacity=" + opacity + ")";
		}
	}

	function restringi(){
		openL = false; // layer aperto si/no
		opacity-=10;
		changeOpac(opacity,bthumb);
		
		var w  = parseInt(bpicture.style.width); 
		var change1 = s-w; 
		var totalw = w+Math.ceil((change1/2)); 
		bpicture.style.width = totalw+'px';
		
		var h  = parseInt(bpicture.style.height); 
		change2 = e-h;
		var totalh = h+Math.ceil((change2/2)); 
		bpicture.style.height = totalh+'px';
		if(change1>=-1 && change2>=-1){ 
			bpicture.style.width = 0;
			bpicture.style.height = 0;
			changeOpac(0,bthumb);
			desImg.removeChild(desImg.firstChild);
			over.style.display = 'none';
			openT = false;
			clearInterval(t);
		}
		centerElement('bigThumb'); 
	}
	
	return Init();
}

