dojo.require("dijit.form.Form");
dojo.require("dijit.form.TextBox");
dojo.require("dijit.form.Textarea");
dojo.require("dijit.form.CheckBox");
dojo.require("dijit.form.DateTextBox");
dojo.require("dijit.form.NumberSpinner");
dojo.require("dijit.Editor");
dojo.require("dijit.form.Textarea");
dojo.require("dijit.form.FilteringSelect");
dojo.require("dijit.layout.ContentPane");
dojo.require("dojo.parser");

// empty arrays for the dojo contents of the step divs
var parsed = new Array();
var buttons = new Array();
//parsed[2] = new Array();
//parsed[3] = new Array();
//parsed[4] = new Array();

function init()
{
	//senddata('loadinitform');
	makebtns();
}

function senddata(request)
{
	//element = dojo.byId(request);
	var element = dijit.byId(request);
	var format = 'text';
	var btn = request;
	//console.log(request);
	//console.log(element.attr('value'));
	
	switch(request)
	{
		case 'btn_getrates':
			var action = 'validate';
			var format = 'json';
			//busybtn(request);
			break;
		case 'btn_enquirenow':
			var action = 'enquire';
			var target = 'page';
			//busybtn(request);
			break;
		case 'btn_sendmail':
			var action = 'validate';
			var target = 'page';
			var format = 'json';
			//busybtn(request);
			break;
			
		case 'loadinitform':
			var action = 'init';
			var target = 'searchform';
			break;
		case 'sendmail':
			document.forms['getrates'].submit();
			return 0;
			//dojo.byId('btn_sendmail').onClick = '';
			//var action = 'sendmail';
			//var target = 'success';
			//var format = 'text';
			break;
		case 'getrates_independent':
			var action = 'getrates/code/independent';
			var target = 'independent';
			var format = 'json';
			var btn = 'btn_getrates';
			break;
		case 'getrates_serviced':
			var action = 'getrates/code/serviced';
			var target = 'serviced';
			var format = 'json';
			var btn = 'btn_getrates';
			break;
		
		default:
			var rawdata = request + '=' + element.value;
			break;
	}
	
	if (format == 'json') var func = updatejson;
	if (format == 'text') var func = updatestring;

	var xhrArgs = {
                    url: "/accommodation/property/getrates/" + action,
                    //postData: rawdata,
                    handleAs: format,
                    load: function(data) { func(data, target, action, request, btn) },
					error: function(target) { error(target, btn) },
                    form: dojo.byId('getrates')
                }
	dojo.xhrPost(xhrArgs);
	busybtn(btn);
	return 0;
}

function error(target, request)
{
	var targetNode = dojo.byId(target);
	targetNode.innerHTML = "<p class=\"errors\">An error was encountered submitting your request. Please contact Hokkaido Tracks Holidays directly via email or phone.</p>";
	normbtn(request);
}

function updatejson(data, target, action, request, btn)
{
	//alert(data);
	//console.log(data);
	//console.log(target);
	if (action == 'validate')
	{
		validate(data, request, btn);
		return 0;
	}

	for (var n in data)
	{

		if (data[n].type == 'html') dojo.byId(data[n].target).innerHTML = data[n].data;
		if (data[n].type == 'value') dojo.byId(data[n].target).value = data[n].data;
	}

	
	//var targetNode = dojo.byId(target);
	
	normbtn(btn);
	//targetNode.innerHTML = data;

	return 0;
}


