/*
Title: browse.js
Date: May, 2008
Author: ser 
Summary: This JavaScript file will be used by the mathmoments 
	pages. It's purpose is to dynamically generate a results 
	based on selections from menus 
Globals: seriesArray - read from template, the data for the menu
         html_root - the root directory
*/

var moments_root = "/mathmoments/";
//var image_root = moments_root+"images/";
var image_root = "/images/";
var podimg = image_root+"podcast-icon.gif";
var podimg_html = "<img src=\""+podimg+"\" width=\"27\" height=\"14\" border=\"0\" />";
var bulletimg = image_root+"peculiar.png";

var mp3_root = moments_root+"audioFiles/";
//var relatedimg = image_root+"external.gif";
//var relatedimg_html = "<img src=\""+relatedimg+"\" width=\"10\" height=\"10\" border=\"0\" />";
// Changed by JDP on 1 July 2010.  Style sheet seems to cover this now.  This creates extra icons.
var relatedimg = "";
var relatedimg_html = "";

var recentcount = 5;

var category;
var language;
var media;

var my_flags = new Array();
my_flags["chinese"]="china.jpg";
my_flags["french"]="france.jpg";
my_flags["german"]="germany.jpg";
my_flags["japanese"]="japan.jpg";
my_flags["polish"]="poland.jpg";
my_flags["portuguese"]="portugal.jpg";
my_flags["russian"]="russia.jpg";
my_flags["spanish"]="spain.jpg";
my_flags["greek"]="greek.gif";
my_flags["arabic"]="arabic.gif";
my_flags["hebrew"]="hebrew.gif";

var display_text = new Array();
display_text["short"]="Short version";
display_text["podcast"]="Podcast";
display_text["mp3"] = "MP3";
display_text["related"] = "Related resource";
display_text["allheader"] = "All Mathematical Moments";
display_text["recentheader"] = "Recent additions";
display_text["none"] = "There are no results to match this search";

function checkParams() {
	var url = window.location.href;
	if (url.match("cat=")) {
		parseUrl('cat');
	}
	else if (url.match("lang=")) {
		parseUrl('lang');
	}
	else {
		return "";
	}
}

function parseUrl(params) {
	var regexS = "[\\?&]"+params+"=([^&#]*)";
	var regex = new RegExp( regexS );
	var results = regex.exec(window.location.href);
	if (results == null )
	{
		return "";
	}
	else
	{
		if (params == "cat") {
			getResults(results[1],'all','all')
		} 
		else if (params == "lang") {
		getResults('all',results[1],'all')
		}
		else {
			return "";
		}
	} 
}

function getResults(category,language,media){
	document.getElementById('results').innerHTML = "";
	document.getElementById('title').innerHTML = "";
	document.getElementById('header').className = "";
	var html = "";
	var media_result;
	var lang_result;
	var id;
	var count = 0;
	category = category.replace(/\%20/g, " ");
	for (thisMoment in momentArray)
 	{
		id = thisMoment;
		if (language == 'all' || language == 'english') {
			media_result = ""
			if (category != 'all' && category != 'recent') 
			{
				if(! matchCategory(id,category)) {
					continue;
				}
			}
			if (media != 'all')
			{
				media_result = matchMedia(id,media);
				if (media_result == "") {
					continue;
				}
			}
			html += formatMomentByCat(id,media);
			count++
			if (category == 'recent' && count == recentcount) {
				break;
			}
		}
		else {
			//language specific page - needs to be formatted differently
			//not available in specific media's
			lang_result = matchLanguage(id,language);
			if (lang_result == "") {
				continue;
			}
			if (category != 'all' && category != 'recent')
			{
				if(! matchCategory(id,category)) {
					continue;
				}
			}
			if (media != 'all') 
			{
				//currently no other type available in other languages
				continue;
			}
			html += formatMomentByTran(id,lang_result);			
			count++;
			if (category == 'recent' && count == recentcount) {
				break;
			}
		
		}	
	}
	setTitle(category,language,media);
	if(html == "") {
		html = display_text['none'];
	} 
	document.getElementById('results').innerHTML = html;
	document.getElementById('categorySelect').value = category;
	document.getElementById('languageSelect').value = language;
	document.getElementById('mediaSelect').value = media;
}

function setTitle(category,language,media) {
	if (language != 'all' && language != 'english') {
		document.getElementById('header').className = "header"+camelCaps(language,1);
		return;
	}
	document.getElementById('header').className = 'headerRecent';
	if (media != 'all' || (category != 'all' && category != 'recent')) {
		document.getElementById('title').innerHTML = camelCaps(category,1);
	}
	else {
		document.getElementById('title').innerHTML = display_text[category+"header"];
	}
	return;
}

