function $() {
	var elements = new Array();
	for (var i = 0; i < arguments.length; i++) {
		var element = arguments[i];
		if (typeof element == 'string')
			element = document.getElementById(element);
		if (arguments.length == 1)
			return element;
		elements.push(element);
	}
	return elements;
}

function keyCode (evt) {
	evt = (evt) ? evt : event;
	var kkey = (evt.charCode) ? evt.charCode : ((evt.keyCode) ? evt.keyCode : ((evt.which) ? evt.which : 0));
	return { event: evt, key: kkey }
}

// ADD EXTERNAL LINKS
function extUrl() {
	if (!document.getElementsByTagName)
		return;
	var a = document.getElementsByTagName('a');
	for (var i=0; i<a.length; i++) {
		var b = a[i];
		if ( b.getAttribute('href') && b.getAttribute('rel') && b.getAttribute('rel').indexOf('external') != -1 ) {
			b.target = '_blank';
			b.title = 'Odpri povezavo v novem oknu: \n'+b.getAttribute('href');
		}
	}
}

function Ani (time, fwstart, fwend, bwstart, bwend) {

	var fps = 65;
	var intv = 1000/fps;
	var c = -100*intv/time;

	var fs, fe, n;

	var obs = new Array ();
	var prp = new Array ();
	var strt = new Array ();
	var end = new Array ();
	var styl = new Array ();
	var bck = new Array ();
	var fnc = new Array ();

	var arg0 = 0;
	var arg1 = 0;
	var i = 0;

	this.addObj = function (obj, p, s, e, ftype, isStyle, noBack) {
		var t = obs.length ? obs.length : 0;
		obs[t] = obj;
		prp[t] = p;
		strt[t] = s;
		end[t] = e;
		fnc[t] = ftype == undefined ? "i_o" : ftype;
		styl[t] = isStyle == undefined ? true : isStyle;
		bck[t] = noBack == undefined ? true : noBack;
	}



	this.bwd = function () {
		if (c == Math.abs(c)) {
			c = -Math.abs(c);
			fs = bwstart;
			fe = bwend;
			play();
		}
	}

	this.fwd = function (a0, a1) {
		if (c != Math.abs(c)) {
			arg0 = a0;
			arg1 = a1;
			c = Math.abs(c);
			fs = fwstart;
			fe = fwend;
			play();
		}
	}

	function play (arg) {
		clearInterval (n);
		n = setInterval (move, intv);
		if (fs) fs();
	}

	function move () {
		if (i < 100 && c > 0 || i > 0 && c < 0) {
			i += c;
			i = Math.min (Math.max (i+c, 0), 100);

			for (var j = 0; j < obs.length; j++) {
				var obj = styl[j] ? obs[j].style : obs[j];
				if (bck[j] || !bck[j] && c > 0)
				obj[prp[j]] = f["_"+fnc[j]](strt[j] === true ? arg0 : strt[j], end[j] === true ? arg1 : end[j]) + (styl[j] ? "px" : "");
			}

		} else {
			clearInterval (n);
			if (fe) fe();
		}
	}

	var f = {
		_i_o	: function (s, e) { return s-Math.round((s-e)*.387*(Math.atan((i - 50)*Math.PI/45) + 1.29)); },
//		_in		: function (s, e) { return s-(s-e)*(Math.exp((i-100)/30)); },
//		_oute	: function (s, e) { return s-(s-e)*1.016*(1-Math.exp(-i/24)); },
		_out	: function (s, e) { return s-(s-e)*(1.027*(-(700)/(Math.pow(i,2.2)+700))+1.027); },
		_lin	: function (s, e) { return s-(s-e)*i/100; }
	}
}


function getStyle(el, property) {
	if (el.currentStyle)
		var y = el.currentStyle[property];
	else if (window.getComputedStyle)
		var y = document.defaultView.getComputedStyle(el,null).getPropertyValue(property.replace(/([A-Z])/g, "-$1").toLowerCase());
	return y;
}

