/*
    CursorImage  класс для подвязки изображения к курсору
    
    Автор   :Акниньшин Д.А.
    Дата    :2009-03-07
    e-mail  :ada3000@yandex.ru
    
    Args - объект с параметрами.
    Параметры:
    
    imgSrc          - url картинки курсора
    targetElt       - эл-т над которым будет появляться курсор
    posTop          - вертикальный отступ от курсора(px)
    posLeft         - горизонтальный отступ от курсора(px)
    width           - ширина изображения
    height          - высота изображения
    className       - css класс для изображения
    textAreaSelector- jQuery селектор, для областей, где курсор не нужен. Например текст.
    
    Пример использования:
    
    var CursorElt;
    ...
    CursorElt=new CursorImage({
                imgSrc:'cursor.png',
                targetElt:document.body,
                posTop:10,
                posLeft:10,
                width:50,
                height:50,
                className:'Cursor',
                textAreaSelector:'.text_area'
                });
*/
function CursorImage(Args)
{
    if(Args==undefined) return;
    var me=this;
    
    var imgSrc=Args.imgSrc==undefined?'cursor.jpg':Args.imgSrc;
    var targetElt=Args.targetElt==undefined?$(document.body):$(Args.targetElt);
    
    var posTop=Args.posTop==undefined?10:Args.posTop;
    var posLeft=Args.posLeft==undefined?10:Args.posLeft;
    var width=Args.width==undefined?100:Args.width;
    var height=Args.height==undefined?10:Args.height;
    var className=Args.className==undefined?'':Args.className;
    var textAreaSelector=Args.textAreaSelector==undefined?'':Args.textAreaSelector;
    
    var allowMove=true;
    
    var elt=$(document.createElement("IMG"));
    
    var StartNext=null;
    var StartNextBegin=false;
    var Visible=false;
    CursorImage.prototype.StartNextFn=function(e,fn)
    {
        if(StartNext==null)
        {
            StartNext={e:e,fn:fn};
        }
        else
        if(StartNext.e!=e) StartNext={e:e,fn:fn};
        
        if(!StartNextBegin) me.AnimateEnd();
    }
    CursorImage.prototype.AnimateEnd=function()
    {
        StartNextBegin=false;
        if(StartNext!=null)
        {
            if(StartNext.fn!=undefined) StartNext.fn(StartNext.e);
            StartNext=null;
        }
    }
    CursorImage.prototype.Show=function()
    {
        Visible=true;
        elt.show('normal',me.AnimateEnd);
        StartNextBegin=true;
    }
    CursorImage.prototype.Hide=function()
    {
        Visible=false;
        elt.hide('normal',me.AnimateEnd);
        StartNextBegin=true;
    }
    
    
    CursorImage.prototype.Move=function(e)
    {
        if(!allowMove) return;
        //alert('move');
        if(!Visible) me.StartNextFn('show',me.Show);
        elt.css('top',(e.pageY+posTop).toString()+"px");
        elt.css('left',(e.pageX+posLeft).toString()+"px");
    }
    CursorImage.prototype.MoveText=function(e)
    {
        
        allowMove=false;
        e.stopPropagation();
        e.preventDefault();
        

        if(Visible)  me.StartNextFn('hide',me.Hide);
        return false;
        
    }
    CursorImage.prototype.OverText=function(e)
    {
        return;
        allowMove=false;
        me.StartNextFn('hide',me.Hide);
    }
    CursorImage.prototype.OutText=function(e)
    {
        return;
        allowMove=true;
        me.StartNextFn('show',me.Show);
    }
    CursorImage.prototype.Over=function(e)
    {
        if(!Visible) me.StartNextFn('show',me.Show);
        
        allowMove=true;
        
        elt.css('top',(e.pageY+posTop).toString()+"px");
        elt.css('left',(e.pageX+posLeft).toString()+"px");
    }
    CursorImage.prototype.Out=function(e)
    {
        var curY=e.pageY-$(document.body).scrollTop();
        var curX=e.pageX-$(document.body).scrollLeft();
        
        if(curX<=0 || curY<=0)if(Visible)  me.StartNextFn('hide',me.Hide);
    }
    CursorImage.prototype.Init=function()
    {
        elt.css('width',width);
        elt.css('height',height);
        elt.attr('className',className);
        
        elt.attr("src",imgSrc);
        elt.css("position","absolute");
        elt.css("display","none");
        elt.css("z-index","1000000");
        
        $(document.body).append(elt);
        
        targetElt.mousemove(me.Move);
        targetElt.mouseover(me.Over);
        targetElt.mouseout(me.Out);
        if(textAreaSelector!='')
            $(textAreaSelector).live('mousemove',me.MoveText)
            .live('mouseover',me.OverText)
            .live('mouseout',me.OutText);
    
    }
    me.Init();
}
        
