jQuery.noConflict();


var active = null;
var fadeStep = 20;
var fadeSpeed = 50;
var imageTitles = new Array();


function track(uri) {
	if (pageTracker != null) {
		pageTracker._trackPageview(uri);
	}
}


function runCallbackOut(id) {
	var elm = $(id);
	if (elm.onFadedOut) elm.onFadedOut();
}
function runCallbackIn(id) {
	var elm = $(id);
	if (elm.onFadedIn) elm.onFadedIn();
}

function fadeOut(id) {
	new Effect.Fade(id, { 
		afterFinish: new Function("runCallbackOut('" + id + "')"),
		duration: 0.5 
	});
}
function fadeIn(id) {
	new Effect.Appear(id, { 
		afterFinish: new Function("runCallbackIn('" + id + "')"),
		duration: 0.5 
	});
}

var curClick = null;


function loadFull(clickElm, thumb) {
	var img = new Image();
	img.onload = function() {
		hideLoader();	
		zoomIn(clickElm, img, thumb);
	}
	img.src = thumb.src.replace("_thmb", "").replace("_t.jpg", ".jpg");
}
function zoomIn(cont, img, thumb) {
	startTopLayer();
	if (cont.full == null) {
		cont.full = document.createElement("img");
	}
	var full = cont.full;
	jQuery(full).stop();
	active = full;
	var c = jQuery(cont);
	full.t = c.offset().top + (c.height() - thumb.height) / 2 + 1;
	full.l = c.offset().left + (c.width() - thumb.width) / 2 + 1;
	full.src = img.src;
	full.real = img;
	full.cont = cont;
	full.thumb = thumb;
	jQuery(full).width(thumb.width).height(thumb.height);
	jQuery(full).css("position","absolute").css("top", full.t).css("left", full.l).css("z-index", 2000);
	var ft = reduce(full.t, img.height, document.body.scrollTop, jQuery.clientCoords().height);
	var fl = reduce(full.l, img.width, document.body.scrollLeft, jQuery.clientCoords().width - 20);
	document.body.appendChild(full);	
	jQuery(full).animate(
		{width: img.width, height: img.height, top: ft, left: fl},
		300, null, function() { fadeInGrayLayer(); stopTopLayer(); });
	//fadeInGrayLayer();
	full.onclick = function() { zoomOut(full); }
}

function zoomOut(full) {
	fadeOutGrayLayer();
	jQuery(full).stop();
	jQuery(full).animate(
		{width: full.thumb.width, height: full.thumb.height,
		top: full.t, left: full.l},
		300, null,
		function() {
			if (full.parentNode != null) 
				full.parentNode.removeChild(full);
		});
}

function reduce(value, offset, minValue, maxValue) {
	var v = minValue + (maxValue - minValue - offset) / 2;
	if (v < (5 + minValue)) return 5 + minValue;
	return v;
}

function showImage(id, clickElm) {
	track("/photo/photos/" + id);
	var img = new Image();
	showLoader();
	img.onload = function() {
		loadFull(clickElm, img);
	}
	img.src = clickElm.style.backgroundImage.replace(/url\(["]?(.*?)["]?\)/, "$1");
}

function showImage2(id, clickElm){
	var imgC = $("imgContainer");
	var catC = $("catContainer");
	var img = $("theImage");
	var imgData = $("imageData");
	if (curClick) removeClass(curClick, "selected");
	curClick = clickElm;
	addClass(curClick, "selected");

	if (img.currentId == id) {
		return;
	}

	if (imgC.style.display == 'none') {
		catC.onFadedOut = function() { switchLayout(); }
		imgC.onFadedIn = function() { loadImage(id); }
		fadeOut(catC.id);
		setTransparency(img, 0);
	} else {
		img.onFadedOut = function() { loadImage(id); }
		fadeOut(img.id);
		fadeOut(imgData.id);
	}
	if (document.body.scrollTop > getElementTop(imgC)) {
		document.body.scrollTop = getElementTop(imgC);
	}
}
function switchLayout() {
	var imgC = $("imgContainer");
	var catC = $("catContainer");
	setTransparency(imgC, 0);
	imgC.show();
	catC.className = "catContainer";
	fadeIn(catC.id);
	fadeIn(imgC.id);
}


