//Configrations
var BAIKE_ITEMS_MAX_NUM = 6;
var BAIKE_ITEMS_MAX_LEN = 30;
var TIEBA_ITEMS_MAX_NUM = 5;
var TIEBA_ITEMS_MAX_LEN = 30;

//string
String.prototype.truncate=function(length, truncation) {
		length = length || 30;
		truncation = truncation === undefined ? '...' : truncation;
		return this.length > length ?
		  this.slice(0, length - truncation.length) + truncation : this;
     }

// Global routines
var isIE = false;
var userAgent = navigator.userAgent.toLowerCase();
if ((userAgent.indexOf('msie') != -1) && (userAgent.indexOf('opera') == -1)) {
	isIE = true;
}

function _clearHighlight(str) {
	var re = /<[^<>]+>/g;
	return str.replace(re, "");
}

function G(id) {
	if (document.getElementById) {
		return document.getElementById(id);
	}
	
	return document.all[id];
}

Function.prototype.bind = function() { 
	var __m = this, object = arguments[0], args = new Array(); 
	for(var i = 1; i < arguments.length; i++){
		args.push(arguments[i]);
	}
	
	return function() {
		return __m.apply(object, args);
	};
};

Function.prototype.bindAsEventListener = function() { 
	var __m = this, object = arguments[0], args = new Array();
	for(var i = 1; i < arguments.length; i++){
		args.push(arguments[i]);
	}
	
	return function(event) {
		return __m.apply(object, [( event || window.event)].concat(args));
	};
};


//Zhidao
var ZhidaoSearchJsonApi = function() {
	this.Init.apply(this, arguments);
};

ZhidaoSearchJsonApi.prototype = {
	_urlBase: "http://zhidao.baidu.com/q?",
	_opts: null,
	
	/**
	 * Convert options to query string
	 * @param {Object} opts
	 */
	_opts2Query: function(opts) {
		if (opts == null) {
			return '';
		}
		
		var params = [];
		for (var i in opts) {
			params.push(i + '=' + opts[i]);
		}
		
		return params.join('&');
	},
	
	Init: function(opts) {
		this._opts = opts;
	},
	
	/**
	 * Load data
	 */
	load: function() {
		var url = this._urlBase + this._opts2Query(this._opts);

		var el = document.createElement("SCRIPT");
		el.type = "text/javascript";
		el.charset = "GBK";
		el.src = url;

		if (isIE) {
			el.attachEvent("onreadystatechange", ZhidaoItemsDisplay.show.bind(ZhidaoItemsDisplay));
		} else {
			el.addEventListener("load", ZhidaoItemsDisplay.show.bind(ZhidaoItemsDisplay), false);
		}

		document.body.appendChild(el);
	}
};

var ZhidaoItemsDisplay = {
	show: function() {
		if (typeof iknowRes == "undefined") {
			return;
		}

		var contents = [];
		var list = iknowRes.list;
		var nList = list.length;

		for (var i = 0; i < nList && i < BAIKE_ITEMS_MAX_NUM; i++) {
			contents.push("<li>&#8226;&nbsp;<a href=\"" + list[i].url + "\">" + _clearHighlight(list[i].tit).truncate(BAIKE_ITEMS_MAX_LEN) + "</a></li>");
		}

		G("iknow_container").innerHTML = contents.join("");
	}
};

// Tieba
var TiebaJsonApi = function() {
	this.Init.apply(this, arguments);
};

TiebaJsonApi.prototype = {
	_urlBase: "http://tieba.baidu.com/f?",
	_opts: null,
	
	/**
	 * Convert options to query string
	 * @param {Object} opts
	 */
	_opts2Query: function(opts) {
		if (opts == null) {
			return '';
		}
		
		var params = [];
		for (var i in opts) {
			params.push(i + '=' + opts[i]);
		}
		
		return params.join('&');
	},
	
	Init: function(opts) {
		this._opts = opts;
	},
	
	/**
	 * Load data
	 */
	load: function() {
		var url = this._urlBase + this._opts2Query(this._opts);

		var el = document.createElement("SCRIPT");
		el.type = "text/javascript";
		el.charset = "GBK";
		el.src = url;

		if (isIE) {
			el.attachEvent("onreadystatechange", TiebaItemsDisplay.show.bind(TiebaItemsDisplay, this._urlBase.replace(/\/f\?$/, "")));
		} else {
			el.addEventListener("load", TiebaItemsDisplay.show.bind(TiebaItemsDisplay, this._urlBase.replace(/\/f\?$/, "")), false);
		}

		document.body.appendChild(el);
	}
};

var TiebaItemsDisplay = {
	_clearTiebaHighlight: function(str) {
		var re = /<[^<>]+>/g;
		return str.replace(re, "$1");
	},

	show: function(urlBase) {
		if (typeof tiebaRes == "undefined") {
			return;
		}

		var contents = ['<table><tr class="font_bold"><td width=\"50\" class=\"align_center\">µã»÷</td><td width=\"50\" class=\"align_center\">»Ø¸´</td><td class="align_center">±êÌâ</td></tr>'];
		var list = tiebaRes.list;
		var nList = list.length;

		for (var i = 0; i < nList && i < TIEBA_ITEMS_MAX_NUM; i++) {
			contents.push("<tr><td class=\"align_center\">" + list[i].click + "</td><td class=\"align_center\">" + list[i].re + "</td><td><a href=\"" + urlBase + list[i].url + "\">" + this._clearTiebaHighlight(list[i].tit).truncate(TIEBA_ITEMS_MAX_LEN) + "</a></td></tr>");
		}
		contents.push('</table>');

		G("tieba_container").innerHTML = contents.join("");
	}
};

// Main procedure

function loadZhidao(zhidaoKeyword,zhidaoRow,zhidaoLen) {
	// Load Zhidao items
	var zhidaoOpts = {
		word: zhidaoKeyword,
		ct: 17,
		pn: 0,
		tn: "ikfsjson",
		rn: 10
	};
	if (arguments.length==3){
    BAIKE_ITEMS_MAX_NUM = zhidaoRow;
    BAIKE_ITEMS_MAX_LEN = zhidaoLen;
    }
	var zhidaoLoader = new ZhidaoSearchJsonApi(zhidaoOpts);
	zhidaoLoader.load();
}
function loadTieba(tiebaKeyword,tiebaRow,tiebaLen) {
	// Load tieba items
	var tiebaOpts = {
		z: 0,
		ct: 318767104,
		lm: 11,
		sc: 0,
		rn: 50,
		tn: "jsonDataPost",
		rs3: 0,
		rs4: 0,
		word: tiebaKeyword,
		pn: 50
	};
    if (arguments.length==3)
    {TIEBA_ITEMS_MAX_NUM = tiebaRow;
    TIEBA_ITEMS_MAX_LEN = tiebaLen;
    }
	

	var tiebaLoader = new TiebaJsonApi(tiebaOpts);
	tiebaLoader.load();
}