(function ($) {

function pad(n, len) { 
  n = (typeof n === 'undefined') ? 1 : n;
  s = n.toString();
  if (s.length < len) {
    s = ('0000000000' + s).slice(-len);
  }
  return s;
}
   
$.fn.homePageBanner = function (options) {

   var defaultOptions = {
      loadImagesPath: null, 
      delayLoad: null,
      numberOfThumbs: null,
      total: 100,
      cols: 8,
      texts: {
        loading: 'Loading...',
        errorLoadingContent: 'Not able to load content'
      }
   }
   
   var finalOptions = $.extend(true, {}, defaultOptions, options);
   var o = finalOptions;
   
   $referenceDOM = $(this); 
   $referenceDOM.text(finalOptions.texts.loading);
   
   var shuffle = function(v){
     for(var j, x, i = v.length; i; j = parseInt(Math.random() * i), x = v[--i], v[i] = v[j], v[j] = x);
     return v;
   }
   
   var images = [];
   for (var i = 0; i < o.total; i++) {
     images[i] = i+1;
   }
   
   var data = {
     thumbs: [],
     rest_thumbs: []
   }; 
   
   function generateNewData(first) {
     data.thumbs = [];
     var s_images = shuffle(images);
     
     var i = 0;
     $.each(s_images, function (i, d) {
      if(first) {
        if(i < 24) {
          data.thumbs.push(images[d]);                                              
        } else {
          data.rest_thumbs.push(images[d]);                                  
        }
      } else {
        data.rest_thumbs.push(images[d]);
      }
      i++;
     });
   }
   
   function getImagePath(id) {
     return o.loadImagesPath + '/' + pad(id, 3) + '.jpg';
   }
   
   function successCallback(data) {
        $wrapper = $('<div class="thumbs-wrapper"></div>');
        $.each(data.thumbs, function (i, d) {
          var file = getImagePath(d);
          $wrapper.append('<div class="thumb-wrapper col-'+(i % o.cols) +'"><div class="thumb" data-path="'+ d +'" style="' + bgImageByBrowser(file) + '"></div></div>');                                       
        });                              
        $referenceDOM.html($wrapper);
        $referenceDOM.append('<div id="bannerHPStageBg" style="' + bgImageByBrowser2(Drupal.settings.FittingsHeader.bgImage) + '"></div>');
        
        setTimeout(function () {
          loadNewOne($referenceDOM,'div.thumb',finalOptions);
        }, finalOptions.delayLoad * 1000);
   }
   
   generateNewData(true);
   successCallback(data);
   
   function bgImageByBrowser(source) {
     string = "background-image: url(" + source + ");";
     return string;
   }
   
   function bgImageByBrowser2(source) {
     var string = '';
     if($.browser.msie && parseInt($.browser.version,10) == 6) {
       string = "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + source + "',sizingMethod='scale');";         
     } else {
       string = "background-image: url(" + source + ");";
     }         
     return string; 
   } 

   function randomXToY(minVal,maxVal,floatVal) {
     var randVal = minVal+(Math.random()*(maxVal-minVal));
     return ((typeof floatVal == 'undefined') ? Math.round(randVal):randVal.toFixed(floatVal));
   }
   
   function loadNewOne(wrapperDOM,thumbSelector,finalOptions) {
      var $thumbs = wrapperDOM.find(thumbSelector), 
          position = randomXToY(0,$thumbs.length-1,0.011231345546);             
      var $thumb = $thumbs.eq(position);
      
      replaceMentSrc = data.rest_thumbs.pop();
      data.rest_thumbs.push($thumb.data('path'));
      $thumb.after('<div class="thumb-load" style="' + bgImageByBrowser(getImagePath(replaceMentSrc)) + '"></div>');
      
      $thumb.fadeOut('slow',function () {
        $(this).next().fadeIn('slow',function () {                                      
          setTimeout(function () {
            loadNewOne($referenceDOM,'div.thumb',finalOptions);
            $thumb.remove();      
          }, finalOptions.delayLoad * 1000);
        });
      });                    
   }
}

})(jQuery);

/**
 * Field instance settings screen: force the 'Display on registration form'
 * checkbox checked whenever 'Required' is checked.
 */
Drupal.behaviors.fittingsHeaderAnim = {
  attach: function (context, settings) {
    var $target = jQuery('#bannerHPStage');
    if ($target.length) {
      $target.homePageBanner({
        loadImagesPath: Drupal.settings.FittingsHeader.path, // load Path 
        delayLoad: Drupal.settings.FittingsHeader.delay, // number of sec.
        numberOfThumbs: 24, // number of thumbs
        bgImage: Drupal.settings.FittingsHeader.bgImage,
        total: Drupal.settings.FittingsHeader.total
      });
    }
  }
};;

