﻿var CurrentEditingBox;
var CurrentEditingBoxID;
var CurrentEditingBoxText;

function FCKeditor_OnComplete( editorInstance )
{
    editorInstance.Events.AttachEvent( 'OnSelectionChange', updateEditBoxesOwner ) ;
}

function authorised()
{
}

function processAuth(xmlhttp)
{
    var response = xmlhttp.responseText;

    var type = response.substring(response.indexOf('<type>')+6,response.indexOf('</type>'));
    
    if(type == "Authorised")
    {
        authorised();
    }
    
    getLayout();
}

function ProcessAddPage()
{
    var pagename = document.getElementById('pagename').value;
    var layout = document.getElementById('pagelayout').value;
    var option = document.getElementById('addWhere').value;
    var item = document.getElementById('menuItem').value;
    
    hideAddPage();
    
    //alert ( 'pName: ' + pagename + ' layout: ' + layout + ' option: ' + option + ' item: ' + item);
    
    sendAjaxMessage('addPage','&name='+pagename+'&layout='+layout+'&option='+option+'&item='+item, function(xmlhttp)
    {
        var response = xmlhttp.responseText;
        
        var type = response.substring(response.indexOf('<type>')+6,response.indexOf('</type>'));
    
        var content = response.substring(response.indexOf('<content>')+9,response.indexOf('</content>'));
        
        var loc = ''+window.location;
        
        if(type == 'addPage')
        {
            window.location.href = loc.split('?')[0]+'?page='+content;
        }
        else if(type == 'addPageException')
        {
            alert(content);
        }
        else
        {
            alert(content);
        }
    });
}

var newBoxID = 0;

function updateEditBoxesOwner(editorInstance)
{
    var workingBox;
    var newContent;
    
    CurrentEditingBoxText = editorInstance.GetHTML(true);
    
    //alert(CurrentEditingBoxID);
    YUI().use('node', function(Y) { 
        newContent = Y.Node.create('<div class="BoxContent" id="'+CurrentEditingBoxID+'">'+editorInstance.GetHTML(true)+'</div>');
        //newContent = Y.Node.create('<div><p>Test HTML</p></div>');
        
        //alert('Current Editing Box' + CurrentEditingBox.get('innerHTML'));
        //alert('Current Editing Box Ancestor .box' + CurrentEditingBox.ancestor('.box').get('innerHTML'));
        //alert('New Content ' + newContent.get('innerHTML'));
        
        //var testHeadNode = Y.Node.get('#ContentArea');
        //testHeadNode.appendChild(CurrentEditingBox);
        
        CurrentEditingBox = Y.Node.get('#'+CurrentEditingBoxID);
        workingBox = CurrentEditingBox.ancestor('.box');
        
        //CurrentEditingBoxID = '#'+CurrentEditingBoxID;

        workingBox.removeChild(CurrentEditingBox);
        
        //alert(CurrentEditingBoxID);
        
    });
    
    workingBox.appendChild(newContent);
    CurrentEditingBox = newContent;
}

function replaceTextAreas()
{
    var textareas = document.getElementsByTagName('textarea');
    for ( var i=0; i < textareas.length; i++)
    {
        var oFCKeditor = new FCKeditor( textareas[i].getAttribute ('name') ) ;
        oFCKeditor.Config["CustomConfigurationsPath"] = "/fckeditor/myConfig.js"  ;
        oFCKeditor.BasePath = '/fckeditor/' ;
        oFCKeditor.ToolbarSet = 'MyToolbar' ;
        oFCKeditor.ReplaceTextarea() ;
    }
}

var AddColumnButtonNodeArray=[];
var EditBoxButtonNodeArray=[];
var removeACHereEvent;
var removeEBEvent;

function onClickEB(e)
{
    //alert(e.parentNode.parentNode.parentNode.getAttribute('id'));
      YUI().use('node', 'anim', function(Y) {
            addEditBoxInterface();
            var contentNode = Y.Node.get('#EditBox');
            contentNode.setStyle('display','inline');
            
            var tNode = Y.Node.get('#'+e.parentNode.parentNode.parentNode.getAttribute('id')+'');
                        
            if(removeEBEvent)
            {
                removeEBEvent.detach();
            }
            
            // set edit area to boxes content
            
            var EditArea = Y.Node.get('#EditArea');
            
            //Y.Node.get('#ContentArea').removeChild(EditArea);
            
            //addEditBoxInterface();
            
            //EditArea = Y.Node.get('#EditArea');
            
            var EditAreaHTML = tNode.get('lastChild').get('innerHTML');
            CurrentEditingBox = tNode.get('lastChild');
            CurrentEditingBoxID = CurrentEditingBox.get('id');
            
            //alert(EditAreaHTML);
            
            var EditAreaNewNode = Y.Node.create(EditAreaHTML);
            
            EditArea.set('value',EditAreaHTML);

            replaceTextAreas();
      });
 }