function Images (thumbnails, largeobj, links) {

	if (!thumbnails) return;

	var now_loading = new Image ();
	now_loading.src = prefix+"/static/img/loading.gif";

	var thumbs = thumbnails.getElementsByTagName("a");
	if (thumbs.length <= 1 && largeobj) return;

	var active = false;

	var objects = new Array ();

	var imgshow = "";

	var up = true;

	var parent = false;

	var img = new Image ();
	img.onload = swap;

	for (var i=0; i<thumbs.length; i++ ) {
		if (thumbs[i].className == "active") active = i;
		thumbs[i].setAttribute ("i", i);
		objects[i] = new Thumbnail (thumbs[i]);
	}

	var doc = document.documentElement ? document.documentElement : document.body;

//	naredi vecjo verzijo ce ne obstaja
	if (!largeobj) {
		if (document.createElement && document.insertBefore) {
			var div = document.createElement("div");
			var span = document.createElement("span");
			var large = document.createElement("img");
			var ahr = document.createElement("b");
			var atext = document.createTextNode("zapri");
			ahr.appendChild(atext);
			span.appendChild (large);
			div.appendChild (span);
			thumbnails.parentNode.insertBefore(div, thumbnails.parentNode.firstChild);
			thumbnails.parentNode.insertBefore(ahr, thumbnails.parentNode.firstChild);
			div.setAttribute ("id", "view_large");
			large.setAttribute ("id", "large");
			ahr.setAttribute("title", "Zapri sliko (Esc)");

			large = $("large");

			parent = large.parentNode.parentNode;

			var items = document.getElementsByTagName("div");
			for (var i=0; i<items.length; i++) {
				if (items[i].className == "item") {
					var item = items[i];
					break;
				}
			}

			parent.style.visibility = "hidden";
			item.style.visibility = "visible";

			var e = parseInt(item.offsetHeight);
			var s = parseInt(div.offsetHeight);
			var t = parseInt(thumbnails.offsetHeight);

			h = 0;

			if (links) {
				h = links.offsetHeight;
			}

			s -= h;
			
			var ani = new Ani (300+1.2*Math.abs(e-s),
									function () { up = false; item.style.visibility = "hidden"; if (links) links.style.visibility = "hidden"; },
									function () { up = true; parent.style.visibility = "visible"; ahr.style.display = "block"; },
									function () { up = false; parent.style.visibility = "hidden"; ahr.style.display = "none"; thumbs[active].className = ""; active = false; },
									function () { up = false; item.style.visibility = "visible"; if (links) links.style.visibility = "visible";}
							   );

			ani.addObj (doc, "scrollTop", true, true, "out", false, false);
			ani.addObj (item, "marginBottom", 0, s-e+h);

			if (h > 0) ani.addObj (links, "marginBottom", 0, -h);

			if (e-s > 0) {
				ani.addObj ($('foot'), "paddingBottom", 0, e-s);
			} else {
				ani.addObj (parent, "marginBottom", e-s, 0);
				parent.style.marginBottom = (e-s)+"px";
			}

			up = false;

			addListener(ahr, 'click', ani.bwd );

		} else return;
	} else var large = largeobj;

	parent = large.parentNode.parentNode;

	setNext();

	parent.style.cursor = "pointer";
	parent.title = large.title = "Naslednja slika (Ctrl+desno)";

	function Thumbnail (thumb) {

		this.obj = thumb;
		this.id = thumb.getAttribute("i");
		this.src = thumb.getAttribute("href");
		this.loaded = false;

		var me = this;

		var image = new Image ();
		image.onload = function () { me.loaded = true; }

		image.src = this.src;

		thumb.onmousedown = function (evt) { var k = keyCode(evt); if ( !k.event.ctrlKey && !k.event.shiftKey && !k.event.altKey && (evt && evt.button == 0 || event.button == 1 )) { show(me); return false; } }
		thumb.onclick = function (evt) { var k = keyCode(evt); if (!k.event.ctrlKey && !k.event.shiftKey && !k.event.altKey) return false; }
		thumb.firstChild.title = "Prikaži večjo sliko" + (thumb.firstChild.alt ? " - " + thumb.firstChild.alt : "" );
	}

	function show (thumb) {

		if (!up) ani.fwd(doc.scrollTop, Math.max(0, 145-((self.innerHeight ? self.innerHeight : doc.clientHeight)-(s+h+t))/2));

		setNext ();

		imgshow = thumb.src;
		if (thumb.loaded)
			swap();
		else {
			large.src = now_loading.src;

			img.src = thumb.src;
		}

		if (active !== false)
		thumbs[active].className = "";
		active = parseInt(thumb.id);
		thumbs[active].className = "active";
		thumbs[active].blur();
	}

	function swap () {
		if (up)
			parent.style.visibility = "visible";
		large.src = imgshow;
	}

	function setNext () {
		parent.onmousedown = next;
	}

	function next (evt) {
		if (evt === true || evt && evt.button == 0 || event.button == 1)
		show ((active+1 < objects.length && active !== false) ? objects[active+1] : objects[0]);
	}
	function prev (evt) {
		if (evt === true || evt && evt.button == 0 || event.button == 1)
		show (active == 0 ? objects[objects.length-1] : objects[active-1]);
	}

	function keys (evt) {
		var key = keyCode(evt);
		if (key.key == 27 && ani) { ani.bwd(); cKeys(evt); }
		if (key.key == 37 && key.event.ctrlKey && !key.event.shiftKey && !key.event.altKey) { prev(true); cKeys(evt); }
		if (key.key == 39 && key.event.ctrlKey && !key.event.shiftKey && !key.event.altKey) { next(true); cKeys(evt); }
	}
	
	function cKeys (evt) {
		evt.cancelBubble = true;
		evt.returnValue = false;
		if (evt.stopPropagation) {
			evt.stopPropagation();
			evt.preventDefault();
		}
		return false;
	}

	addListener (document, 'keydown', keys);

}

// ADD LISTENER
function addListener(obj, type, fn) {
	if(!obj) return false;
	if(obj.addEventListener) { // Standard
		obj.addEventListener(type, fn, false);
		return true;
	} else if(obj.attachEvent) { // IE
		obj.attachEvent('on' + type, fn);
		return true;
	} else return false;
}

var prefix = "";

function Search (obj) {
	var t = "iskanje ...";

	addListener(obj, 'focus', fcs);
	addListener(obj, 'blur',  blr);

	function fcs () {
		if (obj.value==t) {
			obj.value='';
			obj.className = "active";
		}
	}

	function blr () {
		if (obj.value=='') {
			obj.value=t;
			obj.className = "";
		}
	}
}


// LISTENERS
addListener(window, 'load', extUrl);
addListener(window, 'load', function () { new Images ($('thumbnails'), $('large'), $('links')); new Search($('q')) });