zvents_save_jquery = {};

if (typeof jQuery != 'undefined') zvents_save_jquery.jQuery = jQuery;
if (typeof $ != 'undefined') zvents_save_jquery.$ = $;
/*
 * jQuery 1.2.6 - New Wave Javascript
 *
 * Copyright (c) 2008 John Resig (jquery.com)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * $Date: 2008-05-24 14:22:17 -0400 (Sat, 24 May 2008) $
 * $Rev: 5685 $
 */
(function(){var _jQuery=window.jQuery,_$=window.$;var jQuery=window.jQuery=window.$=function(selector,context){return new jQuery.fn.init(selector,context);};var quickExpr=/^[^<]*(<(.|\s)+>)[^>]*$|^#(\w+)$/,isSimple=/^.[^:#\[\.]*$/,undefined;jQuery.fn=jQuery.prototype={init:function(selector,context){selector=selector||document;if(selector.nodeType){this[0]=selector;this.length=1;return this;}if(typeof selector=="string"){var match=quickExpr.exec(selector);if(match&&(match[1]||!context)){if(match[1])selector=jQuery.clean([match[1]],context);else{var elem=document.getElementById(match[3]);if(elem){if(elem.id!=match[3])return jQuery().find(selector);return jQuery(elem);}selector=[];}}else
return jQuery(context).find(selector);}else if(jQuery.isFunction(selector))return jQuery(document)[jQuery.fn.ready?"ready":"load"](selector);return this.setArray(jQuery.makeArray(selector));},jquery:"1.2.6",size:function(){return this.length;},length:0,get:function(num){return num==undefined?jQuery.makeArray(this):this[num];},pushStack:function(elems){var ret=jQuery(elems);ret.prevObject=this;return ret;},setArray:function(elems){this.length=0;Array.prototype.push.apply(this,elems);return this;},each:function(callback,args){return jQuery.each(this,callback,args);},index:function(elem){var ret=-1;return jQuery.inArray(elem&&elem.jquery?elem[0]:elem,this);},attr:function(name,value,type){var options=name;if(name.constructor==String)if(value===undefined)return this[0]&&jQuery[type||"attr"](this[0],name);else{options={};options[name]=value;}return this.each(function(i){for(name in options)jQuery.attr(type?this.style:this,name,jQuery.prop(this,options[name],type,i,name));});},css:function(key,value){if((key=='width'||key=='height')&&parseFloat(value)<0)value=undefined;return this.attr(key,value,"curCSS");},text:function(text){if(typeof text!="object"&&text!=null)return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(text));var ret="";jQuery.each(text||this,function(){jQuery.each(this.childNodes,function(){if(this.nodeType!=8)ret+=this.nodeType!=1?this.nodeValue:jQuery.fn.text([this]);});});return ret;},wrapAll:function(html){if(this[0])jQuery(html,this[0].ownerDocument).clone().insertBefore(this[0]).map(function(){var elem=this;while(elem.firstChild)elem=elem.firstChild;return elem;}).append(this);return this;},wrapInner:function(html){return this.each(function(){jQuery(this).contents().wrapAll(html);});},wrap:function(html){return this.each(function(){jQuery(this).wrapAll(html);});},append:function(){return this.domManip(arguments,true,false,function(elem){if(this.nodeType==1)this.appendChild(elem);});},prepend:function(){return this.domManip(arguments,true,true,function(elem){if(this.nodeType==1)this.insertBefore(elem,this.firstChild);});},before:function(){return this.domManip(arguments,false,false,function(elem){this.parentNode.insertBefore(elem,this);});},after:function(){return this.domManip(arguments,false,true,function(elem){this.parentNode.insertBefore(elem,this.nextSibling);});},end:function(){return this.prevObject||jQuery([]);},find:function(selector){var elems=jQuery.map(this,function(elem){return jQuery.find(selector,elem);});return this.pushStack(/[^+>] [^+>]/.test(selector)||selector.indexOf("..")>-1?jQuery.unique(elems):elems);},clone:function(events){var ret=this.map(function(){if(jQuery.browser.msie&&!jQuery.isXMLDoc(this)){var clone=this.cloneNode(true),container=document.createElement("div");container.appendChild(clone);return jQuery.clean([container.innerHTML])[0];}else
return this.cloneNode(true);});var clone=ret.find("*").andSelf().each(function(){if(this[expando]!=undefined)this[expando]=null;});if(events===true)this.find("*").andSelf().each(function(i){if(this.nodeType==3)return;var events=jQuery.data(this,"events");for(var type in events)for(var handler in events[type])jQuery.event.add(clone[i],type,events[type][handler],events[type][handler].data);});return ret;},filter:function(selector){return this.pushStack(jQuery.isFunction(selector)&&jQuery.grep(this,function(elem,i){return selector.call(elem,i);})||jQuery.multiFilter(selector,this));},not:function(selector){if(selector.constructor==String)if(isSimple.test(selector))return this.pushStack(jQuery.multiFilter(selector,this,true));else
selector=jQuery.multiFilter(selector,this);var isArrayLike=selector.length&&selector[selector.length-1]!==undefined&&!selector.nodeType;return this.filter(function(){return isArrayLike?jQuery.inArray(this,selector)<0:this!=selector;});},add:function(selector){return this.pushStack(jQuery.unique(jQuery.merge(this.get(),typeof selector=='string'?jQuery(selector):jQuery.makeArray(selector))));},is:function(selector){return!!selector&&jQuery.multiFilter(selector,this).length>0;},hasClass:function(selector){return this.is("."+selector);},val:function(value){if(value==undefined){if(this.length){var elem=this[0];if(jQuery.nodeName(elem,"select")){var index=elem.selectedIndex,values=[],options=elem.options,one=elem.type=="select-one";if(index<0)return null;for(var i=one?index:0,max=one?index+1:options.length;i<max;i++){var option=options[i];if(option.selected){value=jQuery.browser.msie&&!option.attributes.value.specified?option.text:option.value;if(one)return value;values.push(value);}}return values;}else
return(this[0].value||"").replace(/\r/g,"");}return undefined;}if(value.constructor==Number)value+='';return this.each(function(){if(this.nodeType!=1)return;if(value.constructor==Array&&/radio|checkbox/.test(this.type))this.checked=(jQuery.inArray(this.value,value)>=0||jQuery.inArray(this.name,value)>=0);else if(jQuery.nodeName(this,"select")){var values=jQuery.makeArray(value);jQuery("option",this).each(function(){this.selected=(jQuery.inArray(this.value,values)>=0||jQuery.inArray(this.text,values)>=0);});if(!values.length)this.selectedIndex=-1;}else
this.value=value;});},html:function(value){return value==undefined?(this[0]?this[0].innerHTML:null):this.empty().append(value);},replaceWith:function(value){return this.after(value).remove();},eq:function(i){return this.slice(i,i+1);},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments));},map:function(callback){return this.pushStack(jQuery.map(this,function(elem,i){return callback.call(elem,i,elem);}));},andSelf:function(){return this.add(this.prevObject);},data:function(key,value){var parts=key.split(".");parts[1]=parts[1]?"."+parts[1]:"";if(value===undefined){var data=this.triggerHandler("getData"+parts[1]+"!",[parts[0]]);if(data===undefined&&this.length)data=jQuery.data(this[0],key);return data===undefined&&parts[1]?this.data(parts[0]):data;}else
return this.trigger("setData"+parts[1]+"!",[parts[0],value]).each(function(){jQuery.data(this,key,value);});},removeData:function(key){return this.each(function(){jQuery.removeData(this,key);});},domManip:function(args,table,reverse,callback){var clone=this.length>1,elems;return this.each(function(){if(!elems){elems=jQuery.clean(args,this.ownerDocument);if(reverse)elems.reverse();}var obj=this;if(table&&jQuery.nodeName(this,"table")&&jQuery.nodeName(elems[0],"tr"))obj=this.getElementsByTagName("tbody")[0]||this.appendChild(this.ownerDocument.createElement("tbody"));var scripts=jQuery([]);jQuery.each(elems,function(){var elem=clone?jQuery(this).clone(true)[0]:this;if(jQuery.nodeName(elem,"script"))scripts=scripts.add(elem);else{if(elem.nodeType==1)scripts=scripts.add(jQuery("script",elem).remove());callback.call(obj,elem);}});scripts.each(evalScript);});}};jQuery.fn.init.prototype=jQuery.fn;function evalScript(i,elem){if(elem.src)jQuery.ajax({url:elem.src,async:false,dataType:"script"});else
jQuery.globalEval(elem.text||elem.textContent||elem.innerHTML||"");if(elem.parentNode)elem.parentNode.removeChild(elem);}function now(){return+new Date;}jQuery.extend=jQuery.fn.extend=function(){var target=arguments[0]||{},i=1,length=arguments.length,deep=false,options;if(target.constructor==Boolean){deep=target;target=arguments[1]||{};i=2;}if(typeof target!="object"&&typeof target!="function")target={};if(length==i){target=this;--i;}for(;i<length;i++)if((options=arguments[i])!=null)for(var name in options){var src=target[name],copy=options[name];if(target===copy)continue;if(deep&&copy&&typeof copy=="object"&&!copy.nodeType)target[name]=jQuery.extend(deep,src||(copy.length!=null?[]:{}),copy);else if(copy!==undefined)target[name]=copy;}return target;};var expando="jQuery"+now(),uuid=0,windowData={},exclude=/z-?index|font-?weight|opacity|zoom|line-?height/i,defaultView=document.defaultView||{};jQuery.extend({noConflict:function(deep){window.$=_$;if(deep)window.jQuery=_jQuery;return jQuery;},isFunction:function(fn){return!!fn&&typeof fn!="string"&&!fn.nodeName&&fn.constructor!=Array&&/^[\s[]?function/.test(fn+"");},isXMLDoc:function(elem){return elem.documentElement&&!elem.body||elem.tagName&&elem.ownerDocument&&!elem.ownerDocument.body;},globalEval:function(data){data=jQuery.trim(data);if(data){var head=document.getElementsByTagName("head")[0]||document.documentElement,script=document.createElement("script");script.type="text/javascript";if(jQuery.browser.msie)script.text=data;else
script.appendChild(document.createTextNode(data));head.insertBefore(script,head.firstChild);head.removeChild(script);}},nodeName:function(elem,name){return elem.nodeName&&elem.nodeName.toUpperCase()==name.toUpperCase();},cache:{},data:function(elem,name,data){elem=elem==window?windowData:elem;var id=elem[expando];if(!id)id=elem[expando]=++uuid;if(name&&!jQuery.cache[id])jQuery.cache[id]={};if(data!==undefined)jQuery.cache[id][name]=data;return name?jQuery.cache[id][name]:id;},removeData:function(elem,name){elem=elem==window?windowData:elem;var id=elem[expando];if(name){if(jQuery.cache[id]){delete jQuery.cache[id][name];name="";for(name in jQuery.cache[id])break;if(!name)jQuery.removeData(elem);}}else{try{delete elem[expando];}catch(e){if(elem.removeAttribute)elem.removeAttribute(expando);}delete jQuery.cache[id];}},each:function(object,callback,args){var name,i=0,length=object.length;if(args){if(length==undefined){for(name in object)if(callback.apply(object[name],args)===false)break;}else
for(;i<length;)if(callback.apply(object[i++],args)===false)break;}else{if(length==undefined){for(name in object)if(callback.call(object[name],name,object[name])===false)break;}else
for(var value=object[0];i<length&&callback.call(value,i,value)!==false;value=object[++i]){}}return object;},prop:function(elem,value,type,i,name){if(jQuery.isFunction(value))value=value.call(elem,i);return value&&value.constructor==Number&&type=="curCSS"&&!exclude.test(name)?value+"px":value;},className:{add:function(elem,classNames){jQuery.each((classNames||"").split(/\s+/),function(i,className){if(elem.nodeType==1&&!jQuery.className.has(elem.className,className))elem.className+=(elem.className?" ":"")+className;});},remove:function(elem,classNames){if(elem.nodeType==1)elem.className=classNames!=undefined?jQuery.grep(elem.className.split(/\s+/),function(className){return!jQuery.className.has(classNames,className);}).join(" "):"";},has:function(elem,className){return jQuery.inArray(className,(elem.className||elem).toString().split(/\s+/))>-1;}},swap:function(elem,options,callback){var old={};for(var name in options){old[name]=elem.style[name];elem.style[name]=options[name];}callback.call(elem);for(var name in options)elem.style[name]=old[name];},css:function(elem,name,force){if(name=="width"||name=="height"){var val,props={position:"absolute",visibility:"hidden",display:"block"},which=name=="width"?["Left","Right"]:["Top","Bottom"];function getWH(){val=name=="width"?elem.offsetWidth:elem.offsetHeight;var padding=0,border=0;jQuery.each(which,function(){padding+=parseFloat(jQuery.curCSS(elem,"padding"+this,true))||0;border+=parseFloat(jQuery.curCSS(elem,"border"+this+"Width",true))||0;});val-=Math.round(padding+border);}if(jQuery(elem).is(":visible"))getWH();else
jQuery.swap(elem,props,getWH);return Math.max(0,val);}return jQuery.curCSS(elem,name,force);},curCSS:function(elem,name,force){var ret,style=elem.style;function color(elem){if(!jQuery.browser.safari)return false;var ret=defaultView.getComputedStyle(elem,null);return!ret||ret.getPropertyValue("color")=="";}if(name=="opacity"&&jQuery.browser.msie){ret=jQuery.attr(style,"opacity");return ret==""?"1":ret;}if(jQuery.browser.opera&&name=="display"){var save=style.outline;style.outline="0 solid black";style.outline=save;}if(name.match(/float/i))name=styleFloat;if(!force&&style&&style[name])ret=style[name];else if(defaultView.getComputedStyle){if(name.match(/float/i))name="float";name=name.replace(/([A-Z])/g,"-$1").toLowerCase();var computedStyle=defaultView.getComputedStyle(elem,null);if(computedStyle&&!color(elem))ret=computedStyle.getPropertyValue(name);else{var swap=[],stack=[],a=elem,i=0;for(;a&&color(a);a=a.parentNode)stack.unshift(a);for(;i<stack.length;i++)if(color(stack[i])){swap[i]=stack[i].style.display;stack[i].style.display="block";}ret=name=="display"&&swap[stack.length-1]!=null?"none":(computedStyle&&computedStyle.getPropertyValue(name))||"";for(i=0;i<swap.length;i++)if(swap[i]!=null)stack[i].style.display=swap[i];}if(name=="opacity"&&ret=="")ret="1";}else if(elem.currentStyle){var camelCase=name.replace(/\-(\w)/g,function(all,letter){return letter.toUpperCase();});ret=elem.currentStyle[name]||elem.currentStyle[camelCase];if(!/^\d+(px)?$/i.test(ret)&&/^\d/.test(ret)){var left=style.left,rsLeft=elem.runtimeStyle.left;elem.runtimeStyle.left=elem.currentStyle.left;style.left=ret||0;ret=style.pixelLeft+"px";style.left=left;elem.runtimeStyle.left=rsLeft;}}return ret;},clean:function(elems,context){var ret=[];context=context||document;if(typeof context.createElement=='undefined')context=context.ownerDocument||context[0]&&context[0].ownerDocument||document;jQuery.each(elems,function(i,elem){if(!elem)return;if(elem.constructor==Number)elem+='';if(typeof elem=="string"){elem=elem.replace(/(<(\w+)[^>]*?)\/>/g,function(all,front,tag){return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?all:front+"></"+tag+">";});var tags=jQuery.trim(elem).toLowerCase(),div=context.createElement("div");var wrap=!tags.indexOf("<opt")&&[1,"<select multiple='multiple'>","</select>"]||!tags.indexOf("<leg")&&[1,"<fieldset>","</fieldset>"]||tags.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"<table>","</table>"]||!tags.indexOf("<tr")&&[2,"<table><tbody>","</tbody></table>"]||(!tags.indexOf("<td")||!tags.indexOf("<th"))&&[3,"<table><tbody><tr>","</tr></tbody></table>"]||!tags.indexOf("<col")&&[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"]||jQuery.browser.msie&&[1,"div<div>","</div>"]||[0,"",""];div.innerHTML=wrap[1]+elem+wrap[2];while(wrap[0]--)div=div.lastChild;if(jQuery.browser.msie){var tbody=!tags.indexOf("<table")&&tags.indexOf("<tbody")<0?div.firstChild&&div.firstChild.childNodes:wrap[1]=="<table>"&&tags.indexOf("<tbody")<0?div.childNodes:[];for(var j=tbody.length-1;j>=0;--j)if(jQuery.nodeName(tbody[j],"tbody")&&!tbody[j].childNodes.length)tbody[j].parentNode.removeChild(tbody[j]);if(/^\s/.test(elem))div.insertBefore(context.createTextNode(elem.match(/^\s*/)[0]),div.firstChild);}elem=jQuery.makeArray(div.childNodes);}if(elem.length===0&&(!jQuery.nodeName(elem,"form")&&!jQuery.nodeName(elem,"select")))return;if(elem[0]==undefined||jQuery.nodeName(elem,"form")||elem.options)ret.push(elem);else
ret=jQuery.merge(ret,elem);});return ret;},attr:function(elem,name,value){if(!elem||elem.nodeType==3||elem.nodeType==8)return undefined;var notxml=!jQuery.isXMLDoc(elem),set=value!==undefined,msie=jQuery.browser.msie;name=notxml&&jQuery.props[name]||name;if(elem.tagName){var special=/href|src|style/.test(name);if(name=="selected"&&jQuery.browser.safari)elem.parentNode.selectedIndex;if(name in elem&&notxml&&!special){if(set){if(name=="type"&&jQuery.nodeName(elem,"input")&&elem.parentNode)throw"type property can't be changed";elem[name]=value;}if(jQuery.nodeName(elem,"form")&&elem.getAttributeNode(name))return elem.getAttributeNode(name).nodeValue;return elem[name];}if(msie&&notxml&&name=="style")return jQuery.attr(elem.style,"cssText",value);if(set)elem.setAttribute(name,""+value);var attr=msie&&notxml&&special?elem.getAttribute(name,2):elem.getAttribute(name);return attr===null?undefined:attr;}if(msie&&name=="opacity"){if(set){elem.zoom=1;elem.filter=(elem.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(value)+''=="NaN"?"":"alpha(opacity="+value*100+")");}return elem.filter&&elem.filter.indexOf("opacity=")>=0?(parseFloat(elem.filter.match(/opacity=([^)]*)/)[1])/100)+'':"";}name=name.replace(/-([a-z])/ig,function(all,letter){return letter.toUpperCase();});if(set)elem[name]=value;return elem[name];},trim:function(text){return(text||"").replace(/^\s+|\s+$/g,"");},makeArray:function(array){var ret=[];if(array!=null){var i=array.length;if(i==null||array.split||array.setInterval||array.call)ret[0]=array;else
while(i)ret[--i]=array[i];}return ret;},inArray:function(elem,array){for(var i=0,length=array.length;i<length;i++)if(array[i]===elem)return i;return-1;},merge:function(first,second){var i=0,elem,pos=first.length;if(jQuery.browser.msie){while(elem=second[i++])if(elem.nodeType!=8)first[pos++]=elem;}else
while(elem=second[i++])first[pos++]=elem;return first;},unique:function(array){var ret=[],done={};try{for(var i=0,length=array.length;i<length;i++){var id=jQuery.data(array[i]);if(!done[id]){done[id]=true;ret.push(array[i]);}}}catch(e){ret=array;}return ret;},grep:function(elems,callback,inv){var ret=[];for(var i=0,length=elems.length;i<length;i++)if(!inv!=!callback(elems[i],i))ret.push(elems[i]);return ret;},map:function(elems,callback){var ret=[];for(var i=0,length=elems.length;i<length;i++){var value=callback(elems[i],i);if(value!=null)ret[ret.length]=value;}return ret.concat.apply([],ret);}});var userAgent=navigator.userAgent.toLowerCase();jQuery.browser={version:(userAgent.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[])[1],safari:/webkit/.test(userAgent),opera:/opera/.test(userAgent),msie:/msie/.test(userAgent)&&!/opera/.test(userAgent),mozilla:/mozilla/.test(userAgent)&&!/(compatible|webkit)/.test(userAgent)};var styleFloat=jQuery.browser.msie?"styleFloat":"cssFloat";jQuery.extend({boxModel:!jQuery.browser.msie||document.compatMode=="CSS1Compat",props:{"for":"htmlFor","class":"className","float":styleFloat,cssFloat:styleFloat,styleFloat:styleFloat,readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing"}});jQuery.each({parent:function(elem){return elem.parentNode;},parents:function(elem){return jQuery.dir(elem,"parentNode");},next:function(elem){return jQuery.nth(elem,2,"nextSibling");},prev:function(elem){return jQuery.nth(elem,2,"previousSibling");},nextAll:function(elem){return jQuery.dir(elem,"nextSibling");},prevAll:function(elem){return jQuery.dir(elem,"previousSibling");},siblings:function(elem){return jQuery.sibling(elem.parentNode.firstChild,elem);},children:function(elem){return jQuery.sibling(elem.firstChild);},contents:function(elem){return jQuery.nodeName(elem,"iframe")?elem.contentDocument||elem.contentWindow.document:jQuery.makeArray(elem.childNodes);}},function(name,fn){jQuery.fn[name]=function(selector){var ret=jQuery.map(this,fn);if(selector&&typeof selector=="string")ret=jQuery.multiFilter(selector,ret);return this.pushStack(jQuery.unique(ret));};});jQuery.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(name,original){jQuery.fn[name]=function(){var args=arguments;return this.each(function(){for(var i=0,length=args.length;i<length;i++)jQuery(args[i])[original](this);});};});jQuery.each({removeAttr:function(name){jQuery.attr(this,name,"");if(this.nodeType==1)this.removeAttribute(name);},addClass:function(classNames){jQuery.className.add(this,classNames);},removeClass:function(classNames){jQuery.className.remove(this,classNames);},toggleClass:function(classNames){jQuery.className[jQuery.className.has(this,classNames)?"remove":"add"](this,classNames);},remove:function(selector){if(!selector||jQuery.filter(selector,[this]).r.length){jQuery("*",this).add(this).each(function(){jQuery.event.remove(this);jQuery.removeData(this);});if(this.parentNode)this.parentNode.removeChild(this);}},empty:function(){jQuery(">*",this).remove();while(this.firstChild)this.removeChild(this.firstChild);}},function(name,fn){jQuery.fn[name]=function(){return this.each(fn,arguments);};});jQuery.each(["Height","Width"],function(i,name){var type=name.toLowerCase();jQuery.fn[type]=function(size){return this[0]==window?jQuery.browser.opera&&document.body["client"+name]||jQuery.browser.safari&&window["inner"+name]||document.compatMode=="CSS1Compat"&&document.documentElement["client"+name]||document.body["client"+name]:this[0]==document?Math.max(Math.max(document.body["scroll"+name],document.documentElement["scroll"+name]),Math.max(document.body["offset"+name],document.documentElement["offset"+name])):size==undefined?(this.length?jQuery.css(this[0],type):null):this.css(type,size.constructor==String?size:size+"px");};});function num(elem,prop){return elem[0]&&parseInt(jQuery.curCSS(elem[0],prop,true),10)||0;}var chars=jQuery.browser.safari&&parseInt(jQuery.browser.version)<417?"(?:[\\w*_-]|\\\\.)":"(?:[\\w\u0128-\uFFFF*_-]|\\\\.)",quickChild=new RegExp("^>\\s*("+chars+"+)"),quickID=new RegExp("^("+chars+"+)(#)("+chars+"+)"),quickClass=new RegExp("^([#.]?)("+chars+"*)");jQuery.extend({expr:{"":function(a,i,m){return m[2]=="*"||jQuery.nodeName(a,m[2]);},"#":function(a,i,m){return a.getAttribute("id")==m[2];},":":{lt:function(a,i,m){return i<m[3]-0;},gt:function(a,i,m){return i>m[3]-0;},nth:function(a,i,m){return m[3]-0==i;},eq:function(a,i,m){return m[3]-0==i;},first:function(a,i){return i==0;},last:function(a,i,m,r){return i==r.length-1;},even:function(a,i){return i%2==0;},odd:function(a,i){return i%2;},"first-child":function(a){return a.parentNode.getElementsByTagName("*")[0]==a;},"last-child":function(a){return jQuery.nth(a.parentNode.lastChild,1,"previousSibling")==a;},"only-child":function(a){return!jQuery.nth(a.parentNode.lastChild,2,"previousSibling");},parent:function(a){return a.firstChild;},empty:function(a){return!a.firstChild;},contains:function(a,i,m){return(a.textContent||a.innerText||jQuery(a).text()||"").indexOf(m[3])>=0;},visible:function(a){return"hidden"!=a.type&&jQuery.css(a,"display")!="none"&&jQuery.css(a,"visibility")!="hidden";},hidden:function(a){return"hidden"==a.type||jQuery.css(a,"display")=="none"||jQuery.css(a,"visibility")=="hidden";},enabled:function(a){return!a.disabled;},disabled:function(a){return a.disabled;},checked:function(a){return a.checked;},selected:function(a){return a.selected||jQuery.attr(a,"selected");},text:function(a){return"text"==a.type;},radio:function(a){return"radio"==a.type;},checkbox:function(a){return"checkbox"==a.type;},file:function(a){return"file"==a.type;},password:function(a){return"password"==a.type;},submit:function(a){return"submit"==a.type;},image:function(a){return"image"==a.type;},reset:function(a){return"reset"==a.type;},button:function(a){return"button"==a.type||jQuery.nodeName(a,"button");},input:function(a){return/input|select|textarea|button/i.test(a.nodeName);},has:function(a,i,m){return jQuery.find(m[3],a).length;},header:function(a){return/h\d/i.test(a.nodeName);},animated:function(a){return jQuery.grep(jQuery.timers,function(fn){return a==fn.elem;}).length;}}},parse:[/^(\[) *@?([\w-]+) *([!*$^~=]*) *('?"?)(.*?)\4 *\]/,/^(:)([\w-]+)\("?'?(.*?(\(.*?\))?[^(]*?)"?'?\)/,new RegExp("^([:.#]*)("+chars+"+)")],multiFilter:function(expr,elems,not){var old,cur=[];while(expr&&expr!=old){old=expr;var f=jQuery.filter(expr,elems,not);expr=f.t.replace(/^\s*,\s*/,"");cur=not?elems=f.r:jQuery.merge(cur,f.r);}return cur;},find:function(t,context){if(typeof t!="string")return[t];if(context&&context.nodeType!=1&&context.nodeType!=9)return[];context=context||document;var ret=[context],done=[],last,nodeName;while(t&&last!=t){var r=[];last=t;t=jQuery.trim(t);var foundToken=false,re=quickChild,m=re.exec(t);if(m){nodeName=m[1].toUpperCase();for(var i=0;ret[i];i++)for(var c=ret[i].firstChild;c;c=c.nextSibling)if(c.nodeType==1&&(nodeName=="*"||c.nodeName.toUpperCase()==nodeName))r.push(c);ret=r;t=t.replace(re,"");if(t.indexOf(" ")==0)continue;foundToken=true;}else{re=/^([>+~])\s*(\w*)/i;if((m=re.exec(t))!=null){r=[];var merge={};nodeName=m[2].toUpperCase();m=m[1];for(var j=0,rl=ret.length;j<rl;j++){var n=m=="~"||m=="+"?ret[j].nextSibling:ret[j].firstChild;for(;n;n=n.nextSibling)if(n.nodeType==1){var id=jQuery.data(n);if(m=="~"&&merge[id])break;if(!nodeName||n.nodeName.toUpperCase()==nodeName){if(m=="~")merge[id]=true;r.push(n);}if(m=="+")break;}}ret=r;t=jQuery.trim(t.replace(re,""));foundToken=true;}}if(t&&!foundToken){if(!t.indexOf(",")){if(context==ret[0])ret.shift();done=jQuery.merge(done,ret);r=ret=[context];t=" "+t.substr(1,t.length);}else{var re2=quickID;var m=re2.exec(t);if(m){m=[0,m[2],m[3],m[1]];}else{re2=quickClass;m=re2.exec(t);}m[2]=m[2].replace(/\\/g,"");var elem=ret[ret.length-1];if(m[1]=="#"&&elem&&elem.getElementById&&!jQuery.isXMLDoc(elem)){var oid=elem.getElementById(m[2]);if((jQuery.browser.msie||jQuery.browser.opera)&&oid&&typeof oid.id=="string"&&oid.id!=m[2])oid=jQuery('[@id="'+m[2]+'"]',elem)[0];ret=r=oid&&(!m[3]||jQuery.nodeName(oid,m[3]))?[oid]:[];}else{for(var i=0;ret[i];i++){var tag=m[1]=="#"&&m[3]?m[3]:m[1]!=""||m[0]==""?"*":m[2];if(tag=="*"&&ret[i].nodeName.toLowerCase()=="object")tag="param";r=jQuery.merge(r,ret[i].getElementsByTagName(tag));}if(m[1]==".")r=jQuery.classFilter(r,m[2]);if(m[1]=="#"){var tmp=[];for(var i=0;r[i];i++)if(r[i].getAttribute("id")==m[2]){tmp=[r[i]];break;}r=tmp;}ret=r;}t=t.replace(re2,"");}}if(t){var val=jQuery.filter(t,r);ret=r=val.r;t=jQuery.trim(val.t);}}if(t)ret=[];if(ret&&context==ret[0])ret.shift();done=jQuery.merge(done,ret);return done;},classFilter:function(r,m,not){m=" "+m+" ";var tmp=[];for(var i=0;r[i];i++){var pass=(" "+r[i].className+" ").indexOf(m)>=0;if(!not&&pass||not&&!pass)tmp.push(r[i]);}return tmp;},filter:function(t,r,not){var last;while(t&&t!=last){last=t;var p=jQuery.parse,m;for(var i=0;p[i];i++){m=p[i].exec(t);if(m){t=t.substring(m[0].length);m[2]=m[2].replace(/\\/g,"");break;}}if(!m)break;if(m[1]==":"&&m[2]=="not")r=isSimple.test(m[3])?jQuery.filter(m[3],r,true).r:jQuery(r).not(m[3]);else if(m[1]==".")r=jQuery.classFilter(r,m[2],not);else if(m[1]=="["){var tmp=[],type=m[3];for(var i=0,rl=r.length;i<rl;i++){var a=r[i],z=a[jQuery.props[m[2]]||m[2]];if(z==null||/href|src|selected/.test(m[2]))z=jQuery.attr(a,m[2])||'';if((type==""&&!!z||type=="="&&z==m[5]||type=="!="&&z!=m[5]||type=="^="&&z&&!z.indexOf(m[5])||type=="$="&&z.substr(z.length-m[5].length)==m[5]||(type=="*="||type=="~=")&&z.indexOf(m[5])>=0)^not)tmp.push(a);}r=tmp;}else if(m[1]==":"&&m[2]=="nth-child"){var merge={},tmp=[],test=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(m[3]=="even"&&"2n"||m[3]=="odd"&&"2n+1"||!/\D/.test(m[3])&&"0n+"+m[3]||m[3]),first=(test[1]+(test[2]||1))-0,last=test[3]-0;for(var i=0,rl=r.length;i<rl;i++){var node=r[i],parentNode=node.parentNode,id=jQuery.data(parentNode);if(!merge[id]){var c=1;for(var n=parentNode.firstChild;n;n=n.nextSibling)if(n.nodeType==1)n.nodeIndex=c++;merge[id]=true;}var add=false;if(first==0){if(node.nodeIndex==last)add=true;}else if((node.nodeIndex-last)%first==0&&(node.nodeIndex-last)/first>=0)add=true;if(add^not)tmp.push(node);}r=tmp;}else{var fn=jQuery.expr[m[1]];if(typeof fn=="object")fn=fn[m[2]];if(typeof fn=="string")fn=eval("false||function(a,i){return "+fn+";}");r=jQuery.grep(r,function(elem,i){return fn(elem,i,m,r);},not);}}return{r:r,t:t};},dir:function(elem,dir){var matched=[],cur=elem[dir];while(cur&&cur!=document){if(cur.nodeType==1)matched.push(cur);cur=cur[dir];}return matched;},nth:function(cur,result,dir,elem){result=result||1;var num=0;for(;cur;cur=cur[dir])if(cur.nodeType==1&&++num==result)break;return cur;},sibling:function(n,elem){var r=[];for(;n;n=n.nextSibling){if(n.nodeType==1&&n!=elem)r.push(n);}return r;}});jQuery.event={add:function(elem,types,handler,data){if(elem.nodeType==3||elem.nodeType==8)return;if(jQuery.browser.msie&&elem.setInterval)elem=window;if(!handler.guid)handler.guid=this.guid++;if(data!=undefined){var fn=handler;handler=this.proxy(fn,function(){return fn.apply(this,arguments);});handler.data=data;}var events=jQuery.data(elem,"events")||jQuery.data(elem,"events",{}),handle=jQuery.data(elem,"handle")||jQuery.data(elem,"handle",function(){if(typeof jQuery!="undefined"&&!jQuery.event.triggered)return jQuery.event.handle.apply(arguments.callee.elem,arguments);});handle.elem=elem;jQuery.each(types.split(/\s+/),function(index,type){var parts=type.split(".");type=parts[0];handler.type=parts[1];var handlers=events[type];if(!handlers){handlers=events[type]={};if(!jQuery.event.special[type]||jQuery.event.special[type].setup.call(elem)===false){if(elem.addEventListener)elem.addEventListener(type,handle,false);else if(elem.attachEvent)elem.attachEvent("on"+type,handle);}}handlers[handler.guid]=handler;jQuery.event.global[type]=true;});elem=null;},guid:1,global:{},remove:function(elem,types,handler){if(elem.nodeType==3||elem.nodeType==8)return;var events=jQuery.data(elem,"events"),ret,index;if(events){if(types==undefined||(typeof types=="string"&&types.charAt(0)=="."))for(var type in events)this.remove(elem,type+(types||""));else{if(types.type){handler=types.handler;types=types.type;}jQuery.each(types.split(/\s+/),function(index,type){var parts=type.split(".");type=parts[0];if(events[type]){if(handler)delete events[type][handler.guid];else
for(handler in events[type])if(!parts[1]||events[type][handler].type==parts[1])delete events[type][handler];for(ret in events[type])break;if(!ret){if(!jQuery.event.special[type]||jQuery.event.special[type].teardown.call(elem)===false){if(elem.removeEventListener)elem.removeEventListener(type,jQuery.data(elem,"handle"),false);else if(elem.detachEvent)elem.detachEvent("on"+type,jQuery.data(elem,"handle"));}ret=null;delete events[type];}}});}for(ret in events)break;if(!ret){var handle=jQuery.data(elem,"handle");if(handle)handle.elem=null;jQuery.removeData(elem,"events");jQuery.removeData(elem,"handle");}}},trigger:function(type,data,elem,donative,extra){data=jQuery.makeArray(data);if(type.indexOf("!")>=0){type=type.slice(0,-1);var exclusive=true;}if(!elem){if(this.global[type])jQuery("*").add([window,document]).trigger(type,data);}else{if(elem.nodeType==3||elem.nodeType==8)return undefined;var val,ret,fn=jQuery.isFunction(elem[type]||null),event=!data[0]||!data[0].preventDefault;if(event){data.unshift({type:type,target:elem,preventDefault:function(){},stopPropagation:function(){},timeStamp:now()});data[0][expando]=true;}data[0].type=type;if(exclusive)data[0].exclusive=true;var handle=jQuery.data(elem,"handle");if(handle)val=handle.apply(elem,data);if((!fn||(jQuery.nodeName(elem,'a')&&type=="click"))&&elem["on"+type]&&elem["on"+type].apply(elem,data)===false)val=false;if(event)data.shift();if(extra&&jQuery.isFunction(extra)){ret=extra.apply(elem,val==null?data:data.concat(val));if(ret!==undefined)val=ret;}if(fn&&donative!==false&&val!==false&&!(jQuery.nodeName(elem,'a')&&type=="click")){this.triggered=true;try{elem[type]();}catch(e){}}this.triggered=false;}return val;},handle:function(event){var val,ret,namespace,all,handlers;event=arguments[0]=jQuery.event.fix(event||window.event);namespace=event.type.split(".");event.type=namespace[0];namespace=namespace[1];all=!namespace&&!event.exclusive;handlers=(jQuery.data(this,"events")||{})[event.type];for(var j in handlers){var handler=handlers[j];if(all||handler.type==namespace){event.handler=handler;event.data=handler.data;ret=handler.apply(this,arguments);if(val!==false)val=ret;if(ret===false){event.preventDefault();event.stopPropagation();}}}return val;},fix:function(event){if(event[expando]==true)return event;var originalEvent=event;event={originalEvent:originalEvent};var props="altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target timeStamp toElement type view wheelDelta which".split(" ");for(var i=props.length;i;i--)event[props[i]]=originalEvent[props[i]];event[expando]=true;event.preventDefault=function(){if(originalEvent.preventDefault)originalEvent.preventDefault();originalEvent.returnValue=false;};event.stopPropagation=function(){if(originalEvent.stopPropagation)originalEvent.stopPropagation();originalEvent.cancelBubble=true;};event.timeStamp=event.timeStamp||now();if(!event.target)event.target=event.srcElement||document;if(event.target.nodeType==3)event.target=event.target.parentNode;if(!event.relatedTarget&&event.fromElement)event.relatedTarget=event.fromElement==event.target?event.toElement:event.fromElement;if(event.pageX==null&&event.clientX!=null){var doc=document.documentElement,body=document.body;event.pageX=event.clientX+(doc&&doc.scrollLeft||body&&body.scrollLeft||0)-(doc.clientLeft||0);event.pageY=event.clientY+(doc&&doc.scrollTop||body&&body.scrollTop||0)-(doc.clientTop||0);}if(!event.which&&((event.charCode||event.charCode===0)?event.charCode:event.keyCode))event.which=event.charCode||event.keyCode;if(!event.metaKey&&event.ctrlKey)event.metaKey=event.ctrlKey;if(!event.which&&event.button)event.which=(event.button&1?1:(event.button&2?3:(event.button&4?2:0)));return event;},proxy:function(fn,proxy){proxy.guid=fn.guid=fn.guid||proxy.guid||this.guid++;return proxy;},special:{ready:{setup:function(){bindReady();return;},teardown:function(){return;}},mouseenter:{setup:function(){if(jQuery.browser.msie)return false;jQuery(this).bind("mouseover",jQuery.event.special.mouseenter.handler);return true;},teardown:function(){if(jQuery.browser.msie)return false;jQuery(this).unbind("mouseover",jQuery.event.special.mouseenter.handler);return true;},handler:function(event){if(withinElement(event,this))return true;event.type="mouseenter";return jQuery.event.handle.apply(this,arguments);}},mouseleave:{setup:function(){if(jQuery.browser.msie)return false;jQuery(this).bind("mouseout",jQuery.event.special.mouseleave.handler);return true;},teardown:function(){if(jQuery.browser.msie)return false;jQuery(this).unbind("mouseout",jQuery.event.special.mouseleave.handler);return true;},handler:function(event){if(withinElement(event,this))return true;event.type="mouseleave";return jQuery.event.handle.apply(this,arguments);}}}};jQuery.fn.extend({bind:function(type,data,fn){return type=="unload"?this.one(type,data,fn):this.each(function(){jQuery.event.add(this,type,fn||data,fn&&data);});},one:function(type,data,fn){var one=jQuery.event.proxy(fn||data,function(event){jQuery(this).unbind(event,one);return(fn||data).apply(this,arguments);});return this.each(function(){jQuery.event.add(this,type,one,fn&&data);});},unbind:function(type,fn){return this.each(function(){jQuery.event.remove(this,type,fn);});},trigger:function(type,data,fn){return this.each(function(){jQuery.event.trigger(type,data,this,true,fn);});},triggerHandler:function(type,data,fn){return this[0]&&jQuery.event.trigger(type,data,this[0],false,fn);},toggle:function(fn){var args=arguments,i=1;while(i<args.length)jQuery.event.proxy(fn,args[i++]);return this.click(jQuery.event.proxy(fn,function(event){this.lastToggle=(this.lastToggle||0)%i;event.preventDefault();return args[this.lastToggle++].apply(this,arguments)||false;}));},hover:function(fnOver,fnOut){return this.bind('mouseenter',fnOver).bind('mouseleave',fnOut);},ready:function(fn){bindReady();if(jQuery.isReady)fn.call(document,jQuery);else
jQuery.readyList.push(function(){return fn.call(this,jQuery);});return this;}});jQuery.extend({isReady:false,readyList:[],ready:function(){if(!jQuery.isReady){jQuery.isReady=true;if(jQuery.readyList){jQuery.each(jQuery.readyList,function(){this.call(document);});jQuery.readyList=null;}jQuery(document).triggerHandler("ready");}}});var readyBound=false;function bindReady(){if(readyBound)return;readyBound=true;if(document.addEventListener&&!jQuery.browser.opera)document.addEventListener("DOMContentLoaded",jQuery.ready,false);if(jQuery.browser.msie&&window==top)(function(){if(jQuery.isReady)return;try{document.documentElement.doScroll("left");}catch(error){setTimeout(arguments.callee,0);return;}jQuery.ready();})();if(jQuery.browser.opera)document.addEventListener("DOMContentLoaded",function(){if(jQuery.isReady)return;for(var i=0;i<document.styleSheets.length;i++)if(document.styleSheets[i].disabled){setTimeout(arguments.callee,0);return;}jQuery.ready();},false);if(jQuery.browser.safari){var numStyles;(function(){if(jQuery.isReady)return;if(document.readyState!="loaded"&&document.readyState!="complete"){setTimeout(arguments.callee,0);return;}if(numStyles===undefined)numStyles=jQuery("style, link[rel=stylesheet]").length;if(document.styleSheets.length!=numStyles){setTimeout(arguments.callee,0);return;}jQuery.ready();})();}jQuery.event.add(window,"load",jQuery.ready);}jQuery.each(("blur,focus,load,resize,scroll,unload,click,dblclick,"+"mousedown,mouseup,mousemove,mouseover,mouseout,change,select,"+"submit,keydown,keypress,keyup,error").split(","),function(i,name){jQuery.fn[name]=function(fn){return fn?this.bind(name,fn):this.trigger(name);};});var withinElement=function(event,elem){var parent=event.relatedTarget;while(parent&&parent!=elem)try{parent=parent.parentNode;}catch(error){parent=elem;}return parent==elem;};jQuery(window).bind("unload",function(){jQuery("*").add(document).unbind();});jQuery.fn.extend({_load:jQuery.fn.load,load:function(url,params,callback){if(typeof url!='string')return this._load(url);var off=url.indexOf(" ");if(off>=0){var selector=url.slice(off,url.length);url=url.slice(0,off);}callback=callback||function(){};var type="GET";if(params)if(jQuery.isFunction(params)){callback=params;params=null;}else{params=jQuery.param(params);type="POST";}var self=this;jQuery.ajax({url:url,type:type,dataType:"html",data:params,complete:function(res,status){if(status=="success"||status=="notmodified")self.html(selector?jQuery("<div/>").append(res.responseText.replace(/<script(.|\s)*?\/script>/g,"")).find(selector):res.responseText);self.each(callback,[res.responseText,status,res]);}});return this;},serialize:function(){return jQuery.param(this.serializeArray());},serializeArray:function(){return this.map(function(){return jQuery.nodeName(this,"form")?jQuery.makeArray(this.elements):this;}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password/i.test(this.type));}).map(function(i,elem){var val=jQuery(this).val();return val==null?null:val.constructor==Array?jQuery.map(val,function(val,i){return{name:elem.name,value:val};}):{name:elem.name,value:val};}).get();}});jQuery.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(i,o){jQuery.fn[o]=function(f){return this.bind(o,f);};});var jsc=now();jQuery.extend({get:function(url,data,callback,type){if(jQuery.isFunction(data)){callback=data;data=null;}return jQuery.ajax({type:"GET",url:url,data:data,success:callback,dataType:type});},getScript:function(url,callback){return jQuery.get(url,null,callback,"script");},getJSON:function(url,data,callback){return jQuery.get(url,data,callback,"json");},post:function(url,data,callback,type){if(jQuery.isFunction(data)){callback=data;data={};}return jQuery.ajax({type:"POST",url:url,data:data,success:callback,dataType:type});},ajaxSetup:function(settings){jQuery.extend(jQuery.ajaxSettings,settings);},ajaxSettings:{url:location.href,global:true,type:"GET",timeout:0,contentType:"application/x-www-form-urlencoded",processData:true,async:true,data:null,username:null,password:null,accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(s){s=jQuery.extend(true,s,jQuery.extend(true,{},jQuery.ajaxSettings,s));var jsonp,jsre=/=\?(&|$)/g,status,data,type=s.type.toUpperCase();if(s.data&&s.processData&&typeof s.data!="string")s.data=jQuery.param(s.data);if(s.dataType=="jsonp"){if(type=="GET"){if(!s.url.match(jsre))s.url+=(s.url.match(/\?/)?"&":"?")+(s.jsonp||"callback")+"=?";}else if(!s.data||!s.data.match(jsre))s.data=(s.data?s.data+"&":"")+(s.jsonp||"callback")+"=?";s.dataType="json";}if(s.dataType=="json"&&(s.data&&s.data.match(jsre)||s.url.match(jsre))){jsonp="jsonp"+jsc++;if(s.data)s.data=(s.data+"").replace(jsre,"="+jsonp+"$1");s.url=s.url.replace(jsre,"="+jsonp+"$1");s.dataType="script";window[jsonp]=function(tmp){data=tmp;success();complete();window[jsonp]=undefined;try{delete window[jsonp];}catch(e){}if(head)head.removeChild(script);};}if(s.dataType=="script"&&s.cache==null)s.cache=false;if(s.cache===false&&type=="GET"){var ts=now();var ret=s.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+ts+"$2");s.url=ret+((ret==s.url)?(s.url.match(/\?/)?"&":"?")+"_="+ts:"");}if(s.data&&type=="GET"){s.url+=(s.url.match(/\?/)?"&":"?")+s.data;s.data=null;}if(s.global&&!jQuery.active++)jQuery.event.trigger("ajaxStart");var remote=/^(?:\w+:)?\/\/([^\/?#]+)/;if(s.dataType=="script"&&type=="GET"&&remote.test(s.url)&&remote.exec(s.url)[1]!=location.host){var head=document.getElementsByTagName("head")[0];var script=document.createElement("script");script.src=s.url;if(s.scriptCharset)script.charset=s.scriptCharset;if(!jsonp){var done=false;script.onload=script.onreadystatechange=function(){if(!done&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){done=true;success();complete();head.removeChild(script);}};}head.appendChild(script);return undefined;}var requestDone=false;var xhr=window.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest();if(s.username)xhr.open(type,s.url,s.async,s.username,s.password);else
xhr.open(type,s.url,s.async);try{if(s.data)xhr.setRequestHeader("Content-Type",s.contentType);if(s.ifModified)xhr.setRequestHeader("If-Modified-Since",jQuery.lastModified[s.url]||"Thu, 01 Jan 1970 00:00:00 GMT");xhr.setRequestHeader("X-Requested-With","XMLHttpRequest");xhr.setRequestHeader("Accept",s.dataType&&s.accepts[s.dataType]?s.accepts[s.dataType]+", */*":s.accepts._default);}catch(e){}if(s.beforeSend&&s.beforeSend(xhr,s)===false){s.global&&jQuery.active--;xhr.abort();return false;}if(s.global)jQuery.event.trigger("ajaxSend",[xhr,s]);var onreadystatechange=function(isTimeout){if(!requestDone&&xhr&&(xhr.readyState==4||isTimeout=="timeout")){requestDone=true;if(ival){clearInterval(ival);ival=null;}status=isTimeout=="timeout"&&"timeout"||!jQuery.httpSuccess(xhr)&&"error"||s.ifModified&&jQuery.httpNotModified(xhr,s.url)&&"notmodified"||"success";if(status=="success"){try{data=jQuery.httpData(xhr,s.dataType,s.dataFilter);}catch(e){status="parsererror";}}if(status=="success"){var modRes;try{modRes=xhr.getResponseHeader("Last-Modified");}catch(e){}if(s.ifModified&&modRes)jQuery.lastModified[s.url]=modRes;if(!jsonp)success();}else
jQuery.handleError(s,xhr,status);complete();if(s.async)xhr=null;}};if(s.async){var ival=setInterval(onreadystatechange,13);if(s.timeout>0)setTimeout(function(){if(xhr){xhr.abort();if(!requestDone)onreadystatechange("timeout");}},s.timeout);}try{xhr.send(s.data);}catch(e){jQuery.handleError(s,xhr,null,e);}if(!s.async)onreadystatechange();function success(){if(s.success)s.success(data,status);if(s.global)jQuery.event.trigger("ajaxSuccess",[xhr,s]);}function complete(){if(s.complete)s.complete(xhr,status);if(s.global)jQuery.event.trigger("ajaxComplete",[xhr,s]);if(s.global&&!--jQuery.active)jQuery.event.trigger("ajaxStop");}return xhr;},handleError:function(s,xhr,status,e){if(s.error)s.error(xhr,status,e);if(s.global)jQuery.event.trigger("ajaxError",[xhr,s,e]);},active:0,httpSuccess:function(xhr){try{return!xhr.status&&location.protocol=="file:"||(xhr.status>=200&&xhr.status<300)||xhr.status==304||xhr.status==1223||jQuery.browser.safari&&xhr.status==undefined;}catch(e){}return false;},httpNotModified:function(xhr,url){try{var xhrRes=xhr.getResponseHeader("Last-Modified");return xhr.status==304||xhrRes==jQuery.lastModified[url]||jQuery.browser.safari&&xhr.status==undefined;}catch(e){}return false;},httpData:function(xhr,type,filter){var ct=xhr.getResponseHeader("content-type"),xml=type=="xml"||!type&&ct&&ct.indexOf("xml")>=0,data=xml?xhr.responseXML:xhr.responseText;if(xml&&data.documentElement.tagName=="parsererror")throw"parsererror";if(filter)data=filter(data,type);if(type=="script")jQuery.globalEval(data);if(type=="json")data=eval("("+data+")");return data;},param:function(a){var s=[];if(a.constructor==Array||a.jquery)jQuery.each(a,function(){s.push(encodeURIComponent(this.name)+"="+encodeURIComponent(this.value));});else
for(var j in a)if(a[j]&&a[j].constructor==Array)jQuery.each(a[j],function(){s.push(encodeURIComponent(j)+"="+encodeURIComponent(this));});else
s.push(encodeURIComponent(j)+"="+encodeURIComponent(jQuery.isFunction(a[j])?a[j]():a[j]));return s.join("&").replace(/%20/g,"+");}});jQuery.fn.extend({show:function(speed,callback){return speed?this.animate({height:"show",width:"show",opacity:"show"},speed,callback):this.filter(":hidden").each(function(){this.style.display=this.oldblock||"";if(jQuery.css(this,"display")=="none"){var elem=jQuery("<"+this.tagName+" />").appendTo("body");this.style.display=elem.css("display");if(this.style.display=="none")this.style.display="block";elem.remove();}}).end();},hide:function(speed,callback){return speed?this.animate({height:"hide",width:"hide",opacity:"hide"},speed,callback):this.filter(":visible").each(function(){this.oldblock=this.oldblock||jQuery.css(this,"display");this.style.display="none";}).end();},_toggle:jQuery.fn.toggle,toggle:function(fn,fn2){return jQuery.isFunction(fn)&&jQuery.isFunction(fn2)?this._toggle.apply(this,arguments):fn?this.animate({height:"toggle",width:"toggle",opacity:"toggle"},fn,fn2):this.each(function(){jQuery(this)[jQuery(this).is(":hidden")?"show":"hide"]();});},slideDown:function(speed,callback){return this.animate({height:"show"},speed,callback);},slideUp:function(speed,callback){return this.animate({height:"hide"},speed,callback);},slideToggle:function(speed,callback){return this.animate({height:"toggle"},speed,callback);},fadeIn:function(speed,callback){return this.animate({opacity:"show"},speed,callback);},fadeOut:function(speed,callback){return this.animate({opacity:"hide"},speed,callback);},fadeTo:function(speed,to,callback){return this.animate({opacity:to},speed,callback);},animate:function(prop,speed,easing,callback){var optall=jQuery.speed(speed,easing,callback);return this[optall.queue===false?"each":"queue"](function(){if(this.nodeType!=1)return false;var opt=jQuery.extend({},optall),p,hidden=jQuery(this).is(":hidden"),self=this;for(p in prop){if(prop[p]=="hide"&&hidden||prop[p]=="show"&&!hidden)return opt.complete.call(this);if(p=="height"||p=="width"){opt.display=jQuery.css(this,"display");opt.overflow=this.style.overflow;}}if(opt.overflow!=null)this.style.overflow="hidden";opt.curAnim=jQuery.extend({},prop);jQuery.each(prop,function(name,val){var e=new jQuery.fx(self,opt,name);if(/toggle|show|hide/.test(val))e[val=="toggle"?hidden?"show":"hide":val](prop);else{var parts=val.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),start=e.cur(true)||0;if(parts){var end=parseFloat(parts[2]),unit=parts[3]||"px";if(unit!="px"){self.style[name]=(end||1)+unit;start=((end||1)/e.cur(true))*start;self.style[name]=start+unit;}if(parts[1])end=((parts[1]=="-="?-1:1)*end)+start;e.custom(start,end,unit);}else
e.custom(start,val,"");}});return true;});},queue:function(type,fn){if(jQuery.isFunction(type)||(type&&type.constructor==Array)){fn=type;type="fx";}if(!type||(typeof type=="string"&&!fn))return queue(this[0],type);return this.each(function(){if(fn.constructor==Array)queue(this,type,fn);else{queue(this,type).push(fn);if(queue(this,type).length==1)fn.call(this);}});},stop:function(clearQueue,gotoEnd){var timers=jQuery.timers;if(clearQueue)this.queue([]);this.each(function(){for(var i=timers.length-1;i>=0;i--)if(timers[i].elem==this){if(gotoEnd)timers[i](true);timers.splice(i,1);}});if(!gotoEnd)this.dequeue();return this;}});var queue=function(elem,type,array){if(elem){type=type||"fx";var q=jQuery.data(elem,type+"queue");if(!q||array)q=jQuery.data(elem,type+"queue",jQuery.makeArray(array));}return q;};jQuery.fn.dequeue=function(type){type=type||"fx";return this.each(function(){var q=queue(this,type);q.shift();if(q.length)q[0].call(this);});};jQuery.extend({speed:function(speed,easing,fn){var opt=speed&&speed.constructor==Object?speed:{complete:fn||!fn&&easing||jQuery.isFunction(speed)&&speed,duration:speed,easing:fn&&easing||easing&&easing.constructor!=Function&&easing};opt.duration=(opt.duration&&opt.duration.constructor==Number?opt.duration:jQuery.fx.speeds[opt.duration])||jQuery.fx.speeds.def;opt.old=opt.complete;opt.complete=function(){if(opt.queue!==false)jQuery(this).dequeue();if(jQuery.isFunction(opt.old))opt.old.call(this);};return opt;},easing:{linear:function(p,n,firstNum,diff){return firstNum+diff*p;},swing:function(p,n,firstNum,diff){return((-Math.cos(p*Math.PI)/2)+0.5)*diff+firstNum;}},timers:[],timerId:null,fx:function(elem,options,prop){this.options=options;this.elem=elem;this.prop=prop;if(!options.orig)options.orig={};}});jQuery.fx.prototype={update:function(){if(this.options.step)this.options.step.call(this.elem,this.now,this);(jQuery.fx.step[this.prop]||jQuery.fx.step._default)(this);if(this.prop=="height"||this.prop=="width")this.elem.style.display="block";},cur:function(force){if(this.elem[this.prop]!=null&&this.elem.style[this.prop]==null)return this.elem[this.prop];var r=parseFloat(jQuery.css(this.elem,this.prop,force));return r&&r>-10000?r:parseFloat(jQuery.curCSS(this.elem,this.prop))||0;},custom:function(from,to,unit){this.startTime=now();this.start=from;this.end=to;this.unit=unit||this.unit||"px";this.now=this.start;this.pos=this.state=0;this.update();var self=this;function t(gotoEnd){return self.step(gotoEnd);}t.elem=this.elem;jQuery.timers.push(t);if(jQuery.timerId==null){jQuery.timerId=setInterval(function(){var timers=jQuery.timers;for(var i=0;i<timers.length;i++)if(!timers[i]())timers.splice(i--,1);if(!timers.length){clearInterval(jQuery.timerId);jQuery.timerId=null;}},13);}},show:function(){this.options.orig[this.prop]=jQuery.attr(this.elem.style,this.prop);this.options.show=true;this.custom(0,this.cur());if(this.prop=="width"||this.prop=="height")this.elem.style[this.prop]="1px";jQuery(this.elem).show();},hide:function(){this.options.orig[this.prop]=jQuery.attr(this.elem.style,this.prop);this.options.hide=true;this.custom(this.cur(),0);},step:function(gotoEnd){var t=now();if(gotoEnd||t>this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var done=true;for(var i in this.options.curAnim)if(this.options.curAnim[i]!==true)done=false;if(done){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(jQuery.css(this.elem,"display")=="none")this.elem.style.display="block";}if(this.options.hide)this.elem.style.display="none";if(this.options.hide||this.options.show)for(var p in this.options.curAnim)jQuery.attr(this.elem.style,p,this.options.orig[p]);}if(done)this.options.complete.call(this.elem);return false;}else{var n=t-this.startTime;this.state=n/this.options.duration;this.pos=jQuery.easing[this.options.easing||(jQuery.easing.swing?"swing":"linear")](this.state,n,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update();}return true;}};jQuery.extend(jQuery.fx,{speeds:{slow:600,fast:200,def:400},step:{scrollLeft:function(fx){fx.elem.scrollLeft=fx.now;},scrollTop:function(fx){fx.elem.scrollTop=fx.now;},opacity:function(fx){jQuery.attr(fx.elem.style,"opacity",fx.now);},_default:function(fx){fx.elem.style[fx.prop]=fx.now+fx.unit;}}});jQuery.fn.offset=function(){var left=0,top=0,elem=this[0],results;if(elem)with(jQuery.browser){var parent=elem.parentNode,offsetChild=elem,offsetParent=elem.offsetParent,doc=elem.ownerDocument,safari2=safari&&parseInt(version)<522&&!/adobeair/i.test(userAgent),css=jQuery.curCSS,fixed=css(elem,"position")=="fixed";if(elem.getBoundingClientRect){var box=elem.getBoundingClientRect();add(box.left+Math.max(doc.documentElement.scrollLeft,doc.body.scrollLeft),box.top+Math.max(doc.documentElement.scrollTop,doc.body.scrollTop));add(-doc.documentElement.clientLeft,-doc.documentElement.clientTop);}else{add(elem.offsetLeft,elem.offsetTop);while(offsetParent){add(offsetParent.offsetLeft,offsetParent.offsetTop);if(mozilla&&!/^t(able|d|h)$/i.test(offsetParent.tagName)||safari&&!safari2)border(offsetParent);if(!fixed&&css(offsetParent,"position")=="fixed")fixed=true;offsetChild=/^body$/i.test(offsetParent.tagName)?offsetChild:offsetParent;offsetParent=offsetParent.offsetParent;}while(parent&&parent.tagName&&!/^body|html$/i.test(parent.tagName)){if(!/^inline|table.*$/i.test(css(parent,"display")))add(-parent.scrollLeft,-parent.scrollTop);if(mozilla&&css(parent,"overflow")!="visible")border(parent);parent=parent.parentNode;}if((safari2&&(fixed||css(offsetChild,"position")=="absolute"))||(mozilla&&css(offsetChild,"position")!="absolute"))add(-doc.body.offsetLeft,-doc.body.offsetTop);if(fixed)add(Math.max(doc.documentElement.scrollLeft,doc.body.scrollLeft),Math.max(doc.documentElement.scrollTop,doc.body.scrollTop));}results={top:top,left:left};}function border(elem){add(jQuery.curCSS(elem,"borderLeftWidth",true),jQuery.curCSS(elem,"borderTopWidth",true));}function add(l,t){left+=parseInt(l,10)||0;top+=parseInt(t,10)||0;}return results;};jQuery.fn.extend({position:function(){var left=0,top=0,results;if(this[0]){var offsetParent=this.offsetParent(),offset=this.offset(),parentOffset=/^body|html$/i.test(offsetParent[0].tagName)?{top:0,left:0}:offsetParent.offset();offset.top-=num(this,'marginTop');offset.left-=num(this,'marginLeft');parentOffset.top+=num(offsetParent,'borderTopWidth');parentOffset.left+=num(offsetParent,'borderLeftWidth');results={top:offset.top-parentOffset.top,left:offset.left-parentOffset.left};}return results;},offsetParent:function(){var offsetParent=this[0].offsetParent;while(offsetParent&&(!/^body|html$/i.test(offsetParent.tagName)&&jQuery.css(offsetParent,'position')=='static'))offsetParent=offsetParent.offsetParent;return jQuery(offsetParent);}});jQuery.each(['Left','Top'],function(i,name){var method='scroll'+name;jQuery.fn[method]=function(val){if(!this[0])return;return val!=undefined?this.each(function(){this==window||this==document?window.scrollTo(!i?val:jQuery(window).scrollLeft(),i?val:jQuery(window).scrollTop()):this[method]=val;}):this[0]==window||this[0]==document?self[i?'pageYOffset':'pageXOffset']||jQuery.boxModel&&document.documentElement[method]||document.body[method]:this[0][method];};});jQuery.each(["Height","Width"],function(i,name){var tl=i?"Left":"Top",br=i?"Right":"Bottom";jQuery.fn["inner"+name]=function(){return this[name.toLowerCase()]()+num(this,"padding"+tl)+num(this,"padding"+br);};jQuery.fn["outer"+name]=function(margin){return this["inner"+name]()+num(this,"border"+tl+"Width")+num(this,"border"+br+"Width")+(margin?num(this,"margin"+tl)+num(this,"margin"+br):0);};});})();
/*
File: Math.uuid.js
Version: 1.3
Change History:
  v1.0 - first release
  v1.1 - less code and 2x performance boost (by minimizing calls to Math.random())
  v1.2 - Add support for generating non-standard uuids of arbitrary length
  v1.3 - Fixed IE7 bug (can't use []'s to access string chars.  Thanks, Brian R.)
  v1.4 - Changed method to be "Math.uuid". Added support for radix argument.  Use module pattern for better encapsulation.

Latest version:   http://www.broofa.com/Tools/Math.uuid.js
Information:      http://www.broofa.com/blog/?p=151
Contact:          robert@broofa.com
----
Copyright (c) 2008, Robert Kieffer
All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

    * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
    * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
    * Neither the name of Robert Kieffer nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

/*
 * Generate a random uuid.
 *
 * USAGE: Math.uuid(length, radix)
 *   length - the desired number of characters
 *   radix  - the number of allowable values for each character.
 *
 * EXAMPLES:
 *   // No arguments  - returns RFC4122, version 4 ID
 *   >>> Math.uuid()
 *   "92329D39-6F5C-4520-ABFC-AAB64544E172"
 *
 *   // One argument - returns ID of the specified length
 *   >>> Math.uuid(15)     // 15 character ID (default base=62)
 *   "VcydxgltxrVZSTV"
 *
 *   // Two arguments - returns ID of the specified length, and radix. (Radix must be <= 62)
 *   >>> Math.uuid(8, 2)  // 8 character ID (base=2)
 *   "01001010"
 *   >>> Math.uuid(8, 10) // 8 character ID (base=10)
 *   "47473046"
 *   >>> Math.uuid(8, 16) // 8 character ID (base=16)
 *   "098F4D35"
 */
