/**
 * Form submit & ajax req_xml
 */

var JESUS_THEME_ROOT = JESUS_SCRIPT_ROOT + ((JESUS_THEME == '' ) ? '' : 'themes/' + JESUS_THEME + '/');

function url(str)
{
	return JESUS_SCRIPT_ROOT + str;
}

function href(str)
{
	return $('#url_' + str).attr('href');
}

function theme(str)
{
	return JESUS_THEME_ROOT + str;
}

function icon(str_icon, str_class)
{
	if (str_class) {
		str_class = ' class="' + str_class + '"';
	} else {
		str_class = '';
	}

	return '<img src="' + theme('img/' + str_icon) + '"' + str_class + ' />';
}

function parse_xml(str_xml, dom_default)
{
//	$("" + str_xml).find('ajax').each (function () {
//	alert(str_xml);
	$("<?xml version=\"1.0\"?><xml>" + str_xml + "</xml>").find('ajax').each(function () {
		switch ($(this).attr('type')) {
		//
		// Replace html
		//
		case 'html':
			// Target specified, put html there
			if ($(this).attr('target')) {
				$($(this).attr('target')).html($(this).html());
			// Use default html target element
			} else {
				dom_default.html($(this).html());
			}

			break;
		//
		// Run javascript
		//
		case 'js':
			eval($(this).html());
			break;
		//
		// Unknown type
		//
		default:
			alert("Unhandled ajax response block '" + $(this).html() + "'");
		}
	});
}

function req_xml(str_uri, str_target, str_form)
{
	// Check parameter sanity
	if (typeof(str_uri) != 'string') {
		str_uri = str_uri.href;
	}

	if (str_uri == '') {
		return false;
	}

	// Get the target html element
	if (str_target == '' || !(dom_target = $('#' + str_target))) {
		alert('Element "' + str_target + '" does not exist');
		return false;
	}

	//We have a form to submit
	if (str_form && (dom_form = $('#' + str_form))) {
		post_data = dom_form.serialize();
	} else {
		post_data = {};
	}

	// Make the call
	$.ajax({
		url: str_uri,
		type: 'POST',
		dataType: 'html',
		data: post_data,
		target: dom_target,

		// Prepare "loading" effect
		beforeSend: function () {
			str_node = (dom_target[0].nodeName.toLowerCase() == 'tr') ? 'td' : 'div';
			str_html = '<' + str_node + ' style="' +
				'width: ' + $(dom_target).width() + 'px;' +
				'height: ' + $(dom_target).height() + 'px;" ' +
				'class="ajax_loading">' + JESUS_AJAX_LOADING + '</' + str_node + '>';
			dom_target.html(str_html);
		},

		// Display an ajax error message
		error: function () {
			str_node = (dom_target[0].nodeName.toLowerCase() == 'tr') ? 'td' : 'div';
			str_html = '<' + str_node + ' style="' +
				'width: ' + $(dom_target).width() + 'px;' +
				'height: ' + $(dom_target).height() + 'px;" ' +
				'class="ajax_error">' + JESUS_AJAX_ERROR + '</' + str_node + '>'; 
			dom_target.html(str_html);
		},

		// Assign return data to the passed target
		success: function (str_data) {
			if (str_data.indexOf('<ajax') != -1) {
				parse_xml(str_data, this.target);
			} else {
				this.target.html(str_data);
			}
		}
	});

	return false;
}

function submit_form(str_form, var_args)
{
	dom_form = $('#' + str_form);

	if (dom_form.length == 0) {
		alert('Form `' + str_form + '` not found!');
		return;
	} else {
		dom_form = dom_form[0];
	}

	// Concatenate string arguments
	if (var_args) {
		if (typeof(var_args) == 'string') {
			dom_form.action += var_args;
		// Reset form string from anchor's href
		} else {
			dom_form.action = var_args.href;
		}
	}

	$(dom_form).submit();

	return false;
}

Date.prototype.unix = function() {
	return Math.round(this.getTime() / 1000);
}
