var collapseHeight = 212;
var overlapHeight = 54;
var itmCount = 0;
var initJson = null;
var mainFeatureJson = null;
var mediaJson = null;
var channelListPath = "content/channel_list.json";
var mediaContainer = null;
var isListView = false;

/* Search Functions
--------------------------------------- */
function searchMedia() {
	var keywords = $("#keywords").val();
	if(keywords == "") return false;
	$("#loading").fadeIn("fast", function() {
		$("#voice_contentcontainer").fadeOut("fast", function() {
			$("#channels_product li.selected").removeClass("selected");
			$("#main_heading").html(keywords);
			var langStr = (n_lang != null && n_lang != "en-us") ? "&language="+n_lang : "";
			$.ajax({
				type: "GET",
				url: "content/searchMedia?text="+encodeURI(keywords) + langStr,
				dataType: "json",
				success: function(data) {
					$('#voice_content').empty();
					$('#customize').show();
					if(data["media"].length == 0) showNoResults();
					else loadMediaItems(data["media"],processChannel);
				},
				error: function(XMLHttpRequest, textStatus) {
					showNoResults();
				}
			});
		});
	});
	return false;
}

function showNoResults() {
	$('#voice_content').html('<p id="noresultsmsg">'+localStr["noresults"]+'</p>');
	$('#customize').hide();
	$("#voice_contentcontainer").fadeIn("fast", function() {
		$("#loading").fadeOut("fast");
	});
}

/* Channel Functions
--------------------------------------- */

function initChannelList() {
	initChannelOverflow("channels_product");
	initChannelOverflow("channels_events");
}

function initChannelOverflow(target) {
	var channelsHeight = $("#"+target+" div.overlap").height();
	$("#"+target+" div.overlap").height(Math.min(channelsHeight, collapseHeight));
	if(channelsHeight > collapseHeight) {
		$('#'+target+' .overlap').append('<div class="overlap_more"><div class="overlap_more_sub"><a href="#">'+localStr["show"]+'</a></div></div>').find(".overlap_more_sub").ifixpng().find("a").click(toggleChannelList);
	}
}

function loadChannel(aObj, jsonPath) {
	$(aObj).parent().parent().find("li.selected").removeClass("selected");
	$(aObj).parent().addClass("selected");
	$("#loading").fadeIn("fast", function() {
		$("#voice_contentcontainer").fadeOut("fast", function() {
			$("#main_heading").html(aObj.innerHTML);
			$.ajax({
				type: "GET",
				url: "../"+jsonPath,
				dataType: "json",
				success: function(data) {
					$('#voice_content').empty();
					$('#customize').show();
					$('#customize .lefthalf form').show();
					loadMediaItems(data["media"],processChannel);
					createCookie("mediagallerychannel",jsonPath.replace(".json","").replace("media/content/",""));
				}
			});
		});
	});
}

function processChannel() {
	addMediaItemsColumns();
	
	$("#voice_contentcontainer").fadeIn("slow");
	$(".rateme").novellrater({ group: "Novell Voice" });
	$("#loading").fadeOut("fast");
}

function loadFeaturedChannel(aObj) {
	$(aObj).parent().parent().find("li.selected").removeClass("selected");
	$(aObj).parent().addClass("selected");
	$("#loading").fadeIn("fast", function() {
		$("#voice_contentcontainer").fadeOut("fast", function() {
			$("#main_heading").html(aObj.innerHTML);
			$('#customize').show();
			loadFeaturedItms();
			deleteCookie("mediagallerychannel");
		});
	});
}

function toggleChannelList() {
	if($(this).hasClass("active")){ //the menu is expanded, so now contract
		$(this).fadeOut("fast", function() {
			$(this).text(localStr["show"]).toggleClass("active");			 
			$(this).parent().parent().parent()
				.animate({ height: collapseHeight }, function(){
					$(this).find(".overlap_more a").fadeIn("fast");
				});
		});
	}
	else { //the menu is contracted, so now expand
		var expandHeight = parseInt($(this).parent().parent().parent().find("ul").height()) + overlapHeight;
		$(this).fadeOut("fast", function() {
			$(this).text(localStr["hide"]).toggleClass("active");			 
			$(this).parent().parent().parent()
				.animate({ height: expandHeight }, function(){
					$(this).find(".overlap_more a").fadeIn("fast");
				});
		});
	}
	return false;
}