Math.uuid = (function() {
  // Private array of chars to use
  var CHARS = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('');

  return function (len, radix) {
    var chars = CHARS, uuid = [], rnd = Math.random;
    radix = radix || chars.length;

    if (len) {
      // Compact form
      for (var i = 0; i < len; i++) uuid[i] = chars[0 | rnd()*radix];
    } else {
      // rfc4122, version 4 form
      var r;

      // rfc4122 requires these characters
      uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-';
      uuid[14] = '4';

      // Fill in random data.  At i==19 set the high bits of clock sequence as
      // per rfc4122, sec. 4.1.5
      for (var i = 0; i < 36; i++) {
        if (!uuid[i]) {
          r = 0 | rnd()*16;
          uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r & 0xf];
        }
      }
    }

    return uuid.join('');
  };
})();

// Deprecated - only here for backward compatability
var randomUUID = Math.uuid;
if (typeof Zvents == "undefined"){
  Zvents = {};
}

(function(Z){
  if (typeof Z.Object == "undefined"){
    Z.Object = {
      bindMethod: function(that, f){
        return function(){
          return f.apply(that, arguments)
        }
      },
      combine: function(){
        return Z.Object.updateFromArray({}, arguments, 0);
      },

      copy: function(self){
        return Z.Object.combine(self)
      },

      update: function(self){
        return Z.Object.updateFromArray(self, arguments, 1);
      },

      updateFromArray: function(self, array, start, stop){
        stop = stop || array.length;
        for (var i = start; i < stop; i++) {
          var obj = array[i];
          if (obj) {
            for (var prop in obj) {
              if (typeof Object.prototype[prop] == 'undefined') {
                var a = self[prop], b = obj[prop];
                if (typeof a == 'object' && typeof b == 'object') {
                  Z.Object.update(a, b);
                }
                else {
                  self[prop] = b;
                }
              }
            }
          }
        }
        return self;
      }
    };
  }
})(Zvents);
if (typeof Zvents == "undefined"){
  Zvents = {}
}

