<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">/*
 *  search.js
 *  version 0.1 (2017-06-06)
 *  Requires: jQuery v1..6 or later
 *  
 *  Author: ddr5200@gmail.com
 *
 *  Usage:
 *
 */
 
/****************************
 * search init
 ****************************/
function search_init() {
	/*-- 768px 顯示 資料!! ---*/
	//var search_but = '&lt;button type="button" class="btn btn-default" data-toggle="modal" data-target="#modal-filter" data-backdrop="static"  data-keyboard="false" id="search_concept" &gt;進階篩選 &lt;span class="caret"&gt;&lt;/span&gt;&lt;/button&gt;';
	/*$(".order-list").append(search_but);*/
	/*
	if ($(window).width() &lt;= 768) {
		$(".order-list").append(search_but);
	}else{
		$("#search_concept").remove();
	}
	*/
	init_sidebar();
	init_filter_bar();
	init_modal(); 
	init_address();
}

function init_sidebar() {
	event_checkbox();
	price_click(1);
}

function init_filter_bar() {
	event_type();
	event_sort();
	event_mode();
}

function init_modal() {
	event_modal_close();
	event_modal_clear();
	event_modal_submit();
	price_click("modal");
}

function init_address() {
	$.address.init(function() {
		// Initializes the plugin
		
	}).change(function(event) {  
		//var hash = event.value.replace(/^\//,"");
		
		//if (!addressChanged) {
			if ($.address.hash()) {
				//alert($.address.hash());
				var j = 0;
				var params = $.address.hash().split("&amp;");
				for (i=0; i &lt; params.length; i++) {
					var a = params[i].split("=");
					//a[1] = a[1].replace(/^$/,"");
					switch (a[0]) {
						case "sort":
							var sort = a[1];
							$("#s_sort").val(sort);
							break;
							
						case "s_store[]":
						case "s_store%5B%5D":
							if(j == 0) $(".store-checkbox").prop('checked', false);
							$(".store-"+a[1]).prop('checked', true);
							j++;
							break;
						
						case "s_cate[]":
						case "s_cate%5B%5D":
							if(j == 0) $(".cate-checkbox").prop('checked', false);
							$(".cate-"+a[1]).prop('checked', true);
							j++;
							break;
							
						case "s_year[]":
						case "s_year%5B%5D":
							if(j == 0) $(".year-checkbox").prop('checked', false);
							$(".year-"+a[1]).prop('checked', true);
							j++;
							break;
						
						case "min_price":
							var min_price = a[1];
							break;
						
						case "max_price":
							var max_price = a[1];
							break;
							
						case "page":
							var page_value = a[1];
							$("#s_page").val(page_value);
							break;
					} 
				}
				
				/*--- refresh price ---*/
				if(min_price &amp;&amp; max_price){
					priceRange('range', min_price, max_price);
					priceRange('modal-range', min_price, max_price);
					//alert(min_price+"~"+max_price);
				}
				
				//--- refresh filter data ---
				show_filter_data();
				
				//--- submit data ---
				ajax_data();
			}
		//}
		//addressChanged = true;
	});
}

/****************************
 * 事件宣告!
 ****************************/
function event_checkbox() {
	$("#search_limit &gt; .filter-list2 input[type=checkbox]").on('click', function (e) {
		//e.preventDefault();
		sync_data("#search_limit &gt; .filter-list2");
		send_data();
	});
	
	$("#search_limit &gt; .filter-list input[type=checkbox]").on('click', function (e) {
		//e.preventDefault();
		sync_data('#search_limit &gt; .filter-list');
		send_data();
	});
}

// 切換 type
function event_type() {
	if($('#list-type &gt; a').length &gt; 0)
	{
		$('#list-type &gt; a').on('click', function(e) {
			var link = $(this).attr("href");
			var regx = /void/;
			if(regx.test(link)) {
				e.preventDefault();
				$(this).siblings().removeClass('active');
				$(this).addClass('active');
				var type_id = $(this).data("id");
				//alert(type_id);
				$("#s_type").val(type_id);
				$.cookie("type", type_id,  { path:'/', expires: 1 });
				send_data();
			}
		});
	}
}