/* Featured Item Functions
--------------------------------------- */

function loadFeaturedItms() {
	var featured = initJson["featured"];
	mainItm = featured["main"];
	var mainItmUrl = mainItm[2];
	if(n_lang != "en-us" && isMediaInLang(n_lang, mainItm[3]) ) {
		mainItmUrl = "/"+n_lang+"/"+mainItmUrl;
	}
	else {
		mainItmUrl = "/"+mainItmUrl;
	}
	mainFeatureJson = { url: mainItmUrl, date: mainItm[1], data: null };
	$.ajax({
		type: "GET",
		url: mainItmUrl,
		dataType: "json",
		success: function(data) {
			mainFeatureJson["data"] = data;
		}
	});

	loadMediaItems(featured["media"],processFeaturedItms);
}

function isMediaInLang(curLang, mediaLangs) {
	for(var i = mediaLangs.length-1; i >= 0; i--) {
		if(mediaLangs[i] == curLang) return true;
	}
	return false;
}

function loadMediaItems(mediaItms, callback) {
	var itemCount = mediaItms.length;
	var loadedCount = 0;
	var invalidCount = 0;
	mediaJson = { count: itemCount, items: new Array(itemCount) };
	for(var i = 0; i < itemCount; i++) {
		var itmUrl = mediaItms[i][2];
		if(n_lang != "en-us" && isMediaInLang(n_lang, mediaItms[i][3]) ) {
			itmUrl = "/"+n_lang+"/"+itmUrl;
		}
		else {
			itmUrl = "/"+itmUrl;
		}
		mediaJson["items"][i] =  { title: mediaItms[i][0], date:mediaItms[i][1] , url: itmUrl };
		$.ajax({
			type: "GET",
			url: itmUrl,
			dataType: "json",
			success: function(data) {
				var matchFound = false;
				for(var j = 0; j < mediaJson["count"]; j++) {
					if(mediaJson["items"][j]["url"] == this.url) {
						mediaJson["items"][j]["data"] = data;
						mediaJson["items"][j]["title"] = data["title"];
						mediaJson["items"][j]["type"] = data["type"];
						loadedCount++;
						matchFound = true;
						break;
					}
				}
				if(!matchFound) invalidCount++;
				if(loadedCount + invalidCount == itemCount) {
					callback();
				}
			},
			error: function(XMLHttpRequest, textStatus) {
				invalidCount++;
				if(loadedCount + invalidCount == itemCount) {
					callback();
				}
			}
		});
	}
}

function processFeaturedItms() {
	var data = mainFeatureJson["data"];
	$('#voice_content').empty().append(getMediaItemHtml(data,mainFeatureJson["url"],mainFeatureJson["date"],true));

	if($('#voice_content').hasClass('grid_view')) $('#customize .lefthalf form').hide();
	else $('#customize .lefthalf form').show();
	
	addMediaItemsColumns();
	
	$("#voice_contentcontainer").fadeIn("slow");
	$(".rateme").novellrater({ group: "Novell Voice" });
	$("#loading").fadeOut("fast");
}

function getItemUrl(type, jsonPath) {
	var jsonFileArry = jsonPath.split("/");
	var jsonFileName = jsonFileArry[jsonFileArry.length-1];
	var url = "media.php?media="+jsonFileName.substring(0,jsonFileName.length-5);
	if(type == "event") url = "event.php?event="+jsonFileName.substring(0,jsonFileName.length-5);
	return url;
}

function addMediaItemsColumns() {
	var cols = $("#mediacols");
	if(cols.size() > 0) {
		cols.empty();
	}
	else {
		mediaContainer.append('<div id="mediacols"></div>')
	}
	
	var isList = false;
	if(mediaContainer.hasClass("list_view")) {
		isList = true;
	}
	else {
		$("#mediacols").append('<div id="col1" class="third"></div><div id="col2" class="third"></div><div id="col3" class="third last"></div>')
	}
	var itms = mediaJson["items"];
	sortMediaItems($("#media_sort").find("option:selected").attr("value"), itms);
	var count = 0;
	
	for(var i = 0; i < itms.length; i++) {
		var targetCol = "#mediacols";
		if(!isList) {
			switch(count%3) {
				case 0 :
					targetCol += " #col1";
					break;
				case 1 :
					targetCol += " #col2";
					break;
				case 2 :
					targetCol += " #col3";
					break;
			}
		}
		if(itms[i]["title"] != $("h1").text() && itms[i]["data"]) { // filter out item for currently selected event or media so it's not displayed on it's own page
			$(targetCol).append(getMediaItemHtml(itms[i]["data"],itms[i]["url"],itms[i]["date"],false));
			count++;
		}
	}

	// add rounded corners
	$('.rounded').corner("7px");
	$('.media_item').click(function(eventObject) { if(eventObject.target.nodeName.toLowerCase() != "span") window.location.href = $(this).find("h2 a").attr("href"); });
	mediaContainer.removeClass("loading");
}

