//function incircleLoad(element) {

jQuery.fn.ajaxRequestInCircle = function(url) {
    var container = this.parents(".ajax_container").filter(":first");
    container.addClass("ajax_processing");

    container.html("<div style='text-align:center;'><img src = '/visuals/cropimgH/loading_small.gif'></div>");

    jQuery.get(url, function (data, textStatus) {
        container.hide();
        container.html(data);

        if (jQuery.browser.safari) {
            container.show();
            container.removeClass("ajax_processing");
        }
        else container.slideDown(100, function () { container.removeClass("ajax_processing"); });

        container.inCircleStartWatch();

        if (TOpt) TOpt.rebind();
        return false;
    });
}

jQuery.fn.formParamString = function() {
    var form = this.parents("form").filter(":first");
    var params="";
    if (form[0]) {
        params = "&"+jQuery(form[0]).formSerialize();
    }
    return params;
}

jQuery.fn.ajaxClick = function() {
    this.ajaxRequestInCircle(this.attr('id')+this.formParamString());
    jQuery('#autoCompleteDropdown').hide();
    return false;
}

jQuery.fn.ajaxChange = function() {
    this.ajaxRequestInCircle(this.find("option:selected").val()+this.formParamString());
    return false;
}

jQuery.fn.inCircleStartWatch = function() {
    this.find('.ajax_click').bind("click", function() {
        return jQuery(this).ajaxClick();
    });

    this.find('.ajax_select').bind("change", function() {
        return jQuery(this).ajaxChange();
    });

    this.find('.ajax_form').bind("submit", function() {
        jQuery(this).find('.submit_ajax').click();
        return false;
    });

    this.find('.ajax_click_post').bind("click", function() {
        var target = jQuery(this);
        var form = jQuery(this).parents("form").filter(":first");

        if (jQuery.isFunction(form.validate)) {
            if (form.validate() == 0) return false;
        }
        var container = target.parents(".ajax_container").filter(":first");
        var ajax_url = target.attr('id');
        target.fadeOut(300, function () {
            target.after("<img src = '/visuals/cropimgH/loading_small.gif'>");
        });

        form.ajaxSubmit({type:'get', url:ajax_url, dataType:'html', success: 
            function (responseText) {
                container.html(responseText);
                container.inCircleStartWatch();
            }
        });
        return false;
    });

    this.find('.ajax_onload').filter("a").click();
    this.find('.ajax_onload').filter("div").reloadContainer();

    return this;
}

var ajax_counts;


jQuery.fn.requestUrlAndWatch = function(options) {
    var url;
    var data = new Object();
    var callBack;
    if (!ajax_counts) ajax_counts = new Array;

    if (options && options.url) url = options.url;
    if (options && options.callBack) callBack = options.callBack;
    if (options && options.data) data = options.data;
    var time_now = ( new Date() ).getTime();
    data.time=time_now;
    var container = this;
    var namespace_count;
    if (!ajax_counts[container.attr('id')]) {
        ajax_counts[container.attr('id')] = 1;
    } else {
        ajax_counts[container.attr('id')] = ajax_counts[container.attr('id')]+1;
    }
    namespace_count = ajax_counts[container.attr('id')];
    jQuery.get(url, data, function (response_data, textStatus) {
        if (namespace_count == ajax_counts[container.attr('id')]) {
            container.html(response_data);
            container.inCircleStartWatch();
        } else {}
        if (typeof(callBack) == 'function') {return callBack();}
        return false;
    });
}

jQuery.fn.reloadContainer = function(option) {
    var params = "";
    var new_option = new Object();
    if (option && option.cgi_params) params = option.cgi_params;
    new_option.url = jQuery(this).attr('id') + params;
    jQuery.extend(new_option,option);

    this.each(function () {jQuery(this).requestUrlAndWatch(new_option)});
}
var homecontent_div;

