    var djConfig = { isDebug:false, parseOnLoad:true };

    var adminMode = false;
    var adminAnim;
    var adminLock = false;
    var dataMenuOne = false;    //for nested dMenus
    var dataMenuTwo = false;
    var dForm;
    var got = new Array(); // the got array

    Shadowbox.loadSkin('classic', '/css/shadowbox-2.0/src/skin');
    Shadowbox.loadLanguage('en', '/css/shadowbox-2.0/build/lang');
    Shadowbox.loadPlayer(['flv', 'html', 'iframe', 'img', 'qt', 'swf', 'wmp'], '/css/shadowbox-2.0/build/player');

    function init() {
      bd = document.getElementById( 'websiteBody' );
      bg = document.getElementById( 'stage' );
      bg.style.height = bd.offsetHeight + 'px';
    }

    function showDialog(t, url) {
      dForm.hide();
      dForm.titleNode.innerHTML = t;

      var kw = {
              url: url,
              load: function(responseObject) {
                //dForm.destroyDescendants();
                dForm.setContent(responseObject.buffer);
								dPreview.hide();
                return responseObject;
              },
              error: function(data){ console.debug("An error occurred: ", data); },
              timeout: 20000,
              handleAs: "json-comment-filtered"
      };
      dojo.xhrGet(kw);

      dForm.show();
    }

		function popup(title, url) {
      dPreview.hide();
      dPreview.titleNode.innerHTML = title;
      dojo.xhrGet({
              url: url,
              load: function(responseObject) {
								//dPreview.destroyDescendants();
                dPreview.setContent(responseObject.buffer);
                return responseObject;
              },
              error: function(data){ console.debug("An error occurred: ", data); },
              timeout: 20000,
              handleAs: "json-comment-filtered"
      });
      dPreview.show();
			got = [];
		}

    function refreshData(dataid) {
      var dat = dijit.byId('data' + dataid);
      Shadowbox.clearCache();
      xhrLoad('data' + dataid, '/widget/data/' + dataid);
      adminAnim = dojo.query(".adminHide").wipeIn({ duration: 500 }).play();
      got = [];
      init();
    }

    function xhrLoad(id, url) {
      dojo.query('#' + id).addClass('expired');
      var kw = {
              url: url,
              load: function(responseObject) {
                var dat = dijit.byId(id);
                if(dat) {
                  dat.destroyDescendants();
                  dat.setContent(responseObject.buffer);
                  Shadowbox.setup();
                  got[url] = true;
                }
                dojo.query('#' + id).removeClass('expired');
                if(adminMode == true) dojo.query(".adminHide").style("display", "block");
                init(); //Restretch the skin
                return responseObject;
              },
              error: function(data){ console.debug("An error occurred: ", data); },
              timeout: 2000,
              handleAs: "json-comment-filtered"
      };
      dojo.xhrPost(kw);
    }

    function showDataMenu(id) {
      if(adminMode) {
        if(!got['/widget/menu/' + id]) xhrLoad('data' + id + 'm', '/widget/menu/' + id);
        datid = 'data' + id + 'menu';
        if(!dataMenuOne) {
          dataMenuOne = datid;
        } else if(!dataMenuTwo) dataMenuTwo = datid;
        dojo.query('#' + datid).style('display', 'block');
        if(dataMenuOne && dataMenuTwo) dojo.query('#' + dataMenuTwo).style('display', 'none');
      }
    }

    function hideDataMenu(id) {
      datid = 'data' + id + 'menu';
      tvOff(datid);
      if(dataMenuOne == datid) dataMenuOne = false; //check for nested
      if(dataMenuTwo == datid) dataMenuTwo = false;
    }

    function xhrForm(fm, url) {
      var kw = {
              url: url,
              load: function(responseObject, ioArgs) {
                  if(responseObject) xhrFormDataHandler(responseObject, ioArgs, fm);
                },
              error: function(data){ console.debug("An error occurred: ", data);},
              timeout: 120000,
              form: fm,
              handleAs: "json-comment-filtered"
      };
      dojo.xhrPost(kw);
    }

    function xhrIframeForm(fm, url) {
      var kw = {
              url: url,
              load: function(responseObject, ioArgs) {
                if(responseObject) {
                  var data = dojo.fromJson(responseObject);
                  dijit.byId(fm).destroyDescendants();
                  xhrFormDataHandler(data, ioArgs, fm);
                }
                },
              error: function(data){ console.debug("An error occurred: ", data);},
              timeout: 120000,
              form: fm,
              handleAs: "json-comment-filtered"
      };
      dojo.io.iframe.send(kw);
    }

    function xhrFormDataHandler(responseObject, ioArgs, fm) {
      dojo.query('#' + fm + ' .onformloadShow').style('display', 'block');
      dojo.query('#' + fm + ' .onformloadHide').style('display', 'none');
      if(responseObject.done == true) setTimeout("dForm.hide()", 2000);
      if(responseObject.refreshid) refreshData(responseObject.refreshid);
      if(responseObject.errors) {
        for(var i in responseObject.errors) {
          var eid = responseObject.errors[i].id + 'e';
          var emsg = responseObject.errors[i].value;
          //console.debug(eid + ' ' + emsg);
          if(dojo.byId(eid)) {
            if(emsg == false) {
              if(dojo.query('#' + eid).style('display') != 'none') dojo.query('#' + eid).wipeOut({ duration: 250 }).play();
            } else {
              dojo.byId(eid).innerHTML = emsg;
              if(dojo.query('#' + eid).style('display') == 'none') {
                dojo.query('#' + eid).removeClass('hide');
                dojo.query('#' + eid).style('height', '1px');
                dojo.query('#' + eid).wipeOut({ duration: 250 }).stop();
                dojo.query('#' + eid).wipeIn({ duration: 250 }).play();
              }
            }
          }
        }
      } else if(responseObject.buffer) {
          dForm.destroyDescendants(); //- causes the function to self-destruct in Opera
          dForm.setContent(responseObject.buffer);
          return responseObject.buffer;
      }
      return responseObject;
    }








    function adminToggle() {
      if(!adminLock) {
        if(adminMode == true) {
          dojo.query(".adminHide").style("display", "none");
          dojo.cookie("adminMode", "false", {path: '/'});
          adminMode = false;
        } else {
          dojo.query(".adminHide").style("display", "block");
          dojo.cookie("adminMode", "true", {path: '/'});
          adminMode = true;
        }
      }
    }


