
var tabs = new Array(
'customTab',
'automaticTab',
'HTMLTab',
'moduleTab'
)

// Available modules
var modules;

var currentPreviewObject;
function updateDisplayOptions(tab) {

    var type = document.getElementById(tab+'ContentType').value;
    var container = document.getElementById(tab+'DisplayOptions');
    if (container.className != type+'Display') {
        var d = new Date()
        var t = d.getTime()
        var url = '/admin/ajax/displayOptions/?type='+type+'&mode=' +tab+'&ts=' + t;

alert(url);

        var callbackFun = 
        { 
            success: function(o) {updateDisplayOptionsReturn(o)}, 
            failure: function(o) {updateDisplayOptionsReturn(o)}
        }; 
        var request = YAHOO.util.Connect.asyncRequest('GET', url, callbackFun);
    }
}

function updateDisplayOptionsReturn(o) {
    var d = eval("eval("+o.responseText+");");
    if (document.getElementById(d.mode+'DisplayOptions').className != d.type+'Display') {
        document.getElementById(d.mode+'DisplayOptions').innerHTML = d.data;
        document.getElementById(d.mode+'DisplayOptions').className = d.type+'Display';
    }
}

function changeTab(name) {
    hidePanes();
    subjectsTA(true);
/*
    for (i=0; i<tabs.length; i++) {
        document.getElementById(tabs[i]).style.display = 'none';
    }

    document.getElementById(name+'Tab').style.display = '';
*/

    document.getElementById('ddcType').value = name;
    document.getElementById('ddInsertButton').style.display = '';
    
    switch(name) {
        case 'custom':
            subjectsTA();
            document.getElementById('previewContent').style.display = '';
        break;
        case 'automatic':
            subjectsTA();
            document.getElementById('previewContent').style.display = '';
        break;
        case 'HTML':
            document.getElementById('previewContent').style.display = '';
        break;
        default:
            
        break;
    }
}

function hidePanes() {
    document.getElementById('availableContent').style.display = 'none';
    document.getElementById('previewContent').style.display = 'none';
    document.getElementById('availableContentHeader').innerHTML = 'Available Content';
}

function subjectsTA(disable) {
    document.getElementById('ddSearchResults').style.display = 'none';
    if (disable) {
        document.getElementById('availableContentHeader').innerHTML = '';
        document.getElementById('availableContent').style.display = 'none';
        document.getElementById('ddSubjects').style.display = 'none';    
    } else {
        if (document.getElementById('availableContentHeader').innerHTML == 'Available Subjects')
            return;
        document.getElementById('availableContentHeader').innerHTML = 'Available Subjects';

    if(document.getElementById('ddMatchSubjectsHeading'))
        document.getElementById('ddMatchSubjectsHeading').innerHTML   = 'Matching Subjects';

    if(document.getElementById('ddSuggestSubjectsHeading'))
        document.getElementById('ddSuggestSubjectsHeading').innerHTML = 'Suggested Subjects';

    if(document.getElementById('ddMatchSubjects'))
        document.getElementById('ddMatchSubjects').innerHTML   = 'Please start typing to find subjects';

    if(document.getElementById('ddSuggestSubjects'))
        document.getElementById('ddSuggestSubjects').innerHTML = '';

        document.getElementById('availableContent').style.display = '';

    if(document.getElementById('ddSubjects'))
        document.getElementById('ddSubjects').style.display = '';

    }
}

function placesTA(disable) {
    document.getElementById('ddSearchResults').style.display = 'none';
    if (disable) {
        document.getElementById('availableContentHeader').innerHTML = '';
        document.getElementById('availableContent').style.display = 'none';
        document.getElementById('ddSubjects').style.display = 'none';        
    } else {
        if (document.getElementById('availableContentHeader').innerHTML  == 'Available Places')
            return;
        document.getElementById('availableContentHeader').innerHTML   = 'Available Places';
        document.getElementById('ddMatchSubjectsHeading').innerHTML   = 'Matching Places';
        document.getElementById('ddSuggestSubjectsHeading').innerHTML = 'Suggested Places';
        document.getElementById('ddMatchSubjects').innerHTML   = 'Please start typing to find places';
        document.getElementById('ddSuggestSubjects').innerHTML = '';
        document.getElementById('availableContent').style.display = '';
        document.getElementById('ddSubjects').style.display = '';
    }
}

