YAHOO.namespace('evo');

YAHOO.evo.dialog = function() {
    var dialogBox;
    var browserAgent = YAHOO.Tools.getBrowserAgent();
    var is_linux = browserAgent.unix;
    var cHeight = YAHOO.util.Dom.getViewportHeight();
    var cWidth = YAHOO.util.Dom.getViewportWidth();
    var initDialogBox = function(width, height, fixedcenter) {
        var relativeDiv = 'header_logo';
        var coords = YAHOO.util.Dom.getXY(relativeDiv);
        var coordx = (920 - width) / 2;
        if (!coordx) { coordx = 160; }
        var coordst = 200;
        if (is_linux) {
            if (coordx < 300) { coordx = 300; }
            coordst = 400;
        }
        if (coords) {
            coords[0] += coordx;
            coords[1] += 100;
        } else {
            coords = [coordst, 100];
        }
        fixedcenter = (fixedcenter && (cHeight > height) && (cWidth > width)) ? true : false;
        dialogBox = new YAHOO.widget.Panel(
            'dialog_box',
            {
                close:              true,
                constraintoviewport:true,
                effect:             { effect: YAHOO.widget.ContainerEffect.FADE, duration: 0.5 },
                fixedcenter:        fixedcenter,
                height:             'auto',
                modal:              true,
                visible:            true,
                width:              width+'px',
                xy:                 coords
            }
        );
    };
    var dialogBoxRequest;
    var submitFormRequest;
    return {
        open: function(url, width, height, is_image) {
            var fixedcenter = (is_image ? true : false);
            if (!width) { width = 600; }
            if (dialogBoxRequest && YAHOO.util.Connect.isCallInProgress(dialogBoxRequest)) {
                return false;
            }
            var callback = {
                success: function(o) {
                    dialogBox.setBody(o.responseText);
                    if (fixedcenter) { dialogBox.center(); }
                    dialogBox.sizeUnderlay();
                    dialogBox.render();
                    var script_elems = YAHOO.util.Dom.getElementsBy(function(elem) { return true; }, 'script', 'popup_container');
                    for (i = 0; i < script_elems.length; i++) {
                        eval(script_elems[i].innerHTML);
                    }
                },
                failure: function(o) {
                    if (o.status == '302') {
                        YAHOO.evo.dialog.destroy();
                        YAHOO.evo.dialog.open(o.getResponseHeader['Location'], width);
                    } else {
                        dialogBox.setBody('<div class="popup_header"><span class="popup_header_x"><a href="#" onClick="YAHOO.evo.dialog.destroy()"><img src="/images/close_box.gif" width="15" height="14" border="0" alt="close" /></a></span>&nbsp;</div><div class="form_error_message">Request failed. Please try again.</div>');
                        dialogBox.sizeUnderlay();
                        dialogBox.render();
                    }
                },
                timeout: 10000
            };
            initDialogBox(width, height, fixedcenter);
            dialogBox.setHeader(' ');
            dialogBox.setBody('<p align="center"><br/><img src="/images/ajax/loading_medium.gif" width="32" height="32" alt=""/><br/></p>');
            dialogBox.setFooter('');
            if (fixedcenter) { dialogBox.center(); }
            dialogBox.sizeUnderlay();
            dialogBox.render(YAHOO.util.Dom.get('content'));
            dialogBoxRequest = YAHOO.util.Connect.asyncRequest('GET', url, callback);
            return false;
        },
        submit: function(formID, url, indicator) {
            if (submitFormRequest && YAHOO.util.Connect.isCallInProgress(submitFormRequest)) {
                return false;
            }
            var callback = {
                success: function(o) {
                    if (o.getResponseHeader['X-AjaxSuccess'] || o.getResponseHeader['X-Ajaxsuccess']) {
                        var curr_location = window.location.href;
                        new_location = curr_location.replace(/([\?\&])show_\w+_popup=\d+/, '');
                        new_location = new_location.replace(/https:\/\//, 'http://');
                        location.replace(new_location);
                    } else {
                        dialogBox.setBody(o.responseText);
                        dialogBox.sizeUnderlay();
                        dialogBox.render();
                    }
                },
                failure: function(o) {
                    dialogBox.setBody('<div class="popup_header"><span class="popup_header_x"><a href="#" onClick="YAHOO.evo.dialog.destroy()"><img src="/images/close_box.gif" width="15" height="14" border="0" alt="close" /></a></span>&nbsp;</div><div class="form_error_message">Request failed. Please try again.</div>');
                    dialogBox.sizeUnderlay();
                    dialogBox.render();
                },
                timeout: 10000
            };
            if (indicator) {
                YAHOO.util.Dom.get(indicator).style.display = '';
            }
            var formObject = YAHOO.util.Dom.get(formID);
            YAHOO.util.Connect.setForm(formObject);
            submitFormRequest = YAHOO.util.Connect.asyncRequest('POST', url, callback);
            return false;
        },
        destroy: function() {
            if (dialogBox) { dialogBox.destroy(); }
            return false;
        }
    };
}();

YAHOO.evo.divs = function() {
    var loadDivRequest;
    var browserAgent = YAHOO.Tools.getBrowserAgent();
    return {
        loadDiv: function(updateDiv, url, indicatorDiv, hideDiv) {
            if (loadDivRequest && YAHOO.util.Connect.isCallInProgress(loadDivRequest)) {
                return false;
            }
            var callback = {
                success: function(o) {
                    var indicatorDivObj = YAHOO.util.Dom.get(indicatorDiv);
                    if (indicatorDivObj) {
                        indicatorDivObj.style.display = 'none';
                    }
                    var effectFade = new YAHOO.widget.Effects.Fade(updateDiv, { seconds: 0.5 });
                    effectFade.onEffectComplete.subscribe(function() {
                        if (hideDiv) {
                            var hideDivObj = YAHOO.util.Dom.get(hideDiv);
                            if (hideDivObj) { hideDivObj.style.display = 'none'; }
                        }
                        YAHOO.util.Dom.get(updateDiv).innerHTML = o.responseText;
                        if (!browserAgent.safari) {
                            var script_elems = YAHOO.util.Dom.getElementsBy(function(elem) { return true; }, 'script', updateDiv);
                            for (i = 0; i < script_elems.length; i++) {
                                eval(script_elems[i].innerHTML);
                            }
                        }
                        var effectAppear = new YAHOO.widget.Effects.Appear(updateDiv, { seconds: 1, ease: YAHOO.util.Easing.easeOut });
                        effectAppear.onEffectComplete.subscribe(function() {
                            if (browserAgent.safari) {
                                var script_elems = YAHOO.util.Dom.getElementsBy(function(elem) { return true; }, 'script', updateDiv);
                                for (i = 0; i < script_elems.length; i++) {
                                    eval(script_elems[i].innerHTML);
                                }
                            }
                        });
                        effectAppear.animate();
                    });
                    effectFade.animate();
                    if (browserAgent.msie) {
                        var thumbs = YAHOO.util.Dom.getElementsByClassName('widget_slider_thumb', 'div', 'greenscore_question_area');
                        if (thumbs && (thumbs.length > 0)) { YAHOO.util.Dom.setStyle(thumbs, 'opacity', 0); }
                        var sliders = YAHOO.util.Dom.getElementsByClassName('widget_slider', 'div', 'greenscore_question_area');
                        if (sliders && (sliders.length > 0)) { YAHOO.util.Dom.setStyle(sliders, 'opacity', 0); }
                    }
                },
                failure: function(o) {
                    alert('Request failed. Please try again.');
                },
                timeout: 10000
            };
            var indicatorDivObj = YAHOO.util.Dom.get(indicatorDiv);
            if (indicatorDivObj) {
                indicatorDivObj.style.display = '';
            }
            loadDivRequest = YAHOO.util.Connect.asyncRequest('GET', url, callback);
            return false;
        },
        replaceDiv: function(updateDiv, values, pattern) {
            if (!values) { return false; }
            var divObj = YAHOO.util.Dom.get(updateDiv);
            if (!divObj) { return false; }
            if (!pattern) { return false; }
            var replaceWith;
            var currentValue = divObj.innerHTML;
            var currentResult = currentValue.match(pattern);
            if (!currentResult) { return false; }
            for (var i = 0; i < values.length; i++) {
                var thisResult = values[i].match(pattern);
                if (thisResult && (thisResult[0] == currentResult[0])) {
                    if (i == (values.length - 1))   { replaceWith = values[0]; }
                    else                            { replaceWith = values[(i + 1)]; }
                }
            }
            if (!replaceWith) { return false; }
            var effectFade = new YAHOO.widget.Effects.Fade(updateDiv, { seconds: 0.5 });
            effectFade.onEffectComplete.subscribe(function() {
                divObj.innerHTML = replaceWith;
                var effectAppear = new YAHOO.widget.Effects.Appear(updateDiv, { seconds: 1 });
                if (browserAgent.safari) {
                    YAHOO.widget.Effects.Show(updateDiv);
                    YAHOO.util.Dom.setStyle(divObj, 'opacity', 1);
                } else {
                    effectAppear.animate();
                }
            });
            effectFade.animate();
        }
    };
}();

YAHOO.evo.question = function() {
    var submitQuestionRequest;
    var loadQuestionRequest;
    var loadInterfaceRequest;
    var browserAgent = YAHOO.Tools.getBrowserAgent();
    return {
        submit: function() {
            if (submitQuestionRequest && YAHOO.util.Connect.isCallInProgress(submitQuestionRequest)) {
                return false;
            }
            var callback = {
                success: function(o) {
                    YAHOO.util.Dom.get('greenscore_question_form_indicator').style.display = 'none';
                    if (YAHOO.util.Dom.get('greenscore_answers_showall')) {
                        YAHOO.util.Dom.get('greenscore_answers_showall').style.display = '';
                    }
                    var errorHeader = o.getResponseHeader['X-QuestionError'] || o.getResponseHeader['X-Questionerror'];
                    if (errorHeader) {
                        YAHOO.util.Dom.get('greenscore_question_form_error').style.display = '';
                        if (errorHeader.substring(0, 7) == 'incompl') {
                            YAHOO.util.Dom.get('greenscore_question_form_error').innerHTML = 'Error: Answer incomplete. Please check your answer and re-submit this form.';
                        } else {
                            YAHOO.util.Dom.get('greenscore_question_form_error').innerHTML = 'An application error has occured. Please try submitting your answer again.';
                        }
                    } else {
                        YAHOO.util.Dom.get('greenscore_question_form_error').style.display = 'none';
                        var effectFade = new YAHOO.widget.Effects.Fade('greenscore_question_answer_area', { seconds: 0.5 });
                        effectFade.onEffectComplete.subscribe(function() {
                            YAHOO.util.Dom.get('greenscore_question_answer_area').innerHTML = o.responseText;
                            if (!browserAgent.safari) {
                                var script_elems = YAHOO.util.Dom.getElementsBy(function(elem) { return true; }, 'script', 'greenscore_question_answer_area');
                                for (i = 0; i < script_elems.length; i++) {
                                    eval(script_elems[i].innerHTML);
                                }
                            }
                            var effectAppear = new YAHOO.widget.Effects.Appear('greenscore_question_answer_area', { seconds: 1, ease: YAHOO.util.Easing.easeOut });
                            effectAppear.onEffectComplete.subscribe(function() {
                                if (browserAgent.safari) {
                                    var script_elems = YAHOO.util.Dom.getElementsBy(function(elem) { return true; }, 'script', 'greenscore_question_answer_area');
                                    for (i = 0; i < script_elems.length; i++) {
                                        eval(script_elems[i].innerHTML);
                                    }
                                }
                                if (browserAgent.firefox) {
                                    var divExpand = YAHOO.util.Dom.get('greenscore_answer_pixel');
                                    if (divExpand) {
                                        divExpand.innerHTML = '<img src="/images/pixel.gif" width="1" height="1" alt="" />';
                                    }
                                }
                            });
                            effectAppear.animate();
                        });
                        effectFade.animate();
                        if (browserAgent.msie) {
                            var thumbs = YAHOO.util.Dom.getElementsByClassName('widget_slider_thumb', 'div', 'greenscore_question_area');
                            if (thumbs && (thumbs.length > 0)) { YAHOO.util.Dom.setStyle(thumbs, 'opacity', 0); }
                            var sliders = YAHOO.util.Dom.getElementsByClassName('widget_slider', 'div', 'greenscore_question_area');
                            if (sliders && (sliders.length > 0)) { YAHOO.util.Dom.setStyle(sliders, 'opacity', 0); }
                        }
                    }
                },
                failure: function(o) {
                    YAHOO.util.Dom.get('greenscore_question_form_indicator').style.display = 'none';
                    YAHOO.util.Dom.get('greenscore_question_form_error').style.display = '';
                    YAHOO.util.Dom.get('greenscore_question_form_error').innerHTML = 'Submission failed. Please try again.';
                },
                timeout: 10000
            };
            YAHOO.util.Dom.get('greenscore_question_ajax').value = '1';
            YAHOO.util.Dom.get('greenscore_question_form_indicator').style.display = '';
        	var formObject = YAHOO.util.Dom.get('greenscore_question_form');
            YAHOO.util.Connect.setForm(formObject);
            submitFormRequest = YAHOO.util.Connect.asyncRequest('POST', '/question/submit?ajax=1&randomN='+Math.random(), callback);
            return false;
        },
        load: function(url, updateDiv) {
            if (loadQuestionRequest && YAHOO.util.Connect.isCallInProgress(loadQuestionRequest)) {
                return false;
            }
            var callback = {
                success: function(o) {
                    if (YAHOO.util.Dom.get('greenscore_answers_showall')) {
                        YAHOO.util.Dom.get('greenscore_answers_showall').style.display = '';
                    }
                    YAHOO.util.Dom.get('greenscore_question_form_indicator').style.display = 'none';
                    if (o.getResponseHeader['X-QuestionError'] || o.getResponseHeader['X-Questionerror']) {
                        YAHOO.util.Dom.get('greenscore_question_form_error').style.display = '';
                        YAHOO.util.Dom.get('greenscore_question_form_error').innerHTML = 'An application error has occured. Please try submitting your answer again.';
                    } else {
                        var effectFade = new YAHOO.widget.Effects.Fade(updateDiv, { seconds: 0.5 });
                        effectFade.onEffectComplete.subscribe(function() {
                            YAHOO.util.Dom.get(updateDiv).innerHTML = o.responseText;
                            if (!browserAgent.safari) {
                               var script_elems = YAHOO.util.Dom.getElementsBy(function(elem) { return true; }, 'script', updateDiv);
                               for (i = 0; i < script_elems.length; i++) {
                                   eval(script_elems[i].innerHTML);
                               }
                            }
                            var effectAppear = new YAHOO.widget.Effects.Appear(updateDiv, { seconds: 1, ease: YAHOO.util.Easing.easeOut });
                            effectAppear.onEffectComplete.subscribe(function() {
                                if (browserAgent.safari) {
                                    var script_elems = YAHOO.util.Dom.getElementsBy(function(elem) { return true; }, 'script', updateDiv);
                                    for (i = 0; i < script_elems.length; i++) {
                                        eval(script_elems[i].innerHTML);
                                    }
                                }
                            });
                            effectAppear.animate();
                        });
                        effectFade.animate();
                        if (browserAgent.msie) {
                            var thumbs = YAHOO.util.Dom.getElementsByClassName('widget_slider_thumb', 'div', 'greenscore_question_area');
                            if (thumbs && (thumbs.length > 0)) { YAHOO.util.Dom.setStyle(thumbs, 'opacity', 0); }
                            var sliders = YAHOO.util.Dom.getElementsByClassName('widget_slider', 'div', 'greenscore_question_area');
                            if (sliders && (sliders.length > 0)) { YAHOO.util.Dom.setStyle(sliders, 'opacity', 0); }
                        }
                    }
                },
                failure: function(o) {
                    YAHOO.util.Dom.get('greenscore_question_form_indicator').style.display = 'none';
                    YAHOO.util.Dom.get('greenscore_question_form_error').style.display = '';
                    YAHOO.util.Dom.get('greenscore_question_form_error').innerHTML = 'Request failed. Please try again.';
                },
                timeout: 10000
            };
            var header_elem_hide = YAHOO.util.Dom.get('greenscore_past_answers_header_hide');
            var header_elem_show = YAHOO.util.Dom.get('greenscore_past_answers_header_show');
            var questions_list   = YAHOO.util.Dom.get('greenscore_past_answers_questions');
            if (header_elem_hide) { header_elem_hide.style.display = 'none'; }
            if (header_elem_show) { header_elem_show.style.display = ''; }
            if (questions_list)   { questions_list.style.display   = 'none'; }
            YAHOO.util.Dom.get('greenscore_question_form_indicator').style.display = '';
            loadQuestionRequest = YAHOO.util.Connect.asyncRequest('GET', url+'&randomN='+Math.random(), callback);
            return false;
        },
        loadInterface: function() {
            var updateDiv = YAHOO.util.Dom.get('homepage_content_area');
            if (loadInterfaceRequest && YAHOO.util.Connect.isCallInProgress(loadInterfaceRequest)) {
                return false;
            }
            var callback = {
                success: function(o) {
                    var indicatorDivObj = YAHOO.util.Dom.get('greenscore_tree_switch_indicator');
                    if (indicatorDivObj) {
                        indicatorDivObj.style.display = 'none';
                    }
                    var effectFade = new YAHOO.widget.Effects.Fade(updateDiv, { seconds: 0.5 });
                    effectFade.onEffectComplete.subscribe(function() {
                        YAHOO.util.Dom.get(updateDiv).innerHTML = o.responseText;
                        if (!browserAgent.safari) {
                           var script_elems = YAHOO.util.Dom.getElementsBy(function(elem) { return true; }, 'script', updateDiv);
                           for (i = 0; i < script_elems.length; i++) {
                               eval(script_elems[i].innerHTML);
                           }
                        }
                        var effectAppear = new YAHOO.widget.Effects.Appear(updateDiv, { seconds: 1, ease: YAHOO.util.Easing.easeOut });
                        effectAppear.onEffectComplete.subscribe(function() {
                            if (browserAgent.safari) {
                                var script_elems = YAHOO.util.Dom.getElementsBy(function(elem) { return true; }, 'script', updateDiv);
                                for (i = 0; i < script_elems.length; i++) {
                                    eval(script_elems[i].innerHTML);
                                }
                            }
                        });
                        effectAppear.animate();
                    });
                    effectFade.animate();
                },
                failure: function(o) {
                    alert('Request failed. Please try again.');
                },
                timeout: 10000
            };
            var indicatorDivObj = YAHOO.util.Dom.get('greenscore_tree_switch_indicator');
            if (indicatorDivObj) {
                indicatorDivObj.style.display = '';
            }
            loadInterfaceRequest = YAHOO.util.Connect.asyncRequest('GET', '/load_questions?ajax=1', callback);
            return false;
        }
    };
}();

YAHOO.evo.answerList = function() {
    var greenscoreAnswersRequest;
    return {
        show: function(force) {
            if (greenscoreAnswersRequest && YAHOO.util.Connect.isCallInProgress(greenscoreAnswersRequest)) {
                if (!force) {
                    return false;
                }
            }
            YAHOO.util.Dom.get('greenscore_heading_arrow_right').style.display='none';
            YAHOO.util.Dom.get('greenscore_heading_arrow_down').style.display='';
            var divQuestionsList = YAHOO.util.Dom.get('greenscore_past_answers_questions_list');
            if (!force && divQuestionsList && divQuestionsList.innerHTML) {
                YAHOO.util.Dom.get('greenscore_answers_showall').style.display = 'none';
                var paqDivObj = YAHOO.util.Dom.get('greenscore_recent_answer');
                paqDivObj.style.position = 'fixed';
                paqDivObj.style.top = '1000px';
                paqDivObj.style.left = '0';
                paqDivObj.style.display = '';
                var effectBlindDown = new YAHOO.widget.Effects.BlindDown('greenscore_recent_answer', { ghost: true });
                effectBlindDown.animate();
                paqDivObj.style.position = 'relative';
                paqDivObj.style.top = '0';
                paqDivObj.style.left = '0';
                return false;
            }
            var callback = {
                success: function(o) {
                    YAHOO.util.Dom.get('greenscore_past_answers_error').style.display = 'none';
                    YAHOO.util.Dom.get('greenscore_answers_showall').style.display = 'none';
                    YAHOO.util.Dom.get('greenscore_question_form_indicator').style.display = 'none';
                    var effectFade = new YAHOO.widget.Effects.Fade('greenscore_recent_answer', { seconds: 0.5 });
                    effectFade.onEffectComplete.subscribe(function() {
                        YAHOO.util.Dom.get('greenscore_recent_answer').innerHTML = o.responseText;
                        var script_elems = YAHOO.util.Dom.getElementsBy(function(elem) { return true; }, 'script', 'greenscore_recent_answer');
                        for (i = 0; i < script_elems.length; i++) {
                            eval(script_elems[i].innerHTML);
                        }
                        var effectAppear = new YAHOO.widget.Effects.Appear('greenscore_recent_answer', { seconds: 1, ease: YAHOO.util.Easing.easeOut });
                        effectAppear.animate();
                    });
                    effectFade.animate();
                },
                failure: function(o) {
                    YAHOO.util.Dom.get('greenscore_question_form_indicator').style.display = 'none';
                    YAHOO.util.Dom.get('greenscore_past_answers_error').style.display = '';
                    YAHOO.util.Dom.get('greenscore_past_answers_error').innerHTML = 'Request failed. Please try again.';
                },
                timeout: 10000
            };
            YAHOO.util.Dom.get('greenscore_question_form_indicator').style.display = '';
            var randomN = Math.random();
            greenscoreAnswersRequest = YAHOO.util.Connect.asyncRequest('GET', '/question/answers/list?ajax=1&randomN='+randomN, callback);
            return false;
        }
    };
}();

YAHOO.evo.faqs = function() {
    var openName;
    return {
        openclose: function(faqName) {
            if (!faqName) { return false; }
            var itemDiv     = YAHOO.util.Dom.get(faqName);
            var questionDiv = YAHOO.util.Dom.get(faqName + '_q');
            var answerDiv   = YAHOO.util.Dom.get(faqName + '_a');
            if (!itemDiv || !questionDiv || !answerDiv) { return false; }
            if (openName && (openName == faqName)) {
                answerDiv.style.display = 'none';
                itemDiv.style.backgroundColor = '#ffffff';
                questionDiv.style.fontWeight = 'normal';
                openName = '';
            } else {
                if (openName) {
                    var openitemDiv     = YAHOO.util.Dom.get(openName);
                    var openquestionDiv = YAHOO.util.Dom.get(openName + '_q');
                    var openanswerDiv   = YAHOO.util.Dom.get(openName + '_a');
                    openanswerDiv.style.display = 'none';
                    openquestionDiv.style.fontWeight = 'normal';
                    openitemDiv.style.backgroundColor = '#ffffff';
                }
                answerDiv.style.display = 'none';
                answerDiv.style.display = '';
                questionDiv.style.fontWeight = 'bold';
                itemDiv.style.backgroundColor = '#ffffeb';
                openName = faqName;
            }
            return false;
        }
    }
}();

YAHOO.evo.preview = function() {
    var previewWindow;

    return {
        open: function(action,form) {
            var callback = {
                success: function(o) {
                    if ( (! previewWindow) || previewWindow.closed ) {
                        previewWindow = window.open(
                            action + "/preview/window",
                            "evo_preview_window",
                            "location=no,menubar=no,resizable=yes,scrollbars=yes,toolbar=no,width=950,height=600"
                        );
                        window.fill_preview = function() { previewWindow.preview(o.responseText) };
                    } else {
                        previewWindow.preview(o.responseText);
                    }
                    if (!previewWindow.focus) previewWindow.focus();
                },
                failure: function(o) {
                    window.alert("Request failed. Please try again.");
                },
                timeout: 15000
            };

            // Set the form content
            if ( form ) YAHOO.util.Connect.setForm(YAHOO.util.Dom.get(form));

            // Do it!
            YAHOO.util.Connect.asyncRequest('POST',action + "/preview/content",callback);
        }
    }
}();

YAHOO.evo.definition = function() {
    var format_heading = function(title) {
        if ( ! title ) return '';
        return '<span class="heading">'
             +     '<span class="background">'
             +        ' <img src="/images/backgrounds/green_gradient_hz.jpg" border="" alt="" />'
             +     '</span>'
             +     '<span class="body">' + title + '</span>'
             + '</span>';
    };
    var format_tooltip = function(heading,text,class_name) {
        return '<span class="' + class_name + ' definition-tooltip">'
              + format_heading(heading)
              + text
              + '</span>';
    };
    return {
        addTooltip: function(spec) {
            var class_name = spec.class_name || 'yui-tt-positive';

            YAHOO.util.Event.onDOMReady(function(e) {
                var ctx = ( typeof spec.context == 'function' ) ? spec.context() : spec.context;
                new YAHOO.widget.Tooltip('keyphrasetooltip_' + spec.id, {
                    text: format_tooltip(spec.phrase,spec.definition,class_name),
                    context: ctx,
                    autodismissdelay: 60000,
                    effect: {
                        effect: YAHOO.widget.ContainerEffect.FADE,
                        duration: 0.5
                    }
                });
            })
        }
    }
}();
function toggle_collapse(id) {
    var el = YAHOO.util.Dom.get(id);
    if ( YAHOO.util.Dom.hasClass(el, 'expanded') ) {
        YAHOO.util.Dom.removeClass(el,'expanded');
        YAHOO.util.Dom.addClass(el,'collapsed');
    } else {
        YAHOO.util.Dom.removeClass(el,'collapsed');
        YAHOO.util.Dom.addClass(el,'expanded');
    }
    return false;
}

var rotateItem;

YAHOO.evo.NewsletterSignup = function() {
    var untouched_input_value = "Enter your email...";
    var submit_url = "/";
    var messages = {
        err_email_missing : "Please enter your email address so we know where to send your e-newsletter!",
        err_email_invalid : "I'm sorry, but that doesn't look like a valid email address.",
        err_unknown : "We're sorry, but we're having technical difficulties subscribing you to the EVO Weekly Newsletter right now.\n\nCould you please try again in 10 minutes?",
        err_already_subscribed : "We appreciate the enthusiasm, but you're already subscribed!\n\nWatch your inbox for our next issue!",

        msg_success : "<em>You have been subscribed!</em><br/>Watch your inbox for our next issue."
    };

    var isValidEmail = function(email) {
        return email.match(/^[^@]+@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,4}$/);
    };

    var handleSubmit = function(evt) {
        var form = evt.target;
        var email = form.email.value.replace(/^\s+|\s+$/g,'');

        if ( (email == untouched_input_value) || (email == '') ) {
            window.alert(messages.err_email_missing);
            return;
        }
        if ( ! isValidEmail(email) ) {
            window.alert(messages.err_email_invalid);
            return;
        }

        var self = this;
        var req_callback = {
            success: function(o) {
                var result = eval("(" + o.responseText + ")").json;
                if ( result.error ) {
                    var error = result.error;
                    if ( messages[error] ) error = messages[error]; else error = "'" + error + "'";
                    window.alert(error);
                    return;
                }
                if ( result.success ) {
                    var message = result.message;
                    if ( ! message ) message = messages.msg_success;

                    var message_div = document.createElement('div');
                    message_div.className = 'success';
                    message_div.innerHTML = message;
                    form.parentNode.replaceChild(message_div,form);
                    //window.alert(message);
                    return;
                }

                window.alert(messages.err_unknown);
            },
            failure: function(o) {
                window.alert(messages.err_unknown);
            },
            timeout: 20000
        };
        rq = YAHOO.util.Connect.asyncRequest(
            'GET',
            form.action + "?ajax=1&email=" + encodeURIComponent(email),
            req_callback
        );
        return false;
    };

    return {
        init : function() {
            var form = YAHOO.util.Dom.get('newsletter-signup-form');
            var input = form.email;
            if ( ! input.value ) {
                input.value = untouched_input_value;
                YAHOO.util.Dom.addClass(input,"untouched");
                YAHOO.util.Event.addListener(input,'focus',function(evt){
                    YAHOO.util.Dom.removeClass(input,"untouched");
                    if ( input.value == untouched_input_value )
                        input.value = '';
                });
            }
            YAHOO.util.Event.addListener(form,'submit',function(evt){
                handleSubmit(evt);
                YAHOO.util.Event.stopEvent(evt);
            });
        },
    };
}();

YAHOO.util.Event.onDOMReady(function(e) {
    var quick_nav = YAHOO.util.Dom.get('quick-nav');
    if ( quick_nav ) {
        var click_toggle_handler = function(is_more,more_block,more_button) {
            return function(evt) {
                more_block.style.display = (is_more) ? 'block' : 'none';
                more_button.style.display = (is_more) ? 'none' : 'block';
                YAHOO.util.Event.stopEvent(evt);
            };
        };

        var sections = YAHOO.util.Dom.getElementsByClassName('section',null,quick_nav);
        for ( var i=0; i < sections.length; i++ ) {
            var section = sections[i];
            var more = YAHOO.util.Dom.getElementsByClassName('more',null,section)[0];
            if ( more ) {
                var more_button = YAHOO.util.Dom.getElementsByClassName('display-more','a',section)[0];
                if ( more_button ) {
                    YAHOO.util.Event.addListener(more_button,'click',click_toggle_handler(true,more,more_button));
                }
                var less_button = YAHOO.util.Dom.getElementsByClassName('display-less','a',section)[0];
                if ( less_button ) {
                    YAHOO.util.Event.addListener(less_button,'click',click_toggle_handler(false,more,more_button));
                }
            }
        }
    }
});
