// ==UserScript==
// @name		IMDB image hover
// @namespace		http://www.rulac.net/userjs/imdb-image-hover/
// @description		add mouse over tips to images, option for preload
// @version		2.3
// @include		http://*.imdb.com/*
// @include		http://*.imdb.de/*
// @include		http://*.imdb.es/*
// @include		http://*.imdb.it/*
// @include		http://*.imdb.fr/*
// @include		http://*.imdb.pt/*
// ==/UserScript==

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

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

// size of large image in pixels
var width		= 550;
var height		= 550;

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


document.addEventListener("DOMContentLoaded", function(){
	var elements = document.getElementsByTagName("*");
	function imdbihstart(){
		var imgs	= new Array();
		var imgsrc	= new Array();
		var imgarray	= new Array();
		var show_size	= new Array();
		var image	= new Array();
		var links	= document.getElementsByTagName("a");
		for (i = 0; i < links.length; i++){
			if (typeof links[i].tmp == "undefined"){
				if (imgs[i] = links[i].getElementsByTagName('img')[0]){
					imgsrc[i]	= imgs[i].src;
					imgsrcarray	= imgsrc[i].split("/");
					imgsrcarray	= imgsrcarray.reverse();
					tncheck1	= imgsrcarray[0].lastIndexOf("._V1");
					delete imgsrcarray;
					if (tncheck1 > -1){
						if (tncheck1 > -1){
							spl		= imgsrc[i].split("._V1");
							links[i].tmp	= spl[0] + "._V1._SY" + height + "_SX" + width + "_.jpg";
						}if (links[i].tmp){
							// preload image
							if (preloadimage){
								//pig.src = links[i].tmp;
								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]);
							}
							var r = 0;
							links[i].onmouseover	= function(){
								imgarray[r]	= new Image();
								imgarray[r].src	= this.tmp;
								imgsize		= imgarray[r];
								// ako je premala rezolucija a prevelika fotka onda ju smanji na 50%
								if ((window.innerHeight - 11) < imgsize.height){
									imgsize.height	= imgsize.height / 2;
									size_ok_tmp	= 1;
								} else {
									imgsize.height	= imgsize.height;
									size_ok_tmp	= 2;
								}
								if ((window.innerWidth - 11) < imgsize.width || size_ok_tmp == 1){
									imgsize.width	= imgsize.width / 2;
								} else {
									imgsize.width	= imgsize.width;
								}
								if (imgsize.width || imgsize.height){
									show_size[r]	= " width='" + imgsize.width + "' height='" + imgsize.height + "'";
								}
								tooltip("<img src='" + this.tmp +  "' style='border: 1px solid #283f66; background: #efefef; padding:5px;'" + show_size[r] + " alt='loading'>");
								r++;
							}
							links[i].onmouseout	= function(){
								exit();
							}
						}
					}
				}
			}
		}
		window.setTimeout(function(){imdbihstart();}, 1000);
	}
	imdbihstart();
	function removeClassName(e,t){
		if (typeof e == "string"){
			e = xGetElementById(e);
		}
		//code to change and replace strings
		var ec = ' ' + e.className.replace(/^s*|s*$/g,'') + ' ';
		var nc = ec;
		t = t.replace(/^s*|s*$/g,'');
		//check if not already there
		if (ec.indexOf(' '+t+' ') != -1){
			//found, so lets remove it
			nc = ec.replace(' ' + t.replace(/^s*|s*$/g,'') + ' ',' ');
		}
		//return the changed text!
		e.className = nc.replace(/^s*|s*$/g,''); //trimmed whitespace
		return true;
	}
	// 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);