function getMediaItemHtml(data, jsonPath, createDate, isMain) {
	var mediaUrl = getItemUrl(data["type"], jsonPath);
	var mediaBase = jsonPath.replace(".json","").replace("/"+n_lang,"").replace("/media/content/","");
	if(isMain) {
		return '<div id="feature_item" class="media_item rounded '+data["type"]+'">'+
					'<h5>'+localStr["featured"]+' '+((n_lang == 'en-us') ? data["type"] : '' )+'</h5>'+
					((typeof data["img"] != "undefined") ? '<div class="feature_image"><img src="../'+data["img"]["url"]+'" alt="'+data["title"]+'" width="268"/></div>' : '')+
					'<div class="feature_content">'+
						'<h2><a href="'+mediaUrl+'">'+data["title"]+'</a></h2>'+
						'<p>'+data["description"]+'</p>'+
						'<div class="feature_meta">'+
							'<div class="feature_meta_contents">'+
								'<div id="media_'+mediaBase+'" class="rateme blue"></div><hr/>'+
								'<ul>'+
									((data["length"] == "" || data["length"] == "0") ? '' : '<li><strong>'+localStr["duration"]+':</strong> '+data["length"]+'</li>')+
									'<li><strong>'+localStr["type"]+':</strong> <em class="tags">'+localStr["types"][data["type"]]+'</em></li>'+
									((data["type"] != "event" && n_lang != "en-us") ? '<li><strong>'+localStr["langlabel"]+':</strong> '+localStr["language"]+'</li>' : '')+
								'</ul>'+
							'</div>'+
						'</div>'+
					'</div><div class="clr"></div>'+
				'</div>';
	}
	else {
		var currentTime = (new Date()).getTime();
		var mediaTime = (new Date(createDate)).getTime();
		var showNew = (currentTime - mediaTime < 3628800000) ? true : false; // if less then 1 week old, show new
		// 1000 * 60 * 60 * 24 * 7 = 604800000 ms per week so 6 weeks = 3628800000
		var lang  = localStr["english"];
		if(data["xml"]) {
			lang = localStr["language"];
		}
		return '<div id="media_item_'+mediaBase+'" class="media_item rounded '+data["type"]+'">'+
			((showNew) ? '<h5>'+localStr["newMedia"]+'</h5>' : '')+
			((typeof data["img"] != "undefined") ? '<div class="media_image"><a href="'+mediaUrl+'"><img src="../'+data["img"]["url"]+'" alt="'+data["title"]+'" width="176"/></a></div>' : '')+
			'<h2><a href="'+mediaUrl+'">'+data["title"]+'</a></h2>'+
			'<p>'+data["description"]+'</p>'+
			'<div class="feature_meta">'+
				'<div id="media_'+mediaBase+'" class="rateme blue"></div><hr/>'+
				'<ul>'+
					((data["length"] == "" || data["length"] == "0") ? '' : '<li><strong>'+localStr["duration"]+':</strong> '+data["length"]+'</li>')+
					'<li><strong>'+localStr["type"]+':</strong> <em class="tags">'+localStr["types"][data["type"]]+'</em></li>'+
					((data["type"] != "event" && n_lang != "en-us") ? '<li><strong>'+localStr["langlabel"]+':</strong> '+lang+'</li>' : '')+
				'</ul>'+
			'</div><div class="clr"></div>'+
		'</div>';
	}
}