function updatestring(data, target, action, request, btn)
{
	//console.log(data);
	//console.log(target);
	//if (target == 'success') 
	var targetNode = dojo.byId(target);
	
	//var afternode = 'step' + --pos;
	//dojo.empty('step2');
	//dojo.create('div', { id: node }, afternode, 'after');
	//new dijit.layout.ContentPane({content: data.substring(data.indexOf('=') + 1)}, targetNode);
	//var testnode = dojo.byId('step2');
	//if(testnode) alert('found');
	//dojo.empty(node);
	

/*
	//var current = parsed[target];
	if(parsed[target].length > 0)
	{
		for(var i = 0; i < parsed[target].length; i++)
		{
			parsed[target][i].destroyRecursive();
		}
	}
	alert('done destroying');
*/
	//if (target.dijits) target.dijits.destroyRecursive();
	
	//targetNode.innerHTML = data;
	//parsed[target] = dojo.parser.parse(targetNode); // doesn't work with the black stuff
	new dijit.layout.ContentPane({content: data, style: "padding: 10px"}, targetNode); // some how using this method to parse the dijits will return errors. This is good since the below method does not. So in future I may need to use this method while debugging.
	makebtns();
	normbtn(btn);
	//alert('created');
	//presult = dojo.parser.parse();
	//console.log(presult);
	//alert('done parsing');
	return 0;
}

function validate(data, request, btn)
{

	if (data != true)
	{
		// first clear all the currently displaying errors
		normbtn(btn); // need to reset the button image as we return here
		var errordivs = dojo.query('dd.element > div.error')
		for (var n in errordivs)
		{
			errordivs[n].innerHTML = '';
		}
		// check for errors
		for (var subformname in data)
		{
			var subform = data[subformname]
			for (var element in subform)
			{
				var errors = subform[element]
				var message = '<ul class="errors">';
				for (var error in errors)
				{
					message += '<li>' + errors[error] + '</li>';
				}
				message += '</ul>';
				//console.log('#widget_' + subformname + '-' + element + ' + div.error');
				// the 'widget_' prefix is for dijits. If not using dijits remove prefix.
				//dojo.query('#widget_' + subformname + '-' + element + ' + div.error')[0].innerHTML = message;
				// while the above is really great for some cases, dojo is just too inconsistent in it's nameing scheme. So I've outputted an unique id into each error div
				dojo.byId('error_' + element).innerHTML = message;
			}
		}

		return 0;
	}
	else if (data == true)
	{
		//console.log(typeof(data) + 'chck');
		// first clear all the currently displaying errors
		normbtn(btn); // need to reset the button image as we return here
		var errordivs = dojo.query('dd.element > div.error')
		for (var n in errordivs)
		{
			errordivs[n].innerHTML = '';
		}

		//get the server do it's thang
		switch (request)
		{
			case "btn_sendmail" :
				senddata('sendmail');
				//data = "<h3>Submitting your enquiry...</h3>";
				break;
			case "btn_getrates" :
				senddata('getrates_independent');
				senddata('getrates_serviced');
				//data = "<h3>Fetching rates now...</h3>";
				break;
		}

		return 0;
	}
}

function Button(id, normsrc, busysrc, queue)
{
	this.id = id;
	this.normsrc = normsrc;
	this.busysrc = busysrc;
	this.queue = queue;
}

function makebtns()
{
	btns = dojo.query(".btn");
	//alert(btns);
	//console.log(btns);
	for (var n in btns)
	{
		buttons[btns[n].id] = new Button(btns[n].id, btns[n].src, '/uploads/images/buttons/flat/loading.gif', 0)
//		btns[n].normsrc = btns[n].src;
//		btns[n].busysrc = '/uploads/images/buttons/flat/loading.gif';
//		btns[n].queue = 0;
	}
}

function busybtn(btn)
{
	el = dojo.byId(btn);
	if (el)
	{
		el.disabled = true;
		el.src = buttons[btn].busysrc;
		buttons[btn].queue++;
	}

}

function normbtn(btn)
{
	el = dojo.byId(btn);
	if (el)
	{
		buttons[btn].queue--;
		if (buttons[btn].queue <= 0)
		{
			el.src = buttons[btn].normsrc;
			el.disabled = false;
			buttons[btn].queue = 0;
		}
	}

}

dojo.addOnLoad( function() { init(); });
