Object.extend = function(destination, source) {
    for (property in source) {
        destination[property] = source[property];
    }

    return destination;
}

/* Accessing Object Classes */

if (!window.Element) {
    var Element = new Object();
}

Object.extend(Element, {
    addClassToElement: function(className, element) {
        if (element.className !== '') {
            element.className += ' ' + className;
        } else {
            element.className = className;
        }
    },

    removeClassFromElement: function(className, element) {
        var existingClassName = element.className;
        var expression = new RegExp('\\s?' + className + '\\b');

        if (existingClassName.indexOf(className) != -1) {
            element.className = existingClassName.replace(expression, '');
        }
    },

    classExistsInElement: function(className, element) {
        var expression = new RegExp('(^|\\s+)' + className + '(\\s+|$)');

        if (element.getAttributeNode('class') !== null) {
            return expression.test(element.getAttributeNode('class').value);
        } else if (element.className) {
            return expression.test(element.className);
        } else {
            return false;
        }
    }
});

/* Selecting Elements */

document.getElementsByClassName = function(className) {
    var candidates = document.body.getElementsByTagName('*');
    var candidate;
    var elements = new Array();
    var i, count = candidates.length;

    for (i = 0; i < count; i++) {
        candidate = candidates[i];

        if (Element.classExistsInElement(className, candidate)) {
            elements.push(candidate);
        }
    }

    return elements;
}

/* Event Utilities */

function addHandlerForEventToObject(procedure, event, object) {
    var oldHandler = object[event];

    object[event] = (typeof object[event] != 'function') ? procedure : function() { oldHandler(); procedure(); };
}

function resolveEvent(event) {
    return (!event) ? window.event : event;
}

function resolveTargetForEvent(event) {
    return (window.event) ? window.event.srcElement : event.target;
}

/* Global Initialization */

function UCInit() {
    Element.addClassToElement('uc-has-js', document.documentElement);

    addHandlerForEventToObject(UCLoad, 'onload', window);

    //UCImportJS('uofc/scripts/sIFR2/sifr.js');
}

function UCLoad() {
    // Register sIFR replacements
    if (typeof sIFR == "function") {
        sIFR.replaceElement(named({sSelector:"div#uc-banner-headline h2", sFlashSrc:"uofc/typefaces/Impact.swf", sColor:"#ffffff", sLinkColor:"#ffffff", sBgColor:"#000000", sWmode:"transparent", sHoverColor:"#ffffff", sFlashVars:"textalign=left"}));
        sIFR.replaceElement(named({sSelector:"div#uc-banner-headline div.content", sFlashSrc:"uofc/typefaces/Arial.swf", sColor:"#ffffff", sLinkColor:"#ffffff", sBgColor:"#000000", sWmode:"transparent", sHoverColor:"#ffffff", sFlashVars:"textalign=left"}));
    };

    // Prepare the global search field
    var searchField = document.getElementById('uc-global-search-field');
    if (searchField.title != null && searchField.title != '') {
        searchField.value = searchField.title;
    } else {
        searchField.value = 'Search UofC';
    }
    addHandlerForEventToObject(UCSearchFieldFocus, 'onfocus', searchField);
    addHandlerForEventToObject(UCSearchFieldBlur, 'onblur', searchField);

    // Prepare the site search field
    var siteSearchField = document.getElementById('edit-search_block_form_keys');
    if (siteSearchField) {
        siteSearchField.title = 'Search This Site';
        siteSearchField.value = siteSearchField.title;
        addHandlerForEventToObject(UCSearchFieldFocus, 'onfocus', siteSearchField);
        addHandlerForEventToObject(UCSearchFieldBlur, 'onblur', siteSearchField);
    }
}

function UCImportJS(jsURL) {
    var headElement = document.getElementsByTagName('head')[0];
    var jsElement = document.createElement('script');

    jsElement.setAttribute('type', 'text/javascript');
    jsElement.setAttribute('src', jsURL);

    headElement.appendChild(jsElement);
}

function UCSearchFieldFocus(event) {
    event = resolveEvent(event);
    var target = resolveTargetForEvent(event);

    if (((target.title != null || target.title != '') && target.value == target.title) || (target.value == 'Search UofC')) {
        target.value = '';
    }
}

function UCSearchFieldBlur(event) {
    event = resolveEvent(event);
    var target = resolveTargetForEvent(event);

    if (target.value == '') {
        if (target.title != null && target.title != '') {
            target.value = target.title;
        } else {
            target.value = 'Search UofC';
        }
    }
}

UCInit();
