var supercellEditInitialized = false;

function initSupercellEdit() {
    if(document.createStyleSheet) {
        document.createStyleSheet('supercell/supercellEdit.css');
    } else {
        var headID = document.getElementsByTagName("head")[0];         
        var cssNode = document.createElement('link');
        cssNode.type = 'text/css';
        cssNode.rel = 'stylesheet';
        cssNode.href = 'supercell/supercellEdit.css';
        headID.appendChild(cssNode);
    }


    var editElements = getElementsByAttribute(document.body, "*", "data-supercellEditId", null);
    for(var i in editElements) {
        var editElement = editElements[i];
        if(editElement.tagName == 'P') {
            alert("Editable area cannot be a <p> or Internet Explorer will whine like a little baby. Might wanna fix that.\n\n    Editable area id: " + editElement.getAttribute("data-supercellEditId"));
        }
        getContent(editElement);
    }
    
    supercellEditInitialized = true;
}

function supercellEditMode() {
    if(!supercellEditInitialized) { alert("Supercell Page Editor not installed for this page. Please contact Vital Technologies to have this set up."); return; }

    document.getElementById('editControls').style.display = "";
    document.getElementById('editControls').style.top = "-25px";
    targetTop = 0;
    slide('editControls');
    
    document.getElementById('editOverlay').style.display = "";
    targetOpacity = 0.5;
    fade('editOverlay');

    // Make fields editable   
    var editElements = getElementsByAttribute(document.body, "*", "data-supercellEditId", null);
    for(var i in editElements) {
        var editElement = editElements[i];
        editElement.contentEditable = "true";
        editElement.style.outline = "4px solid white";
        editElement.style.background = "white";
        editElement.style.zIndex = "128";
        editElement.style.position = "relative";
        
        //AJAX code to retrieve content from database
        getContent(editElement);
    }

}

function saveChanges() {
    targetTop = -25;
    slide('editControls');

    targetOpacity = 0;
    fade('editOverlay');
    
    // Make fields uneditable and revert content   
    var editElements = getElementsByAttribute(document.body, "*", "data-supercellEditId", null);
    deactivateEdit(editElements);
    for(var i in editElements) {
        var editElement = editElements[i];
        //AJAX code to store updated content to database
        saveContent(editElement);
    }
}

function revertChanges() {
    targetTop = -25;
    slide('editControls');

    targetOpacity = 0;
    fade('editOverlay');

    // Make fields uneditable and revert content   
    var editElements = getElementsByAttribute(document.body, "*", "data-supercellEditId", null);
    deactivateEdit(editElements);
    for(var i in editElements) {
        var editElement = editElements[i];
        //AJAX code to retrieve content from database
        getContent(editElement);
    }
}

function deactivateEdit(elems) {
    for(var i in elems) {
        var elem = elems[i];
        elem.contentEditable = "false";
        elem.style.outline = "";
        elem.style.backgound = "";
        elem.style.zIndex = "";
        elem.style.position = "";
    }
}

function getContent(elem) {
    var xmlHttpIndex = getXmlHttpObjectIndex();

    xmlHttpObjects[xmlHttpIndex].onreadystatechange = function() {
        if(xmlHttpObjects[xmlHttpIndex].readyState == 4) {
            elem.innerHTML = xmlHttpObjects[xmlHttpIndex].responseText;
        }
    };

    xmlHttpObjects[xmlHttpIndex].open("GET", "supercell/supercellEditLoad.php?contentId=" + elem.getAttribute("data-supercellEditId"), true);
    xmlHttpObjects[xmlHttpIndex].send(null);
}

function saveContent(elem) {
    var xmlHttpIndex = getXmlHttpObjectIndex();

    xmlHttpObjects[xmlHttpIndex].onreadystatechange = function() {
        if(xmlHttpObjects[xmlHttpIndex].readyState == 4) {
            elem.innerHTML = xmlHttpObjects[xmlHttpIndex].responseText;
        }
    };

    xmlHttpObjects[xmlHttpIndex].open("GET", "supercell/supercellEditSave.php?contentId=" + elem.getAttribute("data-supercellEditId") + "&contentHtml=" + encodeURIComponent(elem.innerHTML), true);
    xmlHttpObjects[xmlHttpIndex].send(null);
}

// Copypasta

fadeComplete  = 1;
targetOpacity = 0;
function fade(divName) {
    fadeComplete = 0;
    currentOp = document.getElementById(divName).style.opacity;
    if(currentOp < targetOpacity) {
        newOp = currentOp - -0.05;
    } else {
        newOp = currentOp - 0.05;
    }
    document.getElementById(divName).style.opacity = newOp;
    try { document.getElementById(divName).filters.alpha.opacity = (newOp * 100); }
    catch (e) {}
    
    funcName  = 'fade(\'' + divName + '\');';
    if (Math.abs(targetOpacity - newOp) > 0.05)  {
        setTimeout(funcName, 15);
    } else {
        document.getElementById(divName).style.opacity = targetOpacity;
        fadeComplete = 1;
        if(targetOpacity == 0) { document.getElementById(divName).style.display = 'none'; }
        try { document.getElementById(divName).filters.alpha.opacity = (targetOpacity * 100); }
        catch (e) {}
    }
}

slideComplete  = 1;
targetTop = 0;
function slide(divName) {
    slideComplete = 0;
    currentTop = document.getElementById(divName).style.top.replace(/px,*\)*/g,"");
    if(currentTop < targetTop) {
        newTop = currentTop - -3;
    } else {
        newTop = currentTop - 3;
    }
    document.getElementById(divName).style.top = newTop + "px";
    
    funcName  = 'slide(\'' + divName + '\');';
    if (Math.abs(targetTop - newTop) > 3)  {
        setTimeout(funcName, 15);
    } else {
        document.getElementById(divName).style.top = targetTop + "px";
        slideComplete = 1;
        if(targetTop == -25) { document.getElementById(divName).style.display = 'none'; }
    }
}



// Internet Copypasta Follows
 
function getElementsByAttribute(oElm, strTagName, strAttributeName, strAttributeValue){
    var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);
    var arrReturnElements = new Array();
    var oAttributeValue = (typeof strAttributeValue != "undefined")? new RegExp("(^|\\s)" + strAttributeValue + "(\\s|$)", "i") : null;
    var oCurrent;
    var oAttribute;
    for(var i = 0; i < arrElements.length; i++){
        oCurrent = arrElements[i];
        oAttribute = oCurrent.getAttribute && oCurrent.getAttribute(strAttributeName);
        if(typeof oAttribute == "string" && oAttribute.length > 0){
            if(strAttributeValue == null || typeof strAttributeValue == "undefined" || (oAttributeValue && oAttributeValue.test(oAttribute))){
                arrReturnElements.push(oCurrent);
            }
        }
    }
    return arrReturnElements;
}