jQuery(document).ready( function() {
    jQuery(document).inCircleStartWatch();
    homecontent_div =  jQuery('#homecontent_div');
    //homepage specific, will move later
    if (homecontent_div.get(0)) {
        jQuery_history_init();
        announcement_container();
        request_remove();
        provider_container();
        consumer_container();
        //cookie_watch();
        howitworks();
        jQuery.preloadImages(hiw_background);
    }
    try {
    document.execCommand('BackgroundImageCache', false, true);
    } catch(e) { }
});

function cookie_watch() {
    if (jQuery.cookie('ajax_history') == cookie_now) {
        jQuery.cookie('ajax_history', null);
        loadFilteredAnnouncements({from_session:1});
    } else {
        jQuery.cookie('ajax_history', null);
    }
}

function consumer_container() {
    jQuery('#tellus_link').click(toggle_tellus);
    jQuery('.match_criteria_container').click(open_only_tellus);
    setupExtensions();

    jQuery('#email_digest').click(function () {
        var url = "/" + community + "/home/enable_email_digest/";
        if (jQuery('#email_digest').hasClass('email_settings')) return;
        jQuery.getJSON(url, function (data, textStatus) {
            if (data.aok == 1) {
                jQuery('#email_digest').addClass("email_settings");
                jQuery('#email_digest').removeClass("email_digest_plus");

            }
        });
        return false;
    });

}

function announcement_container() {
    jQuery(".show_onload").show();
    fixHeight();
    jQuery('#autoCompleteDropdown').hide();
    watchFilters();
    reasonsAutoPopulate();
    unique_announcement_hover();
    if (jQuery('#connect_with_people_container')) { doYouHaveOpportunity();}
    jQuery(".reloadContainer").click(function () {
        jQuery(this).blur();
        loadFilteredAnnouncements({page:this.getAttribute('id'), shouldScroll:1});
        return false;
    });
}

function provider_container() {
    jQuery('.provider_link').click(expandCollapseTeaser);
}

//for announcements
jQuery.fn.announcementHover = function(color) {
    this.find('.unique_announcement').each(function () {
        jQuery(this).hover(
            function () {hoverIn(this); },
            function () {hoverOut(this);}
            );
    });
    
    function hoverIn(element) {
        var reasons = element.getAttribute('reasons');
        jQuery('.match_criteria_container').find(reasons).css("backgroundColor",color);
    }

    function hoverOut(element) {
        var reasons = element.getAttribute('reasons');
        jQuery('.match_criteria_container').find(reasons).css("backgroundColor",'#fffff9'); 
    }

}


function unique_announcement_hover() {
    var config_filters = {    
        sensitivity: 3, // number = sensitivity threshold (must be 1 or higher)    
        interval: 150, // number = milliseconds for onMouseOver polling interval    
        over: show_announcement_details, // function = onMouseOver callback (REQUIRED)    
        timeout: 0, // number = milliseconds delay before onMouseOut    
        out: hide_announcement_details // function = onMouseOut callback (REQUIRED)    
    };
    jQuery('.unique_announcement_container').hoverIntent( config_filters ); 
}

