// JavaScript Document
//get the dojo modules we're using:
  dojo.require("dojo.parser");
  dojo.require("dojo.rpc.JsonService");
var rpcObject; //shared, but can't be instantiated just yet
var spliceStore; 

//dojo initializer:

dojo.addOnLoad(function () {
	//construct the Simple Method Description (SMD)
	//for the status update server interactions
	var smd = {
		"serviceType": "JSON-RPC",
		"serviceURL": "sim_server.php",
		"timeout": 20000,//20 seconds? increased from 5 seconds on 11/23/2010
		"methods": [
			{
				"name": "getTotal",
				"parameters": [{name : "formData"}]
			}
			,
			{
				"name": "getSim",
				"parameters": [{name : "formData"}]
			}
			,
			{
				"name": "validateForm",
				"parameters": [{name : "formData"}]
			}
			,
			{
				"name": "prepSubmit",//combines getting the SIM API fields and validating the form
				"parameters": [{name : "formData"}]
			}

			]//methods array
	};//smd declaration

	rpcObject = new dojo.rpc.JsonService(smd);
	
});//dojo.addOnLoad

//call to acknowledge receipt/processing of sim_server.php response
function simserver_ack(simserver_ID) { 
	var ackargs = {url: "sim_server_ack.php", content: {log_simserver_ID: simserver_ID}}
	dojo.xhrPost(ackargs)
	}


function updateDom(json)
{
	var id,node,ack;
	ack=false;
	//alert(dojo.toJson(json));//debug
	for(id in json)
	{
		if(id=='log_simserver_ID') {
			ack=json[id];
		}
		node=dojo.byId(id);
		if(node) node.innerHTML=json[id];
	}
	if (ack) {
		simserver_ack(ack);
	}
}

/**
 * called by each relevant UI item
 */
function updateTotal()
{
	dojo.byId("amount_display").innerHTML="(waiting for update)";
	var rpc=rpcObject.getTotal(dojo.formToObject("order_form"));
	rpc.addCallback(updateDom);
}

/**
 * Begin the process of submitting the form; 
 * need to get the SIM API values and validate the form
 * @return
 */
function submitAuthorizeNet()
{
	dojo.byId("amount_display").innerHTML="(preparing for Authorize.Net)";
	var rpc=rpcObject.prepSubmit(dojo.formToObject("order_form"));
	rpc.addCallback(updateDom);
	rpc.addCallback(validateAndSubmit);
}

function validateAndSubmit(json)
{
	var message='';
	var displayAlert=false;
	var displayConfirm=false;
	var tmp;

	if(json.formActionUrl) {
		dijit.byId("order_form").attr('action',json.formActionUrl);
	}
	
	if(json.validateFormErrors && json.validateFormErrors!='') {
		if ('' != message) message += "\r\n";
		message += "Please fix the following: \r\n" + json.validateFormErrors;
		displayAlert=true;
	}
	if(json.validateFormWarnings && json.validateFormWarnings!='') {
		if ('' != message) message += "\r\n";
		message += "Please consider the following: \r\n" + json.validateFormWarnings;
		displayConfirm=true;
	}
	//alert (error) takes precedence over confirm (warning)
	if (displayAlert)
	{
		alert(message);
	}
	else if (displayConfirm)
	{
		tmp = confirm(message+"\r\nClick OK to submit anyway or Cancel to change.");
		if (tmp) 
		{
			submit_order_form();
		}
	}
	else {//if neither confirm nor alert
		submit_order_form();
	}
}

function debugFormContents()
{
	alert(dojo.formToJson("order_form"));
}

function submit_order_form()
{
	if(dijit.byId("order_form").isValid()) {
		dijit.byId("order_form").submit();
	}
	else {
		alert("Please check the form for data-entry errors before submitting.");
	}
}
