/*
    Tulpa.pm JavaScript compliment
    Released under ESL
    http://fredrikvold.info/esl.htm
*/
var Tulpa = function () {
    return {

prepareMenu : function () {
    $('.expander').each(
        function () {
            $(this).toggle(
                Tulpa.expand,
                Tulpa.collapse
            );
        }
    );
    $('.children').each(
        function () {
            var element = $(this);
            var fullid = element.attr('id');
            var id = fullid.replace('children_','');
            var cookie = $.cookie('TulpaCMS_menu_'+id);
            element.hide();
            if (cookie){
                $('#expander_'+id).click();
            }
        }
    );
    var classtring = $('.activeNode').first().parent().attr('class')
    if (classtring){
        var classes = classtring.split(/\s+/);
        $.each(classes,
            function(index,item){
                if (item.match(/^path_/)){
                    var rawpath = item.replace(/^path_/,'');
                    var path = [];
                    if(rawpath.match(/_/)){
                        path = rawpath.split('_');
                    }
                    else {
                        path.push(rawpath);
                    }
                    for (element in path){
                        var expander = $('#expander_'+path[element]);
                        var children = $('#children_'+path[element]);
                        if (children.css('display') == 'none'){
                            expander.click();
                        }
                    }
                }
            }
        );
    }
},
expand : function () {
    var element = $(this);
    element.blur();
    element.html('<img src="/static/tile/parent_expanded.gif" alt="Parent" />');
    var fullid = element.attr('id');
    var id = fullid.replace('expander_','');
    $('#icon_'+id).attr('src','/static/tile/folder_open.gif');
    $('#children_'+id).show();
    $.cookie('TulpaCMS_menu_'+id,'show');
},
collapse : function () {
    var element = $(this);
    element.blur();
    element.html('<img src="/static/tile/parent_collapsed.gif" alt="Parent" />');
    var fullid = element.attr('id');
    var id = fullid.replace('expander_','');
    $('#icon_'+id).attr('src','/static/tile/folder_closed.gif');
    $('#children_'+id).hide();
    $.cookie('TulpaCMS_menu_'+id,'');
},
newnode : function () {
    $('#name').change(Tulpa.getLinkName);
    $('#save').click(Tulpa.save);
},
getLinkName : function (e) {
    var name = $('#name').val();
    var data = {
        request : 'suggestLinkName',
        name : name
    };
    Tulpa.exchange(data,Tulpa.gotLinkName);
},
gotLinkName : function (data) {
    if (data.error){
        alert(data.error);
        return false;
    }
    $('#linkname').text(data.linkname);
},
save : function () {
    var name     = $('#name').val();
    var linkname = $('#linkname').text();
    var text     = $('#text').val();
    var id       = $('#nodeID').val();
    var parentID = $('#parentID').val();
    if (name.length > 0 && linkname.length > 0 && text.length > 0){
        var data = {
            request : 'saveNode',
            name : name,
            linkname : linkname,
            id : id,
            parentID : parentID,
            text : text
        };
        Tulpa.exchange(data,Tulpa.saved);
        //alert(JSON.stringify(data));
    }
    else {
        var nl = '\n';
        alert('Sorry, this is unsavable.  Fill it out properly first\n'+name.length+nl+linkname.length+nl+text.length+nl+parentID);
    }
},
saved : function (data) {
    if (data.error){
        alert(data.error);
    }
    else if (data.linkname){
        location.href = '/'+data.linkname+'.htm';
    }
    else {
        alert('Saved');
    }
},
exchange : function (data,successCallback,errorCallback) {
    var error = Tulpa.genericError;
    if (errorCallback){
        if (typeof(errorCallback) == 'function'){
            error = errorCallback;
        }
        else {
            alert('You have specified a '+typeof(errorCallback)+" as the Error Callback.  That won't work.");
        }
    }
    var send = {
        json : JSON.stringify(data)
    };
    $.ajax({
        url : '/cgi-bin/tulpa.cgi',
        type : 'post',
        data : send,
        dataType : 'json',
        success : successCallback,
        error : error
    });
},
genericError : function (XMLHttpRequest,textStatus,errorThrown) {
    alert('Error during backend call\n'+textStatus+' '+errorThrown);
}

}}();

$(Tulpa.prepareMenu);
