
function ms_zooming(options){
    var $=jQuery;
    options.duration=options.duration||1000;
    var paths=[{
        from:[1,0.8,1],
        to:[1,0,1.7]
        },{
        from:[0,0,1],
        to:[1,1,1.5]
        },{
        from:[1,0.8,1.5],
        to:[0.8,0,1.1]
        },{
        from:[1,0.5,1],
        to:[0.3,0.5,1.5]
        }];
    var Images=[];
    var curIdx=0;
    function calcPos(path){
        var w=options.width;
        var h=options.height;
        return{
            left:-w*(path[2]-1)*path[0],
            top:-h*(path[2]-1)*path[1],
            width:w*path[2]+"px"
            };
        
}
this.init=function(aCont){
    Images=$("img",aCont).get();
    $(Images).each(function(Index){
        var $this=$(this);
        if(!Index){
            $this.css(calcPos(paths[0].from)).show();
            $this.animate(calcPos(paths[0].to),{
                easing:"linear",
                queue:false,
                duration:(options.duration+options.delay)*1.5
                });
        }else{
            $this.hide();
        }
    });
};

this.go=function(new_index){
    $(Images).each(function(Index){
        var $this=$(this);
        if(Index==new_index){
            var path=paths[Index%paths.length];
            $this.stop(1,1).css(calcPos(path.from));
            $this.animate(calcPos(path.to),{
                easing:"linear",
                queue:false,
                duration:(options.duration+options.delay)*1.5
                });
            $this.fadeIn(options.duration);
        }
        if(Index==curIdx){
            $(this).fadeOut(options.duration);
        }
    });
curIdx=new_index;
return true;
};

}// -----------------------------------------------------------------------------------
jQuery.fn.magicSlider=function(options){
    var $this=this;
    var $=jQuery;
    options=$.extend({
        effect:function(options){
            var images;
            this.init=function(aCont){
                images=aCont.find("img");
                images.each(function(Index){
                    if(!Index){
                        $(this).show();
                    }else{
                        $(this).hide();
                    }
                });
        };
        
        this.go=function(new_index,curIdx){
            $(images.get(new_index)).fadeIn(options.duration);
            $(images.get(curIdx)).fadeOut(options.duration);
            return true;
        };
    
    },
    prev:"",
    next:"",
    duration:1000,
    delay:2000,
    outWidth:960,
    outHeight:360,
    width:960,
    height:360,
    caption:true,
    controls:true,
    autoPlay:true,
    bullets:true,
    onStep:function(){},
    stopOnHover:0
},options);
var $Elements=$this.find(".ms_images A");
var images=$Elements.find("IMG");
$Elements.each(function(index){
    var inner=$(this).html()||"";
    var pos=inner.indexOf(">",inner);
    if(pos>=0){
        $(this).data("descr",inner.substr(pos+1));
        if(pos<inner.length-1){
            $(this).html(inner.substr(0,pos+1));
        }
    }
    $(this).css({
    'font-size':0
});
});
var elementsCount=$Elements.length;
var frame=$("A.ms_frame",$this).get(0);
var curIdx=0;
function go(index){
    if(curIdx==index){
        return;
    }
    var current=effect.go(index,curIdx);
    if(!current){
        return;
    }
    if(typeof current!="object"){
        current=$Elements[index];
    }
    curIdx=index;
    go2(index);
    if(options.caption){
        setTitle(current);
    }
    options.onStep(curIdx);
}
function go2(index){
    if(options.bullets){
        setBullet(index);
    }
    if(frame){
        frame.setAttribute("href",$Elements.get(index).href);
    }
}
var autoPlayTimer;
function restartPlay(){
    stopPlay();
    if(options.autoPlay){
        autoPlayTimer=setTimeout(function(){
            go(curIdx<elementsCount-1?curIdx+1:0);
            restartPlay();
        },options.delay+options.duration);
    }
}
function stopPlay(){
    if(autoPlayTimer){
        clearTimeout(autoPlayTimer);
    }
    autoPlayTimer=null;
}
function forceGo(event,index){
    stopPlay();
    event.preventDefault();
    go(index);
    restartPlay();
}
$Elements.find("IMG").css("position","absolute");
if(typeof options.effect=="string"){
    options.effect=window["ms_"+options.effect];
}
var effect=new options.effect(options,$this);
effect.init($(".ms_images",$this));
$Elements.find("IMG").css("visibility","visible");
var ic=c=$(".ms_images",$this);
var t="";
c=t?$("<div></div>"):0;
if(c){
    c.css({
        position:"absolute",
        right:"2px",
        bottom:"2px",
        padding:"0 0 0 0"
    });
    ic.append(c);
}
if(c&&document.all){
    var f=$("<iframe src=\"javascript:false\"></iframe>");
    f.css({
        position:"absolute",
        left:0,
        top:0,
        width:"100%",
        height:"100%",
        filter:"alpha(opacity=0)"
    });
    f.attr({
        scrolling:"no",
        framespacing:0,
        border:0,
        frameBorder:"no"
    });
    c.append(f);
}
var d=c?$(document.createElement("A")):c;
if(d){
    d.css({
        position:"relative",
        display:"block",
        'background-color':"#E4EFEB",
        color:"#837F80",
        'font-family':"Lucida Grande,sans-serif",
        'font-size':"11px",
        'font-weight':"normal",
        'font-style':"normal",
        '-moz-border-radius':"5px",
        'border-radius':"5px",
        padding:"1px 5px",
        width:"auto",
        height:"auto",
        margin:"0 0 0 0",
        outline:"none"
    });
    d.attr({
        href:"ht"+"tp://"+t.toLowerCase()
        });
    d.html(t);
    d.bind("contextmenu",function(eventObject){
        return false;
    });
    c.append(d);
}
if(options.controls){
    var $next_photo=$("<a href=\"#\" class=\"ms_next\">"+options.next+"</a>");
    var $prev_photo=$("<a href=\"#\" class=\"ms_prev\">"+options.prev+"</a>");
    $this.append($next_photo);
    $this.append($prev_photo);
    $next_photo.bind("click",function(e){
        forceGo(e,curIdx<elementsCount-1?curIdx+1:0);
    });
    $prev_photo.bind("click",function(e){
        forceGo(e,curIdx>0?curIdx-1:elementsCount-1);
    });
}
function initBullets(){
    $bullets_cont=$this.find(".ms_bullets>div");
    $bullets=$("a",$bullets_cont);
    $bullets.click(function(e){
        forceGo(e,$(e.target).index());
    });
    $thumbs=$bullets.find("IMG");
    if($thumbs.length){
        var mainFrame=$("<div class=\"ms_bulframe\"/>").appendTo($bullets_cont);
        var imgContainer=$("<div/>").css({
            width:$thumbs.length+1+"00%"
            }).appendTo($("<div/>").appendTo(mainFrame));
        $thumbs.appendTo(imgContainer);
        $("<span/>").appendTo(mainFrame);
        var curIndex=-1;
        function moveTooltip(index){
            if(index<0){
                index=0;
            }
            $($bullets.get(curIndex)).removeClass("ms_overbull");
            $($bullets.get(index)).addClass("ms_overbull");
            mainFrame.show();
            var mainCSS={
                left:$bullets.get(index).offsetLeft-mainFrame.width()/2
                };
                
            var contCSS={
                left:-$thumbs.get(index).offsetLeft
                };
                
            if(curIndex<0){
                mainFrame.css(mainCSS);
                imgContainer.css(contCSS);
            }else{
                if(!document.all){
                    mainCSS.opacity=1;
                }
                mainFrame.stop().animate(mainCSS,"fast");
                imgContainer.stop().animate(contCSS,"fast");
            }
            curIndex=index;
        }
        $bullets.hover(function(){
            moveTooltip($(this).index());
        });
        var hideTime;
        $bullets_cont.hover(function(){
            if(hideTime){
                clearTimeout(hideTime);
                hideTime=0;
            }
            moveTooltip(curIndex);
        },function(){
            $bullets.removeClass("ms_overbull");
            if(document.all){
                if(!hideTime){
                    hideTime=setTimeout(function(){
                        mainFrame.hide();
                        hideTime=0;
                    },400);
                }
            }else{
            mainFrame.stop().animate({
                opacity:0
            },{
                duration:"fast",
                complete:function(){
                    mainFrame.hide();
                }
            });
        }
    });
$bullets_cont.click(function(e){
    forceGo(e,$(e.target).index());
});
}
}
function setBullet(new_index){
    $(".ms_bullets A",$this).each(function(index){
        if(index==new_index){
            $(this).addClass("ms_selbull");
        }else{
            $(this).removeClass("ms_selbull");
        }
    });
}
if(options.caption){
    $caption=$("<div class='ms-title' style='display:none'></div>");
    $this.append($caption);
    $caption.bind("mouseover",function(e){
        stopPlay();
    });
    $caption.bind("mouseout",function(e){
        restartPlay();
    });
}
function setTitle(A){
    var title=$("img",A).attr("title");
    var descr=$(A).data("descr");
    var $Title=$(".ms-title",$this);
    $Title.hide();
    if(title||descr){
        $Title.html((title?"<span>"+title+"</span>":"")+(descr?"<div>"+descr+"</div>":""));
        $Title.fadeIn(400,function(){
            if($.browser.msie){
                $(this).get(0).style.removeAttribute("filter");
            }
        });
}
}
if(options.bullets){
    initBullets();
}
go2(0);
if(options.caption){
    setTitle($Elements[0]);
}
if(options.stopOnHover){
    this.bind("mouseover",function(e){
        stopPlay();
    });
    this.bind("mouseout",function(e){
        restartPlay();
    });
}
restartPlay();
return this;
};


