//======================= URL ENCODING =======================

if (typeof sessionTag == 'undefined') sessionTag = '';
var prefsCookieName = "savedPageLayout";
pageElements = ['accountMenu','linkMenu','profileMenu','messagesMenu','forumMenu','servicesMenu','bidsMenu','reportsMenu','newsMenu'];
// default menu visibility bitmap
var prefs = 510;

//======================= UTILITIES =======================

function include(filename)
{
    var script = document.createElement('script');
    script.src = filename;
    script.type = 'text/javascript';
    document.getElementsByTagName('head')[0].appendChild(script);
}

function addOnLoad(func) {
    attachEventListener(window, 'load', func);
}

function attachEventListener(el, event, func) {
    if (el.addEventListener){
        el.addEventListener(event, func, false); 
    } else if (el.attachEvent){
        el.attachEvent('on' + event, func);
    }
}

function detachEventListener(el, event, func) {
    if (el.removeEventListener){
        el.removeEventListener(event, func, false); 
    } else if (el.attachEvent){
        el.detachEvent('on' + event, func);
    }
}

function cE(elType, parent)
{
    var el = document.createElement(elType);
    if (parent) parent.appendChild(el);
    return el;
}

function windowPos() {
    var left = 0, top = 0;
    if (navigator.appVersion.toLowerCase().indexOf('msie') !=-1) {
      var iebody=(document.compatMode && document.compatMode != "BackCompat")? document.documentElement : document.body
      left=document.all? iebody.scrollLeft : pageXOffset
      top=document.all? iebody.scrollTop : pageYOffset
    } else {
        left = window.pageXOffset;
        top = window.pageYOffset;
    }
    return [left,top];
}
function elementPos(obj) {
  var curleft = 0, curtop = 0;
  if (obj.offsetParent) {
    do {
      curleft += obj.offsetLeft;
      curtop += obj.offsetTop;
    } while (obj = obj.offsetParent);
  }
  return [curleft,curtop];
}

//======================= ELEMENT DIMENSIONS =======================

function getHeight(el) {
    if (document.defaultView)
        return parseFloat(document.defaultView.getComputedStyle(el, null).getPropertyValue("height"));
    else 
        return (el.height?el.height:el.offsetHeight);
}

function getWidth(el) {
    if (document.defaultView)
        return parseFloat(document.defaultView.getComputedStyle(el, null).getPropertyValue("width"))
    else
        return (el.width?el.width:el.offsetWidth);
}

function checkBounds(value, lower, upper) {
    if (typeof(value)=="undefined" || value==null) value = lower;
    if (value>upper) value = upper;
    if (value<lower) value = lower;
    return value;
}

//======================= IMAGE ROLLOVERS =======================

function preloadImage(name, src, extension) {
    if (!extension) extension = "gif";
    command = "button_" + name + " = new Image(); button_" + name + ".src = '" + src + "." + extension + "';";
    eval(command);
    command = "button_" + name + "_selected = new Image(); button_" + name + "_selected.src = '" + src + "_selected." + extension + "';";
    eval(command);
}

function highlight(image) {
    image.src = eval("button_" + image.name + "_selected.src;");
}

function lowlight(image) {
    image.src = eval("button_" + image.name + ".src;");
}

function highlightByName(imageName) {
    eval("document.images['" + imageName + "'].src = button_" + imageName + "_selected.src;");
}

function lowlightByName(imageName) {
    eval("document.images['" + imageName + "'].src = button_" + imageName + ".src;");
}

//======================= COOKIES =======================

function getCookie(cookieName) {
    var cookies = document.cookie;
    var prefix = cookieName + "=";
    var begin = cookies.indexOf("; " + prefix);
    if (begin == -1) {
        begin = cookies.indexOf(prefix);
        if (begin != 0) return null;
    } else {
        begin += 2;
    }
    var end = document.cookie.indexOf(";", begin);
    if (end == -1) {
        end = cookies.length;
    }
    return unescape(cookies.substring(begin + prefix.length, end));
}

function setCookie(cookieName, cookieValue) {
    document.cookie = cookieName + "=" + cookieValue + "; path=/";
}

//======================= PREFERENCES =======================

attachEventListener(window, 'load', loadPrefs);
attachEventListener(window, 'unload', setPrefs);

function loadPrefs() {
    prefs = checkBounds(getCookie(prefsCookieName),0,1 << pageElements.length);
    // save div states from cookie
    for (i in pageElements) {
        loadPref(pageElements[i], 1 << i);
    }
}

function loadPref(divName, divBit) {
    if (prefs & divBit) {
    	hideDiv(divName);
    }
}

function setPrefs() {

    var oldPrefs = prefs;
    var newPrefs = 0;
    // save selected div states to cookie if changed
    for (i in pageElements) {
        //setPref(pageElements[i], 1 << i);
        if (!divIsVisible(pageElements[i])) newPrefs += 1 << i;
    }
    prefs = checkBounds(newPrefs,0,1 << pageElements.length);
    if (prefs!=oldPrefs) setCookie(prefsCookieName, prefs);
}

function setPref(divName, divBit) {
    if (!divBit) {
      for (i in pageElements) {
          if (pageElements[i] == divName) {
              divBit = 1 << i;
              break;
          }
      }
    }
    if (divBit && divExists(divName)) {
        if (prefs & divBit) {
            // if set to hide div
            if (divIsVisible(divName)) prefs = prefs - divBit;
        } else {
            // if set to show div
            if (!divIsVisible(divName)) prefs = prefs | divBit;
        }
    }
}

//======================= DIV VISIBILITY =======================

function divExists(divName) {
    if (document.getElementById(divName)) return true;
    return false;
}

function divIsVisible(divName) {
    if (divExists(divName)) {
        if (document.getElementById(divName).style.display != 'none') return true;
    }
    return false;
}

function toggleDiv(divName) { 
    showHideDiv(divName, divIsVisible(divName));
    //setPref(divName);
    setPrefs();
    return false;
}

function showHideDiv(divName, hide) {
    if (divExists(divName)) {
        document.getElementById(divName).style.display = (hide?'none':'block');
    }
    if (divExists(divName + 'Link')) {
        document.getElementById(divName + 'Link').style.display = (hide?'block':'none'); 
    }
    return false;
}

function hideDiv(divName) { 
    return showHideDiv(divName, true);
}

function showDiv(divName) { 
    return showHideDiv(divName, false);
}