function previewHTMLContent() {

    if (currentPreviewObject && document.getElementById(currentPreviewObject.id)) {
        if (document.getElementById('editMode').value == 'true') {
            document.getElementById('editMode').value = '';
            removeBox(currentPreviewObject.id, true);
        } else {
            currentPreviewObject.getEl().parentNode.removeChild(currentPreviewObject.getEl());
        }
    }
    var box = new ContentBox('box', (MSJS.dd.newGroupID()));
    box.boxType    = 'HTML';
    box.heading    = document.getElementById('HTMLContentHeading').value;
    box.useHeading = document.getElementById('HTMLUseHeading').checked;
    box.theme      = document.getElementById('HTMLContentTheme').value;

  //alert(box.theme);

    box.generateBox();
    currentPreviewObject = box;
    document.getElementById('previewContentArea').innerHTML = '';
    document.getElementById('previewContentArea').appendChild(box.HTML);
}

function previewAutomaticContent() {
    if (currentPreviewObject && document.getElementById(currentPreviewObject.id)) {
        if (document.getElementById('editMode').value == 'true') {
            document.getElementById('editMode').value = '';
            removeBox(currentPreviewObject.id, true);
        } else {
            currentPreviewObject.getEl().parentNode.removeChild(currentPreviewObject.getEl());
        }
    }  

    var box = new ContentBox('box', (MSJS.dd.newGroupID()));
    box.heading    = document.getElementById('automaticContentHeading').value;
    box.useHeading = document.getElementById('automaticUseHeading').checked;
    box.type       = document.getElementById('automaticContentType').value;
    box.count      = document.getElementById('automaticContentCount').value;
    box.format     = document.getElementById('automaticContentDisplay').value;
    box.subject    = document.getElementById('automaticContentSubject').value;
    box.theme      = document.getElementById('automaticContentTheme').value;
    box.boxType    = 'automatic';
    box.generateBox();
    currentPreviewObject = box;


    document.getElementById('previewContent').style.visibility = 'visible';
    document.getElementById('previewContentArea').innerHTML = '';
    document.getElementById('previewContentArea').appendChild(box.HTML);
  document.getElementById('contentPreview').appendChild(box.HTML);

}

function updateHeading(caller) {
    if (!(currentPreviewObject 
          && document.getElementById(currentPreviewObject.id)) 
          || !document.getElementById('automaticUseHeading').checked) {
        return;
    }
    currentPreviewObject.heading = caller.value;
    document.getElementById('grphead'+currentPreviewObject.id).innerHTML = currentPreviewObject.heading;
}

function updateTheme(caller) {
    if (!currentPreviewObject || !document.getElementById(currentPreviewObject.id)) {
        if (document.getElementById('ddcType').value == 'HTML') {
            
        }
        return;
    }
    currentPreviewObject.theme = caller.value;
    document.getElementById(currentPreviewObject.id).className = currentPreviewObject.theme;
    if (caller.id.indexOf('automatic') > -1) {
        if (document.getElementById('automaticNewWindow').checked) {
            document.getElementById(currentPreviewObject.id).className += ' newWindow';
        }
    } else if (caller.id.indexOf('custom') > -1) {
        if (document.getElementById('customNewWindow').checked) {
            document.getElementById(currentPreviewObject.id).className += ' newWindow';
        }
    }
}

function toggleHeading(caller) {
    if (!currentPreviewObject) {
        return;
    }
    if (caller.checked) {
        document.getElementById(currentPreviewObject.headerId).style.display = '';
        currentPreviewObject.useHeading = true;
    } else {
        document.getElementById(currentPreviewObject.headerId).style.display = 'none';
        currentPreviewObject.useHeading = false;
    }
}

function searchCustomContent() {
    if (!customInsertPosition) {
        customInsertPosition = insertPosition;
    }
    customContentType    = document.getElementById('customContentType').value;
    customFileName       = document.getElementById('customFileName').value;
    customContentSubject = document.getElementById('customContentSubject').value;
    customLocation       = document.getElementById('customContentSubject').value;
    customContentFormat  = document.getElementById('customContentDisplay').value;
    // Make the request
    var d = new Date()
    var t = d.getTime()



    var url = '/admin/ajax/browser?searchType=custom&subject=' + encodeURIComponent(customContentSubject) + '&ts=' + 
              t + '&type=' + customContentType + '&format='+customContentFormat;
alert(url);
    var callbackFun = 
        { 
            success: function(o) {customSearchReturn(o)}, 
            failure: function(o) {customSearchReturn(o)}
        }; 
    
    var request = YAHOO.util.Connect.asyncRequest('GET', url, callbackFun);        
}
var customSearchBox;

