
var brower_is_ie = (navigator.appName.indexOf('Internet Explorer') >= 0) ? true : false;
function changeCode(id)
{
	if (id == null)	{
		//alert($("codePic").src);
		$("codePic").src="code/code.php?"+Math.random();
		$("codePic").style.display="";
	} else {
		$(id).src="code/code.php?"+Math.random();
		$(id).style.display="";
	}
}
function getEditorHTMLContents(EditorName) {
	var oEditor = FCKeditorAPI.GetInstance(EditorName);
	return(oEditor.GetXHTML(true));
}
function setEditorContents(EditorName, ContentStr)
{
	var oEditor = FCKeditorAPI.GetInstance(EditorName) ;
	oEditor.SetHTML(ContentStr) ;
}

var $ = function(){
	var elements = new Array();
	for (var i = 0; i < arguments.length; i++) {
		var element = arguments[i];
		if (typeof(element) == 'string') {
			element = document.getElementById(element);
		}

		if (arguments.length == 1) {
			return element;
		}

		elements.push(element);
	}

	return elements;
}

var get_style = function(id){
	var html_obj = $(id);
	var result = (html_obj) ? html_obj.style : null;
	return result;
}

var get_style_attr = function(html_obj, attr){
	var cur_val = (html_obj.currentStyle) ? html_obj.currentStyle : document.defaultView.getComputedStyle(html_obj, null);
	return cur_val[attr];
}

/* include js function */
var IncludeJavaScript = function(js_file_path){
	document.write('<script type="text/javascript" src="' + js_file_path + '"></script>');
}
/* include js function */

var open_win = function(url, width, height){
	window.open(url, 'view', 'target=' + datagrid_id + ',height=' + height + ',width=' + width + ',scrollbars=yes,resizable=yes,status=no,toolbar=no,menubar=no,location=no');
}

/* useless ----- begin */
var view_info = function(id, width, height, datagrid_id){
	open_win(datagrid_id + '_view.php?id=' + id, width, height);
}
/* useless ----- end */

var load_wating = function(id, style, status){
	var doc = $(id);
	if(doc){
		if(status == true){
			doc.innerHTML='<div id="ajaxlogin"><img src="/loading/'+ style +'.gif"/></div>';
		}
		if(status == false){
			doc.innerHTML='';
		}
	}
}

/* validate methods ----- begin */
var value_in_array = function(var_value, array_values){
	return (('.' + array_values.join('.') + '.').indexOf(var_value) > -1);
}

var validate_input = function(event, type){
	//alert(event.keyCode);
	/* 8: backspace, 46: delete , 35: end, 36: home, 37: <-, 39: -> */
	/* 48-57: [0-9], 96-105: [0-9] on right side number key area */
	var result = false;
	switch(type){
		case 'int':
		if(event.shiftKey || event.ctrlKey){
			result = false;
		}
		var key_codes = [8, 46, 35, 36, 37, 39, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105];
		if(value_in_array(event.keyCode, key_codes)){
			result = true;
		}
		break;
		case 'float':
		if(event.shiftKey || event.ctrlKey){
			result = false;
		}
		var key_codes = [8, 46, 35, 36, 37, 39, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 190];
		if(value_in_array(event.keyCode, key_codes)){
			result = true;
		}
		break;
		case 'none':
		result = false;
		break;
	}

	return result;
}

/* filtrate the ip lawful or not */
var check_ip = function(ip){
	var ip_reg =  /^(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9])\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0)\.(25[0-5]|2[0-4][0-9]|[0-1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])$/;
	if (!ip_reg.test(ip)){
		return false;
	}
	return true;
}

/* filtrate the site lawful or not */
var check_site = function(site){
	var site_reg = /^([0-9a-zA-Z\-]+\.){1,3}[a-zA-Z]{2,3}$/;
	if (!site_reg.test(site)){
		return false;
	}
	return true;
}

/* filtrate the space on the first and last position */
var trim = function(str){
	return str.replace(/(^\s*)|(\s*$)/g, "");
}

