/**
 * @author david187
 * ver 1.1
 * 2010.10.07
 */
if (!$type(myClass)) {
    var myClass = new Hash({});
}

myClass.imageHelper = new Hash({});

(function(){
	var $ = document.id;

	myClass.imageHelper = new Hash({
	  imageSwaper: new new Class({
	    shim: '/images/x.gif',
	    loaded: [],
	    active: function(target){
	      var self = this;
	      
	      preloader.loadImage(target);
	      
	      if ($type(target) == 'object' || $type(target) == 'array') {
	        $each(target, function(item){
	          if ($type(item) == 'element' && item.tagName == 'IMG' && self.loaded.indexOf(item.src) == -1) {
	            var image = item.get('src');
	            
	            if($type(Browser.Engine.trident) && $type(item.retrieve('originalImg'))){
	              image = item.retrieve('originalImg');
	            }
	            
	            if (!item.hasClass('current') && !item.getParent('a').hasClass('current') && (!$type(item.getParent('li')) || !item.getParent('li').hasClass('current'))) {
	            
	              item.addEvents({
	                'mouseenter': function(){
	                  this.set('src', image.replace(/\.(gif|jpg|png)/, '_over.$1'));
	                  
	                  myClass.imageHelper.fixPng.fix(this);
	                },
	                'mouseleave': function(){
	                  this.set('src', image);
	                  myClass.imageHelper.fixPng.fix(this);
	                }
	              });
	              
	            }else{
	              item.set('src', image.replace(/\.(gif|jpg|png)/, '_over.$1'));
	              myClass.imageHelper.fixPng.fix(item);
	            }
	            
	            self.loaded.push(image);
	          }
	        });
	      }
	    }
	  }),
	  fixPng: new new Class({
	    shim : '/images/x.gif',
	    fix: function(item){
	      if(!$type(Browser.Engine.trident4)){
	        return;
	      }
	      if ($type(item) == 'element' && item.tagName == 'IMG') {
	            if (item.complete) {
	                this.ele_fix(item);
	            }
	            else {
	          var _self = this;
	                item.addEvent('load', function(){
	                    _self.ele_fix(item);
	                });
	            }
	      }
	    },
	    ele_fix: function(img){
	      if(!$type(Browser.Engine.trident4) || (img.src.substr(img.src.length-3, 3).toLowerCase() != 'png')){
	        return;
	      }
	      var src = img.src;
	      
	            var width = img.naturalWidth || img.clientWidth;
	            var height = img.naturalHeight || img.clientHeight;
	
	      img.style.width = width;
	      img.style.height = height;
	      img.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + src + "', sizingMethod='scale')";
	      img.src = this.shim;
	      
	    },
	    bg_fix: function(obj){
	          var mode = 'scale';
	          var bg  = obj.currentStyle.backgroundImage;
	          var src = bg.substring(5,bg.length-2);
	          if (obj.currentStyle.backgroundRepeat == 'no-repeat') {
	              mode = 'crop';
	          }
	          obj.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + src + "', sizingMethod='" + mode + "')";
	          obj.style.backgroundImage = 'url('+this.shim+')';
	    },
	    init: function(){
	      if(!$type(Browser.Engine.trident4)){
	        return;
	      }
	      
	      var _root = this;
	      
	      for ( var i = document.all.length - 1, obj = null; (obj = document.all[i]); i--) {
	        // background pngs
	        if (obj.currentStyle.backgroundImage.match(/\.png/i) !== null) {
	          _root.bg_fix(obj);
	        }
	      }
	      
	      $each($$('img[src$=png]'), function(item){
	        item.store('originalImg', item.src);
	
	        _root.fix(item);
	      });
	    }
	  })
	
	});
	
	myClass.mooPreloader = new new Class({
	    loaded: [],
	    Implements: [Options],
	    options: {},
	    
	    initialize: function(dp, options){
	        this.setOptions(options);
	    },
	    
	    loadImage: function(target){
	        var self = this;
	    
	        if ($type(target) == 'object' || $type(target) == 'array') {
	            $each(target, function(item){
	            
	                if ($type(item) == 'element' && item.tagName == 'IMG' && self.loaded.indexOf(item.src) == -1) {
	                    var image = item.get('src');
	                    self.loaded.push(image);
	          
	                    new Asset.images(image);
	                    
	                    if (item.hasClass('swap')) {
	                        image = image.replace(/\.(gif|jpg|png)/, '_over.$1');
	                        self.loaded.push(image);
	                        new Asset.images(image);
	                    }
	                }
	                else 
	                    if ($type(item) == 'string' && self.loaded.indexOf(item) == -1) {
	                        self.loaded.push(item);
	            
	                        new Asset.images(item);
	                    }
	            });
	        }
	    }
	});

})();


preloader = myClass.mooPreloader;
imageSwaper = myClass.imageHelper.imageSwaper;


function autoResizeImage(items, parentEle, withHeight){
    if (!$type(parentEle)) {
        var parentEle = '';
    }
    if (!$type(withHeight)) {
        var withHeight = false;
    }
    
  var imgselector = ' img[class!=noresize]';
  var selector = items.join(imgselector+',')+imgselector;
  var images = $$(selector);

  $each(images, function(img){
    if(img.complete){
      imageResize(img, parentEle, withHeight);
    }else{
            img.addEvent('load', function(){
                imageResize(img, parentEle, withHeight);
            });
    }
  });
}

  
function imageResize(item, parentEle, withHeight){
    if (!$type(parentEle)) {
        var parentEle = '';
    }
    if (!$type(withHeight)) {
        var withHeight = false;
    }
  if(!$type(item.getParent(parentEle))){
    return;
  }
    
    var imageSize = item.getSize();
    var container = item.getParent(parentEle).getSize();
  
    var newSize = {};
    
    if (withHeight && imageSize.y > container.y) {
        newSize.y = container.y;
        newSize.x = imageSize.x / (imageSize.y / newSize.y);
    }
    else 
        if (parseInt(imageSize.x) > parseInt(container.x)) {
            newSize.x = container.x;
        }
    
    if ($type(newSize.x)) {
        item.setStyle('width', newSize.x + 'px');
    }
    if ($type(newSize.y)) {
        item.setStyle('height', newSize.y + 'px');
    }
}

