/*! 
	atelje japelj interface scripts
	copyright boris jerenec, studiotandem.si
	
	requires jQuery 1.3.2 and plugins...
*/
preloadedImagesCount = 0;
allImagesCount = 0;
doLog = false;

defaultHilite = '#000';
defaultMainMenuBg = "#999";

slideTime = 500;
itemFadeLow = 0.3;
itemFadeHi = 0.9;
viewFadeLow = 0.00;

viewExpanded = false;

currentView = 1; // start with this view ..

defaultFadeSpeed = 100;
defaultDivOpacity = 1.0;
defaultViewWidth = 660;

tooltipFadeSpeed = 100;

menuAtTop = false; 

mouseX = 0;
mouseY = 0;


// STARTUP AND INITIALIZATION

// - ERROR  
function startEngineWithError() {
	$("#error").css({backgroundColor: '#ccc'}); /// safari 3.1.2 bugs me out!
	$("#error").animate( { backgroundColor: '#f00' }, 1000);
}

function startEngine(isFrontPage, imgColor) 
{
	STLog("started with frontPage: "+isFrontPage+" imgColor:"+imgColor);
	
	// urls
	root = document.getElementsByTagName('base')[0].href;
	nicehref = location.href.substr(root.length);
	globalpath = nicehref.split('/');
	
	// current stuff
	currentLang = globalpath.shift();  // kot pop, vendar prvi iz arraya
	currentSection = globalpath.shift();
	currentProject = globalpath.shift();
	currentItem = globalpath.shift();
	currentItemsCount = 1;

	// init main divs
	aboutDiv = $("#about");
	logoDiv = $("#logo");
	contentDiv = $("#content");
	menuDiv = $("#menu");
	mainMenuDiv = $("#mainmenu");
	projectMenuDiv = $("#projectmenu");
	tooltipDiv = $("#tooltip");
	bodyBgDiv = $("#body-bg");
	infoDiv = $("#information");


		aboutDiv.hide();
		contentDiv.hide();
		infoDiv.hide();


	// 
	windowResizeEvent();
	$(window).bind("resize", windowResizeEvent);
	
	// attach events
	$("a#logo").click(logoClickEvent);

	$("#mainmenu a[class != no-js]").click(mainMenuClickEvent);
    $("#mainmenu a#info-t").click(mainMenuInfoClickEvent);
       
    $("#prev").live("click", prevProjectClickEvent); 
    $("#next").live("click", nextProjectClickEvent);
	
	$(".view").live("click", viewClickEvent);
	
	$("#items a").live("click", itemMenuClickEvent);
	$("#projectmenu a").live("click", projectMenuClickEvent);

	$("a#more").live("click", moreInformationClickEvent);

	// google analytics tracking
	$('a').track({skip_internal:false});
}


// INITS

function initContentForCurrentSection() {
	var ap = getAllProjects(currentLang, currentSection);
	var app = ap['project'];
	var len = app.length;
	if (len > 0) {
		var limitLen = (len > 5) ? 5 : len;
		var w = Math.round(defaultViewWidth/limitLen);
		if (w < 5) w = 5;
		
		var content = '<div id="prev"></div><div id="frame"><div id="longview" class="multi">';
		for (i = 0; i< len; i++) {
			//var title = str2br(.title);
//			STLog(app[i]);
			var style = 'background: url(data/'+getFirstAttr(app[i], 'src')+') no-repeat center center; width:'+w+'px';
			content += '<div id="'+app[i]["@attributes"].id+'" class="view" style="'+style+'" title="'+app[i].title+'"></div>';
		}
		content += '</div></div><div id="next"></div>';
		$('#content').html(content);
	}
	viewExpanded = false;
	infoDiv.hide();
	setProjectInfo(null);
	currentProject = -1;

}

function initProjectMenu() {
	var ap = getAllProjects(currentLang, currentSection);
	var app = ap['project'];
	var projects = '';
	for (var i = 0; i < app.length; i++) {
		var p = app[i];
		projects += '<a class="project" id="p-'+p['@attributes'].id+'" href="'+currentLang+'/'+currentSection+'/'+p['@attributes'].id+'" title="'+p.title+'">'+p.short+'</a>';
	}		
	$('#projectslide').html(projects);
	
//	slideProjectMenu();
}

// MANIPULATION 
function setProjectMenu() {
	$('#projectmenu a').removeClass();
  
  	var cp = $('#projectmenu a#p-'+currentProject);
	var sl = $('#projectslide');
	
	var cpl = cp.position().left;
	var sll = sl.position().left - $('#projectmenu').position().left;
		
	var center = $('#projectmenu').width() / 2;
	
	if ((cpl > center) || (sll < 0)) {
		var l = - cpl + center;
		if (l > 0) l = 0;
		sl.animate({left: l+'px'}, "fast");
	}
	cp.addClass('selected');
}

