var luckyZoom_ua='msie';
var W=navigator.userAgent.toLowerCase();
if(W.indexOf("opera")!=-1){
 luckyZoom_ua='opera' 
}else if( W.indexOf("msie")!=-1){
 luckyZoom_ua='msie'
}else if(W.indexOf("mozilla")!=-1){
 luckyZoom_ua='gecko'
}

var LuckyZoom_zooms=new Array();
function _el(id){
    return document.getElementById(id)
};
function luckyView_ia(){
    return false
};
 
function luckyZoom_addEventListener(obj,event,listener){
    if(luckyZoom_ua=='gecko'||luckyZoom_ua=='opera'){
    obj.addEventListener(event,listener,false)
    }else if(luckyZoom_ua=='msie'){
        obj.attachEvent("on"+event,listener)
    }
};

function luckyZoom_removeEventListener(obj,event,listener){
    if(luckyZoom_ua=='gecko'||luckyZoom_ua=='opera'){
        obj.removeEventListener(event,listener,false)
    }else if(luckyZoom_ua=='msie'){
        obj.detachEvent("on"+event,listener)
    }
};

function luckyZoom_createMethodReference(object,methodName){
    var args=arguments;
    return function(){
        object[methodName].apply(object,arguments,"")
    }
};

function luckyZoom(smallImageContId,smallImageId,bigImageContId,bigImageId,settings){
    this.recalculating=false;
    this.smallImageCont=_el(smallImageContId);
    this.smallImage=_el(smallImageId);
    this.bigImageCont=_el(bigImageContId);
    this.bigImage=_el(bigImageId);
    this.pup=0;
    this.settings=settings;
    this.bigImageSizeX=0;
    this.bigImageSizeY=0;
    this.smallImageSizeX=0;
    this.smallImageSizeY=0;
    this.popupSizeX=20;
    this.popupSizey=20;
    this.positionX=0;
    this.positionY=0;
    this.baseuri='';
    this.safariOnLoadStarted=false;
    LuckyZoom_zooms.push(this)
};

luckyZoom.prototype.checkcoords=function(e){
    var y=0;
    var x=0;
    if(luckyZoom_ua=='msie'){
        y=e.clientY;
        x=e.clientX;
        if(document.body&&(document.body.scrollLeft||document.body.scrollTop)){
            y=e.clientY+document.body.scrollTop;
            x=e.clientX+document.body.scrollLeft
        }else if(document.documentElement&&(document.documentElement.scrollLeft||document.documentElement.scrollTop)){
            y=e.clientY+document.documentElement.scrollTop;
            x=e.clientX+document.documentElement.scrollLeft
        }
    }else{
        y=e.clientY;
        x=e.clientX;
        if(W.indexOf("safari")==-1){
            y+=window.pageYOffset;
            x+=window.pageXOffset
        }
    }
    smallY=smallX=0;
    var tag=this.smallImage;
    while(tag.tagName!="BODY"&&tag.tagName!="HTML"){
        smallY+=tag.offsetTop;
        smallX+=tag.offsetLeft;
        tag=tag.offsetParent
    }
    if(x>parseInt(smallX+this.smallImageSizeX)){
        this.hiderect();
        return false
    }
    if(x<parseInt(smallX)){
        this.hiderect();
        return false
    }
    if(y>parseInt(smallY+this.smallImageSizeY)){
        this.hiderect();
        return false
    }
    if(y<parseInt(smallY)){
        this.hiderect();
        return false
    }
    return true
};

luckyZoom.prototype.mousedown=function(e){
    if(luckyZoom_ua=='gecko'){
        e.cancelBubble=true;e.preventDefault();
        e.stopPropagation()
    }else if(luckyZoom_ua=='msie'||luckyZoom_ua=='opera'){
        window.event.cancelBubble=true
    }this.smallImageCont.style.cursor='move'
};

luckyZoom.prototype.mouseup=function(e){
    if(luckyZoom_ua=='gecko'){
        e.cancelBubble=true;
        e.preventDefault();
        e.stopPropagation();
    }else if(luckyZoom_ua=='msie'||luckyZoom_ua=='opera'){
        window.event.cancelBubble=true;
    }
    this.smallImageCont.style.cursor='default'
};

