﻿var mouse_x = 0;
var mouse_y = 0;
var distance_to_right_edge = 0;
var distance_to_bottom = 0;
var contextmenu = null;
var selectedText;
var bulletID, characterID, settingID, spellID;
var charInScene;
var moveDiv = false;
var divToMove;
var sX, sY;
var divToResize, divResizing;
var resizeDiv = false;

addLoadEvent(onstart);

function onstart() {
    levelHeights("divAnn", "divRecentActivity");
    checkForDates();
    contextmenu = document.getElementById('thecontextmenu');
    addGenericEvent(document, 'mousemove', mousemove);
    addGenericEvent(document, 'click', hide_contextmenu);
    if (document.getElementById("ddlCharactersInScene") != null && document.getElementById("ddlCharactersMentioned") != null && document.getElementById("ddlCharacters") != null) {
        document.getElementById("ddlCharactersInScene").innerHTML = document.getElementById("ddlCharacters").innerHTML;
        document.getElementById("ddlCharactersMentioned").innerHTML = document.getElementById("ddlCharacters").innerHTML;
        if (document.getElementById("ddlCharactersPOV") != null) {
            document.getElementById("ddlCharactersPOV").innerHTML = document.getElementById("ddlCharacters").innerHTML;
            document.getElementById("ddlCharactersPOV").value = document.getElementById("hfPOVID").value;
        }
    }

    if (document.getElementById("ddlSpells") != null && document.getElementById("ddlSpellsAdd") != null) {
        document.getElementById("ddlSpellsAdd").innerHTML = document.getElementById("ddlSpells").innerHTML;
    }
    if (document.getElementById("ddlSettings") != null && document.getElementById("ddlSettingsAdd") != null) {
        document.getElementById("ddlSettingsAdd").innerHTML = document.getElementById("ddlSettings").innerHTML;
    }
    if (document.getElementById("hfSceneNum") != null && document.getElementById("ddlSceneNum") != null) {
        document.getElementById("ddlSceneNum").value = document.getElementById("hfSceneNum").value;
    }
}


function context_menuitem_highlight(element, color) {
    element.className = 'highlight';
}

function context_menuitem_unhighlight(element) {
    element.className = '';
}

function showBulletMenu(id,event) {
    bulletID = id;
    show_contextmenu("bulletMenu", event);
}

function showCharacterMenu(id, inScene, event) {
    characterID = id;
    charInScene = inScene;
    show_contextmenu("characterMenu", event);
}

function showSpellMenu(id, event) {
    spellID = id;
    show_contextmenu("spellMenu", event);
}

function showSettingMenu(id, event) {
    settingID = id;
    show_contextmenu("settingMenu", event);
}

function show_contextmenu(menu,event) {
    contextmenu = document.getElementById(menu);
    get_page_boundaries();
    contextmenu.style.left = mouse_x + "px";
    contextmenu.style.top = mouse_y + "px";
    contextmenu.style.visibility = "visible";

    // adjust menu if near window edge
    if (distance_to_right_edge < contextmenu.offsetWidth)
        contextmenu.style.left = 2 + mouse_x - contextmenu.offsetWidth + "px";  // The 2+ is not some dumb kludge - 
    if (distance_to_bottom < contextmenu.offsetHeight)                    // it places the menu just under the pointer,
        contextmenu.style.top = 2 + mouse_y - contextmenu.offsetHeight + "px";  // instead of just outside

    //try {
    selectedText = getSelText();
    selectedText = selectedText.toString().trim();
        //window.getSelection().collapseToStart();  // try to compensate for tendency to treat right-clicking as text selection
    //} catch (e) { } // do nothing

    // prevent the event from bubbling up and causing the regular browser context menu to appear.
    event.cancelBubble = true;
    if (event.stopPropagation) event.stopPropagation();
    if (event.preventDefault) event.preventDefault();

    return false;
}

function hide_contextmenu() {
    if (contextmenu != null) {
        contextmenu.style.visibility = "hidden";
    }
}


function addLoadEvent(func) {
    if (window.addEventListener)
        window.addEventListener("load", func, false);
    else if (document.addEventListener)
        document.addEventListener("load", func, false);
    else if (window.attachEvent)
        window.attachEvent("onload", func);
    else if (document.attachEvent)
        document.attachEvent("onload", func);
}

function addGenericEvent(source, trigger, func) {
    if (source.addEventListener)
        source.addEventListener(trigger, func, false);
    else if (source.attachEvent)
        source.attachEvent("on" + trigger, func);
}

