﻿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(">",lt);
        //var t = txt.value.toString().substring(lt, gt + 1);
        if (txt.value.substr(lt, 4) == "<div") {
            txt.value = txt.value.substring(0, lt) + ";lt;" +
                        txt.value.substring(lt + 1, gt) + ";gt;" + //.replace("<", ";lt;").replace(">", ";gt;") +
                        txt.value.substring(gt + 1);
        }
        else if (txt.value.substr(lt, 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(">", "");
    //}
    txt.valueOf = txt.value.replace(/</g,"");
    txt.valueOf = txt.value.replace(/>/g, "");
}

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);
        PageMethods.CallServer("addCharacter;;split;;" + document.getElementById("hfSceneID").value + "|" +
                    inScene.toString().toLowerCase() + "|" + cid, saveOutline, returnError);
    }
    else {
        var cid = document.getElementById("ddlCharactersMentioned").value;
        //                callSaveOutline("addCharacter;;split;;" + document.getElementById("hfSceneID").value + "|" +
        //                    inScene.toString().toLowerCase() + "|" + cid, null);
        PageMethods.CallServer("addCharacter;;split;;" + document.getElementById("hfSceneID").value + "|" +
                    inScene.toString().toLowerCase() + "|" + cid, saveOutline, returnError);
    }
}

function tryAddCharacter(inScene) {
    if (selectedText != "") {
        //                callSaveOutline("tryAddCharacter;;split;;" + document.getElementById("hfSceneID").value + "|" +
        //                    inScene.toString().toLowerCase() + "|" + selectedText, null);
        PageMethods.CallServer("tryAddCharacter;;split;;" + document.getElementById("hfSceneID").value + "|" +
                    inScene.toString().toLowerCase() + "|" + selectedText, saveOutline, returnError);
        selectedText = "";
    }
}

function addCharacter(inScene, ddl) {
    var cid = document.getElementById(ddl).value;
    //                callSaveOutline("addCharacter;;split;;" + document.getElementById("hfSceneID").value + "|" +
    //                    inScene.toString().toLowerCase() + "|" + cid, null);
    PageMethods.CallServer("addCharacter;;split;;" + document.getElementById("hfSceneID").value + "|" +
                    inScene.toString().toLowerCase() + "|" + cid, saveOutline, returnError);
}

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;
        //document.getElementById("ddlCharacters").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;
        var sel = document.getElementById("ddlSpells");
        var sel1 = document.getElementById("ddlSpellsAdd");
        sel.options.length = 0;
        sel.innerHTML = "";
        sel1.options.length = 0;
        sel1.innerHTML = "";
        var opts = ddl.split("~");
        for (j = 0; j < opts.length; j++) {
            if (opts[j] != "") {
                var opt = document.createElement("option");
                var opt1 = document.createElement("option");
                var t = opts[j].split(";");
                opt.value = t[0];
                opt.text = t[1];
                opt1.value = t[0];
                opt1.text = t[1];
                var failed = false;
                try {
                    sel.add(opt, null);
                    sel1.add(opt1, null);
                }
                catch (ex) {
                    //alert("Error");
                    failed = true;
                }
                if (failed) {
                    try {
                        sel.add(opt);
                        sel1.add(opt);
                    }
                    catch (ex) {
                        alert("Error");
                    }
                }
            }
        }
        sel.value = 0;
        sel1.value = 0;
        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) {
        //alert(result.toString().substring(result.toString().length - 50, result.toString().length));
        var txt = result.split('|'); //result.toString().substring(9);
        //document.getElementById("sceneSpells").innerHTML = txt[1];
        document.getElementById("divSpellList").innerHTML = txt[1];
        if (txt.length > 2) {
            //document.getElementById("ddlSpellsContainer").innerHTML = txt[2];
            var sel = document.getElementById("ddlSpells");
            var sel1 = document.getElementById("ddlSpellsAdd");
            sel.options.length = 0;
            sel.innerHTML = "";
            sel1.options.length = 0;
            sel1.innerHTML = "";
            var opts = txt[2].split("~");
            for (j = 0; j < opts.length; j++) {
                if (opts[j] != "") {
                    var opt = document.createElement("option");
                    var opt1 = document.createElement("option");
                    var t = opts[j].split(";");
                    opt.value = t[0];
                    opt.text = t[1];
                    opt1.value = t[0];
                    opt1.text = t[1];
                    var failed = false;
                    try {
                        sel.add(opt, null);
                        sel1.add(opt1, null);
                    }
                    catch (ex) {
                        //alert("Error");
                        failed = true;
                    }
                    if (failed) {
                        try {
                            sel.add(opt);
                            sel1.add(opt);
                        }
                        catch (ex) {
                            alert("Error");
                        }
                    }
                }
            }
            sel.value = 0;
            sel1.value = 0;
        }
        //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);
        PageMethods.CallServer("addBullet;;split;;" + document.getElementById("hfSceneID").value + "|" + txt, saveOutline, returnError);
    }
}

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);
    PageMethods.CallServer("editBullet;;split;;" + document.getElementById("hfSceneID").value + "|" + bulletID + "|" + txt, saveOutline, returnError);
}

function shiftBullet(up) {
    //            callSaveOutline("shiftBullet;;split;;" + document.getElementById("hfSceneID").value + "|" + bulletID + "|" + up.toString(), null);
    PageMethods.CallServer("shiftBullet;;split;;" + document.getElementById("hfSceneID").value + "|" + bulletID + "|" + up.toString(), saveOutline, returnError);
}

