/* IMG Preview Componenet v1.0 */

// [LOADER]
var IPW_T_ID;
var IPW_Pos = 0;
var IPW_Dir = 2;
var IPW_Len = 0;

function IPW_Animate() {
	var IndiEL = document.getElementById("IPW_Progress");
	if (IndiEL != undefined) {
		if (IPW_Pos == 0) { IPW_Len += IPW_Dir; }
		if (IPW_Len > 32 || IPW_Pos > 79) { IPW_Pos += IPW_Dir; }
		if (IPW_Pos > 79) {	IPW_Len = IPW_Len -= IPW_Dir; }
		if (IPW_Pos > 79 && IPW_Len == 0) { IPW_Pos = 0; }
		IndiEL.style.left = IPW_Pos;
		IndiEL.style.width = IPW_Len;
	}
}

function IPW_RemoveLoading() {
	var LoaderEl = document.getElementById("IPW_Loader");
	LoaderEl.style.visibility = "hidden";
	LoaderEl.style.display = "none";
	clearInterval(IPW_T_ID);
}
// END [LOADER]

var IPW_OffsetFromMouse = [10, 10]; //image x,y offsets from cursor position in pixels. Enter 0,0 for no offset
var IPW_DisplayDuration = 0; //duration in seconds image should remain visible. 0 for always.
var IPW_DefaultImageHeight = 400;	// maximum image size.
var IPW_DefaultImageWidth = 400;	// maximum image size.
var IPW_Temp_OnMouseMove;
var IPW_Image_Width;
var IPW_Image_Height;
var IPW_Sender;

function IPW_Create_GUI() {
	var GUI_HTML = "<div style=\"display: block; position: absolute; z-index: 1100; left: -800px; top: 44px;\" id=\"IPW\">";
	GUI_HTML += "<div class=\"IPW_In\">";
	GUI_HTML += "<div id=\"IPW_Temp_Load\"><img id=\"Template_Image\" alt=\"\" /></div>";
	GUI_HTML += "<div style=\"display: none; visibility: hidden;\" id=\"IPW_Loader\"><div class=\"Loader_In\">Loading preview...<div class=\"Loader_BG\"><div id=\"IPW_Progress\" style=\"width: 10px;\"></div></div></div></div>";
	GUI_HTML += "</div></div>";
	$("body").prepend(GUI_HTML);
	return true;
}

function IPW_Get_GUI_El() { if (document.getElementById) { return document.getElementById("IPW"); } }
function IPW_Get_Temp_Load_EL() { if (document.getElementById) { return document.getElementById("IPW_Temp_Load"); } }
function IPW_TrueBody() { return (!window.opera && document.compatMode && document.compatMode != "BackCompat") ? document.documentElement : document.body; }

function IPW_ShowTrail(Sender, Image_SRC, Title, Width, Height){
	var GUI_El = document.getElementById("IPW");
	if (GUI_El == undefined) { IPW_Create_GUI(); }
	IPW_Show(Sender, Image_SRC, Title, Width, Height);
}

function IPW_HideTrail() {	
	var GUIEl = IPW_Get_GUI_El();
	IPW_Sender.onmousemove = IPW_Temp_OnMouseMove;
	GUIEl.style.display = "none";
	GUIEl.style.left = "-500px";
}