function registerForHover(elm) {
	elm.onmouseover = function() { addClass(elm, 'hover'); }
	elm.onmouseout = function() { removeClass(elm, 'hover'); }
	elm.onmouseover();
}

var oldHeight = 0;

function loadImage(id) {
	showLoader();
	loadData("/photo/imageHtml.php?imgid=" + id, onImageLoaded);
}
function onImageLoaded(imageHTML) {
	var imgC = $("imgContainer");
	imgC.innerHTML = imageHTML;
	var tImg = $("theImage");
	var tData = $("imageData");
	setTransparency(tImg, 0);
	setTransparency(tData, 0);
	checkReadyState();
}

function checkReadyState() {
	var img = $("theImage");
	if (img.complete || img.readyState == "complete") {
		fadeIn("theImage");
		fadeIn("imageData");
	} else {
		img.timer = setTimeout("checkReadyState()", 500);
	}
}

function setTransparency(elm, num) {
	Element.setOpacity(elm, num/100.0);
}

function isInClass(elm, className) {
	return Element.hasClassName(elm, className);
}

function addClass(elm, className) {
	Element.addClassName(elm, className);
}

function removeClass(elm, className) {
	Element.removeClassName(elm, className);
}

function loadData(url, callback) {
	showLoader();
	new Ajax.Request(url, { 
		method: 'get',
		onSuccess: function(transport) {
			hideLoader();
			callback(transport.responseText);
		}
	});
}

function postData(url, data, callback) {
	showLoader();
	new Ajax.Request(url, {
		method: 'post',
		postBody: data,
		onSuccess: function(transport) {
			hideLoader();
			callback(transport.responseText);
		}
	});	
}

var curCatClick = null;

function loadImages(catid, category) {
	track("/photo/category/" + catid);
	showLoader();
	if (category != null) {
		if (curCatClick == null) {
			addClass(category.parentNode, "selected")
		} else {
			removeClass(curCatClick, "selected");
		}
		curCatClick = category;
		addClass(curCatClick, "selected");
	}
	var imgC = $("imgContainer");
        var catC = $("catContainer");
	
	imgC.onFadedOut = function() { imgC.style.display = 'none'; }
	catC.onFadedOut = function() { 
		catC.className = "";
		loadData("/photo/imageHtml.php?catid=" + catid, onImagesLoaded);
	}
	fadeOut(imgC.id);
	fadeOut(catC.id);
	document.body.style.cursor = "wait";
	includeFlickr = (catid == "new");
}
var includeFlickr = false;

function onImagesLoaded(responseText) {
        var catC = $("catContainer");	
	catC.innerHTML = responseText;
	if (includeFlickr) {
		catC.innerHTML += flickrData;
	}
	catC.className = "";
	setTransparency(catC, 0);
	fadeIn(catC.id);
	document.body.style.cursor = "";
}

function showLargeVersion(id) {
	fadeInGrayLayer();
	var elm = $("imageLayer");
	var img = $("imageLayerImg");
	var titleElm = $("imageLayerTitle");
	titleElm.innerHTML = $("imageTitle").innerHTML;
	elm.style.display = "";
	setTransparency(elm, 0);
	img.onload = function() { 
		elm.style.left = (document.body.clientWidth - elm.getWidth()) / 2;
		if (elm.getHeight() < document.body.clientHeight) {
			elm.style.top = (document.body.clientHeight - elm.getHeight()) / 2
		} else {
			elm.style.top = document.body.scrollTop + 5;
		}
		fadeIn(elm.id); 
	}
	img.src = "photos/" + id + ".jpg";
}
function closeLargeVersion() {
	var elm = $("imageLayer");
	elm.onFadedOut = function() { 
		elm.hide();
		fadeOutGrayLayer();
	}
	fadeOut(elm.id);

}
var tl;
function startTopLayer() {
	if (tl == null) {
		tl = document.createElement("div");
		tl.style.position = "absolute";
		tl.style.zIndex = 3000;		
		tl.style.top = 0;
		tl.style.left = 0;
	}
	tl.style.height = document.body.scrollHeight;
        tl.style.width = document.body.clientWidth;
	document.body.appendChild(tl);
}
function stopTopLayer() {
	if (tl != null && tl.parentNode != null) 
		tl.parentNode.removeChild(tl);
}