function customSearchReturn(o) {


    if (!document.getElementById(customSearchBox)) {
        var box = new ContentBox('custombox', (MSJS.dd.newGroupID()));
        box.heading     = document.getElementById("customContentHeading").value;
        box.boxType        = 'custom';
        box.useHeading  = document.getElementById("customUseHeading").checked;
        box.theme       = document.getElementById("customContentTheme").value;
        box.generateBox();
        currentPreviewObject = box;
    }
    
    document.getElementById('availableContentHeader').innerHTML = 'Available Content';
    document.getElementById('ddSubjects').style.display = 'none';
    document.getElementById('ddSearchResults').style.display = '';
    
    var rs = eval(o.responseText);
    var box = rs[0];

    box = document.getElementById('ddSearchResults');
    /**
     * Response codes:
     * 200: Ok
     * 404: Subject not found
     * 405: No content found under subject
     */
    if (rs[1] != 200) {
        this.hasContent = false;
        var message;
        switch (rs[1]) {
        case 404:
            message = 'Invalid subject entered';
        break;
        case 405:
            message = 'No contents with given type were found under given subject';
        break;
        }
        var p = document.createElement('p');
        p.className = 'errorBox';
        p.innerHTML = message;
        box.innerHTML = '';
        box.appendChild(p);
        return;
    }
    box.innerHTML = '';
    var format = document.getElementById('customContentDisplay').value;
    for (i=2; i<rs.length; i++) {
        mdiv = document.createElement('div');
        mdiv.className = 'addHandle';
        mdiv.id = 'customblob' + (MSJS.dd.groups.length + 1);

        sdiv = document.createElement('div');
        sdiv.className = 'content';
        
        ecdiv = document.createElement('div');
        ecdiv.className = 'enterblob';
        ecdiv.id = 'enterblob' + mdiv.id;
        ecdiv.style.height = '2px';
        ecdiv.innerHTML = '&nbsp;';
        dt = document.createElement('dt');
        dt.id = 'grpDT' + box.id + i;
        dt.innerHTML = '<a href="'+rs[i].link+'">'+rs[i].title+'</a>';
        if (format != 2) {
            dd = document.createElement('dd');
            dd.id = 'grpDD' + box.id + i;
            dd.innerHTML = (format==1)?rs[i].contents:rs[i].summary;
            dt.appendChild(dd);
        }

        b = new contentBlob();
        b.id = mdiv.id;
        b.cmsID = rs[i].id;
        b.format = format;

        MSJS.dd.blobs.push(b);
        //sdiv.appendChild(dt);
        sdiv.innerHTML = rs[i].html;
        mdiv.appendChild(sdiv);
        mdiv.appendChild(ecdiv);
        box.appendChild(mdiv);
        MSJS.dd.addGroup(mdiv.id, 2);
    }
        MSJS.dd.initIP();
}

/**
 * Inserts a content box in the requested position
 *
 * @param htmlNode div    An HTML node representing the DIV to be inserted
 * @return void
 */
