
if (!itdr) var itdr = new Object();
if (!itdr.classes) itdr.classes = new Object();

if (!itdr.classes.AjaxConnection) itdr.classes.AjaxConnection = function () {
	var self = this;
	var XMLHTTP;
	function getXMLHTTPObject () {
		var req = false;
		if (window.XMLHttpRequest && !(window.ActiveXObject)) { // branch for native XMLHttpRequest object
			try {
				req = new XMLHttpRequest();
			} catch(e) {
				req = false;
			}
		} else if (window.ActiveXObject) { // branch for IE/Windows ActiveX version
			try {
				req = new ActiveXObject("Msxml2.XMLHTTP");
			} catch(e) {
				try {
					req = new ActiveXObject("Microsoft.XMLHTTP");
				} catch(e) {
					req = false;
				}
			}
		}
		if (req) {
			return req;
		}
	}
	this.load = function (URI) {
		XMLHTTP = getXMLHTTPObject();
		XMLHTTP.open("GET", URI, true);
		XMLHTTP.onreadystatechange = function() {
			if (XMLHTTP.readyState == 4) self.onLoad();
		}
		XMLHTTP.send(null);
	}
	this.getText = function () {
		return XMLHTTP.responseText;
	}
	this.onLoad = function () {
	}
}

itdr.classes.Query = new function () {
	// setup the variables
	var scripts = document.getElementsByTagName('script');
	var myScript = scripts[ scripts.length - 1 ];
	var queryString = myScript.src.replace(/^[^\?]+\??/,'');
	var params = parseQuery( queryString );
	// create named functions
	function parseQuery ( query ) {
	   var Params = new Object ();
	   if ( ! query ) return Params; // return empty object
	   var Pairs = query.split(/[;&]/);
	   for ( var i = 0; i < Pairs.length; i++ ) {
		var KeyVal = Pairs[i].split('=');
		if ( ! KeyVal || KeyVal.length != 2 ) continue;
		var key = unescape( KeyVal[0] );
		var val = unescape( KeyVal[1] );
		val = val.replace(/\+/g, ' ');
		Params[key] = val;
	   }
	   return Params;
	}
	// the only public method
	this.getTable = function () {
		return params;
	}
	this.getKey = function (key) {
		return params[key] || null;
	}
};

