// ==UserScript==
// @name		BOL image hover
// @namespace		http://www.rulac.net/userjs/bol-image-hover/
// @description		add mouse over tips to images, option for preload
// @version		1.6
// @include		http://*.bug.hr/*
// ==/UserScript==

// =============================
// start of config
// =============================

// PRELOAD IMAGE
// If you have slow connection to internet set to false
var preloadimage = true;

// REDUCE IMAGE SIZE
// If zoomed images cross the screen
var reduceimage = true;

// EXPAND GALLERY
var expandgallery = true;

// =============================
// end of config
// =============================


document.addEventListener("DOMContentLoaded", function(){
	var imgs	= new Array();
	var linkhref	= new Array();
	var imgarray	= new Array();
	var show_size	= new Array();
	links		= document.getElementsByTagName("a");

	body		= document.getElementsByTagName("body")[0];
	var image	= new Array();

	for (i = 0; i < links.length; i++){
		if (imgs[i] = links[i].getElementsByTagName('img')[0]){
			linkhref[i]	= links[i].href;
			linkhrefarray	= linkhref[i].split("/");
			if (linkhrefarray[3] == "_cache"){
				tmp		= linkhrefarray[4].split(".");
				if (tmp[1] == "gif" || tmp[1] == "jpg"  || tmp[1] == "jpeg"){
					links[i].tmp	= links[i];
				}
				if (undefined !== links[i].tmp){
					// preload image
					if (preloadimage){
						image[i]	= document.createElement("img");
						image[i].setAttribute("src", links[i].tmp);
						image[i].setAttribute("width", 1);
						image[i].setAttribute("height", 1);
						image[i].setAttribute("style", "float: left; position: absolute; left: -100000px; top: 0px;");
						document.body.appendChild(image[i]);
					}
				}
			}
		}
	}

	for (i = 0; i < links.length; i++){
		if (undefined !== links[i].tmp){
			links[i].onmouseover	= function(){
				imgarray[i]	= new Image();
				imgarray[i].src	= this.tmp;
				imgsize		= imgarray[i];
				if (imgsize.height){
					if (reduceimage == true){//alert(window.innerHeight+"- "+imgsize.height);
						// ako je premala rezolucija a prevelika fotka onda ju smanji
						if ((window.innerHeight / 2 ) < imgsize.height || (window.innerWidth / 2) < imgsize.width){
							var size_ok_tmp	= 1;
							percent1	= ((window.innerWidth - imgsize.width) / imgsize.width);
							percent1	= 1 + (1 -percent1);
							percent2	= ((window.innerHeight - imgsize.height) / imgsize.height);
							percent2	= 1 + (1 -percent2);
							if (percent1 < percent2){
								percent		= percent2;
							} else {
								percent		= percent1;
							}
							imgsize.height	= Math.round(imgsize.height / percent);
							imgsize.width	= Math.round(imgsize.width / percent);
						//	alert(percent1 + " - " + percent2 + " - " + imgsize.width +  " - " + imgsize.height +  " - " + window.innerWidth +  " - " + window.innerHeight);
						} else {
							imgsize.width	= imgsize.width;
							imgsize.height	= imgsize.height;
						}
						delete size_ok_tmp;
					}
					if (imgsize.width && imgsize.height){
						show_size[i]	= " width='" + imgsize.width + "' height='" + imgsize.height + "'";
					}
					tooltip("<img src='" + this.tmp +  "' style='border: 1px solid #000000; background: #ffffff; padding:5px;'" + show_size[i] + " alt='loading' onerror='alert('Image missing')'>");
					delete show_size[i];
				}
			}
			links[i].onmouseout	= function(){
				exit();
			}
		}
	}
	
	
	// gallery by text
	if (expandgallery){
		divs	= document.getElementsByTagName("div");
		for (i = 0; i < divs.length; i++){
			if (divs[i].getAttribute("class") == "gallery"){
				if (a1 = divs[i].getElementsByTagName("a")){
					for (a = 0; a < a1.length; a++){
						if (a1[a].getAttribute("href") == "#"){
							a1[a].setAttribute("style", "display:none;");
						}
					}
					if (div2 = divs[i].getElementsByTagName("div")[0]){
						image_number		= a1.length - 2; // minus up and down arrow links
						div_image_height	= image_number * 99; // 99 is 92 + border in pixels
						textareacontrol(div_image_height, div2);
					}
				}
			}
		}
		function textareacontrol(div_image_height, div2){
			div_image_height_pixel 		= div_image_height + "px";
			if (div2.style.height !== div_image_height_pixel){
				div2.style.height	= div_image_height_pixel;
			}
			window.setTimeout(function(){textareacontrol(div_image_height, div2);}, 1000);
		}
	}



	// lixlpixel Javascript tooltips
	// http://lixlpixel.org/javascript-tooltips/

	// * part of code is added by Rulac
		
	// position of the tooltip relative to the mouse in pixel //
	var offsetx	= -30;
	var offsety	=  20;

	function newelement(newid){ 
		if(document.createElement){
			var el = document.createElement('div'); 
			el.id = newid;	 
			with(el.style){ 
				display		= 'none';
				position	= 'absolute';
				top		= '-20000px'; // * part of code added by Rulac
				zIndex		= '1000'; // * part of code added by Rulac
			} 
			el.innerHTML = '&nbsp;'; 
			document.body.appendChild(el); 
		} 
	} 
	var ie5		= (document.getElementById && document.all); 
	var ns6		= (document.getElementById && !document.all); 
	var ua		= navigator.userAgent.toLowerCase();
	var isapple	= (ua.indexOf('applewebkit') != -1 ? 1 : 0);
	function getmouseposition(event){
		if(document.getElementById){
			var iebody	= (document.compatMode && document.compatMode != 'BackCompat') ? document.documentElement : document.body;
			pagex		= (isapple == 1 ? 0:(ie5)?iebody.scrollLeft:window.pageXOffset);
			pagey		= (isapple == 1 ? 0:(ie5)?iebody.scrollTop:window.pageYOffset);
			mousex		= (ie5)?event.x:(ns6)?clientX = event.clientX:false;
			mousey		= (ie5)?event.y:(ns6)?clientY = event.clientY:false;

			var lixlpixel_tooltip		= document.getElementById('tooltip');
			lixlpixel_tooltip.style.left	= (mousex+pagex+offsetx) + 'px';
			lixlpixel_tooltip.style.top	= (mousey+pagey+offsety) + 'px';

			// * START of part code added by Rulac
			if ((window.innerWidth/2 ) < (mousex)){
				lixlpixel_tooltip.style.left	= (mousex+pagex-offsetx-imgsize.width) + 'px';
			}
			if ((window.innerHeight/2) < (mousey)){
				lixlpixel_tooltip.style.top	= (mousey+pagey-offsety-imgsize.height) + 'px';
			}
			// * END of part code added by Rulac
		}
	}
	function tooltip(tip){
		if(!document.getElementById('tooltip')) newelement('tooltip');
		var lixlpixel_tooltip		= document.getElementById('tooltip');
		lixlpixel_tooltip.innerHTML	= tip;
		lixlpixel_tooltip.style.display	= 'block'
		document.onmousemove		= getmouseposition;
	}
	function exit(){
		document.getElementById('tooltip').style.display	= 'none';
	}


}, false);