function insertBox (div) {    

  //allow dash after untill content has been inserted
  if(document.getElementById('dashwrap'))
      document.getElementById('dashwrap').style.display = '';


    hideTiny();
    var editMode = false;
    if (document.getElementById('editMode').value == 'true') {
        editMode = true;
    }
    /*if (document.getElementById('ddcType').value == 'HTML') {
        var nbox = new ContentBox('nbox');
        nbox.boxType = 'HTML';
        nbox.generateBox();
        currentPreviewObject = nbox;
        currentPreviewObject.hasContent = true;
    }*/
    if (!div && document.getElementById('ddcType').value == 'custom' && currentPreviewObject) {
        insertPosition = customInsertPosition;
        customSearchBox = '';
        currentPreviewObject.hasContent = true;
    }
    if (!div && !currentPreviewObject) {
        if (document.getElementById('ddcType').value == 'custom') {
            alert('Please search for content before inserting a custom content box');
        } else {
            alert('Please use the preview button before adding content');
        }
        return;
    }
    if (currentPreviewObject && !currentPreviewObject.hasContent && !document.getElementById('ddcType').value == 'custom') {
        var cnf = confirm('Are you sure you want to insert a blank content block?');
        if (!cnf) {
            return;
        }
    }
    if (!div) {
        var div = currentPreviewObject.HTML;
        var fromPreview = true;
    }
    if (insertPosition) {
        if (insertPosition.id.indexOf('sub')>-1) {
            insertPosition = document.getElementById(insertPosition.id+'b');
            arr = new Array();
            if (insertPosition.childNodes.length > 0) {
                insertPosition.insertBefore(div, insertPosition.childNodes[0]);
            } else {
                insertPosition.appendChild(div);
            }
        } else {
            if (insertPosition.id.indexOf('customblob')>-1) {
                var parent = insertPosition.parentNode;
            } else {
                var parent = insertPosition.parentNode;
            }
            pos = parent.childNodes.length;
            for (i=0; i<parent.childNodes.length; i++) {
                if (parent.childNodes[i] == insertPosition) {
                    pos = i;
                    break;
                }
            }
            if(pos+1 == parent.childNodes.length) {
                parent.appendChild(div);
            } else {
                parent.insertBefore(div, parent.childNodes[pos+1]);
            }
        }
        /*if (document.getElementById('ddcType').value == 'HTMLOO') {
            MSJS.dd.addGroup(nbox.id);
            grp = MSJS.dd.groups[MSJS.dd.groups.length-1];
            grp.setHandleElId(nbox.handleId);
            grp.invalidHandleClasses.push('ddnhandle');
            MSJS.dd.initIP();
            popInsertion();
            tinyMCE.init({
                mode : "none",
                editor_selector : "simpleEditor",
                editor_deselector : "richEditor",
                theme : "simple"
            });
            document.getElementById('ddcType').value = '';
            document.getElementById('editMode').value = '';
            currentPreviewObject = '';
            customInsertPosition = '';
            insertPosition = '';
        } else */
        if (fromPreview) {
            document.getElementById(currentPreviewObject.handleId).style.display = '';
            document.getElementById(currentPreviewObject.enterId).style.display = '';
            if (document.getElementById('editMode').value != 'true') {
                MSJS.dd.addGroup(currentPreviewObject.id);
                grp = MSJS.dd.groups[MSJS.dd.groups.length-1];
                if (currentPreviewObject.handleId) {
                    grp.setHandleElId(currentPreviewObject.handleId);
                }
                grp.invalidHandleClasses.push('ddnhandle');
                MSJS.dd.initIP();
                if (MSJS.dd.currentViewID) {
                    currentPreviewObject.groupView = MSJS.dd.currentViewID;
                }
                MSJS.dd.boxes.push(currentPreviewObject);
            }
            popInsertion();
            document.getElementById('ddcType').value = '';
            document.getElementById('editMode').value = '';
            document.getElementById('heading').style.display = '';
            currentPreviewObject = '';
            customInsertPosition = '';
            insertPosition = '';
        }
    }
}

/**
 * Popup content insertion box
 *
 * This function toggles the insertion box dialog declared
 * in MSJS.dd.IPPop.
 *
 * @param string caller   Instance of the caller (used to position
 *                        insertion box dialog.
 * @return void
 */
function popInsertion (caller) {
    var pop = document.getElementById("insertPopup");
    if (pop.style.display == 'none') {
        if (caller) {
            insertPosition = caller.parentNode;
        }
        if (document.getElementById('editMode').value == 'true') {
            document.getElementById('cbInsertButton').value = '  Edit  ';
            document.getElementById('cbCancelButton').style.display = 'none';
        }
        pop.style.display = '';
    } else {
        pop.style.display = 'none';
        document.getElementById('cbInsertButton').value = 'Insert';
        document.getElementById('cbCancelButton').style.display = '';
    }
}

/**
 * Remove content box
 *
 * @param string caller   Instance of the caller (used to remove the box).
 * @return void
 */
function removeBox(caller, confirmed) {


    //alert("remove caller: "+caller);

    if (!confirmed) {
        var sure = confirm('Are you sure you want to remove this content box?');
        if (!sure) {
            return;
        }
    }
    saveLayout();
    for (i=0; i<MSJS.dd.groups.length; i++){
        if (MSJS.dd.groups[i].id == caller) {
            MSJS.dd.groups[i].unreg();
            // Remove TinyMCE (if any)
            var tinyArea = document.getElementById('txt'+caller);
            if (tinyArea) {
                tinyMCE.execCommand('mceRemoveControl', true, tinyArea.id);
            }

            var children = document.getElementById(caller).childNodes;
            var enterToRemove;
            for (j in children) {
                if (children[j].id && children[j].id.indexOf('enter') > -1) {
                    enterToRemove = children[j].id;
                }
            }
            document.getElementById(caller).parentNode.removeChild(document.getElementById(caller));
            MSJS.dd.groups.splice(i,1);
            for (j in MSJS.dd.columns) {
                if(MSJS.dd.columns[j] == enterToRemove) {
                    MSJS.dd.columns.splice(j, 1);
                    break;
                }
            }

        }
    }
    var blobsToRemove;
    for (i=0; i<MSJS.dd.boxes.length; i++){//alert('@');
        if (MSJS.dd.boxes[i].id == caller) {//alert('#'+MSJS.dd.boxes[i].id);
            if(MSJS.dd.boxes[i].blobs) {//alert('*');
                blobsToRemove = new Array();
                blobsToRemove = MSJS.dd.boxes[i].blobs;
            }
            MSJS.dd.boxes.splice(i,1);
            break;
        }
    }
    if (blobsToRemove) {
        var prot = 0; // Make sure we don't go in an infinite loop
        while (blobsToRemove.length > 0 && prot < 100) {
            for (i=0; i<MSJS.dd.groups.length; i++){
                if (MSJS.dd.groups[i].id == blobsToRemove[0].id) {
                    //MSJS.dd.groups.splice(i,1);
                    MSJS.dd.groups[i] = false;
                    blobsToRemove.splice(0,1);
                    break;
                }
            }
            prot++;
        }
    }
}