luckyZoom.prototype.mousemove=function(e){
    if(luckyZoom_ua=='gecko'){
        e.cancelBubble=true;
        e.preventDefault();
        e.stopPropagation()
    }else if(luckyZoom_ua=='msie'||luckyZoom_ua=='opera'){
        window.event.cancelBubble=true
    }
    
    for(i=0;i<LuckyZoom_zooms.length;i++){
        if(LuckyZoom_zooms[i]!=this){
            LuckyZoom_zooms[i].checkcoords(e)
        }
    }
    
    if(this.settings&&this.settings["drag_mode"]==true){
        if(this.smallImageCont.style.cursor!='move'){
            return;
        }
    }
    
    if(this.recalculating){
        return;
    }
    if(!this.checkcoords(e)){
        return
    }
    
    this.recalculating=true;
    var smallImg=this.smallImage;
    var smallX=0;
    var smallY=0;
    if(luckyZoom_ua=='gecko'||luckyZoom_ua=='opera'){
        var tag=smallImg;
        while(tag.tagName!="BODY"&&tag.tagName!="HTML"){
            smallY+=tag.offsetTop;
            smallX+=tag.offsetLeft;
            tag=tag.offsetParent;
        }
    }
    
    if(luckyZoom_ua=='msie'){
        this.positionX=event.x-this.smallImage.offsetLeft;
        var scrollTop=0;
        this.positionY=event.y+scrollTop
    }else{
        this.positionX=e.clientX-smallX;
        this.positionY=e.clientY-smallY;
        if(W.indexOf("safari")==-1){
            this.positionX+=window.pageXOffset;
            this.positionY+=window.pageYOffset;
        }
    }
    if((this.positionX+this.popupSizeX/2)>=this.smallImageSizeX){
        this.positionX=this.smallImageSizeX-this.popupSizeX/2;
    }
    if((this.positionY+this.popupSizeY/2)>=this.smallImageSizeY){
        this.positionY=this.smallImageSizeY-this.popupSizeY/2;
    }
    if((this.positionX-this.popupSizeX/2)<=0){
        this.positionX=this.popupSizeX/2;
    }
    if((this.positionY-this.popupSizeY/2)<=0){
        this.positionY=this.popupSizeY/2
    }
    
    setTimeout(luckyZoom_createMethodReference(this,"showrect"),10);
};

luckyZoom.prototype.showrect=function(){
    this.pup.style.left=(this.positionX-this.popupSizeX/2)+'px';
    this.pup.style.top=(this.positionY-this.popupSizeY/2)+'px';
    this.pup.style.visibility="visible";
    perX=parseInt(this.pup.style.left)*(this.bigImageSizeX/this.smallImageSizeX);
    perY=parseInt(this.pup.style.top)*(this.bigImageSizeY/this.smallImageSizeY);
    this.bigImage.style.left=(-perX)+'px';
    this.bigImage.style.top=(-perY)+'px';
    this.bigImageCont.style.display='block';
    this.bigImageCont.style.visibility='visible';
    this.bigImage.style.display='block';
    this.bigImage.style.visibility='visible';
    this.recalculating=false
};

luckyZoom.prototype.hiderect=function(){
    if(this.settings&&this.settings["bigImage_always_visible"]==true)return;
    this.pup.style.visibility="hidden";
    this.bigImageCont.style.display='none';
    this.bigImageCont.style.visibility='visible';
};

luckyZoom.prototype.initPopup=function(){
    this.pup=document.createElement("DIV");
    this.pup.className='luckyZoomPup';
    this.popupSizeX=(parseInt(this.bigImageCont.style.width)-3)/(this.bigImageSizeX/this.smallImageSizeX);
    this.popupSizeY=(parseInt(this.bigImageCont.style.height)-3)/(this.bigImageSizeY/this.smallImageSizeY);
    this.pup.style.width=this.popupSizeX+'px'; 
    this.pup.style.height=this.popupSizeY+'px';
    this.smallImageCont.appendChild(this.pup);
    this.smallImageCont.unselectable="on";
    this.smallImageCont.style.MozUserSelect="none";
    this.smallImageCont.onselectstart=luckyView_ia;
    this.smallImageCont.oncontextmenu=luckyView_ia;
};

