/*
* jQuery Magic Selectbox
* http://www.magiclick.com
*
* Copyright (c) 2009 Onur Ozkan + Omer Duzyol
* Licensed under the MIT license.
* http://creativecommons.org/licenses/MIT/
*/

var keyIndex = -1;
function resetKeyDown(keyIndex) {
	var linkSelector = $(".csb-now-active").find("a.list-item:visible");
	if (keyIndex > linkSelector.length-1) {
		keyIndex = -1;
		return keyIndex;
	}
	if (keyIndex < 0) {
		keyIndex = linkSelector.length;
		return keyIndex;
	}
	return keyIndex;
	
}
function useKeyDown(e) {
	
	var linkSelector = $(".csb-now-active").find("a.list-item:visible");
	linkSelector.removeClass("hover-elm");
	if (e.keyCode == 40) {
		keyIndex++;
		keyIndex = resetKeyDown(keyIndex);
		linkSelector.eq(keyIndex).addClass("hover-elm");
		
		return false;
	}
	else if (e.keyCode == 38) {
		keyIndex--;
		keyIndex = resetKeyDown(keyIndex);
		linkSelector.eq(keyIndex).addClass("hover-elm");
		return false;
	}
	else if (e.keyCode == 13) {
		linkSelector.eq(keyIndex).click()
		keyIndex = resetKeyDown(keyIndex);
		return false;
	}
	
}

