function blurSlider(){

	//PARAMETRI

	//grandezza del passo in ingresso (centesimi)
	var stepIn= 5;
	//grandezza del passo in uscita (centesimi)
	var stepOut= 10;
	//tempo per passo in ingresso (ms)
	var timeIn= 50;
	//tempo per passo in uscita (ms)
	var timeOut= 50;
	//tempo che attende prima di rientrare (ms)
	var waitOut= 0;
	//tempo che attende prima di uscire (ms)
	var waitIn= 2000;
	//tipo di fade: 1- transizione su bianco 2- transizione sovrapposta
	var fadeKind= 1;

	//init
	var sliderName= "slider";
	
	var sliderUl= document.getElementById(sliderName);
	if(sliderUl === null)
		return null;
	
	var firstImageReference= null;
	var imageArray= new Array();	
	var imageNumber= initArray();
	if(imageNumber == -1)
		return null;
	
	//create slider numbers
	createNumbers();
	
	createPN();
	var curImg= 0;
	var nxtImg= (curImg+1)%imageNumber;
	var curToIn= null;
	var curToOut= null;
	var curOIn= 100;
	var curOOut= 0;
	var fading= true;
	var pressed= false;

	function pressLink(nxt){
		nxtImg= nxt%imageNumber;
		if(!fading || fadeKind==1){
			pressLink2(nxt);
		}
		else
			setTimeout(function(next){return function() {fadeOut(next);};}(nxt), 10);
	}
	function pressLink2(nxt){
		if(pressed != true){
			clearTimeout(curToIn);
			clearTimeout(curToOut);
			if(fadeKind == 2)
				fadeIn(curOOut);
			fadeOut(curOIn);
		}
		pressed= true;
	}
	function fadeIn(opacity){
		if(opacity != 100){
			fading= true;
			opacity+= stepIn;
			if(opacity >100)
				opacity= 100;
			if(fadeKind == 1)
				setOpacity(firstImageReference, opacity/100);
			if(fadeKind == 2)
				setOpacity(imageArray[nxtImg]["ref"], opacity/100);
			curOIn= opacity;	
			curToIn= setTimeout(function(){return fadeIn(opacity);}, timeIn);
		}
		else{
			fade= null;
			curOIn= 100;
			fading=false;
			curToIn= setTimeout(function(){return fadeOut(100);}, waitIn);
		}
	}
	function fadeOut(opacity){
		if(opacity != 0){
			fading= true;
			opacity-= stepOut;
			if(opacity <0)
				opacity= 0;
			if(fadeKind == 1)
				setOpacity(firstImageReference, opacity/100);
			if(fadeKind == 2)
				setOpacity(imageArray[curImg]["ref"], opacity/100);
			curOOut= opacity;
			curToOut= window.setTimeout(function(){return fadeOut(opacity);}, timeOut);
		}
		else{
			pressed= false;
			fading= false;
			fade= null;
			tmp= curImg;
			curImg= nxtImg% imageNumber;
			nxtImg= (curImg+1)%imageNumber;
			imageArray[tmp]["linkRef"].className="";
			imageArray[curImg]["linkRef"].className="current";
			if(fadeKind == 1)
				firstImageReference.src= imageArray[curImg]["src"];
			curOOut=0;
			curToOut= setTimeout(function(){return fadeIn(0);}, waitOut);
		}
	}

	function setOpacity(element, level) {
  		element.style.opacity = level;
  		element.style.MozOpacity = level;
  		element.style.KhtmlOpacity = level;
  		element.style.filter = "alpha(opacity=" + (level * 100) + ");";
	}
	
	/*
	 * 	creates slider numbers
	 */
	function createNumbers(){
		//<ul> creation
		var nodeUl=	document.createElement('UL');
		nodeUl.setAttribute('id', "numeri");
		
		//<li> creation
		for(var i=1; i<=imageNumber; i++){
			var nodeLi= document.createElement('LI');
			//setting id
			nodeLi.setAttribute('id', "sldr_"+i);
			//setting link
			var nodeAnchor= document.createElement('A');
			nodeAnchor.setAttribute('href', '#');
			nodeAnchor.setAttribute('title', imageArray[i-1]["alt"]);
			nodeLi.appendChild(nodeAnchor);
			//setting number
			nodeAnchor.innerHTML= i;
			//sets the reference in imageArray
			imageArray[i-1]["linkRef"]= nodeAnchor;
			nodeUl.appendChild(nodeLi);
			//sets current style if first image
			if(i==1)
				nodeAnchor.className="current";
			//crea evento onclick
			//moz
			if(nodeAnchor.addEventListener){
				nodeAnchor.addEventListener('click', function(n){ return function(){ onclick(arguments[0] || event, n);  }; }(i),false);
			}
			//ie
			else if(nodeAnchor.attachEvent)
				nodeAnchor.attachEvent('onclick',function(n){ return function(){  onclick(arguments[0] || event, n); }; }(i));

			function onclick(event, n){
				pressLink(n-1); 
				return preventdefaultAction(event);
			}
		}
			
		//insert in hierarchy
		sliderUl.parentNode.insertBefore(nodeUl, sliderUl.nextSibling);
		//set style proprieties
		var width= (imageNumber*15)+(imageNumber-1)*5;
		nodeUl.style.width=width + "px";
		nodeUl.style.marginLeft= -(width/2)+ "px";
		nodeUl.style.left=  "50%";
	}

	function createPN(){
		if(imageNumber<=1)
			return;
		//create necessary nodes
		var pnodeUl=	document.createElement('UL');
		var pnPLi= document.createElement('LI');
		var pnNLi= document.createElement('LI');
		var pnPA= document.createElement('A');
		var pnNA= document.createElement('A');
		//init node Attributes
		pnodeUl.setAttribute('id', 'prvnxt');
		pnPLi.setAttribute('id', 'sldr_prv');
		pnNLi.setAttribute('id', 'sldr_nxt');
		pnNA.setAttribute('href', '#');
		pnPA.setAttribute('href', '#');
		pnNA.setAttribute('title', 'successivo');
		pnPA.setAttribute('title', 'precedente');
		pnPA.innerHTML="precedente";
		pnNA.innerHTML="successivo";
		//appending nodes
		pnodeUl.appendChild(pnPLi);
		pnodeUl.appendChild(pnNLi);
		pnPLi.appendChild(pnPA);
		pnNLi.appendChild(pnNA);

		//crea evento onclick prev
			//moz
			if(pnPA.addEventListener){
				pnPA.addEventListener('click', prev, false);
			}
			//ie
			else if(pnPA.attachEvent)
				pnPA.attachEvent('onclick', prev);

		//crea evento onclick nxt
			//moz
			if(pnNA.addEventListener){
				pnNA.addEventListener('click', next, false);
			}
			//ie
			else if(pnNA.attachEvent)
				pnNA.attachEvent('onclick', next);
		function prev(evt){
			prev= (curImg != 0) ? (curImg-1)%imageNumber : imageNumber-1;
			pressLink(prev); 
			return preventdefaultAction(evt);
		}
		function next(evt){
			pressLink((curImg+1)%imageNumber);
			return preventdefaultAction(evt);
		}
		sliderUl.parentNode.insertBefore(pnodeUl, sliderUl.nextSibling);
			
	}

	function initArray(){

		if(fadeKind == 2){
			sliderUl.style.position= "relative";
			sliderUl.style.width= "620px";
			sliderUl.style.height= "413px";
		}
		
		//check for children
		if(sliderUl.hasChildNodes()){
			//count <li> children
			var count= 0;
			var cur= sliderUl.firstChild;
			while(cur != null){
				if(cur.nodeName== "LI"){
					//create array with image proprieties
					imageArray[count]= new Array();
					//finds the image in the LI
					if(cur.hasChildNodes()){
						tmp= cur.firstChild;
						while(tmp != null){
							if(tmp.nodeName== "IMG"){
								var proprieties= new Array("src", "alt");
								//sets image proprieties in array
								for(var i in proprieties){
									imageArray[count][proprieties[i]]= tmp.getAttribute(proprieties[i]);
								}
								imageArray[count]["ref"]= tmp;
								break;
							}
							tmp= tmp.nextSibling;
						}
					}
					else return -1;
					if(count==0)
						firstImageReference= tmp;
					count++;
				}
				tmp= cur.nextSibling;
				//remove all the images but the first one
				if(fadeKind == 1 && count != 1)
					cur.parentNode.removeChild(cur);
				else if(fadeKind == 2 && cur.nodeName == "LI"){
					cur.style.position= "absolute";
					cur.style.top= "25px";
					cur.style.left= "0px";
		
					if(count > 1)
						setOpacity(imageArray[count-1]["ref"], 0);
				}
				cur= tmp;	
			}
			return count;
		}
		else
			return 0;
	}
	curToOut= setTimeout(function(){return fadeOut(100);}, 10000);

	if(fadeKind == 2)
		curToIn= setTimeout(function(){return fadeIn(0);}, 10000);
	//function for preventing default
	function preventdefaultAction(evt) {
		if (evt) {
			if (typeof evt.preventDefault!= 'undefined') {
				evt.preventDefault(); // W3C
			} else {
				evt.returnValue = false; // IE
			}
		}
	// safey for handling DOM Level 0
		return false;
	} 
}

/*
 * add load event for slider
 */
if(window.addEventListener){
	window.addEventListener("load", function(){
		x= new blurSlider();
	}, false);
}
if(window.attachEvent){
	window.attachEvent("onload", function(){
   		x= new blurSlider();
	});
}