if (!itdr.classes.BlogShowDisplay) itdr.classes.BlogShowDisplay = new function () {
	var index = -1;
	var table = new Array();
	var current = -1;
	var loader = new itdr.classes.AjaxConnection();
	loader.onLoad = onData;
	var zeno_id = -1;
	var zeno_table = new Object();
	var zeno_player;
	function zeno (obj, prop, val, units) {
		if (!obj.id) {
			++zeno_id;
			obj.id = "zeno-object-"+zeno_id;
		}
		var key = obj.id + "-" + prop;
		if (!zeno_table[key]) {
			zeno_table[key] = new Object();
			zeno_table[key].obj = obj;
			zeno_table[key].prop = prop;
			zeno_table[key].proxy = parseFloat(obj.style[prop]);
			zeno_table[key].units = units;
		}
		zeno_table[key].end = val;
		clearInterval(zeno_player);
		zeno_player = setInterval(zeno_exec, 33);
		zeno_exec();
	}
	function zeno_exec () {
		var items = 0;
		for (var prop in zeno_table) {
			++items;
			var obj = zeno_table[prop];
			obj.proxy += (obj.end-obj.proxy)/10;
			var value = Math.round(obj.proxy);
			obj.obj.style[obj.prop] = value + obj.units;
			if (value==obj.end) delete zeno_table[prop];
		}
		if (items==0) clearInterval(zeno_player);
	}
	function loadNext () {
		++index;
		if (index==table.length) return;
		var obj = table[index];
		loader.load(obj.data);
	}
	function display () {
		var obj = table[index];
		var holder = document.getElementById("blogshow-runtime-"+index);
		var align_right = obj.thumbnail_alignment == "right";
		var show_inner_height = obj.show_inner_height;
		var show_inner_width = obj.show_inner_width;
		var thumbnail_height = obj.thumbnail_height;
		var thumbnail_width = obj.thumbnail_width;
		var image_array = obj.image_array;
		var image_array_count = image_array.length;
		var xhtml_list = '<div style="padding:0;margin:0;position:absolute;top:'
			+ ( align_right ? 0 : show_inner_height ) + 'px;left:'
			+ ( align_right ? show_inner_width : 0 )  + 'px;height:'
			+ ( align_right ? image_array_count * thumbnail_height : thumbnail_height ) + 'px;width:'
			+ ( align_right ? thumbnail_width : image_array_count * thumbnail_width ) + 'px" '
			+ 'onmouseover="itdr.classes.BlogShowDisplay.attach(this, ' + index + ');" '
			+ 'onmouseout="itdr.classes.BlogShowDisplay.detach(this, -1);">';
		for (var i=0; i<image_array_count; ++i) {
			var img = image_array[i];
			xhtml_list += '<div style="overflow:hidden;padding:0;margin:0;position:absolute;top:'
				+ ( align_right ? i*thumbnail_height : 0 ) + 'px;left:'
				+ ( align_right ? 0 : i*thumbnail_width ) + 'px;width:'
				+ obj.thumbnail_width + 'px;height:' + thumbnail_height + 'px" '
				+ 'onmouseover="itdr.classes.BlogShowDisplay.thumbover(this, ' + index + ', ' + i + ');" '
				+ 'onmouseout="itdr.classes.BlogShowDisplay.thumbout(this, ' + index + ', ' + i + ');" '
				+ 'onclick="itdr.classes.BlogShowDisplay.click(this, ' + index + ', ' + i + ');" >';
			xhtml_list += '<img style="position:absolute;top:0px;left:0px;display:block;padding:0;margin:0;border:none" src="' + img.thumb + '" width="' + obj.thumbnail_width + '" height="' + obj.thumbnail_height + '" />';
			xhtml_list += '</div>';
		}
		xhtml_list += '</div>';
		var loadee = image_array[0];
		var xhtml = '<div style="padding:0;margin:0;position:relative;overflow:hidden;background-color:' + obj.background_color + ';width:' + obj.show_width + 'px;height:' + obj.show_height + 'px">';
		xhtml += '<div style="padding:0;margin:0;overflow:hidden;position:absolute;top:0;left:0;width:' + show_inner_width + 'px;height:' + show_inner_height + 'px">';
		xhtml += '<img style="position:absolute;left:' + Math.round((show_inner_width-loadee.width)/2)
			+ 'px;top:' + Math.round((show_inner_height-loadee.height)/2)
			+ 'px;margin:0;padding:0;border:none;display:block" src="'
			+ loadee.src + '" width="' + loadee.width + '" height="' + loadee.height + '" />';
		xhtml += '</div>' + xhtml_list + '</div>';
		holder.innerHTML = xhtml;
	}
	function scrollfunc (event) {
		if (current==-1) return;
		var obj = table[current];
		var align_right = obj.thumbnail_alignment == "right";
		var global_coord = getElementCoord(this.parentNode);
		var global_mouse = getCursorCoord(event);
		var mouse_position = align_right ? global_mouse[1]-global_coord[1] : global_mouse[0]-global_coord[0];
		var viewable = align_right ? this.parentNode.offsetHeight : this.parentNode.offsetWidth;
		var actual = align_right ? this.offsetHeight : this.offsetWidth;
		var scrollable = actual-viewable;
		var ratio = mouse_position/viewable;
		var offset = scrollable*ratio;
		zeno(this, (align_right?"top":"left"), Math.round(offset)*-1, "px");
	}
	function getCursorCoord (e) {
		var posx = 0;
		var posy = 0;
		if (!e) var e = window.event;
		if (e.pageX || e.pageY) 	{
			posx = e.pageX;
			posy = e.pageY;
		}
		else if (e.clientX || e.clientY) 	{
			posx = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
			posy = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;
		}
		return [posx, posy];
	}
	function getElementCoord (obj) {
		var curleft = curtop = 0;
		if (obj.offsetParent) {
			do {
				curleft += obj.offsetLeft;
				curtop += obj.offsetTop;
			} while (obj = obj.offsetParent);
		}
		return [curleft,curtop];
	}
	function onData () {
		var obj = table[index];
		var base_path = obj.data.split("/");
		base_path.pop();
		obj.base_path = base_path.join("/");
		obj.show_inner_width = obj.thumbnail_alignment=="right" ? parseInt(obj.show_width) - parseInt(obj.thumbnail_width) : parseInt(obj.show_width);
		obj.show_inner_height = obj.thumbnail_alignment=="bottom" ? parseInt(obj.show_height) - parseInt(obj.thumbnail_height) : parseInt(obj.show_height);
		var lines = loader.getText().split("\n");
		var images = new Array();
		for (var i=0; i<lines.length; ++i) {
			var line = lines[i];
			var row = line.split("\t");
			var dim = row[2].split("x");
			var img = new Object();
			var img_width_original = parseInt(dim[0]);
			var img_height_original = parseInt(dim[1]);
			img.src = obj.base_path + "/" + row[0];
			img.thumb = obj.static_uri + "plugins/BlogShow/php/resample.php?e=1&w=" + obj.thumbnail_width + "&h=" + obj.thumbnail_height + "&u=" + obj.base_path + "/" + row[0];
			if (obj.ssr=="1") img.src = obj.static_uri + "plugins/BlogShow/php/resample.php?e=" + obj.autofit + "&w=" + obj.show_inner_width + "&h=" + obj.show_inner_height + "&u=" + obj.base_path + "/" + row[0];
			img.width = obj.show_inner_width;
			img.height = obj.show_inner_height;
			if (obj.autofit=="0") {
				var original_aspect_ratio = img_width_original / img_height_original;
				var new_aspect_ratio = img.width / img.height;
				if (original_aspect_ratio>=new_aspect_ratio) {
					img.height = (img.width*img_height_original)/img_width_original;
				} else {
					img.width = (img.height*img_width_original)/img_height_original;
				}
				if (img.width>=img_width_original||img.height>=img_height_original) {
					img.width = img_width_original;
					img.height = img_height_original;
				}
			}
			img.width = Math.floor(img.width);
			img.height = Math.floor(img.height);
			images.push(img);
		}
		obj.image_array = images;
		display();
		loadNext();
	}
	function DOMLoad (func) {
		var u = navigator.userAgent.toLowerCase();
		var ie = /*@cc_on!@*/false;
		if (/webkit/.test(u)) { // safari
			timeout = setTimeout(function(){
				if (document.readyState == "loaded" || document.readyState == "complete") func();
				else setTimeout(arguments.callee, 10);
			}, 10);
		} else if ((/mozilla/.test(u) && !/(compatible)/.test(u)) || (/opera/.test(u))) { // opera/moz
			document.addEventListener("DOMContentLoaded", func, false);
		} else if (ie) { // IE
			(function (){
				var tempNode = document.createElement('document:ready');
				try {
					tempNode.doScroll('left');
					func();
					tempNode = null;
				} catch(e) {
					setTimeout(arguments.callee, 0);
				}
			})();
		} else {
			window.onload = func;
		}
	}
	// constructor
	DOMLoad(loadNext);
	// the only public method
	this.addObject = function (obj) {
		table.push(obj);
		document.writeln('<div class="BlogShow" id="blogshow-runtime-' + (table.length-1) + '"><div style="width:' + obj.show_width + 'px;height:' + obj.show_height + 'px"></div</div>');
	}
	this.thumbover = function (self, show_index, image_index) {
		var obj = table[show_index];
		if (obj.current==self) return;
		self.style.border = "5px solid " + obj.thumbnail_border_color;
		self.style.width = (parseInt(obj.thumbnail_width) - 10) + "px";
		self.style.height = (parseInt(obj.thumbnail_height) - 10) + "px";
		var img = self.getElementsByTagName("img")[0];
		img.style.top = "-5px";
		img.style.left = "-5px";
	}
	this.thumbout  = function (self, show_index, image_index) {
		var obj = table[show_index];
		if (obj.current==self) return;
		self.style.borderStyle = "none";
		self.style.width = obj.thumbnail_width + "px";
		self.style.height = obj.thumbnail_height + "px";
		var img = self.getElementsByTagName("img")[0];
		img.style.top = "0px";
		img.style.left = "0px";
	}
	this.click = function (self, show_index, image_index) {
		var obj = table[show_index];
		var holder = document.getElementById("blogshow-runtime-" + show_index);
		var img = holder.getElementsByTagName("img")[0];
		var loadee = obj.image_array[image_index];
		img.src = loadee.src;
		img.setAttribute("width", loadee.width);
		img.setAttribute("height", loadee.height);
		img.style.left = Math.round((obj.show_inner_width-loadee.width)/2) + "px";
		img.style.top = Math.round((obj.show_inner_height-loadee.height)/2) + "px";
		if (obj.current) {
			obj.current.style.borderStyle = "none";
			obj.current.style.width = obj.thumbnail_width + "px";
			obj.current.style.height = obj.thumbnail_height + "px";
			var img = obj.current.getElementsByTagName("img")[0];
			img.style.top = "0px";
			img.style.left = "0px";
		}
		obj.current = self;
		obj.current.style.border = "5px solid " + obj.thumbnail_highlight_color;
		obj.current.style.width = (parseInt(obj.thumbnail_width) - 10) + "px";
		obj.current.style.height = (parseInt(obj.thumbnail_height) - 10) + "px";
		var img = obj.current.getElementsByTagName("img")[0];
		img.style.top = "-5px";
		img.style.left = "-5px";
	}
	this.attach = function (obj, i) {
		current = i;
		if (!obj.onmousemove) obj.onmousemove = scrollfunc;
	}
	this.detach = function (obj) {
		current = -1;
		if (obj.onmousemove) obj.onmousemove = "";
	}
};

itdr.classes.BlogShowDisplay.addObject(itdr.classes.Query.getTable());
