/****************************************************************************/
/********************************** FORM ************************************/
/****************************************************************************/
function copyField(from, to) {
  if (typeof(from)  != 'undefined') {
    if (typeof(to) != 'undefined') {
      to.value = from.value;
    }
  }
}
function CopyFromBilling() {
  if (document.payForm.x_copy_bill.checked) {
    copyField(document.payForm.x_first_name, document.payForm.x_ship_to_first_name);
    copyField(document.payForm.x_last_name, document.payForm.x_ship_to_last_name);
    copyField(document.payForm.x_company, document.payForm.x_ship_to_company);
    copyField(document.payForm.x_address, document.payForm.x_ship_to_address);
    copyField(document.payForm.x_city, document.payForm.x_ship_to_city);
    copyField(document.payForm.x_state, document.payForm.x_ship_to_state);
    copyField(document.payForm.x_zip, document.payForm.x_ship_to_zip);
    copyField(document.payForm.x_country, document.payForm.x_ship_to_country);
  }
}

function UpdateForm(obj) {
  obj.value = 1;
  document.forms.unitForm.submit();
}

var focusObj = null;
// check a form for required fields; return true if all good, pop up an alert
// about badly formed fields and return false otherwise;
function validateForm(formobj, ignore, repress){
  if (ignore)
    var ignore = new String(ignore);
  var focusObj = null; 
	var alertMsg = "The following fields are required:\n";
	var l_Msg = alertMsg.length;
	var alertMsg2 = "Please correct the following fields:\n";
	var l_Msg2 = alertMsg2.length;
  var debug = false;

  // check required fields
	for (var i = 0; i < fieldRequired.length; i++){
		var obj = formobj.elements[fieldRequired[i]];
		if (obj && (!ignore || ignore.indexOf(obj.name) == -1)) {
			switch(obj.type) {
			case "select-one":
				if (obj.selectedIndex == -1 ||
            obj.options[obj.selectedIndex].text == "" ||
            obj.options[obj.selectedIndex].value == -1 ||
            obj.options[obj.selectedIndex].value == ""){
					alertMsg += " - " + fieldDescription[i] + "\n";
          if (!focusObj)
            focusObj = obj;
          setClass(fieldRequired[i], 'error');
				}
        else 
          setClass(fieldRequired[i], 'none');
        if (debug) alert(i + ':' +'select-one:' + fieldRequired[i] + "\n" + l_Msg + ' / ' + alertMsg.length);
				break;
			case "select-multiple":
				if (obj.options.length == 0){
					alertMsg += " - " + fieldDescription[i] + "\n";
          if (!focusObj)
            focusObj = obj;
          setClass(fieldRequired[i], 'error');
				}
        else {
          setClass(fieldRequired[i], 'none');
        }
        if (debug) alert(i + ':' +'select-multiple:' + fieldRequired[i] + "\n" + l_Msg + ' / ' + alertMsg.length);
				break;
			case "text":
			case "textarea":
				if (obj.value == "" || obj.value == null) {
					alertMsg += " - " + fieldDescription[i] + "\n";
          if (!focusObj)
            focusObj = obj;
          setClass(fieldRequired[i], 'error');
				}
        else 
          setClass(fieldRequired[i], 'none');
        if (debug) alert(i + ':' +'text/textarea:' + fieldRequired[i] + "\n" + l_Msg + ' / ' + alertMsg.length);
				break;
			default:
			}
			if (obj.type == null){
				var blnchecked = false;
				for (var j = 0; j < obj.length; j++){
					if (obj[j].checked){
						blnchecked = true;
					}
				}
				if (!blnchecked){
					alertMsg += " - " + fieldDescription[i] + "\n";
          if (!focusObj)
            focusObj = obj;
          setClass(fieldRequired[i], 'error');
				}
        else 
          setClass(fieldRequired[i], 'none');
			}
		}
    else
      setClass(fieldRequired[i], 'none');
	}

  // check regex fields
  if (alertMsg.length == l_Msg) {
  	for (var i = 0; i < fieldRequired.length; i++){
  		var obj = formobj.elements[fieldRequired[i]];
  		if (fieldRequired[i].length && obj && (!ignore || ignore.indexOf(obj.name) == -1)) {
  			switch(obj.type) {
    			case "text":
    			case "textarea":
            regex = fieldMatchRegex[i]
            RegExp.lastIndex = 0;
	    			if (obj.value != ""  && !obj.value.match(regex)) {
	    				alertMsg2 += " - " + fieldDescription[i] + "\n";
              if (!focusObj)
                focusObj = obj;
              setClass(fieldRequired[i], 'error');
		    		}
          else 
              setClass(fieldRequired[i], 'none');
			    	break;
			    default:
			  }
		  }
      else
        setClass(fieldRequired[i], 'none');
  	}
  }
  
  // give the message
  if (debug)
    alert(alertMsg.length + ' / ' + l_Msg + "\n" + alertMsg2.length + ' / ' + l_Msg2);
	if (alertMsg.length == l_Msg && alertMsg2.length == l_Msg2) {
    document.forms.payForm.x_amount.value = document.cartForm[0].value;
    var tmpval = '';
    var tmpobj = document.getElementById('cartForm')
    for (var i = 1; i < tmpobj.length; i++) {
      if (tmpobj[i].value && tmpobj[i].name)
        tmpval = tmpval + tmpobj[i].name + ": " + tmpobj[i].value + ", ";
    }
    document.forms.payForm.x_description.value = tmpval;
		return true;
  }
	else {
    if (focusObj && focusObj.name != undefined &&
        focusObj.type != 'hidden' && focusObj.style.display != 'none') {
      focusObj.focus();
      focusObj = null;
    }
    if (alertMsg.length != l_Msg) {
  		if (!repress) alert(alertMsg);
    }
    else {
  		if (!repress) alert(alertMsg2);
    }
		return false;
	}
}

