// TJPzoom 3 * János Pál Tóth
// 2007.05.08
// Docs @ http://valid.tjp.hu/tjpzoom/ 
// News @ http://tjpzoom.blogspot.com/

function TJPzoomswitch(obj){
    TJPon[obj] = ((TJPon[obj]) ? (0) : (1));
    return TJPon[obj];
}

function TJPzoomif(obj, highres){
    if (TJPon[obj]) {
        TJPzoom(obj, highres);
    }
}

function TJPzoom(obj, highres){
    if (!obj.style.width) {
        if (obj.width > 0) {
            //educated guess
            obj.style.width = obj.width + 'px';
            obj.style.height = obj.height + 'px';
        }
    }
    if (typeof(highres) != typeof('')) {
        highres = obj.src
    }
    var TJPstage = document.createElement("div");
    TJPstage.style.width = obj.style.width;
    TJPstage.style.height = obj.style.height;
    TJPstage.style.overflow = 'hidden';
    TJPstage.style.position = 'absolute';
    if (typeof(TJPstage.style.filter) != typeof(nosuchthing)) {
        //hi IE
        if (navigator.appVersion.indexOf('Mac') == -1) { //hi Mac IE
            TJPstage.style.filter = 'alpha(opacity=0)';
            TJPstage.style.backgroundColor = '#ffffff';
        }
    }
    else {
        //hi decent gentlemen
        TJPstage.style.backgroundImage = 'transparent';
    }
    TJPstage.setAttribute('onmousemove', 'TJPhandlemouse(event,this);');
    TJPstage.setAttribute('onmousedown', 'TJPhandlemouse(event,this);');
    TJPstage.setAttribute('onmouseup', 'TJPhandlemouse(event,this);');
    TJPstage.setAttribute('onmouseout', 'TJPhandlemouse(event,this);');
    if (navigator.userAgent.indexOf('MSIE') > -1) {
        TJPstage.onmousemove = function(){
            TJPhandlemouse(event, this);
        }
        TJPstage.onmousedown = function(){
            TJPhandlemouse(event, this);
        }
        TJPstage.onmouseup = function(){
            TJPhandlemouse(event, this);
        }
        TJPstage.onmouseout = function(){
            TJPhandlemouse(event, this);
        }
    }
    obj.parentNode.insertBefore(TJPstage, obj);
    
    TJPwin = document.createElement("div");
    TJPwin.style.width = '0px';
    TJPwin.style.height = '0px';
    TJPwin.style.overflow = 'hidden';
    TJPwin.style.position = 'absolute';
    tw1 = '<div style="position:absolute;overflow:hidden;margin:';
    TJPwin.innerHTML = tw1 + TJPshadowthick + 'px 0 0 ' + TJPshadowthick + 'px; background-color:' + TJPbordercolor + '; width:' + (TJPzoomwidth - TJPshadowthick * 2) + 'px;height:' + (TJPzoomheight - TJPshadowthick * 2) + 'px"></div>' +
    tw1 +
    (TJPshadowthick + TJPborderthick) +
    'px 0 0 ' +
    (TJPshadowthick + TJPborderthick) +
    'px; width:' +
    (TJPzoomwidth - TJPshadowthick * 2 - TJPborderthick * 2) +
    'px;height:' +
    (TJPzoomheight - TJPshadowthick * 2 - TJPborderthick * 2) +
    'px;"><img src="' +
    highres +
    '" style="margin:0;padding:0;border:0; width:' +
    (TJPzoomamount * parseInt(obj.style.width)) +
    'px;height:' +
    (TJPzoomamount * parseInt(obj.style.height)) +
    'px;" ' +
    ((highres != obj.src) ? ('onload="if(this.parentNode) {this.parentNode.parentNode.getElementsByTagName(\'div\')[2].style.display=\'none\';}"') : ('')) +
    '/></div>';
    if (highres != obj.src) {
        TJPwin.innerHTML += '<div style="position:absolute; margin:' + (TJPshadowthick + TJPborderthick) + 'px 0 0 ' + (TJPshadowthick + TJPborderthick) + 'px;">' + TJPloading + '</div>';
    }
    if (TJPshadowthick > 0) {
        st1 = '<span style="position:absolute; display:inline-block; margin: ';
        st2 = 'filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=\'scale\',src='
        st3 = 'filter:alpha(opacity=0);margin:0;padding:0;border:0;"/></span>';
        TJPwin.innerHTML += st1 + '0 0 0 0    ; width:' + TJPshadowthick * 2 + 'px; height:' + TJPshadowthick * 2 + 'px;' + st2 + '\'' + TJPshadow + 'nw.png\')"><img src="' + TJPshadow + 'nw.png" style="width:' + TJPshadowthick * 2 + 'px; height:' + TJPshadowthick * 2 + 'px;' + st3 +
        st1 +
        '0 0 0 ' +
        (TJPzoomwidth - TJPshadowthick * 2) +
        'px; width:' +
        TJPshadowthick * 2 +
        'px; height:' +
        TJPshadowthick * 2 +
        'px;' +
        st2 +
        '\'' +
        TJPshadow +
        'ne.png\')"><img src="' +
        TJPshadow +
        'ne.png" style="width:' +
        TJPshadowthick * 2 +
        'px; height:' +
        TJPshadowthick * 2 +
        'px;' +
        st3 +
        st1 +
        '' +
        (TJPzoomheight - TJPshadowthick * 2) +
        'px 0 0 0px; width:' +
        TJPshadowthick * 2 +
        'px; height:' +
        TJPshadowthick * 2 +
        'px;' +
        st2 +
        '\'' +
        TJPshadow +
        'sw.png\',sizingMethod=\'scale\')"><img src="' +
        TJPshadow +
        'sw.png" style="width:' +
        TJPshadowthick * 2 +
        'px; height:' +
        TJPshadowthick * 2 +
        'px;' +
        st3 +
        st1 +
        '' +
        (TJPzoomheight - TJPshadowthick * 2) +
        'px 0 0 ' +
        (TJPzoomwidth - TJPshadowthick * 2) +
        'px; width:' +
        TJPshadowthick * 2 +
        'px; height:' +
        TJPshadowthick * 2 +
        'px;' +
        st2 +
        '\'' +
        TJPshadow +
        'se.png\',sizingMethod=\'scale\')"><img src="' +
        TJPshadow +
        'se.png" style="width:' +
        TJPshadowthick * 2 +
        'px; height:' +
        TJPshadowthick * 2 +
        'px;' +
        st3 +
        st1 +
        '0 0 0 ' +
        (TJPshadowthick * 2) +
        'px; width:' +
        (TJPzoomwidth - TJPshadowthick * 4) +
        'px; height:' +
        TJPshadowthick * 2 +
        'px;' +
        st2 +
        '\'' +
        TJPshadow +
        'n.png\',sizingMethod=\'scale\')"><img src="' +
        TJPshadow +
        'n.png" style="width:' +
        (TJPzoomwidth - TJPshadowthick * 4) +
        'px; height:' +
        TJPshadowthick * 2 +
        'px;' +
        st3 +
        st1 +
        '' +
        (TJPshadowthick * 2) +
        'px 0 0 0; width:' +
        (TJPshadowthick * 2) +
        'px; height:' +
        (TJPzoomheight - TJPshadowthick * 4) +
        'px;' +
        st2 +
        '\'' +
        TJPshadow +
        'w.png\',sizingMethod=\'scale\')"><img src="' +
        TJPshadow +
        'w.png" style="width:' +
        (TJPshadowthick * 2) +
        'px; height:' +
        (TJPzoomheight - TJPshadowthick * 4) +
        'px;' +
        st3 +
        st1 +
        '' +
        (TJPshadowthick * 2) +
        'px 0 0 ' +
        (TJPzoomwidth - TJPshadowthick * 2) +
        'px; width:' +
        (TJPshadowthick * 2) +
        'px; height:' +
        (TJPzoomheight - TJPshadowthick * 4) +
        'px;' +
        st2 +
        '\'' +
        TJPshadow +
        'e.png\',sizingMethod=\'scale\')"><img src="' +
        TJPshadow +
        'e.png" style="width:' +
        (TJPshadowthick * 2) +
        'px; height:' +
        (TJPzoomheight - TJPshadowthick * 4) +
        'px;' +
        st3 +
        st1 +
        '' +
        (TJPzoomheight - TJPshadowthick * 2) +
        'px 0 0 ' +
        (TJPshadowthick * 2) +
        'px; width:' +
        (TJPzoomwidth - TJPshadowthick * 4) +
        'px; height:' +
        TJPshadowthick * 2 +
        'px;' +
        st2 +
        '\'' +
        TJPshadow +
        's.png\',sizingMethod=\'scale\')"><img src="' +
        TJPshadow +
        's.png" style="width:' +
        (TJPzoomwidth - TJPshadowthick * 4) +
        'px; height:' +
        TJPshadowthick * 2 +
        'px;' +
        st3;
        
    };
    //marker - zoomer
    obj.parentNode.insertBefore(TJPwin, TJPstage);
}