// 切換 sort
function event_sort() {
	if($('#list-sort &gt; a').length &gt; 0)
	{
		$('#list-sort &gt; a').on('click', function(e) {
			var link = $(this).attr("href");
			var regx = /void/;
			if(regx.test(link)) {
				e.preventDefault();
				$(this).siblings().removeClass('active');
				$(this).addClass('active');
				var sort_id = $(this).data("id");
				$("#s_sort").val(sort_id);
				$.cookie("sort", sort_id,  { path:'/', expires: 1 });
				send_data();
			}
		});
	}
	
	if($('#dropdown-sort li &gt; a , #modal-box-sort li &gt; a' ).length &gt; 0)
	{
		$('#dropdown-sort li &gt; a , #modal-box-sort li &gt; a').on('click', function(e) {
			e.preventDefault();
			$("#sort-text").html($(this).text());
			
			$(this).parent("li").siblings().children("a").children("i").removeClass('fa-check-circle').addClass("fa-circle-o");
			$(this).children("i").removeClass('fa-circle-o').addClass('fa-check-circle');
			var sort_id = $(this).data("id");
			$("#s_sort").val(sort_id);
			$.cookie("sort", sort_id,  { path:'/', expires: 1 });
			
			send_data();
			
			// close modal
			if($(this).parent("li").parent("ul").attr("class") == "modal-data")
			{
				$(this).closest('.modal').modal('hide');
			}
		});
	}
}



// 切換(list/grid)
function event_mode() {
	$('#list-mode .btn').on('click touchstart', function (e) {
		e.preventDefault();
		$(this).siblings().removeClass('active');
		$(this).addClass('active');
		var _id = $(this).data("id");
		$.cookie("mode", _id,  { path:'/', expires: 1 });
		
		if( _id == "mode-grid"){
			$('.mode-wrap').addClass('mode-grid');
			$('.mode-wrap').removeClass('mode-list');
			$(function () {
				$('.product-item').matchHeight();
				$.fn.matchHeight._throttle = 80;
				$.fn.matchHeight._update('.product');
			});
		}else{
			$('.mode-wrap').addClass('mode-list');
			$('.mode-wrap').removeClass('mode-grid');
			$(function () {
				$('.product-item').matchHeight('remove');
			});
		}
	});
}


/*--- pager ---
function event_pager() {
	//$('#pagination li &gt; a').attr('href',"javscript:void(0);");
	$('#pagination &gt; li &gt; a').on('click', true, function(e) {
		e.preventDefault();
		var page = $(this).data('val');
		send_data(page);
	});
}
*/

//--- modal ---
function event_modal_close() {
	$('#modal-filter .close').on('click', function(e) {
		e.preventDefault();
		reset_modal();
		
		// close modal
		$(this).closest('.modal').modal('hide');
	});
}

function event_modal_clear() {
	$('#clearFilter').on('click', function(e) {
		e.preventDefault();
		reset_modal();
		
		// close modal
		$(this).closest('.modal').modal('hide');
	});
}

function event_modal_submit() {
	$('#adv-submit').on('click', function(e) {
		e.preventDefault();
		sync_data('#modal-filter .modal-body .filter-list2');
		sync_data('#modal-filter .modal-body .filter-list');
		
		// 同步 price
		priceRange('range', $("#modal-range-input0").val() , $("#modal-range-input1").val()); 
		
		//alert( $("#modal-range-input0").val()+ "-"+ $("#modal-range-input1").val());
		
		// 送出
		send_data(); 
		
		// close modal
		$(this).closest('.modal').modal('hide');
		
		/*--- move to top ---*/
		move_to_top();
	});
}

/****************************
 * 同步資料!
 ****************************/