/**
 * Edit a content box
 *
 * @param grpName  Group ID to edit
 * @return void
 */
function editBox(grpName) {
  
  // hide dashboard untill content has been inserted
  if(document.getElementById('dashwrap'))
      document.getElementById('dashwrap').style.display = 'none';

    var box;
    for (i=0; i<MSJS.dd.boxes.length; i++) {
        if (MSJS.dd.boxes[i].id == grpName) {
            box = MSJS.dd.boxes[i];
            break;
        }
    }
    if (box) {
        changeTab(box.boxType);
        document.getElementById('ddcType').value = box.boxType;
        if (box.boxType == 'custom') {
            document.getElementById('heading').style.display = 'none';
            document.getElementById('editMode').value = 'true';
            document.getElementById('customContentHeading').value = box.heading;
            document.getElementById('customUseHeading').checked =   box.useHeading;
            document.getElementById('customContentType').value =    box.type;
            document.getElementById('customContentDisplay').value = box.format;
            document.getElementById('customContentTheme').value =   box.theme;
            popInsertion();

            currentPreviewObject = box;
            currentPreviewObject.HTML = box.getEl();
            customSearchBox = box.id;
            customInsertPosition = getEditPosition(box.getEl());
            document.getElementById(box.handleId).style.display = 'none';
            document.getElementById(box.enterId).style.display = 'none';
            document.getElementById('previewContentArea').innerHTML = '';
            document.getElementById('previewContentArea').appendChild(box.getEl());
            
            
        } else if (box.boxType == 'automatic') {
            document.getElementById('heading').style.display = 'none';
            document.getElementById('editMode').value = 'true';
            document.getElementById('automaticContentHeading').value = box.heading;
            document.getElementById('automaticUseHeading').checked =   box.useHeading;
            document.getElementById('automaticContentType').value =    box.type;
            document.getElementById('automaticContentCount').value =   box.count;
            document.getElementById('automaticContentDisplay').value = box.format;
            document.getElementById('automaticContentSubject').value = box.subject;
            document.getElementById('automaticContentTheme').value =   box.theme;
            popInsertion();
            currentPreviewObject = box;
            currentPreviewObject.HTML = box.getEl();
            insertPosition = getEditPosition(box.getEl());
            document.getElementById(box.handleId).style.display = 'none';
            document.getElementById(box.enterId).style.display = 'none';
            document.getElementById('previewContentArea').innerHTML = '';
            document.getElementById('previewContentArea').appendChild(box.getEl());
            document.getElementById('previewContent').style.display = '';
        } else if (box.boxType == 'HTML') {
            document.getElementById('heading').style.display = 'none';
            document.getElementById('editMode').value = 'true';
            document.getElementById('HTMLContentHeading').value = box.heading;
            document.getElementById('HTMLUseHeading').checked =   box.useHeading;
            document.getElementById('HTMLContentTheme').value =   box.theme;
            currentPreviewObject = box;
            currentPreviewObject.HTML = box.getEl();
            insertPosition = getEditPosition(box.getEl());
            document.getElementById(box.handleId).style.display = 'none';
            document.getElementById(box.enterId).style.display = 'none';
            document.getElementById('previewContentArea').innerHTML = '';
            document.getElementById('previewContentArea').appendChild(box.getEl());
            document.getElementById('previewContent').style.display = '';
            popInsertion();
        }
    }
}

function getEditPosition(obj) {
    if (obj.parentNode.id.indexOf('sub') > - 1) {
        var parent = obj.parentNode;
        var children = new Array();
        for (i=0; i<parent.childNodes.length; i++) {
            if (parent.childNodes[i].id) {
                children.push(parent.childNodes[i]);
            }
        }
        if (children.length > 1) {
            for (i=0; i<children.length; i++) {
                if (children[i].id == obj.id) {
                    if (i == 0) {
                        return parent.parentNode;
                    } else {
                        return children[i-1];
                    }
                }
            }
        } else {
            return parent.parentNode;
        }
    }
}

