var sqty = new Array ();  			// shipping qty breakpoints
var samt = new Array ();  			// amount charged
var sn   = 0;             			// number of shipping brkpts
var stxt = "";            			// shipping type text
var on  = 1;
var off = 0;
var root = new Object ();

root.xx_ship = on;        			// default shipping option

function ChkFlg (amt, temp) { 			// check for special flag char
var pos;
  pos  = temp.indexOf ("$");  			// is there a price adjustment?  
  if (pos >= 0) amt = amt + temp.substring (pos + 1)*1.0;
  return amt;
}

function ClearAll () {
  sn = 0;  					// reset shipping indicator
}

function Dollar (val) {  			// force to valid dollar amount
var str,pos,rnd=0;
  if (val < 1) rnd = 1;
  str = escape (val*1.0 + 0.005001 + rnd);  	// float, round, escape
  pos = str.indexOf (".");
  if (pos > 0) str = str.substring (rnd, pos + 3);
  return str;
}

function Process (obj1) {      			// process the form, but not submit
var i,j,obj,bqty,bamt,btxt,tshp,val,pos,lettercount,colors,mcpos,mcval,fcpos,fcval,ntxt="";

  if (root.xx_ship == on) {  			// check shipping option
    if (sn == 0) {
      alert("Please select order type.");
      return false;
    }
  }

  lettercount = obj1.os0.value.length*2;	// calculate cost of order name
  bamt = (obj1.baseamt.value-1.00)*1.0;		// load base amount
  bqty = 1;         				// quantity
  bqty = bqty*1.0;                    		// float value

  if (obj1.os0.value != "") {
     btxt = obj1.basedes.value + " $" + lettercount + ".00";
  }
  else {
     btxt = "No Name Painting";
  }

  for (i=0; i<obj1.length; i++) {     		// run whole form
    obj = obj1.elements[i];           		// ref particular element
    if (obj.name != "") continue;     		// skip named elements

    if (obj.type == "select-one") {   		// dropdowns
      pos = obj.selectedIndex;        		// which option selected
      val = obj.options[pos].value;   		// get selection
      bamt = ChkFlg (bamt, val);      		// any flag chars
      btxt = btxt + ", " + val;
    } else
    if (obj.type == "select-multiple") { 	// select-multiple
      for (j=0; j<obj.options.length; j++) { 	// run all options
        if (obj.options[j].selected) {
          val = obj.options[j].value;
          bamt = ChkFlg (bamt, val);     	// any flag chars
          btxt = btxt + ", " + val;
        }
      }
    } else
    if (obj.type == "checkbox") {     		// checkboxes
      if (obj.checked) {              		// just the selected ones
        val = obj.value;              		// the value of it
        bamt = ChkFlg (bamt, val);   		// any flag chars
        btxt = btxt + ", " + val;
      }
    } else
    if (obj.type == "text") {        		// text
      if (obj.value.length > 0) {
        val = obj.value;             		// value of text
        ntxt = val;
      }
    }
  }

  tshp = 0;                  			// shipping charges
  for (i=sn-1; i>=0; i--) {  			// run backwards
    if (bqty >= sqty[i]) {  			// qty brkpt
      tshp = samt[i]*1.0;    			// set shipping amount
      break;
    }
  }

      if (obj1.mcolor.value != "" && obj1.fcolor.value != "") {
         mcpos = obj1.mcolor.selectedIndex;        	
         mcval = obj1.mcolor.options[mcpos].value;
         fcpos = obj1.fcolor.selectedIndex; 
         fcval = obj1.fcolor.options[fcpos].value; 
         if (ntxt != "") {
	    ntxt = ", " + ntxt;
         }
         colors = mcval + " Mat" + ", " + fcval + " Frame" + ntxt;
      }
      else if (obj1.mcolor.value != "") {
         mcpos = obj1.mcolor.selectedIndex; 
         mcval = obj1.mcolor.options[mcpos].value;
         if (ntxt != "") {
	    ntxt = ", " + ntxt;
         }
         colors = mcval + " Mat" + ntxt;
      }
      else if (obj1.fcolor.value != "") {  
         fcpos = obj1.fcolor.selectedIndex; 
         fcval = obj1.fcolor.options[fcpos].value;   
         if (ntxt != "") {
	    ntxt = ", " + ntxt;
         }
         colors = fcval + " Frame" + ntxt;

      }
      else {
         colors = ntxt;
      }

  obj1.os1.value = colors;

  bamt = bamt + lettercount;			// add cost of order name to bamt

  obj1.shipping.value = Dollar (tshp);		// plug shipping cost
  obj1.amount.value = Dollar (bamt); 		// plug total amount
  obj1.item_name.value = btxt;        		// plug description
}

function SetSH (q1, s1) {      			// set shipping breakpoints
var i;
  sn = 0;                      			// count of breakpoints
  for (i=0; i<arguments.length; i=i+2) {
    sqty[sn] = arguments[i];   			// price breakpoint
    samt[sn] = arguments[i+1]; 			// shipping charge
    sn = sn + 1;               			// number of bkpts
  }
}

function Shipper (obj1) {  			// process user-selected shipping
var obj,pos;
  SetSH ();
  pos = obj1.selectedIndex;       		// which shipping was selected
  stxt = obj1.options[pos].text;  		// user selection
  switch (pos) {                  		// item selected
    case 0:  					// no selection made, return.
      break;
    case 1:  					// Name Only
      SetSH (1,5.00);  
      break;
    case 2:  					// Name and Mat
      SetSH (1,10.00);
      break;
    case 3:  					// Name, Mat, and Frame
      SetSH (1,15.00);  
      break;
    case 4:  					// Mat and Frame
      SetSH (1,15.00);  
      break;
    case 5:  					// Mat Only
      SetSH (1,10.00);
      break;
    case 6:  					// Frame Only
      SetSH (1,15.00);  
      break;
  }
}

