var w3Opacity = {
	fading: function(strObjId,intOpacityStart,intOpacityEnd,intMillisecond,fnOnFinish) {
		var intSpeed = Math.round(intMillisecond / 100);
		var intTimer = 0;
		// Processo para o FadeOut
		if ( intOpacityStart > intOpacityEnd ) {
			for ( i = intOpacityStart; i >= intOpacityEnd; i-- ) {
				if ( intTimer == 100 && typeof(fnOnFinish) != "undefined" ) {
					setTimeout("w3Opacity.change_opacity('" + strObjId + "'," + i +"," + fnOnFinish + ")",(intTimer * intSpeed));
				} else {
					setTimeout("w3Opacity.change_opacity('" + strObjId + "'," + i +")",(intTimer * intSpeed));					
				}
				intTimer++;
			}
		} else if ( intOpacityStart < intOpacityEnd ) {
			for ( i = intOpacityStart; i <= intOpacityEnd; i++ ) {
				if ( intTimer == 100 && typeof(fnOnFinish) != "undefined" ) {
					setTimeout("w3Opacity.change_opacity('" + strObjId + "'," + i +"," + fnOnFinish + ")",(intTimer * intSpeed));
				} else {
					setTimeout("w3Opacity.change_opacity('" + strObjId + "'," + i +")",(intTimer * intSpeed));
				}
				intTimer++;
			}				
		}
	},
	toggle: function(strObjId,intMillisecond) {
		if ( this.get_opacity(strObjId) < 1 ) {
			// fadeIn
			this.fading(strObjId,0,101,intMillisecond);	
		} else {
			// fadeOut
			this.fading(strObjId,101,0,intMillisecond);
		}
	},
	set: function(strObjId,intOpacity) {
		this.change_opacity(strObjId,intOpacity);
	},
	/**
	 * Método interno, utilizado para alterar a opacidade do objeto
	 */
	change_opacity: function(strObjId,intOpacity,hasFnOnFinish) {
		if (typeof(hasFnOnFinish) != "undefined") {
			hasFnOnFinish();
		}
		var objStyle = $(strObjId).style;
		objStyle.opacity = (intOpacity / 101);
		objStyle.MozOpacity = (intOpacity / 101);
		objStyle.KhtmlOpacity = (intOpacity / 101);
		objStyle.filter = "alpha(opacity=" + intOpacity + ")";
	},
	get_style: function(strObjId,strStyleProperty) {
		var objToGetStyle = $(strObjId), styleValue;
		// Para o Internet Explorer
		if ( objToGetStyle.currentStyle ) {
			styleValue = objToGetStyle.currentStyle[strStyleProperty];
		// Para o Firefox, Opera, ...
		} else if ( window.getComputedStyle ) {
			styleValue = document.defaultView.getComputedStyle(objToGetStyle,null).getPropertyValue(strStyleProperty);
		}
		return styleValue;
	},
	get_opacity: function(strObjId) {
		var opacity;
		if ( opacity = this.get_style(strObjId,'opacity') ) {
			return parseFloat(opacity);
		}
		if ( opacity = (this.get_style(strObjId,'filter') || '').match(/alpha\(opacity=(.*)\)/) ) {
			if ( opacity[1] ) {
				return parseFloat(opacity[1]) / 100;
			} else {
				return 1.0;
			}
		// Caso não seja aplicado ao objeto um filter... será retornado undefined. Então, considero como o objeto está visível: 100
		} else {
			return 1.0;	
		}
	}
};
