var galleryInfo = {};

function initializeGalleryInfo(callback) {
	var path = '/index.json';
	
	if (getRequestParameter('test')) {
		alert('Loading test site!');
		path = '/index.test.json';
	}
	
	$.getJSON(path,
		function(data) {
			galleryInfo = data;			
			callback();
		});
}

var loopIndex = [];

function preloadGalleries(callback) {
	var i = 0;
	for (galleryName in galleryInfo) {
		var gallery = galleryInfo[galleryName];
		for (projectIndex in gallery.projects) {
		  for (itemIndex in gallery.projects[projectIndex].items) {
		    var item = gallery.projects[projectIndex].items[itemIndex];
                    if (item.fullPath) {
		      $('#preloadedContent').append("<div id='" + galleryName + "_" + gallery.projects[projectIndex].name + "_" + item.itemNumber + "_imageWrapper'><a href='#' onclick='loadNext();'><img src='" + item.fullPath + "'/></a></div>");	
                    } else if (item.flash) {
		      $('#preloadedContent').append("<div id='" + galleryName + "_" + gallery.projects[projectIndex].name + "_" + item.itemNumber + "_imageWrapper'><a href='#' onclick='loadNext();'>" + item.flash + "</a></div>");	
                    }
		    $('#preloadedContent').append("<div id='" + galleryName + "_" + gallery.projects[projectIndex].name + "_" + item.itemNumber + "_blurbWrapper'>" + item.description + "</div>");					

		    gallery.projects[projectIndex].items[itemIndex].loopIndex = i;
		    loopIndex[i] = {'galleryName' : galleryName, 
		                    'projectName' : projectIndex, 
		                    'itemNumber' : item.itemNumber,
		                    'loopIndex' : i};
		    //$.inspect(loopIndex[i]);
		    i++;
		  }
		}
	}
	callback();
}

function getSelectedCategory() {
	var idParts = $("#selectedItem").val().split("\-");
	return idParts[0];
}

function getSelectedProjectName() {
	var idParts = $("#selectedItem").val().split("\-");
	return idParts[1];
}

function getSelectedItemNumber() {
	var idParts = $("#selectedItem").val().split("\-");
	return idParts[2];
}

function getLoopIndex() {
	var idParts = $("#selectedItem").val().split("\-");
	return parseInt(idParts[3]);
}

function loadCategory(categoryName) {
	if (categoryName != getSelectedCategory()) {
		//if new category
		var categoryInfo = galleryInfo[categoryName];
		if (categoryInfo) {
			//clear the horizontal and vertical item lists
			$("#verticalItemList").children().remove();
			$("#horizontalItemList").children().remove();
			
			//load vertical navigation lists for category
			for (projectIndex in categoryInfo.projects) {
				var projectInfo = categoryInfo.projects[projectIndex];
				var verticalNavItem = createVerticalNavItem(projectInfo);
				$("#verticalItemList").append(verticalNavItem);					
			}
			
			//setup click handlers for new items
			setClickHandlers();
			
			//un-highlight previously selected category
			
			//highlight category
			
		}
	}
}

function createHorizontalNavItem(itemInfo) {
	return '<li class="Number"><a href="#" class="linknumbers itemLink" id="' + itemInfo.categoryName + '_' + itemInfo.projectName + '_' + itemInfo.itemNumber + '_horizontal">' + itemInfo.itemNumber + '</a></li>';
}

function createVerticalNavItem(projectInfo) {
	return '<li class="categoryItem"><a href="#" class="linkcolumn2 itemLink ' + projectInfo.categoryName + '" id="' + projectInfo.categoryName + '_' + projectInfo.name+ '_1_vertical">' + projectInfo.fullName + '</a></li>';
}

function loadProject(categoryName, projectName) {
	if (projectName != getSelectedProjectName() || categoryName != getSelectedCategory()) {
		$("#horizontalItemList").children().remove();
		//if new project
		var projectInfo = galleryInfo[categoryName]['projects'][projectName];
		$("#horizontalItemList").append('<li class="Number"><a href="#" onclick="loadPrevious(); return false;" class="linknumbers"><</a></li>');
		$("#horizontalItemList").append('<li class="Number"><a href="#" onclick="loadNext(); return false;" class="linknumbers">&nbsp;></a></li>');
		for (index in projectInfo.items) {
			var horizontalNavItem = createHorizontalNavItem(projectInfo.items[index]);		
			$("#horizontalItemList").append(horizontalNavItem);
		}

		//setup click handlers for new items
		setClickHandlers();
	}
}

function loadItem(categoryName, projectName, itemNumber) {
	if (categoryName != getSelectedCategory() || projectName != getSelectedProjectName() || itemNumber != getSelectedItemNumber()) {
		//un-highlight previously selected item navigation elements
		$('.itemSelected').removeClass('itemSelected');
		
		//highlight item name in vertical navigation, and item # in horizontal navigation
		$('#' + categoryName).addClass('itemSelected');
		$('#' + categoryName + '_' + projectName + '_' + itemNumber + '_horizontal').addClass('itemSelected');
		$('#' + categoryName + '_' + projectName + '_1_vertical').addClass('itemSelected');

		if ($('#' + categoryName + '_' + projectName + "_" + itemNumber + '_imageWrapper').length > 0) {
			//display item image and blurb using preloaded elements
			$('#itemImage').html($('#' + categoryName + '_' + projectName + "_" + itemNumber + '_imageWrapper').html());
			$('#itemBlurb').html($('#' + categoryName + '_' + projectName + "_" + itemNumber + '_blurbWrapper').html());
		} else {
			//oops - item hasn't been preloaded. 
		}
		
		var loopIndex = galleryInfo[categoryName].projects[projectName].items[parseInt(itemNumber) - 1].loopIndex;	
		$('#selectedItem').val(categoryName + "-" + projectName + "-" +  itemNumber + "-" + loopIndex);
		setColumnHeight();
	}
}