/* Related Items Section
--------------------------------------- */
function loadRelatedItems(relatedChannelQueue) {
	var channelsToLoad = relatedChannelQueue.length;
	var loadedChannels = 0;
	var loadedData = new Array(channelsToLoad);
	for(var i = 0; i < channelsToLoad; i++) {
		$.ajax({
			type: "GET",
			url: "/"+relatedChannelQueue[i],
			dataType: "json",
			success: function(data) {
				loadedData[loadedChannels] = data["media"];
				loadedChannels++;
				if(loadedChannels == channelsToLoad) mergeLoadedChannels(loadedData);
			}
		});
	}
}

function mergeLoadedChannels(loadedDataArry) {
	var mergedData = loadedDataArry[0];
	for(var i = 1; i < loadedDataArry.length; i++) {
		var data = loadedDataArry[i];
		var preMergeSize = mergedData.length;
		for(var j = 0; j < data.length; j++) {
			var alreadyThere = false;
			for(var k = 0; k < preMergeSize; k++) {
				if(data[j][0] == mergedData[k][0]) alreadyThere = true;
			}
			if(!alreadyThere) mergedData[mergedData.length] = data[j];
		}
	}
	loadMediaItems(mergedData, processRelatedItems);
}

function processRelatedItems() {
	$('#related_content').empty().hide();

	addMediaItemsColumns();
	
	$('#related_content').fadeIn("slow");
	$(".rateme").novellrater({ group: "Novell Voice" });
	$("#loading").fadeOut("fast");
}

function loadEventItems(relatedChannelPath) {
	$.ajax({
		type: "GET",
		url: relatedChannelPath,
		dataType: "json",
		success: function(data) {
			loadMediaItems(data["media"], processEventItems);
		}
	});
}

function processEventItems() {
	$('#event_content').empty().hide();

	addMediaItemsColumns();
	
	$('#event_content').fadeIn("slow");
	$(".rateme").novellrater({ group: "Novell Voice" });
	$("#loading").fadeOut("fast");
}

/* Sort
--------------------------------------- */
function sortMediaItems(sortBy, mediaItems) {
	switch(sortBy) {
		case "title" :
			mediaItems.sort(sortByTitle);
			break;
		case "recent_add" :
			mediaItems.sort(sortByDate);
			break;
		case "type" :
			mediaItems.sort(sortByType);
			break;
	}
}

function sortByTitle(a, b) {
    var x = a.title.toLowerCase();
    var y = b.title.toLowerCase();
    return ((x < y) ? -1 : ((x > y) ? 1 : 0));
}

function sortByDate(a, b) {
    var x = (new Date(a.date)).getTime();
    var y = (new Date(b.date)).getTime();
    return ((x > y) ? -1 : ((x < y) ? 1 : 0));
}

function sortByType(a, b) {
    var x = a.type.toLowerCase();
    var y = b.type.toLowerCase();
    return ((x < y) ? -1 : ((x > y) ? 1 : 0));
}

function sortMedia(){
	$("#loading").fadeIn("fast", function() {
		$("#voice_contentcontainer").fadeOut("normal", function(){
			addMediaItemsColumns();
			$("#voice_contentcontainer").fadeIn("slow", function() {
				$("#loading").fadeOut("fast");
			});
			$(".rateme").novellrater({ group: "Novell Voice" });
		});
	});
}

/* Views
--------------------------------------- */
function showListView() {
	if(!isListView){
		isListView = true;
		$("#view_list a").removeClass("off").addClass("on");
		$("#view_grid a").removeClass("on").addClass("off");
		$("#loading").fadeIn("fast", function() {
			$("#voice_contentcontainer").fadeOut("normal", function(){
				$(".grid_view").removeClass("grid_view").addClass("list_view");
				addMediaItemsColumns();
				$("#voice_contentcontainer").fadeIn("slow", function() {
					$("#loading").fadeOut("fast");
				});
				$(".rateme").novellrater({ group: "Novell Voice" });
			});
		});
	}
	return false;
}

function showGridView() {
	if(isListView){
		isListView = false;
		$("#view_grid a").removeClass("off").addClass("on");
		$("#view_list a").removeClass("on").addClass("off");
		$("#loading").fadeIn("fast", function() {
			$("#voice_contentcontainer").fadeOut("normal", function(){
				$(".list_view").removeClass("list_view").addClass("grid_view");
				addMediaItemsColumns();
				$("#voice_contentcontainer").fadeIn("slow", function() {
					$("#loading").fadeOut("fast");
				});
				$(".rateme").novellrater({ group: "Novell Voice" });
			});
		});
	}
	return false;
}

