function trim(str, chars) {
	return ltrim(rtrim(str, chars), chars);
}
 
function ltrim(str, chars) {
	chars = chars || "\\s";
	return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
}
 
function rtrim(str, chars) {
	chars = chars || "\\s";
	return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
}

/*
 * Popup functions
 */
function setAlertWindow(strTitle, strContent)
{
	jQuery('#pop_title').html(strTitle);
	jQuery('#pop_content').html(strContent);
	jQuery('#alertbox').fadeIn(200);
}

/*
 * Simple ajax request with pop-up answer and button hide.
 */
function simpleFormRequest(frm, callButton, url)
{
	var TheCollector = new frmDataCollector(frm),
	params = TheCollector.frmDataToParams();
	
	jQuery.post(url, params, function(retval){
		var arrRetval = retval.split("##");
		if (arrRetval[0] == "OK")
		{
			if (callButton)
				jQuery('#'+callButton).fadeOut(200);
			
			setAlertWindow('Enquiry Successful', arrRetval[1]);
		}
		else
			setAlertWindow('Equiry Error', arrRetval[0]);
	});
}

function setSendToPopup(link, subject)
{
	document.getElementById('send_link').value = link;
	document.getElementById('sendsubject').value = "Check this Peter Ambrose car out: "+subject;
	jQuery('#popup_send').fadeIn(200);
}

function setEnquiryPopup(id, subject)
{
	document.getElementById('enquiry_car').value = id;
	document.getElementById('enquirysubject').value = "Enquiry about: "+subject;
	jQuery('#popup_enq').fadeIn(200);
}

function setReservePopup(id, subject)
{
	document.getElementById('reserve_car').value = id;
	document.getElementById('reservesubject').value = "Online Reservation: "+subject;
	jQuery('#popup_reserve').fadeIn(200);
}

/*
 * Request CW finance from form 'frm'
 */
function requestFinance(frm, result, add)
{
    if( !add )add='';
    
	var objForm = document.getElementById(frm),
		objResult = document.getElementById(result);
	
	if (objForm != null && objResult != null)
	{
		var TheCollector = new frmDataCollector(frm),
			params = TheCollector.frmDataToParams(),
			url = "ajaxFinanceRequest.php"+add
		
		jQuery.post(url, params, function(retval){
			var arrRetval = retval.split("##");
			if (arrRetval[0] == "OK")
			{
				jQuery("#"+result).html(arrRetval[1]);
			}
			else
            {
				setAlertWindow('Finance Query Error', arrRetval[0]);
            }
		});
	}
	else
		alert("Form is NULL!");
}

function formEmailme()
{

}

function formAjaxRequest(frm, callButton, url)
{
	var objForm = document.getElementById(frm);
	
	if (objForm != null)
		simpleFormRequest(frm, callButton, url);
	else
		alert("Form is NULL!");
}

function getYears(makeId)
{
	var url = "ajaxGetYears.php",
		params = "make="+makeId;
	
	jQuery.post(url, params, function(retval){
		var arrRetval = retval.split("##");
		jQuery("#yearbox").html(arrRetval[1]);
		jQuery.jNice.SelectAdd(jQuery("#yearselect").get(0));
	});
}

function getModel(makeId)
{
	var url = "ajaxGetModel.php",
		params = "make="+makeId;
	
	jQuery.post(url, params, function(retval){
		var arrRetval = retval.split("##");
		jQuery("#cranbox").html(arrRetval[1]);
		jQuery.jNice.SelectAdd(jQuery("#cranselect").get(0));
	});
}

function sendContact(frm, callButton)
{
	var objForm = document.getElementById(frm),
		url = "ajaxCaptureContact.php";
	
	if (objForm != null)
		simpleFormRequest(frm, callButton, url);
	else
		alert("Form is NULL!");
}

/**
 * Form data collector creates GET or POST string by serializing a form.
 * @param frm - id parameter of the form to be serialized
 * @returns string params
 */
function frmDataCollector (frm)
{
	this.frm = document.getElementById(frm);
}

frmDataCollector.prototype =
{
	encodeNameAndValue: function(name, value)
	{
		param = name+'='+trim(value);
		return param;
	},
	
	frmDataToParams: function()
	{
		var params = "";
		var form = this.frm;
		
		for (var i = 0; i < form.elements.length; i++)
		{
			var field = form.elements[i];
			var stopped = false;
			
			switch (field.type) {
				case "button":
				case "submit":
				case "reset":
					stopped = true;
				break;
				case "checkbox":
				case "radio":
					if (!field.checked) {
						stopped = true;
						break;
					}
				case "text":
				case "hidden":
				case "password":
					params += this.encodeNameAndValue(field.name, field.value);
					break;
				default:
					switch(field.tagName.toLowerCase()) {
						case "select":
							params += this.encodeNameAndValue(field.name, field.options[field.selectedIndex].value);
							break;
						default:
							params += this.encodeNameAndValue(field.name, field.value);
					}
			}
			if (i < form.elements.length-2 && !stopped) {
				params += "&";
			}
		}
		return params;
	}
};
