﻿(function($){
	$.fn.searchArticul=function(){
		var sys={};
		var init=function(){
			sys.o=$(this);

			sys.searchArray = sys.o.find("input[name='searchArray']");
			sys.thisPage = sys.o.find("input[name='thisPage']");
			sys.allPages = sys.o.find("input[name='allPages']");
			sys.searchTest = sys.o.find("input[name='searchTest']");
			sys.searchBut = sys.o.find("input[name='searchBut']");

			sys.spanThisPage = sys.o.find("span#thisPage");
			sys.aPageGt = sys.o.find("a#pageGt");
			sys.aPageLt = sys.o.find("a#pageLt");

			sys.articulArr = sys.o.find("#articulArr");

			sys.init();
		};
		sys.init=function(){
			sys.searchBut.live("click", function(e){e.preventDefault(); $("div.hidePanel").show(); sys.search(sys.hidePanel);});
			sys.searchTest.keypress(function(e){
				if(e.keyCode==13){
					e.preventDefault(); 
					//$("table.main_tbls").show();
					$("div.hidePanel").show(); 
					sys.search(sys.hidePanel);
				}
			});

			// sys.searchTest.live("keyup", function(e){e.preventDefault(); sys.search();});
 		};

 		sys.hidePanel = function(){
 			$("div.hidePanel").hide();
 		};

 		sys.search=function(callback){
			$('b.searched').each(function(){ //удаляем старую подсветку
				$(this).after($(this).html()).remove();  
			});
			var term = sys.searchTest.val();
				
				
				if(term.length=='')
			{
				$("table.main_tbls").show();
				$("div.tbl_sbs").hide();
			} else{
				sys.pagesSearch(term);
			}
			/*if(term.length)
			{
				if(sys.simpleSearch(term))
				{
					callback();
	 				return true;
				}
	 			else
	 				sys.pagesSearch(term);
			}*/
 		};

 		sys.simpleSearch=function(term)
 		{
 			sys.articulArr.find('a').each(function(){
 				$(this).html($(this).html().replace(new RegExp(term, 'ig'), "<b class='searched'>$&</b>"));
 			});
 			return $('b.searched').length;
 		};
		sys.pagesSearchUniq=function(term){
			
 			var searchPage = 0;
			//var searchArrayFind=new Array();
 			var searchArray = JSON.parse(sys.searchArray.val());
 			for (var key in searchArray) {
 				//if(key == sys.thisPage.val())
 					//continue;
 				for (var i in searchArray[key]) {
					if(searchArray[key][i] == null){delete searchArray[key][i];}else{
						
 					if(searchArray[key][i].toLowerCase()==term.toLowerCase())
 					{
						strRegexp = term.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
						searchArray[key][i] = searchArray[key][i].replace(new RegExp(strRegexp, 'ig'), "<b class='searched'>$&</b>");
 						// alert("найден: "+searchArray[key][i]);
						 //alert(key);
						//searchArrayFind[]=searchArray[key][i].replace(new RegExp(term, 'ig'), "<b class='searched'>$&</b>");
 						searchPage = key;
 					}
					else{
						delete searchArray[key][i];
					}
					}
 				}
 				if(searchPage)
 					break;
 			}
			
			//JsonObject = JSON.parse(JSON.stringify(searchArrayFind));
 			if(searchPage)
 			{
 				var data = {"act": "searchResult", "arr": searchArray[1], "page": 1};
 				sys.ajaxQuery(data, sys.showResult);
				$("table.main_tbls").hide();
 			}
 			else
 			{
 				alert("Поиск не дал результатов! Попробуйте ввести другое значение.");
 				sys.hidePanel();
 			}
 		};
 		sys.pagesSearch=function(term){

 			var searchPage = 0;
			//var searchArrayFind=new Array();
 			var searchArray = JSON.parse(sys.searchArray.val());
			
 			for (var key in searchArray) {
 				//if(key == sys.thisPage.val())
 					//continue;
 				for (var i in searchArray[key]) {
					
 					//if(searchArray[key][i].indexOf(term)+1)
					if(searchArray[key][i] == null){delete searchArray[key][i];}else{
						if(searchArray[key][i].toLowerCase().indexOf(term.toLowerCase())+1)
						//if(searchArray[key][i]==term.toUpperCase())
						{
							strRegexp = term.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
							searchArray[key][i] = searchArray[key][i].replace(new RegExp(strRegexp, 'ig'), "<b class='searched'>$&</b>");
							// alert("найден: "+searchArray[key][i]);
							// alert(key);
							//searchArrayFind[]=searchArray[key][i].replace(new RegExp(term, 'ig'), "<b class='searched'>$&</b>");
							//alert())
							
							searchPage = key;
							//alert(searchPage);
						}
						else{
							//alert(searchArray[key][i]);
							delete searchArray[key][i];
						}
					}
 				}
				//alert(searchPage);
 				if(searchPage)
 					break;
 			}
			
			//JsonObject = JSON.parse(JSON.stringify(searchArrayFind));
 			if(searchPage)
 			{
 				var data = {"act": "searchResult", "arr": searchArray[1], "page": 1};
 				sys.ajaxQuery(data, sys.showResult);
				$("table.main_tbls").hide();
 			}
 			else
 			{
 				alert("Поиск не дал результатов! Попробуйте ввести другое значение.");
 				sys.hidePanel();
 			}
 		};
 		sys.showResult=function(data){
 			data = JSON.parse(data);
 			sys.articulArr.html(data.newtext);

 			sys.thisPage.val(data.newpage);
 			sys.spanThisPage.html(data.newpage);
 			sys.aPageLt.attr("href", "?pagem="+(parseInt(data.newpage)-1));
 			sys.aPageGt.attr("href", "?pagem="+(parseInt(data.newpage)+1));

 			if(parseInt(data.newpage)>1)
 				sys.aPageLt.show();
 			else if(parseInt(data.newpage)==1)
 				sys.aPageLt.hide();

 			if(parseInt(data.newpage)!=parseInt(sys.allPages.val()))
 				sys.aPageGt.show();
 			else if(parseInt(data.newpage)==parseInt(sys.allPages.val()))
 				sys.aPageGt.hide();
 		};

 		/**
		 * [ajaxQuery отправление ajax-запроса]
		 * @param  {json}   data     [description]
		 * @param  {Function} callback [description]
		 * @param  {object}   obj      [description]
		 */
		sys.ajaxQuery=function(data, callback, obj){
			callback=callback||function(data, obj){
				return false;
			};
			console.log(data);
			var ret = $.ajax({
				type: "POST",
				url: "/scripts/searcharticul.back.php",
				async: false,
				data: {
					data: data
				},
				complete: function(){
					sys.hidePanel();
					
				},
				success: function(mes){
					$('html, body').animate({scrollTop: 0},500);
					callback(mes, obj);
					
					ret=mes;	
					$("a.select_searched_it").live("click", function(e){
						e.preventDefault();
						var trm=$(this).attr('data-value');
						sys.pagesSearchUniq(trm);
						//alert(trm);
					});
				}
			});
			return ret.responseText;
		};
		return this.each(init);
 	};
})(jQuery);
$(function() {
	$("div#searchArticulTable").each(function(){
		$(this).searchArticul();
	});
});