/*
    Script based on Juan Xavier Larrea's WebSnapr - Preview Bubble Javascript
    last modified: 04.02.2008, by Ramiro Gomez
*/

var PATH_HTTP = 'http://www.linkvendor.com';
var loading_gif = PATH_HTTP + '/img/loading.gif';

if (typeof Array.prototype.push != "function")
{
    Array.prototype.push = ArrayPush;
    function ArrayPush(_1) {
        this[this.length] = _1;
    }
}

function bindBubbles(e)
{
    var lv_img = document.getElementById('lv-img');
	if (window.addEventListener)
    {
    	lv_img.addEventListener("mouseover", attachBubble, false);
	}
    else
    {
    	lv_img.attachEvent("onmouseover", attachBubble);
    }
}

function attachBubble(e)
{
	if (bubble = document.getElementById('lv-bubble'))
	{
		//detachBubble(bubble); // nicht gut für nervöse finger
	}
	else
	{
	    var link = document.getElementById('lv-img').getAttribute('longdesc')
		var mp = getMousePosition(e);
		var lwt = mp.y + 20;
		var lwl = mp.x - 100;

    	var bubble = document.createElement("div");
	    bubble.id = "lv-bubble";
    	if (BrowserDetect.browser == 'Explorer') {
        	bubble.style.width = "220px";
	        bubble.style.position = "absolute";
    	    bubble.style.top = lwt;
        	bubble.style.zIndex = 99999;
	        bubble.style.left = lwl;
    	    bubble.style.textAlign = "left";
//      	bubble.style.height = "300px";
	        bubble.style.padding = "0";
    	    bubble.style.margin = "0";
    	}
	    else
    	{
        	bubble.setAttribute("style", "text-align: center; z-index: 99999; position: absolute; top: " + lwt + "px ; left: " + lwl + "px ; background-color:#ddd; width: 220px; padding: 0; margin: 0;");
	    }
    	if (BrowserDetect.browser == 'Safari' || BrowserDetect.browser == 'Konqueror')
    	{
        	var _height = lwt;
        	bubble.setAttribute("style", "text-align: center; z-index: 99999; position: absolute; top: " + _height + "px ; left: " + lwl + "px ; background-color:#ddd; width: 220px; padding: 0; margin: 0;");
	    }

    	// wrapper div for layers and screenshot image
	    var wrapper = document.createElement("div");
	    wrapper.innerHTML = '<div class="wrapper-close" style="width: 100%;text-align: right;font-weight:bold;top:-15px;position:absolute;cursor:pointer;">x</div>';
	    wrapper.innerHTML += '<img src="'+loading_gif+'" alt="Loading Screenshot" id="lv-loading-img"/>';
    	wrapper.id = 'lv-wrapper';
	    if (BrowserDetect.browser == 'Explorer')
    	{
        	wrapper.style.position = "relative";
	        wrapper.style.margin = "15px 10px";
    	}
	    else
    	{
        	wrapper.setAttribute("style", "position:relative;margin:15px 10px;");
	    }

    	var img = document.createElement("img");
	    img.id = 'lv-screen';
    	if (BrowserDetect.browser == 'Explorer')
	    {
    	    img.style.padding = "0";
        	img.style.margin = "0";
	        img.style.border = "0";
    	}
	    else
    	{
        	img.setAttribute("style", "padding: 0; margin: 0; border: 0;");
	    }
    	img.setAttribute("src", PATH_HTTP + "/linkvaluescreen.php?url=" + link);
	    img.setAttribute("alt", "Linkvalue Screenshot");

		// show image
	    document.getElementsByTagName("body")[0].appendChild(bubble);
    	bubble.appendChild(wrapper);

	    if(wrapper.appendChild(img))
    	{
        	showScreenshotLayers();
			// register click events for closing/removing bubble
	    	if (window.addEventListener)
	    	{
    			wrapper.addEventListener("click", detachBubble, false);
			}
		    else
		    {
		    	wrapper.attachEvent("onclick", detachBubble);
		    }
	    }
	}
}