/* filtrate the leave type's date 'start' and 'to' */
var check_date = function(date_start, date_to){
	if(Date.parse(date_start.replace(/-/g, "/")) > Date.parse(date_to.replace(/-/g, "/"))){
		//alert('Date To must be later than Date Start.');
		return false;
	}
	return true;
}

/* filtrate the Chinese input length */
var check_length = function(string, maxlength){
	var ch_exist = string.match(/[\u4e00-\u9fa5]/g) || new Array();

	/* "*3" because we use utf-8, a Chinese character use 3 times room of a English character */
	var ch_character_room = ch_exist.length * 3;
	if((string.length - ch_exist.length + ch_character_room) > maxlength){
		return false;
	}
	return true;
}

/* filtrate the strangely character */
/*
var check_character = function(str){
var regArray = new Array("??????","???","???","???","璺?","???","???","???","???","!","#","$","%","^","&","*","(",")","{","}","+","=","|","'","[","]","???","~","`","!","<",">","???","???","???","???","???","???","???","???","???","???","???","???","???","???","???","???","???","???","???","???","???","???","???","???","???","???","???","???","???","???","???","???","???","???","???","???","???","???","???","???","姊?","???","???","???","???","???","???","???","???","???","???","???","???","???","???","???","???","???","???","???","???","???","???","???","???","???","???","???","???","???","???","???","???","???","???","???","???","???","???","???","???","???","???","???","???","???","???","???","???","???","???","???","???","???","???","???","???","???","???","???","???","??光??","???","???","???","???","???","???","???","???","???","???","???","???","???","???","???","???","???","???");

for(var i = 0; i <= regArray.length; i++){
if (str.indexOf(regArray[i]) != -1){
alert("Input cann't include:" + "\"" + regArray[i] + "\"");
return false;
}
}
return true;
}
*/
/* validate methods ----- end */

/* for get ajax request ----- begin */
var get_remote_result = function(urlstr){
	if (window.XMLHttpRequest){
		var httpRequest = new XMLHttpRequest();
		httpRequest.open('GET', urlstr, false);
		httpRequest.send(null);
		return httpRequest.responseText;
	}else if (window.ActiveXObject){
		httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
		httpRequest.open('GET', urlstr, false);
		httpRequest.send(null);
		return httpRequest.responseText;
	}else{
		return 'ERROR: your browser does not have AJAX capability!';
	}
}
/* for get ajax request ----- end */

/* js_webservice related ----- begin */
var get_remote_data = function(func_rmt, request_detail, after_get_remote_data, method, result_type,quiet){
	var request_obj =  new Object();
	request_obj.func = func_rmt;
	//request_obj.func = 'js_webservice';
	//request_obj.func_rmt = func_rmt;

	for(var detail in request_detail){
		eval('request_obj.' + detail + ' = ' + 'request_detail.' + detail + ';');
	}

	after_get_remote_data = after_get_remote_data || function(){};
	/*
	if(func_rmt == 'list_items'){
	var result_type = false;
	}
	*/
	var asyn = true;
	//Ajax.call('/', request_obj, after_get_remote_data, method, result_type);
	Ajax.call('io.php', request_obj, after_get_remote_data, method, result_type,asyn,quiet);
}
/* js_webservice related ----- end */

/* for html string encode ----- begin */
var unescape_csv = function(str){
	var enc = new RegExp("%([0-9A-F][0-9A-F])", "i");
	while (c = enc.exec(str)){
		v = String.fromCharCode(parseInt('0x' + c[1]));
		t = new RegExp(c[0], "gi");
		str = str.replace(t, v);
	}
	return str;
}
/* for html string encode ----- end */

/* for window popup ----- begin */
var pop_up_window = function(caller, popup_id, width, height, on_complete){
	if (caller && $(popup_id)){
		$('popup_cover').style.zIndex = caller.style.zIndex + 1;
		$('popup_cover').style.display = 'block';

		$('popup').style.zIndex = $('popup_cover').style.zIndex + 1;
		$('popup').style.display = 'block';

		$('popup').style.left = ((window.screen.width - width) / 2) + 'px';
		$('popup').style.top = '0px';

		$(popup_id).style.zIndex = $('popup').style.zIndex + 1;
		$(popup_id).style.display = 'block';

		if (width){
			$(popup_id).style.width = width;
		}

		if (height){
			$(popup_id).style.height = height;
		}

		$(popup_id).caller = caller;

		on_complete = on_complete || function(){};
		on_complete(caller);
	}else{
		alert('error popup window cannot be found!');
	}
}

