﻿
var Filter = '';
//{"ID": "1", "type":"Image", "imagetype":"Map", "source":"Various", "level":"continental", "url":"http://www.epdc.org/beta/datavisualization/content/maps/cont_africa_nar_prim_var_2000-2005.jpg", "school-level":"Primary", "uri":"http://www.epdc.org/beta/datavisualization/content/maps/cont_africa_nar_prim_var_2000-2005.jpg", "imageURL":"content/maps/thumbs/cont_africa_nar_prim_var_2000-2005.jpg", "year":"2000-2005", "label":"Africa Net Attendace Rate (Primary) 2000-2005", "indicator":"Net Attendace Rate", "continent":"Africa"},
//var dynamicRollup =  searchFields;
var arThumbs = [];
var totalThumbs = 0;
var sBasePath = filterCriteria.BasePath;
var bCheckOrigin = false; //when the checkbox is checked, it first changes its checked status, then my flipflag function is called, which flips it back.
//need to keep track of when the check originates from a checkbox and when from the row, so it only checks/unchecks once  GD 

function changeBGColor(selObj) {
    for (var x = 0; x < document.getElementById(selObj).options.length; x++) {
        document.getElementById(selObj).options[x].style.color = 'purple';
    }
    document.getElementById(selObj).options[document.getElementById(selObj).selectedIndex].style.background = 'red';

}

//load JSON file to fill out select boxes with sums
function initLoad() {
    Filter = { "LEVEL": "-1", "CONTINENT": "-1", "COUNTRY": "-1", "INDICATOR": "-1", "OVERVIEW": "-1", "SCHOOLLEVEL": "-1", "CHARACTERISTIC": "-1" };
    if (sCountrySelection!=''){
        Filter.COUNTRY = sCountrySelection;
    }
    reloadSelects(searchFields);
    document.getElementById('highslide-gallery').innerHTML = '';
    if (sCountrySelection != '') {
        filterThumbs();
    }else{
        document.getElementById('totalTitle').innerHTML = 'Please select some criteria to begin a search.';
    }
}

function reloadSelects(whichRollup) {
    loadSelect("Level", "selLevels", Filter.LEVEL, whichRollup);
    loadSelect("Continent", "selContinents", Filter.CONTINENT, whichRollup);
    loadSelect("Country", "selCountries", Filter.COUNTRY, whichRollup);
    loadSelect("Indicator", "selIndicators", Filter.INDICATOR, whichRollup);
    loadSelect("Overviews", "selOverviews", Filter.OVERVIEW, whichRollup);
    loadSelect("School Level", "selSchoolLevels", Filter.SCHOOLLEVEL, whichRollup);
    loadSelect("Characteristic", "selCharacteristics", Filter.CHARACTERISTIC, whichRollup);
}

function loadSelect(whichCriteria, divToLoad, selectedValue, whichRollup) {
    document.getElementById(divToLoad).innerHTML = '';
    var sInnerText = "<TR style='background-color:#ffcc66;'><TD></TD><TD align=center>Matches</TD><TD align=center>Value</TD></TR>";
    var z = 0;
    var sFieldValue = "";

    for (var x = 0; x < whichRollup.Fields.length; x++) {
        var curField = whichRollup.Fields[x].FieldName;
        if (curField == whichCriteria) {
            //load the select

            for (var y = 0; y < whichRollup.Fields[x].Values.length; y++) {
                if (whichRollup.Fields[x].Values[y].Name == null) {
                    //var optn = new Option("Null", 0);
                } else {
                    //                if (whichRollup.Fields[x].Values[y].Total != 0) {
                    var sTest = "flipflag('" + divToLoad + z + "');";
                    sFieldValue = whichRollup.Fields[x].Values[y].Name;
                    sInnerText += "<TR class='checklist' onclick=" + sTest + ">";
                    sInnerText += "<TD valign=top>";
                    sInnerText += "<input type='checkbox' id='" + divToLoad + z + "' value='" + sFieldValue + "'";
                    if (selectedValue.indexOf("," + sFieldValue + ",") > -1) {
                        sInnerText += " checked=true";
                    }
                    sInnerText += " onclick='bCheckOrigin=true'></TD>";
                    sInnerText += "<TD valign=top align=center style='border-left:1px solid #ffcc66;'>" + whichRollup.Fields[x].Values[y].Total + "<BR></TD><TD valign=top style='border-left:1px solid #ffcc66;width:95px'>" + sFieldValue + "</TD></TR>";
                    z = z + 1;
                    //                    }
                }
            }
            document.getElementById(divToLoad).uBound = z;
        }
    }
    sInnerText = "<TABLE cellspacing='0' cellpadding='1'>" + sInnerText + "</TABLE>";
    document.getElementById(divToLoad).innerHTML = sInnerText;

}
function createEmptyRollup(whichRollup) {
    for (var x = 0; x < whichRollup.Fields.length; x++) {
        for (y = 0; y < whichRollup.Fields[x].Values.length; y++) {
            whichRollup.Fields[x].Values[y].Total = 0;
        }
    }
}