/*****

  Retrieves content from 
    simpleEditorgrpN.innerHTML, simpleEditorgrpN.value 
    or simpleEditorN.optionM.innerHTML 

*/
function getBoxContent(x){

    sTBoxContent = "";

    //alert(MSJS.dd.boxes[x].id);
/*
    if(document.getElementById('simpleEditorgrp2')){
        alert('simpleEditorgrp2 ' + document.getElementById('simpleEditorgrp2').innerHTML);
        alert(MSJS.dd.boxes[x].id);
        alert(MSJS.dd.boxes[x]);
    } 
*/
    if(MSJS.dd.boxes[x].id!="pageOptions"){
        key = "simpleEditor"+MSJS.dd.boxes[x].id;
        if(document.getElementById(key) ){
            //alert("divEle!!");
            sTBoxContent += document.getElementById(key).innerHTML;
        }else{
            var eles = document.getElementsByName(key);
            if( eles.length > 0){
                if(eles[0].value)
                    sTBoxContent += eles[0].value;  
            }
            //alert("check key="+key + "("+eles.length+")=" + sTBoxContent);
        }    
        if(sTBoxContent == ""){
            name = "";
            name += MSJS.dd.boxes[x].id;
            name = name.replace('grp','');
            ekey = "simpleEditor" + name;

            if(document.getElementById(ekey)){
                sTBoxContent = document.getElementById(ekey).innerHTML;
                //alert(ekey + "=" + sTBoxContent);
            }
        }
    }

    return sTBoxContent;
}



/**
 * Save content boxes layout
 *
 * Saves the content boxes into a JSON string and saves it in input with "layout" ID
 *
 * @param void
 * @return void
 */
