/* DO NOT EDIT -- This file is auto-generated. */

/* BEGIN /imvu/website/catalog/includes/zaptophone.js */
//this file gets used by both web pages and flash (actionscript)... so dont put any HTML specifics in here!

function imvu_zap(url, name, refid, single) {
	var name = typeof name != 'undefined'? name : "";
	var refid = typeof refid != 'undefined' ? refid : "";
	var single = typeof single != 'undefined'? single : "";

	var escUrl = escape(url);
	var escName = escape(name);
	var escRefId = escape(refid);
	var escSingle = escape(single);
	var url = "http://cart.zaptophone.com/zc/app?service=external/mlink&sp=S" + escUrl + "&sp=S" + escName + "&sp=S" + escRefId + "&sp=S" + escSingle;
        return url;
}

/* BEGIN /imvu/website/catalog/includes/jt_utils-v3.js */
/**
 * jt_utils.js - Misc. JavaScript utility functions
 *
 * @version 22 Sep 2005
 * @author  Joseph Oster, wingo.com
 */

/* GENERIC FUNCTIONS */
String.prototype.trim = function () {
  return this.replace(/^\s+/g, '').replace(/\s+$/g, '');
  }

function jt_ShowHideElm(elm, showIt) {
  if (elm) elm.style.visibility = (showIt) ? "visible" : "hidden";
  }

function jt_ShowNoneElm(elm, showIt, showStyle) {
  if (!showStyle) showStyle = "";
  if (elm) elm.style.display = (showIt) ? showStyle : "none";
  }

function jt_ShowHide(divName, showIt) {
  jt_ShowHideElm(document.getElementById(divName), showIt);
  }

function jt_ShowNone(divName, showIt, showStyle) {
  jt_ShowNoneElm(document.getElementById(divName), showIt, showStyle);
  }


/********** BEGIN: Event handling **********/
function jt_AddListener(obj, evType, fn) {
  if (obj.addEventListener) {
    obj.addEventListener(evType, fn, false);
    return true;
    }
  else if (obj.attachEvent) return obj.attachEvent('on' + evType, fn);
  else return false;
  }

function jt_fixE(ev) {
  var e = ev ? ev : window.event;
  return e;
  }
/********** END: Event handling **********/


/********** BEGIN: screen handling **********/
function jt_Point(x, y) {
  // returns a "Point" object with '.x' and '.y' properties
  this.x = x;
  this.y = y;
  }

function jt_getOffsetXY(obj) {
  // returns a "jt_Point" object with both '.x' and '.y' coordinates of 'obj'; usage: "var point = jt_getOffsetXY(obj); var left=point.x; var top=point.y;"
  var xPos = obj.offsetLeft;
  var yPos = obj.offsetTop;
  var parent = obj.offsetParent;
  while (parent != null) {
    xPos += parent.offsetLeft;
    yPos += parent.offsetTop;
    parent = parent.offsetParent;
    }
  return new jt_Point(xPos, yPos);
  }

function jt_moveTo(obj, x, y) {
  // moves 'obj' to x/y coordinates
  obj.style.left = x + "px";
  obj.style.top = y + "px";
  }

function jt_getOffsetX(obj) {
  // returns 'x' coordinate of 'obj'
  var xPos = obj.offsetLeft;
  var parent = obj.offsetParent;
  while (parent != null) {
    xPos += parent.offsetLeft;
    parent = parent.offsetParent;
    }
  return xPos;
  }

function jt_getOffsetY(obj) {
  // returns 'y' coordinate of 'obj'
  var yPos = obj.offsetTop;
  var parent = obj.offsetParent;
  while (parent != null) {
    yPos += parent.offsetTop;
    parent = parent.offsetParent;
    }
  return yPos;
  }

function jt_windowOffsetX() {
  // returns X-offset of window (for positioning popups)
  if (window.screenX) return window.screenX + (window.outerWidth-window.innerWidth) - window.pageXOffset;
  else return document.body.scrollLeft + window.screenLeft;
  }

function jt_windowOffsetY() {
  // returns Y-offset of window (for positioning popups)
  if (window.screenY) return window.screenY + (window.outerHeight-24-window.innerHeight) - window.pageYOffset;
  else return document.body.scrollTop + window.screenTop;
  }

function jt_getChromeY() {
  // return height of browser "chrome" ('screenTop' offset)
  return window.screenTop ? window.screenTop : (window.outerHeight - window.innerHeight - 24);
  }

/********** END: screen handling **********/
// also see: http://www.mattkruse.com/javascript/anchorposition/source.html


/********** BEGIN: FORM handling **********/
function jt_setRadio(radioFld, val) {
  // set 'radioFld' button with value == val and return 'true' (if not disabled!)
  for (var i=0; i<radioFld.length; i++)
    if (radioFld[i].value == val)
      if (!radioFld[i].disabled) {
        radioFld[i].checked = true;
        return true;
        }
  return false;
  }

