/* EFFETTO FADEIN
*/
var fadeImageIn = function(options) {
  var element = options.element;
  var fadeValue = options.fadeValue;
  var duration = options.duration;
  var dontHide = options.dontHide;
  var zIn = options.zIn;
  
  if (!element) return;
  
  if (!$defined(fadeValue)) fadeValue = 1;
  if (!$defined(duration)) duration = 2000;
  // rende l'oggetto trasparente
  if (!dontHide) element.setStyle('opacity', '0');
  // costruisce l'effetto
  fadein_fx = new Fx.Styles(element, {duration: duration});
  if ($defined(zIn)) element.setStyle('z-index',zIn);
  //applica l'effetto
  fadein_fx.start({
    'opacity':[fadeValue]
  });
}


/* EFFETTO FADEOUT
*/
var fadeImageOut = function(options) {
  var element = options.element;
  var fadeValue = options.fadeValue;
  var duration = options.duration;
  var zOut = options.zOut;
  
  if (!element) return;
  
  if (!$defined(fadeValue)) fadeValue = 0;
  if (!$defined(duration)) duration = 2000;
  // costruisce l'effetto
  fadein_fx = new Fx.Styles(element, {duration: duration});
  //applica l'effetto
  fadein_fx.start({
    'opacity':[fadeValue]
  });
  if ($defined(zOut)) (function(){element.setStyle('z-index',zOut)}).delay(duration);
}

/* FUNZIONE DI INIZIALIZZAZIONE FADEIN CONTEMPORANEO DI PIU' ELEMENTI SU CARICAMENTO PAGINA
per ogni elemento è possibile specificare la durata dell'effetto
elementsToBeFadedIn = [
{elementid:'IDlement1', duration:500},
{elementid:'IDlement2', duration:2000, delay: 500},
...
{elementid:'IDlementN', duration:1000}
];
initializeFadeIn({elementsdata:elementsToBeFadedIn});
*/
var initializeFadeIn = function(options){
  elementsdata = options.elementsdata;
  
  elementsdata.each(function(item, index){
    // recupera i valori necessari per l'inializzazione dell'effetto
    var elementid = item.elementid;
    var duration = item.duration;
    var delay = item.delay;
    if (!$defined(duration)) duration = 1000;
    if (!$defined(delay)) delay = 0;
    
    // appena il dom è pronto l'elemento viene reso completamente trasparente
    // basta domready perchè serve solo la struttura, inoltre l'opcaity deve essere messa a 0 prima che l'elemento sia caricato
    window.addEvent('domready', function(){
      // NOTA: l'elemento può essere recuperato solo quando il dom è pronto
      element = $(elementid);
      if (element) {element.setStyle('opacity', 0);} else {"initializeFadeIn: Element "+elementid+" not found"}
    });

    // applica il fadein 
    // serve load perchè serve avere l'immagine già caricata per farne il fadein
    window.addEvent('load', function(){
      var element = $(elementid);
      if (element) (function(){fadeImageIn({element:element, duration:duration})}).delay(delay);
    });
  });
}

/* FUNZIONE DI INIZIALIZZAZIONE DI EFFETTO CLICK_AND_VIEW
*/
initializeClickAndView = function(options){
  var matches = options.matches;
  var id_imageDiv1 = options.id_imageDiv1;
  var duration = options.duration;
  var disableTime = options.disableTime;
  var event = options.event;
  var z1 = options.z1;
  var z1initial = options.z1;
  var z2 = options.z2;
  var h = options.h;
  var w = options.w;
  var loaderImage = options.loaderImage;
  
  
  if (!$defined(matches)) {alert('initializeClickAndView - missing value for matches'); return 0};
  if (!$defined(id_imageDiv1)) {alert('initializeClickAndView - missing value for id_imageDiv1'); return 0};
  if (!$defined(duration)) duration = 1000;
  if (!$defined(disableTime)) disableTime = duration + 100;
  if (!$defined(loaderImage)) loaderImage = "";
  if (!$defined(z1initial)) z1initial = 1;
  
  window.addEvent('load', function(){
    semaphore = new Class({
      initialize: function(){
        this.light="green";
      }
    });
    cvmSemaphore = new semaphore();
    if (!$defined(event)) {
      cvm = new clickAndViewManager({'matches':matches, 'id_imageDiv1':id_imageDiv1, disableTime:disableTime, semaphore:cvmSemaphore, duration:duration, z1:z1, z2:z2, loaderImage:loaderImage, z1initial: z1initial, h:h, w:w});
    } 
    else {
      cvm = new clickAndViewManager({'matches':matches, 'id_imageDiv1':id_imageDiv1, disableTime:disableTime, semaphore:cvmSemaphore, duration:duration, z1:z1, z2:z2, event:event, loaderImage:loaderImage, z1initial: z1initial, h:h, w:w});
    }
    (function(){cvm.exec()}).delay(2000);
  });
}

/* FUNZIONE DI INIZIALIZZAZIONE DI EFFETTO CLICK_AND_SELECT
*/
initializeClickAndSelect = function(options){
  var elements = options.elements;
  var duration = options.duration;
  var disableTime = options.disableTime;
  var event = options.event;
  var fadeValue = options.fadeValue;
  var preclick = options.preclick;
  if (!$defined(preclick)) preclick = true;
  
  if (!$defined(elements)) {alert('initializeClickAndView - missing value for elements'); return 0};
  if (!$defined(duration)) duration = 1000;
  if (!$defined(disableTime)) disableTime = duration + 100;
  if (!$defined(fadeValue)) fadeValue = 0.4;
  
  window.addEvent('load', function(){
    semaphore = new Class({
      initialize: function(){
        this.light="green";
      }
    });
    csmSemaphore = new semaphore();
    if (!$defined(event)) {
      csm = new clickAndSelectManager({'elements':elements, disableTime:disableTime, fadeValue:fadeValue, semaphore:csmSemaphore, duration:duration, preclick:preclick});
    } 
    else {
      csm = new clickAndSelectManager({'elements':elements, disableTime:disableTime, fadeValue:fadeValue, semaphore:csmSemaphore, duration:duration, preclick:preclick, event:event});
    }
    (function(){csm.exec()}).delay(2000);
  });
}

