﻿/*
 * jQuery JSON Plugin
 * version: 2.1 (2009-08-14)
 *
 * This document is licensed as free software under the terms of the
 * MIT License: http://www.opensource.org/licenses/mit-license.php
 *
 * Brantley Harris wrote this plugin. It is based somewhat on the JSON.org 
 * website's http://www.json.org/json2.js, which proclaims:
 * "NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.", a sentiment that
 * I uphold.
 *
 * It is also influenced heavily by MochiKit's serializeJSON, which is 
 * copyrighted 2005 by Bob Ippolito.
 */
 
(function($) {
    /* jQuery.toJSON( json-serializble )
        Converts the given argument into a JSON respresentation.

        If an object has a "toJSON" function, that will be used to get the representation.
        Non-integer/string keys are skipped in the object, as are keys that point to a function.

        json-serializble:
            The *thing* to be converted.
     */
	$.toJSON = function(o) {
		if (typeof(JSON)=="object" && JSON.stringify) {return JSON.stringify(o);}

		if (o===null) {return "null";}

		var type = typeof(o);
		if (type=="undefined") {return undefined;}
		if (type=="number" || type=="boolean") {return o + "";}
		if (type=="string") {return $.quoteString(o);}
		if (type=="object") {
			if (typeof o.toJSON=="function") {return $.toJSON(o.toJSON());}
			if (o.constructor===Date) {
				var month	= o.getUTCMonth() + 1;
				if (month<10) {month = "0" + month;}

				var day		= o.getUTCDate();
				if (day<10) {day = "0" + day;}

				var year	= o.getUTCFullYear();

				var hours	= o.getUTCHours();
				if (hours<10) {hours = "0" + hours;}

				var minutes	= o.getUTCMinutes();
				if (minutes<10) {minutes = "0" + minutes;}

				var seconds	= o.getUTCSeconds();
				if (seconds < 10) {seconds = "0" + seconds;}

				var milli	= o.getUTCMilliseconds();
				if (milli<100) {milli = "0" + milli;}
				if (milli<10) {milli = "0" + milli;}

				return '"' + year + "-" + month + "-" + day + "T" + hours + ":" + minutes + ":" + seconds + "." + milli + 'Z"';
			}

			if (o.constructor===Array) {
				var ret = [];
				for (var i=0; i<o.length; i++) {ret.push($.toJSON(o[i]) || "null");}

				return "[" + ret.join(",") + "]";
			}

			var pairs = [];
			for (var k in o) {
				var name;
				var type = typeof k;

				if (type=="number") {
					name = '"' + k + '"';
				} else if (type=="string") {
					name = $.quoteString(k);
				} else {
					continue;  //skip non-string or number keys
				}

				if (typeof o[k]=="function") {
					continue;  //skip pairs where the value is a function.
				}

				var val = $.toJSON(o[k]);
				pairs.push(name + ":" + val);
			}

			return "{" + pairs.join(", ") + "}";
        }
    };

    /** jQuery.evalJSON(src)
        Evaluates a given piece of json source.
     **/
	$.evalJSON = function(src) {
		if (typeof(JSON)=="object" && JSON.parse) {return JSON.parse(src);}
		return eval("(" + src + ")");
	};

    /** jQuery.secureEvalJSON(src)
        Evals JSON in a way that is *more* secure.
    **/
	$.secureEvalJSON = function(src) {
		if (typeof(JSON) == 'object' && JSON.parse) {return JSON.parse(src);}

		var filtered = src;
		filtered = filtered.replace(/\\["\\\/bfnrtu]/g, '@');
		filtered = filtered.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']');
		filtered = filtered.replace(/(?:^|:|,)(?:\s*\[)+/g, '');

		if (/^[\],:{}\s]*$/.test(filtered)) {
			return eval("(" + src + ")");
		} else {
			throw new SyntaxError("Error parsing JSON, source is not valid.");
		}
	};

    /** jQuery.quoteString(string)
        Returns a string-repr of a string, escaping quotes intelligently.  
        Mostly a support function for toJSON.

        Examples:
            >>> jQuery.quoteString("apple")
            "apple"
        
            >>> jQuery.quoteString('"Where are we going?", she asked.')
            "\"Where are we going?\", she asked."
     **/
	$.quoteString = function(string) {
		if (string.match(_escapeable)) {
			return '"' + string.replace(_escapeable, function (a) {
				var c = _meta[a];
				if (typeof c==="string") {return c;}
				c = a.charCodeAt();
				return "\\u00" + Math.floor(c / 16).toString(16) + (c % 16).toString(16);
			}) + '"';
		}
		return '"' + string + '"';
	};

	var _escapeable = /["\\\x00-\x1f\x7f-\x9f]/g;
	var _meta = {
		"\b": "\\b",
		"\t": "\\t",
		"\n": "\\n",
		"\f": "\\f",
		"\r": "\\r",
		'"' : '\\"',
		'\\': '\\\\'
	};
})(jQuery);


/*
* jquery.renderhtml.js ver 0.10
*
*
* Written and maintained by Highmore Hill (highmore@163.com)
*/

;(function($) {
	if (/1\.(0|1|2)\.(0|1|2)/.test($.fn.jquery) || /^1.1/.test($.fn.jquery)) {
		alert("RenderHtml 需要 jQuery v1.2.3以上版本! 您使用的版本是 v" + $.fn.jquery);
		return;
	}

	$.fn.RenderHtml = function(options) {
		if (this.length === 0) {
			//alert("没有指定要处理的元素！");
			return this;
		}
		var opts = $.extend({}, $.fn.RenderHtml.defaults, options);

		return this.each(function(i, e) {

			var $this	= $(e);
			var $status	= (opts.status == "self") ? $this : $(opts.status);

			var MODE	= $this.data("mode");
			var PARS	= {
				object		: $this.data("object"),
				action		: $this.data("action"),
				template	: $this.data("template"),
				condition	: $this.data("condition"),
				pagemarker	: $this.data("pagemarker")
			}

			if (PARS==undefined || PARS==null) {return;}

			var processFunction	= $.fn.RenderHtml.renderFunction[$this.data("renderfunction") ? $this.data("renderfunction") : opts.renderFunction];
			if (!processFunction) {alert("没有[" + $this.data("renderfunction") ? $this.data("renderfunction") : opts.renderFunction + "]这个函数.");}
			processFunction.begin($status);

			switch (MODE) {
				case "server"		:
					getAjax($this, PARS, 0, true).then(
						function(html) {processFunction.pass(html, $this);},
						function(o) {$this.html("获取HTML内容时发生错误!");}
					);
					break;
				case "local"		:
					$.when(getAjax($this, PARS, 1, true), getAjax($this, PARS, 2, true)).then(
						function(t, d) {
							var data = ($this.data("EXTEND_DATA")==undefined) ? d[0] : $.extend(true, {}, d[0], $this.data("EXTEND_DATA"));
							var template = t[0];

							data._MODIFIERS = myModifiers;
							processFunction.pass(template.process(data, {throwExceptions:true}), $this);
							$this.removeData("EXTEND_DATA");
						},
						function(xhr, d){
							alert("错误");
						}
					);
					break;
				case "reqtemplate"	:
					getAjax($this, PARS, 1, true).then(
						function(template) {
							var data = $this.data("LOCAL_DATA") ? $this.data("LOCAL_DATA") : {};

							data._MODIFIERS = myModifiers;
							processFunction.pass(template.process(data, {throwExceptions:true}), $this);
						},
						function(o) {
							$this.html("获取模版时发生错误!");
						}
					);
					break;
				case "reqdata"	:
					getAjax($this, PARS, 2, true).then(
						function(json) {return json;},
						function(o) {$this.html("获取模版时发生错误!");}
					);
					break;
				default				:
					alert("[" + MODE + "]是错误的 MODE 参数！");
					break;
			}
		});
	}

	// 私有函数
	function getAjax($e, pars, mode, async) {
		var datatype = (mode==2) ? "json" : "html";
		pars.mode = mode;

		return $.ajax({
			url			: "fragment.asp",
			data		: pars,
			type		: "GET",
			dataType	: datatype,
			cache		: false,
			global		: false,
			async		: async,
			processData	: true,
			contentType	: "application/x-www-form-urlencoded",
			crossDomain	: false,
			context		: $e,
			beforeSend	: function(xhr) {
				xhr.setRequestHeader("If-Modified-Since","0");
				xhr.setRequestHeader("Cache-Control","no-cache");
			}
		});
	}

	// 公共函数
	$.RenderHtml	= {
		getTemplate		: function(pars) {
			var tpl;
			getAjax($("html"), pars, 1, false).done(function(_t) {
				tpl = _t;
			});
			return tpl;
		},
		getJsonData		: function(pars) {
			var da;
			getAjax($("html"), pars, 2, false).done(function(_j) {
				da = _j;
			});
			return da;
		}
	}

	// 公有默认定义
	$.fn.RenderHtml.defaults = {
		status			: "self",
		statusText		: "",
		renderFunction	: "replaceContainerHtml"
	}

	// 版本号
	$.RenderHtml.version = $.fn.RenderHtml.version = "1.10";

})(jQuery);



/*
 * jQuery RenderText Plugin
 * version: 1.0 (2011-08-14)
 *
 */

;(function($) {
	if (/1\.(0|1|2|3|4)\.(0|1)/.test($.fn.jquery) || /^1.1/.test($.fn.jquery)) {
		alert("RenderText 需要 jQuery v1.4.2以上版本! 您使用的版本是 v" + $.fn.jquery);
		return;
	}

	$.fn.RenderText = function(options) {
		var $e, $r;

		return this.each(function(i, e) {
			$e = $(e);

			opts = $.extend({}, $.fn.RenderText.defaults, {text:$e.data("text"), bg_color:$e.data("bg_color"), font_size:$e.data("font_size"), font_color:"0x" + $e.data("font_color"), font_type:$e.data("font_type"), mode:$e.data("image_type")});

			var _text = (opts.escape) ? escape(opts.text) : opts.text;
			$r = $('<img src="text.asp?fs=' + opts.font_size + '&bc=' + opts.bg_color + '&fc=' + opts.font_color + '&ft=' + opts.font_type + '&m=' + opts.mode + '&t=' + _text + '" alt="' + opts.text + '" />');

			$e.html($r);
		});
	}

	$.fn.RenderText.version = "0.0.01";

/*
********************************************************************************************************
*
* private function
*
********************************************************************************************************
*/
	function processRender($this, $target, renderSuccess) {}

/*
********************************************************************************************************
*
* rsuccess definitions - only fade is defined here, transition pack defines the rest
*
********************************************************************************************************
*/
	$.fn.RenderText.rsuccess = {
		replaceContainerHtml: function(html, $container) {
			$container.empty();
			$container.html(html);
		},

		insertContainerHtml: function(html, $container) {
			$container.append(html);
		}
	}

/*
********************************************************************************************************
*
* plugin options defaults
*
********************************************************************************************************
*/

	$.fn.RenderText.defaults = {
		font_size	: 24,
		font_color	: "000000",
		bg_color	: "FFFFFF",
		font_type	: "HSGBW3.otf",
		mode		: "jpg",
		escape		: true
	}

})(jQuery);