function sync_data(obj) {
	////$(obj).find('input[type=checkbox]:checked').each(function(i,item) {
	$(obj + ' input[type=checkbox]').each(function(i,item) {
		var get_val    = $(this).val();
		var class_name = $(this).attr('_val');
		$("."+class_name).prop('checked', $(this).prop("checked"));
	});
} 

function sync_price() {
	send_data();
	//--- 同步 model ---
	priceRange('modal-range', $("#range-input0").val() , $("#range-input1").val());
}


/****************************
 * 顯示過濾資料!
 ****************************/
function show_filter_data() {
	var filter_data = $("#filter-data");
	filter_data.hide();
	filter_data.html('');
	
	//console.log( "filter ");
	/*--- filter-list2 ---*/
	var z = 0 ;
	$.each($("#search_limit &gt; .filter-list2 .attr-data &gt; li"), function(i,item) {
		var li_checkbox 		  		   = $(item).children("input[type=checkbox]");
		var li_children_length   		   = $(item).find('li &gt; input[type=checkbox]').length;
		var li_children_length2   		   = $(item).find('li &gt; input[type=checkbox]:checked').length;
		
		//console.log(i+" ==&gt; "+li_children_length+"/"+li_children_length2  );
		$(item).removeClass("cur");
		
		var jj = 0 ;
		$.each($(item).find('li &gt; input[type=checkbox]:checked'), function(j,item2) {
			var chk_name = $(item2).next("label").children("span.label-name").text();
			var chk_val  = $(item2).attr("_val");
			var par_id   = $(item2).attr("_par_id");
			var par_name = chk_val.split("-")[1];
			//alert(li_children_length);
			//alert(j+" ==&gt; "+chk_name + " -- "+ chk_val + " -- " + par_name);
			if(j == 0) {
				filter_data.show();
				var title = $(item).children("label").children("span.label-name").text();
				filter_data.append("&lt;div class=\"clearfix\"&gt;&lt;/div&gt;&lt;div class=\"SubTitle\"&gt; 分類 - "+title+"：&lt;/div&gt;&lt;ul id=\"filter-data2-"+i+"\" class=\"item\"&gt;&lt;/ul&gt;");
				/*
				if($(item).children("i").hasClass("fa-plus-square")) {
					$(item).click();
					$(item).addClass("cur");
				}
				*/
			}
			$("#filter-data2-"+i).append("&lt;li id='dd-" + chk_val + "'&gt;&lt;a href=\"javascript:del('" + chk_val + "',1);\" alt=\"取消選擇\"&gt;&lt;span&gt;" + chk_name + "&lt;/span&gt;&lt;i class='fa fa-window-close'&gt;&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;");
			jj = j + 1;
			z++;
		});
		
		if(li_children_length == jj){
			li_checkbox.prop("checked",true);
		}else{
			li_checkbox.prop("checked",false);
		}
	});
	
	
	if(z&gt;0){
		$(".filter-list2 .tbox1-head .clear").removeClass("disnone");
	}else{
		$(".filter-list2 .tbox1-head .clear").addClass("disnone");
	}
	
	
	//--- filter-list ---
	$.each($("#search_limit &gt; .filter-list"), function(i, item) {
		var jj = 0 ;
		$.each( $(item).find('input[type=checkbox]:checked'), function(j, item2) {
			var chk_name = $(item2).next("label").children("span.label-name").text();
			var chk_val  = $(item2).attr("_val");
			var par_name = chk_val.split("-")[1];
			//alert(j+" ==&gt; "+chk_name + " -- "+ chk_val + " -- " + par_name);
			if(j == 0){
				filter_data.show();
				var title = $(item).find(".tbox1-head span:eq(0)").text();
				filter_data.append("&lt;div class=\"SubTitle\"&gt;"+title+"：&lt;/div&gt;&lt;ul id=\"filter-data-"+i+"\" class=\"item\"&gt;&lt;/ul&gt;");
			}
			
			$("#filter-data-"+i).append("&lt;li id='dd-" + chk_val + "'&gt;&lt;a href=\"javascript:del('" + chk_val + "',1);\" alt=\"取消選擇\"&gt;&lt;span&gt;" + chk_name + "&lt;/span&gt;&lt;i class='fa fa-window-close'&gt;&lt;/i&gt;&lt;/a&gt;&lt;/li&gt;");
			jj = j + 1;
		});
		
		if(jj&gt;0){
			$(item).children(".tbox1-head").children(".clear").removeClass("disnone");
		}else{
			$(item).children(".tbox1-head").children(".clear").addClass("disnone");
		}
	});
	
	if(filter_data.html() != ''){
		filter_data.append('&lt;div&gt;&lt;a class="label label-default clear-all label-text" href="javascript:clear_all_data();"&gt;全部清除&lt;/a&gt;&lt;/div&gt;');
	}
}

