
// this file is built in to pixelsilk
// with a url like http://lonestar.smartz.com/api.js or http://localhost/Impact3/api.js

setTimeout(function() {

    throw 'WARNING!  ' + 
          'This version of the API is old and has been replaced with ' + 
          'the API2, which can be found at http://{yoursite}/api2.js.';

}, 100);



/* 
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') {
        }
    }

    function end() {
        if (typeof(endHandler) === 'function') {
            endHandler();
        }
    }

    function error(e) {
        if (typeof(errorHandler) === 'function') {
            errorHandler(e);
        }
    }

    function ajax(url, data, callback) {
        warnAboutOldApi();
        start();
        var eventCallback = function(data) {
            end();
            if (callback) {
                callback(data);
            }
        };
        try {
            ajaxXhr(url, data, eventCallback);
        } catch(e) {
            error(e);
            ajaxScriptTag(url, data, eventCallback);
        }
    }

    function warnAboutOldApi() {
        // Not quite ready for this just yet...
        //if (window['console'] && window['console']['log']) {
        //    console.log('Warning: this is the old version of the Pixelsilk API.\n' + 
        //        '\tThe new version can be accessed by replacing api.js with api2.js and pixelsilk.someFunction() with pixelsilk2.someFunction()');
        //}
    }

    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;
    }

    warnAboutOldApi();

    // 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);
        },
        
        getSystemImages: function(type, albumName, callback) {
            var url = pixelsilk.urlBase + 'getSystemImages';
            var data = {'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);
        },
        
        deleteAlbum: function(type, albumName, callback) {
            var url = pixelsilk.urlBase + 'deleteAlbum';
            var data = {'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);
        },

        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);
        },

        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(themeId, callback) {
            var url = pixelsilk.urlBase + 'getLayoutSkins';
            var data = {themeId:themeId,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);
        },

        copyPageType: function(pageTypeId, callback) {
            var url = pixelsilk.urlBase + 'copyPageType';
            var data = {'pageTypeId':pageTypeId,'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, hasAdminAccess, adminAccess, callback) {
            var url = pixelsilk.urlBase + 'updateRole';
            var data = {'hiddenName':hiddenName,  'name':name,'description':description,'isHidden':isHidden, 'isSystemRole':isSystemRole, 'hasAdminAccess':hasAdminAccess, '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, sendPasswordLink, enabled, locked, emailVerified, roles, callback) {
            var url = pixelsilk.urlBase + 'addUser';
            var data = {'theUserName':theUserName,'email':email,'firstName':firstName,'lastName':lastName,'thePassword':thePassword,'sendPasswordLink':sendPasswordLink,'enabled':enabled,'locked':locked,'emailVerified':emailVerified,'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, hasAdminAccess, adminAccess, callback) {
            var url = pixelsilk.urlBase + 'addRole';
            var data = {'name':name,'description':description,'isHidden':isHidden, 'isSystemRole':isSystemRole, 'hasAdminAccess':hasAdminAccess, '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, json, permissions, callback) {
            var url = pixelsilk.urlBase + 'updateControlProperties';
            var data = {'id':id, '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);
        },
        
        copyControl: function(controlId, callback) {
            var url = pixelsilk.urlBase + 'copyControl';
            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);
        },

        renameSystemFile: function(oldName, newName, callback) {
            var url = pixelsilk.urlBase + 'renameSystemFile';
            var data = {'oldName':oldName,'newName':newName,'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);
        },

        getThemes: function(callback) {
            var url = pixelsilk.urlBase + 'getThemes';
            var data = {domain:pixelsilk.domain, output:'json'};
            ajax(url, data, callback);
        },
        
        addTheme: function(themeName, callback) {
            var url = pixelsilk.urlBase + 'addTheme';
            var data = {themeName: themeName, domain:pixelsilk.domain, output:'json'};
            ajax(url, data, callback);
        },

        editTheme: function(themeId, themeName, callback) {
            var url = pixelsilk.urlBase + 'editTheme';
            var data = {themeId: themeId, themeName: themeName, domain:pixelsilk.domain, output:'json'};
            ajax(url, data, callback);
        },
        
        deleteTheme: function(themeId, callback) {
            var url = pixelsilk.urlBase + 'deleteTheme';
            var data = {themeId: themeId, domain:pixelsilk.domain, output:'json'};
            ajax(url, data, callback);
        },
        
        copyTheme: function(themeId, callback) {
            var url = pixelsilk.urlBase + 'copyTheme';
            var data = {themeId: themeId, domain:pixelsilk.domain, output:'json'};
            ajax(url, data, callback);
        },
        
        promoteTheme: function(themeId, callback){
            var url = pixelsilk.urlBase + 'promoteTheme';
            var data = {'themeId': themeId};
            ajax(url, data, callback);
        },

        getAvailableTo: function(Id, groupId, callback){
            var url = pixelsilk.urlBase + 'getAvailableTo';
            var data = {'Id': Id, 'groupId': groupId};
            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);
        },
        
        bcUpdatePixelsilk: function(pageurl, keyword, callback){
            var url = pixelsilk.urlBase + 'bcUpdatePixelsilk';
            var data = {pageurl: pageurl, keyword: keyword};
            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.whippersnappers.com',
        urlBase: 'http://www.whippersnappers.com/api/',
        appPath: ''
    };

}();

} // if (!window['pixelsilk'])


// Kept for backwards compatibility for now.  It's really old at this point though.
if (!window.impact) {
    var impact = {};
    var firstNag = true;
    
    var wrap = function(name, f) {
        return function() {
            var message = 'JavaScript on the page is using an old version of the Pixelsilk API.  replace impact.' + name + '() with pixelsilk2.' + name + '() or pixelsilk.' + name + '().';
            if (firstNag) {
                alert(message);
                firstNag = false;
            }
            if (window['console'] && typeof(window['console']['log']) === 'function') {
                window['console']['log'](message);
            }
            f(arguments[0], arguments[1], arguments[2], arguments[3], arguments[4]);
        };
    };
    
    for (var i in pixelsilk) {
        if (typeof(pixelsilk[i]) === 'function') {
            impact[i] = wrap(i, pixelsilk[i]);
        } else {
            impact[i] = pixelsilk[i];
        }
    }
}

