function submit_to_cbg() {
    form = document.getElementById('theform');
    form.submit();
}

function highlight_div(div_id) {
    div_l = document.getElementById('column_left');
    div_c = document.getElementById('column_center');
    div_r = document.getElementById('column_right');

    highlight = '#e5eee8';

    if(div_id == 'column_left') {
	div_l.style.backgroundColor = highlight;
	div_c.style.backgroundColor = '';
	div_r.style.backgroundColor = '';

    } else if(div_id == 'column_center') {
	div_l.style.backgroundColor = '';
	div_c.style.backgroundColor = highlight;
	div_r.style.backgroundColor = '';

    } else if(div_id == 'column_right') {
	div_l.style.backgroundColor = '';
	div_c.style.backgroundColor = '';
	div_r.style.backgroundColor = highlight;
    }
}

function getXMLHttpThing() {
    if(window.XMLHttpRequest) {
	return new XMLHttpRequest();
    } else if(window.ActiveXObject) {
	return new ActiveXObject("Microsoft.XMLHTTP");
    }
    return false;
}


function submit_order(redirect, test_mode) {

    var product_id = check_for_empty_cart();
    if(! product_id) {
	alert('Please select a package from the top of the page');
	return false;
    }

    // send cust data to server for validation and saving
    var ret = get_invoice_id_for_cust();
    if(ret == 'nojs') {
	alert("Please upgrade to a browser that supports javascript :-)");
	return false;

    } else if(matches = ret.match(/^\d+$/)) {
	// add invoice_id to form then submit to CBG
	//alert('got an invoice id: ' + ret);

	var invoice_id = ret;

	document.getElementById('orderid').value = invoice_id;

	// map field names to CBG fieldnames in hidden fields
	var fieldname_map = {"first_name":"firstname", "last_name":"lastname",
			     "billing_address":"address1", "billing_address2":"address2",
			     "billing_city":"city", "billing_state":"state",
			     "billing_zipcode":"zip", "billing_country":"country",
			     "shipping_address":"shipping_address1",
			     "shipping_address2":"shipping_address2", "shipping_city":"shipping_city",
			     "shipping_state":"shipping_state", "shipping_zipcode":"shipping_zip", 
			     "shipping_country":"shipping_country", "email":"email", "phone":"phone"};

	var form = document.theform;

	for(var fieldname in fieldname_map) {
	    var cbg_fieldname = fieldname_map[fieldname];
	    var field = document.getElementById(fieldname);
	    var cbg_field = document.getElementById(cbg_fieldname);
	    if(! cbg_field) {
		var hidden = document.createElement('input');
		hidden.type = 'hidden';
		hidden.name = cbg_fieldname;
		hidden.id = cbg_fieldname;
		hidden.value = field.value;
		form.appendChild(hidden);
	    }
	}

	// create CBG specific fields
	var cbg_fields = {"type":"sale", "redirect":redirect,"customer_vault":"add_customer"};


	var products = {"100":{"price":28.95,"shipping":12.95}, // Health
			"101":{"price":28.95,"shipping":12.95}, // Wellness
			"102":{"price":52.95,"shipping":12.95}, // All Inclusive
			"103":{"price":19.95,"shipping":12.95}, // Major Med
			"104":{"price":0.0,"shipping":12.95}} // Wellness 1st month free

	var amount = products[product_id].price + products[product_id].shipping;

	var exp_date = document.theform.cc_exp_month.value + document.theform.cc_exp_year.value.substr(2,2);
	cbg_fields['ccexp'] = exp_date;
	
	var hash_time = get_cbg_hash(amount, invoice_id, test_mode);
	cbg_fields['hash'] = hash_time.hash;
	cbg_fields['time'] = hash_time.time;
	cbg_fields['amount'] = amount;
	// dev key
	if(test_mode) {
	    cbg_fields['key_id'] = '449510';
	} else {
	    cbg_fields['key_id'] = '1001953';
	}

	//alert('product_id: ' + product_id);

	for(var key in cbg_fields) {
	    field = document.getElementById(key);
	    if(field) {
		field.value = cbg_fields[key];
	    } else {
		var hidden = document.createElement('input');
		hidden.type = 'hidden';
		hidden.name = key;
		hidden.id = key;
		hidden.value = cbg_fields[key];
		form.appendChild(hidden);
	    }
	    
	}

	//return false;
	return true;
    }

    // handle form validation errors
    var errors = eval('(' + ret + ')');
    //alert("There are errors:\n" + ret);

    // clear out all error lables before showing new ones
    var fields = new Array('first_name', 'last_name', 'billing_address',
			   'billing_address2', 'billing_city', 'billing_state',
			   'billing_zipcode', 'billing_country',
			   'shipping_address', 'shipping_address2',
			   'shipping_city', 'shipping_state', 'shipping_zipcode',
			   'shiping_country', 'shipping_same', 'email', 'phone');

    for(var idx in fields) {
	field = fields[idx];
	if(f = document.getElementById(field + '_label')) {
	    f.className = '';
	}
    }

    // assign class=error to all error fields
    for(var field_name in errors) {
	var e = document.getElementById(field_name + '_label');
	if(e != null) {
	    //var test = eval('ret.'+field_name);
	    e.className = 'error_field';
	}
    }


    return false;
}

function field_values_to_query_string(fields) {
    var output = '';
    
    for(var i in fields) {
	var field_name = fields[i];
	if(field_name == 'simple_solution') {
	    var radio = document.theform.simple_solution;
	    if(radio) {
		if(radio.value) {
		    selected = radio.value;
		} else {
  		    for(i=0; i < radio.length; i++) {
			if(radio[i].checked) {
			    selected = radio[i].value;
			}
		    }
		}
		output += escape(field_name) + "=" + escape(selected) + "&";
	    }

	} else if(field_name == 'shipping_same') {
            var field = document.getElementById(field_name);
            if(field && field.checked) {
		output += escape(field_name) + "=1" + "&";
            }

	} else {
	    var field = document.getElementById(field_name);
	    if(field && field.value) {
		output += escape(field_name) + "=" + escape(field.value) + "&";
	    }
	}
    }

    return output;
}


function get_invoice_id_for_cust() {

    var fields = new Array('first_name', 'last_name', 'billing_address',
			   'billing_address2', 'billing_city', 'billing_state',
			   'billing_zipcode', 'billing_country',
			   'simple_solution', 'shipping_address', 'shipping_address2',
			   'shipping_city', 'shipping_state', 'shipping_zipcode',
			   'shiping_country', 'shipping_same', 'email', 'phone');

    var query_string = field_values_to_query_string(fields);

    var http = getXMLHttpThing();
    if(! http) {
	return 'nojs';
    }

    http.open('GET', 'save_cust.php?' + query_string, false);
    http.send(null);
    
    return http.responseText;
}

function get_cbg_hash(amount, invoice_id, dev) {
    var http = getXMLHttpThing();
    if(! http) {
	return 'nojs';
    }

    if(dev) {
	var dev = '&dev=1';
    } else {
	var dev = '';
    }

    http.open('GET', 'cbg_hash.php?amount=' + escape(amount) + '&invoice_id=' + invoice_id + '&' + dev, false);
    http.send(null);

    return eval('('+http.responseText+')');
}


function check_for_empty_cart() {
    var product_select_field = document.theform.simple_solution;
    var checked = false;
    var selected = false;
    if(product_select_field.value) {
	return product_select_field.value;
    } 

    for(i=0; i < product_select_field.length; i++) {
	if(product_select_field[i].checked) {
	    checked = true;
	    selected = product_select_field[i].value;
	}
    }
    
    return selected;
}