function xmlhttpPost(strURL, query, targetId) {
    var xmlHttpReq = false;
    var self = this;
    // Mozilla/Safari
    if (window.XMLHttpRequest) {
        self.xmlHttpReq = new XMLHttpRequest();
    }
    // IE
    else if (window.ActiveXObject) {
        self.xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
    }
    self.xmlHttpReq.open('POST', strURL, true);
    self.xmlHttpReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    self.xmlHttpReq.onreadystatechange = function() {
        if (targetId && self.xmlHttpReq.readyState == 4) {
            updatepage(self.xmlHttpReq.responseText, targetId);
        }
    }
    self.xmlHttpReq.send(query);
}

function xmlhttpPostGetValue(strURL, query, targetId) {
    var xmlHttpReq = false;
    var self = this;
    // Mozilla/Safari
    if (window.XMLHttpRequest) {
        self.xmlHttpReq = new XMLHttpRequest();
    }
    // IE
    else if (window.ActiveXObject) {
        self.xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
    }
    self.xmlHttpReq.open('POST', strURL, true);
    self.xmlHttpReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    self.xmlHttpReq.onreadystatechange = function() {
        if (targetId && self.xmlHttpReq.readyState == 4) {
            document.getElementById(targetId).value = self.xmlHttpReq.responseText;
            document.getElementById(targetId).onchange();
        }
    }
    self.xmlHttpReq.send(query);
}

function updatepage(str, targetId){
    document.getElementById(targetId).innerHTML = str;
    init();
}