function jt_getRadio(radioFld) {
  // return value of selected 'radioFld' button
  var st = "";
  for (var i=0; i<radioFld.length; i++)
    if (radioFld[i].checked) {
      st = radioFld[i].value;
      break;
      }
  return st;
  }

function foSelected(pulldown) {
  // return value of selected item
  var st = "";
  for (var i=0; i<pulldown.options.length; i++)
  if (pulldown.options[i].selected) {
    if (pulldown.options[i].value) st = pulldown.options[i].value
    else st = pulldown.options[i].text;
    break;
    }
  return st;
  }

function foPosInList(pulldown, val) {
  // return position of 'val' in pulldown menu, -1 if not found
  if (val != "")
    for (var i=0; i<pulldown.options.length; i++) {
      var opVal = pulldown.options[i].value;
      if (opVal == "") opVal = pulldown.options[i].text;
      if (opVal == val) {
        return i;
        break;
        }
      }
  return -1;
  }

function foSetSelectVal(pulldown, val) {
  // set "SELECTED" for item in pulldown menu with 'value==val'
  var p = foPosInList(pulldown,val);
  if (p != -1) pulldown.options.selectedIndex = p;
  }
/********** END: FORM handling **********/


function jt_parseQuery(queryString) {
  // converts name/value pairs in 'queryString' to JS object
  var qObj = new Object();
  var stQuery = (queryString) ? queryString : location.search; // use 'location.search' if 'queryString' is null
  if (stQuery.indexOf("?") == 0) stQuery = stQuery.substring(1);
  if (stQuery) {
    var nvPairs = stQuery.split("&");
    for (var i=0; i < nvPairs.length; i++) {
      var posEq = nvPairs[i].indexOf("=");
      if (posEq != -1) eval( "qObj." + nvPairs[i].substring(0,posEq) + "='" + nvPairs[i].substring(posEq+1) + "'");
      }
    }
  return qObj;
  }

