var xmlhttp;
var atimeout;
var _oldx = 0;
var _oldy = 0;
var _offsetx = 100;
var _offsety = 150;
var response = "";
var latestview = 4;
var latestviewdefault = 4;
var announceview = 1;
var lateststate = 1;
var announceMax = 1;
var announceviewdefault = 1;
var announcementstate = 0;
var eventview = 1;
var eventviewdefault = 1;
var eventMax = 1;
var enableTabNav = 1;
var tabover = false;
var tabHoverTimeout = 0;
var SidebarScheme = 0;
var menu;
var expire = new Date();
var today = new Date();
var refreshingAnnouncements = false;
var text1 = "";
var text2 = "";
var text3 = "";
var closingPrefs = false;
var thePoll;
var sendingEmail = false;
var loaded = false;
var cm;
function CookieManager() {
    var _objdata = Object();
    var _expiry;
    function cookieManager() {
        var date = new Date();
        date.setTime(date.getTime() + (7 * 24 * 60 * 60 * 1000));
        _expiry = date.toGMTString();
    }
    function createObject(objname) {
        var tmp = Object();
        _objdata[objname] = tmp;
    }
    function getObject(name) {
        if (typeof(_objdata[name]) == "undefined") {
            return false;
        } else {
            return _objdata[name];
        }
    }
    function addParam(obj, paramname) {
        if ((typeof(_objdata[obj]) == "undefined") || (typeof(paramname) != "string")) {
            return false;
        }
        _objdata[obj][paramname] = "";
    }
    function setValue(obj, param, value) {
        if ((typeof(_objdata[obj]) == "undefined") || (typeof(_objdata[obj][param]) == "undefined")) {
            return false;
        }
        _objdata[obj][param] = value;
    }
    function getValue(obj, param) {
        if ((typeof(_objdata[obj]) == "undefined") || (typeof(_objdata[obj][param]) == "undefined")) {
            return false;
        }
        return _objdata[obj][param];
    }
    function setExpiryDate(days) {
        if (arguments.length > 0) {
            var d = new Date();
            d.setTime(d.getTime() + (days * 24 * 60 * 60 * 1000));
            _expiry = d.toGMTString();
        }
    }
    function write() {
        var cdata = "";
        for (var obj in _objdata) {
            if (obj !== undefined) {
                cdata += "fp_" + obj + "=";
                for (var param in _objdata[obj]) {
                    if (param != null && param !== undefined) {
                        cdata += escape(param + "," + _objdata[obj][param] + "--");
                    }
                }
                if (cdata.substr(cdata.length - 2, 2) == "--") {
                    cdata = cdata.substr(0, cdata.length - 2);
                }
                cdata += "; expires=" + _expiry + "; path=/";
                document.cookie = cdata;
                cdata = "";
            }
        }
    }
    function read() {
        var cdata = document.cookie;
        var odata = Object();
        var end = 0;
        var offset = 0;
        var objname = "";
        var paramstr = "";
        while (cdata.length > 0) {
            end = cdata.indexOf("=");
            if (end == -1) {
                return false;
            }
            objname = cdata.substring(offset, end);
            if ("fp_" == objname.substring(0, 3)) {
                objname = objname.substring(3, objname.length);
                odata[objname] = Object();
                offset = end + 1;
                end = cdata.indexOf(";", offset);
                if (end == -1) {
                    end = cdata.length;
                }
                paramstr = unescape(cdata.substring(offset, end));
                paramstr = paramstr.split("--");
                for (var i = 0; i < paramstr.length; i++) {
                    var pair = paramstr[i].split(",");
                    if (pair[1] != null && pair[1] !== undefined) {
                        odata[objname][pair[0]] = pair[1];
                    }
                }
            } else {
                offset = end + 1;
                end = cdata.indexOf(";", offset);
                if (end == -1) {
                    end = cdata.length;
                }
            }
            cdata = cdata.substring(end + 2, cdata.length);
            end = 0;
            offset = 0;
        }
        var c = 0;
        for (var e in odata) {
            c++;
        }
        if (c > 0) {
            _objdata = odata;
        }
    }
    this.createObject = createObject;
    this.getObject = getObject;
    this.addParam = addParam;
    this.setValue = setValue;
    this.getValue = getValue;
    this.write = write;
    this.read = read;
    this.setExpiryDate = setExpiryDate;
    cookieManager();
}
function setupGhcEvents() {
    if (arguments.callee.done) {
        return;
    }
    arguments.callee.done = true;
    cm = new CookieManager();
    cm.read();
    menu = new GHCMenu("sidebar", "expandAll", "collapseAll");
    setupSidebarToggles();
    loadViewPrefs();
    loaded = true;
}
function loadViewPrefs() {
    if (cm.getObject("Sidebar")) {
        SidebarScheme = Number(cm.getValue("Sidebar", "ColourScheme"));
        if (SidebarScheme == "NaN") {
            SidebarScheme = 0;
        }
        if (getElemById("main-sidebar") != null) {
            if (SidebarScheme == 1) {
                getElemById("main-sidebar").className = "darkSidebar";
            } else {
                getElemById("main-sidebar").className = "lightSidebar";
            }
        }
    }
}

