function Shadows ( options ) {

    var shadows = this

    shadows.options = options
    shadows.options.maxSpan = shadows.options.span

    shadows.init = function () {

        shadows.textShadow = supports('textShadow')

        if ( !shadows.textShadow )
            return false

        var shadowsLength = shadows.options.shadows.length

        while ( shadowsLength-- )
            shadows.options.shadows[ shadowsLength ].angle = shadows.options.shadows[ shadowsLength ].angle  * Math.PI / 180

        shadows.apply( 100, 100 )

        document.onmousemove = function ( event ) {
            shadows.apply( event.clientX, event.clientY )
        }

    }

    shadows.apply = function ( x, y ) {

        var startX = shadows.options.element.offsetLeft - document.body.offsetLeft + 90,
            startY = shadows.options.element.offsetTop - document.body.offsetTop + 30

        x = x - startX
        y = y - startY

        shadows.options.span = Math.min( Math.max( Math.abs( x ), Math.abs( y ) ) / 20, shadows.options.maxSpan )

        var angle = Math.atan2( y , x )
        if ( angle < 0 ) angle += 2 * Math.PI;

        var textShadow = '',
            shadowsLength = shadows.options.shadows.length

        while ( shadowsLength-- ) {
            var shadow = shadows.options.shadows[ shadowsLength ]
                x = shadows.options.span * Math.cos( shadow.angle + angle ) + 'px ',
                y = shadows.options.span * Math.sin( shadow.angle + angle ) + 'px ',
                width = shadow.width + 'px '
            textShadow += x + y + width + shadow.color
            if ( shadowsLength )
                textShadow += ', '
        }

        shadows.options.element.style[ shadows.textShadow ] = textShadow

    }

    shadows.init()

}


var supports = (function() {

   var div = document.createElement('div'),
       vendors = 'Khtml Ms O Moz Webkit'.split(' '),
       len = vendors.length

   return function(prop) {

      if ( prop in div.style ) return prop

      prop = prop.replace(/^[a-z]/, function(val) {
         return val.toUpperCase()
      })

      while(len--) {
         if ( vendors[len] + prop in div.style ) {
            return vendors[len] + prop
         }
      }

      return false

   }

})()