var Dialog = (function() {
    myOpts = {};
    function el() { 
        var el = jQuery("#jqModalDialog");
        if (el.length == 0) {
            el = jQuery("<div id='jqModalDialog'></div>")
                .appendTo("body");
            resetMe();
        }
        return el;
    }
    function addCloseButton() {
        return;
        // make sure there's a close button
        if (el().find(".trClose").length == 0) {
            var btn = jQuery("<img class='jqmClose trClose' src='/visuals/dialog_close.png' />")
                .click(Dialog.hide);
            el().append(btn);
        }
    }
    function addTitleBar() {
        if ( myOpts.title && !el().find(".titlebar").length ) {
            el().append("<div class='titlebar'>" + myOpts.title + "</div>")
        }
    }
    function resetMe() {
        el().empty();
        addTitleBar();
        addCloseButton();
    }
    return {
        setup: function(opts) {
            opts = opts || {};
            jQuery.extend( myOpts, opts );
            if (opts.width) {
                el().css("width", opts.width)
                    .css("margin-left", -1*(opts.width/2));
            }
            return el().jqm(opts);
        },
        show: function(moreOpts) {
            Dialog.setup(moreOpts);
            el().bind("keypress", function(e) {
                if (e.keyCode == 27) {
                    Dialog.hide();
                    return false;
                }
            });
            var scrollTop = jQuery("html").scrollTop();
            scrollTop = scrollTop || jQuery("body").scrollTop();
            el().css("top", scrollTop + 20);
            return el().jqmShow();
        },
        hide: function() {
            // kill all events tied to the dialog
            jQuery("#jqModalDialog .profile_edit2").die();
            jQuery("#jqModalDialog .profile_save").die();
            jQuery("#jqModalDialog .add_new").die();
            jQuery("#jqModalDialog .profile_cancel").die();
            jQuery("#jqModalDialog .profile_delete").die();
            jQuery("#jqModalDialog .optin_tab_button").die();
            return el().jqmHide();
        },
        load: function(url, params, callback) {
            jQuery.get(url, params, function(response) {
                if (callback) callback(response);
                else Dialog.set(response);
            });
            return el();
        },
        set: function(html) {
            resetMe();
            el().append(html);
            return el();
        }
    }
})();

jQuery.fn.postOptin = function (opts) {
    opts           = opts           || {};
    opts.location  = opts.location  || "home";
    opts.getParams = opts.getParams || function() { return {} };
    opts.bindType  = opts.bindType  || "bind";
    
    // set up the dialog for post-optin
    Dialog.setup({
        width: 726,
        modal: true,
        toTop: true,
        title: "Edit My Career Profile"
    });
    
    this[opts.bindType]("click", function (e) {
        if (e.button!=0) return;
        var link = jQuery(this);
        var params = opts.getParams(link);
        params.__pagename = opts.location;
        params.cachekiller = (new Date()).getTime();
        Dialog.set("<img src = '/visuals/cropimgH/loading.gif'>");
        Dialog.show();
        jQuery.get("/"+community+"/"+"optin", params, function(response) {
            response = jQuery(response);
            response.find("link").andSelf().filter("link").appendTo("head");
            response.appendTo("body")
            var optin = jQuery("#optin").hide();
            setTimeout(function() {
                Dialog.set(optin);
                optin.show();
            }, 1000)
        });
    });
}
function request_remove() {
    jQuery(".request_remove.companies").postOptin({
        bindType: "live",
        getParams: function(link) {
            var announcementId = link.attr("id").match(/(\d+)._enc/)[1];
            return { announcementId:announcementId };
        }
    });
    
    jQuery('.request_remove').live("click", function (e) {
        //return false; // uncomment this to force annoucnement action clicks to have no effect
        if (e.button!=0) return;
        var link = jQuery(this);
        link.parents('.ajax_removable').filter(":first").slideUp(350, function () {
            announcement_waiting();
            jQuery.getJSON(link.attr('id'), function (data, textStatus) {
                if (data.url != "0") { // org announcement w/external resource
                    window.location = data.url;
                }
                if (data.aok == 1 || 1) { //either way refresh for now
                    loadFilteredAnnouncements({page:realized_page});
                }
            });
        });
        return false;
    });
}

function show_announcement_details() {
    var my_action = jQuery(this).find('.announcement_actions').filter(':first');
    if (my_action.is(':visible')) return; 
    my_action.slideDown(150);
    my_action.addClass('announcement_actions_open currently_open');
    jQuery("#autoCompleteDropdown").remove();
    var already_open =  jQuery('#homecontent_div').find('.announcement_actions_open').not('.currently_open');
    already_open.slideUp(150);
    already_open.removeClass('announcement_actions_open');
    my_action.removeClass('currently_open');
}

function hide_announcement_details() {
    //var container = jQuery(this).find('.announcement_actions').filter(':first');
    //if (!(container.hasClass("no_close"))) container.hide();
}

