function obtener_rotacion(angulo)
{
    if (angulo >= 0)
	{
		var rotacion = Math.PI * angulo / 180;
	}
	else
	{
		var rotacion = Math.PI * (360 + angulo) / 180;
	}
	return rotacion;
}
function hacer_css(jelemento, angulo, Cos, Sen)
{
	jelemento.css("-moz-transform", "rotate("+angulo+"deg)");
    jelemento.css("-webkit-transform", "rotate("+angulo+"deg)");
    jelemento.css("transform", "rotate("+angulo+"deg)");
    jelemento.css("filter", "progid:DXImageTransform.Microsoft.Matrix(M11="+Cos+",M12="+(-Sen)+",M21="+Sen+",M22="+Cos+",SizingMethod='auto expand')");    
}
jQuery.fn.rotar = function(parametros)
{
	opciones_defecto = {
        angle : 0,
        duration : 0,
        callback : function (){}
    };
	opciones = jQuery.extend(opciones_defecto , parametros);
	rotacion = obtener_rotacion(opciones.angle);
	var Cos = Math.cos(rotacion);
	var Sen = Math.sin(rotacion);
	if(opciones.duration <= 0)
	{
	    hacer_css(this, opciones.angle, Cos, Sen);
	    this.data('Angulo', opciones.angle);
	    opciones.callback();
	}
	else
	{
	    pasos_faltantes = 100;
	    dT = opciones.duration / pasos_faltantes;
	    dA = opciones.angle / pasos_faltantes;
	    nA = dA;
	    jelemento = this;
	    function paso()
        {
            rot = obtener_rotacion(nA);
            nCos = Math.cos(rot);
	        nSen = Math.sin(rot);
            hacer_css(jelemento, nA, nCos, nSen);
            nA = nA + dA;
            if(pasos_faltantes > 0)
            {
                pasos_faltantes = pasos_faltantes - 1;
                setTimeout (paso, dT );
            }
            else
            {
                jelemento.data('Angulo', opciones.angle);
                opciones.callback();
            }
        }
	    paso();
	}
}