function TJPfindposy(obj){
    var curtop = 0;
    if (!obj) {
        return 0;
    }
    if (obj.offsetParent) {
        while (obj.offsetParent) {
            curtop += obj.offsetTop
            obj = obj.offsetParent;
        }
    }
    else 
        if (obj.y) {
            curtop += obj.y;
        }
    return curtop;
}

function TJPfindposx(obj){
    var curleft = 0;
    if (!obj) {
        return 0;
    }
    if (obj && obj.offsetParent) {
        while (obj.offsetParent) {
            curleft += obj.offsetLeft
            obj = obj.offsetParent;
        }
    }
    else 
        if (obj.x) {
            curleft += obj.x;
        }
    return curleft;
}


function TJPhandlemouse(evt, obj){
    var evt = evt ? evt : window.event ? window.event : null;
    if (!evt) {
        return false;
    }
    if (evt.pageX) {
        nowx = evt.pageX - TJPfindposx(obj) - TJPadjustx;
        nowy = evt.pageY - TJPfindposy(obj) - TJPadjusty;
    }
    else {
        if (document.documentElement && document.documentElement.scrollTop) {
            nowx = evt.clientX + document.documentElement.scrollLeft - TJPfindposx(obj) - TJPadjustx;
            nowy = evt.clientY + document.documentElement.scrollTop - TJPfindposy(obj) - TJPadjusty;
        }
        else {
            nowx = evt.x + document.body.scrollLeft - TJPfindposx(obj) - TJPadjustx;
            nowy = evt.y + document.body.scrollTop - TJPfindposy(obj) - TJPadjusty;
        }
    }
    if (evt.type == 'mousemove') {
        TJPsetwin(obj, nowx, nowy);
    }
    else 
        if (evt.type == 'mousedown') {
            TJPmouse = 1;
            TJPmousey = nowy;
        }
        else 
            if (evt.type == 'mouseup') {
                TJPmouse = 0;
            }
            else 
                if (evt.type == 'mouseout') {
                    if (navigator.appVersion.indexOf('Mac') == -1 || navigator.appVersion.indexOf('MSIE') == -1) { //hi Mac IE
                        x = obj.parentNode;
                        x.removeChild(x.getElementsByTagName('div')[0]);
                        x.removeChild(x.getElementsByTagName('div')[0]);
                    }
                }
}