var close_pop_up_window = function(popup_id, before_close, on_close){
	before_close = before_close || function(){};
	before_close($($(popup_id).caller));
	if ($(popup_id)){
		on_close = on_close || function(){};
		on_close($($(popup_id).caller));

		$(popup_id).style.display = 'none';
		$('popup').style.display = 'none';
		$('popup_cover').style.display = 'none';

		on_close = on_close || function(){};
		on_close($($(popup_id).caller));
	}else{
		alert('ERROR: popup window cannot be found!');
	}
}

var drag_start = function(){
	var x_o = parseInt(get_style_attr($('popup'), 'left')) - event.clientX;
	var y_o = parseInt(get_style_attr($('popup'), 'top'))  - event.clientY;

	var max_x = document.body.offsetWidth  - $('popup').clientWidth;
	var max_y = document.body.offsetHeight - $('popup').clientHeight;

	document.onmouseup = function(){
		document.onmousemove = null;
	}

	document.onmousemove = function(){
		var target_x = x_o + event.clientX;
		if (target_x >= 0 && target_x <= max_x){
			$('popup').style.left = target_x + "px";
		}

		var target_y = y_o + event.clientY;
		if (target_y >= 0 && target_y <= max_y){
			$('popup').style.top  = target_y + "px";
		}
	}
}
/* for window popup ----- end */

