function frmDataCollector(frm)
{
	this.frm = frm;
}

frmDataCollector.prototype =
{
	encodeNameAndValue: function(name, value)
	{
		param = name+'='+escape(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;
	}
}

function AjaxMailer(frm, functFlagCallback, strFeedbackDivId, strSendBtnId)
{
	this.oThis = this;
	this.objForm = document.forms[frm];
	this.mandatory = new Array();
	this.FlagCallback = functFlagCallback;
	this.strFeedbackDiv = strFeedbackDivId;
	this.sendBtn = strSendBtnId;
	
	if (this.objForm != null)
	{
		this.theCollector = new frmDataCollector(this.objForm);
		
		for (i = 0; i < this.objForm.elements.length; i++)
		{
			if (this.objForm.elements[i].className.match(/mandatory/))
				this.mandatory.push(this.objForm.elements[i].name);
		}
	}
}

AjaxMailer.prototype = {
	
	inArray: function(needle, haystack, argStrict)
	{
		var key = '',
			strict = !! argStrict;
	 
		if (strict)
		{
			for (key in haystack)
			{
				if (haystack[key] === needle)
					return true;
			}
		}
		else
		{
			for (key in haystack)
			{
				if (haystack[key] == needle)
					return true;
			}
		} 
		return false;
	},
	
	emailCheck: function(strValue)
	{
		if (!strValue.match(/^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/))
			return false;
			
		return true;
	},
	
	setInputFlag: function(strElementId, bolFlag)
	{
		var objFlagCarrier = document.getElementById(strElementId),
			flagImage = (bolFlag ? "pipa.png" : "ix.png"),
			strMsg = (bolFlag ? "OK!" : "This field is not filled in properly!");
		
		
		if (objFlagCarrier !== null)
		{
			objFlagCarrier.innerHTML = '<img class="feedbackimg" src="images/'+flagImage+'" title="'+strMsg+'" />';
			objFlagCarrier.style.display = 'block';
		}
	},
	
	checkField: function(objField)
	{
		if (this.inArray(objField.name, this.mandatory, false))
		{
			switch (objField.name)
			{
				case 'email':
					if (!this.emailCheck(objField.value))
					{
						if (this.FlagCallback){this.setInputFlag(this.objForm.elements[i].name, false);}
						return false;
					}
					else
					{
						if (this.FlagCallback){this.setInputFlag(this.objForm.elements[i].name, true);}
						return true;
					}
					break;
				default:
					if (objField.value == '')
					{
						if (this.FlagCallback){this.setInputFlag(this.objForm.elements[i].name, false);}
						return false;
					}
					else
					{
						if (this.FlagCallback){this.setInputFlag(this.objForm.elements[i].name, true);}
						return true;
					}
			}
		}
		return true;
	},
	
	checkForm: function()
	{
		var retval = true;
		for (i = 0; i < this.objForm.elements.length; i++)
		{
			if (!this.checkField(this.objForm.elements[i]) && retval)
				retval = false;
		}
		if (retval)
			$('#'+this.sendBtn).fadeIn('fast');
		else
		{
			if ($('#'+this.sendBtn).attr('display') != 'none')
				$('#'+this.sendBtn).fadeOut('fast');
		}
			
		return retval;
	},
	
	hideMessagBox: function()
	{
		$("#"+this.strFeedbackDiv).fadeOut();
		if ($('#'+this.sendBtn).attr('display') != 'none')
				$('#'+this.sendBtn).fadeOut('fast');
	},
	
	execRequest: function()
	{
		var url = 'ajaxMailer.php',
			params = this.theCollector.frmDataToParams(),
			oThis = this;
		
		$("#"+this.strFeedbackDiv).fadeIn('fast');
		
		if (this.checkForm())
		{
			$.post(url, params, function(retval)
								{
									if (oThis.strFeedbackDiv)
									{
										$("#messagebox_"+oThis.strFeedbackDiv).html(retval);
									}
								});
		}
	}
	
}

function getModelList(makeId, strTargetDivId)
{
	var url = 'ajaxGetModels.php',
		params = 'manufacturers_id='+makeId,
		objTargetDiv = $('#'+strTargetDivId);
	
	if (objTargetDiv != null)
	{
		objTargetDiv.fadeIn('fast');
		if (makeId)
		{
			$.post(url, params, function(retval)
										{
											objTargetDiv.html(retval);
										});
		}
		else
		{
			objTargetDiv.fadeOut(400, function()
								 {
									 objTargetDiv.html("");
								 });
		}
	}
}
