jQuery.fn.freeQuoteForm = function(opts){

	var $self = this;
	var defaults = {
		notice_block: '.notice',
		default_values: {},
		submitcallback: {
			init  : false,
			submit: false
		}
	};
	var options = $.extend(defaults, opts);

	function onFreeQuoteSubmitSuccess(response){
		//console.log(response);
		if(response.errors.length==0){
			clearFreeQuoteForm();
		}
		$(options.notice_block).html(response.message);

		//forceRerenderingIE67();
		if($.isFunction(options.submit_callback)){
			options.submit_callback();
		}
	}

	function onFreeQuoteSubmitError(response){
		$(options.notice_block).html('Unknown error occurred while submitting the form. Please try later.');
	}

	function clearFreeQuoteForm(){
		$self.find(':input:not(:hidden,:button)').each(function(){
			var field_name = $(this).attr('name');
			if(field_name=='email-to' || field_name=='email-subject') return ;
			var default_value = $(this).data('default-value');
			if(typeof default_value != 'undefined'){
				$(this).val( default_value );
			}else if( $(this).is('select') ){
				$(this).children('option').attr('selected', false).filter(':first').attr('selected', true);
			}else{
				$(this).val('');
			}
		});
	}

	if(typeof opts == "object"){
		if($.browser.msie && $.browser.version>=8){
			$(this).find('input:text').keypress(function(e){
				if(e.which==13){
					e.stopPropagation();
					$(this.form).submit();
					return false;
				}
			});
		}

		$(this).submit(function(){
			$.ajax({
				type: 'POST',
				url: '/get-a-free-quote.html',
				data: $(this).serialize(),
				success: onFreeQuoteSubmitSuccess,
				error: onFreeQuoteSubmitError,
				dataType: "json"
			});
			return false;
		});

		if( typeof options.default_values == 'object' ){
			for(k in options.default_values){
				var val =  Base64.decode(options.default_values[k]);
				var $input = $self.find(':input[name='+k+']');
				if($input.length) $input.data('default-value', val);
			}
		}

		clearFreeQuoteForm();
	}else{
		switch (opts) {
			case 'clear':
				clearFreeQuoteForm();
				break;
			default:
				break;
		}
	}
}