function addEditorControls()
{
    YUI().use('node', 'anim', function(Y) { 
        var contentNodes = Y.all('.box'); 
        var MenuBarHTML = '<div class="MenuBar"><p><input type="button" class="EditBoxButton" value="Edit Box" /></p></div>';
        
        if(contentNodes != null)
        {
            // remove all menu bars
            contentNodes.each(function (node) {
                if(!node.get('firstChild').hasClass('MenuBar' ) )
                {
                    var createNode = Y.Node.create(MenuBarHTML);
                    node.insertBefore(createNode,node.get('firstChild'));
                }
            });
        }
        
        var onClickEB = function(e)
        {
            addEditBoxInterface();
            var contentNode = Y.Node.get('#EditBox'); 
            contentNode.setStyle('display','inline');
                        
            if(removeEBEvent)
            {
                removeEBEvent.detach();
            }
            
            // set edit area to boxes content
            
            var EditArea = Y.Node.get('#EditArea');
            
            //Y.Node.get('#ContentArea').removeChild(EditArea);
            
            //addEditBoxInterface();
            
            //EditArea = Y.Node.get('#EditArea');
            
            var EditAreaHTML = e.target.ancestor('.box').get('lastChild').get('innerHTML');
            CurrentEditingBox = e.target.ancestor('.box').get('lastChild');
            CurrentEditingBoxID = CurrentEditingBox.get('id');
            
            //alert(EditAreaHTML);
            
            var EditAreaNewNode = Y.Node.create(EditAreaHTML);
            
            EditArea.set('value',EditAreaHTML);

            replaceTextAreas();
        }

        var onClickAC = function(e) { 
            //alert('onclick function');
            var contentNode = Y.Node.get('#AddColumn'); 
            contentNode.setStyle('display','inline');
            
            var addColumnHereNode = Y.Node.get('#ACHereButton');
            
            
            if(removeACHereEvent)
            {
                //alert('removing ACHere event');
                removeACHereEvent.detach();
            }
            
            //Y.Event.purgeElement('#ACHereButton');
            
            var addColumnHereFunction = function(){
	            // add column to parent box blah
	            //alert('adding Box');
	            
	            var newColumnNode = Y.Node.create('<div class="box"><div class="BoxContent" id="NewBox'+newBoxID+'"><p>Content Goes Here</p></div></div>');
	            newBoxID++;
	            
	            e.target.ancestor('.box').ancestor('div').insertBefore(newColumnNode,e.target.ancestor('.box'));
	            
	            alert(e.target.ancestor('div').ancestor('div').getAttribute('class'));
	            
	            addEditorControls();
	        }
            
	        removeACHereEvent = addColumnHereNode.on('click',addColumnHereFunction);
	        
	        Y.get('#AddColumn').setXY([e.pageX, e.pageY+20]); 
	    };
	    
	    /*
	    // Add Column Button Handlers
	    var AddColumnButtonNode = Y.all('.AddColumnButton');
	    
	    var temparray1=[];
	    var j = 0;
	    
	    for(var i = 0; i<AddColumnButtonNodeArray.Length; i++)
	    {
	        AddColumnButtonNodeArray[i].detach();
	    }
	    
	    AddColumnButtonNode.each(function(node)
	    {
	        temparray1[j] = node.on('click', onClickAC); 
	        j++;
	    });
	    
	    AddColumnButtonNodeArray = temparray1;
	    */
	    
	    // Edit Box Button Handlers
	    var EditBoxColumnButtonNode = Y.all('.EditBoxButton');
	    
	    var temparray2=[];
	    var k = 0;
	    
	    for(var i = 0; i<EditBoxButtonNodeArray.Length; i++)
	    {
	        EditBoxButtonNodeArray[i].detach();
	        
	        //alert('detaching EditBoxButtonNodeArray' + i);
	    }
	    
	    if(EditBoxColumnButtonNode != null)
	    {
	        EditBoxColumnButtonNode.each(function(node)
	        {
	            //alert ('Ataching onClickEB ' + k);
	            temparray2[k] = node.on('click', onClickEB); 
	            k++;
	        });
	    }
	    
	    EditBoxButtonNodeArray = temparray2;
    });
}