/****************************
 * price range bar 效果
 ****************************/
function price_click(pix) {
	var obj = (pix == "modal") ?  pix + "-range" : "range";
	var nonLinearSlider = document.getElementById(obj);
	var input0 = document.getElementById(obj + '-input0');
	var input1 = document.getElementById(obj + '-input1');
	//console.log(input0);
	
	if (typeof input0 == 'undefined' || input0 == null){
		return false;
	}
	if (typeof input1 == 'undefined' || input1 == null){
		return false;
	}
	
	var inputs = [input0, input1];
	var min_val = input0.value;
	var max_val = input1.value;
	noUiSlider.create(nonLinearSlider, {
		connect: true,
		start: [min_val, max_val],
		range: range_all_sliders
		//tooltips: [true, wNumb({ decimals: 1 })]
		/*
		range: {
			'min': [0],
			'10%': [10, 10],
			'50%': [80, 50],
			'80%': 150,
			'max': 200
		}
		*/
	});
	
	
	// Display the slider value and how far the handle moved
	// from the left edge of the slider.
	var nodes = [
		document.getElementById(obj+'-min-value'), // 0
		document.getElementById(obj+'-max-value') // 1000000
	];

	nonLinearSlider.noUiSlider.on('update', function (values, handle, unencoded, isTap, positions) {
		nodes[handle].innerHTML = parseInt(values[handle], 10);
	});
	
	nonLinearSlider.noUiSlider.on('update', function( values, handle ) {
		inputs[handle].value = parseInt(values[handle], 10);
	});
	
	//-- move ---
	nonLinearSlider.noUiSlider.on('change', function (values, handle) {
		//alert('change!!');
		if( pix == 1) {
			sync_price();
		}
	});
	
	// Listen to keydown events on the input field.
	inputs.forEach(function(input, handle) {
		/*
		input.addEventListener('change', function(){
			setSliderHandle(handle, this.value);
			if( pix == 1) {
				alert('change 2!');
				sync_price();
			}
		});
		*/
		input.addEventListener('keydown', function(e) {
			var values = nonLinearSlider.noUiSlider.get();
			var value = Number(values[handle]);

			// [[handle0_down, handle0_up], [handle1_down, handle1_up]]
			var steps = nonLinearSlider.noUiSlider.steps();

			// [down, up]
			var step = steps[handle];

			var position;

			// 13 is enter,
			// 38 is key up,
			// 40 is key down.
			switch ( e.which ) {
				case 13:
					setSliderHandle(handle, this.value);
					if( pix == 1) {
						//alert('change 13!');
						sync_price();
					}
					break;

				case 38:
					// Get step to go increase slider value (up)
					position = step[1];

					// false = no step is set
					if ( position === false ) {
						position = 1;
					}

					// null = edge of slider
					if ( position !== null ) {
						setSliderHandle(handle, value + position);
					}
					break;

				case 40:
					position = step[0];
					if ( position === false ) {
						position = 1;
					}

					if ( position !== null ) {
						setSliderHandle(handle, value - position);
					}
					break;
			}
		});
	});
	
	
	function setSliderHandle(i, value) {
		var r = [null,null];
		r[i] = value;
		nonLinearSlider.noUiSlider.set(r);
	}
}

