function addClass(obj,className) {
   var classes = getClasses(obj);
   for (var i=0; i<classes.length; i++) {
      if (classes[i].toLowerCase() == className.toLowerCase()) {
         classes[i] = '';
      }
   }
   classes.push(className);
   obj.className = classes.join(' ');
}



function getClasses(obj) {
   return (obj && obj.className ? obj.className.split(/\s+/) : []);
}

function removeClass(obj,className) {
   var classes = getClasses(obj);
   for (var i=0; i<classes.length; i++) {
      if (classes[i].toLowerCase() == className.toLowerCase()) {
         classes[i] = '';
      }
   }
   obj.className = classes.join(' ');
}

function addEvent(obj,evType,fn,useCapture) {
   if (window.opera && obj.addEventListener) {
      // Prevent an Opera bug where event added in capture mode to form elements do not get triggered
      useCapture = false;
   }
   if (obj.addEventListener) {
      obj.addEventListener(evType,fn,useCapture);
      return true;
   } else if (obj.attachEvent) {
      var r = obj.attachEvent('on'+evType,fn);
      return r;
   } else {
      return false;
   }
}

/*
Function by Simon Willison from sitepoint.com
Modified by Cameron Cooke adding Safari's rgba support
*/
function setOpacity(obj,opacity) {
   opacity = (opacity == 100) ? 99.999 : opacity;

   if (typeof(obj.style.opacity) != 'undefined') {
      // W3C
      obj.style.opacity = opacity / 100;
   } else if (typeof(obj.style.MozOpacity) != 'undefined') {
      // Older Mozilla
      obj.style.MozOpacity = opacity / 100;
   } else if (typeof(obj.style.filter) != 'undefined') {
      // IE
      obj.style.filter = 'alpha(opacity:' + opacity + ')';
   } else if (typeof(obj.style.KHTMLOpacity) != 'undefined') {
      // Older KHTML Based Browsers
      obj.style.KHTMLOpacity = opacity / 100;
   }
}