/**
* AJAX transport object
*/
var Transport = {
	/* *
	* file name where exist this object
	*
	* @static
	*/
	filename : "ajax.js",

	/* *
	* save whether it is to debug, method to print the debug information, line symbol, container id of debugging
	*
	* @private
	*/
	debugging :{
		isDebugging : 0,
		debuggingMode : 0,
		linefeed : "",
		containerId : 0
	},

	/* *
	* set debug model and way to print the debug result
	*
	* @public
	* @param   {int}   wether or not to debug           0 shut off ?????ゆ??1 open up
	* @param   {int}   way to print the debug result    0 alert      1 innerHTML
	*
	*/
	debug : function (isDebugging, debuggingMode){
		this.debugging = {
		"isDebugging" : isDebugging,
		"debuggingMode" : debuggingMode,
		"linefeed" : debuggingMode ? "<br />" : "\n",
		"containerId" : "dubugging-container" + new Date().getTime()
		};
	},

	/* *
	* method automaticly called when finished transport, whose priority is higher than the call back function from run()
	*
	* @public
	*/
	onComplete : function (){
	},

	/* *
	* method automaticly called when finished transport
	*
	* @public
	*/
	onRunning : function (){
	},

	/* *
	* send http request via this method
	*
	* @public
	* @param   {string}    url             request URL
	* @param   {mix}       params          parameters to send
	* @param   {Function}  callback        call back function
	* @param   {string}    ransferMode     method to send request, include "GET" and "POST"
	* @param   {string}    response_type   response type, include "XML", "JSON" and "TEXT"
	* @param   {boolean}   asyn            the method of send request, asynchronous or not
	* @param   {boolean}   quiet           quiet model request or not
	*/
	run : function (url, params, callback, transfer_mode, response_type, asyn, quiet){

		/* deal with the parameters passed by user who called this method */
		callback = callback || function(){};
		transfer_mode = transfer_mode || 'POST';
		response_type = response_type || 'JSON';
		asyn = asyn || true;
		quiet = quiet || false;
		//alert(quiet);
		params = this.parseParams(params);
		transfer_mode = (typeof(transfer_mode) === "string" && transfer_mode.toUpperCase() === "GET") ? "GET" : "POST";

		if (transfer_mode === "GET"){
			var d = new Date();
			url += params ? (url.indexOf("?") === - 1 ? "?" : "&") + params : "";
			url = encodeURI(url) + (url.indexOf("?") === - 1 ? "?" : "&") + d.getTime() + d.getMilliseconds();
			params = null;
		}

		response_type = (typeof(response_type) === "string" && ((response_type = response_type.toUpperCase()) === "JSON" || response_type === "XML")) ? response_type : "TEXT";
		asyn = (asyn === false) ? false : true;
		asyn = false;
		/* deal with http request and response */
		var xhr = this.createXMLHttpRequest();

		try{
			var self = this;

			if (typeof(self.onRunning) === "function" && !quiet){
				self.onRunning();
			}

			xhr.open(transfer_mode, url, asyn);
			if (transfer_mode === "POST"){
				xhr.setRequestHeader("cache-control","no-cache");
				xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
				//xhr.setRequestHeader("Content-type", "text/html; charset=utf-8");
			}

			xhr.setRequestHeader("If-Modified-Since", "0");
			xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
			if (asyn){
				xhr.onreadystatechange = function (){
					if (xhr.readyState == 4){
						switch ( xhr.status ){
							case 0:
							case 200: // OK!
							/*
							*
							*/
							//alert("xhr.responseText:\r\n" + xhr.responseText);
							if (typeof(self.onComplete) === "function"){
								self.onComplete();
							}

							if (typeof(callback) === "function"){
								callback.call(self, self.parseResult(response_type, xhr), xhr.responseText);
							}
							break;
							case 304:
							/*
							*
							*
							*
							*/
							break;
							case 400: // Bad Request
							/*
							*
							*
							*
							*/
							alert("XmlHttpRequest status: [400] Bad Request");
							alert('服务器连接有问题，请再试一次');
							break;
							case 404: // Not Found
							alert("XmlHttpRequest status: [404] \nThe requested URL "+url+" was not found on this server.");
							alert('服务器连接有问题，请再试一次');
							break;
							case 409: // Conflict
							/*
							*
							*
							*
							*
							*/
							break;
							case 503: // Service Unavailable
							/*
							*
							*
							*
							*/
							alert("XmlHttpRequest status: [503] Service Unavailable");
							alert('服务器连接有问题，请再试一次');
							break;
							default:
							alert("XmlHttpRequest status: [" + xhr.status + "] Unknow status.");
							alert('服务器连接有问题，请再试一次');
						}

						xhr = null;
					}
				}

				if (xhr != null){

					//params = encodeURI(params);
					xhr.send(encodeURI(params));
					//xhr.send(params);
				}
			}else{
				if (typeof(self.onRunning) === "function"){
					self.onRunning();
				}

				xhr.send(params);

				var result = self.parseResult(response_type, xhr);

				//xhr = null;

				if (typeof(self.onComplete) === "function"){
					self.onComplete();
				}
				if (typeof(callback) === "function"){
					callback.call(self, result, xhr.responseText);
				}
				return result;
			}
		}catch (ex){
			if (typeof(self.onComplete) === "function"){
				self.onComplete();
			}

			//alert(this.filename + "/run() error:" + ex.description);
		}
	},

	/* *
	* if the debug model is open, this method will print the debug result information
	*
	* @private
	* @param   {string}    info    debug informatin
	* @param   {string}    type    information type
	*/
	displayDebuggingInfo : function (info, type){
		if ( ! this.debugging.debuggingMode){
			alert(info);
		}else{
			var id = this.debugging.containerId;
			if ( ! document.getElementById(id)){
				div = document.createElement("DIV");
				div.id = id;
				div.style.position = "absolute";
				div.style.width = "98%";
				div.style.border = "1px solid #f00";
				div.style.backgroundColor = "#eef";
				var pageYOffset = document.body.scrollTop || window.pageYOffset || 0;
				div.style.top = document.body.clientHeight * 0.6 + pageYOffset + "px";
				document.body.appendChild(div);
				div.innerHTML = "<div></div><hr style='height:1px;border:1px dashed red;'><div></div>";
			}

			var subDivs = div.getElementsByTagName("DIV");
			if (type === "param"){
				subDivs[0].innerHTML = info;
			}else{
				subDivs[1].innerHTML = info;
			}
		}
	},

	/* *
	* create xmlHttpRequest object
	*
	* @private
	* @return      return a xmlHttpRequest object
	* @type    Object
	*/
	createXMLHttpRequest : function (){
		var xhr = null;

		if (window.ActiveXObject){
			var versions = ['Microsoft.XMLHTTP', 'MSXML6.XMLHTTP', 'MSXML5.XMLHTTP', 'MSXML4.XMLHTTP', 'MSXML3.XMLHTTP', 'MSXML2.XMLHTTP', 'MSXML.XMLHTTP'];

			for (var i = 0; i < versions.length; i ++ ){
				try{
					xhr = new ActiveXObject(versions[i]);
					break;
				}catch (ex){
					continue;
				}
			}
		}else{
			xhr = new XMLHttpRequest();
		}

		return xhr;
	},

	/* *
	* this method will be called when something goes wrong in the transport process
	*
	* @private
	* @param   {Object}    xhr     XMLHttpRequest object
	* @param   {String}    url     HTTP request URL
	*/
	onXMLHttpRequestError : function (xhr, url){
		throw "URL: " + url + "\n"
		+  "readyState: " + xhr.readyState + "\n"
		+ "state: " + xhr.status + "\n"
		+ "headers: " + xhr.getAllResponseHeaders();
	},

	/* *
	* format the parameters to send
	*
	* @private
	* @params {mix}    params      parameters to send
	* @return return valid parameters
	* @type string
	*/
	parseParams : function (params){
		var legalParams = "";
		params = params ? params : "";

		if (typeof(params) === "string"){
			legalParams = params;
		}else if (typeof(params) === "object"){
			try{
				legalParams += "func="  + params.func + "&";
				legalParams += "details=" + JSON.stringify(params);
			}catch (ex){
				alert("Can't stringify JSON!");
				return false;
			}
		}else{
			alert("Invalid parameters!");
			return false;
		}

		if (this.debugging.isDebugging){
			var lf = this.debugging.linefeed,
			info = "[Original Parameters]" + lf + params + lf + lf
			+ "[Parsed Parameters]" + lf + legalParams;

			this.displayDebuggingInfo(info, "param");
		}

		return legalParams;
	},

	/* *
	* filter the response result of http
	*
	* @public
	* @params   {mix}   result   HTTP response result
	* @return  return filtered result
	* @type string
	*/
	preFilter : function (result){
		return result.replace(/\xEF\xBB\xBF/g, "");
	},

	/* *
	* format the result returned
	*
	* @private
	* @return return result of special format
	* @type mix
	*/
	parseResult : function (response_type, xhr){
		//alert(xhr.responseText);
		var result = null;
		switch (response_type){
			case "JSON":
			result = this.preFilter(xhr.responseText).split("\r\n");
			//result = result.split("text/html");
			//var tepRS = result.split("charset=utf-8");
			for (var r in result){
				var temp_r = trim(result[r]);
				if (temp_r.substr(0,1) == '{' || temp_r.substr(1,1) == '{' || temp_r.substr(0,1) == '['){
					result = temp_r;
					break;
				}
			}

			try{
				result = eval('('+ result +')');
			}catch (ex){
				throw this.filename + "/parseResult() error: can't parse to JSON.\n\n" + xhr.responseText;
			}
			break;
			case "XML" :
			result = xhr.responseXML;
			break;
			case "TEXT" :
			result = this.preFilter(xhr.responseText);
			break;
			default :
			throw this.filename + "/parseResult() error: unknown response type:" + response_type;
		}

		if (this.debugging.isDebugging){
			var lf = this.debugging.linefeed,
			info = "[Response Result of " + response_type + " Format]" + lf + result;

			if (response_type === "JSON"){
				info = "[Response Result of TEXT Format]" + lf + xhr.responseText + lf + lf + info;
			}

			this.displayDebuggingInfo(info, "result");
		}

		return result;
	}
};