function fadeInGrayLayer() {
	var gl = $("grayLayer");
	jQuery(gl).stop();
	gl.show();
	gl.style.height = document.body.scrollHeight;
	gl.style.width = document.body.clientWidth;
	setTransparency(gl, 0);
	gl.fadeFull = 100;
	fadeIn(gl.id);
}
function fadeOutGrayLayer() {
	var gl = $("grayLayer");
	jQuery(gl).stop();
	//gl.onFadedOut = function() { gl.hide(); }
	fadeOut(gl.id);
}


function getElementTop(elem) {
	return Element.cumulativeOffset(elem).top;
}

function getElementLeft(elem) {
	return Element.cumulativeOffset(elem).left;
}

function showLoader() {
	var elm = $("loader");
	var cat = $("category");
	elm.show();
	elm.style.left = getElementLeft(cat) + (cat.getWidth() - elm.getWidth()) / 2;
	elm.style.top = getElementTop(cat) + 170;
	
}
function hideLoader() {
	$("loader").hide();
}

function sendComment() {
	var body = $("c_comment").value;
	var name = $("c_name").value; 
	var imgid = $("c_imgid").value;
	var data = "imgid=" + imgid + "&c_name=" + escape(name) + "&c_comment=" + escape(body);
	postData("/photo/add.php", data, onCommentReturn);
}

function onCommentReturn(responseText) {
	document.getElementById("comments").innerHTML = responseText;
}

jQuery.clientCoords = function() {
     var dimensions = {width: 0, height: 0};
  if( typeof( window.innerWidth ) == 'number' ) {
    //Non-IE
    dimensions.width = window.innerWidth;
    dimensions.height = window.innerHeight;
  } else if( document.documentElement && (document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
    //IE 6+ in 'standards compliant mode'
    dimensions.width = document.documentElement.clientWidth;
    dimensions.height= document.documentElement.clientHeight;
  } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
    //IE 4 compatible
    dimensions.width = document.body.clientWidth;
    dimensions.height= document.body.clientHeight;
  }
  return dimensions;
}



function keydown(e) {
        if (active != null && (e.which == 37 || e.which == 39)) {
                var all = jQuery("#catContainer .thumbContainer");
                var index = all.index(active.cont);
                jQuery(active).stop();
                zoomOut(active);
                index = index + (e.which == 37 ? -1 : 1);
                index = (index + all.length) % all.length;
                var newActive = all.get(index);
		var id = newActive.style.backgroundImage.replace(/.*?([0-9]+).*/, "$1");
                showImage(id, newActive);
        }
}

var flickrData = "";

function jsonFlickrFeed(jsonData) {
	var result = new Array();
	result.push('<h2>Newest photos on <a href="http://flickr.com/eoftedal/" target="new">my flickr page</a></h2>');
	for (var i in jsonData.items) {
		var im = jsonData.items[i];
		if (im.link != null) {
			var title = im.title.replace('\\', '\\\\').replace("'", "\\'");
			result.push('<div class="thumbContainer" onclick="showImage(\'flickr/' + title + '/' + im.link  +  '\', this)" ');
			result.push('style="background-image: url(' + im.media.m.replace('_m.jpg', '_t.jpg') + ')" ');
			result.push('onmouseover="registerForHover(this);">');
			result.push('</div>');
		}
	}
	flickrData = result.join("");
}



jQuery(document.body).keydown(keydown);

