/*
        PNRender Link Preview Plugin 
                           for ArtViper Website Thumbnails
               
        
        Author:   Björn 'bof' Böttcher (bjoern (AT) n4rf.de)
        Website:  http://www.n4rf.net
        Version:  1.0
        Date:     2007-02-05
        
        ArtViper Website Thumbnails: www.artviper.de/tools.php
          
        
        ----------------------------------------
        
        A link preview system that uses the rather good snapshot service available
        from websnapr.com to display thumbnail previews.

        References:
        
        Wesnapr: http://www.websnapr.com
        Dustan Diaz: http://www.dustindiaz.com/sweet-titles-finalized
        Arc90: http://lab.arc90.com/2006/07/link_thumbnail.php
*/
var artviper = {
        x:0,
        y:0,
        obj:{},
        img:null,
        lnk:null,
        timer:null,
        opacityTimer:null,
        errorTimer:null,
        hidden:true,
        linkPool: {},
        //baseURI: "./",
        imageCache: [],
        init: function() {
                var lnks = document.getElementsByTagName('a');
                var i = lnks.length || 0;
                var cnt = 0;
                while(i--) {
                        //if(lnks[i].className && lnks[i].className.search(/websnapr/) != -1) {
                        if(artviper.isexternal(lnks[i])==true) {
                                artviper.addEvent(lnks[i], ["focus", "mouseover"], artviper.initThumb);
                                artviper.addEvent(lnks[i], ["blur",  "mouseout"],  artviper.hideThumb);
                                artviper.linkPool[lnks[i].href] = cnt++;
                        }
                }
                if(cnt) {
                        artviper.preloadImages();
                        artviper.obj = document.createElement('div');

                        artviper.ind = document.createElement('div');
                        //Safari could require this ? div.appendChild(document.createTextNode(String.fromCharCode(160)));
                        artviper.ind.className= "imageLoaded";
                        artviper.img = document.createElement('img');
                        artviper.img.alt = "preview";
                        artviper.addEvent(artviper.img, ["load"], artviper.imageLoaded);
                        artviper.addEvent(artviper.img, ["error"], artviper.imageError);
                        artviper.obj.id = "fdImageThumb";
                        artviper.obj.style.visibility = "hidden";
                        artviper.obj.style.top = "0";
                        artviper.obj.style.left = "0";
                        artviper.addEvent(artviper.img, ["mouseout"],  artviper.hideThumb);
                        artviper.obj.appendChild(artviper.ind);
                        artviper.obj.appendChild(artviper.img);
                        document.getElementsByTagName('body')[0].appendChild(artviper.obj);
                }
        },
        isexternal: function(host) {
	        if (host == "") return false;
	        var httptest = /^http/i;
	        if(httptest.test(host)) {
	            var expr = new RegExp(artviper.baseURL, "i");
	            if (expr.test(host)) return false;
	            return true;
            }
            return false;
        },
        preloadImages: function() {
                var imgList = ["back_lt.png", "back_lb.png", "back_rt.png", "back_rb.png", "error.gif", "loading.jpg"];
                var imgObj  = document.createElement('img');

                for(var i = 0, img; img = imgList[i]; i++) {
                        artviper.imageCache[i] = imgObj.cloneNode(false);
                        artviper.imageCache[i].src = artviper.baseURI + img;
                }
        },
        imageLoaded: function() {
                if(artviper.errorTimer) clearTimeout(artviper.errorTimer);
                if(!artviper.hidden) artviper.img.style.visibility = "visible";
                artviper.ind.className= "imageLoaded";
                artviper.ind.style.visibility = "hidden";
        },
        imageError: function(e) {
                if(artviper.errorTimer) clearTimeout(artviper.errorTimer);
                artviper.ind.className= "imageError";
                artviper.errorTimer = window.setTimeout("artviper.hideThumb()",2000);
        },
        initThumb: function(e) {
                e = e || event;

                artviper.lnk       = this;
                var positionClass       = "left";

                var heightIndent;
                var indentX = 0;
                var indentY = 0;
                
                if(String(e.type).toLowerCase().search(/mouseover/) != -1) {
                        if (document.captureEvents) {
                                artviper.x = e.pageX;
                                artviper.y = e.pageY;
                        } else if ( window.event.clientX ) {
                                artviper.x = window.event.clientX+document.documentElement.scrollLeft;
                                artviper.y = window.event.clientY+document.documentElement.scrollTop;
                        }
                        indentX = 10;
                        heightIndent = parseInt(artviper.y-(artviper.obj.offsetHeight))+'px';
                } else {
                        var obj = this;
                        var curleft = curtop = 0;
                        if (obj.offsetParent) {
                                curleft = obj.offsetLeft;
                                curtop = obj.offsetTop;
                                while (obj = obj.offsetParent) {
                                        curleft += obj.offsetLeft;
                                        curtop += obj.offsetTop;
                                }
                        }
                        curtop += this.offsetHeight;

                        artviper.x = curleft;
                        artviper.y = curtop;

                        heightIndent = parseInt(artviper.y-(artviper.obj.offsetHeight)-this.offsetHeight)+'px';
                }
                
                if ( parseInt(document.documentElement.clientWidth+document.documentElement.scrollLeft) < parseInt(artviper.obj.offsetWidth+artviper.x) + indentX) {
                        artviper.obj.style.left = parseInt(artviper.x-(artviper.obj.offsetWidth+indentX))+'px';
                        positionClass = "right";
                } else {
                        artviper.obj.style.left = (artviper.x+indentX)+'px';
                }
                if ( parseInt(document.documentElement.clientHeight+document.documentElement.scrollTop) < parseInt(artviper.obj.offsetHeight+artviper.y) + indentY ) {
                        artviper.obj.style.top = heightIndent;
                        positionClass += "Top";
                } else {
                        artviper.obj.style.top = (artviper.y + indentY)+'px';
                        positionClass += "Bottom";
                }

                artviper.obj.className = positionClass;
                artviper.timer = window.setTimeout("artviper.showThumb()",500);
        },
        showThumb: function(e) {
                artviper.hidden = false;
                artviper.obj.style.visibility = artviper.ind.style.visibility = 'visible';
                artviper.obj.style.opacity = artviper.ind.style.opacity = '.1';
                artviper.img.style.visibility = "hidden";
                
                var addy = String(artviper.lnk.href).replace(/[^:]*:\/\/([^:\/]*)(:{0,1}\/{1}.*)/, '$1');

                artviper.errorTimer = window.setTimeout("artviper.imageError()",15000);
                /*
                artviper.img.src = 'http://images.websnapr.com/?url='+ encodeURI('http://'+addy)+'&rndm='+parseInt(artviper.linkPool[artviper.lnk.href]);
                */
                artviper.img.src = 'http://www.artviper.net/screenshots/screener.php?url='+ encodeURI('http://'+addy)+'&h=152&w=202&sdx=1024&sdy=768';


                /*@cc_on@*/
                /*@if(@_win32)
                return;
                /*@end@*/
                
                artviper.fade(10);
        },
        hideThumb: function(e) {
                artviper.hidden = true;
                if(artviper.timer) clearTimeout(artviper.timer);
                if(artviper.errorTimer) clearTimeout(artviper.errorTimer);
                if(artviper.opacityTimer) clearTimeout(artviper.opacityTimer);
                artviper.obj.style.visibility = 'hidden';
                artviper.ind.style.visibility = 'hidden';
                artviper.img.style.visibility = 'hidden';
                artviper.ind.className= "imageLoaded";
        },
        fade: function(opac) {
                var passed  = parseInt(opac);
                var newOpac = parseInt(passed+10);
                if ( newOpac < 90 ) {
                        artviper.obj.style.opacity = artviper.ind.style.opacity = '.'+newOpac;
                        artviper.opacityTimer = window.setTimeout("artviper.fade('"+newOpac+"')",20);
                } else {
                        artviper.obj.style.opacity = artviper.ind.style.opacity = '.99';
                }
        },
        addEvent: function( obj, types, fn ) {
                var type;
                for(var i = 0; i < types.length; i++) {
                        type = types[i];
                        if ( obj.attachEvent ) {
                                obj['e'+type+fn] = fn;
                                obj[type+fn] = function(){obj['e'+type+fn]( window.event );}
                                obj.attachEvent( 'on'+type, obj[type+fn] );
                        } else obj.addEventListener( type, fn, false );
                }
        },
        setbaseurl: function(baseurl) {
            artviper.baseURL = baseurl;
        },
        setimageuri: function(imageuri) {
            artviper.baseURI = imageuri;
        }
}


