/* CatalystX::CMS javascript */
YAHOO.namespace('CMS');

YAHOO.CMS.IDCOUNTER = 0;

var Dom = YAHOO.util.Dom;
var CMS = YAHOO.CMS;
var Logger = YAHOO.console.log;

CMS.add_meta_item = function () {
    var count = CMS.IDCOUNTER++;
    Logger('add_meta_item() called for ' + count);
    var attrs = new YAHOO.util.Element('cms_attrs');
    Logger('found attrs id');
    var item = new YAHOO.util.Element( Dom.get('cms_attrs_template').cloneNode(true) );
    item.set('id', 'attr_' + count);
    item.setStyle('display', 'block');
    var inputs = item.getElementsByTagName('input');
    
    for (var i = 0; i < inputs.length; i++) {
        var el = new YAHOO.util.Element(inputs[i]);
        el.set('name', el.get('name') + '_' + count);
        el.on('click', function() { 
            if (   this.get('value') == 'meta name'
                || this.get('value') == 'meta value'
                )
            {
                this.set('value','')
            }
        });
    }
    
    item.appendTo(attrs);
    Logger('appended new tags');
}

CMS.newlineToBR = function(ev) {
    Logger('caught button click');
    var html = CMS.Editor.get('textarea').value.replace(/\n/g, '<br>');
    Logger(html);
    CMS.Editor.setEditorHTML(html);
}

/* redundant style and class just to cover all cases */
CMS.showEditorPart = function(el) {
    Dom.setStyle(el, 'visibility', 'visible');
    Dom.setStyle(el, 'top', '');
    Dom.setStyle(el, 'left', '');
    Dom.setStyle(el, 'position', 'static');
    Dom.removeClass(el, 'editor-hidden');
}

CMS.hideEditorPart = function(el) {
    Dom.setStyle(el, 'visibility', 'hidden');
    Dom.setStyle(el, 'top', '-9999px');
    Dom.setStyle(el, 'left', '-9999px');
    Dom.setStyle(el, 'position', 'absolute');
    Dom.addClass(el, 'editor-hidden');
}

CMS.init_yui_editor = function() {
    var Event = YAHOO.util.Event,
        status = Dom.get('status');
    
    var handleSuccess = function(o) {
        var data = YAHOO.lang.JSON.parse( o.responseText );
        status.innerHTML = 'Status: ' + 
                            data.Results.status + 
                            '<br/>Filter: ' + 
                            data.Results.filter + 
                            '<br/>' + 
                            (new Date().toString());
        CMS.Editor.setEditorHTML(data.Results.data);
    }
    var handleFailure = function(o) {
        var data = YAHOO.lang.JSON.parse( o.responseText );
        status.innerHTML = 'Status: ' + data.Results.status + '<br/>';
    }

    var callback = {
        success: handleSuccess,
        failure: handleFailure
    };

    Logger('Create Button Controls');
    var save_button     = new YAHOO.widget.Button('save');
    Logger('got save button');
    var cancel_button   = new YAHOO.widget.Button('cancel');
    var toggle_button   = new YAHOO.widget.Button('toggle_editor');
    var preview_button  = new YAHOO.widget.Button('preview');
    var toggle_text     = toggle_button.get('label');
    Logger('made all buttons');

    var myConfig = {
        height: CMS.EDITOR_HEIGHT,
        width:  CMS.EDITOR_WIDTH,
        animate: true,
        dompath: true,
        focusAtStart: true,
        handleSubmit: true,
        //plainText: true,
        resize: true
        
    };

    Logger('Create the Editor..');
    CMS.Editor = new YAHOO.widget.Editor('editor', myConfig);
    CMS.EDITOR_STATE = 'on';

    Logger('set Editor event listeners');
            
    CMS.Editor.on('afterRender', function() {
        var wrapper = CMS.Editor.get('editor_cont');
        Dom.addClass(wrapper, 'editor-hidden');
    });
            
    /* make sure preview and save write any changes back to the YUI editor */
    save_button.on('click', CMS.newlineToBR);
    preview_button.on('click', CMS.newlineToBR);
    
    /* toggle button switches editor back to plain ol' textarea */
    toggle_button.on('click', function(ev) {
        Event.stopEvent(ev);
        var ta      = CMS.Editor.get('element'),
            cont    = CMS.Editor.get('element_cont').get('firstChild');
        if (CMS.EDITOR_STATE == 'on') {
            Logger('editor state is on');
            CMS.EDITOR_STATE = 'off';
            CMS.Editor.saveHTML();
            ta.value = ta.value.replace(/<br>/gi, '\n');
            if (!CMS.Editor.browser.ie) {
                CMS.Editor._setDesignMode('on');
            }
            CMS.showEditorPart(ta);
            CMS.hideEditorPart(cont);
            CMS.Editor.get('element_cont').removeClass('yui-editor-container');
            CMS.Editor.hide();
            toggle_button.set('label','Use GUI Editor');
            Logger('gui editor off');
        } else {
            Logger('editor state is off');
            CMS.EDITOR_STATE = 'on';
            CMS.showEditorPart(cont);
            CMS.hideEditorPart(ta);
            CMS.Editor.get('element_cont').addClass('yui-editor-container');
            CMS.Editor.show();
            CMS.Editor._focusWindow();
            if (!CMS.Editor.browser.ie) {
                CMS.Editor._setDesignMode('on');
            }
            CMS.newlineToBR();
            toggle_button.set('label',toggle_text);
            Logger('gui editor on');
        }
    });
    
    Logger('render Editor');
    CMS.Editor.render();

}

