function createSimpleEditor(textareaId) {
    var richEditor = new YAHOO.widget.SimpleEditor(textareaId, {
        height : '300px',
        width : '670px',
        dompath : true,
        focusAtStart : true,
        toolbar : {
            collapse : true,
            titlebar : 'Redigera',
            draggable : false,
            buttons : [ {
                group : 'fontstyle',
                label : 'Teckensnitt och storlek',
                buttons : [ {
                    type : 'select',
                    label : '',
                    value : 'fontname',
                    disabled : false,
                    menu : [ {
                        text : 'Arial'
                    }, {
                        text : 'Courier New'
                    }, {
                        text : 'Times New Roman'
                    } ]
                }, {
                    type : 'spin',
                    label : '',
                    value : 'fontsize',
                    range : [ 9, 75 ],
                    disabled : false
                } ]
            }, {
                type : 'separator'
            }, {
                group : 'textstyle',
                label : 'Formattering',
                buttons : [ {
                    type : 'push',
                    label : 'Fet CTRL + SHIFT + B',
                    value : 'bold'
                }, {
                    type : 'push',
                    label : 'Kursiv CTRL + SHIFT + I',
                    value : 'italic'
                }, {
                    type : 'push',
                    label : 'Understruken CTRL + SHIFT + U',
                    value : 'underline'
                }, {
                    type : 'push',
                    label : 'Skapa länk CTRL + SHIFT + L',
                    value : 'createlink'
                }, {
                    type : 'separator'
                }, {
                    type : 'color',
                    label : 'Teckenfärg',
                    value : 'forecolor'
                }, {
                    type : 'color',
                    label : 'Bakgrundsfärg',
                    value : 'backcolor'
                }

                ]
            }, {
                type : 'separator'
            }, {
                group : 'indentlist',
                label : 'Listor',
                buttons : [ {
                    type : 'push',
                    label : 'Skapa en osorterad lista',
                    value : 'insertunorderedlist'
                }, {
                    type : 'push',
                    label : 'Skapa en sorterad lista',
                    value : 'insertorderedlist'
                } ]
            }

            ]
        }
    });
    // richEditor._defaultToolbar.buttonType = 'basic';
    return richEditor;
}

var ProgressAnimationHandler = {
    containerElement : null,
    elementToHide : null,
    show : function(containerElementId, elementToHideId) {
        containerElement = document.getElementById(containerElementId);
        elementToHide = document.getElementById(elementToHideId);
        YAHOO.util.Dom.addClass(elementToHide, 'hideMe');
        YAHOO.util.Dom.addClass(containerElement, 'progressAnimation');
    },
    hide : function() {
        YAHOO.util.Dom.removeClass(containerElement, 'progressAnimation');
    }
};

var RegistrationHandler = {
    handleSuccess : function(o) {
        ProgressAnimationHandler.hide();
        document.getElementById('registerbox-bd').innerHTML = o.responseText;
    },

    handleFailure : function(o) {
        ProgressAnimationHandler.hide();
        alert("Registration failed!");
    },

    startRequest : function(sUrl) {
        ProgressAnimationHandler.show('registerbox-bd', 'register');
        var formObject = document.getElementById('register');
        YAHOO.util.Connect.setForm(formObject);
        YAHOO.util.Connect.asyncRequest('POST', sUrl, registrationCallback);
    }
};

var registrationCallback = {
    success : RegistrationHandler.handleSuccess,
    failure : RegistrationHandler.handleFailure,
    scope : RegistrationHandler
};

var MailFriendHandler = {
    handleSuccess : function(o) {
        document.getElementById('friendtip-bd').innerHTML = o.responseText;
    },

    handleFailure : function(o) {
        alert("Send mail failed!");
    },

    startRequest : function(sUrl) {
        var formObject = document.getElementById('mail_friend_form');
        YAHOO.util.Connect.setForm(formObject);
        YAHOO.util.Connect.asyncRequest('POST', sUrl, mailFriendCallback);
        return false;
    }
};

var mailFriendCallback = {
    success : MailFriendHandler.handleSuccess,
    failure : MailFriendHandler.handleFailure,
    scope : MailFriendHandler
};

