var Core = {};

// W3C DOM 2 Events model
if (document.addEventListener)
{
  Core.addEventListener = function(target, type, listener)
  {
	//alert('1');
    target.addEventListener(type, listener, false);
  };

  Core.removeEventListener = function(target, type, listener)
  {
    target.removeEventListener(type, listener, false);
  };

  Core.preventDefault = function(event)
  {
    event.preventDefault();
  };

  Core.stopPropagation = function(event)
  {
    event.stopPropagation();
  };
}
else if (document.attachEvent)
{
  Core.addEventListener = function(target, type, listener)
  {

    if (Core._findListener(target, type, listener) != -1) return;

    var listener2 = function()
    {
      var event = window.event;

      if (Function.prototype.call)
      {
        listener.call(target, event);
      }
      else
      {
        target._currentListener = listener;
        target._currentListener(event)
        target._currentListener = null;
      }
    };

    target.attachEvent("on" + type, listener2);
    var listenerRecord =
    {
      target: target,
      type: type,
      listener: listener,
      listener2: listener2
    };

    var targetDocument = target.document || target;
    var targetWindow = targetDocument.parentWindow;
    var listenerId = "l" + Core._listenerCounter++;

    if (!targetWindow._allListeners) targetWindow._allListeners = {};
    targetWindow._allListeners[listenerId] = listenerRecord;
    if (!target._listeners) target._listeners = [];
    target._listeners[target._listeners.length] = listenerId;
    if (!targetWindow._unloadListenerAdded)
    {
      targetWindow._unloadListenerAdded = true;
      targetWindow.attachEvent("onunload", Core._removeAllListeners);
    }
  };

  Core.removeEventListener = function(target, type, listener)
  {
    // find out if the listener was actually added to target
    var listenerIndex = Core._findListener(target, type, listener);
    if (listenerIndex == -1) return;

    // get a reference to the window object containing target
    var targetDocument = target.document || target;
    var targetWindow = targetDocument.parentWindow;

    // obtain the record of the listener from the window object
    var listenerId = target._listeners[listenerIndex];
    var listenerRecord = targetWindow._allListeners[listenerId];

    // remove the listener, and remove its ID from target
    target.detachEvent("on" + type, listenerRecord.listener2);
    target._listeners.splice(listenerIndex, 1);

    // remove the record of the listener from the window object
    delete targetWindow._allListeners[listenerId];
  };

  Core.preventDefault = function(event)
  {
    event.returnValue = false;
  };

  Core.stopPropagation = function(event)
  {
    event.cancelBubble = true;
  };

  Core._findListener = function(target, type, listener)
  {
    // get the array of listener IDs added to target
    var listeners = target._listeners;
    if (!listeners) return -1;

    // get a reference to the window object containing target
    var targetDocument = target.document || target;
    var targetWindow = targetDocument.parentWindow;

    // searching backward (to speed up onunload processing), find the listener
    for (var i = listeners.length - 1; i >= 0; i--)
    {
      // get the listener's ID from target
      var listenerId = listeners[i];

      // get the record of the listener from the window object
      var listenerRecord = targetWindow._allListeners[listenerId];

      // compare type and listener with the retrieved record
      if (listenerRecord.type == type && listenerRecord.listener == listener)
      {
        return i;
      }
    }
    return -1;
  };

  Core._removeAllListeners = function()
  {
    var targetWindow = this;

    for (id in targetWindow._allListeners)
    {
      var listenerRecord = targetWindow._allListeners[id];
      listenerRecord.target.detachEvent(
          "on" + listenerRecord.type, listenerRecord.listener2);
      delete targetWindow._allListeners[id];
    }
  };

  Core._listenerCounter = 0;
}

Core.addClass = function(target, theClass)
{
  if (!Core.hasClass(target, theClass))
  {
    if (target.className == "")
    {
      target.className = theClass;
    }
    else
    {
      target.className += " " + theClass;
    }
  }
};

Core.getElementsByClass = function(theClass)
{
  var elementArray = [];

  if (document.all)
  {
    elementArray = document.all;
  }
  else
  {
    elementArray = document.getElementsByTagName("*");
  }

  var matchedArray = [];
  var pattern = new RegExp("(^| )" + theClass + "( |$)");

  for (var i = 0; i < elementArray.length; i++)
  {
    if (pattern.test(elementArray[i].className))
    {
      matchedArray[matchedArray.length] = elementArray[i];
    }
  }

  return matchedArray;
};

