
function gmap_center(name, lat, lng)
{
    window.maps[name].setCenter(new GLatLng(lat, lng));
}


function gmap_resize(name)
{
    window.maps[name].checkResize();
}


function gmap_new(name, canvas_id, hide_map_ctrl)
{
    if (!window.maps)
    {
        window.maps = {};
    }
    
    if (!window.bounds)
    {
        window.bounds = {}; 
    }

    var canvas = document.getElementById(canvas_id);
    window.maps[name] = new GMap2(canvas);
    if (!hide_map_ctrl)
    {
        window.maps[name].addControl(new GSmallMapControl());
    }
    // window.maps[name].addControl(new GMapTypeControl());
    window.bounds[name] = new GLatLngBounds();
    gmap_center(name, 0, 0);
}


function gmap_make_marker()
{
    var icon = new GIcon(G_DEFAULT_ICON);
    icon.shadow = null;
    icon.image = "/img/gmap_circle.png";
    icon.iconSize = new GSize(10, 10);
    icon.iconAnchor = new GPoint(5, 5);
    icon.infoWindowAnchor = new GPoint(5, 5);
    window.marker = icon;
}


function gmap_clear(name)
{
    // Remove current markers from map
    window.maps[name].clearOverlays();
    window.bounds[name] = new GLatLngBounds();
}


function gmap_hide_infowindow(name)
{
    window.maps[name].getInfoWindow().hide();
}


function gmap_exists(name)
{
    return window.maps && window.maps[name];
}


function gmap_recenter(name)
{
    window.maps[name].setCenter(window.bounds[name].getCenter());
}


function gmap_rezoom(name, decrease)
{
    decrease = decrease ? -decrease : 0;
    
    if (window.maps[name] && window.bounds[name])
    {
        var map = window.maps[name];
        var bds = window.bounds[name];
        var zoom = map.getBoundsZoomLevel(bds);
        
        map.setZoom(Math.max(0, zoom + decrease));
        map.setCenter(bds.getCenter());
    }
}


function gmap_add_point(name, lat, lng, html)
{
    if (window.maps[name])
    {
        var latlng = new GLatLng(lat, lng);
        var marker = new GMarker(latlng, { icon: window.marker });
        
        if (html)
        {
            marker.bindInfoWindowHtml(html);
        }

        window.maps[name].addOverlay(marker);

        if (window.bounds[name])
        {
            window.bounds[name].extend(latlng);
        }
    }
}


function gmap_compatible()
{
    return window.GBrowserIsCompatible && GBrowserIsCompatible();
}


function toggle(id, disp_type)
{
    var elem = document.getElementById(id);

    if (elem.style.display == 'none')
    {
        elem.style.display = '';
    }
    else
    {
        elem.style.display = 'none';
    }
}


function find_keyup(ev)
{
    if (ev.keyCode == 13)
    {
        find_submit();
    }
}


function find_submit()
{
    var txt = jQuery('#home_bar_find_input').get(0).value;
    more_results("/find_ajax/?q=" + encodeURIComponent(txt));
}


function locate_submit(school_id)
{
    gmap_hide_infowindow('locate');
    var school = window.schools_data[school_id];
    gmap_center('locate', school.lat, school.lng);
    more_results('/locate_ajax/' + school_id + '/');
    jQuery.fn.fancymap.close();
}

function degree_theme_close(degree_id)
{
    jQuery('#degree_theme_row_' + degree_id).remove();
}

function degree_theme_results(degree_id, data, status, color, percent)
{
    jQuery('#degree_theme_row_' + degree_id).remove();
    jQuery('#results_row_' + degree_id).after(data);    
    jQuery('#degree_theme_row_' + degree_id + ' h3').css('color', '#' + color);
    jQuery('#degree_theme_row_' + degree_id + ' .percent').html(percent);
}

function degree_theme_submit(degree_id, theme_id, color, percent)
{
    var url = "/degree_theme_ajax/" + degree_id + "/" + theme_id + "/";
    jQuery.get(url, {}, function (d, s) { degree_theme_results(degree_id, d, s, color, percent); });

}

function getHashValue()
{
    return window.location.hash.split('#')[1] || false ;
}

function results_arrived(data, status)
{
    jQuery('#more_results_throbber').hide();
    jQuery('#degree_compare_table tr:last').before(data);    
}

function results_querying()
{
    jQuery('#more_results_throbber').show();
    jQuery('#more_results_row').remove();
}

function more_results(url, is_button)
{
    if (!url)
    {
        url = window.more_results_url_prev_query;
    }

    if (window.more_results_url_prev_query == url && !is_button)
    {
        return;
    }
    
    results_querying();    

    if (window.more_results_url_prev_query != url)
    {
        jQuery('#degree_compare_table tr.notsticky').remove();    
        jQuery('#more_results_row').remove();
        window.results_offset = 0;
        window.more_results_url_prev_query = url;
    }

    var sep = ((url.indexOf('?') >= 0) ? '&' : '?');
    url += sep + "page=" + window.results_offset;
    jQuery.get(url, {}, results_arrived);
    window.results_offset += 1;
}