/* define two bynames */
var Ajax = Transport;
Ajax.call = Transport.run;

Ajax.onRunning  = showLoader;
Ajax.onComplete = hideLoader;

/* *
* display load information
*/
function showLoader(){
	load_wating('comment_list', 2 ,true);
	/*use loading process bar interface*/
}

/* *
* hide the load information
*/
function hideLoader(){
	load_wating('comment_list', 2 ,false);
	/*hide loading process bar interface*/
}

/* for javascript json encode ----- begin */
if (!this.JSON) {
	JSON = function () {
		function f(n) {
			return n < 10 ? '0' + n : n;
		}

		Date.prototype.toJSON = function (key) {
			return this.getUTCFullYear()   + '-' +
			f(this.getUTCMonth() + 1) + '-' +
			f(this.getUTCDate())      + 'T' +
			f(this.getUTCHours())     + ':' +
			f(this.getUTCMinutes())   + ':' +
			f(this.getUTCSeconds())   + 'Z';
		};

		var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
		escapeable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
		gap,
		indent,
		meta = {
		'\b': '\\b',
		'\t': '\\t',
		'\n': '\\n',
		'\f': '\\f',
		'\r': '\\r',
		'"' : '\\"',
		'\\': '\\\\'
		},
		rep;

		function quote(string) {
			escapeable.lastIndex = 0;
			return escapeable.test(string) ?
			'"' + string.replace(escapeable, function (a) {
				var c = meta[a];
				if (typeof c === 'string') {
					return c;
				}
				return '\\u' + ('0000' +
				(+(a.charCodeAt(0))).toString(16)).slice(-4);
			}) + '"' :
			'"' + string + '"';
		}

		function str(key, holder) {
			var i,
			k,
			v,
			length,
			mind = gap,
			partial,
			value = holder[key];

			if (value && typeof value === 'object' && typeof value.toJSON === 'function') {
				value = value.toJSON(key);
			}

			if (typeof rep === 'function') {
				value = rep.call(holder, key, value);
			}

			switch (typeof value) {
				case 'string':
				return quote(value);

				case 'number':


				return isFinite(value) ? String(value) : 'null';

				case 'boolean':
				case 'null':


				return String(value);


				case 'object':


				if (!value) {
					return 'null';
				}


				gap += indent;
				partial = [];


				if (typeof value.length === 'number' &&
				!(value.propertyIsEnumerable('length'))) {


					length = value.length;
					for (i = 0; i < length; i += 1) {
						partial[i] = str(i, value) || 'null';
					}


					v = partial.length === 0 ? '[]' :
					gap ? '[\n' + gap +
					partial.join(',\n' + gap) + '\n' +
					mind + ']' :
					'[' + partial.join(',') + ']';
					gap = mind;
					return v;
				}


				if (rep && typeof rep === 'object') {
					length = rep.length;
					for (i = 0; i < length; i += 1) {
						k = rep[i];
						if (typeof k === 'string') {
							v = str(k, value, rep);
							if (v) {
								partial.push(quote(k) + (gap ? ': ' : ':') + v);
							}
						}
					}
				} else {


					for (k in value) {
						if (Object.hasOwnProperty.call(value, k)) {
							v = str(k, value, rep);
							if (v) {
								partial.push(quote(k) + (gap ? ': ' : ':') + v);
							}
						}
					}
				}
				v = partial.length === 0 ? '{}' :
				gap ? '{\n' + gap +
				partial.join(',\n' + gap) + '\n' +
				mind + '}' :
				'{' + partial.join(',') + '}';
				gap = mind;
				return v;
			}
		}
		return {
			stringify: function (value, replacer, space) {
				var i;
				gap = '';
				indent = '';

				if (typeof space === 'number') {
					for (i = 0; i < space; i += 1) {
						indent += ' ';
					}


				} else if (typeof space === 'string') {
					indent = space;
				}

				rep = replacer;
				if (replacer && typeof replacer !== 'function' &&
				(typeof replacer !== 'object' ||
				typeof replacer.length !== 'number')) {
					throw new Error('JSON.stringify');
				}

				return str('', {'': value});
			},

			parse: function (text, reviver) {

				var j;

				function walk(holder, key) {

					var k, v, value = holder[key];
					if (value && typeof value === 'object') {
						for (k in value) {
							if (Object.hasOwnProperty.call(value, k)) {
								v = walk(value, k);
								if (v !== undefined) {
									value[k] = v;
								} else {
									delete value[k];
								}
							}
						}
					}
					return reviver.call(holder, key, value);
				}
				cx.lastIndex = 0;
				if (cx.test(text)) {
					text = text.replace(cx, function (a) {
						return '\\u' + ('0000' +
						(+(a.charCodeAt(0))).toString(16)).slice(-4);
					});
				}

				if (/^[\],:{}\s]*$/.
				test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@').
				replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']').
				replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {

					j = eval('(' + text + ')');


					return typeof reviver === 'function' ?
					walk({'': j}, '') : j;
				}


				throw new SyntaxError('JSON.parse');
			}
		};
	}();
}
/* for javascript json encode ----- end */