Core.hasClass = function(target, theClass)
{
  var pattern = new RegExp("(^| )" + theClass + "( |$)");

  if (pattern.test(target.className))
  {
    return true;
  }

  return false;
};

Core.removeClass = function(target, theClass)
{
  var pattern = new RegExp("(^| )" + theClass + "( |$)");

  target.className = target.className.replace(pattern, "$1");
  target.className = target.className.replace(/ $/, "");
};

Core.getComputedStyle = function(element, styleProperty)
{
  var computedStyle = null;

  if (typeof element.currentStyle != "undefined")
  {
    computedStyle = element.currentStyle;
  }
  else
  {
    computedStyle = document.defaultView.getComputedStyle(element, null);
  }

  return computedStyle[styleProperty];
};

Core.start = function(runnable)
{
  Core.addEventListener(window, "load", runnable.init);
};



var imgFade =
{
	init: function (){
		imgFade.frameRate = 30;
		var imgFadeGroup = Core.getElementsByClass("imgFade");
		var lunghezza = imgFadeGroup.length;
		for(var i =0;i<imgFadeGroup.length; i++)
		{
			var div = imgFadeGroup[i];
			var timer = setTimeout(function()
				{
					imgFade.hide(div);
	 			}, 4000);
		}
	},
	hide : function (div)
	{
		var imgGroup = div.getElementsByTagName("img");

		var lunghezza = imgGroup.length;
		for(var t =0;t<imgGroup.length; t++)
		{
			if (imgGroup[t].style.display == ""){
				imgFade.hideAnimato(imgGroup[t],100,t);
				return;
			}
		}
	},
	hideAnimato : function (img,valore,posizione)
	{	
		valore=valore-5;
		img.style.mozOpacity = valore/100;
	   	img.style.filter = 'alpha(opacity=' + valore + ')';
		img.style.opacity = valore/100;
		if(valore<=0){
			imgFade.show(img,posizione);
			return;
		}
		var timer = setTimeout(function()
			{
				imgFade.hideAnimato(img,valore,posizione);
 			}, 1000/imgFade.frameRate);
	},
	show: function(img,posizione){
		var imgGroup = img.parentNode.getElementsByTagName("img");
		
		if(imgGroup.length == posizione+1){
			img.style.display="none";
			imgGroup[0].style.filter="alpha(opacity=0)";
			imgGroup[0].style.mozOpacity="0";
			imgGroup[0].style.opacity="0";
			imgGroup[0].style.display="";
			imgFade.showAnimato(imgGroup[0],0)
			return;
		}
		else{
			imgGroup[posizione].style.display="none";
			imgGroup[posizione+1].style.filter="alpha(opacity=0)";
			imgGroup[posizione+1].style.mozOpacity="0";
			imgGroup[posizione+1].style.opacity="0";
			imgGroup[posizione+1].style.display="";
			imgFade.showAnimato(imgGroup[posizione+1],0)
		}
	},
	showAnimato : function (img,valore)
	{	
		valore=valore+5;
		img.style.mozOpacity = valore/100;
	   	img.style.filter = 'alpha(opacity=' + valore + ')';
		img.style.opacity = valore/100;
		if(valore>=100){
			var timer = setTimeout(function()
				{
					imgFade.hide(img.parentNode);
	 			}, 4000);
			return;
		}
		var timer = setTimeout(function()
			{
				imgFade.showAnimato(img,valore);
 			}, 1000/imgFade.frameRate);
	}
};
var divShow =
{
	init: function (comportamento){
		var imgFadeGroup = Core.getElementsByClass("divShow");
		var div = imgFadeGroup[0];
		divShow.frameRate = 30;
		var imgGroup = div.getElementsByTagName("div");
				if(comportamento == 'show') divShow.showAnimato(div,0);
				else divShow.hideAnimato(div,0);
	},
	
	showAnimato : function (div,i)
	{
		var imgGroup = div.getElementsByTagName("div");
		//alert(imgGroup[i].nodeName);
		var lunghezza = imgGroup.length;
		if (i == imgGroup.length) return 0;
		imgGroup[i].style.display = "";
		i++;
		var timer = setTimeout(function()
			{
				divShow.showAnimato(div,i);
 			}, 1200/imgFade.frameRate);
	},
	hideAnimato : function (div,i)
	{
		var imgGroup = div.getElementsByTagName("div");

		var lunghezza = imgGroup.length;
		if (i == imgGroup.length) divShow.init('show');
		else {
			imgGroup[i].style.display = "none";
			i++;
			divShow.hideAnimato(div,i);
		}
	}
	
};
var invertiImg =
{
	init: function (){
		var imgFadeGroup = Core.getElementsByClass("invertiImgFiglio");
		for(var i=0;i<imgFadeGroup.length; i++)
		{
			Core.addEventListener(imgFadeGroup[i],"click",invertiImg.inverti);
		}
	},
	inverti : function ()
	{
		var url = this.getAttribute("src");
		var imgInvertiGroup = Core.getElementsByClass("invertiImgPadre");
		imgInvertiGroup[0].setAttribute("src",url);
	}
};