function submit_form_mk_params()
{
    var data = [];
    
    for (var i in window.sels)
    {
        var select = window.sels[i];
        if (select.name && select.value != null && select.value != '')
        {
            data.push([select.name, select.value]);
        }
    }
    
    for (var i = 0; i < window.radios.length; i++)
    {
        var radio = window.radios[i];
        if (radio.checked)
        {
            data.push([radio.name, radio.value]);
        }
    }
    
    var query = '';
    var sep = '?'
    for (var i = 0; i < data.length; i++)
    {
        query += sep + data[i][0] + '=' + encodeURIComponent(data[i][1]);
        sep = '&';
    }
    
    return query;
}

function init_locate_map()
{
    if (gmap_compatible() && !gmap_exists('locate'))
    {
        gmap_new('locate', 'locate_map_canvas');
        gmap_make_marker();
        for (var ix in window.schools_data)
        {
            var s = window.schools_data[ix];
            var h = s.name + '<br><br><input type="button" ' + 
                'style="float: right;" onClick="locate_submit(' + 
                s.id + ')" value="Select">';
            gmap_add_point('locate', s.lat, s.lng, h);
        }
        gmap_rezoom('locate');            
    }    
}

function home_bar_toggle(name)
{
    jQuery('#home_bar .home_bar_pane').css('display', 'none').css('visibility', 'visible');
    jQuery('#home_bar_' + name).show();

    jQuery('#home_bar .home_bar_button').removeClass('home_bar_item_selected');
    jQuery('#home_bar_button_' + name).addClass('home_bar_item_selected');
    
    if (name == 'find')
    {
        jQuery('#home_bar_find_input').focus();

    }
    else if (name == 'rank')
    {
        jQuery('#select10').focus();
    }
}

function sticky_result_toggle(tr_id)
{
    var tr_id_sticky = tr_id + '_sticky';
    var tr_sticky = document.getElementById(tr_id_sticky);
    if (!tr_sticky)
    {
        var tr = document.getElementById(tr_id);
        tr.id = tr_id_sticky;
        tr.sticky_time = (new Date()).getTime();
        jQuery(tr).addClass('sticky').removeClass('notsticky');
        var nr = jQuery('.results_number', tr).get(0);
        nr.old_html = jQuery(nr).html();
        jQuery(nr).html('x');
    }
    else
    {
        if (tr_sticky.sticky_time < window.last_search_time)
        {
            jQuery(tr_sticky).remove();
        }
        else
        {
            var nr = jQuery('.results_number', tr_sticky).get(0);
            jQuery(nr).html(nr.old_html);
            jQuery(tr_sticky).removeClass('sticky').addClass('notsticky');
            tr_sticky.id = tr_id;
        }
        jQuery('#' + tr_id).show();
    }
}


function submit_form(_)
{
    var query = submit_form_mk_params();
    more_results("/rank_ajax/" + query);
    return false;
}

function dynamic_submit()
{
    query = submit_form_mk_params();
    if (query.search('order=') > 0)
    {
        jQuery('#search_form').submit();        
    }
}


var nsubs = {10: 5, 20: 5};

function showLimits()
{
    document.getElementById('select20').style.visibility = 'visible';
    
    // Only enable the submit button after an order has been selected
    for (var i = 1; i <= nsubs[10]; i++)
    {
        if (document.getElementById('select' + (10 + i)).value != '')
        {
            document.getElementById('submit_button').disabled = false;
        }
    }
    
}

function selectChange(number)
{
    var n = nsubs[number]
    var s = [];

    for (var i = 0; i <= n; i++)
    {
        s.push(document.getElementById('select' + (number + i)));
    }
    
    for (var i = 1; i <= n; i++)
    {
        s[i].style.display = 'none';
        s[i].style.visibility = 'visible';
        s[i].value = '';
    }
    
    var v = Number(s[0].value);
    
    if (v > 0)
    {
         s[v].style.display = 'block';
    }
    else
    {
        s[1].style.visibility = 'hidden';        
        s[1].style.display = 'block';
    }
}

window.label_timeout = {};

function label_show(idname)
{
    jQuery('#' + idname + ' > .inner').css({'visibility': 'visible', 'opacity': 0.8});

    if (window.label_timeout[idname])
    {
        clearTimeout(window.label_timeout[idname]);
    }

    window.label_timeout[idname] = setTimeout(function (ev) { label_hide(idname); }, 2000);
}

function label_hide(idname)
{
    if (window.label_timeout[idname])
    {
        clearTimeout(window.label_timeout[idname]);
        window.label_timeout[idname] = null;
    }

    jQuery('#' + idname + ' > .inner').css('visibility', 'hidden');
}