/****************************************************************************/
/*********************************** AJAX ***********************************/
/****************************************************************************/
  var http_request = false;
   function makePOSTRequest(url, parameters) {
      http_request = false;
      if (window.XMLHttpRequest) { // Mozilla, Safari,...
         http_request = new XMLHttpRequest();
         if (http_request.overrideMimeType) {
         // set type accordingly to anticipated content type
            //http_request.overrideMimeType('text/xml');
            http_request.overrideMimeType('text/html');
         }
      } else if (window.ActiveXObject) { // IE
         try {
            http_request = new ActiveXObject("Msxml2.XMLHTTP");
         } catch (e) {
            try {
               http_request = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {}
         }
      }
      if (!http_request) {
         alert('Cannot create XMLHTTP instance');
         return false;
      }
      
      http_request.onreadystatechange = alertContents;
      http_request.open('POST', url, true);
      http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
      http_request.setRequestHeader("Content-length", parameters.length);
      http_request.setRequestHeader("Connection", "close");
      http_request.send(parameters);
   }

   function alertContents() {
      if (http_request.readyState == 4) {
         if (http_request.status == 200) {
            //alert(http_request.responseText);
            result = http_request.responseText;
            document.getElementById('_activity_').innerHTML = result;
         } else {
            alert('There was a problem with the AJAX request.');
         }
      }
      else
        document.getElementById('_activity_').innerHTML = 'Processing...';// + http_request.readyState;
   }

   function addToCart(obj) {
     if (obj[0].value) {
        var poststr = "cart_all=" + escape(encodeURI(obj[0].value));
        document.location="#CART";
        makePOSTRequest('_cart.php', poststr);
     }
   }

   function register(name, cost) {
     var poststr = "description=" + escape(encodeURI(name)) + "&cost=" +
       escape(encodeURI(cost)) + "&type=" + escape(encodeURI('registration'));
     document.location="#CART";
     makePOSTRequest('_cart.php', poststr);
   }

   function updateCart(obj) {
     if (obj[1].value) {
        var poststr = "qty_cart_all=" + escape(encodeURI(obj[1].value));
        document.location="#CART";
        makePOSTRequest('_cart.php', poststr);
     }
   }

   function addCoupon(obj) {
     if (obj[4].value != '') {
        var poststr = "coupon=" + escape(encodeURI(obj[4].value));
        document.location="#CART";
        makePOSTRequest('_cart.php', poststr);
     }
   }

   function removeCoupon(obj) {
      var poststr = "coupon=00000";
      document.location="#CART";
      makePOSTRequest('_cart.php', poststr);
   }

/****************************************************************************/
/********************************** STYLE ***********************************/
/****************************************************************************/
// utility fuction to set the class of an id and its label
// if focus=true the element (presumably an input) gets focus. 
function setClass(id, set_class) {
  if (document.getElementById && document.getElementById(id)) {
    var a = document.getElementById(id);
    var b = document.getElementById('l_'+id);
  }
  else if (document.all && document.all(id)) {
    var a = document.all(id);
    var b = document.all('l_'+id);
  }
  else if (document.layers && document.layers[id]) {
    var a = document.layers(id);
    var b = document.layers('l_'+id);
}
  else
    return false;
  a.className = set_class;
  if (b)
    b.className = set_class;
}

// for IE style problems - creates js equivalents for standard CSS
iefocus = function() {
  if (document.getElementById("FormWrapper")) {
    var tmp = document.getElementById("FormWrapper").getElementsByTagName("input");
    for (var i=0; i<tmp.length; i++) {
      if (tmp[i].type != "submit") {
        tmp[i].onfocus=function() {
          this.className+=" iefocus";
        }
        tmp[i].onblur=function() {
          this.className=this.className.replace(new RegExp(" iefocus\\b"), "");
        }
      }
    }
    var tmp = document.getElementById("FormWrapper").getElementsByTagName("select");
    for (var i=0; i<tmp.length; i++) {
      if (tmp[i].type != "submit") {
        tmp[i].onfocus=function() {
          this.className+=" iefocus";
        }
        tmp[i].onblur=function() {
          this.className=this.className.replace(new RegExp(" iefocus\\b"), "");
        }
      }
    }
  }
}
if (window.attachEvent) window.attachEvent("onload", iefocus);

/****************************************************************************/
/********************************** MISC ************************************/
/****************************************************************************/
function getStyle(id) {
  if (document.getElementById && document.getElementById(id))
    return document.getElementById(id).style;
  else if (document.all && document.all(id))
    return document.all(id).style;
  else if (document.layers && document.layers[id])
    return document.layers[id];
  else
    return false;
}

// turn a div on or off
function setDisplay(id, state) {
  var style = getStyle(id);
  if (state == 1 && style.display != 'block')
    style.display = 'block';
  else if (state == 0 && style.display != 'none')
    style.display = 'none';
  else if (state == 2) {
    if (style.display == 'none') style.display = 'block';
    else if (style.display == 'block') style.display = 'none';
  }
  if (style.display == 'none') return 0;
  else if (style.display == 'block') return 1;
}

/****************************************************************************/