function fixHeight() {
    var container = jQuery('#consumer_container_top');
    var y_match_criteria = jQuery('.match_bottom_middle, :first').offset().top;
    var y_announcements = jQuery("#announcements_bottom").offset().top;
   // jQuery("#announcement_container").height(jQuery("#announcement_container").height());
    var y_top = container.offset().top;
    var margin=60;
    var new_height;
    if (y_announcements > y_match_criteria) {
        new_height = y_announcements - y_top+margin;
    } else {
        new_height = y_match_criteria - y_top+margin;
    }
    if (new_height != container.height()) container.height(new_height);
}

function howitworks() {
    jQuery('.howitworks').bind("click", function() {
        jQuery('#autoCompleteDropdown').hide();

        if (jQuery('#howitworks_div').css('display') == 'none') {
            jQuery('#howitworks_div').fadeIn('500', function () {
                jQuery('#consumer_container_top').css('height','');
                jQuery('#howitworks_div').addClass('hiw_background'); 
                jQuery('#homecontent_div').toggle();
                fixHeight();
                var offset = jQuery('#howitworks_div').offset().top;
                jQuery('html,body').animate({scrollTop:offset},"medium");
            });
        } else {
            jQuery('#howitworks_div').toggle('medium');
            jQuery('#homecontent_div').toggle('medium', fixHeight);

        }
        return false;
    });
}

function expandCollapseTeaser() {
    this.blur();
    var link = jQuery('.provider_close_link, .provider_open_link').filter(':first');
    var container = jQuery('#provider_container').find('.ajax_container').filter(':first');
    if (container.hasClass('ajax_loading')) return false;

    var container_connect = container.find('#connect_with_people_container');
    var url = container.attr('id')
    var time_now = ( new Date() ).getTime();


    if (container.hasClass('open')) {
        jQuery("#connect_with_people_table").hide();
        jQuery('#provider_teaser').slideDown(500);
        container_connect.slideUp(200);
        link.toggleClass('provider_open_link');
        link.toggleClass('provider_close_link');
        container.toggleClass('open');
    } else {
        if (container.hasClass('ajax_onload')) {
            container_connect.slideDown(200, function () { jQuery("#connect_with_people_table").show();});
            jQuery('#provider_teaser').slideUp(350);
            link.toggleClass('provider_open_link');
            link.toggleClass('provider_close_link');
            container.toggleClass('open');
        } else {
            container.addClass('ajax_loading');

            container.html("<div style='position:relative; height:70px; top:45px; left:15px; text-align:center;'><img src = '/visuals/cropimgH/loading_small.gif'></div>");
            container.reloadContainer({data:{hide : 1},callBack: function () {
                var container_connect = container.find('#connect_with_people_container');
                container_connect.fadeIn(500);
                jQuery('#provider_teaser').hide();
                link.toggleClass('provider_open_link');
                link.toggleClass('provider_close_link');
                container.toggleClass('open');
                container.addClass('ajax_onload');
                container.removeClass('ajax_loading');
            }});
        }
    }
    return false;
}


function setupExtensions() {
    jQuery.blockUI.defaults.css={};
}

function close_tellus() {
    if (jQuery('.ajax_container').hasClass('ajax_processing')) return;
    jQuery("#tellus_link").addClass("tellus_link_closed");
    jQuery("#tellus_link").removeClass("tellus_link_open");
    jQuery('#tellus_container').animate({'width':170, 'left':608},150, function () {fixHeight();});
    jQuery('.view_expanded').hide();
    jQuery('.view_collapsed').show();
}

function open_tellus() {
    jQuery('#tellus_container').bgiframe();

    jQuery('#tellus_container').animate({'width':400,'left':379},150, function () {
        jQuery('.view_expanded').show();        
        jQuery('.view_collapsed').hide();
        jQuery("#tellus_link").addClass("tellus_link_open");
        jQuery("#tellus_link").removeClass("tellus_link_closed");
        jQuery(".profile_edit").hide();
        jQuery(".profile_edit").show('fast');
        fixHeight();
    });
}

function toggle_tellus () {
    this.blur();
    if (jQuery('#tellus_container').css('width') == '400px') {
        close_tellus();
    }
    else {
        open_tellus();
    }
    return false;
}