function addColumnInterface()
{
    YUI().use('node', 'dd', function(Y) { 
        var contentNode = Y.Node.get('#ContentArea'); 
        var createNode = Y.Node.create('<div id="AddColumn"><div id="ACCloseButton">X</div><div style="clear:both"><p>Add New Column <br /><input id="ACHereButton" type="button" value="Add Column Here" /><br />[Add After this]<br />[Add Before this]</p></div></div>');
        createNode.setStyle('position','absolute');
        createNode.setStyle('top','100');
        createNode.setStyle('left','100');
        createNode.setStyle('display','none');
        createNode.setStyle('border','1px solid grey');
        createNode.setStyle('padding','5px');  
        
        contentNode.insertBefore(createNode,contentNode.get('firstChild'));
        
        var dd = new Y.DD.Drag({ 
	        node: '#AddColumn' 
	    });
	    
	    var closeAddColumnNode = Y.Node.get('#ACCloseButton');
	    closeAddColumnNode.setStyle('float','right');
	    closeAddColumnNode.setStyle('border','1px solid grey');
	    closeAddColumnNode.setStyle('padding','5px');  
	    closeAddColumnNode.on('click',hideAddColumn);
    });
}

function sendEditBoxData()
{
    CurrentEditingBoxText = CurrentEditingBoxText.replace(/&/g,"%26" );
    CurrentEditingBoxText = CurrentEditingBoxText.replace(/#/g,"%23" );
        
    postAjaxMessage('update','box='+CurrentEditingBoxID+'&data='+CurrentEditingBoxText,function(xmlhttp){});
}

var editboxadded = false;

function addEditBoxInterface()
{
    if(!editboxadded)
    {
        //alert('adding eb');
        YUI().use('node', 'dd', function(Y) { 
            
            var dd = new Y.DD.Drag({ 
	            node: '#EditBox' 
	        });
    	    
	       // alert('eb added');
    	    
	        editboxadded = true;
        });
    }
}

function addPageMenu()
{
    addPageMenuInterface();
    YUI().use('node', 'dd', function(Y) { 
        var contentNode = Y.Node.get('#addPageMenu'); 
        contentNode.setStyle('display','block');
    });
}

var apmiadded = false;

function addPageMenuInterface()
{
    if(!apmiadded)
    {
        apmiadded = true;
        YUI().use('node', 'dd', function(Y) { 
            
            var dd = new Y.DD.Drag({ 
	            node: '#addPageMenu' 
	        });
                    
            var closeAddColumnNode = Y.Node.get('#APMCloseButton');
	        closeAddColumnNode.on('click',hideAddPage);
        });
    }
}

function updateAddPageMenu(xmlhttp)
{
    var response = xmlhttp.responseText;

    var type = response.substring(response.indexOf('<type>')+6,response.indexOf('</type>'));
    
    content = response.substring(response.indexOf('<content>')+9,response.indexOf('</content>'));
    
    //alert('upm: '+content);
    
    if(type == "addPM")
    {
        YUI().use('node', 'anim', function(Y) { 
            var contentNode = Y.Node.get('#APMLoading'); 
            var createNode = Y.Node.create('<div>'+content+'</div>');
            
            contentNode.appendChild(createNode);
            
            var loadingNode = Y.Node.get('#LoadingIMG');
            loadingNode.setStyle('display','none');
        });
    }
}

var cmsinterfaceadded = false;

function addMainCMSInterface()
{
    if(!cmsinterfaceadded)
    {
        cmsinterfaceadded = true;
        YUI().use('node', 'dd', function(Y) { 
            var contentNode = Y.Node.get('#ContentArea'); 
            var createNode = Y.Node.create('<div id="MainCMSInterface"><div id="MainCMSHeader"><h3 style="float:left;">Website Editor</h3></div><div style="clear:both"><input type="Button" onclick="addPageMenu();" value="Add Page" /></div></div>');
            
            contentNode.insertBefore(createNode,contentNode.get('firstChild'));
        });
    }
}

function hideAddPage()
{
    YUI().use('node', function(Y) { 
        var contentNode = Y.Node.get('#addPageMenu'); 
        contentNode.setStyle('display','none');
    });
}

function hideAddColumn()
{
    YUI().use('node', function(Y) { 
        var contentNode = Y.Node.get('#AddColumn'); 
        contentNode.setStyle('display','none');
    });
}

function hideEditBox()
{
    YUI().use('node', function(Y) { 
        var contentNode = Y.Node.get('#EditBox'); 
        contentNode.setStyle('display','none');
        
        Y.Node.get('#ContentArea').removeChild(contentNode);
    });
}

function addRow()
{
    // add before? add after? add to other row?
}