(function($) {
	jQuery.fn.magicSelectbox = function(command, code_settings) {
		var raw_select = this;
		if (typeof command != "string") {
			settings = {
				title: "Lütfen Seçiniz",
				search: false,
				searchtitle: "Arama yapmak için tıklayınız",
				size: 3,
				getclick: null
			}
			var conf = jQuery.extend(settings, command || {});

			var builder = {
				template: function(index) {
					return '<a href="#" value="{value}" class="list-item"><span class="text">{text}</span></a>'
				},
				wrapper: function(vars) {
					var custom_width = "auto";
					if (vars.width != "") {
						custom_width = vars.width + "px";
						//custom_cont_width = vars.width - 39 + "px";
					}
					var search_container = ""
					if (conf.search == true) {
						search_container = '<div id="' + vars.container + '-search" class="magic-custom-selectbox-search">' +
												'<input type="text" title="' + conf.searchtitle + '" name="' + vars.container + "_" + Math.random() + '"  style="width:' + parseInt(vars.width - 23) + 'px">' +
											'</div>';
					}
					return '<div id="' + vars.container + '" class="' + vars.container + ' magic-custom-selectbox" style="width:' + custom_width + ';">' +
								'<div class="magic-custom-selectbox-content">' +
									'<span class="magic-custom-selectbox-click"><img src="../_img/t.gif" width="40" height="35"></span>' +
									'<div class="magic-custom-selectbox-title"><a href="#">' + vars.title + '</a></div>' +
									'<div class="magic-custom-selectbox-container-wrapper" style="width:' + custom_width + '">' +
										'<div class="magic-custom-selectbox-container">' +
											search_container +
											'<span class="custom-error-container">Sonuç bulunamadı.</span>' +
											'<div id="' + vars.container + '-container" class="magic-custom-selectbox-list-container"></div>' +
										'</div>' +
									'</div>' +
								'</div>' +
						   '</div>';
				},
				render: function(data, template) {
					var result = template;
					$.each(data, function(key) {
						var regx = new RegExp('\{' + key + '\}', 'gi')
						result = result.replace(regx, this);
					})
					return result;
				},
				ondatabind: function(item) {
					return {
						text: item.text(),
						value: item.attr('value')
					};
				},
				onclicktoggle: function(container) {
					container.find(".magic-custom-selectbox-click, .magic-custom-selectbox-title").bind("click", function() {
						$(".magic-custom-selectbox").addClass("closed");
						$(".magic-custom-selectbox").removeClass("csb-now-active");
						container.removeClass("closed");
						container.addClass("csb-now-active")
						$(this).parents(".magic-custom-selectbox").find(".magic-custom-selectbox-container-wrapper").toggle();
						$("select").magicSelectbox('close');
						$(".custom-error-container").hide();
						$(".list-item", container).show();
						$("input", container).val(conf.searchtitle);
						keyIndex = -1;
						$(document).bind("keydown", useKeyDown);
						return false;
					});

				},
				onclickdata: function(click, combo) {
					click.find(".list-item").bind("click", function() {
						click.find(".list-item").removeClass("active");
						$(this).addClass("active");
						combo.val($(this).attr("value"));
						combo.trigger("change");
						build.hide(click);
						get_click_value = build.selector($(this), conf.getclick)
						click.find(".magic-custom-selectbox-title a").html(get_click_value);
						combo.trigger("mcchange");
						return false;
					});

				},
				onclicksearch: function(container) {
					$("input", container).bind("keyup", function(e) {
						try {
							//console.log(e.keyCode + "///////" + keyIndex);
							if (e.keyCode != 40 && e.keyCode != 38 && e.keyCode != 13) {
								keyIndex = -1;
							}

							$(".list-item", container).hide();
							var elm_input = $(this);
							var result_count = $(".list-item:icontains(" + elm_input.val().toLowerCase() + ")", container).length;
							if (result_count > 0) {
								$(".list-item", container).show();
								$(".custom-error-container", container).hide()
							}
							else {
								$(".list-item", container).hide();
								$(".custom-error-container", container).show()
							}
							$(".list-item", container).each(function() {
								if ($(this).text().toLowerCase().indexOf(elm_input.val().toLowerCase()) != -1) {
									$(this).css("display", "block");
								}
								else {
									$(this).css("display", "none");
								}
							});
						} catch (e) {
							$(".list-item", container).show();
							$(".custom-error-container", container).hide()
						}
					});
				},
				hide: function(container) {
					container.find(".magic-custom-selectbox-container-wrapper").hide();
					deactivateSelectbox();
				},
				selector: function(clicked, type) {
					switch (type) {
						case "kredikarti":
							try {
								var kart_no = clicked.text().match(/[0-9]{4}[\s]*[0-9]{4}[\s]*[0-9]{4}[\s]*[0-9]{4}[\s]*[0-9]{4}/);
								var bakiye = clicked.text().match(/[a-z]{6}\:\s*([0-9].*)/i);
								return kart_no + ", " + bakiye[0];
							} catch (e) { }
							break;
						case "hesap":
							try {
								var hesap_no = clicked.text().match(/[0-9]{4}[\s\-]*[0-9]{7}[\s\-]*[0-9]{3}/);
								var bakiye = clicked.text().match(/[a-z]{6}\:\s*([0-9].*)/i);
								return hesap_no + ", " + bakiye[0];
							} catch (e) { }
							break;
						default:
							return clicked.text();
							break;
					}
				}
			}

			var build = jQuery.extend(builder, code_settings || {});

			this.each(function(i) {
				var combo = $(this);
				//console.log(conf.getclick)
				// width check
				var combo_width = (combo.attr("width") == undefined ? parseInt(combo.css("width")) : parseInt(combo.attr("width")))
				var container_name = $(this).attr("id") + "-magic-selectbox";
				$(build.wrapper({
					title: conf.title,
					container: container_name,
					width: combo_width
				})).insertAfter($(this));
				var index = 0;
				$(this).find("option").each(function() {
					var that = $(this);
					if (that.attr("value") != "") {
						var data = build.ondatabind(that);
						var templateText = $.isFunction(build.template) ? build.template.apply(that, [index++]) : build.template;
						var rendered_option_html = build.render(data, templateText);
						$(rendered_option_html).appendTo("#" + container_name + "-container");
						if (that.attr("selected") && that.attr("value") != "") {
							get_click_value = build.selector($(rendered_option_html), conf.getclick);
							that.parent().next().find(".magic-custom-selectbox-title a").html(get_click_value);
							//console.log(that.parent().next().find(".magic-custom-selectbox-title a").html());
						}
					}
				});
				if ($(this).find("option:selected").length <= 0) {
					$(this).next().find(".magic-custom-selectbox-title a").html(conf.title);
				}
				build.onclicktoggle($("#" + container_name));
				build.onclickdata($("#" + container_name), combo);
				build.onclicksearch($("#" + container_name));
				combo.addClass("dnone");
				if (conf.size != null) {
					$(".magic-custom-selectbox-list-container", $("#" + container_name)).css({
						"height": conf.size * 18 + "px",
						"overflow-y": "auto"
					})
				}
				var search_input = combo.next().find(".magic-custom-selectbox-search input").eq(0)
				search_input.val(conf.searchtitle)
				search_input.bind("focus", function() {
					if (search_input.val() == search_input.attr("title")) {
						search_input.val("");
					}
				});
				search_input.bind("blur", function() {
					if (search_input.val() == "") {
						search_input.val(search_input.attr("title"));
					}
				});

			});
			$(document).click(function(e) {
				if ($(e.target).parents(".magic-custom-selectbox").length == 0) {
					raw_select.each(function() {
						$(this).next().find(".magic-custom-selectbox-container-wrapper").hide();
						deactivateSelectbox();
					});
				}
			});
			raw_select.each(function() {
				$(this).bind("showerror", function() {
					$(this).next().addClass("error");
				});
				$(this).bind("hideerror", function() {
					$(this).next().removeClass("error");
				});
			});
		}
		else {
			switch (command) {
				case "close":
					raw_select.each(function(i) {
						if ($(this).next().hasClass("closed")) {
							$(this).trigger("mcclose");
							$(this).next().find(".magic-custom-selectbox-container-wrapper").hide();
						}
					});

					break;
				case "destroy":
					raw_select.each(function() {
						if ($(this).next().hasClass("magic-custom-selectbox")) {
							with ($(this)) {
								trigger("mcdestroy");
								next().remove();
								removeClass("custom-selectbox");
							}
						}
					})
					break;
			}
		}
	}
} (jQuery))

function deactivateSelectbox() {
	$(".magic-custom-selectbox").addClass("closed");
	$(document).unbind("keydown", useKeyDown);
	$(".magic-custom-selectbox").removeClass("csb-now-active");
	$(".custom-error-container").hide();
}