function window_x() {
    if (window.screenX)
        return window.screenX
    else if (window.screenLeft)
        return window.screenLeft;
}

function window_y() {
    if (window.screenY)
        return window.screenY
    else if (window.screenTop)
        return window.screenTop;
}

function mousemove(e) {
    var mouse_window_y;
    if (e && e.clientX && typeof (window.scrollY) == 'number') { // Moz
        mouse_x = e.clientX + window.scrollX;
        mouse_y = e.clientY + window.scrollY;
        mouse_window_y = e.clientY;
        event_target = e.target;
    }
    else if (window.event) { // IE
        if (document.documentElement)   // Explorer 6 Strict
        {
            mouse_x = window.event.clientX + document.documentElement.scrollLeft - 4;
            mouse_y = window.event.clientY + document.documentElement.scrollTop - 4;
        }
        else if (document.body) // all other Explorers
        {
            mouse_x = window.event.clientX + document.body.scrollLeft - 4;
            mouse_y = window.event.clientY + document.body.scrollTop - 4;
        }

        mouse_window_x = window.event.clientX;
        mouse_window_y = window.event.clientY;
    }

    if (moveDiv && divToMove != null) {
        try {
            var oldX = divToMove.offsetLeft;
            var oldY = divToMove.offsetTop;
            var nX = parseInt(mouse_x) - parseInt(sX);
            var nY = parseInt(mouse_y) - parseInt(sY);
            divToMove.style.top = (oldY + nY) + "px";
            divToMove.style.left = (oldX + nX) + "px";
            sX = mouse_x;
            sY = mouse_y;
        }
        catch (ex) {

        }
    }

    if (resizeDiv && divResizing != null && divToResize != null) {
        try {
            var h = 0;

            //IE
            if (!window.innerWidth) {
                //strict mode
                if (!(document.documentElement.clientWidth == 0)) {
                    h = document.documentElement.clientHeight;
                }
                //quirks mode
                else {
                    h = document.body.clientHeight;
                }
            }
            //w3c
            else {
                h = window.innerHeight;
            }

            var newH = h - mouse_window_y;
            if (newH > 220) {
                divToResize.style.height = newH + "px";
                divResizing.style.bottom = (newH - 2) + "px";
                document.getElementById("sceneMenuHide").style.bottom = newH + "px";
                document.getElementById("divBulletList").style.height = ((newH - 55)/5*3) + "px";
                document.getElementById("txtSceneBullet").style.height = ((newH - 55)/5*2) + "px";
                document.getElementById("divCharInSceneList").style.height = ((newH - 90)/2) + "px";
                document.getElementById("divCharMentionedList").style.height = ((newH - 90) / 2) + "px";
                document.getElementById("divSpellList").style.height = ((newH - 90) / 2) + "px";
                document.getElementById("divSettingList").style.height = ((newH - 90) / 2) + "px";
            }
            else {
                resizeDiv = false;
            }
        }
        catch (ex) {
            alert(ex.message);
        }
    }
}

function setMoveDiv(div) {
    moveDiv = true;
    divToMove = document.getElementById(div);
    sX = mouse_x;
    sY = mouse_y;
}

function get_page_boundaries() {
    if (window.innerWidth) {
        distance_to_right_edge = window.innerWidth - (mouse_x - window.scrollX)
        distance_to_bottom = window.innerHeight - (mouse_y - window.scrollY);

        //alert(window.innerHeight+' '+mouse_y);
    } else if (document.body.clientWidth) {
        distance_to_right_edge = document.body.clientWidth - mouse_x;
        distance_to_bottom = document.body.clientHeight - mouse_y;
    }
}