var thumbs = [];

function initializeThumbs() {
	var i = 0;
	for (category in galleryInfo) {
		for (project in galleryInfo[category].projects) {
			for (item in galleryInfo[category].projects[project].items) {
				if (galleryInfo[category].projects[project].items[item].thumbnailPath) {
					thumbs[i] = {'thumbnailPath' : galleryInfo[category].projects[project].items[item].thumbnailPath,
							'url' : '/gallery.html?category=' + category + '&project=' + project + '&itemNumber=' + (parseInt(item) + 1)};
					i++;
				}
			}
		}
	}
}

function getThumb() {
	if (thumbs.length == 0) {
		initializeThumbs();
 	}
 	
	var thumbIndex = $('#thumbIndex').val();
	
	if (thumbIndex) {
		thumbIndex++;
		if (thumbIndex > thumbs.length - 1) {
			thumbIndex = 0;
		}
	} else {
		thumbIndex = 0;
	}
	
	$('#thumbIndex').val(thumbIndex);
 	return thumbs[thumbIndex];
}

function loadNext() {
	var currentLoopIndex = getLoopIndex();
	var nextItem = null;
	
	if ((parseInt(currentLoopIndex) + 1) >= loopIndex.length) {
		nextItem = loopIndex[0];
	} else {
		nextItem = loopIndex[parseInt(currentLoopIndex) + 1];
	}
	
	loadCategory(nextItem.galleryName);
	loadProject(nextItem.galleryName,nextItem.projectName);
	loadItem(nextItem.galleryName,nextItem.projectName,nextItem.itemNumber);	
}

function loadPrevious() {
	var currentLoopIndex = getLoopIndex();
	var previousItem = null;
	
	if ((parseInt(currentLoopIndex) - 1) < 0) {
		previousItem = loopIndex[loopIndex.length - 1];
	} else {
		previousItem = loopIndex[parseInt(currentLoopIndex) - 1];
	}
	
	loadCategory(previousItem.galleryName);
	loadProject(previousItem.galleryName,previousItem.projectName);
	loadItem(previousItem.galleryName,previousItem.projectName,previousItem.itemNumber);	
}

function getRequestParameters() {
	    var vars = [], hash;
	    var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
	    for(var i = 0; i < hashes.length; i++)
	    {
		hash = hashes[i].split('=');
		vars.push(hash[0]);
		if (hash[1]) {
			vars[hash[0]] = hash[1].replace("#","");
		}
	    }
	    return vars;
}
  
function getRequestParameter(name) {
	return getRequestParameters()[name];
}

function setClickHandlers() {
	$(".categoryLink").click(function() {
		var category = $(this).attr("id");
		//if new category, load index for category and highlight category
		loadCategory(category);
		
		for (project in galleryInfo[category].projects) {
		  loadProject(category, project);
  		  loadItem(category,project,1);
		  break;
		}
			
				
	});
	
	
	$(".itemLink").click(function() {
		var idParts = $(this).attr("id").split("_");
		var category = idParts[0]; 
		var projectName = idParts[1];
		var itemNumber = idParts[2];
		loadCategory(category);
		
		loadProject(category, projectName);
						
		//display selected category item (image and blurb)
		loadItem(category,projectName,itemNumber);					
	});
}

function getComputedStyleHeight(element) {
  if (document.defaultView) {
    return document.defaultView.getComputedStyle(element, '').getPropertyValue("height");
  } else if (element.currentStyle) {
    return element.currentStyle.height;
  }
}

function setColumnHeight() {
  var imageHeight = $('#itemImage').outerHeight() + 142;
  if ($(window).height() < imageHeight) {				
	$('.column1').css('height',imageHeight);
	$('.column2').css('height',imageHeight);
  } else {
  	var windowHeight = '100%';
  	//if ($.browser.webkit) {
  	//	windowHeight = '115%';
  	//	$('.container').css('height',windowHeight);
  	//}
  	
	$('.column1').css('height',windowHeight);
	$('.column2').css('height',windowHeight);

  }
}

function setHomepageColumnHeight() {
  var contentHeight = $('#contentColumn').outerHeight() + 280;
  if ($(window).height() < contentHeight) {				
	$('.column1').css('height',contentHeight);
	$('.column2').css('height',contentHeight);
  } else {
  	var windowHeight = '100%';
  	//if ($.browser.webkit) {
  	//	windowHeight = '115%';
  	//	$('.container').css('height',contentHeight);
  	//}
  	
	$('.column1').css('height',windowHeight);
	$('.column2').css('height',windowHeight);

  }
}