//set low and high
function priceRange(obj, low, high) {
	var slider = document.getElementById(obj);
	if( typeof(document.getElementById(obj)) !== undefined)  {
		$("#range-input0").val( low );
		$("#range-input1").val( high );
		slider.noUiSlider.set([low, high]);
	}
	if( typeof(range_all_sliders.min[0]) !== undefined &amp;&amp; typeof(range_all_sliders.max[0]) !== undefined){
		if(range_all_sliders.min[0] == low &amp;&amp; range_all_sliders.max[0] ==  high){
			$(".reset-price").addClass("disnone");
		}else{
			$(".reset-price").removeClass("disnone");
		}
	}
}


function resetPrice(div) {
	if( typeof(range_all_sliders.min[0]) !== undefined &amp;&amp; typeof(range_all_sliders.max[0]) !== undefined){
		priceRange(div, range_all_sliders.min[0], range_all_sliders.max[0]);
	
		if(div == "range") {
			send_data();
		}
	}
}

/****************************
 *  重置的資料!!
 ****************************/
 function reset_modal() {
	sync_data('#search_limit &gt; .filter-list');
	
	// reset modal price
	priceRange('modal-range', $("#range-input0").val() , $("#range-input1").val());		
}

function clear_modal_data(name, div) {
	$(name + " input[type=checkbox]").prop('checked', false);
	
	if(div != "modal") {
		send_data();
		sync_data('#search_limit &gt; .filter-list');
		sync_data('#search_limit &gt; .filter-list2');
	}
}

function clear_all_data() {
	$('#filter-data .item li').each(function(i,item) {
		var get_id   = $(this).attr('id');
		var store_class = get_id.split("-")[1]+ '-' +get_id.split("-")[2];
		del(store_class,0);
    });
	
	//-- fix checkbox &gt; par_id -- 
	$('.filter-list2 ul &gt; li &gt; input[type=checkbox]').attr("checked", false);
	send_data();
}
		
/*
function check_all() {
	$("#checkAll").click(function () {
		$('.add-img-selector input:checkbox').not(this).prop('checked', this.checked);
	});
}
*/


/****************************
 * 刪除過濾資料!!
 ****************************/
function del(id,is_one) {
	$("." + id).attr("checked", false);
	$("." + id).next('label').removeClass("text-danger");
	$("#dd-" + id + "").remove();
	if(is_one == 1) send_data();
}

function del_all_data() {
	$('#filter-data .item li').each(function(i,item) {
		var get_id   = $(this).attr('id');
		var store_class = get_id.split("-")[1]+ '-' +get_id.split("-")[2];
		del(store_class,0);
	});
	send_data();
}


/****************************
 * 傳送資料!
 ****************************/

var send_type = "hash";

function send_data(page) {
	if(typeof(page) == 'undefined') {
		$("#s_page").val(1);
	}else{
		$("#s_page").val(page);
	}
	
	if(send_type == "hash") {
		send_hash_data();
	}else{
		show_filter_data();
		ajax_data();
	}
	if(typeof(page) != 'undefined') {
		move_to_top('body');
	}
}

function send_hash_data() {
	var param_str = $('#search_limit').serialize();
	$.address.hash(param_str);
}