function flipflag(scheckBox) {
    if (bCheckOrigin == false) {
        if (document.getElementById(scheckBox).checked == true) {
            document.getElementById(scheckBox).checked = false;
            //sTR.background-color=black;  
        } else {
            document.getElementById(scheckBox).checked = true;
            //sTR.background-color=blue;
        }
    }
    bCheckOrigin = false;
    filterThumbs();

}
function gatherSelectedCriteria() {
    Filter.COUNTRY = getDivCriteria("selCountries");
    Filter.CONTINENT = getDivCriteria("selContinents");
    Filter.INDICATOR = getDivCriteria("selIndicators");
    Filter.OVERVIEW = getDivCriteria("selOverviews");
    Filter.SCHOOLLEVEL = getDivCriteria("selSchoolLevels");
    Filter.LEVEL = getDivCriteria("selLevels");
    Filter.CHARACTERISTIC = getDivCriteria("selCharacteristics");
}
function getDivCriteria(selToGet) {
    var x = document.getElementById(selToGet).uBound;
    var selString = ",";
    var chkBox = "";
    for (y = 0; y < x; y++) {
        chkBox = selToGet + y;
        if (document.getElementById(chkBox).checked == true) {
            selString += document.getElementById(chkBox).value + ',';
        }
    }
    if (selString == ",") {
        selString = "-1";
    }
    return selString;

}
function filterThumbs() {
    gatherSelectedCriteria();
    //load the variable with the selected criteria from all the select boxes
    createEmptyRollup(dynamicRollup);
    arThumbs = [];

    var anyFilters = false;
    var currentCriteria;
    var Header;
    var y = 0;
    totalThumbs = 0;
    if (Filter.COUNTRY == "-1" && Filter.CONTINENT == "-1" && Filter.INDICATOR == "-1" && Filter.OVERVIEW == "-1" && Filter.SCHOOLLEVEL == "-1" && Filter.LEVEL == "-1" && Filter.CHARACTERISTIC == -1) {
        anyFilters = false;
        reloadSelects(searchFields);
    } else {
        anyFilters = true;
    }
    if (anyFilters == true) {
        for (var x = 0; x < filterCriteria.items.length; x++) {
            currentCriteria = filterCriteria.items[x];
            if (meetsCriteria(Filter.COUNTRY, currentCriteria.country) && meetsCriteria(Filter.CONTINENT, currentCriteria.continent) && meetsCriteria(Filter.INDICATOR, currentCriteria.indicator) && meetsCriteria(Filter.OVERVIEW, currentCriteria.overview) && meetsCriteria(Filter.SCHOOLLEVEL, currentCriteria.schoollevel) && meetsCriteria(Filter.LEVEL, currentCriteria.level) && meetsCriteria(Filter.CHARACTERISTIC, currentCriteria.characteristic)) {
                //fill out an array of the thumbs urls
                thumbURLs = { "url": sBasePath + currentCriteria.url, "imageURL": sBasePath + currentCriteria.imageURL, "label": currentCriteria.label };
                arThumbs[y] = thumbURLs;
                y = y + 1;
                totalThumbs = totalThumbs + 1;
                incrementRollups(currentCriteria);

            }
        }
        reloadSelects(dynamicRollup);
    }
    pageThumbs(1);

}
function pageThumbs(iPage) {

    var sThumbs = "<TABLE>";
    var y = 1; //keeps thumb names in order
    var z = 1; //only 3 thumbs to a row, start a new table row every time you hit 3
    var pageSize = 15;
    //    var arrToString = "";
    iStartArray = ((iPage * pageSize) - pageSize)//page 1 will start at 0, page 2 will start at 12,etc
    //    arrToString = arThumbs.sort();
    //    arThumbs = arrToString.split();
    for (var x = iStartArray; x < (iStartArray + pageSize); x++) {
        if (x < totalThumbs) {
            if (z == 1) {
                sThumbs += "<TR>";
            }
            sThumbs += "<TD style='width: 50px; height: 30px; margin: 1 auto; border: solid 2px #ffcc66;'><div><table>";
            sThumbs += "<TR><TD><a id = 'thumb" + y + "' class='highslide' href='" + arThumbs[x].url + "' title ='" + arThumbs[x].label + "'onclick='return hs.expand(this)'>";
            sThumbs += "<img src='" + arThumbs[x].imageURL + "' alt='" + arThumbs[x].label + "'/></a></TD></TR><TR><TD class='itemThumbnail-caption'>";
            sThumbs += arThumbs[x].label + "</TD></TR>";
            sThumbs += "</table></div></TD>";

            // iStartArray = iStartArray + 1;
            if (z == 3) {
                sThumbs += "</TR>";
                z = 1;
            } else {
                z = z + 1;
            }
            y = y + 1;
        }
    }
    if ((z == 2) || (z == 3)) {
        sThumbs += "</TR>";
    }

    sThumbs += "</TABLE>";
    var numPages = totalThumbs / pageSize;
    if (totalThumbs != 0) {
        sThumbs += "<DIV style='overflow:auto;' width='500px'><TABLE><TR><TD class='cellCaption'>Page </TD>";
        for (var x = 0; x < numPages; x++) {
            if (x + 1 == iPage) {
                sThumbs += "<TD class='currentPage'>" + (x + 1) + "</TD>";
            } else {
                sThumbs += "<TD class='cellCaption' onclick='pageThumbs(" + (x + 1) + ")'><a>" + (x + 1) + "</a></TD>";
            }
        }
        sThumbs += "</TR></TABLE></DIV>";
    }
    document.getElementById('highslide-gallery').innerHTML = sThumbs;
    document.getElementById('totalTitle').innerHTML = totalThumbs + " Graphs or Maps match your selections";

}
function incrementRollups(criteria) {
 
    for (var x = 0; x < dynamicRollup.Fields[0].Values.length; x++) {
        if (criteria.characteristic == dynamicRollup.Fields[0].Values[x].Name) {
            dynamicRollup.Fields[0].Values[x].Total = dynamicRollup.Fields[0].Values[x].Total + 1;
        }
    }
    for (var x = 0; x < dynamicRollup.Fields[1].Values.length; x++) {
        if (criteria.overview == dynamicRollup.Fields[1].Values[x].Name) {
            dynamicRollup.Fields[1].Values[x].Total = dynamicRollup.Fields[1].Values[x].Total + 1;
        }
    }
    for (var x = 0; x < dynamicRollup.Fields[2].Values.length; x++) {
        if ((criteria.schoollevel) == dynamicRollup.Fields[2].Values[x].Name) {
            dynamicRollup.Fields[2].Values[x].Total = dynamicRollup.Fields[2].Values[x].Total + 1;
        }
    }
    for (var x = 0; x < dynamicRollup.Fields[3].Values.length; x++) {
        if (criteria.indicator == dynamicRollup.Fields[3].Values[x].Name) {
            dynamicRollup.Fields[3].Values[x].Total = dynamicRollup.Fields[3].Values[x].Total + 1;
        }
    }
    for (var x = 0; x < dynamicRollup.Fields[4].Values.length; x++) {
        if (criteria.level == dynamicRollup.Fields[4].Values[x].Name) {
            dynamicRollup.Fields[4].Values[x].Total = dynamicRollup.Fields[4].Values[x].Total + 1;
        }
    }
    for (var x = 0; x < dynamicRollup.Fields[5].Values.length; x++) {
        if (criteria.continent == dynamicRollup.Fields[5].Values[x].Name) {
            dynamicRollup.Fields[5].Values[x].Total = dynamicRollup.Fields[5].Values[x].Total + 1;
        }
    }
    for (var x = 0; x < dynamicRollup.Fields[6].Values.length; x++) {
        if (criteria.country == dynamicRollup.Fields[6].Values[x].Name) {
            dynamicRollup.Fields[6].Values[x].Total = dynamicRollup.Fields[6].Values[x].Total + 1;
        }
    }

}
function meetsCriteria(sValueSelected, sJSONValue) {
    var bRet = false;
    sJSONValue = "," + sJSONValue + ",";
    if ((sValueSelected.indexOf(sJSONValue) > -1 || sValueSelected == "-1")) {
        bRet = true;
    } else {
        if (sValueSelected == null) {
            //no value was selected for this criteria
            bRet = true;
        }
    }
    return bRet;
}