Zvents.Cookie = {
  read: function( name ) {
    var match = document.cookie.match( new RegExp( name + '=([^;]+)' ) );
    return match && unescape( match[1] );
  },

  write: function( name, value ) {
    document.cookie = name + '=' + escape( value );
  }
};

if (typeof Zvents == "undefined"){
  Zvents = {};
}

(function(Z){

  var type_abbr_mapping = {
    event: 'e',
    venue: 'v',
    group: 'g',
    artist: 'g',
    performer: 'p',
    restaurant: 'r',
    movie: 'm',
    film: 'f',
    url: 'u'
  };

  // private functions
  function _uniqueId()
  {
    return _getTime().toString() + Math.random().toString();
  }

  function _abbrTypes(s)
  {
    if (s){
      for (var type in type_abbr_mapping){
        var abbr = type_abbr_mapping[type];
        s = s.replace(new RegExp(type + ":", "g"), abbr + ":");
      }
    }
    return s;
  }

  function _getTime()
  {
    var d = new Date();
    return d.getTime();
  }

  function _send(url, callback)
  {
    var img = new Image(1, 1);
    img.onload = function(){if (callback) callback(true);this.onload=null;}
    img.src = url;
  }

  function _query_string(params)
  {
    var qs = [];
    var p;
    for (p in params) {
      qs.push(p + '=' + encodeURIComponent(params[p]));
    }
    return '?' + qs.join('&');
  }

  function _track(url, loads, callback)
  {
    var load = {};
    for (var i=0; i<loads.length; i++){
      if (loads[i]){
        Z.Object.update(load, loads[i]);
      }
    }
    var id_attrs = ['oids', 'spids', 'ctx', 'from', 'to'];
    for (var i=0; i<id_attrs.length; i++){
      var attr = id_attrs[i];
      if (load[attr]) load[attr] = _abbrTypes(load[attr]);
    }
    var bool_attrs = ['sp', 'ctx_sp'];
    for (var i=0; i<bool_attrs.length; i++){
      var attr = bool_attrs[i];
      if (typeof load[attr] != "undefined") load[attr] = load[attr] ? 1 : 0;
    }

    /* Add time to request to ensure request is not cached by browser */
    Z.Object.update(load, {"__t": _getTime()});
    _send(url + _query_string(load), callback);
  }

  function _bindListener(element, event, listener, capture)
  {
    if (element.addEventListener){
      element.addEventListener(event, listener, capture);
    }
    else if (element.attachEvent) {
      element.attachEvent('on' + event, listener);
    }
  }

  function _unbindListener(element, event, listener)
  {
    if (element.removeEventListener){
      element.removeEventListener(event, listener);
    }
    else if (element.detachEvent){
      element.detachEvent('on' + event, listener);
    }
  }

  var _ctrlDown = false;
  var _shiftDown = false;
  var _altDown = false;

  function _normalizeEvent(event){
    if (window.event){
      event = window.event;
    }
    return event;
  }

  function _onKeyDown(event){
    event = _normalizeEvent(event);
    switch(event.keyCode){
      case 16:
      _shiftDown = true;
      break;

      case 17:
      _ctrlDown = true;
      break;

      case 18:
      _altDown = true;
      break;
    }
  }
  function _onKeyUp(event){
    event = _normalizeEvent(event);
    switch(event.keyCode){
      case 16:
      _shiftDown = false;
      break;

      case 17:
      _ctrlDown = false;
      break;

      case 18:
      _altDown = false;
      break;
    }
  }

  function _isControlKeyPressed(){
    return _ctrlDown || _shiftDown || _altDown;
  }

  Z.Tracker = function(config){
    Z.Object.update(this, {
      instance_id: _uniqueId(),

      initialized: false,

      settings: {
        url: 'http://images.zvents.com/zat',
        alive_interval: 20000,
        max_alive: 300000, /* 5 minutes */
        stall_interval: 2000,
        disable_alive: false,
        params: {
          r: document.referrer,
          url: document.location.href
        }
      },

      init: function(config){
        var settings = this.settings;

        if (config) {
          Z.Object.update(settings, config);
        }

        if (!settings.params.sid) {
          var sid = Zvents.Cookie.read('zvents_tracker_sid');
          if (!sid) {
            sid = _uniqueId();
            Zvents.Cookie.write('zvents_tracker_sid', sid);
          }
          settings.params.sid = sid;
        }

        if (!settings.params.uid) {
          settings.params.uid = _uniqueId();
        }

        if (!settings.disable_alive){
          this.alive_timer = setInterval("Zvents.trackers['" + this.instance_id + "'].alive();", settings.alive_interval);
          this.stop_alive_timer_at = _getTime() + this.settings.max_alive;
        }

        _bindListener(document, "keydown", _onKeyDown);
        _bindListener(document, "keyup", _onKeyUp);
        _bindListener(document, "unload", function(){
          _unbindListener(document, "keydown", _onKeyDown);
          _unbindListener(document, "keyup", _onKeyUp);
        });

        this.initialized = true;
      },

      alive: function(){
        /* If the tracker has not been initialized, do nothing */
        if (!this.initialized) return true;

        var settings = this.settings;
        _track(settings.url, [settings.params, {
          type: "alive"
        }]);
        if (this.stop_alive_timer_at < _getTime()){
          clearInterval(this.alive_timer);
        }
      },

      notify: function(params){
        /* If the tracker has not been initialized, do nothing */
        if (!this.initialized) return true;

        var settings = this.settings;
        _track(settings.url, [settings.params, params]);
        return true;
      },
      
      notifyCallback: function(params, callback, timeout){
        var settings = this.settings;
        var done_callback;
        var timer;
        if (callback){
          var notify_done = false;
          var done_callback = function(success){
            clearTimeout(timer);
            if (!notify_done){
              notify_done = true;
              callback(success);
            }
          };
          window["z__notifyDone"] = done_callback; 
          /* if it takes more than a second to load, go ahead anyway */
          timer = setTimeout("z__notifyDone(false);", timeout);
        }
        _track(settings.url, [settings.params, params], done_callback);        
      },

      click: function(params, anchor){
        /* If the tracker has not been initialized, do nothing */
        if (!this.initialized) return true;
        var callback;
        var settings = this.settings;
        var timer;
        var stall = anchor &&
          !_isControlKeyPressed() &&
          (typeof anchor == "function" ||
          (!anchor.target ||
          anchor.target.length == 0 ||
          anchor.target == "_top" ||
          anchor.target == "_self" ||
          anchor.target == "_parent"));
        if (stall){
          if (typeof anchor == "function"){
            callback = anchor;
          }
          else{
            callback = function(){
              window.location.href = anchor.href;              
            }
          }
        }
        this.notifyCallback(Z.Object.update({type: 'click'}, params), callback, settings.stall_interval);
        return !stall;
      },

      notifyView: function(params)
      {
        return this.notify(Z.Object.update({
          type: 'view'
        }, params));
      },

      notifyClick: function(params, anchor){
        return this.click(Z.Object.update({
          type: "click"
        }, params), anchor);
      }
    });

    /* singleton should not be initialized, so allow
     * for config to include a skip_init param.
     */
    if (!config || !config.skip_init){
      this.init(config);
    }

    /* Save tracker in trackers object so it can be retrieved
     * in expression passed to setInterval.
     */
    Z.trackers[this.instance_id] = this;
  };

  Z.trackers = {};

  Z.tracker = new Zvents.Tracker({skip_init: true});

})(Zvents);

