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

Image.prototype.update = function(src, complete){
	this.src = src;
	if ($type(complete) == 'function') {
		if (this.complete) {
			complete();
		}
		else {
			this.addEvent('load', function(){
				complete();
			});
		}
	}
}

myClass.imageHelper = new Hash({});

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');
						}
						
						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);
							}
						});
						
						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;
			
		},
		init: function(){
			if(!$type(Browser.Engine.trident4)){
				return;
			}
			var _root = this;
			
			$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');
					
                    new Asset.images(image);
					
                    self.loaded.push(image);
                    
                    if (item.hasClass('swap')) {
                        image = image.replace(/\.(gif|jpg|png)/, '_over.$1');
						new Asset.images(image);
						
                        self.loaded.push(image);
                    }
                }
                else 
                    if ($type(item) == 'string' && self.loaded.indexOf(item) == -1) {
                        new Asset.images(item);
						
                        self.loaded.push(item);
                    }
            });
        }
    }
});

preloader = myClass.mooPreloader;
imageSwaper = myClass.imageHelper.imageSwaper;
/* Sample

 var imageArray = [
 'test.jpg',
 'test2.jpg',
  'test3.jpg'
 ];

 preloader.loadImage(imageArray);

 */