function setProjectInfo(p) {
	if (p !== null) {
		p.info = str2br(p.info);
		p.title = str2br(p.title);
		
		var len = (p['img'].length) ? p['img'].length : 1; 
		// sub
		var tmpHtml = '<div id="items">';
		
			for (i=0; i<len; i++) {
				var selected = (i==0) ? ' class="selected"' : '';
				tmpHtml += '<a '+selected+' id="i-'+i+'" href="'+currentLang+'/'+currentSection+'/'+currentProject+'/'+i+'">'+(i+1)+'</a>';
		}
		tmpHtml += '</div>';
		
		var html = tmpHtml+'<h1>'+p.title+'</h1><a href="#more-info" id="more">'+more()+'</a>';
		html += '<div id="more-info"><p class="desc">'+p.desc+'</p>';
		html += ''+p.info+'</div>';
	
		$("#project-info").fadeOut("fast", function() {
			$("#project-info").html(html).fadeIn(0);
		});
	} else $("#project-info").html('');
}

function setViewImage(view, img) {
		var background = 'url(data/'+img+')';		
		$(view).fadeTo("fast",itemFadeLow, function() {
			$(view).css('background-image', background);
			$(view).fadeTo("fast", 1.0);							   
		});
}

function setContentToNextProject(direction) {

	var allProjects = getAllProjects(currentLang, currentSection);
	var l = allProjects['project'].length;
	
	var currentProjectIndex = (currentProject < 0) ? -1 : projectIndex(currentProject);

	// limitiran interval 	
	var nextIndex = currentProjectIndex + direction;
	if (nextIndex < 0) nextIndex = 0;
	if (nextIndex >= l) nextIndex = l-1;

	// rotira
//	if (direction > 0) 	var nextIndex = (currentProjectIndex+1) % l; 
//	else var nextIndex = (currentProjectIndex-1+l) % l; // +l da
	
	var p = allProjects['project'][nextIndex];
	currentProject = p["@attributes"].id;
		
	if (!viewExpanded) {
		$(".view").css({width:defaultViewWidth+"px"});
		viewExpanded = true;
	}
	
	$("#longview").removeClass("multi").animate({left:-(defaultViewWidth*nextIndex)+"px"}, "slow");
	setProjectInfo(p); 
	setProjectMenu();
}


// EVENTS

function logoClickEvent(e) {
	e.preventDefault();
	STLog();
	logoDiv.fadeOut();
	menuDiv.show();
	
	var href = $(this).attr('href'); 
	globalpath = href.split('/');
	currentLang = globalpath.shift();  // kot pop, vendar prvi iz arraya
	currentSection = globalpath.shift();
	
//	STLog("clicked on href:"+href);
	
	// set first project as current
	currentProjectIndex = 0;
	
	var cats = siteData[currentLang]['category'];
	for (var i=0; i<cats.length; i++) {		
		if (cats[i]['@attributes']['id'] == currentSection) currentProjectIndex = i;
	}
	currentProject = siteData[currentLang]['category'][currentProjectIndex]['project'][0]['@attributes']['id'];

	currentItem = 0;
	currentView = 1; // start with this view ..

	$("#mainmenu a.selected").removeClass("selected");
	$("#mainmenu a#"+currentLang+"-"+currentSection).addClass("selected");
	
	STLog(currentLang, currentSection, currentProject, currentItem);
	
	initProjectMenu();
	initContentForCurrentSection();
	
	projectMenuDiv.show();
	infoDiv.show();
	logoDiv.hide();
	aboutDiv.hide().removeClass("shadow");
	tooltipDiv.removeClass().hide();

	bodyBgDiv.removeClass(); //.addClass("portfolio");

	if (!menuAtTop) {
		var tmpY = defaultY - menuDiv.outerHeight(true);
		menuDiv.animate({top:tmpY+"px"}, "fast", function animateMenuToTopCallback() { 
			STLog("");
			menuAtTop = true;
			contentDiv.fadeIn(defaultFadeSpeed).addClass("shadow"); 
		 });
	}
}


