 /* globals */
String.trim = function(s) {
  if (s==null) {
    return s;
  }
  return s.replace(/^\s+/, "").replace(/\s+$/, "");
}

var CLGAM = {};

/*
  Spawn a popup. returns false to cancel the click.
  Usage:
  DEFAULT
    <a href="wacky.html"
       onclick="return a_popup(this)">
      Foo
    </a>
  Set width/height
    <a href="wacky.html"
       onclick="return a_popup(this, 200, 300)">
      Foo
    </a>

  Custom style - not resizeable
    <a href="wacky.html"
       onclick="return a_popup(this, 200, 300, 'titlebar,scrollbars=yes,resizable=no')">
      Foo
    </a>

  Custom style - and text
    <a href="wacky.html"
       onclick="return a_popup(this, 200, 300, 'titlebar,scrollbars=yes,resizable=no', 'doh')">
      Foo
    </a>
*/
function a_popup() {
  var a_element=null;
  var a_width=null;
  var a_height=null;
  var a_windowStyle=null;
  var a_customText=null;

  switch (a_popup.arguments.length) {
    case 5:
      a_customText = a_popup.arguments[4];
    case 4:
      a_windowStyle = a_popup.arguments[3];
    case 3:
      a_height = a_popup.arguments[2];
    case 2:
      a_width = a_popup.arguments[1];
    case 1:
      a_element = a_popup.arguments[0];
    default:
  }

  var aTarget = a_element.target;

  if (aTarget==null || aTarget=="") {
    aTarget = "pop";
  }

  /* Because we can't do real design work - only kludge things up */
  if (a_element.href!=null && a_element.href.match(/\/(fs|dar|floor_selector)\.asp/)) {
    aTarget = "eieio";
  }

  if (a_windowStyle==null) {
    a_windowStyle = "titlebar,scrollbars=yes,resizable=yes";
  }

  if (a_width==null || a_width <=0) {
    a_width=400;
  }
  if (a_height==null || a_height <=0) {
    a_height=400;
  }

  a_windowStyle+= (",left="+((screen.availWidth - a_width) / 2));
  a_windowStyle+= (",width="+a_width);

  a_windowStyle+= (",top="+(((screen.availHeight - a_height) / 2 ) - 30));
  a_windowStyle+= (",height="+a_height);

  var w;
  if (a_customText!=null) {
    w = window.open('', aTarget, a_windowStyle);
    try {
      w.document.close();
      w.document.open();
      w.document.writeln(a_customText);
      try {
        w.document.close();
      } catch(e){}
    } catch(e){}
  } else {
    w = window.open(a_element.href, aTarget, a_windowStyle);
  }

  try {
    w.focus();
  } catch(e){}

  return false;
}



CLGAM.Cookie = {};

/**
 * Sets a Cookie with the given name and value.
 *
 * name       Name of the cookie
 * value      Value of the cookie
 * [path]     Path where the cookie is valid (default: path of calling document)
 * [expires]  Expiration date of the cookie (default: end of current session)
 * [domain]   Domain where the cookie is valid
 *              (default: domain of calling document)
 * [secure]   Boolean value indicating if the cookie transmission requires a
 *              secure transmission
 */
CLGAM.Cookie.set = function(name, value, path, expires, domain, secure) {
    document.cookie= name + "=" + encodeURIComponent(value) +
        ((expires) ? "; expires=" + expires.toGMTString() : "") +
        ((path) ? "; path=" + path : "") +
        ((domain) ? "; domain=" + domain : "") +
        ((secure) ? "; secure" : "");
}

/**
 * Gets the value of the specified cookie.
 * Returns null if cookie does not exist.
 */
CLGAM.Cookie.get = function(name) {
  try {
    var cookies = document.cookie;
    var index = cookies.indexOf(name + "=");
    if (index == -1) return null;
    index = cookies.indexOf("=", index) + 1;
    var endstr = cookies.indexOf(";", index);
    if (endstr == -1) endstr = cookies.length;
    return decodeURIComponent(cookies.substring(index, endstr));
  } catch(e) {}
  return null;
}

/**
 * Deletes the specified cookie.
 * delete is areserved word in javascript
 *
 * name      name of the cookie
 * [path]    path of the cookie (must be same as path used to create cookie)
 */
CLGAM.Cookie.remove = function (name, path) {
    if (CLGAM.Cookie.get(name)) {
        document.cookie = name + "=" +
            ((path) ? "; path=" + path : "") +
            "; expires=Thu, 01-Jan-70 00:00:01 GMT";
    }
}