function saveLayout() {



    var subs = new Array();
    var r = new RegExp("^sub[0-9]*$");
    for (i=0; i<MSJS.dd.columns.length; i++) {
        if (document.getElementById(MSJS.dd.columns[i])) {
            var snode = document.getElementById(MSJS.dd.columns[i]).parentNode;
            if (snode.id.indexOf('sub')>-1) {
                if(r.exec(snode.id)) {
                    subs.push(snode.id);
                }
            }
        }
    }
    // Save our current options
    var options = new ContentBox();
    options.id = 'pageOptions';
    options.boxType    = 'options';
    if (typeof(window['scm']) != 'undefined') {
        options.scm = scm.save();
    }
    options.templateStyle = document.getElementById('templateStyle').value;
    MSJS.dd.boxes.push(options);
    var layout = '['; // Place holder for layout JSON string
    for (i=0; i<subs.length; i++) {
        var sub = document.getElementById(subs[i]+'b');
        var children = sub.childNodes;
        var groups = new Array();

        // Save page options first
        if (i==0)
            groups[0] = 'pageOptions';
        
        for (j=0; j<children.length; j++) {
            if (children[j].id && children[j].id.indexOf('grp') >-1) {
                groups.push(children[j].id);
            }
        }

        var bPageOptions = true;
        var sTBoxContent = "";
        var sEditorContent = "";
        layout += '{"' + subs[i] + '":['; 
        for (j=0; j<groups.length; j++) {
        

            for (x=0; x<MSJS.dd.boxes.length; x++) {
                if (groups[j] == MSJS.dd.boxes[x].id) {

                    sTBoxContent = getBoxContent(x);


                    if( 
                        (
                           MSJS.dd.boxes[x].boxType != 'HTML' 
                        || (MSJS.dd.boxes[x].boxType == 'HTML' && MSJS.dd.boxes[x].textareaContentsID)
                        )

                        &&

                        (
                           MSJS.dd.boxes[x].id!="pageOptions"
                        || (MSJS.dd.boxes[x].id=="pageOptions" && bPageOptions != true) 
                        )  
                        
                    ){


                        if(MSJS.dd.boxes[x].id=="pageOptions")
                             bPageOptions = true;
    
                        layout += '{'; 
                        layout += '"templateStyle":"'+document.getElementById('templateStyle').value+'",';
                        layout += '"boxType":"'+MSJS.dd.boxes[x].boxType+'",';
                        layout += '"name":"'+MSJS.dd.boxes[x].name+'",';
                        if (MSJS.dd.boxes[x].theme && MSJS.dd.boxes[x].theme.indexOf('newWindow')) {
                            MSJS.dd.boxes[x].theme.replace(/newWindow/,"");
                            layout += '"newWindow":true,';
                        }
                        layout += '"theme":"'+MSJS.dd.boxes[x].theme+'",';
                        layout += '"useHeading":'+((MSJS.dd.boxes[x].useHeading)?'true':'false')+',';
                        if (MSJS.dd.boxes[x].heading != "Please enter a heading or uncheck the \"Use Heading\" box")
                        layout += '"heading":"'+MSJS.dd.boxes[x].heading+'",';
                        layout += '"type":"'+MSJS.dd.boxes[x].type+'",';
                        layout += '"count":"'+MSJS.dd.boxes[x].count+'",';
                        layout += '"format":"'+MSJS.dd.boxes[x].format+'",';
                        layout += '"subject":"'+MSJS.dd.boxes[x].subject+'",';
                        layout += '"id":"'+MSJS.dd.boxes[x].id+'",';
                        layout += '"contentId":"'+MSJS.dd.boxes[x].contentId+'",';
                        layout += '"handleId":"'+MSJS.dd.boxes[x].handleId+'",';
                        layout += '"headerId":"'+MSJS.dd.boxes[x].headerId+'",';
                        layout += '"fileName":"'+MSJS.dd.boxes[x].fileName+'",';
                        layout += '"location":"'+MSJS.dd.boxes[x].location+'",';
                        layout += '"contents":"'+MSJS.dd.boxes[x].contents+'",';
                        layout += '"parent":"'+MSJS.dd.boxes[x].parent+'",';
                        layout += '"rendered":"'+MSJS.dd.boxes[x].rendered+'",';
                        layout += '"isSlideShow":"'+MSJS.dd.boxes[x].isSlideShow+'",';
                        layout += '"photoSize":"'+MSJS.dd.boxes[x].photoSize+'",';
                        layout += '"slideShowSpeed":"'+MSJS.dd.boxes[x].slideShowSpeed+'",';
                        if (MSJS.dd.boxes[x].scm)
                            layout += '"scm":"'+ MSJS.dd.boxes[x].scm +'",';
                        if (MSJS.dd.boxes[x].group && MSJS.dd.boxes[x].group != 0)
                            layout += '"group":"'+ MSJS.dd.boxes[x].group +'",';
                        if (MSJS.dd.boxes[x].groupView && MSJS.dd.boxes[x].groupView != 0)
                            layout += '"groupView":"'+ MSJS.dd.boxes[x].groupView +'",';
                        layout += '"slideShowDesc":"'+MSJS.dd.boxes[x].slideShowDesc+'"';
    

                        if (MSJS.dd.boxes[x].boxType == 'module') {
                            layout += ',"entryPoint":"'+MSJS.dd.boxes[x].entryPoint+'"';
                        }
                        if (MSJS.dd.boxes[x].boxType == 'custom') {
                            var box = document.getElementById(MSJS.dd.boxes[x].id);
                            var bblock;
                            for (z in box.childNodes) {
                                if (box.childNodes[z].id.indexOf('contentBlockgrp') > -1) {
                                    bblock = box.childNodes[z];
                                    break;
                                }
                            }
                            var blobs = new Array();
                            for (z=0; z<bblock.childNodes.length; z++) {
                                for (a in MSJS.dd.blobs) {
                                    if (bblock.childNodes[z].id &&
                                       (MSJS.dd.blobs[a].id == bblock.childNodes[z].id)) {
                                        blobs.push(MSJS.dd.blobs[a]);
                                        break;
                                    }
                                }
                            }
                            if (blobs.length > 0) {
                                layout += ',"blobs":[';
                                layout +='{"id":"'+blobs[0].id+'",';
                                layout +='"cmsid":"'+blobs[0].cmsID+'",';
                                layout +='"format":"'+blobs[0].format+'"}';
                                for (z=1; z<blobs.length; z++) {
                                    layout +=',{"id":"'+blobs[z].id+'",';
                                    layout +='"cmsid":"'+blobs[z].cmsID+'",';
                                    layout +='"format":"'+blobs[z].format+'"}';
                                }
                                layout += ']';
                                MSJS.dd.boxes[x].blobs = blobs;
                            }
                        }

                        //alert( "check: "+textareaContentsID);

                        if (MSJS.dd.boxes[x].boxType == 'HTML') {
                            var textareaContentsID = MSJS.dd.boxes[x].textareaContentsID;
                            layout += ',"textareaID":"'+MSJS.dd.boxes[x].textareaID+'"';
                            layout += ',"textareaContentsID":"'+MSJS.dd.boxes[x].textareaContentsID+'"';


                            if (document.getElementById(textareaContentsID)) {

                                layout += ',"textareaContents":"';

                                if(sTBoxContent !="") 
                                    layout += encodeURIComponent(sTBoxContent);
                                else
                                    layout += encodeURIComponent(document.getElementById(textareaContentsID).value);

                                layout += '"';
                            }
                        }

                        layout += '}';
                        if (j<groups.length-1) {
                            layout += ',';
                        }
                        
                    }
                }
            }
        }
        layout += ']}';
        if (i<subs.length-1) {
            layout += ',';
        }
    }
    layout += ']';

    //alert(layout);

    document.getElementById('layout').value = layout;
    // SCM Page views
    if (typeof(window['scm']) != 'undefined' && scm.pageGroups.length > 0) {
        try {
            document.getElementById('pageGroups').value = 
                                scm.pageGroups.join(',');
        } catch (err) {
            alert("Error while trying to save page wide groups.\n\n"+err.message);
        }
    }
}

