/**
 * utils.js
 *
 * JavaScript which is loaded onto every page of the Brookhaven
 * College web site.
 *
 * Contents:
 *
 *     addLoadEvent() -- Cleanly queues and calls functions at
 *         windw.onload
 *
 *     handleExternalLinks() -- Sets links to external sites to
 *         open in a new window
 *
 */



function handleExternalLinks() {
    // Sets any <a> whose href starts with http:// or https://
    // to open in a new window
    if (document.getElementsByTagName) {
        var links = document.getElementsByTagName("a");
        for (var i = 0; i < links.length; i++) {
            if (links[i].getAttribute("href").match(/^https?:\/\//)) {
                links[i].setAttribute("target", "_blank");

                /* Alternative method: Open new windows via the onclick event.
                Warning:  This will clobber any other onclick events that
                are registered.  Would need to use something like PPK's
                addEvent()

                links[i].onclick = function() {
                    window.open(this.getAttribute("href"));
                    return false;
                };
                 */
            }
        }
    }
}


function addLoadEvent(func) {
    // Cleanly queues and calls functions at window.onload()
    // Stolen from http://simon.incutio.com/archive/2004/05/26/addLoadEvent
    var oldonload = window.onload;
    if (typeof window.onload != 'function') {
        window.onload = func;
    } else {
        window.onload = function() {
            if (oldonload) {
                oldonload();
            }
            func();
        }
    }
}


// Functions to call on page load
// (disabled, for now)
// addLoadEvent(handleExternalLinks);


/*
 * Clear Default Text: functions for clearing and replacing default text in
 * <input> elements.
 */
addEvent(window, 'load', init, false);

function init() {
    var formInputs = document.getElementsByTagName('input');
    for (var i = 0; i < formInputs.length; i++) {
        var theInput = formInputs[i];
        
        if (theInput.type == 'text' && theInput.className.match(/\bcleardefault\b/)) {  
            /* Add event handlers */          
            addEvent(theInput, 'focus', clearDefaultText, false);
            addEvent(theInput, 'blur', replaceDefaultText, false);
            
            /* Save the current value */
            if (theInput.value != '') {
                theInput.defaultText = theInput.value;
            }
        }
    }
}

function clearDefaultText(e) {
    var target = window.event ? window.event.srcElement : e ? e.target : null;
    if (!target) return;
    
    if (target.value == target.defaultText) {
        target.value = '';
    }
}

function replaceDefaultText(e) {
    var target = window.event ? window.event.srcElement : e ? e.target : null;
    if (!target) return;
    
    if (target.value == '' && target.defaultText) {
        target.value = target.defaultText;
    }
}
/* 
 * Cross-browser event handling, by Scott Andrew
 */
function addEvent(element, eventType, lamdaFunction, useCapture) {
    if (element.addEventListener) {
        element.addEventListener(eventType, lamdaFunction, useCapture);
        return true;
    } else if (element.attachEvent) {
        var r = element.attachEvent('on' + eventType, lamdaFunction);
        return r;
    } else {
        return false;
    }
}