CMS.init_admin_links = function() {
    CMS.CreateDialog = new YAHOO.widget.SimpleDialog("create_new_dialog", 
        { width : "400px",
          fixedcenter : true,
          visible : false, 
          constraintoviewport : true,
          postmethod: 'form',
          modal: true,
          buttons : [ { text:"Submit", handler:handleSubmit, isDefault:true } ]
         });
    CMS.RenameDialog = new YAHOO.widget.SimpleDialog("rename_dialog", 
         { width : "400px",
           fixedcenter : true,
           visible : false, 
           constraintoviewport : true,
           postmethod: 'form',
           modal: true,
           buttons : [ { text:"Submit", handler:handleSubmit, isDefault:true } ]
         });

    // Define various event handlers for Dialog
    var handleSubmit = function() {
        this.submit();
    };
    var handleCancel = function() {
        this.cancel();
    };
    
    CMS.CreateDialog.render(document.body);
    CMS.RenameDialog.render(document.body);
    Logger("dialogs rendered");
    
}

CMS.lock_timer = function() {
    
    if (!CMS.LOCK_EXPIRES) {
        Logger('lock expired');
        return;
    }

    //grab current date
    var dateNow = new Date();                               
    //calc milliseconds between dates
    var amount = CMS.LOCK_EXPIRES.getTime() - dateNow.getTime();  
    delete dateNow;

    // time is already past
    if(amount < 0){
        Dom.get('countbox').innerHTML="Lock expired!";
    }
    // date is still good
    else{
        var days, hours, mins, secs, out;
        days=0;hours=0;mins=0;secs=0;out="";

        amount = Math.floor(amount/1000);//kill the "milliseconds" so just secs

        days=Math.floor(amount/86400);//days
        amount=amount%86400;

        hours=Math.floor(amount/3600);//hours
        amount=amount%3600;

        mins=Math.floor(amount/60);//minutes
        amount=amount%60;

        secs=Math.floor(amount);//seconds

        if (days != 0) {
            out += days +" day"+((days!=1)?"s":"")+", ";
        }
        if (days != 0 || hours != 0) {
            out += hours +" hour"+((hours!=1)?"s":"")+", ";
        }
        if (days != 0 || hours != 0 || mins != 0) {
            out += mins +" minute"+((mins!=1)?"s":"")+", ";
        }
        out += secs +" seconds";
        Dom.get('countbox').innerHTML=out;

        setTimeout(CMS.lock_timer, 1000);
    }
}

/* nearly verbatim from
http://developer.yahoo.com/yui/examples/layout/page_layout.html
*/
CMS.init_layout = function() {
    
    var Event = YAHOO.util.Event;
    var layout = new YAHOO.widget.Layout({
            units: [
                
                {   position: 'top', 
                    height: 58, 
                    body: 'top-panel', 
                    header: CMS.HEADER || CMS.THIS_URL, 
                    gutter: '5px', 
                    collapse: true, 
                    resize: true },
                
                {   position: 'right', 
                    header: 'Manage Content', 
                    width: 300, 
                    resize: true, 
                    gutter: '5px', 
                    footer: 'cms', 
                    collapse: true, 
                    scroll: true, 
                    body: 'right-panel', 
                    animate: true },
                
                {   position: 'bottom', 
                    header: '', 
                    height: 60, 
                    resize: true, 
                    body: 'footer', 
                    gutter: '5px', 
                    collapse: true },
                
                /*
                {   position: 'left', 
                    header: 'Left', 
                    width: 200, 
                    resize: true, 
                    body: 'left1', 
                    gutter: '5px', 
                    collapse: true, 
                    close: true, 
                    collapseSize: 50, 
                    scroll: true, 
                    animate: true },
                */
                {   position: 'center', 
                    body: 'content',
                    gutter: '5px' 
                }
            ]
    });

    layout.render();
    
    Logger("layout rendered");

    Event.on('tRight', 'click', function(ev) {
        Event.stopEvent(ev);
        layout.getUnitByPosition('right').toggle();
    });

}

CMS.init_plain_editor = function() {
    CMS.Editor = new YAHOO.util.Resize('editor');
    CMS.Editor.on('resize', function(e) {
        Dom.setStyle('resize', 'height', (e.height - 10) + 'px');
        Dom.setStyle('resize', 'width', (e.width - 10) + 'px');
    }, CMS.Editor, true);
    Logger("plain editor rendered");
}

CMS.init_tree = function() {

    CMS.Tree = new YAHOO.widget.TreeView('wrapper_tree');

    CMS.Tree.render();
    Logger('tree rendered');
}

CMS.setup_page = function() {
    if (CMS.USE_LAYOUT) {
        CMS.init_layout();
    }
    if (CMS.USE_EDITOR) {
        CMS.init_yui_editor();
    }
    else if (Dom.get('editor')) {
        CMS.init_plain_editor();
    }
    CMS.init_admin_links();
    CMS.lock_timer();
    CMS.init_tree();
    
}

YAHOO.util.Event.onDOMReady( CMS.setup_page );