// Zvents Widget Base Functionality - Copyright 2009 Zvents, Inc. All rights reserved. http://www.zvents.com/
if (typeof ZWidgets == "undefined") {
  ZWidgets = {};

  if (typeof $ZJQuery == "undefined") {
    $ZJQuery = jQuery.noConflict(true);
  }

  (function($, Z){
    // Track doc is loaded
    Z._doc_ready = false;
    $(function(){
      Z._doc_ready = true;
    });

    Z.Array = {
      map: function(a, f){
        var m = [];
        for (i = 0; i < a.length; i++) {
          m[i] = f(a[i]);
        }
        return m;
      },

      mapWithIndex: function(a, f){
        var m = [];
        for (i = 0; i < a.length; i++) {
          m[i] = f(a[i], i);
        }
        return m;
      },

      sort_by_property: function(a, prop){
        function prop_cmp(x, y){
          if (x[prop] == y[prop]){
            return 0;
          }
          if (x[prop] > y[prop]){
            return 1;
          }
          else {
            return -1;
          }
        }
        a.sort(prop_cmp);
      }
    };

    Z.Object = {
      bindMethod: function(that, f){
        return function(){
          return f.apply(that, arguments);
        };
      },
      combine: function(){
        return Z.Object.updateFromArray({}, arguments, 0);
      },

      copy: function(self){
        return Z.Object.combine(self);
      },

      update: function(self){
        return Z.Object.updateFromArray(self, arguments, 1);
      },

      clone: function(obj){
        if (obj && typeof obj == 'object'){
          var new_obj = {};
          Z.Object.update(new_obj, obj);
          obj = new_obj;
        }
        return obj;
      },

      updateFromArray: function(self, array, start, stop){
        stop = stop || array.length;
        for (var i = start; i < stop; i++) {
          var obj = array[i];
          if (obj) {
            for (var prop in obj) {
              if (typeof Object.prototype[prop] == 'undefined') {
                var a = self[prop];
                var b = obj[prop];
                if (a && typeof a == 'object' && b && typeof b == 'object') {
                  Z.Object.update(a, b);
                }
                else {
                  self[prop] = Z.Object.clone(b);
                }
              }
            }
          }
        }
        return self;
      }
    };

    Z.String = {
      trim: function(s){
        var m = s.match(/^\s*(.*)\s*$/);
        return m ? m[1] : '';
      },
      truncate: function(s, n){
        var truncated = false;
        if (typeof s != 'string'){
          return '';
        }
        var len = s.length;
        var ts = "";
        if (typeof n == 'number' && n < len) {
          // Hold two characters for ellipsis
          n -= 2;
          var si = 0;
          while (si < s.length){
            var word = "";
            while (si < s.length && word.indexOf(' ') == -1){
              word += s.substr(si,1);
              si++;
            }
            if ((word.length + ts.length) <= n){
              ts += word;
            }
            else {
              if (ts.substr(ts.length-1, 1) == ' '){
                ts = ts.substr(0, ts.length-1);
              }
              truncated = true;
              break;
            }
          }
        }
        else {
          ts = s;
        }
        if (truncated){
          if (ts.length === 0) {
            // if the first word doesn't fit
            ts = s.substr(0, n);
          }
          ts += '&#8230;';
        }
        return ts;
      },
      hash: function(s){
        // djb2 algorithm (found at http://www.cse.yorku.ca/~oz/hash.html)
        var hash = 5381;
        for (i=0; i<s.length; i++){
          hash = ((hash << 5) + hash) + s.charCodeAt(i);
        }
        return Math.abs(hash);
      },
      toOrdinal: function (i){
        var sfx = ['th', 'st', 'nd', 'rd', 'th', 'th', 'th', 'th', 'th', 'th'];
        return i + (($.inArray(i%100, [11, 12, 13]) == -1) ? sfx[i % 10] : 'th');
      }
    };

    Z.Image = {
      thumbUrl: function(url){
        return url.replace(/_thumb\./, '.').replace(/\.([^.]+)$/, '_thumb.$1');
      }
    };

    Z.Date = function(time){
      if (this === ZWidgets) {
        return new Z.Date(time);
      }

      this.valid = Z.Date.dateStrict(time);
      this.date = this.valid || Z.Date.dateNow();
      return this;
    };

    Z.Date.prototype = {
      format: function(str){
        var self = this;
        return str.replace(/{(\w+)(:(\d+))?}/g, function(match, code, x, arg){
          return self[code] ? self[code](arg) : match;
        });
      },

      // Formatters
      a: function(){
        return this.am().slice(0, 1);
      },

      A: function() { return this.a().toUpperCase(); },

      am: function(){
        return this.date.getUTCHours() < 12 ? 'am' : 'pm';
      },

      AM: function() { return this.am().toUpperCase(); },

      Dth: function() {
        return Z.String.toOrdinal(this.date.getUTCDate());
      },

      D: function(){
        return this.date.getUTCDate();
      },
      DD: function(){
        return Z.pad(this.D(), 2);
      },
      h: function(){
        return ((this.date.getUTCHours() + 11) % 12 + 1);
      },
      hh: function(){
        return Z.pad(this.h(), 2);
      },
      h24: function(){
        return this.date.getUTCHours();
      },
      hh24: function(){
        return Z.pad(this.h24(), 2);
      },
      hmm: function(){
        return this.format('{h}:{mm}&#160;{am}');
      },
      //jan: function() { return this.Jan().toLowerCase(); },
      Jan: function(){
        return this.January().slice(0, 3);
      },
      //JAN: function() { return this.Jan().toUpperCase(); },
      //january: function() { return this.January().toLowerCase(); },
      January: function(){
        return Z.Date.monthNames[this.date.getUTCMonth()];
      },
      //JANUARY: function() { return this.January().toUpperCase(); },
      m: function(){
        return this.date.getUTCMinutes();
      },
      mm: function(){
        return Z.pad(this.m(), 2);
      },
      M: function(){
        return this.date.getUTCMonth() + 1;
      },
      MM: function(){
        return Z.pad(this.M(), 2);
      },
      MDY: function(){
        return this.format('{M}/{D}/{Y}');
      },
      s: function(){
        return this.date.getUTCSeconds();
      },
      ss: function(){
        return Z.pad(this.s(), 2);
      },
      //sun: function() { return this.Sun().toLowerCase(); },
      Sun: function(){
        return this.Sunday().slice(0, 3);
      },
      //SUN: function() { return this.Sun().toUpperCase(); },
      //sunday: function() { return this.Sunday().toLowerCase(); },
      Sunday: function(){
        return Z.Date.dayNames[this.date.getUTCDay()];
      },
      //SUNDAY: function() { return this.Sunday().toUpperCase(); },
      Y: function(){
        return this.date.getUTCFullYear();
      },
      YMD: function(){
        return this.format('{Y}-{MM}-{DD}');
      } //,
      //testFormat: function() {
      //  return this.format( '{a} {am} {D} {DD} {h} {hmm} {Jan} {January} {m} {mm} {M} {MM} {MDY} {s} {ss} {Sun} {Sunday} {Y} {YMD}' );
      //}
    };

    Z.Object.update(Z.Date, {
      oneSecond: 1000,
      oneMinute: 1000 * 60,
      oneHour: 1000 * 60 * 60,
      oneDay: 1000 * 60 * 60 * 24,
      oneWeek: 1000 * 60 * 60 * 24 * 7,

      dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],

      monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],

      // Create a Date object from a numeric or string time
      // Pass a numeric time straight through.
      // String time can be '20061231', '2006-12-31', or "Sun Dec 31 12:01:00 PDT 2006"
      // Always returns a Date object, defaulting to now if a string time can't be parsed
      date: function(time){
        return Z.Date.dateStrict(time) || Z.Date.dateNow();
      },

      // Same as Z.Date.date, but returns null for a bad string time value
      dateStrict: function(time){
        var date = (function(time){
          try {
            if (!time){
              return null;
            }

            if (typeof time == 'number') {
              if (time < 100000000000){
                time *= 1000; // handle time in seconds or milliseconds
              }
              return new Date(time);
            }

            if (typeof time == 'object') {
              if (time.getTime){
                return new Date(time.getTime()); // Date
              }
              if (time.date && time.valid){
                return new Date(time.date.getTime()); // Z.Date
              }
            }

            if (typeof time != 'string'){
              return null;
            }
            time = Z.String.trim(time);

            // Wed Jan 31 12:30:45 GMT 2007
            var m = time.match(/^[a-z]{3} ([a-z]{3}) (\d{2}) (\d{2}):(\d{2}):(\d{2}) \w{3} (\d{4})$/i);
            if (m){
              return new Date(Date.UTC(+m[6], Z.Date.numberFromShortMonth(m[1]), +m[2], +m[3], +m[4], +m[5]));
            }

            // Jan 2, 2007
            m = time.match(/^([a-z]+)\s*(\d+)\s*,?\s*(\d+)$/i);
            if (m) {
              var mon = Z.Date.numberFromShortMonth(m[1]);
              if (typeof mon != "undefined"){
                return new Date(Date.UTC(+m[3], mon, +m[2]));
              }
            }

            // 2007-01
            // 2007-01-31
            // 2007-01-31 12:30
            // 2007-01-31 12:30:45
            m = time.match(/^(\d{4})-(\d{2})(-(\d{2})( (\d{2}):(\d{2})(:(\d{2}))?)?)?$/);
            if (m){
              return new Date(Date.UTC(+m[1], m[2] - 1, +m[4] || 1, +m[6] || 0, +m[7] || 0, +m[9] || 0));
            }

            // 20070131
            m = time.match(/^(\d{4})(\d{2})(\d{2})$/);
            if (m){
              return new Date(Date.UTC(m[1], m[2] - 1, m[3]));
            }
          }
          catch (e) {
          }
          return null;
        })(time);

        return date && !isNaN(date.getTime()) ? date : null;
      },

      // Do the same as "new Date()", but treat time as local/UTC
      dateNow: function(){
        var date = new Date;
        return new Date(date.getTime() - date.getTimezoneOffset() * Z.Date.oneMinute);
      },

      time: function(time){
        return Z.Date.date(time).getTime();
      },

      now: function(){
        return Z.Date.dateNow().getTime();
      },

      midnight: function(time){
        return Z.Date.date(time).setUTCHours(0, 0, 0, 0);
      },

      today: function(){
        return Z.Date.midnight(Z.Date.now());
      },

      isToday: function(time){
        return Z.Date.midnight(time) == Z.Date.today();
      },

      formatNumberDate: function(time, sep){
        return Z.Date(time).format(['{Y}', '{MM}', '{DD}'].join(typeof sep != "undefined" ? sep : '-'));
      },

      formatMdyDate: function(time, sep){
        return Z.Date(time).format(['{M}', '{D}', '{Y}'].join(typeof sep != "undefined" ? sep : '/'));
      },

      formatNumberMonth: function(time, sep){
        return Z.Date(time).format(['{Y}', '{MM}'].join(typeof sep != "undefined" ? sep : '-'));
      },

      formatLongDate: function(time, weekDay){
        return Z.Date(time).format((weekDay ? '{Sunday}, ' : '') +
        '{January} {D}, {Y}');
      },

      formatMonthYear: function(time){
        return Z.Date(time).format('{January} {Y}');
      },

      formatCalendarDate: function(time){
        return Z.Date(time).format('{Jan} {D}');
      },

      formatWeekDay: function(time){
        return Z.Date(time).format('{Sunday}');
      },

      formatShortTime: function(time){
        return Z.Date(time).hmm();
      },

      formatTimeRange: function(first, last){
        first = Z.Date.formatShortTime(first);
        if (!last){
          return first;
        }
        else{
          last = Z.Date.formatShortTime(last);
          return first + '&#8211;' + last;
        }
      },

      numberFromShortMonth: function(shortMonth){
        var months = {
          Jan: 0,
          Feb: 1,
          Mar: 2,
          Apr: 3,
          May: 4,
          Jun: 5,
          Jul: 6,
          Aug: 7,
          Sep: 8,
          Oct: 9,
          Nov: 10,
          Dec: 11
        };
        return months[shortMonth.slice(0, 3)];
      },

      // Functions below used only in day picker - move to that file when refactoring

      addDaysAtMidnight: function(time, days){
        time = Z.Date.midnight(time);
        if (typeof days == 'function'){
          days = days(time);
        }
        var date = Z.Date.date(time);
        return date.setUTCDate(date.getUTCDate() + days);
      },

      nextWeek: function(time){
        return Z.Date.addDaysAtMidnight(time, 7);
      },

      nextDay: function(time){
        return Z.Date.addDaysAtMidnight(time, 1);
      },

      beginWeek: function(time){
        return Z.Date.beginPeriod(time, 'getUTCDay', 0);
      },

      beginMonth: function(time){
        return Z.Date.beginPeriod(time, 'getUTCDate', 1);
      },

      beginPeriod: function(time, getter, first){
        var date = Z.Date.date(time);
        return Z.Date.addDaysAtMidnight(time, function(time){
          return first - date[getter]();
        });
      },

      isWeekend: function(time){
        var date = Z.Date.date(time);
        switch (date.getUTCDay()) {
          case 0:
          case 6:
            return true;
          default:
            return false;
        }
      },

      isToday: function(time){
        return Z.Date.midnight(time) == Z.Date.today();
      },

      firstWeekOfMonth: function(time){
        return Z.Date.beginWeek(Z.Date.beginMonth(time));
      },

      addMonth: function(time, incr){
        var date = Z.Date.date(Z.Date.beginMonth(time));
        return date.setUTCMonth(date.getUTCMonth() + incr);
      }
    });

    /* Prepare Zvents namespace with common properties and functions */
    Z.Object.update(ZWidgets, {
      widgets: {},

      configMerge: function(to_config, in_config){
        // Merge contents of in_config into to_config
        if (!to_config) {
          to_config = {};
        }
        for (param in in_config) {
          if (to_config[param] && typeof to_config[param] == "object") {
            // If the contents in to_config is another object, then
            // merge with the contents of in_config recursively.
            arguments.callee(to_config[param], in_config[param]);
          }
          else {
            to_config[param] = in_config[param];
          }
        }
      },

      overrideRenderers: function(widget, renderers){
        for (var renderer in renderers){
          if (renderer.substring(0, 6) == "render" && typeof widget[renderer] == "function"){
            widget[renderer] = renderers[renderer];
          }
          else{
            throw "Invalid renderer: " + renderer;
          }
        }
      },

      makeJQueryPlugin: function(widget){
        return function(config){
          this.each(function(){
            if (typeof config == "undefined"){
              config = {};
            }
            config.inline = false;
            config.id = this.id;
            var w = new widget(config);
            $(this).html(w.render()).data('widget', w);
          });
          return this;
        };
      },

      pad: function(v, n){
        return !n ? v : (1000000000000000 + v + '').slice(-n);
      }
    });

    /* Support classes */
    function Loader(){
      this.jsons_cache = {};
      this.jsonp_fun_cache = {};
      this.request_cnt = 0;
    }

    Loader._callback_count = 0;

    Loader.prototype = {
      json: function(url, params, cb){
        var self = this;
        var url_and_params = url + $.param(params);
        var json = self.jsons_cache[url_and_params];
        if (typeof json != "undefined") {
          Z.defer(function(){
            cb(json);
          });
          return;
        }

        var jsonp_fun = self.jsonp_fun_cache[url_and_params];
        if (jsonp_fun){
          // If request for url is in progress, the jsonp
          // function will already be defined.  Stack another
          // version of the jsonp function that calls the previous one
          var prev_jsonp = jsonp_fun;
          var new_jsonp = function(response){
            function callback(json){
              $(document).bind('jsonp-callback', function(){
                Z.defer(function(){
                  cb(json)
                });
                self.jsons_cache[full_url] = json;
              }).trigger('jsonp-callback');
            }
            eval(response);
            prev_jsonp(response);
          };
          new_jsonp.jsonp_name = prev_jsonp.jsonp_name;
          self.jsonp_fun_cache[url_and_params] = window[jsonp_fun.jsonp_name] = new_jsonp;
          return;
        }
        var jsonp_name = 'jsp_' + Loader._callback_count;
        Loader._callback_count++;

        function loadScript(){
          params.jsonsp = jsonp_name;
          var full_url = url + '?' + $.param(params);
          var jsonp_fun = function(response){
            function callback(json){
              self.jsons_cache[url_and_params] = json;
              Z.defer(function(){
                cb(json);
              });
            }
            eval(response);
            window[jsonp_name] = null;
            self.jsonp_fun_cache[url_and_params] = null;
            $('head script:last').remove();
          };
          jsonp_fun.jsonp_name = jsonp_name;
          window[jsonp_name] = jsonp_fun;
          var script = document.createElement( 'script' );
          script.type = 'text/javascript';
          script.charset = 'utf-8';
          script.src = full_url;
          document.body.appendChild( script );
        }
        if (Z._doc_ready){
          loadScript();
        }
        else{
          // when the document is ready, load the script
          $(function(){
            loadScript();
          });
        }
      }
    };

    Z.Ajax = {
      loader: new Loader(),

      loadJson: function(url, params, callback, errback){
        return Z.Ajax.loader.json(url, params, callback, errback);
      }
    };

    Z.Css = {
      addRules: function(rules){
        var cssBlocks = [];
        for (rule in rules){
          cssBlocks.push(rule + "{" + rules[rule] + "}");
        }
        var styleEl = document.createElement('style');
        styleEl.setAttribute("type", "text/css");
        if (styleEl.styleSheet) {
            styleEl.styleSheet.cssText = cssBlocks.join('');
        } else {
            styleEl.appendChild(document.createTextNode(cssBlocks.join('')));
        }
        document.getElementsByTagName('head')[0].appendChild(styleEl);
      }
    };

    var _deferCount = 0;
    window['_z_deferFire'] = function(i){
      $(document).trigger('defer-event-' + i);
    };

    Z.defer = function(cb){
      $(document).bind('defer-event-' + _deferCount, cb);
      setTimeout('_z_deferFire(' + _deferCount + ')', 0);
      _deferCount++;
    };
    
    Z.onDocReady = function(cb){
      if (Z._doc_ready){
        cb();
      }
      else{
        $(cb);
      }
    };

  })($ZJQuery, ZWidgets);
}