function matchCategory(id,category) {
	var rg = new RegExp(category);
	if (! rg.test(momentArray[id]["o"][2])) {
		return false;
	}
	return true;
}

function matchLanguage(id,language) {
	var test = grep(momentArray[id]["t"],language);
	return test;
}

function matchMedia(id,media){
	var test = grep(momentArray[id]["v"],media);
	return test;
}

function formatMomentByCat(id,media) {
	var cathtml;
	var versionhtml = "";
	var titlehtml = "";
	var lang;
	var translations;
	var langhtml = "";
	var displaylang;
	var bulletimg_html;  
	
	//problem with this in IE
	//[titlehtml, versionhtml] = getVersionHtml(id);

	var version, type, filename, filesize;
	var titlehtml;
	var versionhtml = ""
 	var title = momentArray[id]["o"][0];
	var src = momentArray[id]["o"][1].split(",");
	var description = momentArray[id]["o"][3];

	addpage = momentArray[id]["o"][4].split(",");
	var addpage_text = addpage[0];
	var addpage_file = addpage[1];

	for (thisVersion in momentArray[id]["v"]) {
		bulletimg_html ="<img src=\""+bulletimg+"\" width=\"12\" height=\"12\" border=\"0\" />";  
		
		version = momentArray[id]["v"][thisVersion].split("|"); 
		type = version[0];
		filename  = version[1];
		//filesize = version[2];

		if (!(/^mp3/.test(type)) && /,\s$/.test(versionhtml)) {
			versionhtml = versionhtml.replace(/,\s$/, ' ] ');
			//versionhtml += "you are here";
			versionhtml +=  bulletimg_html+"\n";
		}

		if (type == "default") {
			titlehtml = "<dt><a href=\""+moments_root+filename+"\">";
			//titlehtml += title+"</a> <span class=\"description\">"+description+"</span> <sup class=\"fileSize\">("+filesize+" KB)</sup></dt>\n";
			titlehtml += title+"</a>";
			if (description != "") {
				titlehtml += "<span class=\"description\"> - "+description+"</span>";
			}
			titlehtml += "<\dt>\n";
		}
		else {
			if (type == "mp3") {
				versionhtml += "<a href=\""+mp3_root+filename+"\">"+display_text[type]+"</a> ";
				//versionhtml += podimg_html
			}
			else if (type.match(/mp3_(\d+)/)) {
				if (type == "mp3_1") {
					versionhtml += "MP3 [ "
				}
				type = "mp3";
				bulletimg_html = ", ";
				//versionhtml += "<a href=\""+mp3_root+filename+"\">"+display_text[type]+": Part "+RegExp.$1+"</a> ";
				versionhtml += "<a href=\""+mp3_root+filename+"\">"+"Part "+RegExp.$1+"</a>";

			}
			else {
				versionhtml += "<a href=\""+moments_root+filename+"\">"+display_text[type]+"</a> ";
				//versionhtml += " <sup class=\"fileSize\">("+filesize+" KB)</sup>";
			}
			versionhtml +=  bulletimg_html;
		}
	}
	versionhtml = "<dd>"+versionhtml;
	for(var link in src){
		if(link > 0){
			versionhtml +=  bulletimg_html;
		}
		versionhtml += "<a href=\""+src[link]+"\" target=\"_blank\">"+display_text['related']+"<\a> "+relatedimg_html+" ";
	}

	if (addpage_file != "") {
		versionhtml += " <span class=\"addpage\"><a href=\""+moments_root+addpage_file+"\">"+addpage_text+"<\a></span>"
	}
	versionhtml += "<\dd>\n";


	langhtml = getTranslationHtml(id);

	cathtml = getCatHtml(id,'english',media);
	var output = "<dl>"+titlehtml + versionhtml + langhtml + cathtml + "</dl>"; 
	return output;
}

function formatMomentByTran(id, lang_result) {
	var titlehtml = "";
	var cathtml;
	var media = 'all';
	lang_info = lang_result[0].split("|");
	var lang = lang_info[0];
	var pdf = lang_info[1];
	//var filesize = lang_info[2];
	var title = lang_info[2];
	var width = lang_info[3];
	
	//titlehtml += "<dt><a href=\""+moments_root+pdf+"\"><img src=\""+image_root+title+"\" width=\""+width+"\" height=\"30\" border=\"0\" align=\"left\" \/></a><sup class=\"fileSize\">("+filesize+" KB)</sup></dt>\n";
	titlehtml += "<dt><a href=\""+moments_root+pdf+"\"><img src=\""+image_root+title+"\" width=\""+width+"\" height=\"30\" border=\"0\" align=\"left\" \/></a></dt>\n";

	cathtml = getCatHtml(id,lang,media);
	var output = "<dl>"+titlehtml + cathtml + "</dl>"; 
	return output;
}

