    // Add a Language Row
    function addLanguage(language, level, method) {
        languageRows = getLanguageRows(method);
        var n = languageRows.length + 1;
        var rowId = method + '-row-' + n;
        var parent = $(method + '-language-list');
        if(parent.firstChild.nodeType == 1 && parent.firstChild.tagName.toLowerCase() == 'tbody') {
          // IE returns tbody
          parent.firstChild.appendChild(createLanguageRow(rowId, n, level, language, method));          
        }
        else {
          parent.appendChild(createLanguageRow(rowId, n, level, language, method));
        }

        return false;
    }


    function createLanguageRow(rowId, number, level, language, method) {
        var row = document.createElement('tr');
        row.id = rowId;
        row.classes = 'languageRow';
        var language_th = document.createElement('th');
        var language_text = document.createTextNode('Language ' + number + ':');
        language_th.appendChild(language_text)

        var level_td = document.createElement('td');
        var level_text = document.createTextNode(level);
        var level_input = document.createElement('input');
        level_input.name = 'languages_' + method + '.level:records';
        level_input.value = level;
        level_input.type = 'hidden'
        level_td.appendChild(level_text);
        level_td.appendChild(level_input);

        var language_td = document.createElement('td');
        var language_text = document.createTextNode(language);
        var language_input = document.createElement('input');
        language_input.name = 'languages_' + method + '.language:records';
        language_input.value = language;
        language_input.type = 'hidden'
        language_td.appendChild(language_text);
        language_td.appendChild(language_input);

        var delete_td = document.createElement('td');
        var trashcan_link = document.createElement('a');
        trashcan_link.href='#language';
        trashcan_link.onclick = function(){return removeLanguage(rowId)};
        var trashcan_link_text = document.createTextNode('[delete]');
        trashcan_link.appendChild(trashcan_link_text);
        delete_td.appendChild(trashcan_link);

        row.appendChild(language_td);
        row.appendChild(level_td);
        row.appendChild(delete_td);

        return row;
    }


     function addSpokenLanguage() {
            if (document.profile.spoken_language.selectedIndex > 0) {
                addLanguage(document.profile.spoken_language.options[document.profile.spoken_language.selectedIndex].value, document.profile.spoken_level.options[document.profile.spoken_level.selectedIndex].value, 'spoken');
            } else {
                alert("You must select a language and level");
            }
            return true;
        }


     function addWrittenLanguage() {
            if (document.profile.written_language.selectedIndex > 0) {
                addLanguage(document.profile.written_language.options[document.profile.written_language.selectedIndex].value, document.profile.written_level.options[document.profile.written_level.selectedIndex].value, 'written');
            } else {
                alert("You must select a language and level");
            }
            return false;
        }

        // Remove languageRow
        function removeLanguage(rowId) {
            var row = document.getElementById(rowId);
            row.parentNode.removeChild(row);
            return false;
        }

        // Get all <tr>s with class languageRow
        function getLanguageRows(method) {
            var table = document.getElementById(method + '-languages');
            var rows = table.getElementsByTagName('tr');
            var answerRows = [];
            for (var i=0; i<rows.length; i++) {
               if (rows[i].className == 'languageRow') {
                  answerRows.push(rows[i]);
               }
            }
            return answerRows;
        }

        /*
            Written by Jonathan Snook, http://www.snook.ca/jonathan
            Add-ons by Robert Nyman, http://www.robertnyman.com
        */

        function getElementsByClassName(oElm, strTagName, strClassName){
            var arrElements = (strTagName == "*" && document.all)? document.all : oElm.getElementsByTagName(strTagName);
            var arrReturnElements = new Array();
            strClassName = strClassName.replace(/\-/g, "\\-");
            var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
            var oElement;
            for(var i=0; i<arrElements.length; i++){
                oElement = arrElements[i];      
                if(oRegExp.test(oElement.className)){
                    arrReturnElements.push(oElement);
                }   
            }
        return (arrReturnElements)
        }

        function checkElementCount(ob) {
            var count = 0;
            treeElements = getElementsByClassName(document, 'input', 'tr-el');
            for (var i=0; i<treeElements.length; i++) {
                if (treeElements[i].checked) {
                   count++; 
                }
            }
            if (document.location.href.search("Filters") == -1 && count > 10) {
                alert('You can select no more than 10 elements');
                ob.checked = false;
            }
            return true;
        }

        var TextAreaWatcher = Class.create();
        //defining the rest of the class implementation
        TextAreaWatcher.prototype = {
            initialize: function(textArea, count_element, limit, button) {
                this.textArea = $(textArea);
                this.count_element = $(count_element);
                this.limit = limit;
                this.button = $(button);
                //assigning our method to the event
                this.textArea.onkeypress = this.handle_edit.bindAsEventListener(this);
                this.textArea.onclick = this.handle_edit.bindAsEventListener(this);
                                                                                                                                                           
           },
           handle_edit: function(evt) {
                var words = this.textArea.value.split(" ");
                $("count").innerHTML = words.length + ' words';
                if (words.length > this.limit-1) {
                    if (evt.keyCode != Event.KEY_BACKSPACE) {
                        Event.stop(evt);
                        this.button.disabled = true;
                    }
                } else {
                    this.button.disabled = false;
                }
           }
        };

        
        function hasClassName(element,className) {
            //Check to see if class attribute contains className
            if (element.className.indexOf(className) > -1) {
                return true;
            }
            return false;
        }

        function disableToolbarButtons() {
            //get all links
            var buttons = document.getElementsByTagName('a');
            for(x=0; x<buttons.length; x++){
                if (hasClassName(buttons[x], "toolbarButton")){
                    //find and disable any links with class toolbarButton
                    buttons[x].onclick = function() { return false; };
                }
            }
        }

        function enableToolbarButtons() {
            //enable the toolbarButton elements
            var buttons = document.getElementsByTagName('a');
            for(x=0; x<buttons.length; x++){
                if (hasClassName(buttons[x], "toolbarButton")){
                    buttons[x].onclick = null;
                }
            }
        }

        function getFormElements() {
            //get and return all form elements
            var inputs = document.getElementsByTagName('input');
            var textareas = document.getElementsByTagName('textarea');
            var selects = document.getElementsByTagName('select');
            return [inputs, textareas, selects];
        }

        function disableForm() {
            //Disable form element which don't contain the class active
            var elements = getFormElements();
            for (z=0; z < elements.length; z++){
                var elementsList = elements[z];
                for (x=0; x < elementsList.length; x++){
                    if (hasClassName(elementsList[x], "active") ){
                        elementsList[x].disabled = '';
                    }else{
                        elementsList[x].disabled = 'disabled';
                    }
                }
            }
        }

        function enableForm() {
            //make sure all form elements are enabled
            var elements = getFormElements();
            for (z=0; z < elements.length; z++){
                var elementList = elements[z];
                for (x=0; x < elementList.length; x++){
                    elementList[x].disabled = '';
                    if (elementList[x].name == "biography"){
                        var words = elementList[x].value.split(" ");
                        if (words.length > 200){
                            var submit = document.getElementById("submit-button");
                            elementList[x].disabled = '';
                            submit.disabled = 'disabled';
                        }
                    }
                }
            }
        }

        function toggleFormActive() {
            var accept = document.getElementsByName('accept_terms:boolean');
            //if accept_terms is checked enable elements, if not disable them
            if(accept[0]){
                if ( accept[0].checked == '' ){
                    disableForm();
                    disableToolbarButtons();
                }else{
                    enableForm();
                    enableToolbarButtons();
                }
            }
        }



    Event.observe(window, 'load', function() {
        setLayout();
        siteInit();
    });

