// Displetform.js 0.14
(function ($) {

	$.fn.displetform = function (options) {
		function createMethodRef(object, method) {
			return function () {
				method.apply(object, arguments);
			}
		}

		return this.each(function () {
			var $this = $(this);

			// Merge config objects
			$this.params = $.extend(true, {}, $.fn.displetform.defaults, $.fn.displetform.global_config, options);

			// Give event handlers this scope
			$.each($this.params.callbacks, function (i, fn) {
				if (fn != null) {
					$this[i] = createMethodRef($this, fn);
				}
			});

			// Call each rendering function with this scope
			$.each($this.params.render_functions, function (i, fn) {
				if (fn != null) {
					fn.call($this);
				}
			});
		});
	};

	$.fn.displetform.defaults = {};

	$.fn.displetform.global_config = {
		'options': {},
		'fields': {}
	};

	$.fn.displetform.defaults.render_functions = {
		'init': function () {
			if ($.inArray(' displet-hide=1', document.cookie.split(';')) != -1) {
				this.css('display', 'none');
			}
		},

		'draw_container': function () {
			this.container = $('<table class="displetform rounded"></table>').appendTo(this);
		},

		'draw_form_title': function () {
			$('<tr><td colspan='
				+ (this.params.options.columns * 2)
				+ ' id="displet_form_title">Search Now</td></tr>').appendTo(this.container);
		},
		
		'draw_min_user_fields': function () {
			var row = $('<tr></tr>').appendTo(this.container);
			if (this.params.minbed != undefined
					&& this.params.minbed != null
					&& this.params.minbed.length != 0
					&& this.params.minbed != '') {
					var td = $('<td '+ '></td>').appendTo(row);

					$('<label for="minbed">'
						+ this.params.options.minbed_label
						+ '</label>').appendTo(td);
					var td2=$('<td '+'></td>').appendTo(row);
					var minbed_select = $('<select style="width:98px;margin:0;" name="minBedrooms" id="minBedrooms" class="displetfield"></select>').appendTo(td2);

					$('<option disabled="disabled" selected="selected" value="none">'
						+ this.params.options.minbed_select
						+ '</option>').appendTo(minbed_select);

					$.each(this.params.minbed, function (k,v) {
						$('<option value="' + v + '">' + k + '</option>').appendTo(minbed_select);
					});
				}
			if (this.params.minbath != undefined
					&& this.params.minbath != null
					&& this.params.minbath.length != 0
					&& this.params.minbath != '') {
					var td = $('<td '+ '></td>').appendTo(row);

					$('<label for="minbath">'
						+ this.params.options.minbath_label
						+ '</label>').appendTo(td);
					var td2=$('<td'+'></td>').appendTo(row);
					var minbath_select = $('<select style="width:87px;margin:0;" name="minBathrooms" id="minBathrooms" class="displetfield"></select>').appendTo(td2);

					$('<option disabled="disabled" selected="selected" value="none">'
						+ this.params.options.minbath_select
						+ '</option>').appendTo(minbath_select);

					$.each(this.params.minbath, function (k,v) {
						$('<option value="' + v + '">' + k + '</option>').appendTo(minbath_select);
					});
				}
			if (this.params.minsq != undefined
					&& this.params.minsq != null
					&& this.params.minsq.length != 0
					&& this.params.minsq != '') {
					var td = $('<td'+ '></td>').appendTo(row);

					$('<label for="minsq">'
						+ this.params.options.minsq_label
						+ '</label>').appendTo(td);
					var td2=$('<td'+'></td>').appendTo(row);
					var minsq_select = $('<select style="width:86px;margin:0;" name="minSquareFeet" id="minSquareFeet" class="displetfield"></select>').appendTo(td2);

					$('<option disabled="disabled" selected="selected" value="none">'
						+ this.params.options.minsq_select
						+ '</option>').appendTo(minsq_select);

					$.each(this.params.minsq, function (k,v) {
						$('<option value="' + v + '">' + k + '</option>').appendTo(minsq_select);
					});
				}
		},
		
		'draw_zip_user_fields': function () {
			var row = $('<tr></tr>').appendTo(this.container);
			if (this.params.zip != undefined
					&& this.params.zip != null
					&& this.params.zip.length != 0
					&& this.params.zip != '') {
					var td = $('<td'+ '></td>').appendTo(row);

					$('<label for="zip">'
						+ this.params.options.zip_label
						+ '</label>').appendTo(td);
					var td2=$('<td'+'></td>').appendTo(row);
					var zip_select = $('<select style="width:98px;margin:0;" name="zip" id="zip" class="displetfield"></select>').appendTo(td2);

					$('<option disabled="disabled" selected="selected" value="none">'
						+ this.params.options.zip_select
						+ '</option>').appendTo(zip_select);

					$.each(this.params.zip, function (k,v) {
						$('<option value="' + v + '">' + k + '</option>').appendTo(zip_select);
					});
				}
			var i = 1;
			var that = this;		
			$.each(this.params.fields, function (k,v) {
				$('<td><label for="' + k + '">' + v + '</label></td>').appendTo(row);
				$('<td><input size="10" class="displetfield" type="text" id="' + k + '" name="' + k + '"/>').appendTo(row);

				if (i % that.params.options.columns == 0) {
					row = $('<tr></tr>').appendTo(that.container);
				}
				i++;
			});
		},
		
		
		/*'draw_user_fields': function () {
			var row = $('<tr></tr>').appendTo(this.container);

			var i = 1;
			var that = this;		
			$.each(this.params.fields, function (k,v) {
				$('<td><label for="' + k + '">' + v + '</label></td>').appendTo(row);
				$('<td><input size="10" class="displetfield" type="text" id="' + k + '" name="' + k + '"/>').appendTo(row);

				if (i % that.params.options.columns == 0) {
					row = $('<tr></tr>').appendTo(that.container);
				}
				i++;
			});
		},*/

		'draw_prices': function () {
			var row = $('<tr id="prices"></tr>').appendTo(this.container);
			var td = $('<td colspan="' 
				+ (this.params.options.columns * 2)
				+ '" style="text-align: center"></td>').appendTo(row);

			// min
			$('<label for="minListPrice">'
				+ this.params.options.priceMin_label
				+ '</label>').appendTo(td);
			var min_select = $('<select name="minListPrice" id="minListPrice" class="displetfield"></select>').appendTo(td);
			$('<option disabled="disabled" selected="selected" value="none" class="disabled">'
				+ this.params.options.priceMin_select
				+ '</option>').appendTo(min_select);

			for (var price = this.params.options.priceMin;
				price <= this.params.options.priceMax;
				price += this.params.options.priceIncrement) {
				$('<option value="' + (price / 1000) + '">' + price + '</option>').appendTo(min_select);
			}

			// max
			$('<label for="maxListPrice">'
				+ this.params.options.priceMax_label
				+ '</label>').appendTo(td);
			var max_select = $('<select name="maxListPrice" id="maxListPrice" class="displetfield"></select>').appendTo(td);
			$('<option disabled="disabled" selected="selected" value="none" class="disabled">'
				+ this.params.options.priceMax_select
				+ '</option>').appendTo(max_select);

			for (price = this.params.options.priceMin;
				price <= this.params.options.priceMax;
				price += this.params.options.priceIncrement) {
				$('<option value="' + (price / 1000) + '">' + price + '</option>').appendTo(max_select);
			}
		},

		'draw_area_select': function () {
			if (this.params.areas != undefined
				&& this.params.areas != null
				&& this.params.areas.length != 0
				&& this.params.areas != '') {

				var row = $('<tr></tr>').appendTo(this.container);
				var td = $('<td style="text-align: center" colspan="'
					+ (this.params.options.columns * 2)
					+ '"></td>').appendTo(row);

				$('<label for="area">'
					+ this.params.options.area_label
					+ '</label>').appendTo(td);
				var area_select = $('<select name="zip" id="area" class="displetfield"></select>').appendTo(td);

				$('<option disabled="disabled" selected="selected" value="none">'
					+ this.params.options.area_select
					+ '</option>').appendTo(area_select);

				$.each(this.params.areas, function (k,v) {
					$('<option value="' + v + '">' + k + '</option>').appendTo(area_select);
				});
			}
		},
		
		'draw_buttons': function () {
			var row = $('<tr></tr>').appendTo(this.container);
			var td = $('<td colspan="'
				+ (this.params.options.columns * 2)
				+ '" style="text-align: center"></td>').appendTo(row);
			var search_button = $('<button id="search">Search</button>').appendTo(td);
			$('<a id="adv_search" href="'
				+ this.params.options.targetUrl
				+ '" title="Advanced Search">Advanced Search</a>').appendTo(td);

			// Uncomment this to draw a hide button
			// var hide_button = $('<button id="hide">Hide</button>').appendTo(td);
			// hide_button.click(this.hideForm);

			$(this.params.options.searchnow_selector).click(this.showForm);

			search_button.click(this.submitForm);
		}
	};

	$.fn.displetform.defaults.callbacks = {
		'hideForm': function () {
			$(this).hide('slow');
			document.cookie = 'displet-hide=1; path=/';
		},

		'showForm': function () {
			this.show('slow');
			document.cookie = 'displet-hide=; expires=' + (function () {
				var date = new Date();
				date.setTime(date.getTime()+(-1*24*60*60*1000));
				return date.toGMTString();
			})() + '; path=/';
		},

		'submitForm': function () {
			var url = (function (url) {
				if (url.lastIndexOf('/') != url.length) {
					url += '/';
				}
				url += '#';
				return url;
			})(this.params.options.targetUrl);

			$.each($('.displetform .displetfield'), function () {
				if (this.value != 'none'
					&& this.value != '') {
					url += this.name + '=' + this.value + '/';
				}
			});

			window.location = url;
		}
	};

	$.fn.displetform.defaults.options = {
		'targetUrl': 'http://dev.displet.com/',
		'searchnow_selector': '#searchnow',
		'columns': 3,

		// Price Select
		'priceMin': 80000,
		'priceMax': 2000000,
		'priceIncrement': 20000,
		'priceMin_label': 'Price',
		'priceMin_select': 'Min',
		'priceMax_label': 'To',
		'priceMax_select': 'Max',

		// Area select
		'area_label': 'Area',
		'area_select': 'Select an Area'
	}

//	$.fn.displetform.defaults.fields = {
//		// 'name': 'label'
//		'minBedrooms': 'Min Beds',
//		'minBathrooms': 'Min Bath',
//		'minSquareFeet': 'Min Sq Ft',
//		'city': 'City',
//		'zip': 'Zip',
//		'subdivision': 'Subdivision'
//	};
})(jQuery)