function loadSelect2(whichCriteria, selToLoad, selectedValue, whichRollup) {
    document.getElementById(selToLoad).options.length = 0;
    for (var x = 0; x < whichRollup.Fields.length; x++) {
        var curField = whichRollup.Fields[x].FieldName;
        if (curField == whichCriteria) {
            //load the select

            var optn = new Option("(NONE)", -1);
            document.getElementById(selToLoad).options.add(optn);
            if (selectedValue == -1) {
                optn.selected = true;
            }

            for (var y = 0; y < whichRollup.Fields[x].Values.length; y++) {
                if (whichRollup.Fields[x].Values[y].Name == null) {
                    //var optn = new Option("Null", 0);
                } else {
                    if (whichRollup.Fields[x].Values[y].Total != 0) {
                        var optn = new Option(whichRollup.Fields[x].Values[y].Total + ' - ' + whichRollup.Fields[x].Values[y].Name, whichRollup.Fields[x].Values[y].Name);
                        optn.title = whichRollup.Fields[x].Values[y].Name;
                        //                        optn.style.scrollbarBaseColor = "#000000";
                        document.getElementById(selToLoad).options.add(optn);
                        if (optn.value == selectedValue) {
                            optn.selected = true;
                        }
                    }
                }
            }
        }
    }
}

function createRollupSection() {
    var whichSection = "characteristic";
    var sList = '';
    for (var x = 0; x < filterCriteria.items.length; x++) {
        currentCriteria = filterCriteria.items[x];
        if (currentCriteria.characteristic != null) {//there is a value
            if (sList.indexOf(currentCriteria.characteristic) > -1) {//the value is not listed yet

            } else {
                sList += ',' + currentCriteria.characteristic;
            }
        }
    }


}