function GHCMenu(listElem, expandTrigger, collapseTrigger) {
    var _me = this;
    var _rootNode;
    function _elemFromE(e) {
        if (e.target) {
            return e.target;
        } else if (e.srcElement) {
            return e.srcElement;
        } else {
            return false;
        }
    }
    function _collapseItem(pelem) {
        if (pelem.className == "ghcMenuToggleOpen") {
            var node = getElemById(pelem.id + "_content");
            if (node.className == "ghcMenuOpen") {
                node.className = "ghcMenuClosed";
            }
            pelem.className = "ghcMenuToggle";
            pelem.menuState = 0;
        }
    }
    function _expandItem(pelem) {
        if (pelem.className == "ghcMenuToggle") {
            var node = getElemById(pelem.id + "_content");
            if (node.className == "ghcMenuClosed") {
                node.className = "ghcMenuOpen";
            }
            pelem.className = "ghcMenuToggleOpen";
            pelem.menuState = 1;
        }
    }
    function _clickHandler(e) {
        if (!e) {
            e = window.event;
        }
        e.cancelBubble = true;
        var elem = _elemFromE(e);
        if (e.stopPropagation) {
            e.stopPropagation();
        }
        var x = 0;
        var y = 0;
        if (e.layerX) {
            x = e.layerX;
        }
        if (e.offsetX) {
            x = e.offsetX;
        }
        if (e.layerY) {
            y = e.layerY;
        }
        if (e.offsetY) {
            y = e.offsetY;
        }
        switch (elem.menuState) {case 0:_expandItem(elem);break;case 1:_collapseItem(elem);break;}
        return false;
    }
    function collapseAll() {
        var items = _rootNode.getElementsByTagName("a");
        for (var i = 0; i < items.length; i++) {
            if ((items[i].className == "ghcMenuToggleOpen") && (items[i].menuState != 2)) {
                _collapseItem(items[i]);
            }
        }
        return false;
    }
    function expandAll() {
        var items = _rootNode.getElementsByTagName("a");
        for (var i = 0; i < items.length; i++) {
            if ((items[i].className == "ghcMenuToggle") && (items[i].menuState != 2)) {
                _expandItem(items[i]);
            }
        }
        return false;
    }
    function loadSettings() {
        var menudata = cm.getObject("ghcmenu");
        for (var item in menudata) {
            if (getElemById(item) != null) {
                switch (parseInt(menudata[item], 0)) {case 0:_collapseItem(getElemById(item));break;case 1:_expandItem(getElemById(item));break;default:_expandItem(getElemById(item));break;}
            }
        }
    }
    function saveSettings() {
        cm.createObject("ghcmenu");
        if(_rootNode != null) {
        var nodes = _rootNode.childNodes;
        for (var i = 0; i < nodes.length; i++) {
            if (nodes[i].className == "ghcMenuToggle" || nodes[i].className == "ghcMenuToggleOpen") {
                cm.addParam("ghcmenu", nodes[i].id);
                cm.setValue("ghcmenu", nodes[i].id, nodes[i].menuState);
            }
        }
            }
    }
    function ghcMenu(listElem, expandTrigger, collapseTrigger) {
        _rootNode = listElem;
        var items = listElem.getElementsByTagName("a");
        for (var i = 0; i < items.length; i++) {
            if (items[i].className == "ghcMenuToggleOpen") {
                items[i].onclick = _clickHandler;
                items[i].menuState = 1;
            }
            if (items[i].id.substring(0, 9) == "Ads_Count") {
                items[i].style.display = "none";
            }
        }
        if (expandTrigger != null) {
            expandTrigger.onclick = expandAll;
        }
        if (collapseTrigger != null) {
            collapseTrigger.onclick = collapseAll;
        }
        loadSettings();
    }
    function resetSettings() {
        alert("reset");
        cm.createObject("ghcmenu");
        var nodes = _rootNode.childNodes;
        for (var i = 0; i < nodes.length; i++) {
            if (nodes[i].className == "ghcMenuToggle") {
                cm.addParam("ghcmenu", nodes[i].id);
                cm.setValue("ghcmenu", nodes[i].id, 1);
                nodes[i].style.display = "block";
                nodes[i].menuState = 1;
                _expandItem(nodes[i]);
            }
        }
    }
    this.expandAll = expandAll;
    this.collapseAll = collapseAll;
    this.loadSettings = loadSettings;
    this.saveSettings = saveSettings;
    this.resetSettings = resetSettings;
    if (getElemById(listElem) != null) {
        expandTrigger = (getElemById(expandTrigger) != null)?getElemById(expandTrigger):null;
        collapseTrigger = (getElemById(collapseTrigger) != null)?getElemById(collapseTrigger):null;
        ghcMenu(getElemById(listElem), expandTrigger, collapseTrigger);
    }
}
function setupSidebarToggles() {
    trapEvent("MyGhcToggleLink", "onclick", "toggleMyGetHomeCare();");
    //    trapEvent("resetMenu", "onclick", "menu.resetSettings();");
    //    trapEvent("enableAnnouncement", "onclick", "resetAnnouncement();");
    trapEvent("toggleSidebarColours", "onclick", "toggleSidebarScheme();");
}
function trapEvent(object, tevent, tfunction) {
    if (getElemById(object) != null) {
        eval("getElemById(object)." + tevent + " = function(e) {" + tfunction + " return false;};");
    }
}
function toggleSidebarScheme() {
    getElemById("main-sidebar").className = (getElemById("main-sidebar").className == "lightSidebar")?"darkSidebar":"lightSidebar";
    SidebarScheme = (getElemById("main-sidebar").className == "lightSidebar")?0:1;
    cm.createObject("Sidebar");
    cm.addParam("Sidebar", "ColourScheme");
    cm.setValue("Sidebar", "ColourScheme", SidebarScheme);
}

