
// this file is built in to pixelsilk
// with a url like http://lonestar.smartz.com/api.js or http://localhost/Impact3/api.js

/* 
Functions in the api:

  * pixelsilk.renderSkin(skin, callback)
    Renders the specified text as a skin.
    skin: Some text to render.
    callback: Function called when the results are ready.  Should take a single parameter called 
        html.
    Example: 
        impact.renderSkin("[[Menu1]]", function(html) {
            document.getElementById("menu").innerHTML = html;
        });

  * pixelsilk.getContent(path, callback)
    Gets a section's content
    path: Path to the section.  / is the home page.
    callback: Function called when the results are ready.  Should take a single parameter called 
        html.
    Example: 
        impact.getContent("/aboutus/", function(html) {
            document.getElementById("content").innerHTML = html;
        });

  * pixelsilk.setContent(path, value, callback)
    Sets a section's content to a new value and returns the rendered content.
    path: Path to the section.  / is the home page.
    value: The new content.
    callback: Function called when the results are ready.  Should take a single parameter called 
        html.
    Example: 
        impact.setContent("/", function(html) {
            document.getElementById("content").innerHTML = html;
        });

  * pixelsilk.getAlbumContents(type, albumName, callback)
    Gets a list of all the files in an album.
    type: type of library: Image, Media, System, or Binary.
    albumName: name of the album.
    callback: Function called when the results are ready.  Should take a single parameter called 
        files that is an array of file objects.

*/