// TJPzoom 3 * János Pál Tóth
// Docs @ http://valid.tjp.hu/tjpzoom/ 
// News @ http://tjpzoom.blogspot.com/


function TJPsetwin(obj, nowx, nowy){
    stage = obj.parentNode.getElementsByTagName('div')[0];
    if (TJPmouse == 1) {
        if (Math.abs(nowy - TJPmousey) >= 1) {
            TJPzoomamount *= ((nowy > TJPmousey) ? (0.909) : (1.1));
            TJPmousey = nowy;
            if (TJPzoomamount < TJPzoomamountmin) {
                TJPzoomamount = TJPzoomamountmin;
            }
            if (TJPzoomamount > TJPzoomamountmax) {
                TJPzoomamount = TJPzoomamountmax;
            }
            stage.getElementsByTagName('div')[1].getElementsByTagName('img')[0].style.width = parseInt(obj.style.width) * TJPzoomamount + 'px';
            stage.getElementsByTagName('div')[1].getElementsByTagName('img')[0].style.height = parseInt(obj.style.height) * TJPzoomamount + 'px';
        }
    }
    stage.style.marginLeft = nowx - TJPzoomoffsetx + 'px';
    stage.style.marginTop = nowy - TJPzoomoffsety + 'px';
    clip1 = 0;
    clip2 = TJPzoomwidth;
    clip3 = TJPzoomheight;
    clip4 = 0;
    nwidth = TJPzoomwidth;
    nheight = TJPzoomheight;
    if (nowx - TJPzoomoffsetx < 0) {
        clip4 = TJPzoomoffsetx - nowx;
    }
    else 
        if (parseFloat(nowx - TJPzoomoffsetx + TJPzoomwidth) > parseFloat(obj.style.width)) {
            clip2 = TJPzoomoffsetx - nowx + parseFloat(obj.style.width);
            nwidth = TJPzoomoffsetx - nowx + parseInt(obj.style.width) + TJPborderthick;
        }
    
    if (nowy - TJPzoomoffsety < 0) {
        clip1 = TJPzoomoffsety - nowy;
    }
    else 
        if (parseFloat(nowy - TJPzoomoffsety + TJPzoomheight) > parseFloat(obj.style.height)) {
            clip3 = TJPzoomoffsety - nowy + parseFloat(obj.style.height)
            nheight = TJPzoomoffsety - nowy + parseFloat(obj.style.height) + TJPborderthick;
        }
    stage.style.width = nwidth + 'px';
    stage.style.height = nheight + 'px';
    stage.style.clip = 'rect(' + clip1 + 'px,' + clip2 + 'px,' + clip3 + 'px,' + clip4 + 'px)';
    stage.getElementsByTagName('div')[1].getElementsByTagName('img')[0].style.marginLeft = TJPzoomamount * (TJPzoomoffsetx - TJPzoomwidth / 2 - nowx) + TJPzoomwidth / 2 - TJPborderthick - TJPshadowthick + 'px';
    stage.getElementsByTagName('div')[1].getElementsByTagName('img')[0].style.marginTop = TJPzoomamount * (TJPzoomoffsety - TJPzoomheight / 2 - nowy) + TJPzoomheight / 2 - TJPborderthick - TJPshadowthick + 'px';
}

