﻿var total=0;
var searchLink;
var subjects = '';
var programs = '';
var locations = '';
var degrees = '';
var proglimit = 10;

var gradsearchHandler = "/Ajax/GradAdvancedSearchHandler.ashx";
try 
{
    $(document).ready(function(){if (isGrad()) $(".adv_btn").colorbox({ onOpen: function() { loadSubjects(); }, width: "750px", inline: true, href: "#advSearchForm" });});
} 
catch (e){}

function loadSubjects() 
{
    $.getJSON(gradsearchHandler+"?mode=subjects&id=" + uniqid(), null, function(data) {$.each(data, function(index, optionData) {createCheckbox("subjects", optionData.Name, optionData.ID, "subjects");});

        $('#subjects input').change(function() {subjectsOnChange();});

        $('#locations input').change(function() {updateCount();});

        $('#degrees input').change(function() {updateCount();});

    });
}
function subjectsOnChange() 
{
    ClearOptions('programs');
    ClearOptions('locations');
    subjects = GetCheckboxListValues('subjects');
    if (subjects == "") {
        document.getElementById("programs").innerHTML = '<div style="padding:3px;"Complete step 1 before selecting a program.</div>';
        changeCount(0);
        return;
    }
    var url = gradsearchHandler+"?mode=programs&subs=" + subjects;
    $.getJSON(url, null, function(data) {

        $.each(data, function(index, optionData) {
            createCheckbox("programs", optionData.Name, optionData.ID, "programs");

        });
        $('#programs input').change(function() {
            programsOnChange();
        });
    });
}
function programsOnChange() {
    programs = GetCheckboxListValues('programs');
    var length = programs.split(',').length;
    if (length > proglimit) {
        msg('Please limit your selection to'+ proglimit +' programs or less. You currently have chosen ' + length + ' programs.');
    }
    if (programs != "" && length <= proglimit) {
        msg('clear');
        updateCount();
        updateLocations();
    }
    else {
        ClearOptions('locations');
        changeCount(0);
    }
}
function updateLocations() {
    ClearOptions('locations');
    subjects = GetCheckboxListValues('subjects');
    programs = GetCheckboxListValues('programs');
    var url = gradsearchHandler+"?mode=locations&subs=" + subjects + "&progs=" + programs;
    var i = 0;
    var currCountryCode = "";
    $.getJSON(url, null, function(data) {
        $.each(data, function(index, json) {
            i++;
            if (i == 1) createCheckbox("locations", "All Locations", "", "locations");

            if (json.CountryCode != currCountryCode) {
                createCheckbox("locations", json.Country, json.Country, "locations");
                currCountryCode = json.CountryCode;
            }
            if (json.State != "" && json.StateCode != "") {
                createCheckbox("locations", '-' + json.State, json.StateCode, "locations");
            }

        });
        $('#locations input').change(function() {
            UnselectLocations($(this).val());
            updateCount();
        });
    });
}

function updateCount() 
{
    var url = gradsearchHandler+"?mode=search&" + getSearchQuery();
    $.getJSON(url, null, function(data) {
        if (parseInt(data) != "NaN") {
            total = parseInt(data);
            changeCount(total);
        }
    });
}
function changeCount(total) 
{
     document.getElementById('schoolCount').innerHTML = total;
    $('#schoolCount').fadeIn('slow');
}
function createCheckbox(name, labelText, value, parentId) {
    if (!labelText) return;
    var lb = document.createElement("label");
    var cb = document.createElement("input");
    cb.setAttribute("type", "checkbox");
    cb.setAttribute("name", name);
    cb.setAttribute("value", value);
    lb.appendChild(cb);
    lb.innerHTML = lb.innerHTML + labelText;
    var item = document.getElementById(parentId);
    item.appendChild(lb);
}
function ClearOptions(item) {
    try {
        var itm = document.getElementById(item);
        if (itm.hasChildNodes) {

            itm.removeChild(itm.firstChild);
            ClearOptions(item);
        }
    } catch (e) { }
}
function GetCheckboxListValues(parentId) {
    var value = "";
    var parent = document.getElementById(parentId);
    for (var i = 0; i < parent.childNodes.length; i++) {
        var child = parent.childNodes[i].childNodes[0];
        if (child) {
            if (child.checked) {
                value = value + child.value + ",";
            }
        }
    }
    value = value.substring(0, value.length - 1);
    return value;
}
function UnselectLocations(itemValue) 
{
    var parent = document.getElementById('locations');
    if (itemValue == "") 
    {
        for (var i = 0; i < parent.childNodes.length; i++) {
            var child = parent.childNodes[i].childNodes[0];
            if (child) {
                child.checked = false;
            }
            parent.firstChild.firstChild.checked = true;
        }
    }
    else 
    {
        parent.firstChild.firstChild.checked = false;
    }
    
}
function getSearchQuery() {
    programs = GetCheckboxListValues("programs");
    locations = GetCheckboxListValues("locations");
    degrees = GetCheckboxListValues("degrees");
    return "subs=" + subjects + "&progs=" + programs + "&locs=" + locations + "&degs=" + degrees + "&c=GR";
}
function Search(searchField) {
    subjects = GetCheckboxListValues("subjects");
    programs = GetCheckboxListValues("programs");
    locations = GetCheckboxListValues("locations");
    degrees = GetCheckboxListValues("degrees");

    if (!subjects && !programs) 
    {
        msg("Please complete Steps 1 and 2 above by selecting a subject area and a program.");
        return;
    }
    if (!programs) {
        msg("Please complete Step 2 above by selecting a program.");
        return;
    }
    else {
        var length = programs.split(',').length;
        if (length > proglimit) { return; }
    }
    if (total == 0) 
    {
        msg("Your query returned 0 results, try again");
        return;
    }
    else 
    {
        searchLink = "/graduate-schools/searchresults.aspx?" + getSearchQuery();
        document.location.href = searchLink;
    }
    
}
function uniqid() {
    var newDate = new Date;
    return newDate.getTime();
}



function msg(msg) 
{
    if (msg != "clear") {
        
        $('#error').html(msg);
        $('#error').show();
    }
    else {
        $('#error').hide('100');
    }
}
function isGrad() 
{
    return document.location.href.indexOf('graduate-schools') > 0;

}
