/*#####################################################################
# contact_us.js - controller for the contact_us page                  # 
# Nate Murray @ CPO Commerce 2006                                     #
# $Id: contact_us.js,v 1.1 2007/03/30 20:38:07 nathan Exp $           # 
#####################################################################*/

orderDivs = new Array('phone_div', 'order_number_div');
techDivs  = new Array('url_div', 'os_div', 'browser_div');

contextualFields = {
         default_val: new Array(),
presale_product_info: new Array('phone_div', 'sku_div'),
  presale_item_avail: new Array('phone_div', 'sku_div'),
  order_not_received: orderDivs, 
          order_info: orderDivs,
         sold_broken: orderDivs,
        sold_missing: orderDivs,
          sold_wrong: orderDivs,
           sold_part: orderDivs,
         returns_rma: orderDivs,
      returns_status: orderDivs,
    general_feedback: new Array(),
       website_error: techDivs,
        website_help: techDivs
};

Array.prototype.notIn = function (b)
{
  var a_hash = new Object();
  var diff = new Array();
  for (var i=0; i<this.length;i++) {
    a_hash[this[i]] = 1;
  }
  for (var i=0; i<b.length;i++) {
    if(a_hash[ b[i] ] > 0) {
    } else {
      diff.push(b[i]); 
    }
  }
  return diff;
}

Array.prototype.intersection = function (b)
{
  var a_hash = new Object();
  var inter = new Array();
  for (var i=0; i<this.length;i++) {
    a_hash[this[i]] = 1;
  }
  for (var i=0; i<b.length;i++) {
    if(a_hash[ b[i] ] > 0) {
      inter.push(b[i]);
    }
  }
  return inter;
}


function reasonChanged(select)
{
  var val = select.options[select.selectedIndex].value;
  explain('name', "exp_"+val); //  show the tip

  // show and hide approriate fields
  var newShowing = new Array;
  divs = contextualFields[val] ? contextualFields[val] 
                               : contextualFields["default_val"];

  both = showing.intersection(divs); // ones that we have, dont do anything 
  for (var i=0; i<both.length  ;i++) newShowing.push(both[i]); 

  extras = divs.notIn(showing);      // ones that we dont want any more
  for (var i=0; i<extras.length;i++) new Effect.BlindUp(extras[i]);

  addins = showing.notIn(divs);
  for (var i=0; i<addins.length;i++) {
    new Effect.BlindDown(addins[i]);
    newShowing.push(addins[i]);
  }

  showing = newShowing;
}

function form_init()
{
  var select = document.contact_us_form.reason;
  showing = new Array();
  reasonChanged(select);
}

// show and hide the field explanation layers
function explain(oField, sDiv) {
  if((explain.lastdiv) && (explain.lastdiv.id != sDiv)) {
    explain.lastdiv.style.display = "none";
    explain.lastdiv.style.visibility = "hidden";
  }

  if(typeof(oField) == "string") {
    oField = document.getElementsByName(oField)[0];
  }

  var iFieldTop = 0;
  var oFieldParent = oField.parentNode;
  var oDiv = document.getElementById(sDiv);
  if(!oDiv) return;

  iFieldTop = findPosY(oField); 
  iFieldRight = findPosX(oField) + oField.clientWidth;
  //iFieldTop = oField.offsetTop;

// move it up if it'll go below the end of the page
  oDiv.style.visibility = 'hidden';
  oDiv.style.display = 'block';
  if(iFieldTop + oDiv.offsetHeight > parseInt(document.getElementById('pagefooter').style.top)) {
    iFieldTop = parseInt(document.getElementById('pagefooter').style.top) - oDiv.offsetHeight - 20;
  }
// show it
  oDiv.style.position = "absolute";
  oDiv.style.top = iFieldTop + "px";
  //oDiv.style.left = iFieldRight + 50;
  oDiv.style.left = "878px"
  oDiv.style.visibility = "visible";
  explain.lastdiv = oDiv;
}

/* from http://www.quirksmode.org/js/findpos.html */
function findPosX(obj)
{
  var curleft = 0;
  if (obj.offsetParent)
  {
    while (obj.offsetParent)
    {
      curleft += obj.offsetLeft
      obj = obj.offsetParent;
    }
  }
  else if (obj.x)
    curleft += obj.x;
  return curleft;
}

function findPosY(obj)
{
  var curtop = 0;
  if (obj.offsetParent)
  {
    while (obj.offsetParent)
    {
      curtop += obj.offsetTop
      obj = obj.offsetParent;
    }
  }
  else if (obj.y)
    curtop += obj.y;
  return curtop;
}