function TJPinit(){
    TJPadjustx = 0;
    TJPadjusty = 0;
    if (navigator.userAgent.indexOf('MSIE') > -1) {
        TJPadjustx = 2;
        TJPadjusty = 2;
    }
    if (navigator.userAgent.indexOf('Opera') > -1) {
        TJPadjustx = 0;
        TJPadjusty = 0;
    }
    if (navigator.userAgent.indexOf('Safari') > -1) {
        TJPadjustx = 1;
        TJPadjusty = 2;
    }
}

// configuration - do not modify the following, instead read the behaviors.html file in the tutorial!
var TJPon = new Array();
var TJPadjustx, TJPadjusty;
var TJPmouse = 0;
var TJPmousey;
var TJPloading = '<div style="background-color:transparent;color:#333333;padding:2px;font-family:verdana,arial,helvetica;font-size: 10px;">&nbsp;</div>';

var TJPzoomwidth = 160;
var TJPzoomheight = 160;

var TJPzoomoffsetx = TJPzoomwidth / 2;
var TJPzoomoffsety = TJPzoomheight / 2;

var TJPzoomamount = 2;
var TJPzoomamountmax = 2;
var TJPzoomamountmin = 2;

var TJPborderthick = 0;
var TJPbordercolor = 'transparent';

var TJPshadowthick = 0;
var TJPshadow = 'images/dropshadow/';

TJPinit();

// TJPzoom 3 * János Pál Tóth
// Docs @ http://valid.tjp.hu/tjpzoom/ 
// News @ http://tjpzoom.blogspot.com/