var iCrossFader = {

   //z-indexes

   backgroundIndex : 10,/* index of the next image to be displayed*/
   foregroundIndex : 20,/* index of the image currently displayed*/
   waitingIndex : 5,/*index of the image waiting to be displayed (only used where the crossfader init)*/
   imageDisplayDuration: 8000, /*How long before the next crossfading*/
   
   /*How fast the opacity increment*/
   opacityIncrement : 10, 
   crossFadeInterval : 30,
   
   imagesToLoad : null, /*images that are going to be loaded*/

   _currentImage : 0,
   _previousImage : 0,
   _stopped : false,
   
   _opacity : 0,/* opacity of the image being displayed gets incremented by _opacityIncrement */
   _images : null,
   _imageTimeoutHandle:null,
   _opacityIntervalHandle:null,
   _imagesLoaded: 1,
   _container : null,
   _hasLink : false,
   featureSelect : 'featureSelect',
   _onFadeFunction : null,

   init: function() {
      //try {
	      iCrossFader._images = new Array();

         iCrossFader._images[0] = document.getElementById('imgStart');
         
         iCrossFader._container = iCrossFader._images[0].parentNode;
         if (iCrossFader._container.tagName == 'A')
         {
            iCrossFader._hasLink = true;
            iCrossFader._images[0].url = iCrossFader._container.href;
         }

         iCrossFader._images[0].style.zIndex = iCrossFader.foregroundIndex;

         for(i=0;i<iCrossFader.imagesToLoad.length;i++) 
         {
            var img = new Image(); //preloader
            img.onLoad = new function() {
               iCrossFader._imagesLoaded++;
               iCrossFader._loadCheck();
            }
            img.src = iCrossFader.imagesToLoad[i].src;
            iCrossFader._images[i+1] = document.createElement('img'); //dom object
            iCrossFader._images[i+1].src = img.src;
            iCrossFader._images[i+1].alt = iCrossFader.imagesToLoad[i].alt;
            iCrossFader._images[i+1].url = iCrossFader.imagesToLoad[i].url;
            iCrossFader._images[i+1].style.zIndex = iCrossFader.waitingIndex;
            
            iCrossFader._container.appendChild(iCrossFader._images[i+1]);   
         }
         
         removeClass(document.getElementById(iCrossFader.featureSelect), 'noScript');
         addClass(document.getElementById('n'+iCrossFader._currentImage), 'selected');
      //} catch (e) {
         // Do nothing
      //}
   },
   
   _loadCheck: function() {
      if(iCrossFader._imagesLoaded == iCrossFader.imagesToLoad.length)
      {
         iCrossFader.start();
      }
   },
   
   _crossFade: function(fromImage, toImage) {
         setOpacity(iCrossFader._images[toImage],0);
         iCrossFader._images[toImage].style.zIndex = iCrossFader.foregroundIndex;
         iCrossFader._images[fromImage].style.zIndex = iCrossFader.backgroundIndex;
         iCrossFader._currentImage = toImage;
         iCrossFader._previousImage = fromImage;
         iCrossFader._opacityIntervalHandle = window.setInterval("new function() {iCrossFader._fade();}", iCrossFader.crossFadeInterval);
   },
   
   
   _fade: function() {

      if(iCrossFader._opacity == 0) {
         try {
           iCrossFader._onFadeFunction.apply();
         }
         catch (e) {
            // Do nothing function doesnt exist
         }
         try {
            removeClass(document.getElementById('n'+iCrossFader._previousImage), 'selected'); 
	         addClass(document.getElementById('n'+iCrossFader._currentImage), 'selected');
	      } catch (e) {
	         // Do nothing
	      }
      }
      

      setOpacity(iCrossFader._images[iCrossFader._currentImage],iCrossFader._opacity);
      iCrossFader._opacity += iCrossFader.opacityIncrement;

      if (iCrossFader._hasLink && 50 <= iCrossFader._opacity && iCrossFader._container.href != iCrossFader._images[iCrossFader._currentImage].url)
      {
         iCrossFader._container.href = iCrossFader._images[iCrossFader._currentImage].url;
      }
      
      if(iCrossFader._opacity > 100) {
         iCrossFader.stop();
         iCrossFader._onFade();
      }
   },
   
   start: function() {
      //figurer quelle images on doit afficher
      if(!iCrossFader._stopped) {
         iCrossFader._opacity = 0;
         from = iCrossFader._currentImage;
         to = from+1;
         	      
	      if(to >= iCrossFader._images.length) {
	         to=0;    
	      }
	      iCrossFader._imageTimeoutHandle = window.setTimeout("new function() {iCrossFader._crossFade("+from+","+to+");}", iCrossFader.imageDisplayDuration);
      }
   },
   
   stop: function() {
      window.clearInterval(iCrossFader._opacityIntervalHandle);
      window.clearTimeout(iCrossFader._imageTimeoutHandle);
   },
   
   
   selectImage : function(id) {
      iCrossFader._stopped = true;   
      iCrossFader.stop();

      try
      {
         
         if (iCrossFader._hasLink)
	      {
	         iCrossFader._container.href = iCrossFader._images[id].url;
	      }
	      
         setOpacity(iCrossFader._images[iCrossFader._currentImage],100);
         setOpacity(iCrossFader._images[iCrossFader._previous],0);
      }
      catch (e) {
      
      }

      if(id != iCrossFader._currentImage) {
         iCrossFader._opacity = 0;
         iCrossFader._crossFade(iCrossFader._currentImage,id);
      }
   },
   
   _onFade: function() {
      
      try {
         setOpacity(iCrossFader._images[iCrossFader._previousImage],0);
      } catch (e) {
         // Do nothing
      }
      
      iCrossFader.start();
   }
   
   
   
   
};