function jt_safeHTML(st) {
  // encode - same as 'u:htmlencode' tag
  if (st.length == 0) return "";
  st = st.replace(/</gi,"&lt;");
  st = st.replace(/>/gi,"&gt;");
  st = st.replace(/\"/gi,'&quot;');
  st = st.replace(/\'/gi,"&#39;");
  st = st.replace(/\\/gi,"&#92;");
  return st;
  }

function jt_unsafeHTML(st) {
  // decode - opposite of 'u:htmlencode' tag
  if (st.length == 0) return "";
  st = st.replace(/&lt;/gi,"<");
  st = st.replace(/&gt;/gi,">");
  st = st.replace(/&quot;/gi,'"');
  st = st.replace(/&#39;/gi,"'");
  st = st.replace(/&#92;/gi,"\\");
  return st;
  }

function jt_plural(qty, lbl) {
  // returns plural suffix or optional extended format if 'lbl' is present; example: qty=12, lbl="server", return value="12 servers"
  var stPlural = (qty == 1) ? "" : "s";
  if (lbl) stPlural = qty + " " + lbl + stPlural;
  return stPlural;
  }

function objToString(anObj, sep) {
  // convert any JS object to string of name:value pairs separated by optional 'sep'
  // NOTE: pass '<br />' for 'sep' to display as HTML
  if (!sep) sep = ' ][ '; // good for 'alert()' msgs
  var st = "";
  for(var prop in anObj) {
    if ((prop.charAt(0) == '$') || ((typeof anObj[prop]) == 'function')) continue;
    if (st != "") st += sep;
    st += prop + ':' + anObj[prop];
    }
  return st;
  }

function jt_alignCorner(elmToMove, elmAnchor, TlTrBlBr, xOffset, yOffset) {
  // aligns 'elmToMove' with 'elmAnchor' based on 2-character 'TlTrBlBr' indicating corner: 'TL' | 'TR' | 'BL' | 'BR'
  xOffset = xOffset ? xOffset : 0; // optional param
  yOffset = yOffset ? yOffset : 0; // optional param
  var anchorXY = jt_getOffsetXY(elmAnchor);
  var xxOffset = (TlTrBlBr.indexOf('R') != -1) ? elmToMove.offsetWidth - elmAnchor.offsetWidth : 0;
  var yyOffset = (TlTrBlBr.indexOf('B') != -1) ? elmToMove.offsetHeight : 0;
  jt_moveTo(elmToMove, anchorXY.x - xxOffset + xOffset, anchorXY.y - yyOffset + yOffset);
  }

function jt_boxOverlap(objectA, objectB, mode) {
  // box collision detector; returns area of overlap (if any) in pixels between DOM elements 'objectA' and 'objectB'
  // adapted from http://www.gamedev.net/reference/articles/article754.asp
  // 'mode' is optional - two special modes are offered:
  //   mode='X' - test for overlap of X-coordinates only; ignore Y
  //   mode='Y' - test for overlap of Y-coordinates only; ignore X

  var xyA = jt_getOffsetXY(objectA);
  var xyB = jt_getOffsetXY(objectB);

  var objAxTL = xyA.x; // AX1 - xTopLeft
  var objAyTL = xyA.y; // AY1 - yTopLeft
  var objAxBR = xyA.x + objectA.offsetWidth; // AX2 - xBottomRight
  var objAyBR = xyA.y + objectA.offsetHeight; // AY2 - yBottomRight

  var objBxTL = xyB.x; // BX1
  var objByTL = xyB.y; // BY1
  var objBxBR = xyB.x + objectB.offsetWidth; // BX2
  var objByBR = xyB.y + objectB.offsetHeight; // BY2

/*
alert("objAxTL=" + objAxTL + " - objAyTL=" + objAyTL + " - objAxBR=" + objAxBR + " - objAyBR=" + objAyBR + "\n" +
      "objBxTL=" + objBxTL + " - objByTL=" + objByTL + " - objBxBR=" + objBxBR + " - objByBR=" + objByBR);
*/


/*
reject the following conditions:
AX2<BX1
AY2<BY1
BX2<AX1
BY2<AY1
*/
  if (mode != 'Y') {
    if (objAxBR < objBxTL) return -1;
    if (objBxBR < objAxTL) return -1;
    }
  if (mode != 'X') {
    if (objAyBR < objByTL) return -1;
    if (objByBR < objAyTL) return -1;
    }


  var objCxTL;
  var objCyTL;
  var objCxBR;
  var objCyBR;

/*
If AX1<BX1 then CX1=BX1 and CX2=AX2, otherwise, CX1=AX1 and CX2=BX2
If AY1<BY1 then CY1=BY1 and CY2=AY2, otherwise, CY1=AY1 and CY2=BY2
*/

  if (objAxTL < objBxTL) {
    objCxTL = objBxTL;
    objCxBR = objAxBR;
    }
  else {
    objCxTL = objAxTL;
    objCxBR = objBxBR;
    }

  if (objAyTL < objByTL) {
    objCyTL = objByTL;
    objCyBR = objAyBR;
    }
  else {
    objCyTL = objAyTL;
    objCyBR = objByBR;
    }

  var olX = objCxBR - objCxTL;
  var olY = objCyBR - objCyTL;
  if (mode == 'X') return olX;
  else if (mode == 'Y') return olY;
  else return olX * olY;
  }

var jt_okPanels = new Object();

function jt_objLength(obj) {
  var t = 0;
  for (var prop in obj) t++;
  return t;
  }

function jt_clickClass(node, classTarget, maxDepth) {
  var count = 0;
  while ((node != null) && (count < maxDepth)) {
    if (node.className == classTarget) return true;
    node = node.parentNode;
    count++;
    }
  return false;
  }

function jt_clickDivs(e) {
  // hide panels if click is elsewhere
  if (!e) e = window.event;
  if (jt_objLength(jt_okPanels) != 0) {
    var oNode = e.target ? e.target : e.srcElement;
    var node = oNode;
    var count = 0;
    while ((node != null) && (count != -1) && (count < 12)) {
      for (var prop in jt_okPanels)
        if (node.id == jt_okPanels[prop].id) {
          count = -1;
          break;
          }
      if (count != -1) {
        node = node.parentNode;
        count++;
        }
      } // while
    if (count != -1)
      for (var prop in jt_okPanels)
        if (jt_okPanels[prop].divClose) jt_okPanels[prop].divClose();
        else jt_ShowNoneElm(jt_okPanels[prop], false);
    }
  }

function jt_currStyle(divToRead) {
  // return current (derived) CSS style object
  var cs = divToRead.style;
  if (window.getComputedStyle) cs = window.getComputedStyle(divToRead,null);
  else if (divToRead.currentStyle) cs = divToRead.currentStyle;
  return cs;
  }

function jt_appendRelative(dragDIV, newParentDIV) {
  var dragPos = jt_getOffsetXY(dragDIV);
  var newParentPos = jt_getOffsetXY(newParentDIV);
  var xPos = dragPos.x - newParentPos.x;
  var yPos = dragPos.y - newParentPos.y;
  jt_moveTo(dragDIV, xPos, yPos);
  newParentDIV.appendChild(dragDIV);
  }

function jt_divOnScrn(divOnScrn) {
  var divPos = jt_getOffsetXY(divOnScrn);
  var newX = divPos.x;
  var newY = divPos.y;
  if (divPos.x + divOnScrn.offsetWidth - document.body.scrollLeft > document.body.clientWidth) newX = document.body.scrollLeft + document.body.clientWidth - divOnScrn.offsetWidth;
  if (divPos.x < document.body.scrollLeft) newX = document.body.scrollLeft;
  if (divPos.y + divOnScrn.offsetHeight - document.body.scrollTop > document.body.clientHeight) newY = document.body.scrollTop + document.body.clientHeight - divOnScrn.offsetHeight;
  if (divPos.y < document.body.scrollTop) newY = document.body.scrollTop;
  if ((newX != divPos.x) || (newY != divPos.y)) jt_moveTo(divOnScrn, newX, newY);
  }

/* BEGIN /imvu/website/catalog/includes/mypage-public.js */
var jsStartTime = new Date();
var qParams = jt_parseQuery();

var traceCount = 0; // trace feature
var traceAreaDIV; // trace feature
var stickerInfoDIV;

if (typeof fixPNG == 'undefined') {
    var fixPNG = false;
}

function clearTrace() {
  traceAreaDIV.style.color = "#FFFFFF";
  traceAreaDIV.innerHTML = '<a href="javascript:clearTrace()">clear trace</a><br>';
  }

function setTableReflowColumns(x,y) {}

function traceMsg(msg) { // trace feature
  if (!traceAreaDIV) {
    traceAreaDIV = document.createElement("div");
    traceAreaDIV.style.position = "absolute";
    traceAreaDIV.style.top = "30px";
    traceAreaDIV.style.left = "0px";
    document.body.appendChild(traceAreaDIV);
    }
  if (traceCount % 40 == 0) clearTrace();
  traceAreaDIV.innerHTML += msg + "<br>";
  traceCount++;
  }

function popUpWin(popUrl, w, h) {
  w = w ? w : 380;
  h = h ? h : 580;
  var popWin = window.open(popUrl,"imvuPopWin","width=" + w + ",height=" + h + ",scrollbars=yes,resizable=yes,location=no,menubars=no,toolbars=no");
  popWin.focus();
  }

var isIE = (window.showModalDialog);

function isPNG(imgName) {
  var imgNameUC = imgName.toUpperCase();
  return (imgNameUC.substring(imgNameUC.length-3, imgNameUC.length) == "PNG");
  }

function correctPNG(imgObj) {
  // IE only - must call after making stickers/images visible
  if (isPNG(imgObj.src)) {
    imgObj.style.width = imgObj.offsetWidth + "px";
    imgObj.style.height = imgObj.offsetHeight + "px";
    imgObj.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + imgObj.src + "', sizingMethod='scale')";
    imgObj.src = "/catalog/web_images/space.gif";
    }
  }

var allImgs = false;
function correctAllPNG_iter(i) {
  if( ! allImgs ) {
    allImgs = document.getElementsByTagName( "img" );
  }
  if( allImgs && i < allImgs.length ) {
    correctPNG(allImgs[i]);
    i++;
    setTimeout("correctAllPNG_iter("+i+")", 15);
    window.status = "Correcting png "+i+"/"+allImgs.length+"...";
  } else {
    window.status = "Done correcting all "+allImgs.length+" pngs";
    allImgs = false;
  }
}

function correctAllPNG() {
  // IE only - must call after making stickers/images visible
  if (isIE) {
    return correctAllPNG_iter(0);
    //var imgs = document.getElementsByTagName( "img" );
    //for (var i=0; i<imgs.length; i++) correctPNG(imgs[i]);
    }
  }

var stickerInfoTimer;

function stickerInfoShow(ev) {
  clearTimeout(stickerInfoTimer);
  var e = jt_fixE(ev);
  var node = e.target ? e.target : e.srcElement;
  var loc = jt_getOffsetXY(node);
  jt_ShowNoneElm(stickerInfoDIV, true, "block");
  jt_moveTo(stickerInfoDIV, loc.x + 10, loc.y + 10);
  var id = node.getAttribute("id");
  var restricted = node.getAttribute("restricted");

  while( node && (id == "undefined" || !id) ) {
    node = node.parentNode;
    id = node.getAttribute("id");
  }

  stickerInfoDIV.innerHTML = '<a target="_top" href="/catalog/product_info.php?sticker_id=' + id + '" onMouseOver="clearTimeout(stickerInfoTimer)">buy sticker</a>';

  //restricted stickers will have a pink background in the buy sticker rollover box
  if ( restricted == '1' ) {
    stickerInfoDIV.style.background = 'rgb(255,120,155)';
  } else {
    stickerInfoDIV.style.background = 'rgb(255,255,175)';
  }
}

function stickerInfoHide() {
  jt_ShowNoneElm(stickerInfoDIV, false);
}

function stickerInfoOut() {
  stickerInfoTimer = setTimeout("stickerInfoHide()", 400);
}

function initSticker(stickerDIV) {
  stickerDIV.style.display = "block";
  stickerDIV.style.cursor = "move";
  Drag.init(stickerDIV);
  stickerDIV.onDragStart = pickSticker;
  stickerDIV.onDrag = dragSticker;
  stickerDIV.onDragEnd = dropSticker;
  stickerDIV.onmouseover = mp_stickers.showStickerLoc;
  stickerDIV.onmouseout = mp_stickers.hideStickerLoc;
  if (!stickerDIV.getAttribute("altSrcA")) stickerDIV.setAttribute("altSrcA", stickerDIV.src);
  if (!stickerDIV.getAttribute("altSrcB")) stickerDIV.setAttribute("altSrcB", stickerDIV.src);
  }

function initPublic(editMode) {
  stickerInfoDIV = document.getElementById("stickerInfo");
  if (editMode && mp_stickers.stickerList) {
    var listOfStickers = mp_stickers.stickerList.split(',');
    for (var i=0; i<listOfStickers.length; i++) {
      var stickerDIV = document.getElementById(listOfStickers[i]);
      initSticker(stickerDIV);
      stickerTray.dockSticker(listOfStickers[i]);
      }
    }

  if (mp_stickers.assignedStickers) {
    setTimeout("setupStickers(0, "+editMode+")", 50);
  } else {
      if (fixPNG) {
        correctAllPNG();
      }
  }
  jt_ShowNone("LoadingPage", false);

  if (qParams.jsb) {
    var now = new Date();
    var msg = "JS Benchmark: " + (now.getTime() - jsStartTime.getTime());
    if (phpDbElapsed) msg += " - PHP/DB, seconds: " + phpDbElapsed;
    traceMsg(msg);
    }
  }

var listOfStickers = false;

function setupStickers(i, editMode) {
  if( !listOfStickers ) {
    listOfStickers = mp_stickers.assignedStickers.split(',');
  }
    if(i<listOfStickers.length) {
      window.status = "Sticking sticker "+i+"/"+listOfStickers.length+"...";
      var sData = listOfStickers[i].split('|');
      var stickerDIV = document.getElementById(sData[0]); // actually, this is the <img> object
      var dropTarget = document.getElementById( (sData[1] == "document") ? "stickers_anchor" : sData[1] ); // "stickers_anchor" div OR panel div
      if (dropTarget) {
        dropTarget.appendChild(stickerDIV);
        if (editMode) {
          initSticker(stickerDIV);
          mp_stickers.assigned[stickerDIV.id] = new mp_stickers.stickerNodes(stickerDIV, dropTarget);
        } else {
          stickerDIV.style.display = "block";
          stickerDIV.onmouseover = stickerInfoShow;
          stickerDIV.onmouseout = stickerInfoOut;
        }
      } else {
        // bad DB data!
      }
      i++;
      setTimeout("setupStickers("+i+", "+editMode+")", 50);
    } else {
        if (fixPNG) {
            correctAllPNG();
        }
      window.status = "Done sticking all "+listOfStickers.length+" stickers.";
      listOfStickers = false;
    }
}

function XHBlogUpdate(feed2js_url, elemName) {
  var xmlhttp = xh_newRequest();
  var url = feed2js_url + "&html=y&desc=1";
  xmlhttp.open("GET", url, true);
  xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset=UTF-8');
  xmlhttp.onreadystatechange = function() {
    var elem = document.getElementById(elemName);
    if(xmlhttp.readyState == 4) {
      //alert("content is " + xmlhttp.responseText);
        //TICKER_CONTENT = xmlhttp.responseText;
      elem.innerHTML = xmlhttp.responseText;
    } else if( xmlhttp.readyState == 1) {
      // ignore
    } else {
      elem.innerHTML = "<h1>"+xmlhttp.readyState+"</h1>Error attempting to load: "+url;
    }
  }
  xmlhttp.send(null);
}

/* BEGIN /imvu/website/catalog/includes/mp_stickers.js */
/**
 * mp_stickers.js - handles:
 *   - assigning stickers to panels or "page"
 *   - docking of stickers in tray
 *   - "find stickers" feature
 *
 * @version 17 Oct 2005
 * @author  Joseph Oster, wingo.com
 */

mp_stickers = function() {
  // CONSTRUCTOR for 'mp_stickers' object
  mp_stickers.lostStickerMsgDIV = document.getElementById("lostStickerMSG");
  mp_stickers.lostStickerBgDIV = document.getElementById("lostStickerBG");
  mp_stickers.lostStickerShowDIV = document.getElementById("lostStickerSD");
  var panelID = "stickers_panel";
  this.panelDIV = document.getElementById(panelID);
  this.panelBODY = document.getElementById(panelID + "_body");
  this.stickerList = new Array();
  this.resize();
  }

mp_stickers.prototype.dockSticker = function(stickerID) {
  for (var i=0; i<this.stickerList.length; i++)
    if (this.stickerList[i].id == stickerID) {
      this.snapSticker(i);
      return;
      }

  this.stickerList.push(document.getElementById(stickerID));
  this.snapSticker(this.stickerList.length-1);
  delete mp_stickers.assigned[stickerID];
  }

mp_stickers.prototype.assignSticker = function(stickerDIV, dropTarget) {
  for (var i=0; i<this.stickerList.length; i++)
    if (this.stickerList[i].id == stickerDIV.id) {
      this.stickerList.splice(i, 1);
      this.redisplay();
      break;
      }
  mp_stickers.assigned[stickerDIV.id] = new mp_stickers.stickerNodes(stickerDIV, dropTarget);
  }

mp_stickers.prototype.snapSticker = function(stickerIdx) {
  var colNum = stickerIdx % this.colsPerRow;
  var rowNum = Math.floor(stickerIdx / this.colsPerRow);
  jt_moveTo(this.stickerList[stickerIdx], (colNum * (mp_stickers.colWidth + this.colGap)) + this.colGap, this.yOff + (rowNum * mp_stickers.rowOffset) + 10);
  var minBodyHeight = ((rowNum+1) * mp_stickers.rowOffset) + 25;
  if (this.panelBODY.offsetHeight < minBodyHeight) this.panelBODY.style.height = minBodyHeight + "px";
  }

mp_stickers.prototype.redisplay = function() {
  this.panelBODY.style.height = "30px";
  for (var i=0; i<this.stickerList.length; i++) this.snapSticker(i);
  }

mp_stickers.prototype.resize = function() {
  if (mp_stickers.stickerList || mp_stickers.assignedStickers) { // don't re-size banner if no stickers!
    if( this.panelDIV && this.panelBODY ) {
	    var panelPos = jt_getOffsetXY(this.panelDIV);
	    var bodyPos = jt_getOffsetXY(this.panelBODY);
	    this.yOff = bodyPos.y - panelPos.y;
	    this.colsPerRow = Math.floor( (this.panelDIV.offsetWidth - 10) / (mp_stickers.colWidth + 10) );
	    this.colGap = Math.floor( (this.panelDIV.offsetWidth - (this.colsPerRow * mp_stickers.colWidth)) / (this.colsPerRow+1) );
	    this.redisplay();
	  }
    }
  }

mp_stickers.stickerPanelY = function(yPos) {
  jt_moveTo(mp_stickers.lostStickerBgDIV, 0, yPos);
  }

mp_stickers.stickerNodes = function(stickerDIV, panelDIV) {
  this.stickerDIV = stickerDIV;
  this.panelDIV = panelDIV;
  }

mp_stickers.findStickers = function(pageNum) {
  var numStickers = jt_objLength(mp_stickers.assigned);
  if (numStickers > 0) {
    mp_stickers.panelOn = true;
    jt_ShowNoneElm(pageToolsDIV, false);
    mp_stickers.stickerPanelY(document.body.scrollTop);
    jt_ShowNoneElm(mp_stickers.lostStickerBgDIV, true, "block");
    mp_stickers.lostStickerBgDIV.divClose = mp_stickers.restoreStickers;
    jt_okPanels.mp_findStickers = mp_stickers.lostStickerBgDIV;
    jt_ShowNoneElm(mp_stickers.lostStickerMsgDIV, true, "block");

    var colsPerRow = Math.floor( (document.body.offsetWidth - 10) / (mp_stickers.colWidth + 10) );
    var rowsPerPage = Math.floor( (document.body.clientHeight - 10 - 20) / (mp_stickers.rowOffset + 10) );
    var stkrsPerPage = rowsPerPage * colsPerRow;

    var npMsg = ""; // next/prev msg & links
    if (numStickers > stkrsPerPage) {
      var totPages = Math.ceil(numStickers / stkrsPerPage);
      npMsg = "&nbsp;(page " + (pageNum+1) + " of " + totPages + ",";
      if (pageNum != 0) npMsg += ' <a href="javascript:mp_stickers.findStickers(' + (pageNum-1) + ')">prev</a>';
      if (pageNum != (totPages-1)) npMsg += ' <a href="javascript:mp_stickers.findStickers(' + (pageNum+1) + ')">next</a>';
      npMsg += ")";
      numStickers = stkrsPerPage;
      }
    document.getElementById("lostStickerNB").innerHTML = npMsg;

    var needWidth = numStickers * (mp_stickers.colWidth + 10) + 10;
    if (needWidth > document.body.offsetWidth) mp_stickers.lostStickerBgDIV.style.width = colsPerRow * (mp_stickers.colWidth + 10) + 10;
    else if (needWidth > mp_stickers.lostStickerBgDIV.offsetWidth) mp_stickers.lostStickerBgDIV.style.width = needWidth + "px";
    mp_stickers.lostStickerBgDIV.style.height = "0px";

    var stickerIdx = 0;
    var pageIdx = 0;
    for (var prop in mp_stickers.assigned) with (mp_stickers.assigned[prop]) {
      if (Math.floor(stickerIdx / stkrsPerPage) == pageNum) {
        swapSrc(stickerDIV, "altSrcA");
        stickerDIV.style.zIndex = 2900;
        stickerDIV.style.width = "100px";
        stickerDIV.style.border = "1px solid #7fff00";
        stickerDIV.xTrue = stickerDIV.offsetLeft;
        stickerDIV.yTrue = stickerDIV.offsetTop;
        stickerDIV.fsOnDisplay = true;

        var colNum = pageIdx % colsPerRow;
        var rowNum = Math.floor(pageIdx / colsPerRow);
        var xPos = (colNum * (mp_stickers.colWidth + 10)) + 10;
        var yPos = 20 + (rowNum * mp_stickers.rowOffset) + 10;
        mp_stickers.lostStickerBgDIV.appendChild(stickerDIV);
        jt_moveTo(stickerDIV, xPos, yPos);
        var minBodyHeight = ((rowNum+1) * mp_stickers.rowOffset) + 35;
        if (mp_stickers.lostStickerBgDIV.offsetHeight < minBodyHeight) mp_stickers.lostStickerBgDIV.style.height = minBodyHeight + "px";
        pageIdx++;
        }
      else if (mp_stickers.assigned[prop].stickerDIV.fsOnDisplay) mp_stickers.restoreOneSticker(mp_stickers.assigned[prop]);
      stickerIdx++;
      }
    }
    else alert("You have no stickers assigned.");
  }

mp_stickers.showStickerLoc = function(ev) {
  if (mp_stickers.panelOn) {
    var e = jt_fixE(ev);
    var node = e.target ? e.target : e.srcElement;
    if (mp_stickers.assigned[node.id]) { // sticker is assigned (ignore stickers in tray!)
      var anchorPos = jt_getOffsetXY(mp_stickers.assigned[node.id].panelDIV);
      var newY = anchorPos.y + node.yTrue;
      jt_moveTo(mp_stickers.lostStickerShowDIV, anchorPos.x + node.xTrue, newY);
      jt_ShowNoneElm(mp_stickers.lostStickerShowDIV, true, "block");
      if ((newY + mp_stickers.lostStickerShowDIV.offsetHeight) > (document.body.scrollTop + document.body.clientHeight)) {
        window.scrollTo(0, newY - document.body.clientHeight + mp_stickers.lostStickerBgDIV.offsetHeight);
        mp_stickers.stickerPanelY(document.body.scrollTop);
        }
      else if (newY < document.body.scrollTop) {
        if (newY + mp_stickers.lostStickerShowDIV.offsetHeight < document.body.clientHeight) newY = 0; // jump to top of page
        window.scrollTo(0, newY);
        mp_stickers.stickerPanelY(newY);
        }
      }
    }
  }

mp_stickers.hideStickerLoc = function() {
  jt_ShowNoneElm(mp_stickers.lostStickerShowDIV, false);
  }

mp_stickers.restoreOneSticker = function(sNodes) {
  sNodes.panelDIV.appendChild(sNodes.stickerDIV);
  jt_moveTo(sNodes.stickerDIV, sNodes.stickerDIV.xTrue, sNodes.stickerDIV.yTrue);
  sNodes.stickerDIV.style.width = "";
  sNodes.stickerDIV.style.border = "";
  swapSrc(sNodes.stickerDIV, "altSrcB");
  sNodes.stickerDIV.fsOnDisplay = false;
  }

mp_stickers.restoreStickers = function() {
  if (mp_stickers.panelOn) {
    mp_stickers.panelOn = false;
    if (jt_okPanels.mp_findStickers) delete jt_okPanels.mp_findStickers;
    mp_stickers.hideStickerLoc();
    jt_ShowNoneElm(mp_stickers.lostStickerBgDIV, false);
    jt_ShowNoneElm(mp_stickers.lostStickerMsgDIV, false);
    jt_ShowNoneElm(pageToolsDIV, true);
    for (var prop in mp_stickers.assigned) {
      if (mp_stickers.assigned[prop].stickerDIV.fsOnDisplay && !mp_stickers.assigned[prop].stickerDIV.nowDragging) {
        mp_stickers.restoreOneSticker(mp_stickers.assigned[prop]);
      }
    }
  }
}

mp_stickers.lostStickerMsgDIV;
mp_stickers.lostStickerBgDIV;
mp_stickers.lostStickerShowDIV;

mp_stickers.assigned = new Object();
mp_stickers.panelOn = false;
mp_stickers.colWidth = 100;
mp_stickers.rowOffset = 90;

mp_stickers.stickerList = "";
mp_stickers.assignedStickers = "";

/* BEGIN /imvu/website/catalog/includes/xh_Request.js */
/**
 * xh_Request.js - basic XMLHttpRequest object
 *
 * @version 10 Jun 2005
 * @author  Joseph Oster, wingo.com
 */

function xh_newRequest() {
  // CONSTRUCTOR for basic XMLHttpRequest object 'xh_Request'
  // CORRECT USAGE: var xmlhttp = xh_newRequest();
  // DO _NOT_ USE!: var xmlhttp = new xh_newRequest();

  // instantiate an XMLHttpRequest object; different for IE vs. Mozilla
  // try IE first - source: http://jibbering.com/2002/4/httprequest.html
  var xmlhttp=false;
  /*@cc_on @*/
  /*@if (@_jscript_version >= 5)
  // JScript gives us Conditional compilation, we can cope with old IE versions.
  // and security blocked creation of the objects.
   try {
    xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
   } catch (e) {
    try {
     xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (E) {
     xmlhttp = false;
    }
   }
  @end @*/

  if (!xmlhttp && (typeof XMLHttpRequest != 'undefined')) xmlhttp = new XMLHttpRequest(); // Mozilla
  return xmlhttp;
  }

function xh_statusMsg(state) {
  var msg = state;
  switch (state) {
    case 0: {msg = "Uninitialized"; break;}
    case 1: {msg = "Loading..."; break;}
    case 2: {msg = "Loaded"; break;}
    case 3: {msg = "Interactive"; break;}
    case 4: {msg = "Complete"; break;}
    }
  return msg;
  }


/*Copyright (c) 2005 JSON.org*/
var JSON = function () {
    var m = {
            '\b': '\\b',
            '\t': '\\t',
            '\n': '\\n',
            '\f': '\\f',
            '\r': '\\r',
            '"' : '\\"',
            '\\': '\\\\'
        },
        s = {
            'boolean': function (x) {
                return String(x);
            },
            number: function (x) {
                return isFinite(x) ? String(x) : 'null';
            },
            string: function (x) {
                if (/["\\\x00-\x1f]/.test(x)) {
                    x = x.replace(/([\x00-\x1f\\"])/g, function(a, b) {
                        var c = m[b];
                        if (c) {
                            return c;
                        }
                        c = b.charCodeAt();
                        return '\\u00' +
                            Math.floor(c / 16).toString(16) +
                            (c % 16).toString(16);
                    });
                }
                return '"' + x + '"';
            },
            object: function (x) {
                if (x) {
                    var a = [], b, f, i, l, v;
                    if (x instanceof Array) {
                        a[0] = '[';
                        l = x.length;
                        for (i = 0; i < l; i += 1) {
                            v = x[i];
                            f = s[typeof v];
                            if (f) {
                                v = f(v);
                                if (typeof v == 'string') {
                                    if (b) {
                                        a[a.length] = ',';
                                    }
                                    a[a.length] = v;
                                    b = true;
                                }
                            }
                        }
                        a[a.length] = ']';
                    } else if (x instanceof Object) {
                        a[0] = '{';
                        for (i in x) {
                            v = x[i];
                            f = s[typeof v];
                            if (f) {
                                v = f(v);
                                if (typeof v == 'string') {
                                    if (b) {
                                        a[a.length] = ',';
                                    }
                                    a.push(s.string(i), ':', v);
                                    b = true;
                                }
                            }
                        }
                        a[a.length] = '}';
                    } else {
                        return;
                    }
                    return a.join('');
                }
                return 'null';
            }
        };
    return {
        copyright: '(c)2005 JSON.org',
        license: 'http://www.JSON.org/license.html',

        stringify: function (v) {
            var f = s[typeof v];
            if (f) {
                v = f(v);
                if (typeof v == 'string') {
                    return v;
                }
            }
            return null;
        },

        parse: function (text) {
            try {
                return !(/[^,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]/.test(
                        text.replace(/"(\\.|[^"\\])*"/g, ''))) &&
                    eval('(' + text + ')');
            } catch (e) {
                return false;
            }
        }
    };
}();


function extractId(elementId) {
  var customerId = elementId.split('_');
  return customerId[1];
}

function updateStatus(searchClass, statusType, node, server) {
  if (statusType == 'cp') {
    return;
  }

  if ( node == null )
    node = document;
    var tag = 'div';
  var idArray = new Array();
  var els = node.getElementsByTagName(tag);
  var pattern = new RegExp("(^|\s)"+searchClass+"(\s|$)");
  for (i = 0, j = 0; i < els.length; i++) {
    if ( pattern.test(els[i].className) ) {
      var classElement = els[i];
      var elementId = classElement.id;
      idArray[j] = extractId(elementId);
      j++;
    }
  }
  var idString = idArray.join(",");
  var xmlhttp = xh_newRequest();
  xmlhttp.open("POST", "/catalog/web_status_updater.php", true);
  xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset=UTF-8');
  xmlhttp.onreadystatechange = function() {
    if(xmlhttp.readyState == 4) {
      if (xmlhttp.responseText) {
      var resultArray = JSON.parse(xmlhttp.responseText);
      for (i = 0, j = 0; i < els.length; i++) {
        if ( pattern.test(els[i].className) ) {
          var classElement = els[i];
          var customerId = extractId(classElement.id);
          var toggle = resultArray[customerId];
          if ( toggle ) {
            classElement.className = searchClass + '_' + toggle;
          }
          j++;
        }
      }
      }
    }
    }
    xmlhttp.send(statusType + "=1&list=" + idString);
}