function SetCookie(cookieName,cookieValue,nSec) {
 var today = new Date();
 var expire = new Date();
 if (nSec==null || nSec==0) nSec=1;
 expire.setTime(today.getTime() + 1000*nSec);
 document.cookie = cookieName+"="+escape(cookieValue)
                 + ";expires="+expire.toGMTString();
}

function GetCookie(name) {
    var dc = document.cookie;
    var prefix = name + "=";
    var begin = dc.indexOf("; " + prefix);
    if (begin == -1) {
        begin = dc.indexOf(prefix);
        if (begin != 0) return null;
    } else {
        begin += 2;
    }
    var end = document.cookie.indexOf(";", begin);
    if (end == -1) {
        end = dc.length;
    }
    return unescape(dc.substring(begin + prefix.length, end));
}

function dDisable( targetId ) { //delayed disable
  setTimeout("disable('"+targetId+"')", 1);
  }

function disable( targetId ){
  if (document.getElementById){
        target = document.getElementById( targetId );
           if (target.disabled == true){
              target.disabled = false;
           } else {
              target.disabled = true;
           }
     }
}

function tv( targetId ){
  if (document.getElementById){
        target = document.getElementById( targetId );
           if (target.style.display == "none"){
              target.style.display = "block";
           } else {
              target.style.display = "none";
           }
     }
}

function tvOn( targetId ){
  if (document.getElementById){
        target = document.getElementById( targetId );
        target.style.display = "block";
     }
}

function tvOni( targetId ){
  if (document.getElementById){
        target = document.getElementById( targetId );
        target.style.display = "inline";
     }
}

function tvOff( targetId ){
  if (document.getElementById){
        target = document.getElementById( targetId );
        if(target) target.style.display = "none";
     }
}

function wipeIn( targetId ) {
    dojo.query('#' + targetId).wipeOut({ duration: 500 }).stop();
    dojo.query('#' + targetId).removeClass('hide');
    //dojo.query('#' + targetId).style('height', '1px');
    dojo.query('#' + targetId).wipeIn({ duration: 500 }).play();
    }

function wipeOut( targetId ) {
    dojo.query('#' + targetId).wipeOut({ duration: 500 }).play();
    }

function tvOffd ( targetId ) {
  setTimeout("tvOff('"+targetId+"')", 800);
}

function tvpOn( targetId, self ){
  if (document.getElementById){
        target = document.getElementById( targetId );
        target.style.display = "block";
        target.style.top = (findPosY(self)+self.height) + 'px';
        target.style.left = (findPosX(self)) + 'px';
     }
}

function charcount(target, max, report) {
  if(target.value.length > max) target.value = target.value.substring(0, max);
  if(report && target) {
    updatepage(target.value.length + ' out of ' + max + ' characters', report);
    if(target.value.length > max*.8) {
      tvOn(report+'w');
      init();
      }
  }
}

function formedit(id) {
  //alert(id);
  dojo.query('#' + id).addClass('edit');
  dojo.query('#' + id).removeClass('good');
  dojo.query('#' + id).removeClass('bad');
}

function formvalidate(id, pattern) {
  if(id && pattern) {
    target = document.getElementById(id);
    //pat = new RegExp(pattern, 'i');
    if (target.value.match(pattern)) {
      dojo.query('#' + id).addClass('good');
      tvOff(id+'e');
    } else {
      dojo.query('#' + id).addClass('bad');
    }
  } else {
    dojo.query('#' + id).removeClass('edit');
  }
}








function insertAtCursor(targetId, myValue) {

  myField = document.getElementById( targetId );

  //IE support

  if (document.selection) {

    myField.focus();

    sel = document.selection.createRange();

    sel.text = myValue;

  }

  //MOZILLA/NETSCAPE support

  else if (myField.selectionStart || myField.selectionStart == '0') {

    var startPos = myField.selectionStart;

    var endPos = myField.selectionEnd;

    myField.value = myField.value.substring(0, startPos)

                  + myValue

                  + myField.value.substring(endPos, myField.value.length);

  } else {

    myField.value += myValue;

  }

}