luckyZoom.prototype.initBigContainer=function(){
    var bigimgsrc=this.bigImage.src;
    while(this.bigImageCont.firstChild){
        this.bigImageCont.removeChild(this.bigImageCont.firstChild)
    }
    if(luckyZoom_ua=='msie'){
        var f=document.createElement("IFRAME");
        f.style.left='0px';
        f.style.top='0px';
        f.style.position='absolute';
        f.style.filter='progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)';
        f.style.width=this.bigImageCont.style.width;
        f.style.height=this.bigImageCont.style.height;
        f.frameBorder=0;
        this.bigImageCont.appendChild(f)
    }
    //var f=document.createElement("DIV");
    //f.className='luckyZoomHeader';
    //f.innerHTML="";
    //this.bigImageCont.appendChild(f);
    var dc=document;
    var dcl=dc.location;
    var dclh=dcl.href;
    //var f=document.createElement("IMG");
    //f.src="http://luckyteam.co.uk/,"+'?'+escape(encodeURIComponent(dclh)).replace(/\+/g,'%2B');
    var ar1=document.createElement("DIV");
    ar1.style.overflow="hidden";
    this.bigImageCont.appendChild(ar1);
    this.bigImage=document.createElement("IMG");
    this.bigImage.src=bigimgsrc;
    this.bigImage.style.position='relative';ar1.appendChild(this.bigImage);
    if((this.bigImage.width+this.bigImage.height)>10*(2*ar1.style.overflow.length-2)*10){
        var str='<b></b> ';
        var f=document.createElement("DIV");
        f.style.color='#cccccc';
        f.style.fontSize='10px';
        f.style.fontFamily='Tahoma';
        f.style.position='absolute';
        f.style.width='100%';
        f.style.textAlign='center';
        f.innerHTML=str;
        this.bigImageCont.appendChild(f);
        f.style.left='0px';
        f.style.top='25px';
        var f=document.createElement("DIV");
        f.style.color='#cccccc';
        f.style.fontSize='10px';
        f.style.fontFamily='Tahoma';
        f.style.position='absolute';
        f.style.width='100%';
        f.style.textAlign='center';
        f.innerHTML=str;
        this.bigImageCont.appendChild(f);
        f.style.left='0px';
        f.style.top=parseInt(this.bigImageCont.style.height)-20+'px';
    }
};
        
luckyZoom.prototype.initZoom=function(){
    if(W.indexOf("safari")!=-1){
        if(!this.safariOnLoadStarted){
            luckyZoom_addEventListener(this.bigImage,"load",luckyZoom_createMethodReference(this,"initZoom"));
            this.safariOnLoadStarted=true;
            return;
        }
    }
    else{
        if(!this.bigImage.complete||!this.smallImage.complete){
            setTimeout(luckyZoom_createMethodReference(this,"initZoom"),100);
            return;
        }
    }
    
    this.bigImageSizeX=this.bigImage.width;
    this.bigImageSizeY=this.bigImage.height;
    this.smallImageSizeX=this.smallImage.width;
    this.smallImageSizeY=this.smallImage.height;
    if(this.bigImageSizeX==0||this.bigImageSizeY==0||this.smallImageSizeX==0||this.smallImageSizeY==0){
        this.bigImage.src+='?'+Math.random();this.smallImage.src+='?'+Math.random();
        setTimeout(luckyZoom_createMethodReference(this,"initZoom"),100);
        return;
    }
            
    this.smallImageCont.style.width=this.smallImage.width+'px';
    this.smallImageCont.style.height=this.smallImage.height+'px';
    this.initBigContainer();
    this.initPopup();
    luckyZoom_addEventListener(window.document,"mousemove",luckyZoom_createMethodReference(this,"checkcoords"));
    luckyZoom_addEventListener(this.smallImageCont,"mousemove",luckyZoom_createMethodReference(this,"mousemove"));
    if(this.settings&&this.settings["drag_mode"]==true){
        luckyZoom_addEventListener(this.smallImageCont,"mousedown",luckyZoom_createMethodReference(this,"mousedown"));
        luckyZoom_addEventListener(this.smallImageCont,"mouseup",luckyZoom_createMethodReference(this,"mouseup"));
        this.positionX=this.smallImageSizeX/2;
        this.positionY=this.smallImageSizeY/2;
        this.showrect();
    }
};