function createNewContent(callerName) {
    var type = document.getElementById(callerName+'ContentType').value;
    var loc = '/admin/newResource/?type='+type;
    window.open(loc, type);
}

function showSlideShow(cancel) {
    if (cancel) {
        document.getElementById('slideShow').style.display = 'none';
        document.getElementById('regSlideShow').style.display = '';
        document.getElementById('customUseHeading').checked = true;
        toggleHeading(document.getElementById('customUseHeading'));
        updateSlideShow(true);
    } else {
        searchCustomContent();
        document.getElementById('slideShow').style.display = '';
        document.getElementById('regSlideShow').style.display = 'none';
        document.getElementById('customUseHeading').checked = false;
        toggleHeading(document.getElementById('customUseHeading'));
        updateSlideShow();
    }
}

function updateSlideShow(remove) {
    if(!currentPreviewObject) {
        return;
    }
    
    if (remove) {
        currentPreviewObject.isSlideShow = false;
    } else {
        currentPreviewObject.isSlideShow = true;
        currentPreviewObject.photoSize   = document.getElementById('photoSize').value;
        currentPreviewObject.slideShowSpeed = document.getElementById('slideShowSpeed').value;
        currentPreviewObject.slideShowDesc = document.getElementById('slideShowDesc').checked;
    }
}

function getModules() {
    if (modules) {
        return updateModules('i');
    }
    var d = new Date()
    var t = d.getTime()
    var url = '/admin/ajax/modules/?getModules=true&ts=' + t;
    var callbackFun = 
    { 
        success: function(o) {updateModules(o)}, 
        failure: function(o) {updateModules(o)}
    }; 
    var request = YAHOO.util.Connect.asyncRequest('GET', url, callbackFun);
}

function updateModules(o) {
    if (o != 'i') {
        var m = eval("eval("+o.responseText+");");
        if (m) {
            var html = '';
            for (i=0; i<m.length; i++) {
                html += '<div class="module"><a href="javascript:getModule(\''+m[i].entryPoint+'\');">'
                +m[i].name+'</a><p class="description">'+m[i].description+'</p></div>';
            }
            modules = html;
        }
    } else {
        var html = modules;
    }
    if (modules) {
        document.getElementById('modArea').innerHTML = html;
    }
}

function getModule(modURI) {
    var d = new Date()
    var t = d.getTime()
    var url = modURI + '?contentBrowser=true&admin=true&ts=' + t;
    var callbackFun = 
    { 
        success: function(o) {modulePreview(o)}, 
        failure: function(o) {modulePreview(o)}
    }; 
    var request = YAHOO.util.Connect.asyncRequest('GET', url, callbackFun);
}

function modulePreview(o) {
    document.getElementById('previewContent').style.display = '';
    var m = eval("eval("+o.responseText+");");

    if (m) {
        var box = new ContentBox('box', (MSJS.dd.newGroupID()));
        box.useHeading = false;
        box.type       = document.getElementById('automaticContentType').value;
        box.count      = document.getElementById('automaticContentCount').value;
        box.format     = document.getElementById('automaticContentDisplay').value;
        box.subject    = document.getElementById('automaticContentSubject').value;
        box.theme      = document.getElementById('automaticContentTheme').value;
        box.entryPoint = m.entryPoint;
        box.data       = m.data;
        box.boxType    = 'module';
        box.generateBox();
        currentPreviewObject = box;
        document.getElementById('previewContent').style.display = '';
        document.getElementById('previewContentArea').innerHTML = '';
        document.getElementById('previewContentArea').appendChild(box.HTML);
    }
}

