// Extended Select

jQuery.fn.selectxtd = function(options) {

//	var options = jQuery.extend({
//	}, options);

	this.each(function() {
		new jQuery.selectxtd(this, options);
	});

	return this;
}

jQuery.selectxtd = function(element, options) {

	element = jQuery(element);

	var drop = false;
	element.hide();
	var initUnit = element.next("input");
	var initMin = element.next("input").next("input");
	var initMax = element.next("input").next("input").next("input");
	var component = document.createElement("DIV");
	component = jQuery(component);
	component.addClass("selectxtd");
	var node = document.createElement("DIV");	// Add label
	jQuery(node).addClass("selectxtd_label");
	component.append(node);
	node = document.createElement("DIV");	// Add list
	jQuery(node).addClass("selectxtd_list");
	component.append(node);
	customUnitClasses = '';
	var units = document.createElement("DIV");	// Add units
	jQuery(units).addClass("selectxtd_units")
	if (element.find("optgroup").length == 1) {
		jQuery(units).css('display', 'none');
	}
	if (initUnit.val() == '') {
			//checkedState = optgroup.children("option[selected='true']").length > 0 ? 'checked="checked"' : '';
			initUnit.val("0");
	}
	jQuery(node).append(units);
	var grpNum = 0;
	var foundSelected = false;
	element.find("optgroup").each(function() {
		optgroup = jQuery(this);
		checkedState = initUnit.val() == grpNum ? 'checked="checked"' : '';
		jQuery(units).append('<label><input type="radio" name="' + element.attr('name') + '_units" value="' + grpNum + '" ' + checkedState + '><span>' + optgroup.attr("label") + '</span></label>');
		
		optgroup.children("option").each(function() {
			var item = document.createElement("DIV");
			jQuery(item).addClass("selectxtd_item").addClass('selectxtd_unit_' + grpNum);	// Appending items
			jQuery(item).append('<div class="selectxtd_item_label">' + jQuery(this).html() + '</div><div class="selectxtd_item_value">' + jQuery(this).val() + '</div>');
			if (checkedState != '' && jQuery(this).val() == initMin.val() + ";" + initMax.val()) {
				jQuery(item).addClass("selected");
				foundSelected = true;
			} 
			jQuery(node).append(item);	
		});	

		customUnitClasses+= ' selectxtd_unit_' + grpNum;
		grpNum++;
	});
	//jQuery(units).append("<HR>");

	// Append custom
	jQuery(node).append('<div class="selectxtd_custom ' + customUnitClasses + '"></div>');
	customDiv = jQuery(node).find("div.selectxtd_custom");
	initMin.remove().appendTo(customDiv);
	customDiv.append("&nbsp;&mdash;&nbsp;");
	initMax.remove().appendTo(customDiv);
	customDiv.append('&nbsp;<input type="button" class="selectxtd_custom_submit" value="OK">');
	component.insertAfter(element);
	element = component;

	element.find("div.selectxtd_list").bind("click", function(){
		element.addClass("preventClose");
	});
	
	element.find("div.selectxtd_list > div.selectxtd_item").bind("click", function(e) {
		jQuery(this).removeClass("selectxtd_hover");
		element.find("div.selectxtd_label").html(jQuery(this).find("div.selectxtd_item_label").html());
		range = jQuery(this).find("div.selectxtd_item_value").text().split(';', 2);
		initMin.val(range[0]);
		initMax.val(range[1]);
//		element.removeClass("preventClose");
		$("body").click();
	});

	element.find("div.selectxtd_list > div.selectxtd_units > label > :radio").bind("click", function() {
		unitClass = 'selectxtd_unit_' + jQuery(this).val();
		element.find("div.selectxtd_list > div.selectxtd_item").hide();
		element.addClass("preventClose");
		initUnit.val(jQuery(this).val());
		element.find("div.selectxtd_list > div." + unitClass).css("display", "block").filter(".selected").click();
	});

	element.find("div.selectxtd_list > div.selectxtd_item").bind("mouseenter", function() {
		jQuery(this).addClass("selectxtd_hover");
//	}, function() {
//		jQuery(this).removeClass("hover");
	});
	
	element.find("div.selectxtd_list > div.selectxtd_item").bind("mouseleave", function() {
		jQuery(this).removeClass("selectxtd_hover");
	});

	element.find("div.selectxtd_list > div.selectxtd_custom > :button").bind("click", function(e) {
		min = initMin.val();
		max = initMax.val();
		if (min == '' && max == '')  {
			return false;
		}
		if (max != '' && min != '' && parseInt(max) < parseInt(min)) {
			t = max;
			max = min;
			min = t;
		}
		var min1 = '';
		var max1 = '';
		j = 0;
		for (i = (min.length - 1); i >= 0; i--) {
			min1+= min.charAt(i);
			j++;
			if (j % 3 == 0) {
				min1+= ";psbn&";
			}
		}
		minShow = min1;
		min1 = '';
		for (i = (minShow.length - 1); i >= 0; i--) {
			min1+= minShow.charAt(i);
		}
		j = 0;
		for (i = (max.length - 1); i >= 0; i--) {
			max1+= max.charAt(i);
			j++;
			if (j % 3 == 0) {
				max1+= ";psbn&";
			}
		}
		maxShow = max1
		max1 = '';
		for (i = (maxShow.length - 1); i >= 0; i--) {
			max1+= maxShow.charAt(i);
		}
		minShow = min == '' ? "" : "от " + min1 + " ";
		maxShow = max == '' ? "" : "до " + max1 + " ";
 		initMin.val(min);
		initMax.val(max);
		finalText = minShow + maxShow + element.find("div.selectxtd_list > div.selectxtd_units > label > :radio:checked").next("span").html();
		element.find("div.selectxtd_label").html(finalText);
		$("body").click();
	});

	element.find("div.selectxtd_list > div.selectxtd_custom > :text").bind("keydown", function(e) {
		if (e.keyCode == 13) {
			e.preventDefault();
			element.find("div.selectxtd_list").css({'left': '-3000px', 'top': '-3000px'});
			jQuery(this).siblings(":button").trigger("click");
		}
		switch (e.keyCode) {
			case 8: // bs
			case 9: // tab
			case 35: // end
			case 36: // home
			case 37: // left
			case 39: // right
				return true;
		}		
		if ( e.keyCode < 48 || e.keyCode > 57 || (e.keyCode == 48 && $(this).val() == '')) {
			e.preventDefault();
		}
	});

	element.find("div.selectxtd_label").bind("click", function(e) {
		position = element.offset();
		if (element.find("div.selectxtd_list").css('left') == '-3000px') {
			element.find("div.selectxtd_list").css({'left': position.left + 'px',
													'top': (position.top + $(this).height() + 5) + 'px'});
			element.addClass("preventClose");
		} else {
			//element.removeClass("preventClose");
		}
	});

	element.find("div.selectxtd_list > div.selectxtd_custom > :text").click(function(e) {
		e.stopPropagation();
	});

	element.find("div.selectxtd_list > div.selectxtd_units > label > :radio:checked").click();
	if (element.find("div.selectxtd_list > div.selected").length > 0) {
		element.find("div.selectxtd_list > div.selected").click()
	} else {
		element.find("div.selectxtd_list > div.selectxtd_custom > :button").click()
	}
//	element.removeClass("preventClose");
}

$(document).ready(function() {
	$("body").live("click", function() {
		$("div.suggest_list").hide();
		$(".selectxtd").each(function() {
			if (!$(this).hasClass("preventClose")) {
				$(this).find("div.selectxtd_list").css( {
					'left' : '-3000px',
					'top' : '-3000px'
				});
			}
			$(this).removeClass("preventClose");
		});
	});
});
