﻿SmartSort = function() {

	var Slider = NEWEGG.widget.Slider;
	
	var opt_slider 	= [],
	    	opt_data = [],
		opt_panel_filter = [], 	
	    	tmp_slider,
		tmp_slider_bg,
		tmp_slider_thumb,
		tmp_thumb_image,
		opt_panel_filter,
		tmp_bg,
		tmp_thumb, 
		opt_sort_col,
		debug = false,
		changeSlider = false,
		price_max = 9999999,
		price_min = -1,
		inPriceMin = price_min,
		inPriceMax = price_max,
	        opt_template_display,
		opt_filter_title = [],
		opt_display_item =[],
		opt_data_extra = [],
		opt_data_show = [],
		opt_page_img = [],
		opt_slider_place = [],
		opt_check_item = [];
	
	//The page default start from 1
	var opt_page = 1;

	//The page show data number
	var opt_page_size = 10;

	//The chars means:第一页，上一页，下一页，最后一页，前XXX页，后XXX页
	//var opt_navchar = ['[|<<]', '[<]', '[>]', '[>>|]', '[<<]', '[>>]'];

	var opt_navchar = ['<img border="0" src="images/pageOn_first.gif"/>', '<img border="0" src="images/pageOn_back.gif"/>', '<img border="0" src="images/pageOn_forward.gif"/>', '<img border="0" src="images/pageOn_end.gif"/>', '[<<]', '[>>]', '<img border="0" src="images/pageOn_back_gray.gif"/>', '<img border="0" src="images/pageOn_first_gray.gif"/>', '<img border="0" src="images/pageOn_end_gray.gif"/>', '<img border="0" src="images/pageOn_forward_gray.gif"/>']
	

	var nolink_color = "#ff0000";	

	var opt_num_size = 5;
	
	var topConstraint = 0;
	
	var bottomConstraint = 200;
	
	var scaleFactor = 1.5;
	
	var keyIncrement = 20;
	
	var tickSize = 20;

	function sortData(data, col) {
		window.status = 'Sorting Data...' + col;
		opt_sort_col = col;
		return data.sort(sortFunc);
	}
	
	function sortFunc(f1, f2) {
		var v1 = f1[opt_sort_col];
		var v2 = f2[opt_sort_col];
		if (v1 == undefined) { v1 = 0; }
		if (v2 == undefined) { v2 = 0; }
		if (v1 < v2) { return 1; }
		if (v1 > v2) { return -1; }
		if (v1 == v2) {
			if (f1['price'] < f2['price']) { return -1; }
			if (f1['price'] > f2['price']) { return 1; }
		}
		return 0;
	}

	function sortDataOnPrice(data) {
		window.status = 'Sorting Data...';
		opt_sort_col = 'price';
		return data.sort(sortFuncOnPrice);
	}
	
	function sortFuncOnPrice(f1, f2) {
		var v1 = f1[opt_sort_col];
		var v2 = f2[opt_sort_col];
		if (v1 == undefined) { v1 = 0; }
		if (v2 == undefined) { v2 = 0; }
		if (v1 > v2) { return 1; }
		if (v1 < v2) { return -1; }
		return 0;
	}
	
	function computingRank(data, field) {
		window.status = 'Computing Ranks...';
		
		for (var i = 0; i < data.length; i++) {
			data[i]['rank'] = 0
			for (var j = 0; j < sel_fields.length; j++) {
				data[i]['rank'] += data[i]['curscore'][sel_fields[j][0]];
			}
		}

		data = sortData(data, field);
		return data;
	}
	
	
	function updateScore(value, field) {
		var msg = document.getElementById('important_msg_' + field);
		msg.className = 'displaysize_slider_label1';
		if (value > 0 && value <= 30) {
			msg.innerHTML = '一点重要';
		}
		else if (value > 30 && value <= 60) {
			msg.innerHTML = '重要';
		}
		else if (value > 60 && value <= 90) {
			msg.innerHTML = '很重要';
		}
		else if (value > 90 && value <= 120) {
			msg.innerHTML = '非常重要';
		}
		else {
			msg.className = 'displaysize_slider_label0';
			msg.innerHTML = '不重要';
		}

		opt_slider_place[field] = value / 120.0;

		if ( value <= 0 ) {
			for (var i = 0; i < opt_data.length; i++) {
				opt_data[i]['curscore'][field] = opt_data[i]['score'][field] * 0;
			}
		}
		else {
			for (var i = 0; i < opt_data.length; i++) {
				opt_data[i]['curscore'][field] = opt_data[i]['score'][field] * ( value / 120.0 );
			}
		}
	}

	function log(message) {
		if ( typeof(console) != 'undefined' && console.log ) {
			console.log(message);
			console.trace();
		}
		else {
			if (!log.window_ || log.window_.closed) {
				var win = window.open("", null, "width=400,height=200," +
						"scrollbars=yes,resizable=yes,status=no," +
						"location=no,menubar=no,toolbar=no");
				if (!win) return;
				var doc = win.document;
				doc.write("<html><head><title>Debug Log</title></head>" +
						"<body></body></html>");
				doc.close();
				log.window_ = win;
			}
			var logLine = log.window_.document.createElement("div");
			logLine.appendChild(log.window_.document.createTextNode(message));
			log.window_.document.body.appendChild(logLine);
		}
	}
	

	function updateDebugInfo() {
		window.status = 'debug...';
		for (var i = 0; i < opt_data.length; i++) {
			debugInfo = '';
			for (field in opt_data[i]['score']) {
				debugInfo += field + '-- 初始值：' + opt_data[i]['score'][field] + '&nbsp;|&nbsp;';
				//debugInfo += '拖动比例：' + value / 200.0 + '&nbsp;|&nbsp;';
				debugInfo += '得分：' + opt_data[i]['curscore'][field] + '<br />';
			}
			debugInfo += '总分：' + opt_data[i]['rank'] + '<br />';
			opt_data[i]['debug'] = debugInfo;
		}
	}
	
	function pageTurn() {
		
		var totalpage = Math.ceil(opt_data_show.length/opt_page_size); 
		var str_first = '';
		var str_pre = ''; 
		var str_num = '';
	       	var str_next= '';
	       	var str_last = '';
		var str_total = '';
		var str_total_page = '';
		
		opt_page = Number(opt_page);
		

		/*if ( totalpage <= 1 ) {
			return;
		}*/
		/*str_total = '<font color="#666666">共</font><font color="#ff9900">' + opt_data_show.length + '</font><font color="#666666"> 条记录 </font>';*/
		str_total = '共 <font color="#ff9900">' + opt_data_show.length + '</font> 条记录 ';

        	if (opt_num_size>0){
			var thisunit = Math.ceil(opt_page/opt_num_size);//取得本页所有的组 
			var preunit = (thisunit>1) ? (thisunit-1) : "";//取得上页所有的组 
			var nextunit = ( thisunit < Math.ceil( totalpage/opt_num_size) ) ? ( thisunit+1 ) : "";//取得下页所有的组
			var startpage= ( thisunit-1 ) * opt_num_size + 1;//取得本组的开始页 
			var endpage = Math.min( thisunit * opt_num_size, totalpage);//取得本组的最后页 
			
			if (opt_page == endpage && opt_page < totalpage) {
				startpage++;
				endpage++;
			}	

			if ( preunit != "" ){
			    var str_preunit = " <a href=\"javascript:void(0);\" onclick=\"javascript:SmartSort.pageOn(" + ( (thisunit - 2) * opt_num_size + 1 ) + ")\" title=\"前" + opt_num_size + "页\">" + opt_navchar[4] + "</a> ";
			}

			if (nextunit != ""){
			    var str_nextunit = " <a href=\"javascript:void(0);\" onclick=\"javascript:SmartSort.pageOn(" + ( thisunit * opt_num_size + 1 ) + ")\" title=\"后" + opt_num_size + "页\">" + opt_navchar[5] + "</a>";
			}
		}
	    str_num += '  <select onchange="javascript:SmartSort.pageOn(this.value);" name="goPage">'
	    for (var i = 1; i <= totalpage; i++){
		if ( i == opt_page) { 
			str_num += "<option value=" + i + " selected>第" + i + "页</option>";
		}
		else {
			
			str_num += "<option value=" + i + ">第" + i + "页</option>";
			//str_num += " <a href=\"javascript:void(0);\" onclick=\"javascript:SmartSort.pageOn(" + i + ")\" title=\"第" + i + "页\">" + i + "</a> ";
	    	}
	    }
	    
	    str_num += '</select>'

		if ( opt_page > 1 ){
		    var str_first = " <a href=\"javascript:void(0);\" onclick=\"javascript:SmartSort.pageOn(1)\" title=\"第一页\">" + opt_navchar[0] + "</a> ";
		    var str_pre = " <a href=\"javascript:void(0);\" onclick=\"javascript:SmartSort.pageOn(" + (opt_page - 1) + ")\" title=\"前一页\">" + opt_navchar[1] + "</a> ";
		}
	    	else {
			
		    var str_first = " <a href=\"javascript:void(0);\">" + opt_navchar[7] + "</a> ";
		    var str_pre = " <a href=\"javascript:void(0);\">" + opt_navchar[6] + "</a> ";
		}
		
		if ( opt_page < totalpage){
		    var str_next= " <a href=\"javascript:void(0);\" onclick=\"javascript:SmartSort.pageOn(" + (opt_page+1) + ")\" title=\"后一页\">" + opt_navchar[2] + "</a> ";
		    var str_last= " <a href=\"javascript:void(0);\" onclick=\"javascript:SmartSort.pageOn(" + totalpage + ")\" title=\"最后页\">" + opt_navchar[3] + "</a> 　";
		}
		else {
			  
		    var str_next= " <a href=\"javascript:void(0);\">" + opt_navchar[9] + "</a> ";
		    var str_last= " <a href=\"javascript:void(0);\">" + opt_navchar[8] + "</a> 　";
		}
		//str_total_page = ' <font color="#666666">页次：</font><font color="#ff9900">' + opt_page + '/' + totalpage + '</font><font color="#666666">页</font>'; 
		str_total_page = ' 页次：<font color="#ff9900">' + opt_page + '/' + totalpage + '</font>页';		
		
		var displaytTable = document.getElementById('display');
		
		for (var i = 0; i < displaytTable.rows.length; i++) {
			if(displaytTable.rows[i].id == 'navigation' ) {
				displaytTable.deleteRow(i);
				break;
			} 
		}
		
		var tmp_tr = displaytTable.insertRow(-1);
		var tmp_cell_1 = tmp_tr.insertCell(-1);
		tmp_cell_1.colSpan = 3;
		tmp_cell_1.align = 'right';
		tmp_cell_1.id = 'navigation';
		tmp_cell_1.className = 'page_bar_bottom text';	
		tmp_cell_1.innerHTML = str_total + str_first + str_pre+ str_next + str_last + str_total_page + str_num;
		

		var navtop = document.getElementById('navtop');
		navtop.innerHTML = str_total + str_first + str_pre+ str_next + str_last + str_total_page + str_num;

	}

	function sliderHandler(field, t2, t3) {
		var value = getOffsetFromParent(t2, t3);
		//var now = Date();
		//log("End field=" + field + ",getOffsetFromParent=" + value + " #" + now.toLocaleString());
		updateScore(value, field);
		
		/*if (value <= 0) {
			if ( NoneSet() ) {
				return;
			}
		}*/

		if ( !onlyPriceSet() ) {
			return;
		}
		opt_data_extra = computingRank(opt_data, 'rank');
		opt_data_show = opt_data_extra.slice(0);

	 	filterInner();			
		opt_data_show = computePrice(opt_data_show, inPriceMin, inPriceMax);
		opt_data_show = recomm(opt_data_show);
		//updateDebugInfo();
		
		opt_page = 1;
		drawTable(); 	
	}

	function filterInner() {
		for (var i = 0; i < opt_filter.length; i += 6) {
				opt_data_show  = searchData(opt_filter[i+1], opt_data_show, opt_filter[i+4]);
		}
	}	

	function drawTable() {
		window.status = 'Redrawing...';
		var helper = document.getElementById('helper');
		if (helper.style.display == 'block') {
			helper.style.display = 'none'; 	
		}
		var displaytTable = document.getElementById('display');
				
		var tbody = displaytTable.getElementsByTagName('TBODY').item(0);
		//table.removeChild(tbody);
		var len = tbody.childNodes.length;
		// remove existing rows
		for (var i = 0; i < len; i++) {
			tbody.removeChild(tbody.childNodes.item(0));
		}

		var s = (opt_page - 1) * opt_page_size;
		var e = s + opt_page_size;
		
		len = Math.min(opt_data_show.length, e);
		opt_page_img = [];

		for (var i = s; i < len; i++) {
			opt_page_img[opt_page_img.length] = 'img_' + opt_data_show[i]['ItemID'];

			var tmp_tr = displaytTable.insertRow(-1);
			var tmp_cell_1 = tmp_tr.insertCell(-1);
			var tmp_html = opt_template_display;
			for (var j = 0; j < opt_display_item.length; j++) {
				var re = new RegExp("\/@(" + opt_display_item[j] + ")@\/", "gmi");
				tmp_html = tmp_html.replace(re, eval('opt_data_show[' + i + '].' + opt_display_item[j]));
			}
			tmp_cell_1.innerHTML = tmp_html;
		}
		
		//log(displaytTable.innerHTML);
		
		pageTurn();

		if ( ne_browser.isIE && ne_browser.version == 6 ) {
			setTimeout('reloadOImg()', 1000);
		}
		window.status = 'End...';
	}

	function filterDataAnd(data, tt, field) {
		var tmp_data = [];	
		for (var i = 0; i < data.length; i++) {
			if ( isSubset(tt, data[i][field]) == tt.length ) {
				tmp_data[tmp_data.length] = data[i];
			}
		}
		return tmp_data;	
	}
	
	function filterDataOr(data, tt, field) {
		var tmp_data = [];	
		for (var i = 0; i < data.length; i++) {
			if ( isSubset(tt, data[i][field]) > 0 ) {
				tmp_data[tmp_data.length] = data[i];
			}
		}
		return tmp_data;	
	}
	
	function isSubset(a1, a2) {
		if (a1.length == 0 || a2.length == 0) {
			return 0;
		}

		var c1 = {};
		var fs = 0;
		for (var i = 0; i < a1.length; i++) {
			c1[a1[i] + ''] = true;
		}
		for (var i = 0; i < a2.length; i++) {
			if (c1[a2[i] + '']) {
				fs++;	
			}
		}

		return fs;
	}

	function hideAllDialog() {
		document.getElementById('overDiv').style.visibility='hidden';
	}

	function searchData(field, Data, type) {
		
		var tt = opt_check_item[field].slice(1);
		
		if (tt.length == 0) {
			return Data;
		}

		if (type == 1) {
			var TData =  filterDataOr(Data, tt, field);
		}
		else if(type == 2) {
			var TData =  filterDataAnd(Data, tt, field);
		}
		return TData;	
	}
	
	function getOffsetFromParent(cEl, pEl) {
		
		var myPos = NEWEGG.util.Dom.getX(cEl);
		var ppos  = NEWEGG.util.Dom.getX(pEl);
		//log(cEl + '-myPos:' + myPos);
		//log(pEl + '-ppos:' + ppos);
		return (myPos - ppos);
	}
	
	function computePrice(data, vmin, vmax) {
		var TData = [];
		for ( var i = 0; i < data.length; i++ ) {
			if ( data[i]['price'] >= vmin && data[i]['price'] <= vmax ) {
				TData[TData.length]  = data[i];	
			}
		}
		return TData;	
	}

	function repeat(num, str) {
		var tmp = '';
		for (var i = 0; i < num; i++) {
			tmp += str;
		}
		
		return tmp;
	}
	
	function NoneSet() {
		var isNoneSet = true;	

		for ( key in opt_slider_place ) {
			if ( opt_slider_place[key] > 0 ) {
				isNoneSet = false;
				break;	
			}
		}

		for (var i = 0; i < opt_filter.length; i += 6) {
			var fp = i + 1;

			if ( opt_check_item[opt_filter[fp]].length > 1 ) {
				isNoneSet = false;	
				break;
			}
		}

		var priceMin = document.getElementById('price_min').value;
		var priceMax = document.getElementById('price_max').value;

		if (priceMin != '' || priceMax != '') {
			isNoneSet = false;	
		}
		
		if ( isNoneSet ) {
			var displaytTable = document.getElementById('display');
			var tbody = displaytTable.getElementsByTagName('TBODY').item(0);
			var len = tbody.childNodes.length;
			for (var i = 0; i < len; i++) {
				tbody.removeChild(tbody.childNodes.item(0));
			}

			for ( key in opt_slider_place ) {
				opt_slider_place[key] = 0;
			}

			var navtop = document.getElementById('navtop');
			navtop.innerHTML = '';

			var helper = document.getElementById('helper');
			helper.style.display = 'block'; 
		}
		return isNoneSet; 		
	}

	function onlyPriceSet() {
		var isOnlyPriceSet = true;	

		for ( key in opt_slider_place ) {
			if ( opt_slider_place[key] > 0 ) {
				isOnlyPriceSet = false;
				break;	
			}
		}

		for (var i = 0; i < opt_filter.length; i += 6) {
			var fp = i + 1;

			if ( opt_check_item[opt_filter[fp]].length > 1 ) {
				isOnlyPriceSet = false;	
				break;
			}
		}

		if ( isOnlyPriceSet ) {

			opt_data_show = opt_data_extra.slice(0);
			opt_data_show = computePrice(opt_data_show, inPriceMin, inPriceMax);
			opt_data_show = sortDataOnPrice( opt_data_show);
			opt_data_show = recomm(opt_data_show);
			opt_page = 1;
			drawTable();
			return false;
		}
		else {
			return true;
		}

	}

	function recomm(Data) {
		var isOnlyPriceSet = true;	

		for ( key in opt_slider_place ) {
			if ( opt_slider_place[key] > 0 ) {
				isOnlyPriceSet = false;
				break;	
			}
		}
		
		if (isOnlyPriceSet) {
			for (var i = 0 ;i < Data.length; i++) {
				Data[i]['reason'] = '<table width="100%" border="0" cellspacing="0" cellpadding="0">';
				for ( var j = 0; j < sel_fields.length; j++ ) {
					Data[i]['reason'] += '<tr><td>' + sel_fields[j][1] + '</td><td>' + Data[i]['grade'][sel_fields[j][0]] + '</td></tr>';
				}
				//Data[i]['reason'] += '<tr><td>Top Score</td><td width="30%">' + Data[i]['rank'].toString().replace(/^(\d+\.\d{2})\d*$/,"$1") + '</td></tr>';
				Data[i]['reason'] += "</table>";
			}
		}
		else {
				
			for (var i = 0 ;i < Data.length; i++) {
				Data[i]['reason'] = '<table width="100%" border="0" cellspacing="0" cellpadding="0">';
				for ( var j = 0; j < sel_fields.length; j++ ) {
					if ( opt_slider_place[sel_fields[j][0]] > 0 ) {
						Data[i]['reason'] += '<tr><td>' + sel_fields[j][1] + '</td><td>' + Data[i]['grade'][sel_fields[j][0]] + '</td></tr>';
					}
				}
				Data[i]['reason'] += '<tr><td>综合评分</td><td>' + Data[i]['rank'].toString().replace(/^(\d+\.\d{2})\d*$/,"$1") + '</td></tr>';
				Data[i]['reason'] += "</table>";
			}
		}
		
		return Data;
	}

	return {
		
		pageOn: function(page) {
				opt_page = page;
				drawTable();		
			},
		
		filterHandle: function() {

				if ( !this.filterPriceHandle() ) {
					return;
				}

				if ( !onlyPriceSet() ) {
					return;
				}
				

				opt_data_show = opt_data_extra.slice(0);
			
				for (var i = 0; i < opt_filter.length; i += 6) {
						opt_data_show  = searchData(opt_filter[i+1], opt_data_show, opt_filter[i+4]);
				}

				opt_data_show = computePrice(opt_data_show, inPriceMin, inPriceMax);
				opt_data_show = recomm(opt_data_show);
				
				/*var isNotSliderSet = true;
				for ( key in opt_slider_place ) {
					if ( opt_slider_place[key] > 0 ) {
						isNotSliderSet = false;
						break;	
					}
				}

				if (isNotSliderSet){
					opt_data_show = sortDataOnPrice(opt_data_show);
				}*/
				//updateDebugInfo();
				
				opt_page = 1;
				drawTable();	
			      },
		
		resetData: function() {
				 opt_data_show = []; 
				 inPriceMin = price_min;
				 inPriceMax = price_max;
				 //opt_data_extra = []
				 //opt_data_extra = opt_data;
				 var fields = document.getElementsByTagName('INPUT');
				 for (var i = 0; i < fields.length; i++) {
					if (fields[i].type == 'checkbox') {
						fields[i].checked = false;
					}
					else if(fields[i].type == 'text') {
						fields[i].value = '';
					}
				 }
				
				 for (var i = 0; i < opt_slider.length; i++) {
					 opt_slider[i].setValue(0, true, true, true);
				 }

				 for (var i = 0; i < opt_data.length; i++) {
					 for (key in opt_data[i]['curscore']) {
					 	opt_data[i]['curscore'][key] = opt_data[i]['score'][key] * 0;
					 }
				 }
				
						 
				for (var i = 0; i < sel_fields.length; i++) {
					var msg = document.getElementById('important_msg_' + sel_fields[i][0]);
					msg.className = 'displaysize_slider_label0';
					msg.innerHTML = '不重要';
				}

				for (var i = 0; i < opt_filter.length; i += 6) {
					opt_check_item[opt_filter[i+1]] = [-1];
					opt_check_item[opt_filter[i+1] + '_filter_type'] = 0;
				}
				
				var displaytTable = document.getElementById('display');
				var tbody = displaytTable.getElementsByTagName('TBODY').item(0);
				var len = tbody.childNodes.length;
				for (var i = 0; i < len; i++) {
					tbody.removeChild(tbody.childNodes.item(0));
				}

				for ( key in opt_slider_place ) {
					opt_slider_place[key] = 0;
				}

				var navtop = document.getElementById('navtop');
				navtop.innerHTML = '';
				
				var helper = document.getElementById('helper');
				helper.style.display = 'block'; 
				//opt_page = 1;
				//drawTable();
			   },
		
		filterPriceHandle: function() {
				var priceMin = document.getElementById('price_min');
				var priceMax = document.getElementById('price_max');
				inPriceMax = price_max;
				inPriceMin = price_min;
				
				if (priceMin.value == '') {
					priceMin.value = 'min';
				}
				else if (priceMin.value == 'min') {
					inPriceMin = price_min;
				}
				else {
					inPriceMin = Number(priceMin.value);
				}

				if (priceMax.value == '') {
					priceMax.value = 'max';
				}
				else if (priceMax.value == 'max') {
					inPriceMax = price_max;
				}
				else {
					inPriceMax = Number(priceMax.value);
				}
				
				if ( inPriceMin > inPriceMax ) {
					alert('请设置合理的价格范围!');
					priceMin.value = '';
					priceMax.value = '';
					priceMin.focus();
					return false;
				}
			
				return true;	
				//filterInner();
				//updateDebugInfo();
				
				//opt_page = 1;
				//drawTable();	
			      },


		templateInit: function() {
				var displayItem = document.getElementById('display_item');
				var re = /\/@([\s\S]*?)@\//mig;
				opt_template_display = displayItem.cells[0].innerHTML;
				opt_template_display = opt_template_display.replace(/<!\-\-/, '');
				opt_template_display = opt_template_display.replace(/\-\->/, '');
				opt_display_item = displayItem.innerHTML.match(re);
				document.getElementById('display').deleteRow(0);
				for (var i = 0; i < opt_display_item.length; i++) {
					opt_display_item[i] = opt_display_item[i].replace(/\/@/,"");
					opt_display_item[i] = opt_display_item[i].replace(/@\//,"");
				}
			      },	      
			      
		sliderInit: function() {
			//The sliders display place
			var sliderTable = document.getElementById('sliders');
			
			var sliderPlace;

			for ( var i = 0; i < sel_fields.length; i++ ) {
				opt_slider_place[sel_fields[i][0]] = 0;	
				
				tmp_bg = sel_fields[i][0] + '_slider_bg';
				tmp_thumb = sel_fields[i][0] + '_slider_thumb';
				
				tmp_slider_bg = document.createElement( 'div' );
				tmp_slider_bg.id =  tmp_bg;
				tmp_slider_bg.className = 'slider_bg';
				
				tmp_slider_thumb = document.createElement( 'div' );
				tmp_slider_thumb.id = tmp_thumb;
				tmp_slider_thumb.className = 'slider_thumb';
				
				tmp_thumb_image = document.createElement('img');
				tmp_thumb_image.src = "images/thumb-n.gif";
				tmp_thumb_image.width = '20';
				tmp_thumb_image.height = '24';
				
				tmp_slider_thumb.appendChild(tmp_thumb_image);
				tmp_slider_bg.appendChild(tmp_slider_thumb);
				
				var tmp_tr = sliderTable.insertRow(-1);
				var tmp_cell_1 = tmp_tr.insertCell(-1);
				var tmp_cell_2 = tmp_tr.insertCell(-1);
				var tmp_cell_3 = tmp_tr.insertCell(-1);
				
				tmp_cell_3.innerHTML = '不重要';
				tmp_cell_3.id = 'important_msg_' + sel_fields[i][0];
				tmp_cell_3.className = 'displaysize_slider_label0';
				//tmp_cell_1.innerHTML = '<b class="featureQuestion">您对' + sel_fields[i][1] + '的关注程度</b>' + '<img onmouseover="return overlib(SmartSort.createTooltip(\'' + sel_fields[i][2] + '.\'));" onmouseout="return nd();" src="images/tooltip.gif" width="12" height="16" />';
				if (sel_fields[i][2].length > 1)
				{
					tmp_cell_1.innerHTML = '<b class="featureQuestion">您对' + sel_fields[i][1] + '的关注程度</b>' + '<img onmouseover="return overlib(\'' + sel_fields[i][2] + '\');" onmouseout="return nd();" src="images/tooltip.gif" width="14" height="15" />';

				}
				else {
					tmp_cell_1.innerHTML = '<b class="featureQuestion">您对' + sel_fields[i][1] + '的关注程度</b>' + '<img src="images/tooltip.gif" width="14" height="15" />';

				}
				tmp_cell_1.className = 'feature';
				tmp_cell_1.width = '62%';
				tmp_cell_2.style.height = '27px';
				tmp_cell_2.appendChild(tmp_slider_bg);
				sliderPlace = opt_slider.length; 
				opt_slider[sliderPlace] = NEWEGG.widget.Slider.getHorizSlider(tmp_bg, 
							 tmp_thumb, 0, 120, 30);
				opt_slider[sliderPlace].animate = false;	
				   
				//var myPos = NEWEGG.util.Dom.getX(tmp_thumb);
				//var ppos  = NEWEGG.util.Dom.getX(tmp_bg);
				//log('Init ' + tmp_thumb + '-myPos:' + myPos + "," + tmp_bg + "-ppos:" + ppos);

				opt_slider[sliderPlace].subscribe("change",function() {changeSlider = true;}); 
		
				opt_slider[sliderPlace].subscribe("slideEnd", function(t1, t2, t3) {
					return function(){
						if(changeSlider) { 
							changeSlider = false;
							var fun = 'sliderHandler("' + sel_fields[t1][0] + '", "' + t2 + '", "' + t3 + '")';
							setTimeout(function () {eval(fun);}, 500);
						}	
						/*var value = getOffsetFromParent(t2, t3);
						var now = Date();
						log("End field=" + this.toString() + ",Value=" + this.getValue() + ",getOffsetFromParent=" + value + ",moveComplete=" + this.moveComplete + " #" + now.toLocaleString());
						sliderHandler(value, sel_fields[t1][0]);*/
					}
				}(i, tmp_thumb, tmp_bg));
			}
		},
		
		expandData: function() {
				var raw_len = opt_raw.length;
				var fields_len = opt_fields.length;
				var rec_count = raw_len / fields_len;
				for (var i = 0; i < rec_count; i++) {
					var rec = opt_data[i] = [];
					for (var j = 0; j < fields_len; j++) {
						rec[opt_fields[j]] = opt_raw[i * fields_len + j] == null ? 'undefined' : opt_raw[i * fields_len + j];
					}
				}

				var score_len = sel_fields.length; 
				for (var i = 0; i < opt_data.length; i++) {
					var tmp_score = {};
					opt_data[i]['curscore'] = {};
					opt_data[i]['grade'] = {};
					for(var j = 0; j < score_len; j++) {
						tmp_score[sel_fields[j][0]] = Number(opt_data[i]['score'][j] == null ? 0 : opt_data[i]['score'][j]);
						opt_data[i]['curscore'][sel_fields[j][0]] = Number(opt_data[i]['score'][j] == null ? 0 : opt_data[i]['score'][j] * 0);
						if ( tmp_score[sel_fields[j][0]] <= 60 ) {
							snum = 1;
						}
						else if (tmp_score[sel_fields[j][0]] <= 80) {
							snum = 2;
						}	
						else if (tmp_score[sel_fields[j][0]] <= 95) {
							snum = 3;
						}	
						else if (tmp_score[sel_fields[j][0]] < 100) {
							snum = 4;
						}	
						else if (tmp_score[sel_fields[j][0]] == 100) {
							snum = 5;
						}	
						
						opt_data[i]['grade'][sel_fields[j][0]] = repeat(snum, '<img src="images/star.gif" width="12" height="12" />');
					}
					opt_data[i]['score'] = tmp_score;
				}
			    },
		
		ItemFTClick: function(field) {
				     opt_check_item[field] = 1 - opt_check_item[field];
			     },

		filterInit: function() {
				var tmp_content = document.getElementById( 'filter' );
				var tabView = new NEWEGG.widget.TabView();
				
				var html = '<table width="100%" cellspacing="3" cellpadding="0" border="0" style="font-size: 12px;"><tr><td>价格：<input type="text" onchange="javascript:checkPriceInput(event, this);" maxlength="10" size="5" id="price_min" name="price_min"/> 至 <input type="text" onchange="javascript:checkPriceInput(event, this);" maxlength="10" size="5" id="price_max" name="price_max"/></td></tr></table>';
				
				tabView.addTab( new NEWEGG.widget.Tab({
						label: '价格',
						content: html,
						active: true
					    }));
				
				for (var i = 0; i < opt_filter.length; i += 6) {
					var fp = i + 1;
					
					opt_check_item[opt_filter[fp]] = [-1];
					opt_check_item[opt_filter[fp] + '_filter_type'] = 0; 
					html = this.createFilterPanle(i, 5);
					tabView.addTab( new NEWEGG.widget.Tab({
						label: opt_filter[i],
						content: html,
						active: false
					    }));
				}
				
				tabView.appendTo(tmp_content);
			    },

		Init: function() {
				this.templateInit();
				this.expandData();
				this.filterInit();
				this.sliderInit();
				this.FilterPanelInit();

				if ( ne_browser.isIE && ne_browser.version == 6 ) {
					this.imageLoaders('images/first.gif');
					this.imageLoaders('images/prev.gif');
					this.imageLoaders('images/next.gif');
					this.imageLoaders('images/last.gif');
					this.imageLoaders('images/setFilter.gif');
				}
				
				document.getElementById('price_min').value = '';
				document.getElementById('price_max').value = '';
				
				opt_data_extra = computingRank(opt_data, 'rank');	
		      },

		imageLoaders:function(url) {
	     			var PreviewArea = document.getElementById("loader");
				if (url) {
					var Obj = document.createElement('IMG');
					Obj.src = url;
					PreviewArea.appendChild(Obj);
				}
				else {
					return;
				}	
			     },

		Itemchk:function(field, Obj) {

				if(!Obj.checked) {
					for (var i = 0; i < opt_check_item[field].length; i++) {
						if (Obj.value == opt_check_item[field][i]) {
							opt_check_item[field].splice(i,1);
							break;
						}
					}
				}
				else { 	
					opt_check_item[field][opt_check_item[field].length] = Obj.value;
				}
			},

		createFilterPanle: function(i) {
					var fp = i + 1;
					var tp = i + 3;
					var vp = i + 2;
					var sp = i + 4;
					var js = 0;
					var tmp_html = '<table width="100%" border="0" cellspacing="3" cellpadding="0" style="font-size:12px;">';
					   tmp_html += '<tr>';
					   for (var key in opt_filter[vp]) {
						   if (js > 0 && js % 3 == 0) {
							   tmp_html += '</tr><tr>';
						   }
						   var isCheck = false;	
						   for (var i = 0; i < opt_check_item[opt_filter[fp]].length; i++) {
						   	if(opt_check_item[opt_filter[fp]][i] == key) {
								isCheck = true;
								break;
							}
						   }
						   
						   if (isCheck) {
							   tmp_html += '<td><input type="' + opt_filter[tp] + '" name="' + opt_filter[fp] + '_filter" id="' + opt_filter[fp] + '_filter" value="' + key + '" onclick="javascript:SmartSort.Itemchk(\'' + opt_filter[fp] + '\', this)" checked="checked" />&nbsp;' + opt_filter[vp][key] + '</td>';
						   }
						   else {
							   tmp_html += '<td><input type="' + opt_filter[tp] + '" name="' + opt_filter[fp] + '_filter" id="' + opt_filter[fp] + '_filter" value="' + key + '" onclick="javascript:SmartSort.Itemchk(\'' + opt_filter[fp] + '\', this)" />&nbsp;' + opt_filter[vp][key] + '</td>';
						   }

						   js++;
					   }

					   if (opt_filter[tp] == 'checkbox') {
						   tmp_html += '</tr>';
					   }
					   
				           tmp_html += '</table>';	   

					   return tmp_html;
				},
		
		createTooltip: function(str) {
			var tmp_html = '<table width="100%" border="0" cellspacing="3" cellpadding="0" style="font-size:12px;">';
			tmp_html += '<tr><td width="10%">' + str + '</td></tr>';
			return tmp_html;
			
		},
				
		selectAllFilter: function(key, vp) {
					var filter_fields = document.getElementsByName(key + '_filter');
					
					for (var j = 0; j < filter_fields.length; j++) {
						opt_check_item[key][j+1] = filter_fields[j].value ; 
						if (!filter_fields[j].checked) {
							filter_fields[j].checked = true;
						}	
					}
				 },

		clearAllFilter: function(key) {
					var filter_fields = document.getElementsByName(key + '_filter');
					
					for (var j = 0; j < filter_fields.length; j++) {
						if (filter_fields[j].checked) {
							filter_fields[j].checked = false;
						}	
					}
					opt_check_item[key] = [];
				        opt_check_item[key][0] = -1;	
					
				},

		ImgIsOnLoad: function(id) {
			     for (var i = 0; i < opt_page_img.length; i++) {
				     if (id == opt_page_img[i]) {
					     opt_page_img.splice(i,1);
					     break;
				     }
			     }
		
			     //log(type + ':' + src);
		},
		
		reloadPImg: function() {
			/*if (opt_page_img.length == 0) {
				clearInterval(reload);	
			}*/
			var url = '';    
			var img;
			for (var i = 0; i < opt_page_img.length; i++) {
				img = document.getElementById(opt_page_img[i]);
				url = img.src;
				img.src = '';
				img.src = url;
			}
		},

		openFilterPanel: function() {
			var fp = document.getElementById('FilterPanel');
			var cm = document.getElementById('ChooseMore');
			var Then = new Date();　　　 
			Then.setMonth(Then.getMonth()+1);

			if (fp.style.display == 'none')
			{
				
				cm.src = 'images/cloceFilter.gif';
				fp.style.display = 'block';
				document.cookie = 'FilterPanelState=open' +";expires="+ Then.toGMTString() ;
			}
			else {
				cm.src = 'images/setFilter.gif';
				fp.style.display = 'none';
				document.cookie = 'FilterPanelState=colse' +";expires="+ Then.toGMTString() ;
			}
		},

		FilterPanelInit: function() {
			var cookieStr = document.cookie;
			var cookieName = 'FilterPanelState';
			var start = cookieStr.indexOf(cookieName + '=');
			var value = '';
			if (start == -1) {
				return;
			}
			start += cookieName.length + 1;
			var end = cookieStr.indexOf(';', start);
			if (end == -1) {
				 value = unescape(cookieStr.substring(start));
			}
			else {
				value = unescape(cookieStr.substring(start, end));
			}

			if (value == 'open')
			{
				var fp = document.getElementById('FilterPanel');
				var cm = document.getElementById('ChooseMore');
				cm.src = 'images/cloceFilter.gif';
				fp.style.display = 'block';
			}
		}
	};
}();

NEWEGG.util.Event.onDOMReady(SmartSort.Init, SmartSort, true);

/*if ( ne_browser.isIE && ne_browser.version == 6 ) {
	var reload = setInterval("SmartSort.reloadPImg()", 2000);
}*/

setTimeout(function(){var filter_content = document.getElementById( 'filter' );filter_content.style.visibility = "visible";},2000);

function reloadOImg() {
		var oTable = document.getElementById('display'); 
		var oImg = oTable.getElementsByTagName('IMG');
		for (var i = 0; i < oImg.length; i++) {
			if ( oImg[i].src.indexOf('btn_putinCompare.png') ) {
				url = oImg[i].src;
				oImg[i].src = '';
				oImg[i].src = url;
			}
		}
			
}