/**
* @check form element js function
*
* @author: Timcai
*
* @Date: 2008-12-25
*/

function checkEmail(emailvalue)
{
	if(emailvalue.search(/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/) == -1)
	{
		return false;
	}
	else
	{
		return true;
	}
}

function validatePassword(pwdvalue)
{
	var re1 = new RegExp("^([a-zA-Z0-9]){6,16}$");
	if(!re1.test(pwdvalue))
	{
		return false;
	}
	else
	{
		return true;
	}
}

function validateAreaCode(areaCodeValue)
{
	reg = /^[0-9]{3,4}$/;
	if(!areaCodeValue.match(reg))
	{
		return false;
	}
	else
	{
		return true;
	}
}

function validateTel(telValue)
{
	reg = /^[0-9]{6,20}$/;
	if(!telValue.match(reg))
	{
		return false;
	}
	else
	{
		return true;
	}
}

function validateCellPhone(cellPhoneValue)
{
	reg = /^[0-9]{11,11}$/;
	if(!cellPhoneValue.match(reg))
	{
		return false;
	}
	else
	{
		return true;
	}
}

function validateDate(dateValue)
{
	if(!/\d{4}-(0[0-9]|1[0-2])-([0-2][0-9]|3[0-1])/.test(dateValue))
	{
		return false;
	}
	else
	{
		return true;
	}
}