function toggleMyGetHomeCare() {
    var cookieValue = ((GetMyToggle() === 0)?1:0);
    today = new Date();
    expire = new Date();
    expire.setTime(today.getTime() + 3600000 * 24 * 365);
    document.cookie = "gethomecare=" + cookieValue + ";expires=" + expire.toGMTString();
    //    checkCreateRequest();
    //    xmlhttp.readyfunction = handleMyNeowinResponse;
    //    sendRequest('index.php?act=my_menu_reload', '');
}
function GetMyToggle() {
    var name = "gethomecare";
    var start = document.cookie.indexOf(name + "=");
    var len = start + name.length + 1;
    if ((!start) && (name != document.cookie.substring(0, name.length))) {
        return 0;
    }
    if (start == -1) {
        return 0;
    }
    var end = document.cookie.indexOf(";", len);
    if (end == -1) {
        end = document.cookie.length;
    }
    return Number(document.cookie.substring(len, end));
}

function externalLinks() {
    if (!document.getElementsByTagName)return;
    var anchors = document.getElementsByTagName("a");
    for (var i = 0; i < anchors.length; i++) {
        var anchor = anchors[i];
        if (anchor.getAttribute("href") && anchor.getAttribute("rel") == "external")anchor.target = "_blank";
    }
}
var GHColdload = window.onload;
var GHColdunload = window.onunload;
window.onload = function(e) {
    externalLinks();
    setupGhcEvents(e);
    if (typeof(GHColdload) == "function") {
        GHColdload(e);
    }
};
window.onunload = function(e) {
    cleanupNeoData();
    if (typeof(GHColdunload) == "function") {
        GHColdunload(e);
    }
};
function cleanupNeoData() {
    if (loaded) {
        storeTogglePrefs();
        storeViewPrefs();
        menu.saveSettings();
        cm.write();
    }
}
function storeTogglePrefs() {
    cm.setExpiryDate(28);
    cm.createObject("togglebar");
    cm.addParam("togglebar", "latest");
    cm.setValue("togglebar", "latest", lateststate);
    cm.addParam("togglebar", "announcement");
    cm.setValue("togglebar", "announcement", announcementstate);
}
function storeViewPrefs() {
    cm.setExpiryDate(28);
    cm.createObject("LatestView");
    cm.addParam("LatestView", "latest");
    cm.setValue("LatestView", "latest", latestviewdefault);
    cm.addParam("LatestView", "event");
    cm.setValue("LatestView", "event", eventviewdefault);
    cm.addParam("LatestView", "announcement");
    cm.setValue("LatestView", "announcement", announceviewdefault);
    cm.addParam("LatestView", "enableTabNav");
    cm.setValue("LatestView", "enableTabNav", enableTabNav);
    cm.createObject("Sidebar");
    cm.addParam("Sidebar", "ColourScheme");
    cm.setValue("Sidebar", "ColourScheme", SidebarScheme);
}
function emailPoster() {
    var str = "<form action=\"javascript:getEmail(getElemById('emailForm'))\" name=\"emailForm\" id=\"emailForm\">\n" +
              "<input type=\"hidden\" name=\"act\" value=\"email_newsposter\" />\n" +
              "<input type=\"hidden\" name=\"nid\" value=\"\" />\n" +
              "<input type=\"hidden\" name=\"id\" value=\"\" />\n" +
              "<label for=\"sndr_name\">Your name: </label><input type=\"text\" size=30 maxlength=\"30\" name=\"sndr_name\" value=\"Guest\" class=\"form\" /><br />\n" +
              "<label for=\"sndr_email\">Your email: </label><input type=\"text\" size=30 maxlength=\"30\" name=\"sndr_email\" value=\"\" class=\"form\" /><br />\n" +
              "<label for=\"einfo\">Extra info: </label><textarea wrap='soft' rows=\"10\" cols=\"65\" name=\"einfo\" value=\"\" class=\"form\"></textarea><br />\n" +
              "<input type=\"submit\" name=\"submit\" value=\" Send \" class=\"fauxbutton\" /> <input type=\"button\" class=\"fauxbuttonr\" name=\"close\" value=\" Cancel \" onclick=\"getElemById('ghcPrefs').style.display = 'none';\" />\n" +
              "</form>";
    var winWhat = new Window('Email Poster', {className: "mac_os_x", wiredDrag:true, maximizable:false, minimizable:true, showEffect:Element.show, hideEffect:Element.hide, title: "Send Email", width:600, height:200});
    content = "<div class=\"newsitem-content\">" + str + "</div>";
    winWhat.getContent().update(content);
    winWhat.setDestroyOnClose();
    winWhat.showCenter();
}
