if (!window.adecn) {
	var adecn = function() {
		var adecn = new Object();
		var adSpots = {};
		adecn.adSpots = adSpots;

		function zeropad(s, len) {
			var s = s.toString();
			while (s.length < len) s = '0' + s;
			return s;
		}

		function AdSpot() {
			var adspot = new Object();
			adspot.count = 0;
			adspot.interval = 0;

			adspot.rotateInterval = function(interval) {
				adspot.interval = interval;
				adspot.rotate();
			};
			adspot.rotate = function() {
				adspot.newAd();
				setTimeout(adspot.rotate, adspot.interval * 1000);
			};
			adspot.newAd = function(srcUrl) {
				if (!srcUrl) {
					srcUrl = adspot.generateUrl();
				}
				adspot.count += 1;
				adspot.setUrl(srcUrl);
			};
			adspot.generateUrl = function() {
				var now = new Date();
				var url = 'http://ad2.adecn.com/here.spot?';
				url += 'v=' + adspot.version;
				url += ';time=' + now.getDay() + zeropad(now.getHours(), 2);
				if (adspot.method) url += ';method=' + adspot.method;
				if (adspot.keywords) url += ';kw=' + escape(adspot.keywords);
				if (adspot.track) url += ';track=' + escape(escape(adspot.track));
				url += ';spotId=' + adspot.id;
				url += ';c=' + adspot.index;
				if (adspot.count) {
					url += '-';
					if (adspot.count < 20) url += adspot.count;
					else url += '20%2B';
				}
				url += ';ms=' + now.valueOf();
				if (adspot.idid) url += ';idid=' + escape(adspot.idid);
				if (adspot.ref) url += ';ref=' + escape(adspot.ref);
				return url;
			};
			adspot.ok = function() {
				var cookie = getCookie('scone') || '';
				return cookie.indexOf('<s' + adspot.id + ',0>') < 0;
			}
			adspot.writeAd = function() {
				if (!adspot.ok()) return;
				var frameName = 'EC' + adspot.id + '-' + adspot.index;
				var frame = '<iframe id="'+frameName+'" width="' + adspot.width + '" height="' + adspot.height + '"';
				frame += ' scrolling="no" frameborder="0" framespacing="0" marginheight="0"';
				frame += ' marginwidth="0" border="0" hspace="0" vspace="0"';
				frame += ' align="middle" src="' + adspot.generateUrl() + '">';
				frame += '</iframe>';
				document.write(frame);
				adspot.setUrl = function (srcUrl) {
					document.getElementById(frameName).src = srcUrl;
				}
			}
			adspot.popAd = function(type) {
				if (!adspot.ok()) return;
				try{var w = open(adspot.generateUrl(), '', adspot.popupfeatures);}catch(e){}
				if (!w) return;
				adspot.setUrl = function (srcUrl) {
					w.location.href = srcUrl;
				}
				w.blur();
				focus();
			}
			adspot.scriptAd = function() {
				adspot.method = 'scriptAd';
				if (!adspot.ok()) return;
				var spanName = 'EC' + adspot.id + '-' + adspot.index;
				document.write('\x3cscript src="' + adspot.generateUrl() + '"\x3e\x3c/script\x3e');
				adspot.setUrl = function(srcUrl) {
					alert('AdECN: adspot.setUrl not supported for scriptAd');
				}
			}
			return adspot;
		}

		adecn.getAdSpot = function(key, index) {
			var adspots = adSpots[key];
			if (!adspots) {
				adspots = [];
				adSpots[key] = adspots;
			}
			if (index != undefined) return adspots[index];
			var adspot = AdSpot();
			adspot.id = key;
			adspot.index = adspots.length;
			adspot.ref = document.referrer;
			adspots[adspots.length] = adspot;
			return adspot;
		};

		function getArgs(url) {
			var args = {}, i = url.indexOf('?') + 1;
			if (i) {
				var kv, argkv = url.substr(i).split(';');
				for (i=0;i<argkv.length;i++) {
					kv = argkv[i].split('=');
					args[kv[0]] = unescape(kv[1]);
				}
			}
			return args;
		}
		adecn.getArgs = getArgs;

		function exec(args) {
			if (!args) {
				var es = document.getElementsByTagName('script');
				var e;
				for (var i=es.length-1; i>=0; i--) {
					if (es[i].src.indexOf('script.js') >= 0) {
						e = es[i];
						break;
					}
				}
				args = e?e.src:'';
			}
			args = getArgs(args);
			if (!args.spotId) return;
			var spot = _AD.getAdSpot(parseInt(args.spotId));
			spot.version = args.v;
			spot.siteId = parseInt(args.siteId);
			spot.width = parseInt(args.width);
			spot.height = parseInt(args.height);
			spot.track = args.track;
			spot.ref = args.ref;
			if (args.freqLimit) {
				var a = args.freqLimit.split(',');
				freqLimit(a[0], parseInt(a[1]), parseInt(a[2]));
			}
			if (args.method == 'popAd') {
				spot.popupfeatures = "width="+spot.width+",height="+spot.height+",top="+((screen.height-spot.height)/2)+",left="+((screen.width-spot.width)/2);
				spot.popAd();
			}
			else if (args.method == 'scriptAd') spot.scriptAd();
			else spot.writeAd();
		}
		adecn.exec = exec;

		function Tokenizer(cookie) {
			var tokenizer = new Object();
			tokenizer.pos = 0;
			tokenizer.next = function() {
				var s = null;
				var lastpos = tokenizer.pos;
				if (tokenizer.pos >= 0) {
					var level = 0;
					do {
						switch(tokenizer.str.charAt(tokenizer.pos)) {
						case '<': level++; break;
						case '>': level--; break;
						}
						tokenizer.pos++;
					} while (level > 0 && tokenizer.pos < tokenizer.str.length);
					if (level == 0) s = tokenizer.str.substring(lastpos, tokenizer.pos);
				}
				return s;
			};
			tokenizer.str = cookie;
			return tokenizer;
		}
		adecn.Tokenizer = Tokenizer;

		function setCookie(name, value, expires, path, domain, secure) {
			var curCookie = name + '=' + value;
			if (expires) curCookie += '; expires=' + new Date(expires).toGMTString();
			if (path) curCookie += '; path=' + path;
			if (domain) curCookie += '; domain=' + domain;
			if (secure) curCookie += '; secure';
			document.cookie = curCookie;
		}
		adecn.setCookie = setCookie;

		function getCookie(name) {
			var dc = document.cookie;
			var prefix = '; ' + name + '=';
			var begin = dc.indexOf(prefix);
			if (begin == -1) {
				prefix = prefix.substr(2);
				begin = dc.indexOf(prefix);
				if (begin != 0) return null;
			}
			begin += prefix.length;
			var end = document.cookie.indexOf(';', begin);
			if (end == -1) return dc.substr(begin);
			return dc.substring(begin, end);
		}
		adecn.getCookie = getCookie;

		function saveScone(cookie) {
			var date = new Date().valueOf() + 2592000000;
			var d = document.domain.split('.');
			d = d.slice(d.length-2).join('.');
			setCookie('scone', cookie, date, '/', d);
		}

		function expireScones() {
			var cookie = getCookie('scone') || '';
			var s = '';
			var now = new Date().valueOf();
			var tokenizer = Tokenizer(cookie);
			var exp = tokenizer.next();
			var m;
			while (exp) {
				m = exp.match('^<e,([0-9]+)');
				if (m) {
					if (parseInt(m[1])*60000 > now) s += exp;
				}
				else s += exp;
				exp = tokenizer.next();
			};
			saveScone(s);
		}

		function getScone(key) {
			var scone = null;
			var cookie = getCookie('scone') || '';
			var tokenizer = Tokenizer(cookie);
			var s = tokenizer.next();
			var m = null;
			while (s) {
				m = s.match('<'+key+',([,0-9]+)>');
				if (m) {
					scone = new Object();
					scone.key = key;
					scone.value = m[1];
					if (scone.value) scone.value = scone.value.split(',');
					m = s.match('^<e,([0-9]+)');
					if (m) scone.exp = parseInt(m[1]) * 60;
					else scone.exp = 0;
					break;
				}
				s = tokenizer.next();
			}
			return scone;
		};
		adecn.getScone = getScone;

		function setScone(scone) {
			deleteScone(scone.key);
			var v = '<'+scone.key+','+scone.value.toString()+'>';
			var cookie = getCookie('scone') || '';
			var s = '';
			var exp = parseInt(scone.exp / 60);
			if (exp) {
				var prefix = '<e,'+exp+',';
				var start = cookie.indexOf(prefix);
				try {
					if (start >= 0) {
						var token = Tokenizer(cookie.substr(start)).next();
						if (token) {
							s += token.substring(0, prefix.length);
							s += v;
							s += token.substr(prefix.length);
							s += cookie.substring(0, start);
							s += cookie.substr(start + token.length);
						}
						else throw 'failed to group exp';
						cookie = cookie.substring(0, start+prefix.length)+s;
					}
					else throw 'expire not found';
				}
				catch (e) { s = prefix + v + '>' + cookie; }
			}
			else s = v + cookie;
			saveScone(s);
		};
		adecn.setScone = setScone;

		function deleteScone(key) {
			var found = '';
			var cookie = getCookie('scone') || '';
			var s = '';
			var token;
			var start = 0;
			var prefix = '<'+key;
			var pos = cookie.indexOf(prefix);
			while (pos >= 0 && pos < cookie.length) {
				s += cookie.substring(start, pos);
				token = Tokenizer(cookie.substr(pos)).next();
				if (token) {
					found += token;
					start += pos + token.length;
					pos = cookie.indexOf(prefix, start);
				}
				else break;
			}
			if (pos == -1) s += cookie.substr(start);
			if (s != cookie) saveScone(s);
			return found;
		};
		adecn.deleteScone = deleteScone;

		function freqLimit(key, n, period) {
			expireScones();
			var scone = getScone(key);
			if (scone) {
				if (scone.value > 0) {
					scone.value--;
					setScone(scone);
				}
			}
			else {
				scone = new Object();
				scone.key = key;
				scone.value = n;
				scone.exp = new Date().valueOf()/1000 + period*3600;
				setScone(scone);
			}
		}
		adecn.freqLimit = freqLimit;

		return adecn;
	}();
	var _AD = adecn;
}
_AD.exec();