function ajax_data() {
	var param_str = $('#search_limit').serialize();
	var send_url  = "?mod=json&amp;" + param_str;
	
	$.ajax({
		url: send_url,      // 指定要進行呼叫的位址。
		type: 'GET',        // 請求方式，POST/GET。
		dataType: 'json',	// type =&gt; html
		global: false,      // 設定是否觸發全域Ajax事件。
		async: false,       // 是否同部請求
		timeout: 3000,
		// Ajax 請求發出之前
		beforeSend: function(XMLHttpRequest){
			$("#overlay2").addClass("overlay2");
		},
		error:function(data) {
			$("#overlay2").removeClass("overlay2");
		},
		// Ajax 請求成功時
		success: function(res) {
			//console.log(data);
			if(typeof(res.total_found) == 'undefined') {
				$("#total_num").html(0); 
			}else{
				$("#total_num").html(res.total_found);
			}
			//console.log(res.year);
			
			//-- year --
			if(typeof(res.year) != 'undefined') {
				$(".year-num").html("");
				$("#year .attr-data label").addClass('no-data');
				$("#modal-year .attr-data label").addClass('no-data');
				
				$.each(res.year, function(i,item){
					var id  =  item.attrs['@groupby'];
					var num =  item.attrs['@count'];
					$(".year-num-"+id).html("("+num+")");
					if(num&gt;0) $(".year-num-"+id).parent('label').removeClass('no-data');
				});
			}
			
			//-- type --
			if(typeof(res.type) != 'undefined') {
				$(".type-num").html("");
				$("#type .attr-data label").addClass('no-data');
				$("#modal-type .attr-data label").addClass('no-data');
				$.each(res.type, function(i,item){
					var id  =  item.attrs['@groupby'];
					var num =  item.attrs['@count'];
					$(".type-num-"+id).html("("+num+")");
					if(num&gt;0) $(".type-num-"+id).parent('label').removeClass('no-data');
				});
			}
			//-- store --
			if(typeof(res.store) != 'undefined') {
				$(".store-num").html("");
				$("#store .attr-data label").addClass('no-data');
				$("#modal-store .attr-data label").addClass('no-data');
				//console.log(res.store);
				$.each(res.store, function(i,item){
					var id  =  item.attrs['@groupby'];
					var num =  item.attrs['@count'];
					$(".store-num-"+id).html("("+num+")");
					if(num&gt;0) $(".store-num-"+id).parent('label').removeClass('no-data');
				});
			}
			
			
			//console.log(res.cate);
			if(typeof(res.cate) != 'undefined') {
				$(".cate-num").html("");
				$(".tree5 .attr-data label").addClass('no-data');
				$.each(res.cate, function(i,item) {
					var id     = item.attrs['@groupby'];
					var num    = item.attrs['@count'];
					if(num&gt;0) $(".cate-num-"+id).html("("+num+")");
					
					//---- sub ----
					console.log(id + " --&gt;"+ num);
					$.each(item.sub, function(j,item2){
						var id2     = item2.attrs['@groupby'];
						var num2    = item2.attrs['@count'];
						$(".cate-num-"+id2).html("("+num2+")");
						//if(num2&gt;0) $(".cate-num-"+id2).parent('label').removeClass('no-data');
					});
				});
			}
			/*-- cate --
			if(typeof(res.cate) != 'undefined') {
				var zone_json = {};
				$(".cate-num").html("");
				$(".tree5 .attr-data label").addClass('no-data');
				//console.log(res.cate);
				$.each(res.cate, function(i,item){
					var id     = item.attrs['@groupby'];
					var num    = item.attrs['@count'];
					var zone   = item.attrs['p_zone'];
					$(".cate-num-"+id).html("("+num+")");
					if(num&gt;0) $(".cate-num-"+id).parent('label').removeClass('no-data');
					if(zone in zone_json){
						zone_json[zone]+= num;
					}else{
						zone_json[zone] = num;
					}
				});
				
				//-- 主分類 --
				if(typeof(zone_json) != 'undefined') {
					$.each(zone_json, function(i,item){
						//console.log(i + " ==&gt; "+ item);
						if(item&gt;0) $(".cate-num-"+i).html("("+item+")");
						//if(item&gt;0) $(".cate-num-"+i).parent('label').removeClass('no-data');
					});
				}
			}
			*/
			
			setTimeout(function(){
				$("#overlay2").removeClass("overlay2");
				$('#products').html(res.content);
			}, 300);
			
			/*
			$('#products img.media-object').lazyload({
				effect: "fadeIn",
				threshold: 200
			});
			$('#products .product-item').matchHeight();
			$.fn.matchHeight._apply('#products .product-item');
			*/
		}
	});
};</pre></body></html>