var newsletterHandler =
{
	init: function (){
		if(document.getElementById("formNewsletter") != undefined)
		{
			var form = document.getElementById("formNewsletter");
			Core.addEventListener(form,"submit",newsletterHandler.submitListener);
		}
	},
		submitListener : function (e)
		{
			var text = document.getElementById("email");
			var check = document.getElementById("privacy");
			var mail = text.value;
			if (check.checked) var privacy=1;
			else var privacy=0;
			var imgFadeGroup = Core.getElementsByClass("newsletter");
			var div = imgFadeGroup[0];
				    try
				    {
				      var requester = new XMLHttpRequest();
				    }
				    catch (error)
				    {
				      try
				      {
				        var requester = new ActiveXObject("Microsoft.XMLHTTP");
				      }
				      catch (error)
				      {
				        var requester = null;
				      }
				    }
				 if (requester != null)
				    {
						requester.open("GET", "newsletter.php?mail="+mail+"&privacy="+privacy, true);

						requester.onreadystatechange = function()
					      {
					        if (requester.readyState == 4)
					        {

					          if (requester.status == 200 || requester.status == 304)
					          {
								var form = document.getElementById("formNewsletter");
								form.style.display='none';
								div.style.display='';
					            div.innerHTML=requester.responseText;
								var timer = setTimeout(function()
									{
										newsletterHandler.ritorna();
						 			}, 2000);
					          }
					          else
					          {
					            alert(requester.status);
					          }
					        }
					      };
					      requester.send(null);
						//alert(continente);
						Core.preventDefault(e);
					}
		},
		ritorna : function ()
		{
			var form = document.getElementById("formNewsletter");
			var imgFadeGroup = Core.getElementsByClass("newsletter");
			var div = imgFadeGroup[0];
			div.style.display='none';
			form.style.display='';
		}
};


var video =
{
	init: function (){
					var divOpacity = window.top.document.getElementById('divOpacity');
					video.divAnimato(divOpacity,0);
	},
	showVideo : function (){
			var iframe = window.top.document.getElementById('dx');
			if (window.innerHeight) {
				var wHeight = window.innerHeight;
				var wWidth = window.innerWidth;
			} else {
				var wHeight = document.body.clientHeight;
				var wWidth = document.body.clientWidth;
			}

			var divLeft = (wWidth - 547)/2;
			var divTop = (wHeight - 368)/2;
			iframe.style.top=divTop+"px";
			iframe.style.left=divLeft+"px";

		iframe.style.display='';
	},
	divAnimato : function (div,valore)
	{
		if(valore > 69) {
			video.showVideo();
			return;
		}
		div.style.display = '';
		div.style.mozOpacity = valore/100;
	   	div.style.filter = 'alpha(opacity=' + valore + ')';
		div.style.opacity = valore/100;
		valore=13 + valore;
		var timer = setTimeout(function()
			{
				video.divAnimato(div,valore);
 			}, 20);
		
		}
};
var video2 =
{
	init: function (){
					var divOpacity = window.top.document.getElementById('divOpacity');
					video2.divAnimato(divOpacity,0);
	},
	showVideo : function (){
			var iframe = window.top.document.getElementById('dx2');
			if (window.innerHeight) {
				var wHeight = window.innerHeight;
				var wWidth = window.innerWidth;
			} else {
				var wHeight = document.body.clientHeight;
				var wWidth = document.body.clientWidth;
			}

			var divLeft = (wWidth - 547)/2;
			var divTop = (wHeight - 368)/2;
			iframe.style.top=divTop+"px";
			iframe.style.left=divLeft+"px";

		iframe.style.display='';
	},
	divAnimato : function (div,valore)
	{
		if(valore > 69) {
			video2.showVideo();
			return;
		}
		div.style.display = '';
		div.style.mozOpacity = valore/100;
	   	div.style.filter = 'alpha(opacity=' + valore + ')';
		div.style.opacity = valore/100;
		valore=13 + valore;
		var timer = setTimeout(function()
			{
				video2.divAnimato(div,valore);
 			}, 20);
		
		}
};
var aFade =
	{
		init: function (){
			var aFadeGroup = Core.getElementsByClass("aFade");
			for(var i =0;i<aFadeGroup.length; i++)
			{
				var img = aFadeGroup[i];
				Core.addEventListener(img,"click",aFade.collegamento);
			}
	},
	collegamento:function(){
		var aLink = this.getAttribute('link');
		location.href=aLink;
	}
};