function open_only_tellus () {
    this.blur();
    if (jQuery('#tellus_container').css('width') != '400px') {
        open_tellus();
    }
    //return false;
}


function watchFilters() {
    jQuery('#homecontent_div').find("#category_filter,#response_filter").change(function () {
        this.blur();
        loadFilteredAnnouncements();
        return false;
    });
}

function announcement_waiting() {
    jQuery('#homecontent_div').find('#announcement_container .ajax_container').unblock();
    _message = "<img src = '/visuals/cropimgH/loading_small.gif'>";
    jQuery('#homecontent_div').find('#announcement_container .ajax_container').block({centerX:1, centerY:1,css:{cursor:'pointer', top:'1px', padding:'3px', width:'18px', height:'15px', border:'0px solid '+ barcolor},overlayCSS: {backgroundColor:barcolor_lightest }, message:_message});
}

function loadFilteredAnnouncements(_options)
{
    //jQuery.cookie('ajax_history', cookie_now);
    var options = new Object();
    var category_filter = jQuery('#homecontent_div').find("#category_filter").find("option:selected").filter(":first");
    var response_filter = jQuery('#homecontent_div').find("#response_filter").find("option:selected").filter(":first");
    options.category = category_filter.val();
    options.response = response_filter.val();

    var ajax_options = new Object();
    //jQuery.extend(ajax_options,_options, options);

    if (_options && _options.page) {
        options.page = _options.page;
        if (_options && _options.shouldScroll) ajax_options.shouldScroll=1;
    }


    jQuery.historyLoad(jQuery.param((options)), ajax_options);

    //jQuery("#announcement_container").find('.ajax_container').reloadContainer({data:options});
}

// PageLoad function
// This function is called when:
// 1. after calling $.historyInit();
// 2. after calling $.historyLoad();
// 3. after pushing "Go Back" button of a browser
function pageload(hash, _options) {
    // hash doesn't contain the first # character

    var _message = "";
    if (_options && _options.profileUpdate) {
        jQuery('#homecontent_div').find('#announcement_container .ajax_container').unblock();
        _message = "<img src = '/visuals/cropimgH/loading_small.gif'><span style='padding-left:10px; font-size:14px; font-weight:bold;'>Updating announcements...</span>";
        jQuery('#homecontent_div').find('#announcement_container .ajax_container').block({centerX:0, centerY:0,css:{cursor:'pointer', top:'-10px', padding:'3px', left:'80px', width:'382px', border:'0px solid '+barcolor},overlayCSS: {backgroundColor:barcolor_lightest }, message:_message});

    } else {
        announcement_waiting();
    }

    jQuery("#announcement_container").find('.ajax_container').reloadContainer({cgi_params:"?"+hash, data:_options});
}

function jQuery_history_init(){
        // Initialize history plugin.
        // The callback is called at once by present location.hash. 
        jQuery.historyInit(pageload);
        
        // set onlick event for buttons
/*
        jQuery("a[rel='history']").click(function(){
                // 
                var hash = this.href;
                hash = hash.replace(/^.*#/, '');
                // moves to a new page. 
                // pageload is called at once. 
                jQuery.historyLoad(hash);
                return false;
        });
*/
}


jQuery.preloadImages = function () {
    var my_args = arguments;
    setTimeout(delayedFetch,10 * 1000);
    function delayedFetch() {
        for (var i = 0; i < my_args.length; i++) {
            jQuery('<img>').attr('src',my_args[i]);
        }
    }
}
//move this once we find a new home for script.js stuff
function searchInput(inputObject) {
    var hasBeenFocused = inputObject.getAttribute("hasBeenFocused") != null;

    if (!hasBeenFocused) {
        inputObject.setAttribute("hasBeenFocused", "true");
        inputObject.style.color = "#000000";
        inputObject.value = "";
        var thisForm = inputObject.form;
        for (ii = 0;  ii < thisForm.elements.length; ii++) {
            if (thisForm.elements[ii].type == "submit"){
                thisForm.elements[ii].disabled = false;
            }
        }
    }
}




