var data;
var seriesCount;
var activeSeries;
var activeYear;
var latestYear;
var dataYears;
var dataSeries;
var globalAlbumNames = new Array();
// Dummy up Log if log.js is not included
if (!window["Log"]) {
		var Log = {};
		Log.info = Log.log = Log.warn = Log.error = Log.assert = Log.dir = Log.dirxml = Log.trace = Log.group = function(){};
		Log.groupCollapsed = Log.groupEnd = Log.time = Log.timeEnd = Log.profile = Log.profileEnd = Log.count = Log.debug = Log.info
		function setLog(){}
}


function loadPhotoAlbums(){
    if (window["console"]) 
        setLog(console);
    seriesCount = data.series.length;
    getOptionsFromData()
    getAnchor();
    updateSeriesOptions()
    updateYearOptions()
    Event.observe('go_btn', 'click', loadSeries, false);
    Event.observe('select_series', 'change', onSeriesChange, false);
    Event.observe('select_galleryYear', 'change', onGalleryYearChange, false);
    generate();
}


function getOptionsFromData(){
    var yearMap = {}
    var s
    var g
    var year
	// Loop through all series to find all the years in the data
    for (var i = 0, num_series = data.series.length; i < num_series; i++) {
        s = data.series[i]
		if (s) {
			for (var j = 0, num_galleries = s.galleries.length; j < num_galleries; j++) {
				g = s.galleries[j]
				year = g["galleryYear"]
				if (year.length > 0) {
					yearMap[year] = 1
				}
			}
		}
    }
    //convert Map to array
    dataYears = []
    for (var n in yearMap) {
        dataYears.push(n)
    }
	dataYears.sort()
	dataYears.reverse()
    //Log.info(dataYears)
    
    latestYear = dataYears[0]
    
}


function updateSeriesOptions(){
    var combo = $("select_series")
	// clear existing option
    combo.options.length = 0
    combo.options[0] = new Option("All Series", "", false, false)
    var s
	// Dynamically build the options for the combobox
    for (var i = 0, series_len = data.series.length; i < series_len; i++) {
        s = data.series[i]
		if (s) {
			combo.options[i + 1] = new Option(s["seriesName"], s["seriesShortName"], false, activeSeries == s["seriesShortName"])
		}
    }
}


function updateYearOptions(){
    var combo = $("select_galleryYear")
	// clear existing option
    combo.options.length = 0
    combo.options[0] = new Option("All Years", "all", false, false)
	// Dynamically build the options for the combobox
    for (var i = 0, years_len = dataYears.length; i < years_len; i++) {
        combo.options[i + 1] = new Option(dataYears[i], dataYears[i], false, activeYear == dataYears[i])
    }
}

function onSeriesChange(event){

    //loadSeries(event);
}

function onGalleryYearChange(event){

    //loadSeries(event);
}

function getAnchor(){
    //gets the anchor URL and generates the series either by ID or shortName  
    // no hash = all series, latest year
    // series only =  all years
    // all = all series, all years
    // ,year = all series designated year
    // all
    // series, year
    
    
    //Log.info("getAnchor()");
    var h = document.location.hash;
    var s = ""
    if (h.length == 0) {
        activeYear = latestYear
        activeSeries = ""
    }
    else {
        // remove #
        h = h.substr(1)
        s = h.split(",")
        activeSeries = (s[0] == "") ? "all" : s[0]
        if (s.length > 1) {
            activeYear = (s[1] == "") ? "all" : s[1]
        }
        else {
            activeYear = ""
        }
    }
}

function generate(){
    var allSeries = (activeSeries == "" || activeSeries == "all") ? true : false
    var activeSeriesID = nameToID(activeSeries)
    //Log.info("generate(activeSeries:" + activeSeries + ", activeYear:" + activeYear + ", activeSeriesID:" + activeSeriesID + " allSeries:" + allSeries + ")")
    //Log.info()
    //generates the HTML
    var start = new Date()
    var m = (activeSeriesID ? (activeSeriesID - 1) : 0);
    var n = (activeSeriesID ? (m + 1) : seriesCount);
    //$("cat_box").innerHTML = "";
    var str = ''
    for (i = m; i < n; i++) {
        if (data.series[i]) {
            str += renderSeries(data.series[i], activeYear)
        }
    }
	// check that any galleries met the filter criteria
	if(str == ""){
		//Log.info("No results")
		str = "<div id='cat_box_bar'>No Results</div>";
	}
    $("cat_box").innerHTML = str;

    var end = new Date()
    var option
    if (activeSeriesID) {
        for (i = 0, options_len = $("select_series").options.length; i < options_len; i++) {
            option = $("select_series").options[i]
            option.selected = false;
            if (option.value == activeSeries) {
                option.selected = "true";
            }
        }
        
    }
    if (activeYear) {
        for (j = 0, options_len = $("select_galleryYear").options.length; j < options_len; j++) {
            option = $("select_galleryYear").options[j]
            option.selected = false;
            if (option.value == activeYear) {
                option.selected = "true";
            }
        }
    }
    var elapseTime = (end - start)
    //Log.info("render time in ms:" + elapseTime)
}

function renderSeries(seriesData, filterYear){
    //Log.info("renderSeries:" + filterYear)
    var str = ""
	var gallery
	var headerStr = ""
	var bodyStr = ""
	if (filterYear == "" || filterYear =="all"){
    	headerStr += "<div id='cat_box_bar'>" + seriesData.seriesName + "</div>";
	} else {
		headerStr += "<div id='cat_box_bar'>" + filterYear+" - "+ seriesData.seriesName + "</div>";
	}
	var columnCount = 0
    for (j = 0; j < seriesData.galleries.length; j++) {
        if ((columnCount % 7) == 0) {
            bodyStr += "<div style='clear: both;'></div>";
        }
		gallery = seriesData.galleries[j]
		if (includeGallery(gallery, filterYear)) {
			bodyStr += renderGalleryLink(gallery)
			columnCount++
		}
    }
	if (columnCount>0){
		str= headerStr+bodyStr
	}
    return str
}

function includeGallery(galleryData, filterYear){
	var result = false
	if (filterYear == "" || filterYear =="all"){
		result = true
	} else if (galleryData.galleryYear == filterYear){
		result = true
	}
	//Log.info(galleryData["galleryName"]+".year:"+galleryData.galleryYear+" == "+filterYear+" result:"+result)
	return result
}

function renderGalleryLink(galleryData){
    var str = ""
    str += "<div id='cat_box_item'><a href='" + galleryData.galleryURL + "' onClick=\"fireTag('64.3',{'<album_name>': '" + (galleryData.galleryName.replace('\'', '')) + "'});\"><img src='" +
    galleryData.galleryTN +
    "' /><br />" +
    galleryData.galleryName +
    "</a>" +
    "<p>(" +
    galleryData.galleryPhotosCount +
    " photos)</p></div>";
    return str
}

function loadSeries(){
    // loads and generates the series page upon selection
    var x = $("select_series")
    var y = $("select_galleryYear")
    activeSeries = x.options[x.selectedIndex].value;
    activeYear = y.options[y.selectedIndex].value;
    $("photos_go_btn").href = "#" + activeSeries + "," + activeYear;
    window.location.hash = activeSeries;
    generate();
}

function nameToID(activeSeries){
    //converts shortName to IDs
    var id = 0
	var series
    for (i = 0, len = data.series.length; i < (len); i++) {
		
		series = data.series[i]
		if (series) {
			if (activeSeries == series.seriesShortName) {
				id = i + 1;
				break;
			}
		}
    }
    return id
}
