/*
* $Id: main.js,v 1.1 2007/07/06 09:43:32 cvs Exp $
*
* $Log: main.js,v $
* Revision 1.1  2007/07/06 09:43:32  cvs
* Initial entry
*
*/

function onInputEvent(evt)
{
  var ev = evt?evt:window.event;
  if(ev)
  {
    var elem = ev.target?ev.target:ev.srcElement;
    var s = new String(elem.tagName);
    switch(ev.type)
    {
    case "focus":
      elem.className = 'focus';
      break;
    case "blur":
      elem.className = 'default';
      break;
    }
  }
  return false;
}

function initPage()
{
  initDHTMLAPI();

  var focussed = false;
  for(var f=0; f < document.forms.length; f++)
  {
    for(var e = 0; e < document.forms[f].elements.length; e++)
    {
      var elem = document.forms[f].elements[e];
      if( !(elem.type == 'hidden'
        || elem.readOnly
        || elem.disabled ))
      {
        elem.onfocus = onInputEvent;
        elem.onblur = onInputEvent;
        if(!focussed)
        {
          elem.focus();
          focussed = true;
        }
      }
    }
  }
  var nopost = getRawObject('nopost');
  if(nopost)
  {
    mail = new Mail();
    for(var i=0;i<nopost.childNodes.length;i++)
    {
      var junk = nopost.childNodes[0];
      if(junk.tagName=='SPAN')
        junk.appendChild(mail.insertAddr(junk,mail.extractAddr(junk.id),'POST'));
    }
  }
}
window.onload = initPage;

function total()
{
  // Calculate the product section of the orders table
  var tb = getRawObject('product_items');
  if(tb)
  {
    var totalCost   = 0;
    var totalQty    = 0;
    var totalWeight = 0;

    var cost, price, qty, qtyNode, stock, weight;
    for(var row=0; row < tb.rows.length; row++)
    {
      var tr = tb.rows[row];
      for(var cell=0; cell < tr.cells.length; cell++)
      {
        var td = tr.cells[cell];
        for(var i=0; i < td.childNodes.length; i++)
        {
          var node = td.childNodes[i];
          if(node.tagName && 'INPUT'==node.tagName && node.id)
          {
            var s = new String(node.id);
            var p = s.match(/^([a-z]+):/);
            switch(p[1])
            {
            case 'cost' :
              cost = node;
              break;
            case 'price' :
              price = node.value;
              break;
            case 'qty' :
              var s = new String(node.value);
              if(s.length)
                node.value = s.match(/[0-9]+/);
              qty = parseInt(node.value,10);
              qtyNode = node;
              break;
            case 'stock' :
              stock = parseInt(node.value,10);
              break;
            case 'weight' :
              weight = node.value;
              break;
            }
          }
        }
      }
      qty = isNaN(qty)?0:qty;
      stock = isNaN(stock)?0:stock;
      price = isNaN(price)?0:price;
      if(qty>stock)
      {
        qtyNode.value = stock;
        qty = stock;
      }
      cost.value = qty?Number(qty*price).toFixed(2):'';
      totalQty += Number(qty);
      totalWeight += Number(weight*qty);
      totalCost += Number(qty*price);
    }

    if(totalCost)
    {
      // Keep the display clean unless the client has bought something

      var tq = getRawObject('total_qty');
      if(tq)
        tq.value = Number(totalWeight).toString();

      tb = getRawObject('delivery_items');
      if(tb)
      {
        var delivery;
        for(var row=0; row < tb.rows.length; row++)
        {
          var tr = tb.rows[row];
          for(var cell=0; cell < tr.cells.length; cell++)
          {
            var td = tr.cells[cell];
            for(var i=0; i < td.childNodes.length; i++)
            {
              var node = td.childNodes[i];
              if(node.tagName && 'INPUT'==node.tagName && node.id)
              {
                var s = new String(node.id);
                var p = s.match(/^([a-z]+):/);
                switch(p[1])
                {
                case 'cost' :
                  cost = node;
                  break;
                case 'delivery' :
                  delivery = (!delivery && node.checked)?node.value:null;
                  break;
                case 'price' :
                  price = isNaN(node.value)?0:node.value;
                  break;
                case 'qty' :
                  qty = node;
                  break;
                }
              }
            }
          }
          if(delivery)
          {
            cost.value = Number(totalQty*price).toFixed(2);
            qty.value  = Number(totalQty);
            totalCost += Number(totalQty*price);
          }
          else
          {
            cost.value = '';
            qty.value = '';
          }
        }
      }

    }
    var tc = getRawObject('total_cost');
    if(tc)
      tc.value = Number(totalCost).toFixed(2);
  }
}

function onChangeDelivery(elem)
{
  total();
}

function onSubmitOrder(form)
{
    var tc = getRawObject('total_cost');
    if(tc && !isNaN(tc.value) && 0<tc.value)
      return true;
    else
      return false;
}

function forceNumber(elem)
{
  var i = parseInt(elem.value);
  elem.value = isNaN(i)?'':i;
}


////////////////////////////////////////////////////////////////////////////////
/**
* Mail functionality
* extractAddr
* masked address extractor
*/
var mail;
function Mail()
{
  this.mt = new String('otliam');
}

Mail.prototype.extractAddr = function(text)
{
  var ma = new String(text);
  var va = new String();
  for(var i=ma.length-1;i>0;i-=2)
    va += ma.charAt(i);
  return va.replace(/\:/,'@');
}

Mail.prototype.insertAddr = function(elem,addr)
{
  var e;
  if(2<arguments.length)
    switch(arguments[2])
    {
    case 'POST':
      e = document.createElement('A');
      elem.appendChild(e);
      e.href = this.mt.strrev()+':'+addr;
      e.innerHTML = addr;
      break;
    default:
      e = document.createTextNode(addr);
      break;
    }
  else
    e = document.createTextNode(addr);
  return e;
}

Mail.prototype.postIt = function(elem)
{
  var f = document.createElement('FORM');
  document.body.appendChild(f);
  f.action = this.mt.strrev()+':'+this.extractAddr(elem.id);
  f.submit();
}