function IPW_Show(Sender, Image_SRC, Title, width, height) {
	IPW_Sender = Sender;
	if (width > IPW_DefaultImageWidth) {
		var k = IPW_DefaultImageWidth / width;
		width = IPW_DefaultImageWidth;
		height = (height * k);
	}
	
	var LoaderEl = document.getElementById("IPW_Loader");
	LoaderEl.style.display = "block";
	LoaderEl.style.visibility = "visible";
	clearInterval(IPW_T_ID);
	IPW_T_ID = setInterval("IPW_Animate()", 20);
	
  var docwidth = document.all ? IPW_TrueBody().scrollLeft+IPW_TrueBody().clientWidth : pageXOffset + window.innerWidth - IPW_OffsetFromMouse[0];
	var docheight = document.all ? Math.min(IPW_TrueBody().scrollHeight, IPW_TrueBody().clientHeight) : Math.min(window.innerHeight);
	if ((navigator.userAgent.indexOf("Konqueror") == -1 || navigator.userAgent.indexOf("Firefox") != -1 || (navigator.userAgent.indexOf("Opera") == -1 && navigator.appVersion.indexOf("MSIE") != -1)) && (docwidth > 650 && docheight > 500)) {
		( width == 0 ) ? width = IPW_DefaultImageWidth: "";
		( height == 0 ) ? height = IPW_DefaultImageHeight: "";
		
		width = parseInt(width);
		height = parseInt(height);
		
		IPW_DefaultImageHeight = height;
		IPW_DefaultImageWidth = width;
		
		IPW_Temp_OnMouseMove = Sender.onmousemove;
		Sender.onmousemove = IPW_FollowMouse;
		
    New_HTML = "<img id=\"Template_Image\" width=\"" + width + "\" height=\"" + height +"\" src=\"" + Image_SRC + "\" alt=\"" + Title + "\" onload=\"IPW_RemoveLoading();\" />";
    Temp_Load_EL = IPW_Get_Temp_Load_EL();
		Temp_Load_EL.innerHTML = New_HTML;
		
		IPW_Image_Width = width;
		IPW_Image_Height = height;
	
		var GUI_El = IPW_Get_GUI_El();
		GUI_El.style.width = IPW_Image_Width;
		GUI_El.style.height = IPW_Image_Height;
		GUI_El.style.display = "block";
	}
}

function IPW_FollowMouse(e) {
	var xcoord = (IPW_OffsetFromMouse[0]);
	var ycoord = IPW_OffsetFromMouse[1];
	var docwidth = document.all ? IPW_TrueBody().scrollLeft + IPW_TrueBody().clientWidth : pageXOffset + window.innerWidth - 15
	var docheight = document.all ? Math.min(IPW_TrueBody().scrollHeight, IPW_TrueBody().clientHeight) : Math.min(window.innerHeight)
	if (typeof e != "undefined"){
		if (docwidth - e.pageX < IPW_DefaultImageWidth + 2 * IPW_OffsetFromMouse[0]){
			xcoord = e.pageX - Math.abs(xcoord) - IPW_DefaultImageWidth; // Move to the left side of the cursor
		} else {
			xcoord += e.pageX;
		}
		if (docheight - e.pageY < IPW_DefaultImageHeight + 2 * IPW_OffsetFromMouse[1]){
			ycoord += e.pageY - Math.max(0,(2 * IPW_OffsetFromMouse[1] + IPW_DefaultImageHeight + e.pageY - docheight - IPW_TrueBody().scrollTop));
		} else {
			ycoord += e.pageY;
		}
	} else if (typeof window.event != "undefined"){
		if (docwidth - event.clientX < IPW_DefaultImageWidth + 2 * IPW_OffsetFromMouse[0]){
			xcoord = event.clientX + IPW_TrueBody().scrollLeft -Math.abs(xcoord) - IPW_DefaultImageWidth - IPW_OffsetFromMouse[0]; // Move to the left side of the cursor
		} else {
			xcoord += IPW_TrueBody().scrollLeft+event.clientX
		}
		if (docheight - event.clientY < (IPW_DefaultImageHeight + 2 * IPW_OffsetFromMouse[1])){
			ycoord += event.clientY + IPW_TrueBody().scrollTop - Math.max(0,(2 * IPW_OffsetFromMouse[1] + IPW_DefaultImageHeight + event.clientY - docheight));
		} else {
			ycoord += IPW_TrueBody().scrollTop + event.clientY;
		}
	}
	var GUIEl = IPW_Get_GUI_El();
	GUIEl.style.left = xcoord + "px";
	GUIEl.style.top = ycoord + "px";
}