function mainMenuClickEvent(e) 
{
	e.preventDefault();
	
	var href = $(this).attr('href'); 
	globalpath = href.split('/');
	currentLang = globalpath.shift();  // kot pop, vendar prvi iz arraya
	currentSection = globalpath.shift();
	
//	STLog("clicked on href:"+href);
	
	// set first project as current
	currentProjectIndex = 0;
	
	var cats = siteData[currentLang]['category'];
	for (var i=0; i<cats.length; i++) {		
		if (cats[i]['@attributes']['id'] == currentSection) currentProjectIndex = i;
	}
	currentProject = siteData[currentLang]['category'][currentProjectIndex]['project'][0]['@attributes']['id'];

	currentItem = 0;
	currentView = 1; // start with this view ..

	$("#mainmenu a.selected").removeClass("selected");
	$("#mainmenu a#"+currentLang+"-"+currentSection).addClass("selected");
	
	STLog(currentLang, currentSection, currentProject, currentItem);
	
	initProjectMenu();
	initContentForCurrentSection();
	
	projectMenuDiv.show();
	$("#projectslide").css("left","0");
	
	infoDiv.show();
	logoDiv.hide();
	aboutDiv.hide().removeClass("shadow");
	tooltipDiv.removeClass().hide();

	bodyBgDiv.removeClass(); //.addClass("portfolio");

/*
	if (!menuAtTop) {
		var tmpY = defaultY - menuDiv.outerHeight(true);
		menuDiv.animate({top:tmpY+"px"}, "fast", function animateMenuToTopCallback() { 
			STLog("");
			menuAtTop = true;
			contentDiv.fadeIn(defaultFadeSpeed).addClass("shadow"); 
		 });
	}
*/	
	menuAtTop = true;
	contentDiv.fadeIn(defaultFadeSpeed).addClass("shadow"); 

}

function mainMenuInfoClickEvent(event) 
{
	event.preventDefault();
	STLog("info menuAtTop:"+menuAtTop);
	
	logoDiv.hide();
	contentDiv.hide();
	infoDiv.hide();
	projectMenuDiv.hide();

	tooltipDiv.removeClass().hide();
	
	$("#mainmenu a").removeClass("selected");
	$(this).addClass("selected");
	
	/*
	if (menuAtTop) {
		var tmpY = defaultY + defaultH;
		menuDiv.animate({top:tmpY+"px"}, "fast", function animateMenuToBottomCallback() { 
			STLog("");
			menuAtTop = false;
			aboutDiv.fadeIn(defaultFadeSpeed).addClass("shadow");
		//	bodyBgDiv.addClass("about").fadeIn(1000);
		 });
	}
	else {	
			aboutDiv.fadeIn(defaultFadeSpeed).addClass("shadow");
		//	bodyBgDiv.addClass("about").fadeIn(1000);
	}
	*/
	aboutDiv.slideDown(defaultFadeSpeed).addClass("shadow");

}




function moreInformationClickEvent(e) {
	e.preventDefault();
	STLog();
	$("#more-info").toggle();
	if ($("#more-info").is(":visible")) $(this).html(less());
	else $(this).html(more());
}

function viewClickEvent(e) {
	e.preventDefault();
	currentProject = $(this).attr("id");
	var index = projectIndex(currentProject);
	var p = getProject(currentLang, currentSection, currentProject);
	
//	STLog("B currentItem:"+ currentItem);

	if (!viewExpanded) {
		$(".view").css({width:defaultViewWidth+"px"});
		$("#longview").css({left:-(defaultViewWidth*index)+"px"}).removeClass("multi");
		viewExpanded = true;
		setProjectInfo(p); 
		setProjectMenu();
	}
	else {
		var count = p['img'].length;
		if (count > 1) {
			$("#i-"+currentItem).removeClass("selected");
			currentItem = (currentItem + 1) % count;
			var img = p['img'][currentItem]['@attributes']['src'];
			setViewImage("#"+currentProject, img);
			$("#i-"+currentItem).addClass("selected");
		}
	}
//	STLog("currentItem:"+ currentItem+" count:"+count+);

}

function projectMenuClickEvent(e) {
	e.preventDefault();
	currentProject = $(this).attr("id").substring(2);
	STLog(currentProject);
	var index = projectIndex(currentProject);
	var p = getProject(currentLang, currentSection, currentProject);
	
	if (!viewExpanded) {
		$(".view").css({width:defaultViewWidth+"px"});
		viewExpanded = true;
	}
	
	$("#longview").removeClass("multi").animate({left:-(defaultViewWidth*index)+"px"}, "slow");
	setProjectInfo(p); 
	setProjectMenu();
}