function removeTags(ElementID)
        {
            var txt;
            txt = document.getElementById(ElementID);
            if (txt == null || txt.value == null || txt.value == "")
            {
                txt = ElementID;
            }
            while (txt.value.indexOf("<i>") > -1 || txt.value.indexOf("<b>") > -1 ||
                    txt.value.indexOf("<u>") > -1 || txt.value.indexOf("</i>") > -1 ||
                    txt.value.indexOf("</b>") > -1 || txt.value.indexOf("</u>") > -1)
            {
                txt.value = txt.value.replace("<i>",";lt;i;gt;").replace("</i>",
                    ";lt;/i;gt;").replace("<b>",";lt;b;gt;").replace("</b>",
                    ";lt;/b;gt;").replace("<u>",";lt;u;gt;").replace("</u>",";lt;/u;gt;");
            }
            while (txt.value.indexOf("<") > -1 && txt.value.indexOf(">") > -1)
            {
                var lt = txt.value.indexOf("<");
                var gt = txt.value.indexOf(">");
                if(txt.value.substr(txt.value.indexOf("<"),4) == "<div" )
                {
                    txt.value = txt.value.substring(0,lt) + 
                        txt.value.substring(lt,gt+1).replace("<",";lt;").replace(">",";gt;") + 
                        txt.value.substring(gt+1);
                }
                else if (txt.value.substr(txt.value.indexOf("<"),6) == "</div>")
                {
                    txt.value = txt.value.substring(0,lt) + ";lt;/div;gt;" +
                        txt.value.substring(gt+1);
                }
                else
                {
                    txt.value = txt.value.substring(0,lt) + 
                        txt.value.substring(gt+1);
                }
            }
            while (txt.value.indexOf("<") > -1 && txt.value.indexOf(">") == -1)
            {
                txt.value = txt.value.replace("<","");
            }
            while (txt.value.indexOf("<") == -1 && txt.value.indexOf(">") > -1)
            {
                txt.value = txt.value.replace(">","");
            }

        }
        
        function deleteTags(ElementID)
        {
            var txt;
            txt = document.getElementById(ElementID);
            if (txt == null || txt.value == null || txt.value == "")
            {
                txt = ElementID;
            }
            
            while (txt.value.indexOf("<") > -1 && txt.value.indexOf(">") > -1)
            {
                var lt = txt.value.indexOf("<");
                var gt = txt.value.indexOf(">");
                txt.value = txt.value.substring(0,lt) + 
                    txt.value.substring(gt+1);
            }
            while (txt.value.indexOf("<") > -1 && txt.value.indexOf(">") == -1)
            {
                txt.value = txt.value.replace("<","");
            }
            while (txt.value.indexOf("<") == -1 && txt.value.indexOf(">") > -1)
            {
                txt.value = txt.value.replace(">","");
            }
        }
        
        function expandHideDiv(expand,hide)
        {
            document.getElementById(expand).style.display = "inline-block";
            document.getElementById(hide).style.display = "none";
        }
        
        function levelHeights(div1,div2)
        {
            var x1 = document.getElementById(div1).offsetHeight;
            var x2 = document.getElementById(div2).offsetHeight;
            if (x1 > x2){
                document.getElementById(div2).style.height = (x1-5) + "px";
            }
            else {
                document.getElementById(div1).style.height = (x2-5) + "px";
            }
        }
        
//        window.onload=function(){
//            levelHeights("divAnn","divRecentActivity");
//            checkForDates();
//        }
//        
        function checkForDates()
        {
            //alert("qwer");
            //alert(hv);
            var pre = "prog";
            var j = 1;
            while (document.getElementById(pre + j) != null)
            {
                convertToLocal(pre + j);
                j += 1;
            }
            
            pre = "news";
            j = 1;
            while (document.getElementById(pre + j) != null)
            {
                convertToLocal(pre + j);
                j += 1;
            }
            
            pre = "reada";
            j = 1;
            while (document.getElementById(pre + j) != null)
            {
                convertToLocal(pre + j);
                j += 1;
            }
            
            pre = "readb";
            j = 1;
            while (document.getElementById(pre + j) != null)
            {
                convertToLocal(pre + j);
                j += 1;
            }
            
            //var hv = document.getElementById("hvDatesToConvert").value;
            /*while (hv.indexOf(";;;") > 0)
            {
                convertToLocal("prog1");//hv.substring(0,hv.indexOf(";;;"));
                hv = hv.substring(hv.indexOf(";;;")+2);
                if (hv.indexOf(";;;") > 0)
                    hv = hv.substring(1);
            }*/
        }
        
        function convertToLocal(element)
        {
            //alert("asdf");
            var span = document.getElementById(element);
            var d = new Date();
            var offset = (d.getTimezoneOffset() * 60000);
            d = new Date(span.innerHTML);
            var adjusted = (d.getTime() - offset);// + 25200000;
            var local = new Date(adjusted);
            span.innerHTML = (local.getMonth() + 1) + "/" + local.getDate() + "/" + local.getFullYear() + 
                " " + local.toLocaleTimeString();
        }
        
        function callProgUpdate(id)
        {
            var story = document.getElementById("progStory" + id).value;
            var chapter = document.getElementById("progChapter" + id).value;
            var prog = document.getElementById("progUpdate" + id).value;
            callUpdateProgress("updateProgress;;split;;" + story + ";;split;;" + 
                chapter + ";;split;;" + prog + ";;split;;" + id,null);
        }
        
        function updateProgress(result, context)
        {
            document.getElementById("progContainer").innerHTML = result;
        }

        function getSelText() {
            var txt = "";
            if (window.getSelection) {
                txt = window.getSelection();
            }
            else if (document.getSelection) {
                txt = document.getSelection();
            }
            else if (document.selection) {
                txt = document.selection.createRange().text;
            }
            return txt;
        }