if (!window.pixelsilk) {

var pixelsilk = function() {

    var nextId = 1;
    var apiWebboxName=  "";

    // Methods here are not globally accessible.
    
    var startHandler, endHandler, errorHandler;
    function start() {
        if (typeof(startHandler) === 'function') {
            startHandler();
        }
    }

    function end() {
        if (typeof(endHandler) === 'function') {
            endHandler();
        }
    }

    function error(e) {
        if (typeof(errorHandler) === 'function') {
            errorHandler(e);
        }
    }

    function ajax(url, data, callback) {
        start();
        var eventCallback = function(data) {
            end();
            if (callback) {
                callback(data);
            }
        };
        try {
            ajaxXhr(url, data, eventCallback);
        } catch(e) {
            error(e);
            ajaxScriptTag(url, data, eventCallback);
        }
    }

    function ajaxXhr(url, data, callback) {
        var request = window.XMLHttpRequest ?
            new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');
        request.open('POST', url, true);
        request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
        request.onreadystatechange = function() {
             if (request.readyState === 4 && request.status === 200 && ( request.responseText ||  request.responseText === "" ) ) {
                if (data.output === 'json') {
                    eval("var result = " + request.responseText);
                } else {
                    var result = request.responseText;
                }
                if(callback !== null) {
                    callback(result);
                }
            }
            else if (request.readyState === 4 && request.status !== 200) {
                error(request.responseText);
            }
        };
        var body = objectToQuery(data);
        //request.setRequestHeader('Content-Length', body.length);
        request.send(body);
    }

    function ajaxScriptTag(url, data, callback) {
        var id = nextId++;
        var callbackName = setupCallback(id, callback);
        var query = objectToQuery(data);
        var script = makeScriptTag(url, query, callbackName, id);

        var head = document.getElementsByTagName('head')[0];
        head.appendChild(script);
    }

    function setupCallback(id, callback) {
        // Generate a name because the callback needs to be globally accessable: impact.callback1()
        var callbackName = 'callback' + id;

        pixelsilk[callbackName] = function(result) {
            // remove the callback wrapper
            pixelsilk[callbackName] = null;

            // remove the script tag
            var script = document.getElementById('impactapi' + id);
            if (script) {
                script.parentNode.removeChild(script);
            }

            // call the real callback
            callback(result);
        };

        // return the name;
        return 'impact.' + callbackName;
    }

    function objectToQuery(data) {
        var query = '';
        for (var key in data) {
            query += key + '=' + encodeURIComponent(data[key]) + '&';
        }
        return query.substr(0, query.length-1);
    }

    function makeScriptTag(url, query, callback, id) {
        var script = document.createElement('script');
        script.type = 'text/javascript';
        var src = url + '?' + query + '&output=json&callback=' + callback;
        if (src.length > 2000) {
            throw "Url length is over 2000 characters, not creating script tag";
        }
        script.src = src;
        script.id = 'impactapi' + id;
        script.className = 'impactapi';
        return script;
    }

    // Return just the 'public' functions.
    return {

        start: function(handler) { startHandler = handler; },
        end: function(handler) { endHandler = handler; },
        error: function(handler) { errorHandler = handler; },

        renderSkin: function(skin, callback) {
            var url = pixelsilk.urlBase + 'renderSkin';
            var data = {'domain':pixelsilk.domain, 'skin':skin};
            ajax(url, data, callback);
        },

        getContent: function(path , callback) {
            var url = pixelsilk.urlBase + 'getContent';
            var data = {domain:pixelsilk.domain, path: path};
            ajax(url, data, callback);
        },

        setContent: function(path, value, callback) {
            var url = pixelsilk.urlBase + 'setContent';
            var data = {'domain':pixelsilk.domain, 'path':path, 'value':value};
            ajax(url, data, callback);
        },

        getAlbums: function(type, callback) {
            var url = pixelsilk.urlBase + 'getAlbums';
            var data = {'domain':pixelsilk.domain, 'type':type, 'output':'json'};
            ajax(url, data, callback);
        },

        getAlbumContents: function(type, albumName, callback) {
            var url = pixelsilk.urlBase + 'getAlbumContents';
            var data = {'domain':pixelsilk.domain, 'type':type, 'albumName':albumName, 'output':'json'};
            ajax(url, data, callback);
        },
        
        saveAlbum: function(type, albumName, callback) {
            var url = pixelsilk.urlBase + 'saveAlbum';
            var data = {'domain':pixelsilk.domain, 'type':type, 'albumName':albumName, 'output':'json'};
            ajax(url, data, callback);
        },
        
        deleteFile: function(type, filename, albumName, callback) {
            var url = pixelsilk.urlBase + 'deleteFile';
            var data = {'domain':pixelsilk.domain, 'type':type, 'filename':filename, 'albumName':albumName, 'output':'json'};
            ajax(url, data, callback);
        },

        deleteItem: function(itemId, deleteMode, callback) {
            var url = pixelsilk.urlBase + 'deleteItem';
            var data = {'itemId':itemId, 'deleteMode':deleteMode};
            ajax(url, data, callback);
        },

        setWebboxContent: function(webboxName, value, path, callback) {
            var url = pixelsilk.urlBase + 'setWebboxContent';
            apiWebboxName = webboxName;
            var data = {'webboxName':webboxName, 'value':value, 'path': path };
            ajax(url, data, callback);
        }, 

        getAllSections: function(callback) {
            var url = pixelsilk.urlBase + 'getAllSections';
            var data = {'domain':pixelsilk.domain,'output':'json'};
            ajax(url, data, callback);
        },

        getSections: function(parentId, callback) {
            var url = pixelsilk.urlBase + 'getSections';
            var data = {'parentId':parentId,'domain':pixelsilk.domain,'output':'json'};
            ajax(url, data, callback);
        },

        newSection: function(callback) {
            var url = pixelsilk.urlBase + 'newSection';
            var data = {'domain':pixelsilk.domain,'output':'json'};
            ajax(url, data, callback);
        },

        getSection: function(id, callback) {
            var url = pixelsilk.urlBase + 'getSection';
            var data = {'id':id,'domain':pixelsilk.domain,'output':'json'};
            ajax(url, data, callback);
        },

        updateSection: function(data, callback, errorCallback) {
            var url = pixelsilk.urlBase + 'updateSection';
            data.domain = pixelsilk.domain;
            data.output = 'json';
            ajax(url, data, callback, errorCallback);
        },
        
        addSection: function(data, callback, errorCallback) {
            var url = pixelsilk.urlBase + 'addSection';
            data.domain = pixelsilk.domain;
            data.output = 'json';
            ajax(url, data, callback, errorCallback);
        },
        
        moveSectionMakeChild: function(childId, parentId, callback) {
            var url = pixelsilk.urlBase + 'moveSectionMakeChild';
            var data = {'domain':pixelsilk.domain,'childId':childId,'parentId':parentId};
            ajax(url, data, callback);
        },
        
        moveSectionInsertBefore: function(sectionToMoveId, sectionToInsertBeforeId, callback) {
            var url = pixelsilk.urlBase + 'moveSectionInsertBefore';
            var data = {'domain':pixelsilk.domain,'sectionToMoveId':sectionToMoveId,
                'sectionToInsertBeforeId':sectionToInsertBeforeId};
            ajax(url, data, callback);
        },
        
        disableSection: function(sectionPath, callback) {
            var url = pixelsilk.urlBase + 'disableSection';
            var data = {'domain':pixelsilk.domain,'sectionPath':sectionPath};
            ajax(url, data, callback);
        },

        enableSection: function(sectionPath, enabled, callback) {
            var url = pixelsilk.urlBase + 'enableSection';
            var data = {'domain':pixelsilk.domain,'sectionPath':sectionPath,'enabled':enabled};
            ajax(url, data, callback);
        },

        enableSectionById: function(sectionId, enabled, callback) {
            var url = pixelsilk.urlBase + 'enableSectionById';
            var data = {'domain':pixelsilk.domain,'sectionId':sectionId,'enabled':enabled};
            ajax(url, data, callback);
        },

        showSection: function(sectionPath, show, callback) {
            var url = pixelsilk.urlBase + 'showSection';
            var data = {'domain':pixelsilk.domain,'sectionPath':sectionPath,'show':show};
            ajax(url, data, callback);
        },

        showSectionInMenu: function(sectionId, show, callback) {
            var url = pixelsilk.urlBase + 'showSectionInMenu';
            var data = {'domain':pixelsilk.domain,'sectionId':sectionId,'show':show};
            ajax(url, data, callback);
        },

        showSectionInSitemap: function(sectionId, show, callback) {
            var url = pixelsilk.urlBase + 'showSectionInSitemap';
            var data = {'domain':pixelsilk.domain,'sectionId':sectionId,'show':show};
            ajax(url, data, callback);
        },

        deleteSection: function(sectionPath, callback) {
            var url = pixelsilk.urlBase + 'deleteSection';
            var data = {'domain':pixelsilk.domain,'sectionPath':sectionPath};
            ajax(url, data, callback);
        },

        deleteSectionById: function(sectionId, callback) {
            var url = pixelsilk.urlBase + 'deleteSectionById';
            var data = {'domain':pixelsilk.domain,'sectionId':sectionId};
            ajax(url, data, callback);
        },

        getSectionsUrl: function(sectionId, callback) {
            var url = pixelsilk.urlBase + 'getSectionsUrl';
            var data = {'domain':pixelsilk.domain,'sectionId':sectionId};
            ajax(url, data, callback);
        },

        getPotentialUrl: function(sectionId, urlMode, pathName, extension, rewriteUrl, toLowerCase, callback) {
            var url = pixelsilk.urlBase + 'getPotentialUrl';
            var data = {'domain':pixelsilk.domain,'sectionId':sectionId,'urlMode':urlMode,
                'pathName':pathName,'extension':extension,'rewriteUrl':rewriteUrl,'toLowerCase':toLowerCase};
            ajax(url, data, callback);
        },

       getWebboxContent: function(webboxName, path , callback) {
            var url = pixelsilk.urlBase + 'getWebboxContent';
            var data = {'webboxName':webboxName, domain:pixelsilk.domain, path: path};
            ajax(url, data, callback);
        },

       getListItems: function(path, sort, filter, pagesize, page, callback) {
            var url = pixelsilk.urlBase + 'getListItems';
            var data = {'path':path, 'sort':sort, 'filter': filter, 'pagesize': pagesize, 'page' : page, 'output':'json'};
            ajax(url, data, callback);
        },

        getSkins: function(sectionId, callback) {
            var url = pixelsilk.urlBase + 'getSkins';
            var data = {'sectionId':sectionId,'domain':pixelsilk.domain,'output':'json'};
            ajax(url, data, callback);
        },

        getTypeSkins: function(sectionId, callback) {
            var url = pixelsilk.urlBase + 'getTypeSkins';
            var data = {'sectionId':sectionId,'domain':pixelsilk.domain,'output':'json'};
            ajax(url, data, callback);
        },

        getControlSkins: function(controlId, callback){
            var url = pixelsilk.urlBase + 'getControlSkins';
            var data = {'controlId':controlId,'domain':pixelsilk.domain,'output':'json'};
            ajax(url, data, callback);
        },
        
        getPageTypeSkins: function(pageTypeId, callback) {
            var url = pixelsilk.urlBase + 'getPageTypeSkins';
            var data = {'pageTypeId':pageTypeId,'domain':pixelsilk.domain,'output':'json'};
            ajax(url, data, callback);
        },

        getLayoutSkins: function(callback) {
            var url = pixelsilk.urlBase + 'getLayoutSkins';
            var data = {'domain':pixelsilk.domain,'output':'json'};
            ajax(url, data, callback);
        },

        createNewSectionSkin: function(sectionId, callback) {
            var url = pixelsilk.urlBase + 'createNewSectionSkin';
            var data = {'sectionId':sectionId,'domain':pixelsilk.domain,'output':'json'};
            ajax(url, data, callback);
        },

        deleteSectionSkin: function(sectionId, callback) {
            var url = pixelsilk.urlBase + 'deleteSectionSkin';
            var data = {'sectionId':sectionId,'domain':pixelsilk.domain,'output':'json'};
            ajax(url, data, callback);
        },

        updateSkins: function(data, callback) {
            var url = pixelsilk.urlBase + 'updateSkins';
            data.domain = pixelsilk.domain;
            data.output = 'json';
            ajax(url, data, callback);
        },

        getPageTypes: function(callback) {
            var url = pixelsilk.urlBase + 'getPageTypes';
            var data = {'domain':pixelsilk.domain,'output':'json'};
            ajax(url, data, callback);
        },

        addNewPageType: function(pageTypeName, baseId, image, callback) {
            var url = pixelsilk.urlBase + 'addNewPageType';
            var data = {'pageTypeName':pageTypeName,'baseId':baseId,'image':image,'domain':pixelsilk.domain,'output':'json'};
            ajax(url, data, callback);
        },

        deletePageType: function(pageTypeId, callback) {
            var url = pixelsilk.urlBase + 'deletePageType';
            var data = {'pageTypeId':pageTypeId,'domain':pixelsilk.domain,'output':'json'};
            ajax(url, data, callback);
        },

        getPageTypeFields: function(pageTypeId, callback) {
            var url = pixelsilk.urlBase + 'getPageTypeFields';
            var data = {'pageTypeId':pageTypeId,'domain':pixelsilk.domain,'output':'json'};
            ajax(url, data, callback);
        },

        checkValidNewPageTypeField: function(pageTypeId, fieldName, callback) {
            var url = pixelsilk.urlBase + 'checkValidNewPageTypeField';
            var data = {'pageTypeId':pageTypeId,'fieldName':fieldName,'domain':pixelsilk.domain,'output':'json'};
            ajax(url, data, callback);
        },
        
        addPageTypeField: function(pageTypeId, fieldName, fieldType, callback) {
            var url = pixelsilk.urlBase + 'addPageTypeField';
            var data = {'pageTypeId':pageTypeId,'fieldName':fieldName,'fieldType':fieldType,'domain':pixelsilk.domain,'output':'json'};
            ajax(url, data, callback);
        },

        deletePageTypeField: function(pageTypeId, fieldId, callback) {
            var url = pixelsilk.urlBase + 'deletePageTypeField';
            var data = {'pageTypeId':pageTypeId,'fieldId':fieldId,'domain':pixelsilk.domain,'output':'json'};
            ajax(url, data, callback);
        },

        updatePageTypeField: function(pageTypeId, fieldId, json, callback) {
            var url = pixelsilk.urlBase + 'updatePageTypeField';
            var data = {'pageTypeId':pageTypeId,'fieldId':fieldId,'json':json,'domain':pixelsilk.domain,'output':'json'};
            ajax(url, data, callback);
        },

        getPageTypeFieldValues: function(pageTypeId, fieldId, callback) {
            var url = pixelsilk.urlBase + 'getPageTypeFieldValues';
            var data = {'pageTypeId':pageTypeId,'fieldId':fieldId,'domain':pixelsilk.domain,'output':'json'};
            ajax(url, data, callback);
        },

        addPageTypeFieldValue: function(pageTypeId, fieldId, listValue, listText, callback) {
            var url = pixelsilk.urlBase + 'addPageTypeFieldValue';
            var data = {'pageTypeId':pageTypeId,'fieldId':fieldId,'listValue':listValue,'listText':listText,'domain':pixelsilk.domain,'output':'json'};
            ajax(url, data, callback);
        },

        updatePageTypeFieldValue: function(pageTypeId, fieldId, valueId, listValue, listText, callback) {
            var url = pixelsilk.urlBase + 'updatePageTypeFieldValue';
            var data = {'pageTypeId':pageTypeId,'fieldId':fieldId,'valueId':valueId,'listValue':listValue,'listText':listText,'domain':pixelsilk.domain,'output':'json'};
            ajax(url, data, callback);
        },

        movePageTypeFieldValueInsertBefore: function(pageTypeId, fieldId, valueToMoveId, valueToInsertBeforeId, callback) {
            var url = pixelsilk.urlBase + 'movePageTypeFieldValueInsertBefore';
            var data = {'pageTypeId':pageTypeId,'fieldId':fieldId,'valueToMoveId':valueToMoveId,'valueToInsertBeforeId':valueToInsertBeforeId,'domain':pixelsilk.domain,'output':'json'};
            ajax(url, data, callback);
        },

        deletePageTypeFieldValue: function(pageTypeId, fieldId, valueId, callback) {
            var url = pixelsilk.urlBase + 'deletePageTypeFieldValue';
            var data = {'pageTypeId':pageTypeId,'fieldId':fieldId,'valueId':valueId,'domain':pixelsilk.domain,'output':'json'};
            ajax(url, data, callback);
        },

        updatePageType: function(type, callback) {
            var url = pixelsilk.urlBase + 'updatePageType';
            var data = {'id':type.id,'name':type.name,'image':type.image,'domain':pixelsilk.domain,'output':'json'};
            ajax(url, data, callback);
        },

        getConfiguration: function(callback) {
            var url = pixelsilk.urlBase + 'getConfiguration';
            var data = {'domain':pixelsilk.domain,'output':'json'};
            ajax(url, data, callback);
        },

        updateConfig: function(oldKey, newKey, value, callback) {
            var url = pixelsilk.urlBase + 'updateConfig';
            var data = {'oldKey':oldKey,'newKey':newKey,'value':value,'domain':pixelsilk.domain,'output':'json'};
            ajax(url, data, callback);
        },
        
        updateRole: function(hiddenName, name, description, isHidden, isSystemRole, adminAccess, callback) {
            var url = pixelsilk.urlBase + 'updateRole';
            var data = {'hiddenName':hiddenName,  'name':name,'description':description,'isHidden':isHidden, 'isSystemRole':isSystemRole, 'adminAccess':adminAccess, 'domain':pixelsilk.domain,'output':'json'};
            ajax(url, data, callback);
        },
        
        updateUser: function(usersUsername, email, firstName, lastName, newPassword, roles, id, callback) {
            var url = pixelsilk.urlBase + 'updateUser';
            var data = {'usersUsername':usersUsername,'email':email,'firstName':firstName, 'lastName':lastName, 'newPassword':newPassword, 'roles':roles, 'id':id, 'domain':pixelsilk.domain,'output':'json'};
            ajax(url, data, callback);
        },
        
        addUser: function(theUserName, email, firstName, lastName, thePassword, roles, callback) {
            var url = pixelsilk.urlBase + 'addUser';
            var data = {'theUserName':theUserName,'email':email,'firstName':firstName, 'lastName':lastName, 'thePassword':thePassword, 'roles':roles,  'domain':pixelsilk.domain,'output':'json'};
            ajax(url, data, callback);
        },
        
        deleteUser: function(userId, callback) {
            var url = pixelsilk.urlBase + 'deleteUser';
            var data = {'userId':userId, 'domain':pixelsilk.domain,'output':'json'};
            ajax(url, data, callback);
        },
        
        addRole: function(name, description, isHidden, isSystemRole, adminAccess, callback) {
            var url = pixelsilk.urlBase + 'addRole';
            var data = {'name':name,'description':description,'isHidden':isHidden, 'isSystemRole':isSystemRole, 'adminAccess':adminAccess,  'domain':pixelsilk.domain,'output':'json'};
            ajax(url, data, callback);
        },
        
        deleteRole: function(roleName, callback) {
            var url = pixelsilk.urlBase + 'deleteRole';
            var data = {'roleName':roleName, 'domain':pixelsilk.domain,'output':'json'};
            ajax(url, data, callback);
        },

        getControls: function(callback) {
            var url = pixelsilk.urlBase + 'getControls';
            var data = {'domain':pixelsilk.domain,'output':'json'};
            ajax(url, data, callback);
        },
        
        getControlSecurity: function(id, callback) {
            var url = pixelsilk.urlBase + 'getControlSecurity';
            var data = {'id':id,'domain':pixelsilk.domain,'output':'json'};
            ajax(url, data, callback);
        },
        
        getControlTypes: function(callback) {
            var url = pixelsilk.urlBase + 'getControlTypes';
            var data = {'domain':pixelsilk.domain,'output':'json'};
            ajax(url, data, callback);
        },
        
        checkValidNewControl: function(name, type, callback) {
            var url = pixelsilk.urlBase + 'checkValidNewControl';
            var data = {'name':name,'type':type,'domain':pixelsilk.domain,'output':'json'};
            ajax(url, data, callback);
        },
        
        createControl: function(name, type, callback) {
            var url = pixelsilk.urlBase + 'createControl';
            var data = {'name':name,'type':type,'domain':pixelsilk.domain,'output':'json'};
            ajax(url, data, callback);
        },
        
        getControlProperties: function(id, callback) {
            var url = pixelsilk.urlBase + 'getControlProperties';
            var data = {'id':id,'domain':pixelsilk.domain,'output':'json'};
            ajax(url, data, callback);
        },
        
        updateControlProperties: function(id, clearProperties, json, permissions, callback) {
            var url = pixelsilk.urlBase + 'updateControlProperties';
            var data = {'id':id, 'clearProperties':clearProperties, 'json':json, 'permissions':permissions, 'domain':pixelsilk.domain,'output':'json'};
            ajax(url, data, callback);
        },
        
        deleteControl: function(controlId, callback) {
            var url = pixelsilk.urlBase + 'deleteControl';
            var data = {'controlId':controlId, 'domain':pixelsilk.domain,'output':'json'};
            ajax(url, data, callback);
        },
        
        getSiteListSections: function(callback) {
            var url = pixelsilk.urlBase + 'getSiteListSections';
            var data = {'domain':pixelsilk.domain,'output':'json'};
            ajax(url, data, callback);
        },
        
        getPlugins: function(callback) {
            var url = pixelsilk.urlBase + 'getPlugins';
            var data = {'domain':pixelsilk.domain,'output':'json'};
            ajax(url, data, callback);
        },
        
        getUsers: function(callback) {
            var url = pixelsilk.urlBase + 'getUsers';
            var data = {'domain':pixelsilk.domain,'output':'json'};
            ajax(url, data, callback);
        },
        
        getRoles: function(callback) {
            var url = pixelsilk.urlBase + 'getRoles';
            var data = {'domain':pixelsilk.domain,'output':'json'};
            ajax(url, data, callback);
        },
        
        getEveryone: function(callback) {
            var url = pixelsilk.urlBase + 'getEveryone';
            var data = {'domain':pixelsilk.domain,'output':'json'};
            ajax(url, data, callback);
        },

        enablePlugin: function(pluginName, enabled, callback) {
            var url = pixelsilk.urlBase + 'enablePlugin';
            var data = {'pluginName':pluginName,'enabled':enabled,'domain':pixelsilk.domain,'output':'json'};
            ajax(url, data, callback);
        },

        getSystemFileNames: function(callback) {
            var url = pixelsilk.urlBase + 'getSystemFileNames';
            var data = {'domain':pixelsilk.domain,'output':'json'};
            ajax(url, data, callback);
        },

        getSystemFile: function(fileName, callback) {
            var url = pixelsilk.urlBase + 'getSystemFile';
            var data = {'fileName':fileName,'domain':pixelsilk.domain,'output':'json'};
            ajax(url, data, callback);
        },

        updateSystemFile: function(fileName, value, callback) {
            var url = pixelsilk.urlBase + 'updateSystemFile';
            var data = {'fileName':fileName,'value':value,'domain':pixelsilk.domain,'output':'json'};
            ajax(url, data, callback);
        },

        addNewSystemFile: function(fileName, callback) {
            var url = pixelsilk.urlBase + 'addNewSystemFile';
            var data = {'fileName':fileName,'domain':pixelsilk.domain,'output':'json'};
            ajax(url, data, callback);
        },

        deleteSystemFile: function(fileName, callback) {
            var url = pixelsilk.urlBase + 'deleteSystemFile';
            var data = {'fileName':fileName,'domain':pixelsilk.domain,'output':'json'};
            ajax(url, data, callback);
        },

        getPageInfo: function(path, callback) {
            var url = pixelsilk.urlBase + 'getPageInfo';
            var data = {domain:pixelsilk.domain, path: path};
            ajax(url, data, callback);
        },
        
        setPageInfo: function(path, value, callback) {
            var url = pixelsilk.urlBase + 'setPageInfo';
            var data = {domain:pixelsilk.domain, path: path, value: value};
            ajax(url, data, callback);
        },
        
        
        ///////////////////////////////////////////////////
        // SAL CMS API code
        // The following section of code is to be kept
        // together and therefore separate from the other
        // code so it will be easy to know what it's for
        // and so it will be easy to move if that is 
        // ever called for.
        
        salGetSite: function(callback){
            var url = pixelsilk.urlBase + 'salGetSite';
            var address = pixelsilk.domain + '\/' + pixelsilk.appPath;
            var data = {'Domain':address};
            ajax(url, data, callback);
        },
        
        salGetPage: function(siteid, callback){
            var url = pixelsilk.urlBase + 'salGetPage';
            var address = pixelsilk.domain + '\/' + pixelsilk.appPath + clientContext.sectionPath;
            var data = {'PageUrl': address,'SiteID': siteid};
            ajax(url, data, callback);
        },
        
        salGetTagAdvice: function(pageid, tagname, callback){
            var url = pixelsilk.urlBase + 'salGetTagAdvice';
            var address = pixelsilk.domain + '\/' + pixelsilk.appPath;
            var data = {'PageID': pageid,'TagName': tagname};
            ajax(url, data, callback);
        },
        
        // End SAL CMS API code
        ///////////////////////////////////////////////////
        
        ///////////////////////////////////////////////////
        // Temporary Token Sense Code
        
        tscGetTokens: function(callback){
            var url = pixelsilk.urlBase + 'tscGetTokens';
            var data = {'output':'json'};
            ajax(url, data, callback);
        },
        
        // End of Temporary Token Sense Code
        ///////////////////////////////////////////////////
        
        
        // Necessary context info.
        domain: 'www.deborahkingcenter.com',
        urlBase: 'http://www.deborahkingcenter.com/api/',
        appPath: ''
    };

}();

} // if (!window['pixelsilk'])

if (!window.impact) {
    var impact = pixelsilk;
}