function showScreenshotLayers()
{
  var img = document.getElementById('lv-screen');
  var img_h = getEltHeight(img);

  if (!img_h)
  {
	setTimeout('showScreenshotLayers()',2000);
  }
  else
  {
  	var img_w = getEltWidth(img);
	var scale_factor = img_w / 1024;
	var ll1_h = 768 * scale_factor;

	if (img_h - ll1_h <= 0)
	{
		ll1_h = img_h;
	}

	var wrapper = document.getElementById('lv-wrapper');
	var ll1 = document.createElement('div');
	ll1.id = 'lv-ll1';
	setLayerStyle(ll1,img_w,ll1_h,'green',0);

   	if(wrapper.appendChild(ll1))
   	{
		addPriceEvent(ll1);
   		var lv_loading = document.getElementById('lv-loading-img');
		lv_loading.parentNode.removeChild(lv_loading);
		if (img_h > ll1_h)
		{
			img_h_diff = img_h - ll1_h;
			ll2_h = (img_h_diff/3)*2;
			var ll2 = document.createElement('div');
			ll2.id = 'lv-ll2';
			setLayerStyle(ll2,img_w,ll2_h,'yellow',ll1_h)
			wrapper.appendChild(ll2);
			addPriceEvent(ll2);

			ll3_h = (img_h_diff/3);
			ll3_t = ll1_h + ll2_h;
			var ll3 = document.createElement('div');
			ll3.id = 'lv-ll3';
			setLayerStyle(ll3,img_w,ll3_h,'red',ll3_t)
			wrapper.appendChild(ll3);
			addPriceEvent(ll3);
		}
   	}
  }}

function detachBubble(e)
{
	var bubble = document.getElementById('lv-bubble');
	bubble.parentNode.removeChild(bubble);
}

if (window.addEventListener)
{
    addEventListener("load", bindBubbles, false);
}
else
{
    attachEvent("onload", bindBubbles);
}

var BrowserDetect = {
    init: function()
    {
        this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
        this.version = this.searchVersion(navigator.userAgent)
        || this.searchVersion(navigator.appVersion)
        || "an unknown version";
        this.OS = this.searchString(this.dataOS) || "an unknown OS";

    },
    searchString: function(data)
    {
        for (var i = 0; i < data.length; i++)
        {
            var dataString = data[i].string;
            var dataProp = data[i].prop;
            this.versionSearchString = data[i].versionSearch || data[i].identity;
            if (dataString)
            {
                if (dataString.indexOf(data[i].subString) != -1)
                return data[i].identity;
            }
            else if (dataProp)
            return data[i].identity;
        }
    },
    searchVersion: function(dataString)
    {
        var index = dataString.indexOf(this.versionSearchString);
        if (index == -1) return;
        return parseFloat(dataString.substring(index + this.versionSearchString.length + 1));
    },
    dataBrowser: [
    {
        string: navigator.userAgent,
        subString: "OmniWeb",
        versionSearch: "OmniWeb/",
        identity: "OmniWeb"
    },
    {
        string: navigator.vendor,
        subString: "Apple",
        identity: "Safari"
    },
    {
        prop: window.opera,
        identity: "Opera"
    },
    {
        string: navigator.vendor,
        subString: "iCab",
        identity: "iCab"
    },
    {
        string: navigator.vendor,
        subString: "KDE",
        identity: "Konqueror"
    },
    {
        string: navigator.userAgent,
        subString: "Firefox",
        identity: "Firefox"
    },
    {
        string: navigator.vendor,
        subString: "Camino",
        identity: "Camino"
    },
    {
        // for newer Netscapes (6+)
        string: navigator.userAgent,
        subString: "Netscape",
        identity: "Netscape"
    },
    {
        string: navigator.userAgent,
        subString: "MSIE",
        identity: "Explorer",
        versionSearch: "MSIE"
    },
    {
        string: navigator.userAgent,
        subString: "Gecko",
        identity: "Mozilla",
        versionSearch: "rv"
    },
    {
        // for older Netscapes (4-)
        string: navigator.userAgent,
        subString: "Mozilla",
        identity: "Netscape",
        versionSearch: "Mozilla"
    }
    ],
    dataOS: [
    {
        string: navigator.platform,
        subString: "Win",
        identity: "Windows"
    },
    {
        string: navigator.platform,
        subString: "Mac",
        identity: "Mac"
    },
    {
        string: navigator.platform,
        subString: "Linux",
        identity: "Linux"
    }
    ]
};
BrowserDetect.init();

function getMousePosition(e)
{
	return e.pageX ? {'x':e.pageX, 'y':e.pageY} :
	{'x':e.clientX + document.documentElement.scrollLeft + document.body.scrollLeft,
	 'y':e.clientY + document.documentElement.scrollTop + document.body.scrollTop};
}