//        document.onscroll = function() {
//            var scr = parseInt(document.scrollTop);
//            if (isNaN(scr)) {
//                scr = parseInt(window.pageYOffset);
//                if (isNaN(scr)) {
//                    scr = parseInt(document.documentElement.scrollTop);
//                }
//            }
//            scr = -1 * scr;
//            alert(scr);
//            var div = document.getElementById("sceneMenu");
//            div.style.bottom = scr.toString();
//            div.style.left = "0";
        //        }

        function pasteBullet() {
            if (selectedText != "") {
                var tBox = document.getElementById("txtSceneBullet");
                if (tBox != null) {
                    tBox.value = selectedText;
                }
                selectedText = "";
            }
        }

        function addCharacter(inScene) {
//            if (selectedText != "") {
//                callSaveOutline("addCharacter;;split;;" + document.getElementById("hfSceneID").value + "|" + 
//                    inScene.toString().toLowerCase() + "|" + selectedText, null);
//                selectedText = "";
            //            }
            if (inScene) {
                var cid = document.getElementById("ddlCharactersInScene").value;
                callSaveOutline("addCharacter;;split;;" + document.getElementById("hfSceneID").value + "|" +
                    inScene.toString().toLowerCase() + "|" + cid, null);
            }
            else {
                var cid = document.getElementById("ddlCharactersMentioned").value;
                callSaveOutline("addCharacter;;split;;" + document.getElementById("hfSceneID").value + "|" +
                    inScene.toString().toLowerCase() + "|" + cid, null);
            }
        }

        function tryAddCharacter(inScene) {
            if (selectedText != "") {
                callSaveOutline("tryAddCharacter;;split;;" + document.getElementById("hfSceneID").value + "|" + 
                    inScene.toString().toLowerCase() + "|" + selectedText, null);
                selectedText = "";
            }
        }

        function addCharacter(inScene,ddl) {
                var cid = document.getElementById(ddl).value;
                callSaveOutline("addCharacter;;split;;" + document.getElementById("hfSceneID").value + "|" +
                    inScene.toString().toLowerCase() + "|" + cid, null);
        }

        function saveOutline(result, context) {
            if (result.toString().indexOf("Bullet") == 0) {
                var listH = document.getElementById("divBulletList").offsetHeight;
                var boxH = document.getElementById("txtSceneBullet").offsetHeight;
                document.getElementById("sceneBullets").innerHTML = result;
                document.getElementById("divBulletList").style.height = listH + "px";
                document.getElementById("txtSceneBullet").style.height = boxH + "px";
            }
            else if (result.toString().indexOf("loadCharacter") == 0) {
                var args = result.toString().split('|');
                setCharacterTexts(args[1], args[2], args[3], args[4], args[5], args[7], args[6]);
            }
            else if (result.toString().indexOf("ddlCharacters|") == 0) {
                var ddl = result.toString().substring(14);
                document.getElementById("ddlCharactersContainer").innerHTML = ddl;
                setNewCharacter();
                document.getElementById("ddlCharactersInScene").innerHTML = document.getElementById("ddlCharacters").innerHTML;
                document.getElementById("ddlCharactersMentioned").innerHTML = document.getElementById("ddlCharacters").innerHTML;
                if (document.getElementById("ddlCharactersPOV") != null) {
                    document.getElementById("ddlCharactersPOV").innerHTML = document.getElementById("ddlCharacters").innerHTML;
                    document.getElementById("ddlCharactersPOV").value = document.getElementById("hfPOVID").value;
                }
            }
            else if (result.toString().indexOf("loadSpell") == 0) {
                var args = result.toString().split('|');
                setSpellTexts(args[1], args[2], args[3], args[4]);
            }
            else if (result.toString().indexOf("ddlSpells|") == 0) {
                var ddl = result.toString().substring(10);
                document.getElementById("ddlSpellsContainer").innerHTML = ddl;
                setNewSpell();
                if (document.getElementById("ddlSpells") != null && document.getElementById("ddlSpellsAdd") != null) {
                    document.getElementById("ddlSpellsAdd").innerHTML = document.getElementById("ddlSpells").innerHTML;
                }
            }
            else if (result.toString().indexOf("loadSetting") == 0) {
                var args = result.toString().split('|');
                setSettingTexts(args[1]);
            }
            else if (result.toString().indexOf("ddlSettings|") == 0) {
                var ddl = result.toString().substring(12);
                document.getElementById("ddlSettingsContainer").innerHTML = ddl;
                setNewSetting();
                if (document.getElementById("ddlSettings") != null && document.getElementById("ddlSettingsAdd") != null) {
                    document.getElementById("ddlSettingsAdd").innerHTML = document.getElementById("ddlSettings").innerHTML;
                }
            }
            else if (result.toString().indexOf("addCharacter|") == 0) {
                var ch = result.toString().substring(13);
                var inScene = ch.substring(0, ch.indexOf("|"));
                ch = ch.substring(ch.indexOf("|") + 1);
                if (inScene.toLowerCase() == "true") {
                    document.getElementById("sceneCharactersInScene").innerHTML = ch;
                    document.getElementById("ddlCharactersInScene").innerHTML = document.getElementById("ddlCharacters").innerHTML;
                }
                else {
                    document.getElementById("sceneCharactersMentioned").innerHTML = ch;
                    document.getElementById("ddlCharactersMentioned").innerHTML = document.getElementById("ddlCharacters").innerHTML;
                }
            }
            else if (result.toString().indexOf("deleteCharacter|") == 0) {
                var ch = result.toString().substring(16);
                var inScene = ch.substring(0, ch.indexOf("|"));
                ch = ch.substring(ch.indexOf("|") + 1);
                if (inScene.toLowerCase() == "true") {
                    document.getElementById("sceneCharactersInScene").innerHTML = ch;
                    document.getElementById("ddlCharactersInScene").innerHTML = document.getElementById("ddlCharacters").innerHTML;
                }
                else {
                    document.getElementById("sceneCharactersMentioned").innerHTML = ch;
                    document.getElementById("ddlCharactersMentioned").innerHTML = document.getElementById("ddlCharacters").innerHTML;
                }
            }
            else if (result.toString().indexOf("setPOV") == 0) {
                document.getElementById("hfPOVID").value = document.getElementById("ddlCharactersPOV").value;
            }
            else if (result.toString().indexOf("addSpell|") == 0) {
                var txt = result.split('|'); //result.toString().substring(9);
                document.getElementById("sceneSpells").innerHTML = txt[1];
                if (txt.length > 2) {
                    document.getElementById("ddlSpellsContainer").innerHTML = txt[2];
                }
                if (document.getElementById("ddlSpells") != null && document.getElementById("ddlSpellsAdd") != null) {
                    document.getElementById("ddlSpellsAdd").innerHTML = document.getElementById("ddlSpells").innerHTML;
                }
            }
            else if (result.toString().indexOf("addSetting|") == 0) {
                var txt = result.split('|');
                document.getElementById("sceneSettings").innerHTML = txt[1];
                if (txt.length > 2) {
                    document.getElementById("ddlSettingsContainer").innerHTML = txt[2];
                }
                if (document.getElementById("ddlSettings") != null && document.getElementById("ddlSettingsAdd") != null) {
                    document.getElementById("ddlSettingsAdd").innerHTML = document.getElementById("ddlSettings").innerHTML;
                }
            }
            else if (result.toString().indexOf("loadScene|") == 0) {
                var args = result.split('|');
                document.getElementById("hfSceneID").value = args[1];
                document.getElementById("sceneTitle").innerHTML = args[2];
                if (document.getElementById("hfSceneNum") != null && document.getElementById("ddlSceneNum") != null) {
                    document.getElementById("ddlSceneNum").value = document.getElementById("hfSceneNum").value;
                }
                document.getElementById("sceneBullets").innerHTML = args[3];
                document.getElementById("sceneCharactersInScene").innerHTML = args[4];
                document.getElementById("sceneCharactersMentioned").innerHTML = args[5];
                document.getElementById("sceneSettings").innerHTML = args[6];
                document.getElementById("sceneSpells").innerHTML = args[7];
                if (document.getElementById("ddlCharactersInScene") != null && document.getElementById("ddlCharactersMentioned") != null && document.getElementById("ddlCharacters") != null) {
                    document.getElementById("ddlCharactersInScene").innerHTML = document.getElementById("ddlCharacters").innerHTML;
                    document.getElementById("ddlCharactersMentioned").innerHTML = document.getElementById("ddlCharacters").innerHTML;
                    if (document.getElementById("ddlCharactersPOV") != null) {
                        document.getElementById("ddlCharactersPOV").innerHTML = document.getElementById("ddlCharacters").innerHTML;
                        document.getElementById("ddlCharactersPOV").value = document.getElementById("hfPOVID").value;
                    }
                }
                if (document.getElementById("ddlSpells") != null && document.getElementById("ddlSpellsAdd") != null) {
                    document.getElementById("ddlSpellsAdd").innerHTML = document.getElementById("ddlSpells").innerHTML;
                }
                if (document.getElementById("ddlSettings") != null && document.getElementById("ddlSettingsAdd") != null) {
                    document.getElementById("ddlSettingsAdd").innerHTML = document.getElementById("ddlSettings").innerHTML;
                }
            }
            else if (result.toString().indexOf("ERROR") == 0) {
                alert(result);
            }
        }

        function addBullet(useTxtBox) {
            var txt = "";
            if (useTxtBox) {
                txt = document.getElementById("txtSceneBullet").value;
            }
            else {
                txt = selectedText;
                selectedText = "";
            }
            if (txt != "") {
                callSaveOutline("addBullet;;split;;" + document.getElementById("hfSceneID").value + "|" + txt, null);
            }
        }

        function editBullet() {
            var txt = document.getElementById("liBullet" + bulletID).innerHTML;
            if (txt != null && txt != "") {
                document.getElementById("editBullet").style.display = "inline-block";
                document.getElementById("txtEditBullet").value = txt;
            }
        }

        function saveEditBullet() {
            var txt = document.getElementById("txtEditBullet").value;
            document.getElementById("editBullet").style.display = "none";
            callSaveOutline("editBullet;;split;;" + document.getElementById("hfSceneID").value + "|" + bulletID + "|" + txt, null);
        }

        function shiftBullet(up) {
            callSaveOutline("shiftBullet;;split;;" + document.getElementById("hfSceneID").value + "|" + bulletID + "|" + up.toString(), null);
        }

        function deleteBullet() {
            if(confirm("Delete selected bullet?")){
                callSaveOutline("deleteBullet;;split;;" + document.getElementById("hfSceneID").value + "|" + bulletID, null);
            }
        }

        function editCharacters() {
            document.getElementById("editCharacters").style.display = "inline-block";
        }

        function loadCharacter() {
            var ddl = document.getElementById("ddlCharacters");
            if (ddl.value != 0) {
                callSaveOutline("loadCharacter;;split;;" + ddl.value, null);
                document.getElementById("btnAddCharInScene").style.display = "inline";
                document.getElementById("btnAddCharMention").style.display = "inline";
            }
            else {
                setCharacterTexts("", "", "", "", "", "", "false");
                document.getElementById("btnAddCharInScene").style.display = "none";
                document.getElementById("btnAddCharMention").style.display = "none";
            }
        }

        function saveCharacter() {
            var id = document.getElementById("ddlCharacters").value;
            var arg = document.getElementById("txtCharacterName").value + "|" + document.getElementById("txtCharacterFirstName").value + 
                "|" + document.getElementById("txtCharacterLastName").value + "|" + document.getElementById("txtCharacterHouse").value +
                "|" + document.getElementById("txtCharacterOccupation").value + "|" + 
                document.getElementById("chkCharacterDead").checked.toString().toLowerCase() + "|" +
                document.getElementById("txtCharacterDetails").value;
            callSaveOutline("saveCharacter;;split;;" + id + "|" + arg, null);
        }

        function setNewCharacter() {
            var ddl = document.getElementById("ddlCharacters");
            ddl.value = 0;
            setCharacterTexts("", "", "", "", "", "", "false");
            document.getElementById("btnAddCharInScene").style.display = "none";
            document.getElementById("btnAddCharMention").style.display = "none";
        }

        function editSpells() {
            document.getElementById("editSpells").style.display = "inline-block";
        }

        function loadSpell() {
            var ddl = document.getElementById("ddlSpells");
            if (ddl.value != 0) {
                callSaveOutline("loadSpell;;split;;" + ddl.value, null);
                document.getElementById("btnAddSpellID").style.display = "inline";
                document.getElementById("btnDeleteSpellID").style.display = "inline";
            }
            else {
                setSpellTexts("", "", "", "");
                document.getElementById("btnAddSpellID").style.display = "none";
                document.getElementById("btnDeleteSpellID").style.display = "none";
            }
        }

        function saveSpell() {
            var id = document.getElementById("ddlSpells").value;
            var arg = document.getElementById("txtSpellName").value + "|" + document.getElementById("txtSpellAltName").value +
                "|" + document.getElementById("txtSpellIncantation").value + "|" + document.getElementById("txtSpellEffect").value;
            callSaveOutline("saveSpell;;split;;" + id + "|" + arg, null);
        }

        function setNewSpell() {
            var ddl = document.getElementById("ddlSpells");
            ddl.value = 0;
            setSpellTexts("", "", "", "");
            document.getElementById("btnAddSpellID").style.display = "none";
            document.getElementById("btnDeleteSpellID").style.display = "none";
        }

        function setSpellTexts(sName, aName, inc, eff) {
            document.getElementById("txtSpellName").value = sName;
            document.getElementById("txtSpellAltName").value = aName;
            document.getElementById("txtSpellIncantation").value = inc;
            document.getElementById("txtSpellEffect").value = eff;
        }

        function editSettings() {
            document.getElementById("editSettings").style.display = "inline-block";
        }

        function loadSetting() {
            var ddl = document.getElementById("ddlSettings");
            if (ddl.value != 0) {
                callSaveOutline("loadSetting;;split;;" + ddl.value, null);
                document.getElementById("btnAddSettingID").style.display = "inline";
                document.getElementById("btnDeleteSettingID").style.display = "inline";
            }
            else {
                setSettingTexts("");
                document.getElementById("btnAddSettingID").style.display = "none";
                document.getElementById("btnDeleteSettingID").style.display = "none";
            }
        }

        function saveSetting() {
            var id = document.getElementById("ddlSettings").value;
            var arg = document.getElementById("txtSettingName").value;  
            callSaveOutline("saveSetting;;split;;" + id + "|" + arg, null);
        }

        function setNewSetting() {
            var ddl = document.getElementById("ddlSettings");
            ddl.value = 0;
            setSettingTexts("");
            document.getElementById("btnAddSettingID").style.display = "none";
            document.getElementById("btnDeleteSettingID").style.display = "none";
        }

        function setSettingTexts(sName) {
            document.getElementById("txtSettingName").value = sName;
        }

        function setCharacterTexts(cName, fName, lName, house, occ, details, dead) {
            document.getElementById("txtCharacterName").value = cName;
            document.getElementById("txtCharacterFirstName").value = fName;
            document.getElementById("txtCharacterLastName").value = lName;
            document.getElementById("txtCharacterHouse").value = house;
            document.getElementById("txtCharacterOccupation").value = occ;
            document.getElementById("txtCharacterDetails").value = details;
            var d = false;
            if (dead.toString().toLowerCase() == "true") {
                d = true;
            }
            document.getElementById("chkCharacterDead").checked = d;
        }

        function deleteCharacter() {
            if (characterID != null && characterID != "0" && characterID != "") {
                callSaveOutline("deleteCharacter;;split;;" + document.getElementById("hfSceneID").value + "|" + characterID + 
                    "|" + charInScene.toString().toLowerCase(), null);
            }
        }

        function setPOV() {
            var pov = document.getElementById("ddlCharactersPOV").value;
            if (pov != document.getElementById("hfPOVID").value) {
                callSaveOutline("setPOV;;split;;" + document.getElementById("hfSceneID").value + "|" + pov);
            }
        }

        function addSpell() {
            if (selectedText != null && selectedText != "") {
                callSaveOutline("addSpell;;split;;" + document.getElementById("hfSceneID").value + "|" + selectedText, null);
                selectedText = "";
            }
        }

        function addSpellID(ddl) {
            if (document.getElementById(ddl) != null && document.getElementById(ddl).value != "0" && document.getElementById(ddl).value != "") {
                callSaveOutline("addSpellID;;split;;" + document.getElementById("hfSceneID").value + "|" + document.getElementById(ddl).value, null);
                ddl.valueOf = "0";
            }
        }

        function addSettingID(ddl) {
            if (document.getElementById(ddl) != null && document.getElementById(ddl).value != "0" && document.getElementById(ddl).value != "") {
                callSaveOutline("addSettingID;;split;;" + document.getElementById("hfSceneID").value + "|" + document.getElementById(ddl).value, null);
                ddl.valueOf = "0";
            }
        }

        function deleteSpell() {
            if (spellID != null && spellID != "" && spellID != "0") {
                callSaveOutline("deleteSpell;;split;;" + document.getElementById("hfSceneID").value + "|" + spellID, null);
            }
        }

        function deleteSpellID(ddl) {
            var d = document.getElementById(ddl);
            if (d != null && d.value != null && d.value != "0" && d.value != "") {
                if (confirm("Delete this item from the database?")) {
                    callSaveOutline("deleteSpellID;;split;;" + d.value, null);
                    d.value = "0";
                }
            }
        }

        function deleteSettingID(ddl) {
            var d = document.getElementById(ddl);
            if (d != null && d.value != null && d.value != "0" && d.value != "") {
                if (confirm("Delete this item from the database?")) {
                    callSaveOutline("deleteSettingID;;split;;" + d.value, null);
                    d.value = "0";
                }
            }
        }

        function addSetting(boo) {
            if (boo) {
                if (selectedText != null && selectedText != "") {
                    callSaveOutline("addSetting;;split;;" + document.getElementById("hfSceneID").value + "|" + selectedText, null);
                    selectedText = "";
                }
            }
            else {
                var tBox = document.getElementById("txtSettingName");
                if (tBox != null) {
                    if (tBox.value != "") {
                        callSaveOutline("addSetting;;split;;" + document.getElementById("hfSceneID").value + "|" + tBox.value, null);
                        tBox.value = "";
                    }
                }
            }
        }

        function deleteSetting() {
            if (settingID != null && settingID != "" && settingID != "0") {
                callSaveOutline("deleteSetting;;split;;" + document.getElementById("hfSceneID").value + "|" + settingID, null);
            }
        }

        function loadScene(sNum) {
            if (!isNaN(sNum) && sNum != null && sNum != 0) {
                callSaveOutline("loadScene;;split;;" + sNum);
            }
        }

        function loadSceneNum() {
            var sNum = document.getElementById("ddlSceneNum").value;     
            callSaveOutline("loadScene;;split;;" + sNum);
        }

        function startResize(resizer, div) {
            divResizing = document.getElementById(resizer);
            divToResize = document.getElementById(div);
            if (divResizing != null && divToResize != null) {
                resizeDiv = true;
                sX = mouse_x;
                sY = mouse_y;
            }
        }

        function stopResize() {
            resizeDiv = false;
        }




        function sessionKeepAlive() {
            //            var wRequest = new Sys.Net.WebRequest();
            //            wRequest.set_url("SessionKeepAlive.aspx");
            //            wRequest.set_httpVerb("POST");
            //            wRequest.add_completed(sessionKeepAlive_Callback);
            //            wRequest.set_body();
            //            wRequest.get_headers()["Content-Length"] = 0;
            //            wRequest.invoke();

            var httpRequestMethod = "POST";
            var url = "SessionKeepAlive.aspx";

            if (window.XMLHttpRequest) { // For Mozilla, Safari, Opera, IE7+
                kaHttpRequest = new XMLHttpRequest();
                if (kaHttpRequest.overrideMimeType) {
                    kaHttpRequest.overrideMimeType('text/plain');
                    //Change MimeType to match the data type of the server response.
                    //Examples: "text/xml", "text/html", "text/plain"
                }
            }
            else if (window.ActiveXObject) { // For IE6
                try {
                    kaHttpRequest = new ActiveXObject("Msxml2.XMLHTTP");
                }
                catch (e) {
                    try {
                        kaHttpRequest = new ActiveXObject("Microsoft.XMLHTTP");
                    }
                    catch (e)
      { }
                }
            }
            if (!kaHttpRequest) {
                //alert('Giving up :( Cannot create an XMLHTTP instance');
                return false;
            }
            if (httpRequestMethod == 'GET') {
                kaHttpRequest.open('GET', url, true);
                kaHttpRequest.send(null);
                ser = ser + 1;
            }
            else if (httpRequestMethod == 'POST') {
                kaHttpRequest.open('POST', url, true);
                kaHttpRequest.setRequestHeader('Content-Type',
      'application/x-www-form-urlencoded');
                kaHttpRequest.send();
            }
            else {
                //alert('Sorry, unsupported HTTP method');
            }
        }

        // This callback function processes the
        // request return values. It is called asynchronously
        // by the current executor.
        function sessionKeepAlive_Callback(executor, eventArgs) {
            // No need to do anything, but if you are sending a value
            // from the server as an additional safety measure, then
            // you can check that here.
        }

        // Set 12 minute .NET session keep alive timer...
        window.setInterval("sessionKeepAlive()", 15 * 60 * 1000);