var LoginHandler = {
    handleSuccess : function(o) {
        var responseTextTrimmed = YAHOO.lang.trim(o.responseText);
        if (responseTextTrimmed.indexOf('success:') === 0) {
            window.location.href = responseTextTrimmed.substring(8,
                    responseTextTrimmed.length);
        } else {
            ProgressAnimationHandler.hide();
            document.getElementById('loginbox-bd').innerHTML = o.responseText;
        }
    },

    handleFailure : function(o) {
        if (o.status === 500) { // this will show error page from error/500.jsp
        alert(navigator.appName);
        if (navigator.appName === 'Microsoft Internet Explorer') {
            alert('Internal server error');
        } else {
            content.document.location.href = "javascript:(function(){document.open();document.write('"
                    + o.responseText + "');document.close();})();";
        }
    } else {
        alert('Internal server error');
    }
},

startRequest : function(sUrl) {
    ProgressAnimationHandler.show('loginbox-bd', 'loginform');
    var formObject = document.getElementById('loginform');
    YAHOO.util.Connect.setForm(formObject);
    YAHOO.util.Connect.asyncRequest('POST', sUrl, loginCallback);
}
};

var loginCallback = {
    success : LoginHandler.handleSuccess,
    failure : LoginHandler.handleFailure,
    scope : LoginHandler
};

var contextPath;

var setContextPath = function(sContextPath) {
    contextPath = sContextPath;
};

var AgentHandler = {
    handleSuccess : function(o) {
        var responseTextTrimmed = YAHOO.lang.trim(o.responseText);
        if (responseTextTrimmed.indexOf('success:') === 0) {
            window.location.href = responseTextTrimmed.substring(8,
                    responseTextTrimmed.length);
        } else {
            document.getElementById('jobagentbox-bd').innerHTML = o.responseText;
        }
    },

    handleFailure : function(o) {
        // TODO: What do we do here?
    alert("Submit failed!");
},

startRequest : function(sUrl) {
    var formObject = document.getElementById('agentform');
    YAHOO.util.Connect.setForm(formObject);
    YAHOO.util.Connect.asyncRequest('POST', sUrl, agentCallback);
}
};

var agentCallback = {
    success : AgentHandler.handleSuccess,
    failure : AgentHandler.handleFailure,
    scope : AgentHandler
};

var RemoveHandler = {
    handleSuccess : function(o) {
        var responseTextTrimmed = YAHOO.lang.trim(o.responseText);
        if (responseTextTrimmed.indexOf('success:') === 0) {
            YAHOO.util.Dom.setStyle(YAHOO.lang.trim(responseTextTrimmed
                    .substring(8)), 'display', 'none');
        } else {
            // do nothing
        }
    },

    handleFailure : function(o) {
        // TODO: What do we do here?
    alert("Submit failed!");
},

startRequest : function(sUrl, confirmText) {
    if (window.confirm(confirmText)) {
        YAHOO.util.Connect.asyncRequest('get', sUrl, removeCallback);
    }
}
};

var removeCallback = {
    success : RemoveHandler.handleSuccess,
    failure : RemoveHandler.handleFailure,
    scope : RemoveHandler
};

var RegionHandler = {

    selectElmnt : null,

    handleSuccess : function(o) {
        removeAllOptionsButTheFirstOne(RegionHandler.selectElmnt);
        if (o.responseXML !== undefined && o.responseXML !== null) {
            var root = o.responseXML.documentElement;
            var regions = root.getElementsByTagName('region');
            for ( var i = 0; i < regions.length; i++) {
                var region = regions[i];
                var theId = region.getElementsByTagName("id")[0].firstChild.nodeValue;
                var theName = region.getElementsByTagName("name")[0].firstChild.nodeValue;
                addOption(RegionHandler.selectElmnt, theId, theName);
            }
        }

    },

    handleFailure : function(o) {
        alert("Unable to fetch regions...");
    },

    loadRegions : function(selElementId, regionId) {
        // Find regions by parent id
    var sUrl = contextPath + "/region/findByParent.do?regionId=" + regionId;
    // The select we want to load with new regions
    RegionHandler.selectElmnt = document.getElementById(selElementId);

    YAHOO.util.Connect.asyncRequest('GET', sUrl, regionCallback);
}
};

var regionCallback = {
    success : RegionHandler.handleSuccess,
    failure : RegionHandler.handleFailure,
    scope : RegionHandler
};

