var Core = {};

// W3C DOM 2 Events model
if (document.addEventListener)
{
  Core.addEventListener = function(target, type, listener)
  {
    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();
  };
}
// Internet Explorer Events model
else if (document.attachEvent)
{
  Core.addEventListener = function(target, type, listener)
  {
    // prevent adding the same listener twice, since DOM 2 Events ignores
    // duplicates like this
    if (Core._findListener(target, type, listener) != -1) return;

    // listener2 calls listener as a method of target in one of two ways,
    // depending on what this version of IE supports, and passes it the global
    // event object as an argument
    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;
      }
    };

    // add listener2 using IE's attachEvent method
    target.attachEvent("on" + type, listener2);

    // create an object describing this listener so we can clean it up later
    var listenerRecord =
    {
      target: target,
      type: type,
      listener: listener,
      listener2: listener2
    };

    // get a reference to the window object containing target
    var targetDocument = target.document || target;
    var targetWindow = targetDocument.parentWindow;

    // create a unique ID for this listener
    var listenerId = "l" + Core._listenerCounter++;

    // store a record of this listener in the window object
    if (!targetWindow._allListeners) targetWindow._allListeners = {};
    targetWindow._allListeners[listenerId] = listenerRecord;

    // store this listener's ID in target
    if (!target._listeners) target._listeners = [];
    target._listeners[target._listeners.length] = listenerId;

    // set up Core._removeAllListeners to clean up all listeners on unload
    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 listObject = new Object();
listObject.listId=[];
listObject.listId[0]="List_96";

var marginTop=0;

//parametri di configurazione dello scroll della lista
var scrollListParameters = new Object();
scrollListParameters.marginTopLimit=1.48;
scrollListParameters.marginTopStep=0.075;
scrollListParameters.timeout = 90;
scrollListParameters.scrollListHeight = '12.03';

var list = {
	init:function() {
		var indexGallery=document.getElementById(listObject.listId[0]);
		if(indexGallery!=null){
			var imgUp = document.createElement('img');
			imgUp.src = scrollArrowImagePath + "plus.png";
			imgUp.setAttribute("id","imageUp");
			imgUp.setAttribute("width","16px");
			
			indexGallery.parentNode.insertBefore(imgUp,indexGallery);
			
			var element = indexGallery.getElementsByTagName("li");
			listObject.listAppo = [];
			
			for(var i = 0; i < element.length;i++) {
				listObject.listAppo[i] = element[i];
			}
			listObject.contatore = 0;
			indexGallery.style.height= scrollListParameters.scrollListHeight + "em";
			indexGallery.style.overflow="hidden";
		}
		list.cantieriList = indexGallery.cloneNode(true).getElementsByTagName("li");
	}
}


var scrollList = {
	init:function(){
	
		// get ul element (indexList)
		var indexGallery=document.getElementById(listObject.listId[0]);
		
		// get  li array element (li)
		var element = indexGallery.getElementsByTagName("li");
		
		//get first element (appo)
		var appo=element[0];
		var appo2 = listObject.listAppo[listObject.contatore];
		
		if (marginTop < scrollListParameters.marginTopLimit){
			marginTop = marginTop + scrollListParameters.marginTopStep;
			appo.style.marginTop = '-' + marginTop +"em";
		}else{
			//remove first element
			indexGallery.removeChild(appo);
			
			//append first element, but before you must
			//set marginTop = 0!
			marginTop = 0;
			appo2.style.marginTop = "-" + marginTop + "em";
			indexGallery.appendChild(appo2);
			
			marginTop = scrollListParameters.marginTopStep;
			appo = element[0];
			appo.style.marginTop = "-" + marginTop + "em";
			
			listObject.contatore = listObject.contatore +  1 ;
			if(listObject.contatore == listObject.listAppo.length){
				listObject.contatore = 0;
			}
		}
		t = setTimeout("scrollList.init()",scrollListParameters.timeout);
		
	},
	stopScroll:function() {
		clearTimeout(t);
	},
	startScroll:function(){
		t = setTimeout("scrollList.init()",scrollListParameters.timeout);
	},

	scrollUp:function(){
		clearTimeout(t);
		var indexGallery=document.getElementById(listObject.listId[0]);
		indexGallery.style.height= '100' + "%";
		scrollList.stopScroll;
		var element = indexGallery.getElementsByTagName("li");
		
		for(var i = 0; i < element.length;i++){[]
			Core.removeEventListener(element[i],"mouseout",scrollList.startScroll);
			Core.removeEventListener(element[i],"mouseover",scrollList.stopScroll);
			element[i].getElementsByTagName("a")[0].innerHTML=list.cantieriList[i].getElementsByTagName("a")[0].innerHTML;
			element[i].getElementsByTagName("a")[0].href=list.cantieriList[i].getElementsByTagName("a")[0].href;
		}
		element[0].style.marginTop = 0;
		var imgUp = document.getElementById("imageUp");
		imgUp.src = scrollArrowImagePath + "minus.png";
		Core.addEventListener(imgUp,"click",scrollList.scrollDown);
		Core.removeEventListener(imgUp,"click",scrollList.scrollUp);
	},
	
	scrollDown:function(){
		clearTimeout(t);
		var indexGallery=document.getElementById(listObject.listId[0]);
		indexGallery.style.height= '12.03' + "em";
		indexGallery.style.overflow="hidden";
		var element = indexGallery.getElementsByTagName("li");
		for(var i = 0; i < element.length;i++){
			Core.addEventListener(element[i],"mouseout",scrollList.startScroll);
			Core.addEventListener(element[i],"mouseover",scrollList.stopScroll);
		}
		
		var imgUp = document.getElementById("imageUp");
		imgUp.src = scrollArrowImagePath + "plus.png";
		scrollList.startScroll();
		Core.addEventListener(imgUp,"click",scrollList.scrollUp);
	}
}



var stopScrollListener = {
	init:function(){
		var indexGallery=document.getElementById(listObject.listId[0]);
		
		// get  li array element (li)
		var element = indexGallery.getElementsByTagName("li");
		for(var i = 0; i < element.length;i++){
			Core.addEventListener(element[i],"mouseover",scrollList.stopScroll);
		}
	}
}

var startScrollListener = {
	init:function(){
		var indexGallery=document.getElementById(listObject.listId[0]);
		// get  li array element (li)
		var element = indexGallery.getElementsByTagName("li");
		for(var i = 0; i < element.length;i++){
			Core.addEventListener(element[i],"mouseout",scrollList.startScroll);
		}
	}
}

var scrollListenerUp = {
	init:function(){
		var upCursor=document.getElementById("imageUp");
		Core.addEventListener(upCursor,"click",scrollList.scrollUp);
	}
}

var scrollListenerDown = {
	init:function(){
		var downCursor=document.getElementById("imageDown");
		Core.addEventListener(downCursor,"click",scrollList.scrollDown);
	}
}


Core.start(list);
Core.start(scrollList);
Core.start(stopScrollListener);
Core.start(startScrollListener);
Core.start(scrollListenerUp);
// Core.start(scrollListenerDown);
;