function getEltHeight(elt)
{
	var h = 0;
	if (BrowserDetect.browser == 'Explorer')
	{
  		h = elt.clientHeight;
	}
	else
	{
  		h = elt.offsetHeight;
	}
	return h;
}

function getEltWidth(elt)
{
	var h = 0;
	if (BrowserDetect.browser == 'Explorer')
	{
  		h = elt.clientWidth;
	}
	else
	{
  		h = elt.offsetWidth;
	}
	return h;
}

function setLayerStyle(elt,width,height,bgcolor,disttop)
{
	if (BrowserDetect.browser == 'Explorer')
	{
	    elt.style.position = "absolute";
    	elt.style.top = disttop+'px';
		elt.style.zIndex = 99999;
	    elt.style.left = 0;
	    elt.style.background = bgcolor;
	    elt.style.width = width+'px';
	    elt.style.height = height+'px';
   	    elt.style.opacity = .3;
	    elt.style.filter = 'alpha(opacity=30)';
    }
	else
    {
    	elt.setAttribute("style",
    	"z-index:999999;-moz-opacity:.30;opacity:.30;position:absolute;top:"
    	+disttop+"px;left:0;background:"+bgcolor+";width:"+width+'px;height:'+height+'px;');
	}
}

function addPriceEvent(elt)
{
	if (window.addEventListener)
    {
    	elt.addEventListener("mouseover", showPrice, false);
    	elt.addEventListener("mousemove", showPrice, false);
    	elt.addEventListener("mouseout", removePrice, false);
	}
    else
	{
    	elt.attachEvent("onmouseover", showPrice);
    	elt.attachEvent("onmousemove", showPrice);
    	elt.attachEvent("onmouseout", removePrice);
	}
}

function showPrice(event)
{
	var target_elt = getElementFromEvent(event);
	var targ = target_elt.id;
	var lv_img = document.getElementById('lv-img');

	if (lv_img)
	{
		var css_class = '';
		if (BrowserDetect.browser == 'Explorer')
		{
			css_class = lv_img.className;
		}
		else
		{
			css_class = lv_img.getAttribute('class');
		}
		var price = css_class.replace(/^lv/,'');

		if (targ == 'lv-ll2')
		{
			price = (price / 2.4).toFixed(2);
		}
		else if (targ == 'lv-ll3')
		{
			price = (price / 4.8).toFixed(2);
		}

		var c_price = document.getElementById('current-price')
		if (c_price)
		{
			c_price.parentNode.removeChild(c_price);
		}

		var mp = getMousePosition(event);
		var mpx = (mp.x + 20) + 'px';
		var mpy = (mp.y - 20) + 'px';

		curr_price = document.createElement('div');
		curr_price.id = 'current-price';

		currency = getCurrencySymbol();
		curr_price.innerHTML = price + currency;

		if (BrowserDetect.browser == 'Explorer')
		{
	    	curr_price.style.position = "absolute";
    		curr_price.style.top = mpy;
			curr_price.style.zIndex = 99999;
		    curr_price.style.left = mpx;
			curr_price.style.fontSize = '25px';
			curr_price.style.color = '#000';
	    }
		else
    	{
   			curr_price.setAttribute("style",
    		"color:#000;font-size:25px;z-index:999999;position:absolute;top:"+mpy+";left:"+mpx+";");
		}
		document.getElementsByTagName("body")[0].appendChild(curr_price);
	}
}

function removePrice(event)
{
	var curr_price = document.getElementById('current-price');
	if(curr_price)
	{
		curr_price.parentNode.removeChild(curr_price);
	}
}

function getElementFromEvent(event)
{
	var targ;
	if (!event) var event = window.event;
	if (event.target)
	{
		targ = event.target;
	}
	else if (event.srcElement)
	{
		targ = event.srcElement;
	}
	if (targ.nodeType == 3) // defeat Safari bug
	{
		targ = targ.parentNode;
	}
	return targ;

}

function getCurrencySymbol()
{
	var currency = document.getElementById('lv-img').src.replace(/.*?currency=(\w+)$/,"$1");
	var symbol = '';
	if (currency == 'dollar')
	{
		symbol = ' $'
	}
	else if  (currency == 'euro')
	{
		symbol = ' &euro;'
	}
	else
	{
		symbol = '';
	}
	return symbol;
}