/*
//----------------------------------------------------------------------------
// Copyright (c) 2006-2009 Asymmetric Software. Innovation & Excellence.
// Author: Mark Samios
// http://www.asymmetrics.com
// ---------------------------------------------------------------------------
// Image hover fields script
//----------------------------------------------------------------------------
// Script is intended to be used with the following:
//
// osCommerce, Open Source E-Commerce Solutions
// http://www.oscommerce.com
// Copyright (c) 2003 osCommerce
//
// jQuery JavaScript Library
// http://jquery.com
// Copyright (c) 2009 John Resig
//----------------------------------------------------------------------------
// Released under the GNU General Public License
//----------------------------------------------------------------------------
*/
var hoverImages = {
  sem: 0,
  atimers: [],
  links: {},
  ajaxRequest: function (options){
    var result = $.ajax({
      url: options.url,
      type: options.type || 'GET',
      cache: options.cache || false,
      dataType: options.dataType || 'html',
      async: options.async || false,
      contentType: options.contentType || 'application/x-www-form-urlencoded; charset=utf-8',
      data: options.data || false,
      success: options.success,
      error: options.error,
      complete: options.complete
    });
    html = result.responseText;
    return html;
  },
  preloadImages: function($section) {

    vCycleImages = setInterval(function() {
      var bImgLoaded = true;
      images = $section.children("img.preHover");
      //var images = $("#slideshow img");
 
      for (var i = 0; i < images.length; i++) {
         var img = images[i];
         if (img.complete == false)
            bImgLoaded = false;
      }
 
      if (bImgLoaded) {
         //$("#slideshow").cycle({ delay: 1000, speed: 1000 });
         clearInterval(vCycleImages);
      }
    }, 1000);

  },
  clearTimers: function(current) {
    if( hoverImages.atimers.length ) {
      for(i=0, j=hoverImages.atimers.length; i<j; i++) {
        $element = $(hoverImages.atimers[i]);
        $element.stopTime();
        $next = $element.next();
        $element.hide();
        $next.show();
      }
    } else {
      $next = $(current).next();
      $(current).hide();
      $next.show();
    }
    hoverImages.atimers = new Array();
  },
  animationProcess: function(element, period, disp) {

    $pindex = $element.attr('linkData');
    if( !$pindex ) {
      return;
    }

    $section = $(element).children();

    if( $section[0] ) {
      hoverImages.preloadImages($section);
      //pwidth = $section.width();
      pwidth = $section.attr('dataWidth');
    } else {
      return;
    }

    for(i=0, j=hoverImages.atimers.length; i<j; i++) {
      if( $(element).attr('linkData') == $(hoverImages.atimers[i]).attr('linkData') ) return;
      //if( hoverImages.atimers[i] == element) return;
    }    
    hoverImages.atimers[hoverImages.atimers.length] = element;

    //hoverImages.width = $(element).width();
    //hoverImages.pwidth = pwidth;
    width = $(element).width();
    pwidth = pwidth;

    hoverImages.loop = 1;
    //hoverImages.disp = disp;
    //hoverImages.period = period;

    hoverImages.posx = 0;
    hoverImages.posy = 0;
    $(element).scrollLeft(0);

    $(element).everyTime(period, function(iteration){
      //pwidth = hoverImages.pwidth;

      //width = hoverImages.width;
      //disp = hoverImages.disp;
      //period = hoverImages.period;

      if( iteration*period < 200 ) {
        hoverImages.loop = 1;
      }

      if( !hoverImages.loop ) return;


      current = $(element).scrollLeft();
/*
      if( hoverImages.loop < 0 ) {
        if( current > disp ) {
          current = parseInt(current-disp);
        } else {
          current = 0;
          //hoverImages.loop = 1;
        }
      } else {
        if( (current+disp) < (pwidth-width) ) {
          current = parseInt(current+disp);
        } else {
          current = parseInt(pwidth-width);
          //hoverImages.loop = -1;
        }
      }
*/

      if( hoverImages.loop < 0 ) {
        if( current > disp ) {
          current = parseInt(current-disp);
        } else if( (current-1) > disp ) {
          current = parseInt(current-1);
        } else {
          current = 0;
          //hoverImages.loop = 1;
        }
      } else {
        if( (current+disp) < (pwidth-width) ) {
          current = parseInt(current+disp);
        } else if( (current+1) < (pwidth-width) ) {
          current = parseInt(current+1);
        } else {
          current = parseInt(pwidth-width);
          //hoverImages.loop = -1;
        }
      }

      $(element).scrollLeft(current);
    });
  },


  hoverProcess: function() {

    $('.jqoff').hover(function (action){
      $element = $(action.currentTarget);
    }, function (action){
      $element = $(action.currentTarget);

      if( $element.html() == 'none' ) {
        return;
      }
      hoverImages.clearTimers($element);
    });

    $('.jqoff').mousemove(function (action){
      var xMouse = action.pageX || (action.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft));
      var yMouse = action.pageY || (action.clientY + (document.documentElement.scrollTop || document.body.scrollTop));

      if( hoverImages.posy ) {
        if( yMouse-hoverImages.posy > 4 || hoverImages.posy-yMouse > 4   ) {
          hoverImages.loop = 0;
          hoverImages.posy = yMouse;
        }
      } else {
        hoverImages.posy = yMouse;
      }

      if( hoverImages.posx ) {
        if( xMouse > hoverImages.posx ) {
          hoverImages.loop = 1;
        } else if(xMouse < hoverImages.posx) {
          hoverImages.loop = -1;
        }
      }

      hoverImages.posx = xMouse;

      $element = $(action.currentTarget);
    });

    $('.jqhover').hover(function (action){
      $element = $(action.currentTarget);
      $previous = $element.prev();

      if( $previous.html() == 'none' ) {
        return;
      }

      if( $previous.html().length > 0 ) {
        $element.hide();
        $previous.show();
        return;
      }

      //hoverImages.sem = 1;
      result = hoverImages.ajaxRequest({
        type: "post",
        url: hoverImages.links.productsListing,
        data: hoverImages.key + '=' + $element.attr('linkData'),
        dataType : "html",
        async: false,
        success: function(msg){
        },
        error: function(msg) {
          //alert(msg);
        },
        complete: function(msg) {
          if( msg.responseText.length > 0 ) {
            $previous.html(msg.responseText);
            $element.hide();
            $previous.show();
            //hoverImages.sem = 0;
          } else {
            $previous.html('none');
            $element.unbind("hover");
            $previous.unbind("hover");
            //hoverImages.sem = 0;
          }
        }
      });
    }, function (action){
      if( $previous.html() != 'none' ) {
        $element = $(action.currentTarget);

        if( hoverImages.atimers.length ) {
          dup = false;
          for(i=0, j=hoverImages.atimers.length; i<j; i++) {
            if( $element.attr('linkData') == $(hoverImages.atimers[i]).attr('linkData') ) continue;
            $tmp = $(hoverImages.atimers[i]);
            $tmp.stopTime();
            $tmpnext = $tmp.next();
            $tmp.hide();
            $tmpnext.show();
            dup = true;
          }
          if( dup ) {
            hoverImages.atimers = new Array();
          }
        }
        //if( !hoverImages.sem ) {
          hoverImages.animationProcess($previous, 30, 5);
        //}
      }
    });
  },
  initialize: function (key, content){
    hoverImages.key = key;

    if ($('.jqhover').is(':visible')) {
      $('.jqhover').each(function (){
        hoverImages.hoverProcess();      
      });
    }
  }
};