(function($, Z){
  
  Z.AdaptLayoutSettingsToEventList = function(layout){
    layout.settings.event_list.links_open_new_window = layout.settings.links_open_new_window;
    layout.settings.event_list.site = layout.settings.site;
    layout.settings.event_list.load = layout.settings.load;
    layout.settings.event_list.method = layout.settings.method;
    layout.settings.event_list.max_displayed = layout.settings.max_displayed;
    layout.settings.event_list.disable_tracking = layout.settings.disable_tracking;
    layout.settings.event_list.disable_shuffling = layout.settings.disable_shuffling;
    layout.settings.event_list.inline = false;
    if (layout.settings.images && layout.settings.images.ticket_icon){
      if (!layout.settings.event_list.images){
        layout.settings.event_list.images = {};
      }
      layout.settings.event_list.images.ticket_icon = layout.settings.images.ticket_icon;     
    }
    $.extend(layout.settings.event_list.classes, layout.settings.classes);
  }

})($ZJQuery, ZWidgets);
/**
 * @author JThibeaux
 */
(function($, Z){
if (typeof Z.widgets.ZventsWidgetComposer == "undefined") {
  var default_settings = {
    widgets: [],
    inline: true,
    disable_tracking: false
  };
  
  var widget = function(config){
    this.settings = Z.Object.update({}, default_settings);
    this.settings = Z.Object.update(this.settings, config);
    
    if (this.settings.inline) {
      document.write(this.render());
    }
  };
  
  widget.prototype = {
    render: function(){
      var rendered_widgets = [];
      var i;
      for (i in this.settings.widgets) {
        var widget_info = this.settings.widgets[i];
        if (typeof widget_info == "string") {
          rendered_widgets.push(widget_info);
        }
        else 
          if (typeof widget_info == "object") {
            var func = eval(widget_info[0]);
            var config = {};
            if (widget_info[1]) {
              config = eval(widget_info[1]);
            }
            config.inline = false;
            config.disable_tracking = this.settings.disable_tracking;
            var widget = new func(config);
            rendered_widgets.push(widget.render());
          }
      }
      return rendered_widgets.join('');
    }
  };
  
  $.fn.ZventsWidgetComposer = Z.makeJQueryPlugin(widget);
  
  Z.widgets.Composer = widget;
  
}})($ZJQuery, ZWidgets);
// Zvents Event List - Copyright 2009 Zvents, Inc. All rights reserved. http://www.zvents.com/
(function($, Z){
if (typeof Z.widgets.EventList == "undefined") {
  var default_settings = {
    id: null,
    partner_id: 0,
    venues_only: false,
    show_images: false,
    show_date: true,
    max_title: 40,
    max_venue_name: 40,
    sort: true,
    site: 'http://www.zvents.com',
    method: 'search',
    hide_on_empty: false,
    include_quantcast: true,
    disable_shuffling: false,
    links_open_new_window: false,
    labels: {
      loading: 'Loading&#8230;',
      sponsored: 'Sponsored',
      today: 'today',
      tomorrow: 'tomorrow',
      prompt_tickets_now: 'ON SALE NOW',
      prompt_tickets_future: 'ON SALE {day}',
      ticket_icon: 'Ticket'
    },
    classes: {
      block: 'ZventsEventList',
      loading: 'ZventsLoading',
      loading_text: 'ZventsTT',
      event_list: 'ZventsEventList',
      sponsored_label: 'ZventsSponsoredLabel',
      sponsored_list: 'ZventsSponsoredList',
      date: 'ZventsEventDate',
      event: 'ZventsEvent',
      event_time: 'ZventsEventTime',
      event_link: 'ZventsEventName',
      venue_link: 'ZventsEventName',
      venue: 'ZventsVenue',
      image_link: 'ZventsImageLink',
      image: 'ZventsImage',
      tickets_prompt: 'ZventsTicketsPrompt',
      ticket_icon: 'ZventsTicketIcon',
      ticket_icon_link: 'ZventsTicketIcon'
    },
    images: {
      spinner: 'http://images.zvents.com/images/spinner16.gif',
      ticket_icon: null
    },
    selector: null,
    inline: true,
    load: {
      spn_limit: 1
    },
    image_width: 66,
    image_height: 66,
    base_css: {
      ".ZventsEventList, .ZventsSponsoredList": "list-style-type: none;margin: 0;padding: 3px;width: auto",
      ".ZventsSponsoredLabel": "color: #888;font-weight:bold",
      ".ZventsSponsoredList": "border: solid 1px #ccc;",
      ".ZventsEventList li": "display: block;margin: 0;padding: 0;",
      ".ZventsSponsoredList li": "display: block;margin: 0;padding: 0;",
      ".ZventsImage": "margin: 3px;vertical-align: middle;",
      ".ZventsTicketsPrompt": "text-transform:uppercase"
    },
    disable_tracking: false,
    tracker: {
      disable_alive: true,
      params: {
        src: "widget"
      }
    }
  };
  
  // used to generate unique ids for links across multiple instances.
  var el_link_count = 0;
  
  var method_cm_mapping = {
    search: "search",
    featured_events: "featured",
    hot_tickets: "hot_tickets",
    performer_events: "performer_events",
    recently_created: "recently_created",
    related_events: "related"
  };
  
  var widget = function(config){
  
    var self = this;
    var undefined;
    
    this.settings = {};
    Z.Object.update(this.settings, default_settings);
    Z.Object.update(this.settings, config);
    
    /* make sure sponsored request includes at least 1 listing */
    if (this.settings.load.ssrss) {
      this.settings.load.spn_limit = this.settings.load.ssrss;
      delete this.settings.load['ssrss'];
    }
    if (this.settings.load.spn_limit < 1) 
      this.settings.load.spn_limit = 1;
    
    if (!this.settings.disable_shuffling){
      this.settings.load.rand_spn = this.settings.load.spn_limit * 5;    
    }
    
    /* update tracker settings */
    this.settings.tracker.params.pid = this.settings.partner_id;
    if (!this.settings.tracker.params.cm) {
      this.settings.tracker.params.cm = method_cm_mapping[this.settings.method];
    }
    if (!this.settings.tracker.params.site) {
      this.settings.tracker.params.site = this.settings.site;
    }
    
    if (this.settings.renderers) {
      Z.overrideRenderers(this, this.settings.renderers);
    }
    
    Z.Css.addRules(this.settings.base_css);
    if (this.settings.css) {
      Z.Css.addRules(this.settings.css);
    }
    if (typeof this.settings.load.st == "undefined") {
      if (this.settings.venues_only) {
        this.settings.load.st = "venue";
      }
      else {
        this.settings.load.st = "event";
      }
    }
    
    this.url = this.settings.site + '/partner_json/' + this.settings.method;
    this.today = Z.Date.today();
    
    if (!this.settings.selector && this.settings.id) {
      this.selector = "#" + this.settings.id;
    }
    else {
      this.selector = this.settings.selector;
    }
    
    if (!this.selector) {
      throw new Error('Widget requires id or selector in config.');
    }
    
    if (!this.settings.disable_tracking) {
      this.tracker = new Zvents.Tracker(this.settings.tracker);
    }
    else{
      /* if tracking is disabled, we don't want quantcast either */
      this.settings.include_quantcast = false;
    }
    
    if (this.settings.inline) {
      document.write(this.render());
    }
  };
  
  function _tracker_ids_from_listings(type, listings){
    var ids = [];
    if (listings) {
      for (var i = 0; i < listings.length; i++) {
        var l = listings[i];
        ids.push(type + ":" + l.id);
      }
    }
    return ids.join(",");
  }
  
  function _updateRanks(items){
    for (var i = 0; i < items.length; i++) {
      items[i].rank = i + 1;
    }
  }
  
  function _isEmptyDataSet(data){
    var content = data.content;
    return (!content.venue_count &&
    !content.event_count &&
    !content.sponsored_event_count);
  }
  
  widget.EV_EVENTS_LOADED = 'events-loaded';
  widget.prototype = {
    EV_EVENTS_LOADED: widget.EV_EVENTS_LOADED,
    
    load: function(){
      var self = this;
      Z.Ajax.loadJson(self.url, self.settings.load, Z.Object.bindMethod(self, self.loadResponse));
    },
    
    trackView: function(type, organic_listings, sponsored_items, identifier){
      if (this.tracker) {
        this.tracker.notify({
          type: "view",
          oids: _tracker_ids_from_listings(type, organic_listings),
          spids: _tracker_ids_from_listings(type, sponsored_items),
          search: identifier
        });
      }
    },
    
    extractObjectFromAnchor: function(anchor){
      var item = this.link_to_item_map[anchor.id];
      return {
        rank: item.rank,
        type: item.type,
        sponsored: item.sponsored,
        id: item.id
      };
    },
    
    trackClick: function(anchor, rank, type, id, sponsored){
      if (this.tracker) {
        var typed_id = type + ":" + id;
        return this.tracker.click({
          rank: rank,
          from: typed_id,
          to: typed_id,
          sp: sponsored
        }, anchor);
      }
      return true;
    },
    
    attachClickTrackers: function(){
      var self = this;
      $(self.selector).find('a').click(function(){
        var info = self.extractObjectFromAnchor(this);
        if (info) {
          return self.trackClick(this, info.rank, info.type, info.id, info.sponsored);
        }
        return true;
      });
    },
    
    loadResponse: function(data){
      var self = this;
      $(function(){
        // need to ensure doc is fully loaded before manipulating DOM
        self.response = data.rsp;
        switch (self.response.status) {
          case 'error':
            $(self.selector).html(self.renderError(self.response.msg));
            break;
          case 'ok':
            self.link_to_item_map = {};
            
            if (self.settings.include_quantcast && !_isEmptyDataSet(self.response)){
              /* quantcast tag */
              Z.onDocReady(function(){
                if (typeof _qoptions == 'undefined') {
                  var quantcast_tag = [
                    '<script type="text/javascript">',
                    '_qoptions={',
                    'qacct:"p-54UqpxMM201CU"',
                    '};',
                    '</script>',
                    '<script type="text/javascript" src="http://edge.quantserve.com/quant.js"></script>'].join('');
                  $('body').append(quantcast_tag);
                }
              });
            }
            $(self.selector).html(self.renderListings(self.response));
            self.attachClickTrackers();
            break;
          default:
            $(self.selector).html('');
            break;
        }
        $(self.selector).trigger(self.EV_EVENTS_LOADED);
      });
    },
    
    render: function(){
      html = this.renderLoading();
      if (this.settings.load) {
        this.load();
      }
      return html;
    },
    
    renderError: function(error){
      console.log(error);
    },
    
    prepareVenues: function(data){
      var content = data.content;
      var venues = content.venues || [];
      var venue;
      
      venues.total = content.venue_count;
      venues.byId = {};
      
      for (var v = 0, n = venues.length; v < n; v++) {
        venue = venues[v];
        venue.sponsored = false;
        venue.type = "venue";
        venue.events = [];
        venues.byId[venue.id] = venue;
      }
      if (typeof this.settings.load.limit != "undefined") {
        /* if a limit was set, we need to truncate the list
         * at that limit in case any parent venues were added
         */
        venues = venues.splice(0, this.settings.load.limit);
      }
      
      _updateRanks(venues);
      
      return venues;
    },
    
    prepareEvent: function(event, venues){
      var venue = event.venue = venues.byId[event.venue_id];
      if (venue) {
        if (venue.parent_id) {
          venue = event.venue = venues.byId[venue.parent_id];
        }
        venue.events[venue.events.length] = event;
      }
      event.starttime = Z.Date.time(event.starttime);
      event.date = Z.Date.midnight(event.starttime);
      if (event.endTime) {
        event.endtime = Z.Date.time(event.endTime);
      }
      
      if (event.sponsored && event.tickets_on_sale) {
        var on_sale_date = Z.Date.midnight(Z.Date.time(event.tickets_on_sale));
        var delta = (this.today - on_sale_date);
        if (delta <= 0) {
          event.tickets_prompt = this.settings.labels.prompt_tickets_future.replace('{day}', this.renderDay(on_sale_date));
        }
        else 
          if (delta < (Z.Date.oneDay * 14)) {
            event.tickets_prompt = this.settings.labels.prompt_tickets_now;
          }
      }
    },
    
    prepareEvents: function(data){
      var content = data.content;
      var events = content.events || [];
      var sponsored_events = content.sponsored_events || [];
      var venues = content.venues || [];
      
      events.repeats = 0;
      events.total = content.event_count ? content.event_count : 0;
      sponsored_events.repeats = 0;
      sponsored_events.total = content.sponsored_event_count ? content.sponsored_event_count : 0;
      
      venues.total = content.venue_count;
      venues.byId = {};
      events.byId = {};
      sponsored_events.byId = {};
      
      var v, n, e, venue, event;
      for (v = 0, n = venues.length; v < n; v++) {
        venue = venues[v];
        venue.events = [];
        venue.type = "venue";
        venues.byId[venue.id] = venue;
      }
      
      for (e = 0, n = sponsored_events.length; e < n; e++) {
        event = sponsored_events[e];
        event.sponsored = true;
        event.type = "event";
        sponsored_events.byId[event.id] = event;
        this.prepareEvent(event, venues);
      }
      
      for (e = 0, n = events.length; e < n; e++) {
        event = events[e];
        event.sponsored = false;
        event.type = "event";
        events.byId[event.id] = event;
        this.prepareEvent(event, venues);
      }
      
      if (this.settings.sort) {
        Z.Array.sort_by_property(sponsored_events, 'starttime');
        Z.Array.sort_by_property(events, 'starttime');
      }
      
      /* truncate organic events list */
      if (typeof this.settings.max_displayed != "undefined" &&
      (events.length + sponsored_events.length) > this.settings.max_displayed) {
        if (sponsored_events.length >= this.settings.max_displayed) {
          events = [];
          if (sponsored_events.length > this.settings.max_displayed){
            sponsored_events.splice(this.settings.max_displayed, sponsored_events.length - this.settings.max_displayed);
          }
        }
        else {
          events.splice(this.settings.max_displayed - sponsored_events.length, events.length - (this.settings.max_displayed - sponsored_events.length));
        }
      }
      
      _updateRanks(events);
      _updateRanks(sponsored_events);
      
      return {
        sponsored: sponsored_events,
        organic: events
      };
    },
    
    renderListings: function(data){
      if (this.settings.hide_on_empty && _isEmptyDataSet(data)) {
        $(this.selector).hide();
        return '';
      }
      else 
        if (this.settings.venues_only) {
          this.venues = this.prepareVenues(data);
          this.trackView("venue", this.venues, [], data.content.identifier);
          return this.renderVenues(this.venues);
        }
        else {
          this.events = this.prepareEvents(data);
          this.trackView("event", this.events.organic, this.events.sponsored, data.content.identifier);
          return this.renderEvents(this.events);
        }
    },
    
    renderDay: function(date){
      if (date == this.today) {
        return this.settings.labels.today;
      }
      if (date == this.today + Z.Date.oneDay) {
        return this.settings.labels.tomorrow;
      }
      else {
        return Z.Date(date).format(date < this.today + Z.Date.oneDay * 7 ? '{Sunday}' : '{M}/{DD}');
      }
    },
    
    renderDate: function(event){
      if (this.settings.show_date === false) {
        return '';
      }
      else {
        return this.renderDay(event.date);
      }
    },
    
    renderTime: function(event){
      if (this.settings.show_time === false) {
        return '';
      }
      else {
        var date = Z.Date(event.starttime);
        var hours = date.date.getUTCHours();
        var minutes = date.date.getUTCMinutes();
        return date.format(minutes ? '{h}:{mm} {am}' : {
          0: 'Midnight',
          12: 'Noon'
        }[hours] ||
        '{h} {am}');
      }
    },
    
    listingLinkAttrs: function(listing, rank, sponsored){
      el_link_count++;
      var link_id = "z_link_" + this.settings.id + '_' + el_link_count;
      this.link_to_item_map[link_id] = {
        id: listing.id,
        type: listing.type,
        rank: rank,
        sponsored: sponsored
      };
      return [' id="', link_id, '" href="', this.settings.site, listing.zurl, '" '].join("");
    },
    
    renderListingLink: function(listing, content, link_class){
      if (!link_class) {
        link_class = this.settings.classes.event_link;
      }
      return [, '<a ', 
        this.settings.links_open_new_window ? ' target="_blank" ': '', 
        this.listingLinkAttrs(listing, listing.rank, listing.sponsored), 
        ' class="', link_class, '" >', 
        content, '</a>'].join("");
    },
    
    renderSponsoredLabel: function(){
      return ['<label class="', this.settings.classes.sponsored_label, '">', this.settings.labels.sponsored, '</label>'].join('');
    },
    
    renderEventName: function(event){
      return this.renderListingLink(event, Z.String.truncate(event.name, this.settings.max_title));
    },
    
    renderEventVenueName: function(event){
      return ['<a class="', 
        this.settings.links_open_new_window ? ' target="_blank" ': '', 
        this.settings.classes.venue_link, '" ', 
        this.listingLinkAttrs(event.venue, event.rank, event.sponsored), ' >',
        ZWidgets.String.truncate(event.venue.name, this.settings.max_venue_name), '</a>'].join('');
    },
    
    renderSponsoredEvent: function(event, i){
      return this.renderEvent(event, i);
    },
    
    renderEvent: function(event, i){
      var date = this.renderDate(event);
      if (date) {
        date = ['<span class="', this.settings.classes.date, '">', date, '</span>', ' '].join('');
      }
      return ['<li class="', this.settings.classes.event, '">', this.settings.show_images ? this.renderImage(event) : '', '<span class="', this.settings.classes.event_time, '">', this.renderTime(event), '</span>', ' ', date, this.renderEventName(event), '</li>'].join('');
    },
    
    renderSponsoredEvents: function(events){
      if (events && events.length > 0) {
        return [this.renderSponsoredLabel(), '<ul class="', this.settings.classes.sponsored_list, '">', Z.Array.mapWithIndex(events, Z.Object.bindMethod(this, this.renderSponsoredEvent)).join(''), '</ul>'].join('');
      }
      else {
        return '';
      }
    },
    
    renderOrganicEvents: function(events){
      return ['<ul class="', this.settings.classes.event_list, '">', Z.Array.mapWithIndex(events, Z.Object.bindMethod(this, this.renderEvent)).join(''), '</ul>'].join('');
    },
    
    renderEvents: function(events){
      return [this.renderSponsoredEvents(events.sponsored), this.renderOrganicEvents(events.organic)].join('');
    },
    
    renderVenue: function(venue, for_event){
      var rank = for_event ? for_event.rank : venue.rank;
      var sponsored = for_event ? for_event.sponsored : venue.sponsored;
      return ['<li class="', this.settings.classes.venue, '">', 
        this.settings.show_images ? this.renderImage(venue) : '', 
        '<a ', 
        this.settings.links_open_new_window ? ' target="_blank" ': '', 
        this.listingLinkAttrs(venue, rank, sponsored), 
        ' class="', this.settings.classes.venue_link, '" >', 
        Z.String.truncate(venue.name, this.settings.max_title), '</a>', 
        '<br />at ', venue.address, ', ', venue.city, ', ', venue.state, 
        '. ', venue.phone, '</li>'].join('');
    },
    
    renderVenues: function(venues){
      return ['<ul class="', this.settings.classes.event_list, '">', Z.Array.map(venues, Z.Object.bindMethod(this, this.renderVenue)).join(''), '</ul>'].join('');
    },
    
    renderLoading: function(){
      return ['<div class="', this.settings.classes.loading, '">', '<img src="', this.settings.images.spinner, '" />', '<span class="', this.settings.classes.loading_span, '">', this.settings.labels.loading, '</span>', '</div>'].join('');
    },
    
    renderImg: function(src, width, height, title, image_class){
      if (!src) 
        return "";
      return ['<img class="', image_class, '" alt="', title, '" title="', title, '" border="0" src="', src, '" ', width ? ' width="' + width + '" ' : '', height ? ' height="' + height + '" ' : '', '/>'].join('');
    },
    
    renderTicketIcon: function(event){
      if (event.has_tickets){
        return this.renderImgLink(event, this.settings.images.ticket_icon, null, null, this.settings.labels.ticket_icon, this.settings.classes.ticket_icon, this.settings.classes.ticket_icon_link);
      }  
    },
    
    renderImgLink: function(event, src, width, height, title, image_class, image_link_class){
      if (!src) 
        return "";
      return this.renderListingLink(event, this.renderImg(src, width, height, title, image_class), image_link_class);
    },
    
    renderImage: function(event){
      var image = event.images[0];
      if (image) {
        return this.renderImgLink(event, image.url, this.settings.image_width, this.settings.image_height, 'image', this.settings.classes.image, this.settings.classes.image_link);
      }
      else {
        return '';
      }
    }
    
  };
  
  $.fn.ZventsEventList = Z.makeJQueryPlugin(widget);
  
  Z.widgets.EventList = widget;
  
}})($ZJQuery, ZWidgets);