/* Lights On/Off
--------------------------------------- */
function toggleLights() {
	if($("#mask").length < 1){
		var mask = $("<div>").attr("id", "mask");
		$(mask).prependTo("#page");
	}
	
	//Get the screen height and width  
	var maskHeight = $("#page").height();  
	var maskWidth = $("#page").width();  

	//Set heigth and width to mask to fill up the whole screen  
	$('#mask').css({'width':maskWidth,'height':maskHeight});  
	// $('#mask').css({'width':"100%",'height':"100%"});  

	//transition effect       
	if($("#lights a").hasClass("on")){
		// alert("lights are on");
		$('#mask').fadeOut();
		$("body").animate({backgroundColor: "#eff0f0"});
	}
	else{
		// alert("lights are off");
		$('#mask').fadeIn("normal", function(){
			if(!$.support.opacity){
				$(this).css("filter", "alpha(opacity=80)")
			}
		});      
		$("body").animate({backgroundColor: "#111111"});
		$("body").click(function(){
			$('#mask').fadeOut();
			$('#lights a').toggleClass("on");
			$("body").animate({backgroundColor: "#eff0f0"}).unbind("click");
		});
	}
	// $("body").animate({"background-color": "#333"});
	$('#lights a').toggleClass("on");
	return false;
}

/* Init Functions
--------------------------------------- */
function processInitJson(data) {
	initJson = data;
	initChannelList();

	var selectedChannel = readCookie("mediagallerychannel");
	if(selectedChannel) {
		var channelLink = document.getElementById("c_"+selectedChannel);
		if(!channelLink) {
			loadFeaturedItms();
		}
		else {
			loadChannel(channelLink, "media/content/"+selectedChannel+".json");
		}
	}
	else {
		loadFeaturedItms();
	}
}

$(document).ready(function(){
	// media container is on home page
	mediaContainer = $("#voice_content");
	if(mediaContainer.size() >= 1) {
		$("#mediasearch").submit(searchMedia);
		$("#loading").fadeIn("fast");
		$.ajax({
			type: "GET",
			url: channelListPath,
			dataType: "json",
			success: processInitJson
		});
	}
	else {
		// related container is on media pages
		mediaContainer = $("#related_content");
		if(mediaContainer.size() >= 1) {
			$("#loading").fadeIn("fast");
			mediaContainer.addClass("loading");
			var channelLoadQueue = new Array();
			if(typeof(eventChannels) != 'undefined') {
				for(var i = 0; i < eventChannels.length; i++) {
					if(eventChannels[i] != "") channelLoadQueue[channelLoadQueue.length] = eventChannels[i];
				}
			}
			if(typeof(productChannels) != 'undefined') {
				for(var i = 0; i < productChannels.length; i++) {
					if(productChannels[i] != "") channelLoadQueue[channelLoadQueue.length] = productChannels[i];
				}
			}
			if(channelLoadQueue.length > 0) {
				loadRelatedItems(channelLoadQueue);
			}
			else {
				$('#related_content').removeClass("loading").html('<p id="noresultsmsg">This item does not have any related content.</p>').fadeIn("slow");
				$(".rateme").novellrater({ group: "Novell Voice" });
				$("#loading").fadeOut("fast");
				$("#customize").hide();
			}
		}
		else {
			// event container is on event page
			mediaContainer = $("#event_content");
			if(mediaContainer.size() >= 1) {
				mediaContainer.addClass("loading");
				$("#loading").fadeIn("fast");
				if(typeof(eventChannel) != 'undefined') {
					loadEventItems(eventChannel);
				}
			}
		}
	}
	
	// round corners
	$('#sidebar .overlap li a').corner("8px");
	$('#channels_product li:first').addClass("selected");
	$('#requestcall').corner("4px");
	$('#requestcall_salesphone').corner("4px bottom");

	//toggle between group and list view
	$("#view_list a").click(showListView);
	$("#view_grid a").click(showGridView);

	// lights on/off
	$("#lights a").click(toggleLights);

	// sort
	$("#media_sort").change(sortMedia);

});

/* Misc
--------------------------------------- */
function emailFriend() {
	openExternal("http://www.novell.com/info/sendemail.jsp?url="+escape(location.href),535,400);
}