
var AD2 = {};
(function (a) {
	var slice = Array.slice || (function () {
		var _slice = Array.prototype.slice;
		return function (arr) {
			return _slice.apply(arr, _slice.call(arguments, 1));
		};
	})(), getType = function (v) {
		var s = typeof v;
		if (s === "object") {
			if (v) {
				if (typeof v.length === "number") {
					s = "array";
				}
			} else {
				s = "null";
			}
		}
		return s;
	}, contains = function (superset, subset) {
		return !find(subset, function (v, k, _break) {
			if (superset[k] !== v) {
				return _break;
			}
		});
	}, equals = function (a, b) {
		return contains(a, b) && contains(b, a);
	}, isEmpty = function (o) {
		var empty = true;
		each(o, function (v, k, _break) {
			empty = false;
			return _break;
		});
		return empty;
	}, each = (function () {
		var _break = {}, arr_fn = function (numerable, fn, bind) {
			for (var i = 0, len = numerable.length; i < len; i++) {
				if (fn.call(bind, numerable[i], i, _break) == _break) {
					return i;
				}
			}
			return -1;
		}, iterator_type = {"string":function (numerable, fn, bind) {
			return arr_fn(numerable.split(""), fn, bind);
		}, "array":arr_fn, "number":function (numerable, fn, bind) {
			for (var i = 0; i < numerable; i++) {
				fn.call(bind, i, i);
			}
		}, "object":function (numerable, fn, bind) {
			for (var i in numerable) {
				if (numerable.hasOwnProperty(i)) {
					if (fn.call(bind, numerable[i], i, _break) == _break) {
						return i;
					}
				}
			}
			return -1;
		}}, getIterator = function (o) {
			return iterator_type[getType(o)];
		};
		return function (numerable, fn, bind) {
			return getIterator(numerable)(numerable, fn, bind || numerable);
		};
	})(), find = function (numerable, fn, bind) {
		var index = each(numerable, function (v, k, _break) {
			if (fn.apply(bind, arguments) === true) {
				return _break;
			}
		});
		return index == -1 ? null : numerable[index];
	}, filter = function (numerable, fn, bind) {
		var valids = [];
		each(numerable, function (v) {
			if (fn.apply(bind, arguments) === true) {
				valids.push(v);
			}
		});
		return valids;
	}, map = function (numerable, fn, bind, is_dictionary) {
		var results;
		if (is_dictionary) {
			results = {};
			each(numerable, function (v, k) {
				results[k] = fn.apply(bind, arguments);
			});
		} else {
			results = [];
			each(numerable, function () {
				results.push(fn.apply(bind, arguments));
			});
		}
		return results;
	}, invoke = function (numerable, method_name, arg1, arg2, argN) {
		var args = slice(arguments, 2);
		each(numerable, function (v, k) {
			v[method_name].apply(v, args);
		});
	}, unlink = function (object) {
		if (object == null) {
			return object;
		}
		if (typeof object.length == "number" && typeof object != "string") {
			return map(object, unlink);
		} else {
			if (typeof object == "object") {
				return map(object, unlink, null, true);
			}
		}
		return object;
	}, mixdeep = function (r) {
		if (!r) {
			r = {};
		}
		for (var i = 1; i < arguments.length; i++) {
			var s = arguments[i];
			if (s) {
				for (var j in s) {
					if (r[j] && typeof r[j] == "object" && typeof s[j] == "object") {
						mix(r[j], s[j]);
					} else {
						r[j] = unlink(s[j]);
					}
				}
			}
		}
		return r;
	}, mix = function (r) {
		if (!r) {
			r = {};
		}
		for (var i = 1; i < arguments.length; i++) {
			var s = arguments[i];
			if (s) {
				for (var j in s) {
					r[j] = s[j];
				}
			}
		}
		return r;
	}, mixif = function (r) {
		if (!r) {
			r = {};
		}
		for (var i = 1; i < arguments.length; i++) {
			var s = arguments[i];
			if (s) {
				for (var j in s) {
					if (r[j] === undefined) {
						r[j] = s[j];
					}
				}
			}
		}
		return r;
	}, generateId = (function () {
		var id = 1;
		return function () {
			return "auto_gen_" + id++;
		};
	})(), Class = {proto:(function () {
		var fn = function (instance, method) {
			return this.prototype[method].apply(instance, slice(arguments, 2));
		};
		return function (ctor) {
			ctor.proto = fn;
		};
	})(), create:function (proto, sp) {
		var ctor = function () {
			if (this.init) {
				this.init.apply(this, arguments);
			}
		};
		if (sp) {
			var F = function () {
			};
			F.prototype = sp.prototype;
			ctor.prototype = new F();
		}
		var protos = slice(arguments, 2);
		protos.unshift(ctor.prototype, proto);
		mix.apply(window, protos);
		return ctor;
	}}, getObjectToStringFn = function (assign_token, pair_separator, need_last, need_encode) {
		var encode = need_encode ? encodeURIComponent : function (k) {
			return k;
		};
		return function (o) {
			return map(o, function (v, k) {
				if (k != null) {
					return k + assign_token + encode(v);
				}
			}).join(pair_separator) + (need_last ? pair_separator : "");
		};
	};
	mix(a, {generateId:generateId, slice:slice, getType:getType, equals:equals, isEmpty:isEmpty, each:each, map:map, find:find, filter:filter, mix:mix, mixdeep:mixdeep, mixif:mixif, buffer:function (runner, delay) {
		var timer;
		return function () {
			if (timer) {
				clearTimeout(timer);
			}
			var args = arguments;
			timer = setTimeout(function () {
				runner.apply(window, args);
			}, delay || 100);
		};
	}, Class:Class, format:function (s, config, reserve) {
		return s.replace(/\{([^}]*)\}/g, (typeof config == "object") ? function (m, i) {
			var ret = config[i];
			return ret == null && reserve ? m : ret;
		} : config);
	}, getObjectToStringFn:getObjectToStringFn, serializeStyles:getObjectToStringFn(":", ";", true, false), serializeAttrs:getObjectToStringFn("=", " ", true, false), serializeQuery:getObjectToStringFn("=", "&", false, true)});
})(AD2);
(function (a) {
	var el_template = "<{tag} {attrs}style=\"{styles}\">{inner}</{tag}>", each = a.each, propertyCache = {}, patterns = {HYPHEN:/(-[a-z])/i, ROOT_TAG:/^body|html$/i}, ua = (function () {
		var o = {ie:0, opera:0, gecko:0, webkit:0, mobile:null};
		var ua = navigator.userAgent, m;
		if ((/KHTML/).test(ua)) {
			o.webkit = 1;
		}
		m = ua.match(/AppleWebKit\/([^\s]*)/);
		if (m && m[1]) {
			o.webkit = parseFloat(m[1]);
			if (/ Mobile\//.test(ua)) {
				o.mobile = "Apple";
			} else {
				m = ua.match(/NokiaN[^\/]*/);
				if (m) {
					o.mobile = m[0];
				}
			}
		}
		if (!o.webkit) {
			m = ua.match(/Opera[\s\/]([^\s]*)/);
			if (m && m[1]) {
				o.opera = parseFloat(m[1]);
				m = ua.match(/Opera Mini[^;]*/);
				if (m) {
					o.mobile = m[0];
				}
			} else {
				m = ua.match(/MSIE\s([^;]*)/);
				if (m && m[1]) {
					o.ie = parseFloat(m[1]);
				} else {
					m = ua.match(/Gecko\/([^\s]*)/);
					if (m) {
						o.gecko = 1;
						m = ua.match(/rv:([^\s\)]*)/);
						if (m && m[1]) {
							o.gecko = parseFloat(m[1]);
						}
					}
				}
			}
		}
		return o;
	})();
	var walk = function (el, side) {
		for (var nel = el; nel; nel = nel[side]) {
			if (nel.nodeType == 1) {
				return nel;
			}
		}
	}, buildHTML = function (styles, attrs, tag, inner) {
		return a.format(el_template, {tag:tag || "div", attrs:a.serializeAttrs(attrs || {}), styles:a.serializeStyles(styles), inner:inner || ""});
	}, toCamel = function (property) {
		if (!patterns.HYPHEN.test(property)) {
			return property;
		}
		if (propertyCache[property]) {
			return propertyCache[property];
		}
		var converted = property;
		while (patterns.HYPHEN.exec(converted)) {
			converted = converted.replace(RegExp.$1, RegExp.$1.substr(1).toUpperCase());
		}
		propertyCache[property] = converted;
		return converted;
	}, getStyle = (function () {
		if (document.defaultView && document.defaultView.getComputedStyle) {
			return function (el, property) {
				var value = null;
				if (property == "float") {
					property = "cssFloat";
				}
				var computed = document.defaultView.getComputedStyle(el, "");
				if (computed) {
					value = computed[toCamel(property)];
				}
				return el.style[property] || value;
			};
		} else {
			if (document.documentElement.currentStyle && ua.ie) {
				return function (el, property) {
					switch (toCamel(property)) {
					  case "opacity":
						var val = 100;
						try {
							val = el.filters["DXImageTransform.Microsoft.Alpha"].opacity;
						}
						catch (e) {
							try {
								val = el.filters("alpha").opacity;
							}
							catch (e) {
							}
						}
						return val / 100;
					  case "float":
						property = "styleFloat";
					  default:
						var value = el.currentStyle ? el.currentStyle[property] : null;
						return (el.style[property] || value);
					}
				};
			} else {
				return function (el, property) {
					return el.style[property];
				};
			}
		}
	})(), setStyle = (function () {
		var px = /left|top|right|bottom|width|height/;
		var transVal = function (k, v) {
			if (px.test(k) && typeof v == "number") {
				v = v + "px";
			}
			return v;
		};
		if (ua.ie) {
			return function (el, property, val) {
				property = toCamel(property);
				switch (property) {
				  case "opacity":
					el.style.filter = "alpha(opacity=" + val * 100 + ")";
					if (!el.currentStyle || !el.currentStyle.hasLayout) {
						el.style.zoom = 1;
					}
					break;
				  case "float":
					property = "styleFloat";
				  default:
					el.style[property] = transVal(property, val);
				}
			};
		} else {
			return function (el, property, val) {
				property = toCamel(property);
				if (property == "float") {
					property = "cssFloat";
				}
				el.style[property] = transVal(property, val);
			};
		}
	})(), getDocumentScrollLeft = function (doc) {
		doc = doc || document;
		return Math.max(doc.documentElement.scrollLeft, doc.body.scrollLeft);
	}, getDocumentScrollTop = function (doc) {
		doc = doc || document;
		return Math.max(doc.documentElement.scrollTop, doc.body.scrollTop);
	}, getDocumentHeight = function () {
		var scrollHeight = (document.compatMode != "CSS1Compat") ? document.body.scrollHeight : document.documentElement.scrollHeight;
		var h = Math.max(scrollHeight, getViewportHeight());
		return h;
	}, getDocumentWidth = function () {
		var scrollWidth = (document.compatMode != "CSS1Compat") ? document.body.scrollWidth : document.documentElement.scrollWidth;
		var w = Math.max(scrollWidth, getViewportWidth());
		return w;
	}, getViewportHeight = function () {
		var height = self.innerHeight;
		var mode = document.compatMode;
		if ((mode || ua.ie) && !ua.opera) {
			height = (mode == "CSS1Compat") ? document.documentElement.clientHeight : document.body.clientHeight;
		}
		return height;
	}, getViewportWidth = function () {
		var width = self.innerWidth;
		var mode = document.compatMode;
		if (mode || ua.ie) {
			width = (mode == "CSS1Compat") ? document.documentElement.clientWidth : document.body.clientWidth;
		}
		return width;
	}, getXY = function (el) {
		var pos = [el.offsetLeft, el.offsetTop];
		var parentNode = el.offsetParent;
		var accountForBody = (ua.webkit && getStyle(el, "position") == "absolute" && el.offsetParent == el.ownerDocument.body);
		if (parentNode != el) {
			while (parentNode) {
				pos[0] += parentNode.offsetLeft;
				pos[1] += parentNode.offsetTop;
				if (!accountForBody && ua.webkit && getStyle(parentNode, "position") == "absolute") {
					accountForBody = true;
				}
				parentNode = parentNode.offsetParent;
			}
		}
		if (accountForBody) {
			pos[0] -= el.ownerDocument.body.offsetLeft;
			pos[1] -= el.ownerDocument.body.offsetTop;
		}
		parentNode = el.parentNode;
		while (parentNode.tagName && !patterns.ROOT_TAG.test(parentNode.tagName)) {
			if (getStyle(parentNode, "display").search(/^inline|table-row.*$/i)) {
				pos[0] -= parentNode.scrollLeft;
				pos[1] -= parentNode.scrollTop;
			}
			parentNode = parentNode.parentNode;
		}
		return pos;
	}, $ = function (id) {
		if (typeof id == "string") {
			return document.getElementById(id);
		}
		return id;
	};
	a.DomUtil = {ua:ua, get:$, buildHTML:buildHTML, createElement:function (html) {
		if (typeof html != "string") {
			html = buildHTML.apply(window, arguments);
		}
		var el = document.createElement("div");
		el.innerHTML = html;
		return el.firstChild;
	}, next:function (el) {
		return walk(el, "nextSibling");
	}, pre:function (el) {
		return walk(el, "previousSibling");
	}, children:function (el) {
		var results = [];
		for (var cel = el.firstChild; cel; cel = cel.nextSibling) {
			if (cel.nodeType == 1) {
				results.push(cel);
			}
		}
		return results;
	}, setStyle:function (el, k, v) {
		el = $(el);
		if (typeof k == "object") {
			each(k, function (_v, _k) {
				setStyle(el, _k, _v);
			});
		} else {
			setStyle(el, k, v);
		}
	}, getStyle:function (el, k) {
		return getStyle($(el), k);
	}, getXY:function (el) {
		return getXY($(el));
	}, hide:function (el) {
		setStyle(el, "display", "none");
	}, show:function (el) {
		setStyle(el, "display", "");
	}, getDocumentHeight:getDocumentHeight, getDocumentWidth:getDocumentWidth, getViewportHeight:getViewportHeight, getViewportWidth:getViewportWidth, getDocumentScrollTop:getDocumentScrollTop, getDocumentScrollLeft:getDocumentScrollLeft, absolutize:function (el, zIndex, insert_to_body) {
		el.className = "absolute";
		a.DomUtil.setStyle(el, {position:"absolute", left:"-999px", top:"-9999px", zIndex:zIndex});
		if (insert_to_body) {
			document.body.insertBefore(el, document.body.firstChild);
		}
	}, align:function (anchor, brick, type) {
		anchor = $(anchor);
		brick = $(brick);
		var sizes = {}, types = type.split("-"), anchorXY = getXY(anchor), x = anchorXY[0], y = anchorXY[1];
		each({anchor:anchor, brick:brick}, function (el, name) {
			var o = sizes[name] = {};
			each(["Width", "Height"], function (side) {
				o[side.toLowerCase()] = el["offset" + side];
			});
		});
		each(types[0].split(""), function (al) {
			switch (al) {
			  case "r":
				x += sizes.anchor.width;
				break;
			  case "b":
				y += sizes.anchor.height;
				break;
			  default:
				break;
			}
		});
		each(types[1].split(""), function (al) {
			switch (al) {
			  case "r":
				x -= sizes.brick.width;
				break;
			  case "b":
				y -= sizes.brick.height;
				break;
			  default:
				break;
			}
		});
		brick.style.left = x + "px";
		brick.style.top = y + "px";
	}};
})(AD2);
(function (a) {
	var $ = a.DomUtil.get, evt = a.DomEventUtil = {};
	if (document.addEventListener) {
		evt.on = function (el, type, handler) {
			$(el).addEventListener(type, handler, false);
			return handler;
		};
		evt.un = function (el, type, handler) {
			$(el).removeEventListener(type, handler, false);
		};
		evt.stopPropagation = function (e) {
			e.stopPropagation();
		};
		evt.preventDefault = function (e) {
			e.preventDefault();
		};
		evt.getTarget = function (e) {
			return e.target;
		};
	} else {
		evt.on = function (el, type, handler) {
			el = $(el);
			var actualHandler = function () {
				handler.call(el, window.event);
			};
			el.attachEvent("on" + type, actualHandler);
			return actualHandler;
		};
		evt.un = function (el, type, actualHandler) {
			$(el).detachEvent("on" + type, actualHandler);
		};
		evt.stopPropagation = function (e) {
			e.cancelBubble = true;
		};
		evt.preventDefault = function (e) {
			e.returnValue = false;
		};
		evt.getTarget = function (e) {
			return e.srcElement;
		};
	}
	evt.stop = function (e) {
		evt.stopPropagation(e);
		evt.preventDefault(e);
	};
})(AD2);
(function (a) {
	a.Cookie = {set:function (key, value, options) {
		var text = key + "=" + value;
		if (options) {
			if (options.expires) {
				text += "; expires=" + (new Date((new Date()).getTime() + 86400000 * options.expires)).toGMTString();
			}
			if (options.path) {
				text += "; path=" + options.path;
			}
			if (options.domain) {
				text += "; domain=" + options.domain;
			}
			if (options.secure === true) {
				text += "; secure";
			}
		}
		document.cookie = text;
	}, get:function () {
		var text = document.cookie;
		var cookies = {};
		if (/[^=]+=[^=;]?(?:; [^=]+=[^=]?)?/.test(text)) {
			var cookieParts = text.split(/;\s/g), cookieName = null, cookieValue = null, cookieNameValue = null;
			for (var i = 0, len = cookieParts.length; i < len; i++) {
				cookieNameValue = cookieParts[i].match(/([^=]+)=/i);
				if (cookieNameValue instanceof Array) {
					cookieName = cookieNameValue[1];
					cookieValue = cookieParts[i].substring(cookieNameValue[1].length + 1);
				} else {
					cookieName = cookieParts[i];
					cookieValue = cookieName;
				}
				cookies[cookieName] = cookieValue;
			}
		}
		return cookies;
	}, remove:function (k, options) {
		options = options || {};
		options.expires = -1;
		this.set(k, "", options);
	}};
})(AD2);
(function (a) {
	var dom = a.DomUtil, $time = Date.now || function () {
		return new Date().getTime();
	}, default_config = {duration:1, transition:function (p) {
		return p;
	}, callback:function () {
	}};
	var compute = function (from, to, delta) {
		return (to - from) * delta + from;
	}, buildFrom = function (el, from, to) {
		a.each(to, function (v, k) {
			if (from[k] == null) {
				from[k] = parseInt(dom.getStyle(el, k), 10);
			} else {
				dom.setStyle(el, k, from[k]);
			}
		});
	};
	a.Anim = a.Class.create({init:function (el, config) {
		this.el = dom.get(el);
		this.config = a.mixif(config, default_config);
		this.chains = [];
	}, morph:function (o) {
		if (this.playing) {
			this.chains.push(o);
		} else {
			this._morph(o);
			this.playing = true;
		}
		return this;
	}, _morph:function (o) {
		var from = o.from || {}, to = o.to, config = o.config || {};
		a.mixif(config, this.config);
		var el = this.el, duration = config.duration * 1000, transition = config.transition, startTime = $time(), me = this;
		buildFrom(el, from, to);
		var trans = function (delta) {
			a.each(to, function (value, property) {
				dom.setStyle(el, property, compute(from[property], value, delta));
			});
		};
		var timer = setInterval(function () {
			var time = $time();
			if (time < startTime + duration) {
				trans(transition((time - startTime) / duration));
			} else {
				trans(1);
				clearInterval(timer);
				me._chain();
			}
		}, 20);
	}, _chain:function () {
		if (this.chains.length) {
			this._morph(this.chains.shift());
		} else {
			this.playing = false;
			this.config.callback();
		}
	}});
})(AD2);
var mutex_lock, mutex_unlock;
(function () {
	var locked = false;
	mutex_lock = function () {
		if (locked) {
			return -1;
		} else {
			locked = true;
			return 0;
		}
	};
	mutex_unlock = function () {
		locked = false;
		return 0;
	};
})();
(function (a) {
	var each = a.each, Class = a.Class, dom = a.DomUtil, ua = dom.ua, buildHTML = dom.buildHTML, dic_area_display = {}, cookie = a.Cookie.get(), display_index = parseInt(cookie["ad_play_index"]) || Math.floor(Math.random() * 100), FLASH_VAR_LINK = "adlink";
	a.Cookie.set("ad_play_index", display_index + 1, {expires:1});
	var ping = function (url) {
		(new Image()).src = url;
	}, displayInOrder = function (area_config) {
		return function () {
			if (arguments.length == 0) {
				return;
			}
			var creativity_config = arguments[display_index % arguments.length];
			dic_area_display[area_config.id] = dm.create(creativity_config["display"], {area_config:area_config, creativity_config:creativity_config});
		};
	};
	var renderImage = function (config, el) {
		var styles = {display:"block", cursor:"pointer", width:config.width + "px", height:config.height + "px"};
		var url = config.resource_url;
		if (getExtension(url) == "png" && ua.ie != 0 && ua.ie < 7) {
			styles["filter"] = a.format("progid:DXImageTransform.Microsoft.AlphaImageLoader(src='{uri}')", url);
		} else {
			styles["background-image"] = a.format("url({uri})", url);
		}
		el.innerHTML = buildHTML(styles);
		el.firstChild.onclick = function () {
			window.open(config.link_to);
		};
	};
	var renderFlash = function (config, el) {
		var params = {quality:"high", allowscriptaccess:"always", wmode:"opaque", swliveconnect:true};
		if (config.params) {
			a.mix(params, config.params);
		}
		var flashvars = config.flashvars || {};
		if (config.link_to) {
			flashvars[FLASH_VAR_LINK] = config.link_to;
		}
		params.flashvars = a.serializeQuery(flashvars);
		var attrs = {};
		if (ua.ie) {
			attrs.classid = "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000";
			params.movie = config.resource_url;
		} else {
			params.type = "application/x-shockwave-flash";
			attrs.data = config.resource_url;
		}
		el.innerHTML = buildHTML({width:config.width + "px", height:config.height + "px"}, attrs, "object", buildParams(params));
	};
	var param_template = "<param name=\"{name}\" value=\"{value}\"></param>";
	var buildParams = function (o) {
		return a.map(o, function (v, k) {
			return a.format(param_template, {name:k, value:v});
		}).join("");
	};
	var getExtension = function (uri) {
		var query_string_index = uri.indexOf("?");
		return uri.substring(uri.lastIndexOf(".") + 1, query_string_index == -1 ? uri.length : query_string_index);
	};
	a.DisplayBase = Class.create({init:function (config) {
		a.mix(this, config);
	}, getFodder:function (origin) {
		var fodder = this["creativity_config"]["fodder"];
		if (!origin && fodder.length == 1) {
			return fodder[0];
		}
		return fodder;
	}, getDisplayConfig:function () {
		return this["creativity_config"]["display_config"];
	}, appendToPing:function () {
		var creativity_config = this.creativity_config;
		a.ping.append({loc:this.area_config.id, cid:creativity_config.cid, oid:creativity_config.oid});
		if (creativity_config["monitor_url"]) {
			ping(creativity_config["monitor_url"]);
		}
	}, render:function () {
		this.preRender();
		this.doRender();
	}, preRender:function () {
	}, doRender:function () {
	}});
	a.PingDisplayBase = Class.create({preRender:function () {
		this.appendToPing();
	}}, a.DisplayBase);
	a.DisplayHelper = {render:function (config, el, set_size) {
		if (set_size) {
			dom.setStyle(el, {width:config.width, height:config.height});
		}
		if (config.type == "image") {
			renderImage(config, el);
		} else {
			renderFlash(config, el);
			if (config.cover) {
				if (dom.getStyle(el, "position") == "static") {
					el.style.position = "relative";
				}
				var cover = document.createElement("div");
				cover.className = "absolute";
				dom.setStyle(cover, {position:"absolute", width:config.width + "px", height:config.height + "px", left:"0px", top:"0px", cursor:"pointer", "background-color":"#fff", filter:"alpha(opacity=0)", opacity:0});
				cover.onclick = function () {
					window.open(config.link_to);
				};
				el.appendChild(cover);
			}
		}
	}};
	(function () {
		var dic_display_type_klass = {};
		a.DisplayManager = {create:function (ctor, config) {
			if (typeof ctor == "string") {
				ctor = dic_display_type_klass[ctor];
			}
			if (ctor) {
				return new ctor(config);
			}
		}, reg:function (type, klass) {
			dic_display_type_klass[type] = klass;
		}};
	})();
	var dm = a.DisplayManager;
	a.area = displayInOrder;
	a.render = (function () {
		var index = 0, MAX = 5, rendered = {};
		var renderDefault = function (area_id) {
			var el = dom.get(area_id);
			if (!el || dom.getStyle(el, "display") == "none") {
				return;
			}
			setTimeout(function () {
				(dm.create("default", {area_config:{id:area_id}, creativity_config:{fodder:[{type:"flash", resource_url:a.format("http://adsfile.qq.com/web/default{i}.swf", (index++ % MAX) + 1), cover:false, width:el.clientWidth, height:el.clientHeight}]}})).render();
			});
		};
		return function (area_id) {
			if (rendered[area_id]) {
				return;
			}
			rendered[area_id] = true;
			var display = dic_area_display[area_id];
			if (display) {
				display.render();
			} else {
				renderDefault(area_id);
			}
		};
	})();
	a.ping = (function () {
		var url = "http://adping.qq.com/p.jpg?oid={oid}&cid={cid}&loc={loc}", query_strings = ["oid", "cid", "loc"], buffer = {}, clearBuffer = function () {
			each(query_strings, function (k) {
				buffer[k] = [];
			});
		};
		clearBuffer();
		return {touch:ping, append:function (data) {
			each(buffer, function (v, k) {
				v.push(data[k]);
			});
			return this;
		}, flush:function () {
			ping(a.format(url, buffer));
			clearBuffer();
			return this;
		}};
	})();
})(AD2);
(function (a) {
	var each = a.each, map = a.map, dom = a.DomUtil, $ = dom.get, evt = a.DomEventUtil, close_button_height = 13, close_button_url = "http://adsfile.qq.com/web/db_close.gif", close_button_html = "<div style=\"width:{width}px;height:{height}px;background-color:#eee;\"><img src=\"{close_button_url}\" style=\"border:none;float:right;cursor:pointer;width:13px;\"></img></div>", render = a.DisplayHelper.render, doNothing = function () {
	}, getFlashInvoker = function (container) {
		var o = container.getElementsByTagName("object");
		if (o.length) {
			var flash = o[0];
			return function (method) {
				try {
					flash[method]();
				}
				catch (e) {
				}
			};
		} else {
			return doNothing;
		}
	}, getReg = function (superclass) {
		var _reg = function (o, type) {
			if (typeof o == "function") {
				o = o();
			}
			a.DisplayManager.reg(type, a.Class.create(o, superclass));
		};
		return function (type, o) {
			if (arguments.length == 1) {
				each(type, _reg);
			} else {
				_reg(o, type);
			}
		};
	}, regPing = getReg(a.PingDisplayBase), regNoPing = getReg(a.DisplayBase), observeWindow = function (observer, buffer, run_it) {
		if (buffer) {
			observer = a.buffer(observer, buffer);
		}
		evt.on(window, "scroll", observer);
		evt.on(window, "resize", observer);
		if (run_it) {
			observer();
		}
	}, createAbsoluteElement = function (zIndex) {
		var el = document.createElement("div");
		el.style.position = "absolute";
		el.className = "absolute";
		if (zIndex) {
			el.style.zIndex = zIndex;
		}
		document.body.insertBefore(el, document.body.firstChild);
		return el;
	}, enter_mutex = function (fn, delay) {
		setTimeout(function () {
			if (mutex_lock() == 0) {
				fn();
			} else {
				setTimeout(arguments.callee, 500);
			}
		}, (delay || 0) * 1000);
	};
	regNoPing({"default":{doRender:function () {
		render(this.getFodder(), $(this.area_config.id));
	}}, "popup":{doRender:function () {
		var c = this["creativity_config"], display_config = c.display_config, area_id = this.area_config.id, fodder = this.getFodder();
		if (display_config.focus_back && /tencenttraveler|myie|maxthon|opera/i.test(navigator.userAgent)) {
			return;
		}
		setTimeout(function () {
			var popup_window = window.open("http://adsfile.qq.com/web/a.html?" + a.serializeQuery(a.mix({loc:area_id, oid:c.oid, cid:c.cid}, fodder)), "_blank", a.getObjectToStringFn("=", ",", false, false)({menubar:"no", left:0, top:0, width:fodder.width, height:fodder.height}));
			if (popup_window && display_config.focus_back) {
				popup_window.blur();
				window.focus();
			}
		}, display_config.delay * 1000);
	}}});
	regPing({"banner":{doRender:function () {
		render(this.getFodder(), $(this.area_config.id));
	}}, "float_fullscreen":{doRender:function () {
		var el = dom.get(this.area_config.id), fodder = this.getFodder(), display_config = this.getDisplayConfig(), closed = false;
		var close = function () {
			if (!closed) {
				dom.hide(el);
				mutex_unlock();
				closed = true;
			}
		};
		enter_mutex(function () {
			var _el = document.createElement("div");
			render(fodder, _el, true);
			var close_button_panel = dom.createElement(a.format(close_button_html, {width:fodder.width, height:close_button_height, close_button_url:close_button_url}));
			evt.on(close_button_panel.firstChild, "click", close);
			el.appendChild(close_button_panel);
			el.appendChild(_el);
			dom.show(el);
			setTimeout(close, display_config.duration * 1000);
		}, display_config.delay);
	}}, "raw_fullscreen":{doRender:function () {
		var container = dom.get(this.area_config.id), fodder = this.getFodder(), display_config = this.getDisplayConfig();
		enter_mutex(function () {
			render(fodder, container);
			dom.show(container);
			setTimeout(function () {
				dom.hide(container);
				mutex_unlock();
			}, display_config.duration * 1000);
		}, display_config.delay);
	}}, "float":function () {
		var delegate = function (fn, arg2) {
			return function (arg1) {
				return fn(arg1, arg2);
			};
		}, leftCalculator = {left:function (el_width, margin) {
			return dom.getDocumentScrollLeft() + margin;
		}, right:function (el_width, margin) {
			return dom.getViewportWidth() + dom.getDocumentScrollLeft() - el_width - margin;
		}}, topCalculator = {top:function (el_height, margin) {
			return dom.getDocumentScrollTop() + margin;
		}, middle:function (el_height, margin) {
			return (dom.getViewportHeight() - el_height) / 2 + dom.getDocumentScrollTop();
		}, bottom:function (el_height, margin) {
			return dom.getViewportHeight() + dom.getDocumentScrollTop() - el_height - margin;
		}}, renderFloat = function (edges, display_config, fodder, close) {
			var fodder_height = fodder.height, fodder_width = fodder.width, direction = edges[0], position = edges[1], cl = delegate(leftCalculator[direction], display_config.margin_h), ct = delegate(topCalculator[position], display_config.margin_v), el = createAbsoluteElement(100), page_content_width = display_config.page_content_width, getPosition = function () {
				return {left:cl(fodder_width), top:ct(fodder_height)};
			}, anim = new a.Anim(el, {duration:1, transition:function (p) {
				return Math.pow(p, 0.4);
			}});
			if (display_config.close_button != "none") {
				fodder_height += close_button_height;
				var _el = document.createElement("div");
				render(fodder, _el, true);
				var close_button_panel = dom.createElement(a.format(close_button_html, {width:fodder_width, height:close_button_height, close_button_url:close_button_url}));
				evt.on(close_button_panel.firstChild, "click", close);
				if (display_config.close_button == "bottom") {
					el.appendChild(_el);
					el.appendChild(close_button_panel);
				} else {
					if (display_config.close_button == "top") {
						el.appendChild(close_button_panel);
						el.appendChild(_el);
					}
				}
			} else {
				render(fodder, el);
			}
			var widthIsValid = function () {
				if ((dom.getViewportWidth() - page_content_width) / 2 < fodder_width + display_config.margin_h) {
					dom.hide(el);
					return false;
				}
				dom.show(el);
				return true;
			};
			observeWindow(function () {
				if (!display_config.follow_viewport) {
					return;
				}
				if (!widthIsValid()) {
					return;
				}
				var dp = getPosition();
				sxy = dom.getXY(el), sx = sxy[0], sy = sxy[1], dy = dp.top, from = {}, config = {};
				if (position == "bottom") {
					if (sy > dy + fodder_height) {
						from.top = dom.getDocumentScrollTop() + dom.getViewportHeight();
						config.duration = 0.3;
					}
				} else {
					if (position == "top") {
						if (sy < dy - fodder_height) {
							from.top = dom.getDocumentScrollTop() - fodder_height;
							config.duration = 0.3;
						}
					}
				}
				anim.morph({from:from, to:dp, config:config});
			}, 300, false);
			dom.setStyle(el, getPosition());
			widthIsValid();
			return el;
		};
		return {doRender:function () {
			var display_config = this.getDisplayConfig(), edges = display_config.edges.split(","), fodder = this.getFodder(true);
			delete display_config.edges;
			var close = function () {
				each(els, dom.hide);
				display_config.follow_viewport = false;
			};
			var els = map(edges, function (edge, i) {
				return renderFloat(edge.split("-"), display_config, fodder[i], close);
			});
		}};
	}, "couplet":function () {
		var top_edge = 17, left_edge = 12, right_edge = 12, page_content_width = 766, close_button_size = 13, close_button_src = "http://adsfile.qq.com/web/db_close.gif";
		return {doRender:function () {
			var fodders = this.getFodder(), closed = false;
			var close = function () {
				display(false);
				closed = true;
			};
			var els = map(fodders, function (fodder) {
				var el = createAbsoluteElement(100);
				dom.setStyle(el, {top:top_edge, width:fodder.width, height:fodder.height + close_button_size});
				render(fodder, el, false);
				var close_button_panel = dom.createElement(a.format(close_button_html, {width:fodder.width, height:close_button_height, close_button_url:close_button_url}));
				evt.on(close_button_panel.firstChild, "click", close);
				el.appendChild(close_button_panel);
				return el;
			});
			dom.setStyle(els[0], {left:left_edge});
			dom.setStyle(els[1], {right:right_edge});
			var display = function (visible) {
				each(els, function (el) {
					dom.setStyle(el, {display:visible ? "block" : "none"});
				});
			};
			observeWindow(function () {
				if (!closed) {
					display(dom.getViewportWidth() - left_edge - fodders[0].width - fodders[1].width - right_edge - page_content_width > 0);
				}
			}, 100, true);
		}};
	}, "fullscreen":function () {
		var replay_button_width = 86, replay_button_height = 19, replay_button_offsetY = -8, replay_button_config = {position:"absolute", width:replay_button_width + "px", height:replay_button_height + "px", display:"none", "background-image":"url(/images/xtp.gif)", cursor:"pointer"}, close_button_config = {position:"absolute", width:"19px", height:"19px", right:"7px", top:"7px", "background-image":"url(/images/f_close.gif)", cursor:"pointer"}, back_proxy_config = {"z-index":999, left:"-9999px", position:"absolute", border:"2px solid #ccc", opacity:0.5, filter:"alpha(opacity=50)"};
		return {doRender:function () {
			var container = dom.get(this.area_config.id), fodder = this.getFodder(), display_config = this.getDisplayConfig(), show_duration = display_config.show_duration, hide_duration = display_config.hide_duration, close_button = dom.createElement(close_button_config, {"class":"absolute"}), replay_button = dom.createElement(replay_button_config, {"class":"absolute"}), close_timer;
			dom.setStyle(container, {overflow:"hidden", height:0, position:"relative", display:"block"});
			var fodder_width = fodder.width, fodder_height = fodder.height, back_proxy = dom.createElement(back_proxy_config);
			render(fodder, container);
			var invokeFlash = getFlashInvoker(container);
			var morphProxy = (function () {
				var anim_proxy = new a.Anim(back_proxy, {callback:function () {
					dom.setStyle(back_proxy, {left:-9999});
				}});
				return function (show) {
					dom.setStyle(replay_button, {display:""});
					var f_xy = dom.getXY(container), t_xy = dom.getXY(replay_button);
					dom.setStyle(replay_button, {display:"none"});
					var arr = [{left:f_xy[0], top:f_xy[1], width:fodder_width - 4, height:fodder_height - 4}, {left:t_xy[0], top:t_xy[1], width:replay_button_width - 4, height:replay_button_height - 4}];
					if (!show) {
						anim_proxy.morph({from:arr[0], to:arr[1], config:{duration:hide_duration}});
					} else {
						anim_proxy.morph({from:arr[1], to:arr[0], config:{duration:show_duration}});
					}
				};
			})();
			var hide = (function () {
				var anim_hide = new a.Anim(container, {duration:hide_duration, callback:function () {
					dom.setStyle(replay_button, {display:"block"});
					mutex_unlock();
				}});
				return function () {
					clearTimeout(close_timer);
					morphProxy(false);
					invokeFlash("StopPlay");
					anim_hide.morph({to:{height:0}});
				};
			})();
			var show = (function () {
				var anim_show = new a.Anim(container, {duration:show_duration, callback:function () {
					invokeFlash("Play");
					close_timer = setTimeout(hide, display_config.duration * 1000);
				}});
				return function () {
					clearTimeout(close_timer);
					dom.setStyle(replay_button, {display:"none"});
					morphProxy(true);
					invokeFlash("Rewind");
					anim_show.morph({to:{height:fodder_height}});
				};
			})();
			evt.on(close_button, "click", hide);
			evt.on(replay_button, "click", function () {
				_show(false);
			});
			container.appendChild(close_button);
			document.body.insertBefore(replay_button, document.body.firstChild);
			document.body.insertBefore(back_proxy, document.body.firstChild);
			observeWindow(function () {
				var xy = dom.getXY(container);
				dom.setStyle(replay_button, {left:xy[0] + fodder_width - 3, top:xy[1] + replay_button_offsetY});
			}, 0, true);
			var _show = function (retry) {
				if (retry) {
					enter_mutex(show, 0);
				} else {
					if (mutex_lock() == 0) {
						show();
					}
				}
			};
			setTimeout(function () {
				_show(true);
			}, display_config.delay * 1000);
		}};
	}});
})(AD2);
(function (a) {
	var convertor = {"string":function (value) {
		return value;
	}, "bool":function (value) {
		if (value.toLowerCase() == "false") {
			return false;
		}
		return true;
	}, "number":function (value) {
		return value - 0;
	}};
	a.getQueryData = function (mapping) {
		var c = {}, idx = location.href.indexOf("?");
		if (idx != -1) {
			a.each(location.href.substring(idx + 1).split("&"), function (pair) {
				pair = pair.split("=");
				if (pair[1] != null) {
					c[pair[0]] = decodeURIComponent(pair[1]);
				}
			});
		}
		if (mapping) {
			a.each(mapping, function (type, key) {
				if (c[key] != null) {
					c[key] = convertor[type](c[key]);
				}
			});
		}
		return c;
	};
})(AD2);