function deleteBullet() {
    if (confirm("Delete selected bullet?")) {
        //                callSaveOutline("deleteBullet;;split;;" + document.getElementById("hfSceneID").value + "|" + bulletID, null);
        PageMethods.CallServer("deleteBullet;;split;;" + document.getElementById("hfSceneID").value + "|" + bulletID, saveOutline, returnError);
    }
}

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);
        PageMethods.CallServer("loadCharacter;;split;;" + ddl.value, saveOutline, returnError);
        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);
    PageMethods.CallServer("saveCharacter;;split;;" + document.getElementById("hfStoryID").value + ";;split;;" + id + "|" + arg, saveOutline, returnError);
}

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);
        PageMethods.CallServer("loadSpell;;split;;" + ddl.value, saveOutline, returnError);
        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);
    PageMethods.CallServer("saveSpell;;split;;" + document.getElementById("hfStoryID").value + ";;split;;" + id + "|" + arg, saveOutline, returnError);
}

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);
        PageMethods.CallServer("loadSetting;;split;;" + ddl.value, saveOutline, returnError);
        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);
    PageMethods.CallServer("saveSetting;;split;;" + document.getElementById("hfStoryID").value + ";;split;;" + id + "|" + arg, saveOutline, returnError);
}

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);
        PageMethods.CallServer("deleteCharacter;;split;;" + document.getElementById("hfSceneID").value + "|" + characterID +
                    "|" + charInScene.toString().toLowerCase(), saveOutline, returnError);
    }
}

function setPOV() {
    var pov = document.getElementById("ddlCharactersPOV").value;
    if (pov != document.getElementById("hfPOVID").value) {
        //                callSaveOutline("setPOV;;split;;" + document.getElementById("hfSceneID").value + "|" + pov);
        PageMethods.CallServer("setPOV;;split;;" + document.getElementById("hfSceneID").value + "|" + pov, saveOutline, returnError);
    }
}

function addSpell() {
    if (selectedText != null && selectedText != "") {
        //                callSaveOutline("addSpell;;split;;" + document.getElementById("hfSceneID").value + "|" + selectedText, null);
        PageMethods.CallServer("addSpell;;split;;" + document.getElementById("hfSceneID").value + "|" + selectedText, saveOutline, returnError);
        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);
        PageMethods.CallServer("addSpellID;;split;;" + document.getElementById("hfSceneID").value + "|" + document.getElementById(ddl).value, saveOutline, returnError);
        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);
        PageMethods.CallServer("addSettingID;;split;;" + document.getElementById("hfSceneID").value + "|" + document.getElementById(ddl).value, saveOutline, returnError);
        ddl.valueOf = "0";
    }
}

function deleteSpell() {
    if (spellID != null && spellID != "" && spellID != "0") {
        //                callSaveOutline("deleteSpell;;split;;" + document.getElementById("hfSceneID").value + "|" + spellID, null);
        PageMethods.CallServer("deleteSpell;;split;;" + document.getElementById("hfSceneID").value + "|" + spellID, saveOutline, returnError);
    }
}

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);
            PageMethods.CallServer("deleteSpellID;;split;;" + d.value + "|" + document.getElementById("hfStoryID").value, saveOutline, returnError);
            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);
            PageMethods.CallServer("deleteSettingID;;split;;" + d.value, saveOutline, returnError);
            d.value = "0";
        }
    }
}

function addSetting(boo) {
    if (boo) {
        if (selectedText != null && selectedText != "") {
            //                    callSaveOutline("addSetting;;split;;" + document.getElementById("hfSceneID").value + "|" + selectedText, null);
            PageMethods.CallServer("addSetting;;split;;" + document.getElementById("hfSceneID").value + "|" + selectedText, saveOutline, returnError);
            selectedText = "";
        }
    }
    else {
        var tBox = document.getElementById("txtSettingName");
        if (tBox != null) {
            if (tBox.value != "") {
                //                        callSaveOutline("addSetting;;split;;" + document.getElementById("hfSceneID").value + "|" + tBox.value, null);
                PageMethods.CallServer("addSetting;;split;;" + document.getElementById("hfSceneID").value + "|" + tBox.value, saveOutline, returnError);
                tBox.value = "";
            }
        }
    }
}

function deleteSetting() {
    if (settingID != null && settingID != "" && settingID != "0") {
        //                callSaveOutline("deleteSetting;;split;;" + document.getElementById("hfSceneID").value + "|" + settingID, null);
        PageMethods.CallServer("deleteSetting;;split;;" + document.getElementById("hfSceneID").value + "|" + settingID, saveOutline, returnError);
    }
}

function loadScene(sNum) {
    if (!isNaN(sNum) && sNum != null && sNum != 0) {
        //                callSaveOutline("loadScene;;split;;" + sNum + "|" + document.getElementById("hfChapterID").value);
        PageMethods.CallServer("loadScene;;split;;" + sNum + "|" + document.getElementById("hfChapterID").value, saveOutline, returnError);
    }
}

function loadSceneNum() {
    var sNum = document.getElementById("ddlSceneNum").value;
    //            callSaveOutline("loadScene;;split;;" + sNum);
    PageMethods.CallServer("loadScene;;split;;" + sNum + "|" + document.getElementById("hfChapterID").value, saveOutline, returnError);
}

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);

function returnError(ex) {
    alert(ex.toString());
}