var StoryTelling =
{
	init: function ()
	{ 
		//alert('pippo');
		StoryTelling.frameRate=300;
		var stoGroup = Core.getElementsByClass("storyTelling");
		for(var i =0;i<stoGroup.length; i++){
			
				var div = stoGroup[i];

						StoryTelling.prossimo(div);
			}	 
		},
	prossimo: function(div){
		var storyDivGrup =div.getElementsByTagName("img");
		var n=0;
		while(storyDivGrup[n].style.display=="none"){
			n++;
		}
		var oldDiv = storyDivGrup[n];
			if(storyDivGrup[n+1]==null)var newDiv =storyDivGrup[0];
			else var newDiv =storyDivGrup[n+1];
			var timer = setTimeout(function()
				{

					StoryTelling.scompariAnimatodx(oldDiv,newDiv);
	 			}, 6000);
			
	},
	scompariAnimatodx:function(oldDiv,newDiv){
		if(oldDiv.style.left=="")var spostamento =0;
		else{
			var spostamento = oldDiv.style.left;
			spostamento=spostamento.replace("px","");
			spostamento=spostamento.replace("-","");
			spostamento=spostamento.replace("+","");
			spostamento=parseInt(spostamento);
		}
		if (spostamento >= oldDiv.scrollWidth){
			oldDiv.style.display="none";
			oldDiv.style.left="";
			StoryTelling.appariAnimatodx(oldDiv,newDiv,0);
			return;
		}
		spostamento=spostamento+10;
		oldDiv.style.left=spostamento+"px";
		var timer = setTimeout(function()
			{
				StoryTelling.scompariAnimatodx(oldDiv,newDiv);
 			}, 1000 / StoryTelling.frameRate);
				
	},
	appariAnimatodx:function(oldDiv,newDiv,spostamento){
		if(newDiv.style.display=="none"){
			newDiv.style.left="-6000px";
			newDiv.style.display="";
			var divHeight=newDiv.scrollHeight;
			var divWidth=newDiv.scrollWidth;
			newDiv.style.left="-"+divWidth+"px";
			spostamento = divWidth;
			spostamento=parseInt(spostamento);	
		}
		if (spostamento <= 10){
			newDiv.style.left="0px";
			StoryTelling.prossimo(oldDiv.parentNode);
			return;
		}
		spostamento=spostamento-10;
		newDiv.style.left="-"+spostamento+"px";
		var timer = setTimeout(function()
			{
				StoryTelling.appariAnimatodx(oldDiv,newDiv,spostamento);
 			}, 1000 / StoryTelling.frameRate);			
	}
};
Core.start(StoryTelling);
Core.start(invertiImg);
Core.start(newsletterHandler);
Core.start(aFade);
//Core.start(imgFade);

function gestisciCartina(continente){
	
	var imgFadeGroup = Core.getElementsByClass("divShow");
	var div = imgFadeGroup[0];
		    try
		    {
		      var requester = new XMLHttpRequest();
		    }
		    catch (error)
		    {
		      try
		      {
		        var requester = new ActiveXObject("Microsoft.XMLHTTP");
		      }
		      catch (error)
		      {
		        var requester = null;
		      }
		    }
		 if (requester != null)
		    {
				requester.open("GET", "ajax.php?continente=" + continente, true);
				
				requester.onreadystatechange = function()
			      {
			        if (requester.readyState == 4)
			        {

			          if (requester.status == 200 || requester.status == 304)
			          {
			            div.innerHTML=requester.responseText;
						divShow.init('hide');
			          }
			          else
			          {
			            alert(requester.status);
			          }
			        }
			      };
			      requester.send(null);
				//alert(continente);
			}
		else alert('errore ajax');
	//;
}
function ciao(){
	var divOpacity = document.getElementById('divOpacity');
	divOpacity.style.display='none';
	imgFade.init();
}