CLGAM.Menu = {};
CLGAM.Menu.startList=function(){
  if (document.all&&document.getElementById&&window.mainMenuBar){
    // Add a shim to hide select items for drop down menus.
    if (navigator.appVersion.substr(22,3)!="5.0")
      window.mainMenuBar.innerHTML=('<iframe id="menushim" src="about:blank" scrolling="no" frameborder="0" style="position:absolute;display:none;filter: progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0);"></iframe>' + window.mainMenuBar.innerHTML);
    navRoot=document.getElementById("mainMenu");
    for (i=0;i<navRoot.childNodes.length;i++){
      node=navRoot.childNodes[i];
      if (node.nodeName=="LI"&&node.getElementsByTagName("UL").length>0){
        node.onmouseover=function(){
          if(this.className.indexOf("over")==-1){
            this.className+=" over";
            CLGAM.Menu.hideDropdowns(this.getElementsByTagName("UL")[0],true);
          }
        }
        node.onmouseout=function(){
          if(!CLGAM.Menu.isInParent(event.toElement, this)){
            this.className=this.className.replace(" over","");
            CLGAM.Menu.hideDropdowns(this.getElementsByTagName("UL")[0],false);
          }
        }
      }
    }
  }
}
CLGAM.Menu.isInParent = function(el, parent){
  if (!el || ! parent)
    return false;

  var aEls=parent.getElementsByTagName(el.tagName)
  if (!aEls)
      return false;
  if(aEls.length==0)
    return false;
  for(var i=0;i<aEls.length;i++){
    if(el==aEls[i])
      return true;
  }
  return false;
}
CLGAM.Menu.hideDropdowns = function(obj, bool){
  if (navigator.appVersion.substr(22,3)=="5.0"){
    if(bool)
      CLGAM.Menu.hideSelects();
    else
      CLGAM.Menu.showSelects();
    return;
  }
  var mnuShim=document.getElementById("menushim");
  if(bool){
    mnuShim.style.left=CLGAM.Menu.getPageOffsetLeft(obj)+"px";
    mnuShim.style.top=CLGAM.Menu.getPageOffsetTop(obj)+"px";
    mnuShim.style.width=obj.offsetWidth+"px";
    mnuShim.style.height=obj.offsetHeight+"px";
    obj.style.zIndex="101";
    mnuShim.style.zIndex="0";
    mnuShim.style.display="block";
  } else
    mnuShim.style.display="none";
}
CLGAM.Menu.getPageOffsetLeft=function (el){
  var x;
  x=el.offsetLeft;
  if (el.offsetParent!=null)
    x+=CLGAM.Menu.getPageOffsetLeft(el.offsetParent);
  return x;
}
CLGAM.Menu.getPageOffsetTop = function(el){
  var y;
  y=el.offsetTop;
  if (el.offsetParent!=null)
    y+=CLGAM.Menu.getPageOffsetTop(el.offsetParent);
  return y;
}
CLGAM.Menu.hideSelects = function(){
  var oSelects=document.getElementsByTagName("select");
  for(var i=0;i<oSelects.length;i++)
    oSelects[i].className+=" hide";
}
CLGAM.Menu.showSelects = function(){
  var oSelects=document.getElementsByTagName("select");
  for(var i=0;i<oSelects.length;i++)
    oSelects[i].className=oSelects[i].className.replace(" hide","");
}
CLGAM.Menu.addEvent = function(obj, evType, fn) {
  // adds an eventListener for browsers which support it
  // Written by Scott Andrew: nice one, Scott
  if (obj.addEventListener){
    obj.addEventListener(evType,fn,true);
    return true;
  } else if (obj.attachEvent){
    var r = obj.attachEvent("on"+evType,fn);
    return r;
  } else {
    return false;
  }
}

CLGAM.Menu.addEvent(window,"load",CLGAM.Menu.startList);

CLGAM.updateCartCount = function updateCartCount() {
  var opt = {
    method: 'post',
    onSuccess: function(t) {
      $('cartCount').innerHTML  = String.trim(t.responseText);
      CLGAM.Cookie.set('cartCount', String.trim(t.responseText), '/commclgam');
      CLGAM.Cookie.remove('CART_UPDATE', '/commclgam');
    }
  }

  new Ajax.Request('cart-count.content', opt);
}


/* for focus fun */
CLGAM.hack1 =  function() {
    try {
    var x = function(inputs) {
      for (var i=0; i<inputs.length; i++) {
        if (!inputs[i].type.match(/(button|radio|check|image)/)) {
          inputs[i].onfocus=function() {
            this.className+=" focussy";
          }
          inputs[i].onblur=function() {
            this.className=this.className.replace(new RegExp(" focussy\\b"), "");
          }
        }
      }
    }
    x(document.getElementById("content").getElementsByTagName("INPUT"));
    x(document.getElementById("content").getElementsByTagName("TEXTAREA"));
    x(document.getElementById("content").getElementsByTagName("SELECT"));
  } catch(aintsupported) {
  }
}
/* Set focus on first visible text field */
CLGAM.skipHack2 = false;
CLGAM.hack2 =  function() {
  if(CLGAM.skipHack2) {
    return;
  }
    try {
    var x = function(inputs) {
      for (var i=0; i<inputs.length; i++) {
        if (inputs[i].type.match(/text/i)) {
          inputs[i].focus();
          return;
        }

      }
    }
    x(document.getElementById("content").getElementsByTagName("INPUT"));
  } catch(aintsupported) {
  }
}

if (window.attachEvent) window.attachEvent("onload", CLGAM.hack1);
Event.observe(window, "load", CLGAM.hack2);

CLGAM.setFocusOnLoad = function(fieldName) {
  CLGAM.skipHack2 = true;
  var f = function() {
    var nodes = document.getElementById("content").getElementsByTagName("SELECT");
    for (var i=0; i<nodes.length; i++) {
      if (fieldName == nodes[i].name) {
        nodes[i].focus();
        return;
      }
    }
    nodes = document.getElementById("content").getElementsByTagName("INPUT");
    for (var i=0; i<nodes.length; i++) {
      if (fieldName == nodes[i].name) {
        nodes[i].focus();
        return;
      }
    }
  }
  Event.observe(window, "load", f);
};