function itemMenuClickEvent(e) {
	e.preventDefault();
	var href = $(this).attr("href");
	var path = href.split('/');
	var item = path.pop();
	var p = getProject(currentLang, currentSection, currentProject);
	
//	STLog("B currentItem:"+ currentItem);

	if ((p!=null) && (currentItem != item)) {
		$("#i-"+currentItem).removeClass("selected");
		currentItem = item;
		var img = p['img'][item]['@attributes']['src'];
		setViewImage("#"+currentProject, img);
		$("#i-"+currentItem).addClass("selected");
	}
	
//	STLog("currentItem:"+currentItem);
}

function prevProjectClickEvent(e) {
	e.preventDefault();
	setContentToNextProject(-1);
}

function nextProjectClickEvent(e) {
	e.preventDefault();
	setContentToNextProject(1);
}
 
function windowResizeEvent(e) 
{
	windowH = $(window).height();
	windowW = $(window).width();
	
	bodyBgDiv.css({width:(windowW)+"px", height:(windowH)+"px"});
	
//	STLog("resized to "+windowH+" x "+windowW);

	// defaultW = aboutDiv.outerWidth();
	defaultW = 800;
	defaultH = aboutDiv.outerHeight();
	
	defaultX = Math.round((windowW - defaultW) / 2);
	defaultY = Math.round((windowH - defaultH) / 2);	
	
//	STLog(x,y);

	aboutDiv.css({position:'absolute', left:defaultX+'px', top:defaultY+'px', zIndex:100});
	logoDiv.css({position:'absolute', left:defaultX+'px', top:(defaultY-55)+'px', zIndex:110});
	contentDiv.css({position:'absolute', left:defaultX+'px', top:defaultY+'px', zIndex:120});

	var tmpY = (menuAtTop) ? defaultY - menuDiv.outerHeight(true) : defaultY + defaultH;
	menuDiv.css({position:'absolute', left:defaultX+'px', top:tmpY+'px', zIndex:130});
	
	infoDiv.css({position:'absolute', left:defaultX+'px', top:(defaultY + defaultH)+'px', zIndex:140});
}




// DATA ACCESS

function getFirstAttr(obj, attrName) {
	var img = (obj['img']['@attributes'] == undefined) ? obj['img'][0]['@attributes'][attrName] : obj['img']['@attributes'][attrName];
	return img;
}

function getAllProjects(lang, section) {
	var foundProjects = null;
	var categories = siteData[lang]['category'];
	for (var i=0; i<categories.length; i++) {
		if (categories[i]['@attributes']['id'] == section) {
			var foundProjects = categories[i];
		}
	}
	return foundProjects;
}

function getProject(lang, section, projectId) {
	var foundProject = null;
	var mySection = getAllProjects(lang, section);
	//STLog(mySection, lang, section, project);
	for (var j=0; j<mySection['project'].length; j++) {		
		if (mySection['project'][j]['@attributes']['id'] == projectId) {
			var foundProject = mySection['project'][j];
		}
	}
	//STLog(foundProject);
	return foundProject;
}


function projectIndex(objId) {
	var allProjects = getAllProjects(currentLang, currentSection);
	var l = allProjects['project'].length;

	for (var j=0; j<l; j++) {		
		if (allProjects['project'][j]['@attributes']['id'] == objId) {
			var projectIndex = j;
		}
	}
	return projectIndex;
}


// UTILITIES 

// - Log function
function STLog(a1) {
	if (window.console && doLog) window.console.log(STLog.caller.name, a1, arguments);
}

// - Preloads all used images
function preloadImages() {
	var categories = siteData[currentLang].category;
	var imageArray = new Array();

	for (var i=0; i<categories.length; i++) {
		var mySection = categories[i];	
		if (mySection.project != undefined) {
			for (var j=0; j<mySection.project.length; j++) {		
					var myProject = mySection.project[j];
					if (myProject['img']['@attributes'] == undefined) {
						for (k=0; k<myProject.img.length; k++) {
 							imageArray.push('data/'+myProject['img'][k]['@attributes']['src']);				
 						}
					}
					else {
						imageArray.push('data/'+myProject['img']['@attributes']['src']);
					}
			}
		}
	}
		
	allImagesCount = imageArray.length;
	$.cacheImage(imageArray);
}

// jquery offset() returns strange stuff
function getPos(obj) {
	var output = new Object();
	var mytop=0, myleft=0;
	while( obj) {
		mytop+= obj.offsetTop;
		myleft+= obj.offsetLeft;
		obj= obj.offsetParent;
	}
	output.left = myleft;
	output.top = mytop;
	return output;
}

function more() {
	if (currentLang == "sl") return "več &hellip;";
	else return "more &hellip;";
}

function less() {
	if (currentLang == "sl") return "manj &hellip;";
	else return "less &hellip;";
}

function str2br(str) {
	return str.replace(/\|/g, '<br />');
}