var CategoryHandler = {

    selectElmnt : null,
    retainFirst : true,

    handleSuccess : function(o) {
        if (CategoryHandler.retainFirst) {
            removeAllOptionsButTheFirstOne(CategoryHandler.selectElmnt);
        } else {
            CategoryHandler.selectElmnt.options.length = 0;
        }
        if (o.responseXML !== undefined && o.responseXML !== null) {
            var root = o.responseXML.documentElement;
            var categories = root.getElementsByTagName('category');
            for ( var i = 0; i < categories.length; i++) {
                var category = categories[i];
                var theId = category.getElementsByTagName("id")[0].firstChild.nodeValue;
                var theName = category.getElementsByTagName("name")[0].firstChild.nodeValue;
                addOption(CategoryHandler.selectElmnt, theId, theName);
            }
        }

    },

    handleFailure : function(o) {
        alert("Unable to fetch categories, status=[" + o.statusText + "]");
    },

    loadCategories : function(sUrl, selElementId, categoryId) {
        // The select we want to load with new regions
        CategoryHandler.selectElmnt = document.getElementById(selElementId);

        YAHOO.util.Connect.asyncRequest('GET', sUrl, categoryCallback);
    },

    loadChildren : function(selElementId, categoryId) {
        // Find categories by parent id
        var sUrl = contextPath + "/category/findByParent.do?categoryId="
                + categoryId;
        CategoryHandler.loadCategories(sUrl, selElementId, categoryId);
    },

    loadSiblings : function(selElementId, categoryId) {
        var sUrl = contextPath + "/category/getSiblings?categoryId="
                + categoryId;
        CategoryHandler.loadCategories(sUrl, selElementId, categoryId);
    }
};

var categoryCallback = {
    success : CategoryHandler.handleSuccess,
    failure : CategoryHandler.handleFailure,
    scope : CategoryHandler
};

var postForm = function(sUrl, formId, targetId) {
    YAHOO.util.Connect.setForm(document.getElementById(formId));
    var cObj = YAHOO.util.Connect.asyncRequest('POST', sUrl, {
        success : function(o) {
            document.getElementById(targetId).innerHTML = o.responseText;
        },
        failure : function(o) {
            alert(o.statusText);
        }
    });
};

var postFormAndReload = function(sUrl, formId, targetId) {
    YAHOO.util.Connect.setForm(document.getElementById(formId));
    var cObj = YAHOO.util.Connect.asyncRequest('POST', sUrl, {
        success : function(o) {
            var responseTextTrimmed = YAHOO.lang.trim(o.responseText);
            if (responseTextTrimmed.indexOf('<success/>') === 0) {
                window.location.reload();
            } else {
                document.getElementById(targetId).innerHTML = o.responseText;
            }
        },
        failure : function(o) {
            alert(o.statusText);
        }
    });
};

var getHtml = function(sUrl, targetId) {
    YAHOO.util.Connect.asyncRequest('GET', sUrl, {
        success : function(o) {
            document.getElementById(targetId).innerHTML = o.responseText;
        },
        failure : function(o) {
            alert(o.statusText);
        }
    });
};

function addOption(sel, theId, theName) {
    var opt = document.createElement("OPTION");
    opt.value = theId;
    opt.text = theName;
    try {
        sel.add(opt, null); // standards compliant
    } catch (ex) {
        sel.add(opt); // IE only
    }
}

function handleCountryChange(e) {
    var regionId = getSelectedId(e);
    setHiddenRegionIdValue(regionId);
    RegionHandler.loadRegions('select-region-2', regionId);
    removeAllOptionsButTheFirstOne(document.getElementById('select-region-3'));
}

function handleCountyChange(e) {
    var regionId = getSelectedId(e);
    setHiddenRegionIdValue(regionId);
    RegionHandler.loadRegions('select-region-3', regionId);
}

function handleMunicipalityChange(e) {
    var regionId = getSelectedId(e);
    setHiddenRegionIdValue(regionId);
}

function setHiddenRegionIdValue(regionId) {
    var elmnt = document.getElementById('regionObj');
    elmnt.value = regionId;
}

function handleBaseCategoryChange(e) {
    var categoryId = getSelectedId(e);
    setHiddenCategoryIdValue(categoryId);
    CategoryHandler.retainFirst = true;
    CategoryHandler.loadChildren('select-category-2', categoryId);
}

function handleCategoryChange(e) {
    var categoryId = getSelectedId(e);
    setHiddenCategoryIdValue(categoryId);
}

function setHiddenCategoryIdValue(categoryId) {
    var elmnt = document.getElementById('category');
    elmnt.value = categoryId;
}

function removeAllOptionsButTheFirstOne(elmnt) {
    elmnt.options.length = 1;
}

function getSelectedId(e) {
    var elTarget = YAHOO.util.Event.getTarget(e);
    return elTarget.options[elTarget.selectedIndex].value;
}

function toggleAdditionalCategories(evt) {
    var id = getSelectedId(evt);
    if (id > 0) {
        CategoryHandler.retainFirst = false;
        CategoryHandler.loadSiblings('additionalCategories', id);
        YAHOO.util.Dom.removeClass("additional-categories-container", "hideMe");
    } else {
        YAHOO.util.Dom.addClass("additional-categories-container", "hideMe");
    }
}
function hideAdditionalCategories() {
    YAHOO.util.Dom.addClass("additional-categories-container", "hideMe");
}