function getTranslationHtml(id) {
	var langhtml = "";
	var translations, lang, displaylang, filename;

	if(momentArray[id]["t"][0]) {
		langhtml += "<dd>Click a flag for language translation ";
		for (thisLang in momentArray[id]["t"]) {
			translations = momentArray[id]["t"][thisLang].split("|"); 	
			lang = translations[0];
			displaylang = camelCaps(lang,1);
			filename = translations[1];	
			langhtml += "<a href=\""+moments_root+filename+"\"><img src=\""+image_root+my_flags[lang]+"\" width=\"25\" height=\"17\" border=\"0\" title=\"View in "+displaylang+"\" alt=\"View in "+displaylang+"\" /></a> ";
		}
		langhtml += "</dd>";
	}
	return langhtml;
}
function getVersionHtml(id) {
	var version, type, filename, filesize;
	var titlehtml;
	var versionhtml = ""
 	var title = momentArray[id]["o"][0];
	var src = momentArray[id]["o"][1];

	addpage = momentArray[id]["o"][4].split(",");
	var addpage_text = addpage[0];
	var addpage_file = addpage[1];
	
	for (thisVersion in momentArray[id]["v"]) {
		version = momentArray[id]["v"][thisVersion].split("|"); 
		type = version[0];
		filename  = version[1];
		filesize = version[2];
		if (type == "default") {
			titlehtml = "<dt><a href=\""+moments_root+filename+"\">";
			titlehtml += title+"</a> <sup class=\"fileSize\">("+filesize+" KB)</sup></dt>\n";
		}
		else {
			if (type == "mp3") {
				versionhtml += "<a href=\""+mp3_root+filename+"\">"+display_text[type]+"</a> ";
				versionhtml += podimg_html
			}
			else {
				versionhtml += "<a href=\""+moments_root+filename+"\">"+display_text[type]+"</a> ";
				versionhtml += " <sup class=\"fileSize\">("+filesize+" KB)</sup>";
			}
			versionhtml += bulletimg_html+"\n";
		}
	}
	versionhtml = "<dd>"+versionhtml;
	versionhtml += "<a href=\""+src+"\" target=\"_blank\">"+display_text['related']+"<\a> "+relatedimg_html;
	if (addpage_file != "") {
		versionhtml += " <span class=\"addpage\"><a href=\""+moments_root+addpage_file+"\">"+addpage_text+"<\a><\span>"
	}
	versionhtml += "<\dd>\n";
	return [titlehtml, versionhtml];
}

function getCatHtml(id,lang,media) {
	categories = momentArray[id]["o"][2].split(",");
	var cathtml = "<dd>Categories: ";
	var index = 0;
	while (index < categories.length) {
		//cathtml += "<a href=\"#\" onclick=\"javascript:getResults('"+categories[index]+"','"+lang+"','"+media+"')\">"+camelCaps(categories[index],1)+"</a>" ;
		cathtml += "<a href=\"javascript:getResults('"+categories[index]+"','"+lang+"','"+media+"')\">"+camelCaps(categories[index],1)+"</a>" ;
		index++;
		if (index != categories.length) {
			cathtml += " &#8226; \n";
		}
	}
	cathtml += "</dd>";
	return cathtml;
}

//may want to pull these out at some point and put in a generic file to be used by other scripts

function camelCaps(str, theCase) {
	var tempArray = str.split(' ');
	
	//make the first character of each word upper or lowercase
	//depending on the value of theCase
	for (var i=0; i<tempArray.length; i++) {
		if (theCase) {
			tempArray[i] = tempArray[i].charAt(0).toUpperCase() + tempArray[i].substring(1);
		}
		else {
			tempArray[i] = tempArray[i].charAt(0).toLowerCase() + tempArray[i].substring(1);
		}
	}
	return tempArray.join(' ');
}

function grep(myarray,str) {
	var ar = new Array();
	var arSub = 0;
	for (var i in myarray) {
		if (typeof myarray[i] == "string" && myarray[i].indexOf(str) != -1) {
			ar[arSub] = myarray[i];
			arSub++;
		}
	}
	return ar;
}