if (typeof zvents_save_jquery != "undefined"){
  jQuery = zvents_save_jquery.jQuery;
  $ = zvents_save_jquery.$;
}

// Zvents Weekly Preview - Copyright 2009 Zvents, Inc. All rights reserved. http://www.zvents.com/
(function($, Z){
if (typeof Z.widgets.EventListLayoutW4 == "undefined") {
  var widget_count = 0; // used to generate unique ids for links across multiple instances.
  var prototype = Z.widgets.EventList.prototype;
  
  var layout = function(config){
    widget_count++;
    
    var self = this;
    
    this.settings = {
      site: "http://www.zvents.com",
      inline: true,
      labels: {
        sponsored: 'Sponsored',
        today: 'today'
      },
      event_list: {
        id: 'z_event_list_layout_W4_' + widget_count,
        labels: {
          prompt_tickets_now: 'BUY NOW',
          prompt_tickets_future: 'BUY {day}'
        },
        max_title: 35,
        show_images: true,
        renderers: {
          renderSponsoredEvents: function(events){
            return self.renderSponsoredEvents(events);
          },
          renderOrganicEvents: function(events){
            return self.renderOrganicEvents(events);
          },
          renderEvent: function(event){
            return self.renderEvent(event);
          },
          renderEventName: function(event){
            return self.renderEventName(event);
          },
          renderDay: function(date){
            return self.renderDay(date);
          },
          renderLoading: function(){
            return '';
          }
        },
        classes: {
          block: '',
          loading: '',
          loading_text: '',
          event_list: '',
          sponsored_label: '',
          date: '',
          event: '',
          event_time: '',
          event_link: '',
          venue_link: '',
          venue: '',
          image_link: '',
          image: 'z-image'
        }
      },
      classes: {
        widget: 'z-eventlist-layoutW4',
        sponsored_list: 'z-sponsored',
        tickets_prompt: 'z-tickets-prompt',
        ticket_icon: 'z-ticket-icon',
        ticket_icon_link: 'z-ticket-icon-link',
        sponsored_block: 'z-sponsored-block',
        sponsored_label: 'z-sponsored-label',
        organic_block: 'z-organic-block',
        heading: 'z-heading',
        location: 'z-location',
        time: 'z-time',
        date: 'z-date'
      },
      labels: {
        ticket_icon: 'Ticket'
      },
      base_css: {
        '.z-eventlist-layoutW4': 'overflow:hidden;width:300px;',
        '.z-eventlist-layoutW4 .z-sponsored-label': 'text-align: right;display:block;font-size:10px;margin-right:2px;line-height:1em;margin-bottom:-2px',
        '.z-eventlist-layoutW4 .z-sponsored-block': 'background-color: #ddd;border: 1px solid #999;',
        '.z-eventlist-layoutW4 ul': 'list-style-type: none;margin:0;padding: 0;',
        '.z-eventlist-layoutW4 li': 'padding: 5px;text-align:left;',
        '.z-eventlist-layoutW4 a': 'text-decoration:none',
        '.z-eventlist-layoutW4 .z-tickets-prompt': 'text-transform: uppercase',
        '.z-eventlist-layoutW4 .z-ticket-icon': 'float:none;margin-left: 5px;margin-top: 2px;'
      },
      load: {
        sponsored: true,
        spn_limit: 3,
        limit: 10,
        fields: 'event.id,event.name,event.zurl,event.starttime,event.venue_id,event.has_tickets,event.tickets_on_sale,venue.name,venue.id'
      },
      method: "search",
      max_displayed: 10,
      disable_tracking: false,
      disable_shuffling: false,
      images: {
        ticket_icon: null
      }
    };
    
    Z.Object.update(this.settings, config);
    
    Z.AdaptLayoutSettingsToEventList(this);
    
    if (this.settings.renderers) {
      Z.overrideRenderers(this, this.settings.renderers);
    }
    Z.Css.addRules(this.settings.base_css);
    if (this.settings.css) {
      Z.Css.addRules(this.settings.css);
    }
    this.event_list = new Z.widgets.EventList(this.settings.event_list);
    if (this.settings.inline) {
      return document.write(this.render());
    }
  };
  
  layout.prototype = {
    render: function(){
      return ["<div id='", this.settings.event_list.id, "' class='", this.settings.classes.widget, "'>", this.event_list.render(), "</div>"].join('');
    },
    
    renderEventName: function(event){
      var max = this.event_list.settings.max_title;
      if (event.tickets_prompt) {
        max = max - event.tickets_prompt.length - 1;
      }
      return this.event_list.renderListingLink(event, Z.String.truncate(event.name, max));
    },
    
    renderSponsoredEvents: function(events){
      if (events && events.length > 0) {
        return ['<div class="', this.settings.classes.sponsored_block, '">', '<label class="', this.settings.classes.sponsored_label, '">', this.settings.labels.sponsored, '</label>', '<ul>', Z.Array.mapWithIndex(events, Z.Object.bindMethod(this.event_list, this.event_list.renderSponsoredEvent)).join(''), '</ul>', '</div>'].join('');
      }
      else {
        return '';
      }
    },
    
    renderOrganicEvents: function(events){
      return ['<div class="', this.settings.classes.organic_block, '">', '<ul>', Z.Array.mapWithIndex(events, Z.Object.bindMethod(this.event_list, this.event_list.renderEvent)).join(''), '</ul>', '</div>'].join('');
    },
    
    renderImage: function(event){
      return this.event_list.renderImage(event);
    },
    
    renderTicketPrompt: function(event){
      if (!event.tickets_prompt) {
        return '';
      }
      return ['<span class="', this.settings.classes.tickets_prompt, '">', event.tickets_prompt, '</span> '].join('');
    },
    
    renderTime: function(event){
      return Z.Date(event.starttime).format('{h} {AM}');
    },
    
    
    renderEvent: function(event){
      return ['<li class="', this.settings.classes.event, '">', '<span class="', this.settings.classes.date, '">', this.renderDay(event.starttime), '</span> ', '<span class="', this.settings.classes.time, '">', this.renderTime(event), '</span> ', this.renderTicketPrompt(event), this.renderEventName(event), this.event_list.renderTicketIcon(event), '</li>'].join('');
    },

    renderDay: function(date){
      if (date == this.today) {
        return this.settings.labels.today;
      }
      else {
        return Z.Date(date).format('{M}/{DD}');
      }
    }
  };
  
  $.fn.ZventsEventListLayoutW4 = Z.makeJQueryPlugin(layout);
  
  Z.widgets.EventListLayoutW4 = layout;
  
}})($ZJQuery, ZWidgets);
new ZWidgets.widgets.Composer({"widgets":["\u003Cdiv id=\"z_wizard_widget_15405\"\u003E",["ZWidgets.widgets.EventListLayoutW4",{"disable_shuffling":"1","css":{},"images":{"ticket_icon":"http://images.zvents.com/images/widget_wizard/ico_tix.gif"},"site":"http://listings.guidelive.com","partner_id":434,"labels":{"sponsored":"Sponsored"},"load":{"where":"","radius":"","cat":"6,32,33","spn_limit":"1","ad_limit":"1","tag":"","what":"","when":"","limit":"9"}}],"\u003C/div\u003E"]});