function vaildateAccount(accountValue)
{
	var re1 = new RegExp("^([\u4E00-\uFA29]|[\uE7C7-\uE7F3]|[a-zA-Z0-9_])*$");
	if(!re1.test(accountValue))
	{
		return false;
	}
	else
	{
		return true;
	}
}

function validateZipcode(cellPhoneValue)
{
	reg = /^[0-9]{6,6}$/;
	if(!cellPhoneValue.match(reg))
	{
		return false;
	}
	else
	{
		return true;
	}
}

function vaildateNumber(accountValue)
{
	var re1 = new RegExp("^([0-9])*$");
	if(!re1.test(accountValue))
	{
		return false;
	}
	else
	{
		return true;
	}
}

function vaildateName(accountValue)
{
	var re1 = new RegExp("^([\u4E00-\uFA29]|[\uE7C7-\uE7F3]|[a-zA-Z0-9])*$");
	if(!re1.test(accountValue))
	{
		return false;
	}
	else
	{
		return true;
	}
}

function hsOpenWindows(url,winName,widthStr,heightStr){
	var toTop   ;
	var toLeft   ;
	var sw   =   screen.width   ;
	var sh   =   screen.height   ;

	if   (widthStr   ==   '')   widthStr   =   0   ;
	if   (heightStr   ==   '')   heightStr   =   0   ;

	toTop   =   parseInt((sh   -   heightStr)/2)-20   ;
	toLeft   =   parseInt((sw   -   widthStr   )/2)   ;
	//alert(toTop   +   '+'   +   toLeft)   ;
	window.open(url,"",   "height="   +   heightStr   +   ",width="   +   widthStr   +   ",status=no,toolbar=no,menubar=no,location=no,scrollbars=yes,resizable=no,left="   +   toLeft   +   ",top="   +toTop   +   ",'true'")
}