function makeRequest(theType, theURL, theData, divContent, divLoading, f){
	if(f)
    {
        toggleForm(f, false);
    }

	var $divContent = $("#" + divContent);
	var $divLoading = $("#" + divLoading);

	$divContent.slideUp("normal", function(){
		$divLoading.slideDown("normal", function(){
			$.ajax({
				type: theType,
   				url: theURL,
   				data: theData,
   				dataType: "html",
   				success: function(msg){
   					$divLoading.slideUp("normal", function(){
   						$divContent.html(msg);
   						if(f)
                        {
                            // if a form is specified, we re-enable it
                            toggleForm(f, true);
                        }
						$divContent.slideDown("normal");
   					});
				},
				error: function(){
					$divLoading.slideUp("normal", function(){
   						$divContent.html("<p>Couldnot retrieve information.</p>");
   						if(f)
                        {
                            // if a form is specified, we re-enable it
                            toggleForm(f, true);
                        }
						$divContent.slideDown("normal");
					});
				}
			});
		});
	});
}

function validateForm(f)
{
	$(f).find(':input').each(function(){
		var $elem = $(this);
		if ($elem.is(":submit, :reset, :button, :image")) return true;
		if (($elem.is('.required') && $.trim($elem.val()) == '') || ($elem.is('.email') && !isEmailValid($elem.val())) || ($elem.is('.numeric') && isNaN($elem.val())))
		{
			$elem.addClass('validate_error');
			isOK = false;
		}
		else
			$elem.removeClass('validate_error');
	});

	if ($('.validate_error').length == 0) return true;

	return false;
}

function post(f)
{
	var $f = $(f);
    makeRequest($f.attr('method'), $f.attr('action'), serializeForm(f), $f.attr('divResult'), $f.attr('divWorking'), f);
}

function serializeForm(f)
{
	var params = "";
	var i = 0;
	$(f).find(':input').each(function(){
		var $elem = $(this);
		if ($elem.is(":submit, :reset, :button, :disabled, :image")) return true;
		if ($elem.is(":checkbox, :radio") && $elem.is(":not(:checked)")) return true;

		if (i > 0) params += "&";
		params += $elem.attr('name') + "=" + encodeURI($elem.val());
		i++;
	});

	return params;
}

function isEmailValid(s)
{
	s = $.trim(s);

	validRegExp = /^[^@]+@[^@]+.[a-z]{2,}$/i;

	// search email text for regular exp matches
    return (s.search(validRegExp) != -1);
}

function toggleForm(f, enabled)
{
	$(f).find(':submit, :reset, :button, :image').attr('disabled', !enabled);
}

function stripeThemAll()
{
	$(".stripe tr").removeClass("alt");

	$(".stripe tr").mouseover(function(){
			$(this).addClass("over");
	}).mouseout(function(){
		$(this).removeClass("over");
	});

	$(".stripe tr:even").addClass("alt");
	$(".stripe").each(function(){
		$(this).find('tr:last td').css('border', 'none');
	});
}

function redirDelay(url, sec)
{
	var script = 'document.location.href="' + url + '"';
	window.setTimeout(script, sec*1000)
}