
var image = {
	toggle: function( sender ){
		var tmp;
		( tmp = image.getElement( sender )).src = image.getToggledImage( tmp, sender );
	},
	preloadImage: function( src ){
		var img = new Image();
		img.src = src;
		return img.src;
	},
	getElement: function( sender ){
		return sender.target || sender.srcElement;
	},
	getToggledImage: function( img, event ){
		var src = String( img.src );

		return image.preloadImage(
			src.search(/_a\.\w+$/) > -1 && String( event.type ).toLowerCase().indexOf('out') > -1 ?
				src.replace(/_a(\.\w+)$/, '$1') :
				src.replace(/(\.\w+)$/, '_a$1')
		);
	}
};

String.prototype.trim =function(){
	return this.toString().replace(/^\s+|\s+$/i, '');
};

String.prototype.camelize =function(){
	var camelized =this.indexOf('-') <0;
	return camelized ? this.trim() : String(this.trim()).replace(/([-]|^)(.)/g, function(){ var a=$A(arguments); return String(a[2])['to'+ ((a[1])? 'Upper': 'Lower') + 'Case']();  });
};

var $A = (Object.toArray = function( items ){
	if(! items){ return []; }
	if(items.toArray){ return items.toArray(); }

	var result =[];
	for(var i=0; i<items.length; i++){
		result.push(items[i]);
	}
	return result;
});


var Element = {
	getStyle: function(node, style){
		// get style
		var nodeStyle =node.style;
		style =(style =='float' || style =='cssFloat')? (nodeStyle.styleFloat === undefined ? 'cssFloat' : 'styleFloat')  : style.camelize();

		// get value
		var value =node.style[style];

		// IE
		if(! value && node.currentStyle){
			value =node.currentStyle[style];
		}

		// FF
		if(! value && document.defaultView && document.defaultView.getComputedStyle){
			var css =document.defaultView.getComputedStyle(node, null);
			value =css[style] || null;
		}

		if(style == 'opacity'){
			// IE
			if( typeof( document.documentElement.filters ) != 'undefined' ){
				value = ((Element.getStyle(node, 'filter') || '').match(/alpha\(opacity=([\d.])/) || [0,100])[1];
				if( value ){
					return parseFloat(value)/100;
				}
			}

			// FF
			if(value){
				return parseFloat(value);
			}
			return 1.0;
		}

		if(value == 'auto'){
			if((style == 'height' || style =='width') && Element.getStyle(node, 'display') !='none'){
				return node['offset'+ String(style).capitalize()] + 'px';
			}
			return null;
		}
		return value;
	
	},

	getOpacity: function(node){
		return Element.getStyle(node, 'opacity');
	},

	setOpacity: function(node, value){
		if( typeof( document.documentElement.filters ) != 'undefined' )	{
			var filter =Element.getStyle(node, 'filter');
			node.style.filter =(filter =filter.replace(/\s*alpha\s*\([^\)]*\)[;\s]*/gi, ''));

			if(value == 1 || !String(value).length){
				return node;
			}
			else if(value < 0.00001){
				value =0;
			}
			
			node.style.filter =filter +'alpha(opacity='+parseInt(value *100, 10)+'); ';
			return node;
		}
		else{
			node.style.opacity =(value == 1 || !String(value).length)? '': (value < 0.00001)? 0: value;
			return node;
		}
	},
	toggleOpacity: function( sender ){
		Element.setOpacity( image.getElement( sender ), String( sender.type ).toLowerCase().indexOf('out') > -1 ? 0.5 : 1 );
	}
};
