/* * 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/26 $ * $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=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-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]*?)\/>/g,function(all,front,tag){return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?all:front+">";});var tags=jQuery.trim(elem).toLowerCase(),div=context.createElement("div");var wrap=!tags.indexOf("",""]||!tags.indexOf("",""]||tags.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"","
"]||!tags.indexOf("",""]||(!tags.indexOf("",""]||!tags.indexOf("",""]||jQuery.browser.msie&&[1,"div
","
"]||[0,"",""];div.innerHTML=wrap[1]+elem+wrap[2];while(wrap[0]--)div=div.lastChild;if(jQuery.browser.msie){var tbody=!tags.indexOf(""&&tags.indexOf("=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&¬xml&&!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&¬xml&&name=="style")return jQuery.attr(elem.style,"cssText",value);if(set)elem.setAttribute(name,""+value);var attr=msie&¬xml&&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*",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 im[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=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=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=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=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("
").append(res.responseText.replace(//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;ithis.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);};});})();(function($) { $.poll = function(target, data, options) { options = $.extend({ animate: true, columns: 1 },options); var totalVotes = 0; for(var i = 0; i < data.length; i++) { totalVotes += data[i].data; } var currentColumn = 0; var appendString = ""; for(var i = 0; i < data.length; i++) { if(currentColumn == 0) { appendString = "
"; } var percent = Math.floor(data[i].data * 100 / totalVotes); var bar_percent = percent + 2; var show_bar_percent = bar_percent; if(options.animate) { show_bar_percent = 2; } appendString += "
"; appendString += "
"+ "
"+ "
"+ percent + "%
"+ "
"; appendString += "
"+ data[i].label +"
"; appendString += "
"; currentColumn++; if(currentColumn == options.columns || data.length - 1 == i) { appendString += "
"; target.append(appendString); currentColumn = 0; } if(options.animate) { setTimeout("$('#"+target[0].id+" #CVC_poll_bar"+i+"').animate({'width':"+bar_percent+"},'slow');", 2000); } } target.append( '
'+totalVotes + " total votes
" ); }; })(jQuery);// helper for returning the weekends in a period function weekendAreas(plotarea) { var areas = []; var d = new Date(plotarea.xmin); // go to the first Saturday d.setDate(d.getDate() - ((d.getDay() + 1) % 7)) d.setSeconds(0); d.setMinutes(0); d.setHours(0); var i = d.getTime(); do { // when we don't set y1 and y2 the rectangle // automatically extends to infinity in those directions areas.push({ x1: i, x2: i + 2 * 24 * 60 * 60 * 1000 }); i += 7 * 24 * 60 * 60 * 1000; } while (i < plotarea.xmax); return areas; } if (document.images) { preload_image = new Image(); preload_image.src="site_image/audio_pause.gif"; } jQuery.extend({ playCompleted: function() { if($.playingID != "") { var jq = $("#convocast #"+$.playingID); var p = $("a:first-child",jq); $(".CVC_stopButton",jq).hide(); p[0].playing = null; p[0].stopPoint = 0; p.addClass("CVC_playButton"); p.removeClass("CVC_pauseButton"); $.playingID = ""; } }, playingId: "", commentPlayer: function(callback) { callback = callback || function(){}; $nodes = $("#convocast .CVC_commentPlayerControls, .CVC_pop .CVC_commentPlayerControls"); $nodes.each(function() { var $jq = $(this); $jq.html("
Loading...
"); var p = $("a:first-child",$jq); p.addClass("CVC_playButton"); var s = $(".CVC_stopButton",$jq); p.click(function(){ if(this.className =="CVC_pauseButton") { this.stopPoint = $('#convocast #mpl')[0].stopAudio(); this.className = "CVC_resumeButton"; } else { if($('#convocast #mpl')[0] && $('#convocast #playinfo')[0]) $('#convocast #mpl')[0].pause(); var oldTime = $('#convocast #mpl')[0].playAudio($jq.attr("file"),this.stopPoint); $.playingID = $jq[0].id; if(oldTime != -1) { $("#convocast .CVC_commentPlayerControls a.CVC_pauseButton, .CVC_pop .CVC_commentPlayerControls a.CVC_pauseButton").each(function(){ this.className = "CVC_resumeButton"; this.stopPoint = oldTime; }); } else { $('#'+$.playingID+' .CVC_comment_loading').animate({width: "show"}); setTimeout(function(){$('#'+$.playingID+' .CVC_comment_loading').animate({width: "hide"});}, 2500); } this.className = "CVC_pauseButton"; s.show(); } }); s.click(function(){ $('#convocast #mpl')[0].stopAudio($jq.attr("file")); $('#'+$.playingID+' .CVC_comment_loading').animate({width: "hide"}); s.hide(); p[0].playing = null; p[0].stopPoint = 0; p[0].className = "CVC_playButton"; callback($jq); }); }); } }); jQuery.fn.fastSerialize = function() { var a = []; $('input,textarea,select,button', this).each(function() { var n = this.name; var t = this.type; if ( !n || this.disabled || t == 'reset' || (t == 'checkbox' || t == 'radio') && !this.checked || (t == 'submit' || t == 'image' || t == 'button') && this.form.clicked != this || this.tagName.toLowerCase() == 'select' && this.selectedIndex == -1) return; if (t == 'image' && this.form.clicked_x) return a.push( {name: n+'_x', value: this.form.clicked_x}, {name: n+'_y', value: this.form.clicked_y} ); if (t == 'select-multiple') { $('option:selected', this).each( function() { a.push({name: n, value: this.value}); }); return; } a.push({name: n, value: this.value}); }); return a; }; (function($) { $.heartBeat = function(func, delay) { delay = delay || 60; delay = delay * 1000; var id = null; var beat = function() { if (id) clearTimeout(id); func(); id = setTimeout(beat, delay); }; id = setTimeout(beat, delay); }; $.fn.hoverIntent = function(f,g) { // default configuration options var cfg = { sensitivity: 7, interval: 100, timeout: 0 }; // override configuration options with user supplied object cfg = $.extend(cfg, g ? { over: f, out: g } : f ); // instantiate variables // cX, cY = current X and Y position of mouse, updated by mousemove event // pX, pY = previous X and Y position of mouse, set by mouseover and polling interval var cX, cY, pX, pY; // A private function for getting mouse position var track = function(ev) { cX = ev.pageX; cY = ev.pageY; }; // A private function for comparing current and previous mouse position var compare = function(ev,ob) { ob.hoverIntent_t = clearTimeout(ob.hoverIntent_t); // compare mouse positions to see if they've crossed the threshold if ( ( Math.abs(pX-cX) + Math.abs(pY-cY) ) < cfg.sensitivity ) { $(ob).unbind("mousemove",track); // set hoverIntent state to true (so mouseOut can be called) ob.hoverIntent_s = 1; return cfg.over.apply(ob,[ev]); } else { // set previous coordinates for next time pX = cX; pY = cY; // use self-calling timeout, guarantees intervals are spaced out properly (avoids JavaScript timer bugs) ob.hoverIntent_t = setTimeout( function(){compare(ev, ob);} , cfg.interval ); } }; // A private function for delaying the mouseOut function var delay = function(ev,ob) { ob.hoverIntent_t = clearTimeout(ob.hoverIntent_t); ob.hoverIntent_s = 0; return cfg.out.apply(ob,[ev]); }; // A private function for handling mouse 'hovering' var handleHover = function(e) { // next three lines copied from jQuery.hover, ignore children onMouseOver/onMouseOut var p = (e.type == "mouseover" ? e.fromElement : e.toElement) || e.relatedTarget; while ( p && p != this ) { try { p = p.parentNode; } catch(e) { p = this; } } if ( p == this ) { return false; } // copy objects to be passed into t (required for event object to be passed in IE) var ev = jQuery.extend({},e); var ob = this; // cancel hoverIntent timer if it exists if (ob.hoverIntent_t) { ob.hoverIntent_t = clearTimeout(ob.hoverIntent_t); } // else e.type == "onmouseover" if (e.type == "mouseover") { // set "previous" X and Y position based on initial entry point pX = ev.pageX; pY = ev.pageY; // update "current" X and Y position based on mousemove $(ob).bind("mousemove",track); // start polling interval (self-calling timeout) to compare mouse coordinates over time if (ob.hoverIntent_s != 1) { ob.hoverIntent_t = setTimeout( function(){compare(ev,ob);} , cfg.interval );} // else e.type == "onmouseout" } else { // unbind expensive mousemove event $(ob).unbind("mousemove",track); // if hoverIntent state is true, then call the mouseOut function after the specified delay if (ob.hoverIntent_s == 1) { ob.hoverIntent_t = setTimeout( function(){delay(ev,ob);} , cfg.timeout );} } }; // bind the function to the two event listeners return this.mouseover(handleHover).mouseout(handleHover); }; })(jQuery);// Based on Thickbox 3 by Cody Lindley (http://www.codylindley.com) //Preload images var imgLoader = {};//new Image();// preload image imgLoader.src = "/site_image/loadingAnimation.gif";//no convocast path defined at this time thus this generates an error jQuery.extend({ popup: new function() { var z = this; var isAPI = false; var isSportsTalk = false; var width = 400; var height = 220; var confirm = '
' +'

$text$

' +'
' +'
' +'
' +'Yes' +'
' +'
' +'No' +'
' +'
'; var warning = '
' +'

Alert

' +'
' +'
' +'

$text$

' +'' +'
'; //function called when the user clicks on a jbox link z.show = function(ref,caption, url) { var o = jQuery.extend({ height: 220, width: 400, type: "ajax", showHeader: true }, arguments[3] || {}); $('.CVC_pop,#convocastHideSelect').stop().remove(); z.remove(); width = o.width; Convocast.hideFlash(); if (typeof document.body.style.maxHeight === "undefined") {//if IE 6 //$("body","html").css({height: "100%", width: "100%"}); //$("html").css("overflow","hidden"); if (document.getElementById("convocastHideSelect") === null) { $("body").append("
"); $("#convocastOverlay").click(z.remove); } }else{//all others if($("#convocastOverlay").length == 0){ if($.browser.mozilla && /Win/.test(navigator.platform)) { $("body").append("
"); } else { $("body").append("
"); $("#convocastOverlay").click(z.remove); } } } $('.CVC_pop #loading').show();//show loader if($(".CVC_pop").css("display") != "block"){ $(".CVC_pop").append( '' +"
"); }else{ $("#windowTitle").html(caption); } $("#CVC_closeButton").click(z.remove); $.popup.position(); $(".CVC_pop").show(); if(o.type == "ajax") { // Do ajax if(isAPI) { $.getScriptXS(Convocast.ajaxPath +"?action=popup&target=CVC_popbody&popup="+url+"&"+$.param(Convocast.clientInfo)+"&"+$.param(Convocast.current)); } else if(isSportsTalk) { $.ajax({data:"action=popup&target=CVC_popbody&popup="+url}); } else { rpp("m="+url,$(".CVC_pop .CVC_popbody")[0],true); } } else if(o.type== "confirm") { var temp = confirm.replace("$text$",o.text); $(".CVC_pop #loading").remove(); $('.CVC_pop .CVC_popbody').html(temp); $("#confirmYes").click(url); $("#confirmYes").click(z.remove); } else if(o.type== "alert") { var temp = warning.replace("$text$",url); $(".CVC_pop #loading").remove(); $('.CVC_pop .CVC_popbody').html(temp); } document.onkeyup = function(e){ if (e == null) { // ie keycode = event.keyCode; } else { // mozilla keycode = e.which; } if(keycode == 27){ // close z.remove(); } }; }; z.remove = function() { $("#convocastOverlay").unbind("click"); $("#CVC_closeButton").unbind("click"); $('#convocastOverlay, #loading').remove(); $('.CVC_pop #recorder_content').remove(); $(".CVC_pop").animate({height: "hide"},'slow', function(){ $('.CVC_pop,#convocastHideSelect').remove(); $("#convocast .CVC_flashContainer").each(function(){ $jq = $(this); if(!$jq.hasClass('player_hidden')) { $jq.css("visibility", "visible"); } });//.css("visibility", "visible"); }); if (typeof document.body.style.maxHeight == "undefined") {//if IE 6 //$("body","html").css({height: "auto", width: "auto"}); //$("html").css("overflow",""); } document.onkeydown = ""; return false; }; z.position = function(w) { //if(arguments.length == 1) { width = $(".CVC_pop").width()+26;//w; //} $(".CVC_pop #content").css({"width":width}); $(".CVC_pop").css({marginLeft: '-' + parseInt((width / 2),10) + 'px', width: width + 'px', top: ($(window).scrollTop()+140)}); }; z.confirm = function(ref,text, action) { $.popup.show(ref,"Confirm", action, {height:100, width:200, type: "confirm", text: text}); }; z.alert = function(ref,text) { $.popup.show(ref,"Alert", text, {height:100, width:200, type: "alert"}); }; z.setAPI = function() { isAPI = true; } z.setST = function() { isSportsTalk = true; } } }); /* * jQuery Form Plugin * version: 2.19 (02-FEB-2009) * @requires jQuery v1.2.2 or later * * Examples and documentation at: http://malsup.com/jquery/form/ * Dual licensed under the MIT and GPL licenses: * http://www.opensource.org/licenses/mit-license.php * http://www.gnu.org/licenses/gpl.html */ ;(function($) { /* Usage Note: ----------- Do not use both ajaxSubmit and ajaxForm on the same form. These functions are intended to be exclusive. Use ajaxSubmit if you want to bind your own submit handler to the form. For example, $(document).ready(function() { $('#myForm').bind('submit', function() { $(this).ajaxSubmit({ target: '#output' }); return false; // <-- important! }); }); Use ajaxForm when you want the plugin to manage all the event binding for you. For example, $(document).ready(function() { $('#myForm').ajaxForm({ target: '#output' }); }); When using ajaxForm, the ajaxSubmit function will be invoked for you at the appropriate time. */ /** * ajaxSubmit() provides a mechanism for immediately submitting * an HTML form using AJAX. */ $.fn.ajaxSubmit = function(options) { // fast fail if nothing selected (http://dev.jquery.com/ticket/2752) if (!this.length) { log('ajaxSubmit: skipping submit process - no element selected'); return this; } if (typeof options == 'function') options = { success: options }; options = $.extend({ url: this.attr('action') || window.location.toString(), type: this.attr('method') || 'GET' }, options || {}); // hook for manipulating the form data before it is extracted; // convenient for use with rich editors like tinyMCE or FCKEditor var veto = {}; this.trigger('form-pre-serialize', [this, options, veto]); if (veto.veto) { log('ajaxSubmit: submit vetoed via form-pre-serialize trigger'); return this; } // provide opportunity to alter form data before it is serialized if (options.beforeSerialize && options.beforeSerialize(this, options) === false) { log('ajaxSubmit: submit aborted via beforeSerialize callback'); return this; } var a = this.formToArray(options.semantic); if (options.data) { options.extraData = options.data; for (var n in options.data) { if(options.data[n] instanceof Array) { for (var k in options.data[n]) a.push( { name: n, value: options.data[n][k] } ) } else a.push( { name: n, value: options.data[n] } ); } } // give pre-submit callback an opportunity to abort the submit if (options.beforeSubmit && options.beforeSubmit(a, this, options) === false) { log('ajaxSubmit: submit aborted via beforeSubmit callback'); return this; } // fire vetoable 'validate' event this.trigger('form-submit-validate', [a, this, options, veto]); if (veto.veto) { log('ajaxSubmit: submit vetoed via form-submit-validate trigger'); return this; } var q = $.param(a); if (options.type.toUpperCase() == 'GET') { options.url += (options.url.indexOf('?') >= 0 ? '&' : '?') + q; options.data = null; // data is null for 'get' } else options.data = q; // data is the query string for 'post' var $form = this, callbacks = []; if (options.resetForm) callbacks.push(function() { $form.resetForm(); }); if (options.clearForm) callbacks.push(function() { $form.clearForm(); }); // perform a load on the target only if dataType is not provided if (!options.dataType && options.target) { var oldSuccess = options.success || function(){}; callbacks.push(function(data) { $(options.target).html(data).each(oldSuccess, arguments); }); } else if (options.success) callbacks.push(options.success); options.success = function(data, status) { for (var i=0, max=callbacks.length; i < max; i++) callbacks[i].apply(options, [data, status, $form]); }; // are there files to upload? var files = $('input:file', this).fieldValue(); var found = false; for (var j=0; j < files.length; j++) if (files[j]) found = true; // options.iframe allows user to force iframe mode if (options.iframe || found) { // hack to fix Safari hang (thanks to Tim Molendijk for this) // see: http://groups.google.com/group/jquery-dev/browse_thread/thread/36395b7ab510dd5d if ($.browser.safari && options.closeKeepAlive) $.get(options.closeKeepAlive, fileUpload); else fileUpload(); } else $.ajax(options); // fire 'notify' event this.trigger('form-submit-notify', [this, options]); return this; // private function for handling file uploads (hat tip to YAHOO!) function fileUpload() { var form = $form[0]; if ($(':input[name=submit]', form).length) { alert('Error: Form elements must not be named "submit".'); return; } var opts = $.extend({}, $.ajaxSettings, options); var s = jQuery.extend(true, {}, $.extend(true, {}, $.ajaxSettings), opts); var id = 'jqFormIO' + (new Date().getTime()); var $io = $('') : $(''); var w = $('
'); var m = full ? $('
') : $(''); w.css('position', full ? 'fixed' : 'absolute'); if (msg) m.css(css); if (!noalpha) w.css($.blockUI.defaults.overlayCSS); if (this.op8) w.css({ width:''+el.clientWidth,height:''+el.clientHeight }); // lame if ($.browser.msie) f.css('opacity','0.0'); $([f[0],w[0],m[0]]).appendTo(full ? 'body' : el); // ie7 must use absolute positioning in quirks mode and to account for activex issues (when scrolling) var expr = false;//$.browser.msie && (!$.boxModel || $('object,embed', full ? null : el).length > 0); if (this.ie6 || expr) { // stretch content area if it's short if (full && $.blockUI.defaults.ie6Stretch && $.boxModel) $('html,body').css('height','100%'); // fix ie6 problem when blocked element has a border width if ((this.ie6 || !$.boxModel) && !full) { var t = this.sz(el,'borderTopWidth'), l = this.sz(el,'borderLeftWidth'); var fixT = t ? '(0 - '+t+')' : 0; var fixL = l ? '(0 - '+l+')' : 0; } // simulate fixed position $.each([f,w,m], function(i,o) { var s = o[0].style; s.position = 'absolute'; if (i < 2) { full ? s.setExpression('height','document.body.scrollHeight > document.body.offsetHeight ? document.body.scrollHeight : document.body.offsetHeight + "px"') : s.setExpression('height','this.parentNode.offsetHeight + "px"'); full ? s.setExpression('width','jQuery.boxModel && document.documentElement.clientWidth || document.body.clientWidth + "px"') : s.setExpression('width','this.parentNode.offsetWidth + "px"'); if (fixL) s.setExpression('left', fixL); if (fixT) s.setExpression('top', fixT); } else { //if (full) s.setExpression('top','(document.documentElement.clientHeight || document.body.clientHeight) / 2 - (this.offsetHeight / 2) + (blah = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + "px"'); s.marginTop = 0; } }); } if (opts.displayMode) { w.css('cursor','default').attr('title', $.blockUI.defaults.closeMessage); m.css('cursor','default'); $([f[0],w[0],m[0]]).removeClass('blockUI').addClass('displayBox'); $().click($.blockUI.impl.boxHandler).bind('keypress', $.blockUI.impl.boxHandler); } else this.bind(1, el); m.append(msg).show(); if (msg.jquery) msg.show(); if (opts.displayMode) return; if (full) { this.pageBlock = m[0]; this.pageBlockEls = $(':input:enabled:visible',this.pageBlock); setTimeout(this.focus, 20); } else this.center(m[0]); }, remove: function(el, opts) { var o = $.extend({}, $.blockUI.defaults, opts); this.bind(0, el); var full = el == window; var els = full ? $('body').children().filter('.blockUI') : $('.blockUI', el); if (full) this.pageBlock = this.pageBlockEls = null; if (o.fadeOut) { els.fadeOut(o.fadeTime, function() { if (this.parentNode) this.parentNode.removeChild(this); }); } else els.remove(); }, boxRemove: function(el) { $().unbind('click',$.blockUI.impl.boxHandler).unbind('keypress', $.blockUI.impl.boxHandler); if (this.boxCallback) this.boxCallback(this.box); $('body .displayBox').hide().remove(); }, // event handler to suppress keyboard/mouse events when blocking handler: function(e) { if (e.keyCode && e.keyCode == 9) { if ($.blockUI.impl.pageBlock && !$.blockUI.defaults.allowTabToLeave) { var els = $.blockUI.impl.pageBlockEls; var fwd = !e.shiftKey && e.target == els[els.length-1]; var back = e.shiftKey && e.target == els[0]; if (fwd || back) { setTimeout(function(){$.blockUI.impl.focus(back)},10); return false; } } } if ($(e.target).parents('div.blockMsg').length > 0) return true; return $(e.target).parents().children().filter('div.blockUI').length == 0; }, boxHandler: function(e) { if ((e.keyCode && e.keyCode == 27) || (e.type == 'click' && $(e.target).parents('div.blockMsg').length == 0)) $.blockUI.impl.boxRemove(); return true; }, // bind/unbind the handler bind: function(b, el) { var full = el == window; // don't bother unbinding if there is nothing to unbind if (!b && (full && !this.pageBlock || !full && !el.$blocked)) return; if (!full) el.$blocked = b; var $e = $(el).find('a,:input'); $.each(['mousedown','mouseup','keydown','keypress','click'], function(i,o) { $e[b?'bind':'unbind'](o, $.blockUI.impl.handler); }); }, focus: function(back) { if (!$.blockUI.impl.pageBlockEls) return; var e = $.blockUI.impl.pageBlockEls[back===true ? $.blockUI.impl.pageBlockEls.length-1 : 0]; if (e) e.focus(); }, center: function(el) { var p = el.parentNode, s = el.style; var l = ((p.offsetWidth - el.offsetWidth)/2) - this.sz(p,'borderLeftWidth'); var t = ((p.offsetHeight - el.offsetHeight)/2) - this.sz(p,'borderTopWidth'); s.left = l > 0 ? (l+'px') : '0'; s.top = t > 0 ? (t+'px') : '0'; }, sz: function(el, p) { return parseInt($.css(el,p))||0; } }; })(jQuery); // Main Class // @param: path - the url of our server grabbed from the request path for this file var Convocast = new function($) { var z = this; var canvas = null; z.clientInfo = { currentBin: "home", key: "", program: "", tz:new Date().getTimezoneOffset()/60 }; z.current = {}; z.path = "http://www.convocast.com/"; z.ajaxPath = z.path + "api.php"; var newViews = ""; z.addView = function(cid) { if(cid){ if(typeof cid == "number") newViews += "&views[]="+cid; else newViews += "&views[]="+cid.attr("ref"); } }; z.viewRequest = function() { if(newViews != "") { $.getScriptXS(Convocast.ajaxPath +"?"+$.param(Convocast.clientInfo) + "&action=update_views" + newViews); newViews = ""; } }; z.vote = function(poll,item) { z.doRequest({ poll: poll, item: item, view: 'poll' }); }; z.binRequest = function(bin,options) { options = options || {}; options = $.extend({},options,{action:"bin",bin:bin}) z.doRequest(options); }; //End Init z.loaded = false z.load = function(key, program) { if(z.loaded){ return; } z.ajaxPath = z.path + "api.php"; z.clientInfo.key = key; z.clientInfo.program = program; canvas = $('#convocast'); if(canvas.length == 0) { alert("Error: There is no div with id='convocast'"); return; } if(!program) { if(program_id = canvas.attr("program")) { z.clientInfo.key = 'microsite'; z.clientInfo.program = program_id; } else { //else fail transparently return; } } extendedRequest = {}; if(episode_id = canvas.attr("episode")) { z.clientInfo.episode = episode_id; extendedRequest = {route:1,bin:'posts'}; } //Do validation (div size etc) check on div if(canvas.attr("embed")) { z.clientInfo.embed = canvas.attr("embed"); } else { z.clientInfo.embed = 'normal'; } // alert(z.clientInfo.embed); //canvas.width(780); canvas.css({"height":"auto","border":"0px solid #3B6299"});//,"border":"1px solid #F1A92D"}); // Check flash player version if(deconcept.SWFObjectUtil.getPlayerVersion().major < 8) { canvas.html("You need Flash 8 or higher to play and post audio on ConvoCast. Click here to download the most recent Flash plugin for your browser."); return; } //z.overloadCSS(); z.createCSSLink(z.path+"css/common.css"); if(jQuery.browser.msie) { z.createCSSLink(z.path+"css/iehacks.css"); } /*if(document.doctype == null) { z.createCSSLink(z.path+"css/nodoctype.css"); }*/ if(z.clientInfo.embed == 'small') { z.createCSSLink(z.path+"css/small.css"); } z.createCSSLink(z.path+"forcestyle.php?program="+z.clientInfo.program+"&"+new Date().getTime()); //do ajax authentication $.popup.setAPI(); //Make sure all popups process through ondemand javascript var hash = location.hash; if(hash == '' || hash == '#') { z.doRequest($.extend({action:"init"},extendedRequest)); } else { z.doRequest({action:"init", hash:hash}); //alert(hash); } $.heartBeat(z.viewRequest); $.ajaxHistory.initialize(z.reset); z.loaded = true; }; z.pageLoaded = function() { //$.ajaxHistory.initialize(z.reset); }; z.reset = function(){ z.doRequest({action:"bin",bin:"home",route:1}); //Convocast.drawers.open("comments"); } z.doAction = function(el,container) { container = container || "CVC_pop"; el = $("#"+container+" #"+el); var data = el.formToArray(); data.push({name:"action","value":el.attr("action")}); if(el.attr("action") != "popup" || el.attr("action") != "processAudio") z.block(); $.getScriptXS(this.ajaxPath +"?"+$.param(data)+"&"+$.param(this.clientInfo)+"&"+$.param(z.current)); }; z.doRequest = function() { var params = jQuery.extend({},{action:"update"}, arguments[0] || {}); if(params.action != "popup" && params.action != "processAudio" && params.action != "quick_look") z.block(); $.getScriptXS(this.ajaxPath +"?"+$.param(params)+"&"+$.param(this.clientInfo)+"&"+$.param(z.current)); }; z.retrieveHistory = function(hash) { $.getScriptXS(this.ajaxPath +"?"+$.param(this.clientInfo)+"&"+hash); }; z.ajaxHistory = function(params) { z.pageReset(); params = $.extend({},z.current,params); $.ajaxHistory.trigger(true,params); }; z.showProfile = function(profile) { //z.pageReset(); //z.drawers.shut(); z.ajaxHistory({action:"bin",bin:"profile",profile:profile}); }; z.drawers = function() { $("#convocast .drawerRight,#convocast .drawerRight_open,#convocast .drawerRight_over").mouseover(function(){ if(this.className == "drawerRight_open") return; this.className = "drawerRight_over"; }).mouseout(function(){ if(this.className == "drawerRight_open") return; this.className = "drawerRight"; }).click(function(){ var el = $(this); if(el.attr("class") == "drawerRight_open") return; z.drawers.open(el.attr("bin"),{}); }); }; z.drawers.open = function(bin, options) { doRequest = options || false; z.pageReset(); $("#convocast .drawerRight[bin="+bin+"]").attr("class","drawerRight_open"); if(doRequest) { z.ajaxHistory($.extend({},{route:"1",bin:bin},options || {})); } }; z.drawers.shut = function() { return $("#convocast .drawerRight,#convocast .drawerRight_open,#convocast .drawerRight_over").attr("class","drawerRight"); } z.isBlocking = null; z.block = function() { z.isBlocking = setTimeout(ajaxTimeout, 30000); $.blockUI(); }; var ajaxTimeout = function() { z.unblock(); $.blockUI("There was an error doing your request. Please try again.",{ width:'250px', margin:'-50px 0 0 -125px', top:'50%', left:'50%', textAlign:'center', color:'#000', backgroundColor:'#ffe', border:'1px solid #f00' }); setTimeout(z.unblock, 4000); }; z.unblock = function() { clearTimeout(z.isBlocking); z.isBlocking = null; $.unblockUI(); }; z.openTab = function(tab) { var params = jQuery.extend({},{route:1,bin:z.clientInfo.currentBin,tab:tab}, arguments[1] || {}); z.ajaxHistory(params); }; z.tabs = function($ul) { var $li = $("li",$ul); $li.hover(function(){ if(this.className == "drawerTop_open") return; this.className = "drawerTop_over"; },function(){ if(this.className == "drawerTop_open") return; this.className = "drawerTop"; }).click(function(){ var el = $(this); if(el.attr("class") == "drawerTop_open") return; $li.attr("class","drawerTop"); el.attr("class","drawerTop_open"); z.ajaxHistory({route:1,bin:z.clientInfo.currentBin,tab:el.attr("ref")}); }); }; z.tabSelect = function(el,uid) { var p = $(el.parentNode.parentNode.parentNode); $("a",p).removeClass("CVC_current"); el = $(el); el.addClass("CVC_current"); z.doRequest({action:"popup",target:"tabContent",popup:p.attr("ref"),tab:el.attr("ref"),uid:uid}); }; z.tbInternalLink = function(tab,uid,title) { $("a",".CVC_pop #tabs").removeClass("CVC_current"); $("a[@ref="+tab+"]").addClass("CVC_current"); $('.CVC_pop #windowTitle').html(title); z.doRequest({action:"popup",target:"content",popup:"quick_browse",tab:tab,uid:uid,newinstance:1}); }; z.doFilterFX = function() { if($("#filterContent").css("display") == "none") { $("#convocast #order").hide(); $("#convocast .sectionRightTab").css({"top":-1,"padding-top":3}) $("#filterContent").slideToggle("slow"); } else { $("#filterContent").slideToggle("slow",function() { $("#convocast .sectionRightTab").css({"top":0,"padding-top":2}) $("#convocast #order").show(); }); } }; z.hideTranscript = function(el) { el = $(el); transcript = $('#CVC_hiddenTranscript'+$(el).attr('ref')); if(transcript.css('display') != 'none'){ el.html("Show Audio Transcript"); } else { el.html("Hide Audio Transcript"); } transcript.slideToggle(); //$('.text2', el.parent().parent()).; } z.open_post_text = function(ele){ $(ele).click(function(){ var postid = $(this).attr("id").replace("CVC_open_text_",""); if($("#CVC_hidden_text_"+postid).css("display") != "none"){ $("#CVC_hidden_text_"+postid).hide("fast"); $(this).html("[ More ]"); } else { $("#CVC_hidden_text_"+postid).show("fast",function(){ $("#CVC_hidden_text_"+postid).css({display:"inline"}); }); $(this).html("[ Less ]"); } }); } z.toggleReplies = function(el,convoid,total,profile) { el = $(el); var replies = $('#CVC_responses_'+convoid); if(el.hasClass('CVC_respondButton_selected')) { total = total || 0; $("#CVC_response_pager_"+convoid).html(""); el.removeClass('CVC_respondButton_selected'); replies.slideUp("slow",function(){replies.html("");el.html('View Responses ('+total+')');}); } else { el.html("Loading..."); replies.show(); el.addClass('CVC_respondButton_selected'); curcvc = convoid; this.rqvars = {convoid:convoid,route:'1',update:'posts',button:'1'}; if(profile){ this.rqvars = $.extend(this.rqvars,{profile:profile}); } Convocast.doRequest(this.rqvars); } }; z.getPlayerUpdate = function(typ,pr1,pr2,pid) { if(typ == "state" && pr1 > 0) { $(".CVC_commentPlayerControls a.current").each(function(){ var oldTime = $('#convocast #CVC_commentPlayer')[0].stopAudio(); this.innerHTML = "Resume"; this.className = ""; this.stopPoint = oldTime; }); } }; z.setEpisode = function(id, title, info, file) { $display = $('#convocast #CVC_L #CVC_player'); if($display.length == 0) { //init $('#convocast #CVC_L').append('
'); $display = $('#convocast #CVC_L #CVC_player'); } $display.html('
'); so = new SWFObject(z.path+'flash/mediaplayer.swf','mpl','168','20','8'); so.addParam('allowfullscreen','true'); so.addParam('allowscriptaccess','always'); if(file==''){ $("#CVC_mp_container").attr('style','margin-left:-5000px;height:1px;'); file = 'http://convocast.com/empty.mp3'; } so.addVariable('file',file); //so.addParam('WMode','Transparent'); so.addVariable('height','20'); so.addVariable('width','168'); so.addVariable('enablejs','true'); so.addVariable('javascriptid','mpl'); so.write('CVC_mp_container'); setTimeout(function(){z.displayEpisode(id, title, info, file,false);},23); }; z.displayEpisode = function(id, title, info, file, setFile) { $display = $('#player'); if(setFile) { if(file != "") { $("#convocast #CVC_mp_container").css({"visibility":"visible","height":20}).removeClass("CVC_player_hidden"); $('#convocast #mpl')[0].setFile(file); } else { $("#convocast #CVC_mp_container").css({'margin-left':"-5000px","height":1}).addClass("CVC_player_hidden"); } } }; z.profileLinks = function(profile) { $("#convocast a[profile]").unbind().attr({"href":"javascript:{}","rel":z.ajaxPath}).click(function(){ z.showProfile($(this).attr("profile")); }); }; z.check = function($nodes,options) { options = $.extend({ check: true, attr: "" },options || {}); if(options.attr != "") { $($nodes+":checked").each(function() { this.checked = false; }); $nodes = $($nodes+"["+options.attr+"]"); }else { $nodes = $($nodes); } $nodes.each(function() { this.checked = options.check; }); }; z.tutorial = function(el) { $('.CVC_tutorial_node_body',$(el).parent().parent().parent()).slideToggle(function() { $el = $(this); $toggleText = $('.CVC_toggleText',$el.parent()); if($el.css("display") == "none") { $toggleText.html("Read"); } else { $toggleText.html("Hide"); } }); }; z.mail = function(c,cvcin) { c = $("#"+c); var title = $("#messageTitle",c); var message = $("#messageText",c); var error = false; var errorText = ""; if(!title.val() || title.val() == title.attr("title")) { error = true; errorText = "Subject is required"; } if(!cvcin){ if(!message.val() || message.val() == message.attr("title")) { if(error) { errorText += "
"; } error = true; errorText += "Message body is required"; } } var recipients = ""; $('#convocast #recipients a').each(function(){ recipients +="&to[]="+$(this).attr("uid"); }); if(recipients == ''){ if(error) { errorText += "
"; } error = true; errorText += "You must have at least one recipient"; } if(error) { z.mail.writeError(errorText); return false; } if(!cvcin){ $.getScriptXS(z.ajaxPath +"?"+$.param({route:1,update:"inbox",tab:"compose",subject:title.val(),message:message.val()})+recipients+"&"+$.param(z.clientInfo)+"&"+$.param(z.current)+"&"+$.param(additional)+"&write=inbox"); }else{ this.val = message.val().split("\r\n").join('\\n');//win this.val = this.val.split("\r").join('\\n');//mac this.val = this.val.split("\n").join('\\n');//linix this.val = this.val.split("\t").join('\\t');//save the tabs too this.path = z.ajaxPath +"?route=1&tab=compose&subject="+title.val()+"&message="+this.val+recipients+"&"+$.param(z.clientInfo)+"&"+$.param(z.current)+"&write=cvcinbox&audio="+$("#audio_name").val()+"&thread="+$("#thread_name").val(); $.getScriptXS(this.path); } return false; }; z.mail.writeError = function(error){ if(!error.length){ alert('error has no length'); } c = $("#messageError"); c.css({display:'none',border:'1px dotted red',margin:'4px'}); c.html(error); c.show('fast'); setTimeout(function(){ c.hide('slow'); },5000); } z.mail.addRecipient = function(name,uid) { $('#convocast #recipients').prepend(''+name+''); $("#convocast #userid").val(""); }; z.mail.deleteRecipient = function(uid) { $('#convocast #recipients a[uid='+uid+']').remove(); }; z.mail.action = function(method,mid,tab,requestParams,cvcin){ var mids = ""; if(mid.each) { mid.each(function(){ mids +="&mids[]="+$(this).attr("mid"); }); } else { mids ="&mids[]="+mid; } this.bin = 'inbox'; if(cvcin){ this.bin = 'cvcinbox'; } var params = $.extend({},{route:1,update:this.bin,tab:tab,method:method}, requestParams || {}); $.getScriptXS(z.ajaxPath +"?"+$.param(params)+mids+"&"+$.param(z.clientInfo)+"&"+$.param(z.current)+"&write="+this.bin); }; /*z.mail.deleteMessage = function(tab,box,mid,mrelation_id) { $("#convocast #message"+mid).css("text-align","center").html("Deleting..."); $("#convocast #message"+mid).slideUp(function(){ z.doRequest({action:"bin",bin:"inbox",tab:tab,mid:mid,r:mrelation_id,box:box}); }); };*/ z.changePassword = function() { var newpass = $("#convocast #newpass1").val(); if(newpass == $("#convocast #newpass2").val()) { z.doRequest({bin:"settings",tab:"password",route:"true",write:"settings",oldpass:$("#convocast #oldpass").val(),newpass:newpass}); } else { $("#convocast #passwordInfo").html("Your new password and confirm password don't match!"); } }; z.togglePostSummary = function(el,tab) { el = $(el.parentNode.parentNode); if(tab == "title") { $("legend a", el).addClass("CVC_selected"); $(".CVC_keywords a", el).removeClass("CVC_selected"); $(".CVC_transcription:first",el).show(); $(".CVC_transcription:last",el).hide(); } else { $("legend a", el).removeClass("CVC_selected"); $(".CVC_keywords a", el).addClass("CVC_selected"); $(".CVC_transcription:first",el).hide(); $(".CVC_transcription:last",el).show(); } }; z.cluetipClose = function() { $("#CVC_cluetip-outer").parent().removeClass().end().children().empty(); }; z.initFilePost = function() { var container = $("#convocast .CVC_fileinputs"); if($.browser.msie) { container.html(""); } else { container.html(""); } }; var searchTimer = null; z.setSearch = function(init) { $('#convocast #q').keydown(function(e) { if(e.keyCode==13 && this.value !='') { z.doRequest({q:this.value,view:'posts',order:this.order}); } }).focus(function(){ clearTimeout(searchTimer); searchTimer = null; $(this).animate({width:120},'slow'); }).blur(z.hideSearch); if(init) { searchTimer = setTimeout("Convocast.hideSearch.apply($('#convocast #CVC_q')[0]);",3000); } }; z.pageReset = function() { z.drawers.shut(); scroll(0,$("#convocast").offset().top); clearTimeout(searchTimer); searchTimer = null; $("#convocast #CVC_q").stop(); } z.hideSearch = function() { if(this.value == '') { $(this).animate({width:0},'slow'); } }; z.episodeToggle = function(eid,link) { if($("#convocast #CVC_episodeSummaryEdit"+eid).css("display") == "none") { $("#convocast #CVC_episodeSummary"+eid).hide(); $("#convocast #CVC_episodeSummaryEdit"+eid).show(); $("#convocast #CVC_episodeDetails"+eid).slideDown("slow"); link.innerHTML = 'Hide'; } else { $("#convocast #CVC_episodeSummaryEdit"+eid).hide(); $("#convocast #CVC_episodeSummary"+eid).show(); $("#convocast #CVC_episodeDetails"+eid).slideUp("slow"); link.innerHTML = 'Show'; } }; z.Upload = new function() { var y = this; //y.callback = null; var flash = null; y.load = function(file) { var iu = null; //if(!$.browser.msie || $.browser.version != '6.0') { $('#convocastUploadContainer').css({'margin-left':-5000}); iu = new SWFObject(z.path+'flash/upload.swf','CVC_imageUploader','1','1','8'); //} else { // $('#convocastUploadContainer').css({'height':300,'width':300}); // iu = new SWFObject(z.path+'flash/upload.swf','imageUploader','300','300','8'); //} iu.addParam('allowscriptaccess','always'); iu.addVariable('uploadUrl',z.path+'api/upload.php?'+file); iu.addVariable('useExternalInterface',true); iu.addVariable('javaScriptEventsPrefix','Convocast.Upload.'); iu.addVariable('removeButtonVisible',false); iu.addVariable('backgroundColor','FFFFFF'); iu.write('convocastUploadContainer'); }; y.browse = function(fileTypes) { fileTypes = fileTypes || "images" var allTypes = []; var imageTypes = {}; switch(fileTypes) { case "images": imageTypes.description = "Images (*.JPG;*.JPEG;*.JPE;*.GIF;*.PNG;)"; imageTypes.extension = "*.jpg; *.jpeg; *.jpe; *.gif; *.png;"; break; case "wav": imageTypes.description = "Audio (*.WAV;)"; imageTypes.extension = "*.wav;"; break; } allTypes.push(imageTypes); flash.browseFiles(allTypes); }; y._onMovieLoad = function() { //if(!$.browser.msie || $.browser.version != '6.0') { $("#convocast .CVC_uploadToShow, .CVC_pop .CVC_uploadToShow").show(); //} flash = $("#convocast #CVC_imageUploader")[0]; }; y._onSelect = function() { var fileList = flash.fileList(); if(fileList.length > 1) { flash.removeItemAt(0); } $("#convocast #CVC_fileInput").html(fileList[fileList.length-1].name); }; y.submit = function() { var fileList = flash.fileList(); if(fileList.length > 0) { flash.uploadAll(); } else { $("#convocast #CVC_percentCompleted").text("Please select a file."); } }; y._onProgress = function(type, fileIndex, fileBytesLoaded, fileBytesLength, totalBytesLoaded, totalBytesLength) { var PercentDone = new Number((totalBytesLoaded/totalBytesLength)*100).toFixed(1); $("#convocast #CVC_percentCompleted").text(PercentDone + "% uploaded"); }; y._onCompleteAbsolute = function(type, uploadedBytes){ $("#convocast #CVC_percentCompleted").text("Upload Complete!"); $("#convocast #CVC_fileInput").html(" "); //var request = {action:"updateImage"}; //if(y.callback){ // z.doRequest(y.callback); //}else{ if($(".CVC_new_user_upload").length > 0){ $(".CVC_new_user_upload").remove(); $("#CVC_img_upload_title").remove(); } else { z.doRequest({action:"updateImage"}); } }; y._onError = function(type,er,error){ $("#convocast #CVC_percentCompleted").text(error); }; }; z.audioUpload = new function() { var y = this; var flash = null; y.load = function(file) { var iu = null; //if(!$.browser.msie || $.browser.version != '6.0') { $('#convocastAudioUploadContainer').css({'margin-left':-5000}); iu = new SWFObject(z.path+'flash/upload.swf','CVC_audioUploader','1','1','8'); //} else { // $('#convocastAudioUploadContainer').css({'height':300,'width':300}); // iu = new SWFObject(z.path+'flash/upload.swf','audioUploader','300','300','8'); //} iu.addParam('allowscriptaccess','always'); iu.addVariable('uploadUrl',z.path+'api/upload.php?'+file); iu.addVariable('useExternalInterface',true); iu.addVariable('javaScriptEventsPrefix','Convocast.audioUpload.'); iu.addVariable('removeButtonVisible',false); iu.addVariable('backgroundColor','FFFFFF'); iu.write('convocastAudioUploadContainer'); }; y.browse = function() { var allTypes = []; var imageTypes = {}; imageTypes.description = "Audio (*.WAV;)"; imageTypes.extension = "*.wav;"; allTypes.push(imageTypes); flash.browseFiles(allTypes); }; y._onMovieLoad = function() { //if(!$.browser.msie || $.browser.version != '6.0') { $("#convocast .CVC_uploadToShow, .CVC_pop .CVC_uploadToShow").show(); //} flash = $("#convocast #CVC_audioUploader")[0]; }; y._onSelect = function() { var fileList = flash.fileList(); if(fileList.length > 1) { flash.removeItemAt(0); } $("#convocast #CVC_audioFileInput").html(fileList[fileList.length-1].name); }; y.submit = function() { var fileList = flash.fileList(); if(fileList.length > 0) { flash.uploadAll(); } else { $("#convocast #CVC_audioPercentCompleted").text("Please select a file."); } }; y._onProgress = function(type, fileIndex, fileBytesLoaded, fileBytesLength, totalBytesLoaded, totalBytesLength) { var PercentDone = new Number((totalBytesLoaded/totalBytesLength)*100).toFixed(1); $("#convocast #CVC_audioPercentCompleted").text(PercentDone + "% uploaded"); }; y._onCompleteAbsolute = function(type, uploadedBytes){ $("#convocast #CVC_audioPercentCompleted").text("Upload Complete!"); $("#convocast #CVC_audioFileInput").html(" "); z.doRequest({route:1,update:'manage',tab:'settings'}); }; y._onError = function(type,er,error){ $("#convocast #CVC_audioPercentCompleted").text(error); }; }; z.postUpload = new function() { var y = this; var flash = null; var tmpid = null; y.load = function(file,temp_id) { tmpid = temp_id; var iu = null; $('#convocastPostUploadContainer').css({'margin-left':-5000}); iu = new SWFObject(z.path+'flash/upload.swf','CVC_postUploader','1','1','8'); iu.addParam('allowscriptaccess','always'); iu.addVariable('uploadUrl',z.path+'api/upload.php?'+file); iu.addVariable('useExternalInterface',true); iu.addVariable('javaScriptEventsPrefix','Convocast.postUpload.'); iu.addVariable('removeButtonVisible',false); iu.addVariable('backgroundColor','FFFFFF'); iu.write('convocastPostUploadContainer'); }; y.browse = function() { var allTypes = []; var imageTypes = {}; imageTypes.description = "Audio (*.MP3;)"; imageTypes.extension = "*.mp3;"; allTypes.push(imageTypes); flash.browseFiles(allTypes); }; y._onMovieLoad = function() { $("#convocast .CVC_uploadToShow, .CVC_pop .CVC_uploadToShow").show(); flash = $(".CVC_pop #CVC_postUploader")[0]; }; y._onSelect = function() { var fileList = flash.fileList(); if(fileList.length > 1) { flash.removeItemAt(0); } $(".CVC_pop #CVC_postFileInput").html(fileList[fileList.length-1].name); $(".CVC_pop .CVC_uploadToShow .CVC_green").show(); }; y.submit = function() { var fileList = flash.fileList(); if(fileList.length > 0) { flash.uploadAll(); } else { $(".CVC_pop #CVC_postPercentCompleted").text("Please select a file."); } }; y._onProgress = function(type, fileIndex, fileBytesLoaded, fileBytesLength, totalBytesLoaded, totalBytesLength) { var PercentDone = new Number((totalBytesLoaded/totalBytesLength)*100).toFixed(1); $(".CVC_pop #CVC_postPercentCompleted").text(PercentDone + "% uploaded"); }; y._onCompleteAbsolute = function(type, uploadedBytes){ $(".CVC_pop #CVC_postPercentCompleted").text("Upload Complete!"); setTimeout(function(){ $(".CVC_pop #CVC_postPercentCompleted").text(""); },4000); $(".CVC_pop #CVC_postFileInput").html(" "); $(".CVC_pop .CVC_uploadToShow .CVC_green").hide(); z.doRequest({route:1,update:'comment',method:"show_upload",ts:$("#CVC_audio_ts").val()}); }; y._onError = function(type,er,error){ $(".CVC_pop #CVC_postPercentCompleted").text(error); }; }; z.validate = { url: function(value){ return /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(value); }, alpha: function(value){ return /^[a-zA-Z]*$/i.test(value); } }; z.newWindow = function (url) { var load = window.open(url,'','scrollbars=yes,menubar=no,height=400,width=600,resizable=yes,toolbar=no,location=no,status=no'); }; z.privacyWindow = function(){ z.newWindow(z.rootURL()+"api/views/pages/privacy.php"); } z.termsWindow = function(){ z.newWindow(z.rootURL()+"api/views/pages/terms.php"); } z.css_checked = false; z.overloadCSSOnce = function (){ if(!z.css_checked){ z.overloadCSS(); z.css_checked = true; } } z.overloadCSS = function(){ var loaded_css_files = new Array(); $('body link').each(function (){ //move css from body to head $(this).appendTo('head'); }); var cvc_css = new Array(); $('link').each(function(){ //only load one of each css file and load all cvc css after ref = $(this).attr('href'); if(!loaded_css_files[ref]){ if(ref.indexOf(z.rootURL()) > 0){ cvc_css[ref] = this; }else{ //clear css (ie6 really deletes the css other broswers re-evaluate inheritence) $(this).attr('href','javascript:void(0)');//empty href crashes ie loaded_css_files[ref] = true; //load css $(this).attr('href',ref); } } else { $(this).remove(); } }); if(cvc_css.length>0){ for(i in cvc_css){ $(cvc_css[i]).appendTo('head'); } } } z.createCSSLink = function (ref){ $('head', document).append($(document.createElement('link')) .attr('type', 'text/css') .attr('rel', 'stylesheet') .attr('href', ref)); } z.rootURL = function (){ return z.ajaxPath.replace('api\.php',''); } z.hideFlash = function (){ $(".CVC_flashContainer").css("visibility", "hidden"); } z.showFlash = function (){ $("#convocast .CVC_flashContainer").each(function(){ $jq = $(this); if(!$jq.hasClass('player_hidden')) { $jq.css("visibility", "visible"); } }); } }(jQuery); /** * History/Remote - jQuery plugin for enabling history support and bookmarking * @requires jQuery v1.0.3 * * http://stilbuero.de/jquery/history/ * * Copyright (c) 2006 Klaus Hartl (stilbuero.de) * Dual licensed under the MIT and GPL licenses: * http://www.opensource.org/licenses/mit-license.php * http://www.gnu.org/licenses/gpl.html * * Version: 0.2.3 */ (function($) { // block scope /** * Initialize the history manager. Subsequent calls will not result in additional history state change * listeners. Should be called soonest when the DOM is ready, because in IE an iframe needs to be added * to the body to enable history support. * * @example $.ajaxHistory.initialize(); * * @param Function callback A single function that will be executed in case there is no fragment * identifier in the URL, for example after navigating back to the initial * state. Use to restore such an initial application state. * Optional. If specified it will overwrite the default action of * emptying all containers that are used to load content into. * @type undefined * * @name $.ajaxHistory.initialize() * @cat Plugins/History * @author Klaus Hartl/klaus.hartl@stilbuero.de */ $.ajaxHistory = new function() { var RESET_EVENT = 'historyReset'; var _currentHash = location.hash; var _intervalId = null; var _observeHistory; // define outside if/else required by Opera this.update = function() { }; // empty function body for graceful degradation // create custom event for state reset var _defaultReset = function() { //$('.remote-output').empty(); }; $(document).bind(RESET_EVENT, _defaultReset); if ($.browser.msie) { var _historyIframe, initialized = false; // for IE // add hidden iframe $(function() { _historyIframe = $('').appendTo(document.body).get(0); var iframe = _historyIframe.contentWindow.document; // create initial history entry iframe.open(); iframe.close(); if (_currentHash && _currentHash != '#') { iframe.location.hash = _currentHash.replace('#', ''); } }); this.update = function(hash) { _currentHash = hash; var iframe = _historyIframe.contentWindow.document; iframe.open(); iframe.close(); iframe.location.hash = hash.replace('#', ''); }; _observeHistory = function() { var iframe = _historyIframe.contentWindow.document; var iframeHash = iframe.location.hash; if (iframeHash != _currentHash) { _currentHash = iframeHash; if (iframeHash && iframeHash != '#') { // order does matter, set location.hash after triggering the click... //$('a[@href$="' + iframeHash + '"]').click(); $.ajaxHistory.trigger(false,iframeHash.substring(1)); location.hash = iframeHash; } else if (initialized) { location.hash = ''; $(document).trigger(RESET_EVENT); } } initialized = true; }; } else if ($.browser.mozilla || $.browser.opera) { this.update = function(hash) { _currentHash = hash; }; _observeHistory = function() { if (location.hash) { if (_currentHash != location.hash) { _currentHash = location.hash; $.ajaxHistory.trigger(false,_currentHash.substring(1)); } } else if (_currentHash) { _currentHash = ''; $(document).trigger(RESET_EVENT); } }; } else if ($.browser.safari) { var _backStack, _forwardStack, _addHistory; // for Safari // etablish back/forward stacks $(function() { _backStack = []; _backStack.length = history.length; _forwardStack = []; }); var isFirst = false, initialized = false; _addHistory = function(hash) { _backStack.push(hash); _forwardStack.length = 0; // clear forwardStack (true click occured) isFirst = false; }; this.update = function(hash) { _currentHash = hash; _addHistory(_currentHash); }; _observeHistory = function() { var historyDelta = history.length - _backStack.length; if (historyDelta) { // back or forward button has been pushed isFirst = false; if (historyDelta < 0) { // back button has been pushed // move items to forward stack for (var i = 0; i < Math.abs(historyDelta); i++) _forwardStack.unshift(_backStack.pop()); } else { // forward button has been pushed // move items to back stack for (var i = 0; i < historyDelta; i++) _backStack.push(_forwardStack.shift()); } var cachedHash = _backStack[_backStack.length - 1]; if(cachedHash){ $.ajaxHistory.trigger(false,cachedHash); _currentHash = location.hash; } } else if (_backStack[_backStack.length - 1] == undefined && !isFirst) { if (initialized) { $(document).trigger(RESET_EVENT); } isFirst = true; } initialized = true; }; } this.locked = false; this.trigger = function(userInput, hash) { // lock target to prevent double loading in Firefox if(!this.locked) { this.locked = true; // add to history only if true click occured, not a triggered click if (userInput) { hash = $.param(hash); location.hash = "#"+hash; $.ajaxHistory.update(hash); } else { /*var start = hash.indexOf('bin='); if(start != -1) { start += 4; var end = hash.indexOf('&',start); if(end == -1){ end = hash.length; } Convocast.drawers.open(hash.substring(start,end)); }*/ //hash += "&back=t"; } Convocast.retrieveHistory(hash); setTimeout("$.ajaxHistory.locked = false",200); //for firefox } }; this.initialize = function(callback) { // custom callback to reset app state (no hash in url) if (typeof callback == 'function') { $(document).unbind(RESET_EVENT, _defaultReset).bind(RESET_EVENT, callback); } // look for hash in current URL (not Safari) /*if (location.hash && typeof _addHistory == 'undefined') { $.ajaxHistory.trigger(false,location.hash.substring(1)); } else { location.hash = "route=1&bin=posts"; }*/ // start observer if (_observeHistory && _intervalId == null) { _intervalId = setInterval(_observeHistory, 200); // Safari needs at least 200 ms } }; }; })(jQuery);//Button classes jQuery.extend({ button: function(el,clickFunc) { var options = jQuery.extend({ onMouseOver: function(){}, onMouseOut: function(){}, parent: null }, arguments[2] || {}); var z = this; var active = 2; var parent = options.parent; el.mouseover(function(){z._onMouseOver();}); el.mouseout(function(){z._onMouseOut();}); el.click(function(){z._onClick();}); z._onMouseOver = function() { if(active != 0) options.onMouseOver.call(z); }; z._onMouseOut = function() { if(active != 0) options.onMouseOut.call(z); }; z._onClick = function() { if(active !=0) { if(parent != null) parent.click(z); clickFunc(z.getJQ()); } }; z.inactive = function() { active = 0; }; z.setActive = function() { active = 2; }; z.selected = function() { active = 0; }; z.selectedWithFunction = function() { active = 1; }; z.getId = function () { return el[0].id; }; z.getJQ = function () { return el; }; }, radioButtons: function() { var options = jQuery.extend({ reselectable: false }, arguments[0] || {}); var z = this; var buttonArray = []; var reselectable=options.reselectable; z.addButton = function(el,clickFunc) { var o = jQuery.extend({ selected:false, parent: z }, arguments[2] || {}); var button = new jQuery.button(el,clickFunc,o); if(o.selected && reselectable) button.selectedWithFunction(); else if(o.selected) button.selected(); buttonArray.push(button); return button; }; z.click = function(selectedButton) { jQuery.each(buttonArray, function(i,b){b.setActive();}); if(reselectable) selectedButton.selectedWithFunction(); else selectedButton.selected(); //alert(selectedButton.getId()); }; z.selected = function(buttonNumber) { jQuery.each(buttonArray, function(i,b) { if(i == buttonNumber) b._onClick(); }); }; z.inactive = function() { jQuery.each(buttonArray, function(i,b){b.inactive();}); }; z.active = function() { jQuery.each(buttonArray, function(i,b){b.setActive();}); }; z.reset = function() { z.active(); }; z.select = function(num, canReclick) { if(canReclick) buttonArray[num].selectedWithFunction(); else buttonArray[num].selected(); }; } }); (function($) { // block scope $.fn.placeholder = function(phClass) { this.each(function(){ if(!this.value || this.value == ""){ if(phClass) { $(this).addClass(phClass); } this.isFocused=0; this.value = this.title = this.title || "Please enter text"; } else { this.isFocused=1; } this.placeholderReset = function() { this.isFocused=0; if(phClass) { $(this).addClass(phClass); } this.value = this.title; }; this.placeholderSet = function(title) { this.isFocused=1; if(phClass) { $(this).removeClass(phClass); } this.value = title; }; }); this.focus( function() { if(!this.isFocused){ this.isFocused=1; this.value = ''; if(phClass) { $(this).removeClass(phClass); } } }); this.blur( function() { if(this.value == '' && this.isFocused){ this.isFocused=0; if(phClass) { $(this).addClass(phClass); } this.value = this.title; } }); return this; } $.fn.placeholderReset = function() { this.each(function(){ this.placeholderReset(); }); }; $.fn.placeholderSet = function(title) { this.each(function(){ this.placeholderSet(title); }); }; })(jQuery);/* * Metadata - jQuery plugin for parsing metadata from elements * * Copyright (c) 2006 John Resig, Yehuda Katz, J�örn Zaefferer, Paul McLanahan * * Dual licensed under the MIT and GPL licenses: * http://www.opensource.org/licenses/mit-license.php * http://www.gnu.org/licenses/gpl.html * * Revision: $Id: jquery.metadata.js 3640 2007-10-11 18:34:38Z pmclanahan $ * */ /** * Sets the type of metadata to use. Metadata is encoded in JSON, and each property * in the JSON will become a property of the element itself. * * There are three supported types of metadata storage: * * attr: Inside an attribute. The name parameter indicates *which* attribute. * * class: Inside the class attribute, wrapped in curly braces: { } * * elem: Inside a child element (e.g. a script tag). The * name parameter indicates *which* element. * * The metadata for an element is loaded the first time the element is accessed via jQuery. * * As a result, you can define the metadata type, use $(expr) to load the metadata into the elements * matched by expr, then redefine the metadata type and run another $(expr) for other elements. * * @name $.metadata.setType * * @example

This is a p

* @before $.metadata.setType("class") * @after $("#one").metadata().item_id == 1; $("#one").metadata().item_label == "Label" * @desc Reads metadata from the class attribute * * @example

This is a p

* @before $.metadata.setType("attr", "data") * @after $("#one").metadata().item_id == 1; $("#one").metadata().item_label == "Label" * @desc Reads metadata from a "data" attribute * * @example

This is a p

* @before $.metadata.setType("elem", "script") * @after $("#one").metadata().item_id == 1; $("#one").metadata().item_label == "Label" * @desc Reads metadata from a nested script element * * @param String type The encoding type * @param String name The name of the attribute to be used to get metadata (optional) * @cat Plugins/Metadata * @descr Sets the type of encoding to be used when loading metadata for the first time * @type undefined * @see metadata() */ (function($) { $.extend({ metadata : { defaults : { type: 'class', name: 'metadata', cre: /({.*})/, single: 'metadata' }, setType: function( type, name ){ this.defaults.type = type; this.defaults.name = name; }, get: function( elem, opts ){ var settings = $.extend({},this.defaults,opts); // check for empty string in single property if ( !settings.single.length ) settings.single = 'metadata'; var data = $.data(elem, settings.single); // returned cached data if it already exists if ( data ) return data; data = "{}"; if ( settings.type == "class" ) { var m = settings.cre.exec( elem.className ); if ( m ) data = m[1]; } else if ( settings.type == "elem" ) { if( !elem.getElementsByTagName ) return; var e = elem.getElementsByTagName(settings.name); if ( e.length ) data = $.trim(e[0].innerHTML); } else if ( elem.getAttribute != undefined ) { var attr = elem.getAttribute( settings.name ); if ( attr ) data = attr; } if ( data.indexOf( '{' ) <0 ) data = "{" + data + "}"; data = eval("(" + data + ")"); $.data( elem, settings.single, data ); return data; } } }); /** * Returns the metadata object for the first member of the jQuery object. * * @name metadata * @descr Returns element's metadata object * @param Object opts An object contianing settings to override the defaults * @type jQuery * @cat Plugins/Metadata */ $.fn.metadata = function( opts ){ return $.metadata.get( this[0], opts ); }; })(jQuery);/* * jQuery validation plug-in v1.2.1 * * http://bassistance.de/jquery-plugins/jquery-plugin-validation/ * http://docs.jquery.com/Plugins/Validation * * Copyright (c) 2006 - 2008 Jörn Zaefferer * * $Id: jquery.validate.js 4708 2008-02-10 16:04:08Z joern.zaefferer $ * * Dual licensed under the MIT and GPL licenses: * http://www.opensource.org/licenses/mit-license.php * http://www.gnu.org/licenses/gpl.html */ jQuery.extend(jQuery.fn, { // http://docs.jquery.com/Plugins/Validation/validate validate: function( options ) { // if nothing is selected, return nothing; can't chain anyway if (!this.length) { options && options.debug && window.console && console.warn( "nothing selected, can't validate, returning nothing" ); return; } // check if a validator for this form was already created var validator = jQuery.data(this[0], 'validator'); if ( validator ) { return validator; } validator = new jQuery.validator( options, this[0] ); jQuery.data(this[0], 'validator', validator); if ( validator.settings.onsubmit ) { // allow suppresing validation by adding a cancel class to the submit button this.find("input.cancel:submit").click(function() { validator.cancelSubmit = true; }); // validate the form on submit this.submit( function( event ) { if ( validator.settings.debug ) // prevent form submit to be able to see console output event.preventDefault(); function handle() { if ( validator.settings.submitHandler ) { validator.settings.submitHandler.call( validator, validator.currentForm ); return false; } return true; } // prevent submit for invalid forms or custom submit handlers if ( validator.cancelSubmit ) { validator.cancelSubmit = false; return handle(); } if ( validator.form() ) { if ( validator.pendingRequest ) { validator.formSubmitted = true; return false; } return handle(); } else { validator.focusInvalid(); return false; } }); } return validator; }, // http://docs.jquery.com/Plugins/Validation/valid valid: function() { if ( jQuery(this[0]).is('form')) { return this.validate().form(); } else { var valid = true; var validator = jQuery(this[0].form).validate(); this.each(function() { valid = validator.element(this) && valid; }); return valid; } }, // http://docs.jquery.com/Plugins/Validation/rules rules: function() { var element = this[0]; var data = jQuery.validator.normalizeRules( jQuery.extend( {}, jQuery.validator.metadataRules(element), jQuery.validator.classRules(element), jQuery.validator.attributeRules(element), jQuery.validator.staticRules(element) ), element); // convert from object to array var rules = []; // make sure required is at front if (data.required) { rules.push({method:'required', parameters: data.required}); delete data.required; } jQuery.each(data, function(method, value) { rules.push({ method: method, parameters: value }); }); return rules; }, // destructive add push: function( t ) { return this.setArray( this.add(t).get() ); } }); // Custom selectors jQuery.extend(jQuery.expr[":"], { // http://docs.jquery.com/Plugins/Validation/blank blank: "!jQuery.trim(a.value)", // http://docs.jquery.com/Plugins/Validation/filled filled: "!!jQuery.trim(a.value)", // http://docs.jquery.com/Plugins/Validation/unchecked unchecked: "!a.checked" }); jQuery.format = function(source, params) { if ( arguments.length == 1 ) return function() { var args = jQuery.makeArray(arguments); args.unshift(source); return jQuery.format.apply( this, args ); }; if ( arguments.length > 2 && params.constructor != Array ) { params = jQuery.makeArray(arguments).slice(1); } if ( params.constructor != Array ) { params = [ params ]; } jQuery.each(params, function(i, n) { source = source.replace(new RegExp("\\{" + i + "\\}", "g"), n); }); return source; }; // constructor for validator jQuery.validator = function( options, form ) { this.settings = jQuery.extend( {}, jQuery.validator.defaults, options ); this.currentForm = form; this.init(); }; jQuery.extend(jQuery.validator, { defaults: { messages: {}, errorClass: "CVC_error", errorElement: "label", focusInvalid: true, errorContainer: jQuery( [] ), errorLabelContainer: jQuery( [] ), onsubmit: true, ignore: [], onfocusin: function(element) { this.lastActive = element; // hide error label and remove error class on focus if enabled if ( this.settings.focusCleanup && !this.blockFocusCleanup ) { this.settings.unhighlight && this.settings.unhighlight.call( this, element, this.settings.errorClass ); this.errorsFor(element).hide(); } }, onfocusout: function(element) { if ( !this.checkable(element) && (element.name in this.submitted || !this.optional(element)) ) { this.element(element); } }, onkeyup: function(element) { if ( element.name in this.submitted || element == this.lastElement ) { this.element(element); } }, onclick: function(element) { if ( element.name in this.submitted ) this.element(element); }, highlight: function( element, errorClass ) { jQuery( element ).addClass( errorClass ); }, unhighlight: function( element, errorClass ) { jQuery( element ).removeClass( errorClass ); } }, // http://docs.jquery.com/Plugins/Validation/Validator/setDefaults setDefaults: function(settings) { jQuery.extend( jQuery.validator.defaults, settings ); }, messages: { required: "This field is required.", remote: "Please fix this field.", email: "Please enter a valid email address.", url: "Please enter a valid URL.", date: "Please enter a valid date.", dateISO: "Please enter a valid date (ISO).", dateDE: "Bitte geben Sie ein gültiges Datum ein.", number: "Please enter a valid number.", numberDE: "Bitte geben Sie eine Nummer ein.", digits: "Please enter only digits", creditcard: "Please enter a valid credit card.", equalTo: "Please enter the same value again.", accept: "Please enter a value with a valid extension.", maxlength: jQuery.format("Please enter no more than {0} characters."), maxLength: jQuery.format("Please enter no more than {0} characters."), minlength: jQuery.format("Please enter at least {0} characters."), minLength: jQuery.format("Please enter at least {0} characters."), rangelength: jQuery.format("Please enter a value between {0} and {1} characters long."), rangeLength: jQuery.format("Please enter a value between {0} and {1} characters long."), rangeValue: jQuery.format("Please enter a value between {0} and {1}."), range: jQuery.format("Please enter a value between {0} and {1}."), maxValue: jQuery.format("Please enter a value less than or equal to {0}."), max: jQuery.format("Please enter a value less than or equal to {0}."), minValue: jQuery.format("Please enter a value greater than or equal to {0}."), min: jQuery.format("Please enter a value greater than or equal to {0}.") }, autoCreateRanges: false, prototype: { init: function() { this.labelContainer = jQuery(this.settings.errorLabelContainer); this.errorContext = this.labelContainer.length && this.labelContainer || jQuery(this.currentForm); this.containers = jQuery(this.settings.errorContainer).add( this.settings.errorLabelContainer ); this.submitted = {}; this.valueCache = {}; this.pendingRequest = 0; this.pending = {}; this.invalid = {}; this.reset(); function delegate(event) { var validator = jQuery.data(this[0].form, "validator"); validator.settings["on" + event.type] && validator.settings["on" + event.type].call(validator, this[0] ); } jQuery(this.currentForm) .delegate("focusin focusout keyup", ":text, :password, :file, select, textarea", delegate) .delegate("click", ":radio, :checkbox", delegate); }, // http://docs.jquery.com/Plugins/Validation/Validator/form form: function() { this.prepareForm(); var elements = this.elements(); for ( var i = 0; elements[i]; i++ ) { this.check( elements[i] ); } jQuery.extend(this.submitted, this.errorMap); this.invalid = jQuery.extend({}, this.errorMap); jQuery(this.currentForm).triggerHandler("invalid-form.validate", [this]); this.showErrors(); return this.valid(); }, // http://docs.jquery.com/Plugins/Validation/Validator/element element: function( element ) { element = this.clean( element ); this.lastElement = element; this.prepareElement( element ); var result = this.check( element ); if ( result ) { delete this.invalid[element.name]; } else { this.invalid[element.name] = true; } if ( !this.numberOfInvalids() ) { // Hide error containers on last error this.toHide.push( this.containers ); } this.showErrors(); return result; }, // http://docs.jquery.com/Plugins/Validation/Validator/showErrors showErrors: function(errors) { if(errors) { // add items to error list and map jQuery.extend( this.errorMap, errors ); this.errorList = []; for ( var name in errors ) { this.errorList.push({ message: errors[name], element: this.findByName(name)[0] }); } // remove items from success list this.successList = jQuery.grep( this.successList, function(element) { return !(element.name in errors); }); } this.settings.showErrors ? this.settings.showErrors.call( this, this.errorMap, this.errorList ) : this.defaultShowErrors(); }, // http://docs.jquery.com/Plugins/Validation/Validator/resetForm resetForm: function() { if ( jQuery.fn.resetForm ) jQuery( this.currentForm ).resetForm(); this.prepareForm(); this.hideErrors(); this.elements().removeClass( this.settings.errorClass ); }, numberOfInvalids: function() { var count = 0; for ( var i in this.invalid ) count++; return count; }, hideErrors: function() { this.toHide.html(this.toHide.attr("title")); if(this.toHide.hasClass("noerror")){ this.toHide.removeClass("error"); } //this.addWrapper( this.toHide ).hide(); }, valid: function() { return this.size() == 0; }, size: function() { return this.errorList.length; }, focusInvalid: function() { if( this.settings.focusInvalid ) { try { jQuery(this.findLastActive() || this.errorList.length && this.errorList[0].element || []).filter(":visible").focus(); } catch(e) { /* ignore IE throwing errors when focusing hidden elements */ } } }, findLastActive: function() { var lastActive = this.lastActive; return lastActive && jQuery.grep(this.errorList, function(n) { return n.element.name == lastActive.name; }).length == 1 && lastActive; }, elements: function() { var validator = this; var rulesCache = {}; // select all valid inputs inside the form (no submit or reset buttons) // workaround with jQuery([]).add until http://dev.jquery.com/ticket/2114 is solved return jQuery([]).add(this.currentForm.elements) .filter("input, select, textarea") .not(":submit, :reset, [disabled]") .not( this.settings.ignore ) .filter(function() { !this.name && validator.settings.debug && window.console && console.error( "%o has no name assigned", this); // select only the first element for each name, and only those with rules specified if ( this.name in rulesCache || !jQuery(this).rules().length ) return false; rulesCache[this.name] = true; return true; }); }, clean: function( selector ) { return jQuery( selector )[0]; }, errors: function() { return jQuery( this.settings.errorElement + "." + this.settings.errorClass+", "+this.settings.errorElement + ".noerror", this.errorContext ); }, reset: function() { this.successList = []; this.errorList = []; this.errorMap = {}; this.toShow = jQuery( [] ); this.toHide = jQuery( [] ); this.formSubmitted = false; }, prepareForm: function() { this.reset(); this.toHide = this.errors().push( this.containers ); }, prepareElement: function( element ) { this.reset(); this.toHide = this.errorsFor( this.clean(element) ); }, check: function( element ) { element = this.clean( element ); this.settings.unhighlight && this.settings.unhighlight.call( this, element, this.settings.errorClass ); var rules = jQuery(element).rules(); for( var i = 0; rules[i]; i++) { var rule = rules[i]; try { var result = jQuery.validator.methods[rule.method].call( this, jQuery.trim(element.value), element, rule.parameters ); if ( result == "dependency-mismatch" ) return; if ( result == "pending" ) { this.toHide = this.toHide.not( this.errorsFor(element) ); return; } if( !result ) { this.formatAndAdd( element, rule ); return false; } } catch(e) { this.settings.debug && window.console && console.warn("exception occured when checking element " + element.id + ", check the '" + rule.method + "' method"); throw e; } } if ( rules.length ) this.successList.push(element); return true; }, // return the custom message for the given element name and validation method customMessage: function( name, method ) { var m = this.settings.messages[name]; return m && (m.constructor == String ? m : m[method]); }, // return the first defined argument, allowing empty strings findDefined: function() { for(var i = 0; i < arguments.length; i++) { if (arguments[i] !== undefined) return arguments[i]; } return undefined; }, defaultMessage: function( element, method) { return this.findDefined( this.customMessage( element.name, method ), // title is never undefined, so handle empty string as undefined element.title || undefined, jQuery.validator.messages[method], "Warning: No message defined for " + element.name + "" ); }, formatAndAdd: function( element, rule ) { var message = this.defaultMessage( element, rule.method ); if ( typeof message == "function" ) message = message.call(this, rule.parameters, element); this.errorList.push({ message: message, element: element }); this.errorMap[element.name] = message; this.submitted[element.name] = message; }, addWrapper: function(toToggle) { if ( this.settings.wrapper ) toToggle.push( toToggle.parents( this.settings.wrapper ) ); return toToggle; }, defaultShowErrors: function() { for ( var i = 0; this.errorList[i]; i++ ) { var error = this.errorList[i]; this.settings.highlight && this.settings.highlight.call( this, error.element, this.settings.errorClass ); this.showLabel( error.element, error.message ); } if( this.errorList.length ) { this.toShow.push( this.containers ); } if (this.settings.success) { for ( var i = 0; this.successList[i]; i++ ) { this.showLabel( this.successList[i] ); } } this.toHide = this.toHide.not( this.toShow ); this.hideErrors(); this.addWrapper( this.toShow ).show(); }, showLabel: function(element, message) { var label = this.errorsFor( element ); if ( label.length ) { // refresh error/success class label.removeClass().addClass( this.settings.errorClass ); // check if we have a generated label, replace the message then label.attr("generated") && label.html(message); } else { // create label label = jQuery("<" + this.settings.errorElement + "/>") .attr({"for": this.idOrName(element), generated: true}) .addClass(this.settings.errorClass) .html(message || ""); if ( this.settings.wrapper ) { // make sure the element is visible, even in IE // actually showing the wrapped element is handled elsewhere label = label.hide().show().wrap("<" + this.settings.wrapper + ">").parent(); } if ( !this.labelContainer.append(label).length ) this.settings.errorPlacement ? this.settings.errorPlacement(label, jQuery(element) ) : label.insertAfter(element); } if ( !message && this.settings.success ) { label.text(""); typeof this.settings.success == "string" ? label.addClass( this.settings.success ) : this.settings.success( label ); } this.toShow.push(label); }, errorsFor: function(element) { return this.errors().filter("[@for='" + this.idOrName(element) + "']"); }, idOrName: function(element) { return this.checkable(element) ? element.name : element.id || element.name; }, rules: function( element ) { return jQuery(element).rules(); }, checkable: function( element ) { return /radio|checkbox/i.test(element.type); }, findByName: function( name ) { // select by name and filter by form for performance over form.find("[name=...]") var form = this.currentForm; return jQuery(document.getElementsByName(name)).map(function(index, element) { return element.form == form && element || null; // && element.name == name }); }, getLength: function(value, element) { switch( element.nodeName.toLowerCase() ) { case 'select': return jQuery("option:selected", element).length; case 'input': if( this.checkable( element) ) return this.findByName(element.name).filter(':checked').length; } return value.length; }, depend: function(param, element) { return this.dependTypes[typeof param] ? this.dependTypes[typeof param](param, element) : true; }, dependTypes: { "boolean": function(param, element) { return param; }, "string": function(param, element) { return !!jQuery(param, element.form).length; }, "function": function(param, element) { return param(element); } }, optional: function(element) { return !jQuery.validator.methods.required.call(this, jQuery.trim(element.value), element) && "dependency-mismatch"; }, startRequest: function(element) { if (!this.pending[element.name]) { this.pendingRequest++; this.pending[element.name] = true; } }, stopRequest: function(element, valid) { this.pendingRequest--; // sometimes synchronization fails, make pendingRequest is never < 0 if (this.pendingRequest < 0) this.pendingRequest = 0; delete this.pending[element.name]; if ( valid && this.pendingRequest == 0 && this.formSubmitted && this.form() ) { jQuery(this.currentForm).submit(); } }, previousValue: function(element) { return jQuery.data(element, "previousValue") || jQuery.data(element, "previousValue", previous = { old: null, valid: true, message: this.defaultMessage( element, "remote" ) }); } }, classRuleSettings: { required: {required: true}, email: {email: true}, url: {url: true}, date: {date: true}, dateISO: {dateISO: true}, dateDE: {dateDE: true}, number: {number: true}, numberDE: {numberDE: true}, digits: {digits: true}, creditcard: {creditcard: true} }, addClassRules: function(className, rules) { className.constructor == String ? this.classRuleSettings[className] = rules : jQuery.extend(this.classRuleSettings, className); }, classRules: function(element) { var rules = {}; var classes = jQuery(element).attr('class'); classes && jQuery.each(classes.split(' '), function() { if (this in jQuery.validator.classRuleSettings) { jQuery.extend(rules, jQuery.validator.classRuleSettings[this]); } }); return rules; }, attributeRules: function(element) { var rules = {}; var $element = jQuery(element); for (method in jQuery.validator.methods) { var value = $element.attr(method); // allow 0 but neither undefined nor empty string if (value !== undefined && value !== '') { rules[method] = value; } } // maxlength may be returned as -1, 2147483647 (IE) and 524288 (safari) for text inputs if (rules.maxlength && /-1|2147483647|524288/.test(rules.maxlength)) { delete rules.maxlength; // deprecated delete rules.maxLength; } return rules; }, metadataRules: function(element) { if (!jQuery.metadata) return {}; var meta = jQuery.data(element.form, 'validator').settings.meta; return meta ? jQuery(element).metadata()[meta] : jQuery(element).metadata(); }, staticRules: function(element) { var rules = {}; var validator = jQuery.data(element.form, 'validator'); if (validator.settings.rules) { rules = jQuery.validator.normalizeRule(validator.settings.rules[element.name]) || {}; } return rules; }, normalizeRules: function(rules, element) { // convert deprecated rules jQuery.each({ minLength: 'minlength', maxLength: 'maxlength', rangeLength: 'rangelength', minValue: 'min', maxValue: 'max', rangeValue: 'range' }, function(dep, curr) { if (rules[dep]) { rules[curr] = rules[dep]; delete rules[dep]; } }); // evaluate parameters jQuery.each(rules, function(rule, parameter) { rules[rule] = jQuery.isFunction(parameter) ? parameter(element) : parameter; }); // clean number parameters jQuery.each(['minlength', 'maxlength', 'min', 'max'], function() { if (rules[this]) { rules[this] = Number(rules[this]); } }); jQuery.each(['rangelength', 'range'], function() { if (rules[this]) { rules[this] = [Number(rules[this][0]), Number(rules[this][1])]; } }); if (jQuery.validator.autoCreateRanges) { // auto-create ranges if (rules.min && rules.max) { rules.range = [rules.min, rules.max]; delete rules.min; delete rules.max; } if (rules.minlength && rules.maxlength) { rules.rangelength = [rules.minlength, rules.maxlength]; delete rules.minlength; delete rules.maxlength; } } return rules; }, // Converts a simple string to a {string: true} rule, e.g., "required" to {required:true} normalizeRule: function(data) { if( typeof data == "string" ) { var transformed = {}; transformed[data] = true; data = transformed; } return data; }, // http://docs.jquery.com/Plugins/Validation/Validator/addMethod addMethod: function(name, method, message) { jQuery.validator.methods[name] = method; jQuery.validator.messages[name] = message; if (method.length < 3) { jQuery.validator.addClassRules(name, jQuery.validator.normalizeRule(name)); } }, methods: { // http://docs.jquery.com/Plugins/Validation/Methods/required required: function(value, element, param) { // check if dependency is met if ( !this.depend(param, element) ) return "dependency-mismatch"; switch( element.nodeName.toLowerCase() ) { case 'select': var options = jQuery("option:selected", element); return options.length > 0 && ( element.type == "select-multiple" || (jQuery.browser.msie && !(options[0].attributes['value'].specified) ? options[0].text : options[0].value).length > 0); case 'input': if ( this.checkable(element) ) return this.getLength(value, element) > 0; default: return value.length > 0; } }, // http://docs.jquery.com/Plugins/Validation/Methods/remote remote: function(value, element, param) { if ( this.optional(element) ) return "dependency-mismatch"; var previous = this.previousValue(element); if (!this.settings.messages[element.name] ) this.settings.messages[element.name] = {}; this.settings.messages[element.name].remote = typeof previous.message == "function" ? previous.message(value) : previous.message; if ( previous.old !== value ) { previous.old = value; var validator = this; this.startRequest(element); var data = {}; data[element.name] = value; jQuery.ajax({ url: param, mode: "abort", port: "validate" + element.name, dataType: "json", data: data, success: function(response) { if ( !response ) { var errors = {}; errors[element.name] = response || validator.defaultMessage( element, "remote" ); validator.showErrors(errors); } else { var submitted = validator.formSubmitted; validator.prepareElement(element); validator.formSubmitted = submitted; validator.successList.push(element); validator.showErrors(); } previous.valid = response; validator.stopRequest(element, response); } }); return "pending"; } else if( this.pending[element.name] ) { return "pending"; } return previous.valid; }, // http://docs.jquery.com/Plugins/Validation/Methods/minlength minlength: function(value, element, param) { return this.optional(element) || this.getLength(value, element) >= param; }, // deprecated, to be removed in 1.3 minLength: function(value, element, param) { return jQuery.validator.methods.minlength.apply(this, arguments); }, // http://docs.jquery.com/Plugins/Validation/Methods/maxlength maxlength: function(value, element, param) { return this.optional(element) || this.getLength(value, element) <= param; }, // deprecated, to be removed in 1.3 maxLength: function(value, element, param) { return jQuery.validator.methods.maxlength.apply(this, arguments); }, // http://docs.jquery.com/Plugins/Validation/Methods/rangelength rangelength: function(value, element, param) { var length = this.getLength(value, element); return this.optional(element) || ( length >= param[0] && length <= param[1] ); }, // deprecated, to be removed in 1.3 rangeLength: function(value, element, param) { return jQuery.validator.methods.rangelength.apply(this, arguments); }, // http://docs.jquery.com/Plugins/Validation/Methods/min min: function( value, element, param ) { return this.optional(element) || value >= param; }, // deprecated, to be removed in 1.3 minValue: function() { return jQuery.validator.methods.min.apply(this, arguments); }, // http://docs.jquery.com/Plugins/Validation/Methods/max max: function( value, element, param ) { return this.optional(element) || value <= param; }, // deprecated, to be removed in 1.3 maxValue: function() { return jQuery.validator.methods.max.apply(this, arguments); }, // http://docs.jquery.com/Plugins/Validation/Methods/range range: function( value, element, param ) { return this.optional(element) || ( value >= param[0] && value <= param[1] ); }, // deprecated, to be removed in 1.3 rangeValue: function() { return jQuery.validator.methods.range.apply(this, arguments); }, // http://docs.jquery.com/Plugins/Validation/Methods/email email: function(value, element) { // contributed by Scott Gonzalez: http://projects.scottsplayground.com/email_address_validation/ return this.optional(element) || /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test(value); }, // http://docs.jquery.com/Plugins/Validation/Methods/url url: function(value, element) { // contributed by Scott Gonzalez: http://projects.scottsplayground.com/iri/ return this.optional(element) || /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(value); }, // http://docs.jquery.com/Plugins/Validation/Methods/date date: function(value, element) { return this.optional(element) || !/Invalid|NaN/.test(new Date(value)); }, // http://docs.jquery.com/Plugins/Validation/Methods/dateISO dateISO: function(value, element) { return this.optional(element) || /^\d{4}[\/-]\d{1,2}[\/-]\d{1,2}$/.test(value); }, // http://docs.jquery.com/Plugins/Validation/Methods/dateDE dateDE: function(value, element) { return this.optional(element) || /^\d\d?\.\d\d?\.\d\d\d?\d?$/.test(value); }, // http://docs.jquery.com/Plugins/Validation/Methods/number number: function(value, element) { return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/.test(value); }, // http://docs.jquery.com/Plugins/Validation/Methods/numberDE numberDE: function(value, element) { return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:\.\d{3})+)(?:,\d+)?$/.test(value); }, // http://docs.jquery.com/Plugins/Validation/Methods/digits digits: function(value, element) { return this.optional(element) || /^\d+$/.test(value); }, // http://docs.jquery.com/Plugins/Validation/Methods/creditcard // based on http://en.wikipedia.org/wiki/Luhn creditcard: function(value, element) { if ( this.optional(element) ) return "dependency-mismatch"; var nCheck = 0, nDigit = 0, bEven = false; value = value.replace(/\D/g, ""); for (n = value.length - 1; n >= 0; n--) { var cDigit = value.charAt(n); var nDigit = parseInt(cDigit, 10); if (bEven) { if ((nDigit *= 2) > 9) nDigit -= 9; } nCheck += nDigit; bEven = !bEven; } return (nCheck % 10) == 0; }, // http://docs.jquery.com/Plugins/Validation/Methods/accept accept: function(value, element, param) { param = typeof param == "string" ? param : "png|jpe?g|gif"; return this.optional(element) || value.match(new RegExp(".(" + param + ")$", "i")); }, // http://docs.jquery.com/Plugins/Validation/Methods/equalTo equalTo: function(value, element, param) { return value == jQuery(param).val(); } } }); // ajax mode: abort // usage: $.ajax({ mode: "abort"[, port: "uniqueport"]}); // if mode:"abort" is used, the previous request on that port (port can be undefined) is aborted via XMLHttpRequest.abort() ;(function($) { var ajax = $.ajax; var pendingRequests = {}; $.ajax = function(settings) { // create settings for compatibility with ajaxSetup settings = jQuery.extend(settings, jQuery.extend({}, jQuery.ajaxSettings, settings)); var port = settings.port; if (settings.mode == "abort") { if ( pendingRequests[port] ) { pendingRequests[port].abort(); } return pendingRequests[port] = ajax.apply(this, arguments); } return ajax.apply(this, arguments); }; })(jQuery); // provides cross-browser focusin and focusout events // IE has native support, in other browsers, use event caputuring (neither bubbles) // provides delegate(type: String, delegate: Selector, handler: Callback) plugin for easier event delegation // handler is only called when $(event.target).is(delegate), in the scope of the jQuery-object for event.target // provides triggerEvent(type: String, target: Element) to trigger delegated events ;(function($) { $.extend($.event.special, { focusin: { setup: function() { if ($.browser.msie) return false; this.addEventListener("focus", $.event.special.focusin.handler, true); }, teardown: function() { if ($.browser.msie) return false; this.removeEventListener("focus", $.event.special.focusin.handler, true); }, handler: function(event) { var args = Array.prototype.slice.call( arguments, 1 ); args.unshift($.extend($.event.fix(event), { type: "focusin" })); return $.event.handle.apply(this, args); } }, focusout: { setup: function() { if ($.browser.msie) return false; this.addEventListener("blur", $.event.special.focusout.handler, true); }, teardown: function() { if ($.browser.msie) return false; this.removeEventListener("blur", $.event.special.focusout.handler, true); }, handler: function(event) { var args = Array.prototype.slice.call( arguments, 1 ); args.unshift($.extend($.event.fix(event), { type: "focusout" })); return $.event.handle.apply(this, args); } } }); $.extend($.fn, { delegate: function(type, delegate, handler) { return this.bind(type, function(event) { var target = $(event.target); if (target.is(delegate)) { return handler.apply(target, arguments); } }); }, triggerEvent: function(type, target) { return this.triggerHandler(type, [jQuery.event.fix({ type: type, target: target })]); } }) })(jQuery); /* * Copyright (c) 2007 Josh Bush (digitalbush.com) * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, * copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following * conditions: * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. */ /* * Version: 1.0 * Release: 2007-07-25 */ (function($) { //Helper Functions for Caret positioning function getCaretPosition(ctl){ var res = {begin: 0, end: 0 }; if (ctl.setSelectionRange){ res.begin = ctl.selectionStart; res.end = ctl.selectionEnd; }else if (document.selection && document.selection.createRange){ var range = document.selection.createRange(); res.begin = 0 - range.duplicate().moveStart('character', -100000); res.end = res.begin + range.text.length; } return res; }; function setCaretPosition(ctl, pos){ if(ctl.setSelectionRange){ ctl.focus(); ctl.setSelectionRange(pos,pos); }else if (ctl.createTextRange){ var range = ctl.createTextRange(); range.collapse(true); range.moveEnd('character', pos); range.moveStart('character', pos); range.select(); } }; //Predefined character definitions var charMap={ '9':"[0-9]", 'a':"[A-Za-z]", '*':"[A-Za-z0-9]" }; //Helper method to inject character definitions $.mask={ addPlaceholder : function(c,r){ charMap[c]=r; } }; //Main Method $.fn.mask = function(mask,settings) { settings = $.extend({ placeholder: "_", completed: null }, settings); //Build Regex for format validation var reString="^"; for(var i=0;i 16 && k < 32 ) || (k > 32 && k < 41)); //delete selection before proceeding if((pos.begin-pos.end)!=0 && (!ignore || k==8 || k==46)){ clearBuffer(pos.begin,pos.end); } //backspace and delete get special treatment if(k==8){//backspace while(pos.begin-->=0){ if(!locked[pos.begin]){ buffer[pos.begin]=settings.placeholder; if($.browser.opera){ //Opera won't let you cancel the backspace, so we'll let it backspace over a dummy character. writeBuffer(pos.begin); setCaretPosition(this,pos.begin+1); }else{ writeBuffer(); setCaretPosition(this,pos.begin); } return false; } } }else if(k==46){//delete clearBuffer(pos.begin,pos.begin+1); writeBuffer(); setCaretPosition(this,pos.begin); return false; }else if (k==27){ clearBuffer(0,mask.length); writeBuffer(); setCaretPosition(this,0); return false; } }); input.keypress(function(e){ if(ignore){ ignore=false; return; } e=e||window.event; var k=e.charCode||e.keyCode||e.which; var pos=getCaretPosition(this); var caretPos=pos.begin; if(e.ctrlKey || e.altKey){//Ignore return true; }else if ((k>=41 && k<=122) ||k==32 || k>186){//typeable characters while(pos.begin=buffer.length) settings.completed.call(input); else setCaretPosition(this,caretPos); return false; }); /*Helper Methods*/ function clearBuffer(start,end){ for(var i=start;i 0 ) $results.css("width", options.width); // Add to body element $("body").append(results); input.autocompleter = me; var timeout = null; var prev = ""; var active = -1; var cache = {}; var keyb = false; var hasFocus = false; var lastKeyPressCode = null; // flush cache function flushCache(){ cache = {}; cache.data = {}; cache.length = 0; }; // flush cache flushCache(); // if there is a data array supplied if( options.data != null ){ var sFirstChar = "", stMatchSets = {}, row = []; // no url was specified, we need to adjust the cache length to make sure it fits the local data store if( typeof options.url != "string" ) options.cacheLength = 1; // loop through the array and create a lookup structure for( var i=0; i < options.data.length; i++ ){ // if row is a string, make an array otherwise just reference the array row = ((typeof options.data[i] == "string") ? [options.data[i]] : options.data[i]); // if the length is zero, don't add to list if( row[0].length > 0 ){ // get the first character sFirstChar = row[0].substring(0, 1).toLowerCase(); // if no lookup array for this character exists, look it up now if( !stMatchSets[sFirstChar] ) stMatchSets[sFirstChar] = []; // if the match is a string stMatchSets[sFirstChar].push(row); } } // add the data items to the cache for( var k in stMatchSets ){ // increase the cache size options.cacheLength++; // add to the cache addToCache(k, stMatchSets[k]); } } $input .keydown(function(e) { // track last key pressed lastKeyPressCode = e.keyCode; switch(e.keyCode) { case 38: // up e.preventDefault(); moveSelect(-1); break; case 40: // down e.preventDefault(); moveSelect(1); break; case 9: // tab case 13: // return if( selectCurrent() ){ // make sure to blur off the current field $input.get(0).blur(); e.preventDefault(); } break; default: active = -1; if (timeout) clearTimeout(timeout); timeout = setTimeout(function(){onChange();}, options.delay); break; } }) .focus(function(){ // track whether the field has focus, we shouldn't process any results if the field no longer has focus hasFocus = true; }) .blur(function() { // track whether the field has focus hasFocus = false; hideResults(); }); hideResultsNow(); function onChange() { // ignore if the following keys are pressed: [del] [shift] [capslock] if( lastKeyPressCode == 46 || (lastKeyPressCode > 8 && lastKeyPressCode < 32) ) return $results.hide(); var v = $input.val(); if (v == prev) return; prev = v; if (v.length >= options.minChars) { $input.addClass(options.loadingClass); requestData(v); } else { $input.removeClass(options.loadingClass); $results.hide(); } }; function moveSelect(step) { var lis = $("li", results); if (!lis) return; active += step; if (active < 0) { active = 0; } else if (active >= lis.size()) { active = lis.size() - 1; } lis.removeClass("CVC_ac_over"); $(lis[active]).addClass("CVC_ac_over"); // Weird behaviour in IE // if (lis[active] && lis[active].scrollIntoView) { // lis[active].scrollIntoView(false); // } }; function selectCurrent() { var li = $("li.CVC_ac_over", results)[0]; if (!li) { var $li = $("li", results); if (options.selectOnly) { if ($li.length == 1) li = $li[0]; } else if (options.selectFirst) { li = $li[0]; } } if (li) { selectItem(li); return true; } else { return false; } }; function selectItem(li) { if (!li) { li = document.createElement("li"); li.extra = []; li.selectValue = ""; } var v = $.trim(li.selectValue ? li.selectValue : li.innerHTML); input.lastSelected = v; prev = v; $results.html(""); $input.val(v); hideResultsNow(); if (options.onItemSelect) setTimeout(function() { options.onItemSelect(li) }, 1); }; // selects a portion of the input string function createSelection(start, end){ // get a reference to the input element var field = $input.get(0); if( field.createTextRange ){ var selRange = field.createTextRange(); selRange.collapse(true); selRange.moveStart("character", start); selRange.moveEnd("character", end); selRange.select(); } else if( field.setSelectionRange ){ field.setSelectionRange(start, end); } else { if( field.selectionStart ){ field.selectionStart = start; field.selectionEnd = end; } } field.focus(); }; // fills in the input box w/the first match (assumed to be the best match) function autoFill(sValue){ // if the last user key pressed was backspace, don't autofill if( lastKeyPressCode != 8 ){ // fill in the value (keep the case the user has typed) $input.val($input.val() + sValue.substring(prev.length)); // select the portion of the value not typed by the user (so the next character will erase) createSelection(prev.length, sValue.length); } }; function showResults() { // get the position of the input field right now (in case the DOM is shifted) var pos = findPos(input); // either use the specified width, or autocalculate based on form element var iWidth = (options.width > 0) ? options.width : $input.width(); // reposition $results.css({ width: parseInt(iWidth) + "px", top: (pos.y + input.offsetHeight) + "px", left: pos.x + "px" }).show(); }; function hideResults() { if (timeout) clearTimeout(timeout); timeout = setTimeout(hideResultsNow, 200); }; function hideResultsNow() { if (timeout) clearTimeout(timeout); $input.removeClass(options.loadingClass); if ($results.is(":visible")) { $results.hide(); } if (options.mustMatch) { var v = $input.val(); if (v != input.lastSelected) { selectItem(null); } } }; function receiveData(q, data) { if (data) { $input.removeClass(options.loadingClass); results.innerHTML = ""; // if the field no longer has focus or if there are no matches, do not display the drop down if( !hasFocus || data.length == 0 ) return hideResultsNow(); if ($.browser.msie) { // we put a styled iframe behind the calendar so HTML SELECT elements don't show through //$results.append(document.createElement('iframe')); } results.appendChild(dataToDom(data)); // autofill in the complete box w/the first match as long as the user hasn't entered in more data if( options.autoFill && ($input.val().toLowerCase() == q.toLowerCase()) ) autoFill(data[0][0]); showResults(); } else { hideResultsNow(); } }; function parseData(data) { if (!data) return null; var parsed = []; var rows = data.split(options.lineSeparator); for (var i=0; i < rows.length; i++) { var row = $.trim(rows[i]); if (row) { parsed[parsed.length] = row.split(options.cellSeparator); } } return parsed; }; function dataToDom(data) { var ul = document.createElement("ul"); var num = data.length; // limited results to a max number if( (options.maxItemsToShow > 0) && (options.maxItemsToShow < num) ) num = options.maxItemsToShow; for (var i=0; i < num; i++) { var row = data[i]; if (!row) continue; var li = document.createElement("li"); if (options.formatItem) { li.innerHTML = options.formatItem(row, i, num); li.selectValue = row[0]; } else { li.innerHTML = row[0]; li.selectValue = row[0]; } var extra = null; if (row.length > 1) { extra = []; for (var j=1; j < row.length; j++) { extra[extra.length] = row[j]; } } li.extra = extra; ul.appendChild(li); $(li).hover( function() { $("li", ul).removeClass("CVC_ac_over"); $(this).addClass("CVC_ac_over"); active = $("li", ul).indexOf($(this).get(0)); }, function() { $(this).removeClass("CVC_ac_over"); } ).click(function(e) { e.preventDefault(); e.stopPropagation(); selectItem(this) }); } return ul; }; function requestData(q) { if (!options.matchCase) q = q.toLowerCase(); var data = options.cacheLength ? loadFromCache(q) : null; // recieve the cached data if (data) { receiveData(q, data); // if an AJAX url has been supplied, try loading the data now } else if( (typeof options.url == "string") && (options.url.length > 0) ){ $.get(makeUrl(q), function(data) { data = parseData(data); addToCache(q, data); receiveData(q, data); }); // if there's been no data found, remove the loading class } else { $input.removeClass(options.loadingClass); } }; function makeUrl(q) { var url = options.url + "?q=" + encodeURI(q); for (var i in options.extraParams) { url += "&" + i + "=" + encodeURI(options.extraParams[i]); } return url; }; function loadFromCache(q) { if (!q) return null; if (cache.data[q]) return cache.data[q]; if (options.matchSubset) { for (var i = q.length - 1; i >= options.minChars; i--) { var qs = q.substr(0, i); var c = cache.data[qs]; if (c) { var csub = []; for (var j = 0; j < c.length; j++) { var x = c[j]; var x0 = x[0]; if (matchSubset(x0, q)) { csub[csub.length] = x; } } return csub; } } } return null; }; function matchSubset(s, sub) { if (!options.matchCase) s = s.toLowerCase(); var i = s.indexOf(sub); if (i == -1) return false; return i == 0 || options.matchContains; }; this.flushCache = function() { flushCache(); }; this.setExtraParams = function(p) { options.extraParams = p; }; this.findValue = function(){ var q = $input.val(); if (!options.matchCase) q = q.toLowerCase(); var data = options.cacheLength ? loadFromCache(q) : null; if (data) { findValueCallback(q, data); } else if( (typeof options.url == "string") && (options.url.length > 0) ){ $.get(makeUrl(q), function(data) { data = parseData(data) addToCache(q, data); findValueCallback(q, data); }); } else { // no matches findValueCallback(q, null); } } function findValueCallback(q, data){ if (data) $input.removeClass(options.loadingClass); var num = (data) ? data.length : 0; var li = null; for (var i=0; i < num; i++) { var row = data[i]; if( row[0].toLowerCase() == q.toLowerCase() ){ li = document.createElement("li"); if (options.formatItem) { li.innerHTML = options.formatItem(row, i, num); li.selectValue = row[0]; } else { li.innerHTML = row[0]; li.selectValue = row[0]; } var extra = null; if( row.length > 1 ){ extra = []; for (var j=1; j < row.length; j++) { extra[extra.length] = row[j]; } } li.extra = extra; } } if( options.onFindValue ) setTimeout(function() { options.onFindValue(li) }, 1); } function addToCache(q, data) { if (!data || !q || !options.cacheLength) return; if (!cache.length || cache.length > options.cacheLength) { flushCache(); cache.length++; } else if (!cache[q]) { cache.length++; } cache.data[q] = data; }; function findPos(obj) { var curleft = obj.offsetLeft || 0; var curtop = obj.offsetTop || 0; while (obj = obj.offsetParent) { curleft += obj.offsetLeft curtop += obj.offsetTop } return {x:curleft,y:curtop}; } } jQuery.fn.autocomplete = function(url, options, data) { // Make sure options exists options = options || {}; // Set url as option options.url = url; // set some bulk local data options.data = ((typeof data == "object") && (data.constructor == Array)) ? data : null; // Set default values for required options options.inputClass = options.inputClass || "CVC_ac_input"; options.resultsClass = options.resultsClass || "CVC_ac_results"; options.lineSeparator = options.lineSeparator || "\n"; options.cellSeparator = options.cellSeparator || "|"; options.minChars = options.minChars || 1; options.delay = options.delay || 400; options.matchCase = options.matchCase || 0; options.matchSubset = options.matchSubset || 1; options.matchContains = options.matchContains || 0; options.cacheLength = options.cacheLength || 1; options.mustMatch = options.mustMatch || 0; options.extraParams = options.extraParams || {}; options.loadingClass = options.loadingClass || "ac_loading"; options.selectFirst = options.selectFirst || false; options.selectOnly = options.selectOnly || false; options.maxItemsToShow = options.maxItemsToShow || -1; options.autoFill = options.autoFill || false; options.width = parseInt(options.width, 10) || 0; this.each(function() { var input = this; new jQuery.autocomplete(input, options); }); // Don't break the chain return this; } jQuery.fn.autocompleteArray = function(data, options) { return this.autocomplete(null, options, data); } jQuery.fn.indexOf = function(e){ for( var i=0; i', * truncate: 60, * ajaxSettings: { * type: 'POST' * } * }); * @desc Displays a clueTip on mouseover of all elements with class="clue". The hovered element gets a class of "highlight" added to it (so that it can be styled appropriately. This is esp. useful for non-anchor elements.). The clueTip is "sticky," which means that it will not be hidden until the user either clicks on its "close" text/graphic or displays another clueTip. The "close" text/graphic is set to diplay at the bottom of the clueTip (default is top) and display an image rather than the default "Close" text. Moreover, the body of the clueTip is truncated to the first 60 characters, which are followed by an ellipsis (...). Finally, the clueTip retrieves the content using POST rather than the $.ajax method's default "GET." * * * * @param Object defaults (optional) Customize your clueTips * @option Number width: default is 275. The width of the clueTip * @option Number|String height: default is 'auto'. The height of the clueTip. Setting a specific height also sets
to overflow:auto * @option Boolean local: default is false. Whether to use content from the same page (using ID) for clueTip body * @option Boolean hideLocal: default is true. If local option is set to true, determine whether local content to be shown in clueTip should be hidden at its original location. * @option String attribute default is 'rel'. The attribute to be used for the URL of the ajaxed content * @option Boolean showtitle: default is true. Shows the title bar of the clueTip, whether a title attribute has been set or not. Change this to false to hide the title bar. * @option String cluetipClass: default is 'default'; this adds a class to the outermost clueTip div with a class name in the form of 'cluetip-' + clueTipClass. It also adds "clue-left-default" or "clue-right-default" to the same div, depending on whether the clueTip is to the left or to the right of the link element. This allows you to create your own clueTip theme in a separate CSS file or use one of the three pre-packaged themes: default, jtip, or rounded. * @option String titleAttribute: default is 'title'. The attribute to be used for the clueTip's heading, if the attribute exists for the hovered element. * @option String splitTitle: default is '' (empty string). A character used to split the title attribute into the clueTip title and divs within the clueTip body; if used, the clueTip will be populated only by the title attribute, * @option String hoverClass: default is empty string. designate one to apply to the hovered element * @option String closePosition: default is 'top'. Set to 'bottom' to put the closeText at the bottom of the clueTip body * @option String closeText: default is 'Close'. This determines the text to be clicked to close a clueTip when sticky is set to true. * @option Number truncate: default is 0. Set to some number greater than 0 to truncate the text in the body of the clueTip. This also removes all HTML/images from the clueTip body. * @option Boolean waitImage: default is true. Set to false to avoid having the plugin try to show/hide the image. * @option Boolean arrows: Default is false. Sets background-position-y to line up an arrow background image with the hovered element. * @option Boolean dropShadow: default is true; set it to false if you do not want the drop-shadow effect on the clueTip * @option Integer dropShadowSteps: default is 6; change this number to adjust the size of the drop shadow * @option Boolean sticky: default is false. Set to true to keep the clueTip visible until the user either closes it manually by clicking on the CloseText or display another clueTip. * @option Integer cluezIndex: default is 97; sets the z-index style property of the clueTip. * @option String positionBy: default is 'auto'. Available options: 'auto', 'mouse', or 'bottomTop'. Change to 'mouse' if you want to override positioning by element and position the clueTip based on where the mouse is instead. Change to 'bottomTop' if you want positioning to begin below the mouse when there is room or above if not -- rather than right or left of the elemnent and flush with element's top. * @option Object fx: default is: {open: 'show', openSpeed: '', close: 'hide', closeSpeed: ''}. Change these to apply one of jQuery's effects when opening or closing the clueTip * @option String activation: default is 'hover'. Set to 'toggle' to force the user to click the element in order to activate the clueTip. * @option Object hoverIntent: default is {sensitivity: 3, interval: 50, timeout: 0}. If jquery.hoverintent.js plugin is included in , hoverIntent() will be used with these settings instead of hover(). Set to false if for some reason you have the hoverintent plugin included but don't want to use it. For info on hoverIntent options, see http://cherne.net/brian/resources/jquery.hoverIntent.html * @option Function onShow: default is function (ct, c){} ; allows you to pass in your own function once the clueTip has shown. * @option Boolean ajaxCache: Default is true; caches the results of the ajax request to avoid unnecessary hits to the server. When set to false, the script will make an ajax request every time the clueTip is shown, which allows for dynamic content to be loaded. * @option Object ajaxProcess: Default is function(data) { data = $(data).not('style, meta, link, script, title); return data; } . When getting clueTip content via ajax, allows processing of it before it's displayed. The default value strips out elements typically found in the that might interfere with current page. * @option Object ajaxSettings: allows you to pass in standard $.ajax() parameters, not including error, complete, success, and url. Default is { dataType: 'html'} * */ var $cluetip, $cluetipInner, $cluetipOuter, $cluetipTitle, $dropShadow, imgCount; var msie6 = $.browser.msie && ($.browser.version && $.browser.version < 7 || (/5\.5|6.0/).test(navigator.userAgent)); $.cluetipCallback = function(){}; $.fn.cluetip = function(options) { // set up default options var defaults = { width: 275, height: 'auto', cluezIndex: 97, positionBy: 'auto', topOffset: 0, leftOffset: 0, local: false, hideLocal: true, attribute: 'rel', titleAttribute: 'title', splitTitle: '', showTitle: true, cluetipClass: 'default', hoverClass: '', waitImage: true, cursor: 'help', arrows: false, dropShadow: true, dropShadowSteps: 6, sticky: false, mouseOutClose: false, activation: 'hover', closePosition: 'top', closeText: 'Close', truncate: 0, positionBy: 'auto', fx: { open: 'show', openSpeed: '', close: 'hide', closeSpeed: '' }, onActivate:function(e) {return true;}, hoverIntent: { sensitivity: 3, interval: 50, timeout: 0 }, onShow: function (ct, c){}, ajaxCache: true, ajaxProcess: function(data) { data = $(data).not('style, meta, link, script, title'); return data; }, ajaxSettings: { dataType: 'html' } }; if (options && options.ajaxSettings) { $.extend(defaults.ajaxSettings, options.ajaxSettings); delete options.ajaxSettings; } if (options && options.fx) { $.extend(defaults.fx, options.fx); delete options.fx; } if (options && options.hoverIntent) { $.extend(defaults.hoverIntent, options.hoverIntent); delete options.hoverIntent; } $.extend(defaults, options); return this.each(function() { // start out with no contents (for ajax activation) var cluetipContents = false; var cluezIndex = parseInt(defaults.cluezIndex, 10)-1; var isActive = false; // create the cluetip divs if (!$cluetip) { $cluetipInner = $('
'); $cluetipTitle = $('

'); $cluetipOuter = $('
').append($cluetipInner).prepend($cluetipTitle); $cluetip = $('
').attr({'id': 'cluetip'}).css({zIndex: defaults.cluezIndex}) .append($cluetipOuter)[insertionType](insertionElement);//.hide(); $('
').css({position: 'absolute', zIndex: cluezIndex-1}) .insertBefore('#cluetip').hide(); $cluetip.css({position: 'absolute', zIndex: cluezIndex}); $cluetipOuter.css({position: 'relative', zIndex: cluezIndex+1}); } var dropShadowSteps = (defaults.dropShadow) ? +defaults.dropShadowSteps : 0; if (!$dropShadow) { $dropShadow = $([]); for (var i=0; i < dropShadowSteps; i++) { $dropShadow = $dropShadow.add($('
').css({zIndex: cluezIndex-i-1, opacity:.1, top: 1+i, left: 1+i})); }; $dropShadow.css({position: 'absolute', backgroundColor: '#000'}) .prependTo($cluetip); } var $this = $(this); var tipAttribute = $this.attr(defaults.attribute), ctClass = defaults.cluetipClass; if (!tipAttribute && !defaults.splitTitle) return true; // if hideLocal is set to true, on DOM ready hide the local content that will be displayed in the clueTip if (defaults.local && defaults.hideLocal) { $(tipAttribute + ':first').hide(); } var tOffset = parseInt(defaults.topOffset, 10), lOffset = parseInt(defaults.leftOffset, 10); // vertical measurement variables var tipHeight, wHeight; var defHeight = isNaN(parseInt(defaults.height, 10)) ? 'auto' : (/\D/g).test(defaults.height) ? defaults.height : defaults.height + 'px'; var sTop, linkTop, posY, tipY, mouseY; // horizontal measurement variables var tipWidth = parseInt(defaults.width, 10) + parseInt($cluetip.css('paddingLeft')) + parseInt($cluetip.css('paddingRight')) + dropShadowSteps; if( isNaN(tipWidth) ) tipWidth = 275; var linkWidth = this.offsetWidth; var linkLeft, posX, tipX, mouseX, winWidth; // parse the title var tipParts; var tipTitle = (defaults.attribute != 'title') ? $this.attr(defaults.titleAttribute) : ''; if (defaults.splitTitle) { tipParts = tipTitle.split(defaults.splitTitle); tipTitle = tipParts.shift(); } var localContent; /*************************************** * ACTIVATION ****************************************/ //activate clueTip var activate = function(event) { if (!defaults.onActivate($this)) { return false; } isActive = true; $cluetip.removeClass().css({width: defaults.width}); if (tipAttribute == $this.attr('href')) { $this.css('cursor', defaults.cursor); } $this.attr('title',''); if (defaults.hoverClass) { $this.addClass(defaults.hoverClass); } linkTop = posY = $this.offset().top; linkLeft = $this.offset().left; mouseX = event.pageX; mouseY = event.pageY; if ($this[0].tagName.toLowerCase() != 'area') { sTop = $(document).scrollTop(); winWidth = $(window).width(); } // position clueTip horizontally posX = (linkWidth > linkLeft && linkLeft > tipWidth) || linkLeft + linkWidth + tipWidth > winWidth ? linkLeft - tipWidth - 15 : linkWidth + linkLeft + 15; if ($this[0].tagName.toLowerCase() == 'area' || defaults.positionBy == 'mouse' || linkWidth + tipWidth > winWidth) { // position by mouse if (mouseX + 20 + tipWidth > winWidth) { posX = (mouseX - tipWidth - 20) >= 0 ? mouseX - tipWidth - 20 : mouseX - (tipWidth/2); } else { posX = mouseX + 20; } var pY = posX < 0 ? event.pageY + 20 : event.pageY; } posX < linkLeft ? $cluetip.addClass('clue-left-' + ctClass).removeClass('clue-right-' + ctClass) : $cluetip.addClass('clue-right-' + ctClass).removeClass('clue-left-' + ctClass); $cluetip.css({left: (posX > 0 && defaults.positionBy != 'bottomTop') ? posX : (mouseX + (tipWidth/2) > winWidth) ? winWidth/2 - tipWidth/2 : Math.max(mouseX - (tipWidth/2),0)}); wHeight = $(window).height(); /*************************************** * load the title attribute only (or user-selected attribute). * clueTip title is the string before the first delimiter * subsequent delimiters place clueTip body text on separate lines ***************************************/ if (tipParts) { for (var i=0; i < tipParts.length; i++){ if (i == 0) { $cluetipInner.html(tipParts[i]); } else { $cluetipInner.append('
' + tipParts[i] + '
'); } }; cluetipShow(pY); } /*************************************** * load external file via ajax ***************************************/ else if (!defaults.local && tipAttribute.indexOf('#') != 0) { if (cluetipContents && defaults.ajaxCache) { $cluetipInner.html(cluetipContents); cluetipShow(pY); } else { var ajaxSettings = defaults.ajaxSettings; /*ajaxSettings.url = tipAttribute; ajaxSettings.beforeSend = function() {*/ $cluetipOuter.children().empty(); if (defaults.waitImage) { $('#cluetip-waitimage') .css({top: mouseY-10, left: parseInt(posX+(tipWidth/2),10)}) .show(); } /* }; ajaxSettings.error = function() { if (isActive) { $cluetipInner.html('sorry, the contents could not be loaded'); } }; ajaxSettings.success = function(data) { cluetipContents = defaults.ajaxProcess(data); if (isActive) { $cluetipInner.html(cluetipContents); } };*/ ajaxSettings.complete = function() { //$.cluetipCallback = function(){}; if(!isActive) { cluetipClose(); return; } imgCount = $('#cluetip-inner img').length; if (imgCount) { $('#cluetip-inner img').load( function(){ imgCount--; if (imgCount<1) { $('#cluetip-waitimage').hide(); if (isActive) cluetipShow(pY); } }); } else { $('#cluetip-waitimage').hide(); cluetipShow(pY); } }; $.cluetipCallback = ajaxSettings.complete; Convocast.doRequest(defaults.data($this)); } /*************************************** * load an element from the same page ***************************************/ } else if (defaults.local && tipAttribute.indexOf('#') == 0){ var localContent = $(tipAttribute).html(); $cluetipInner.html(localContent); cluetipShow(pY); } }; // get dimensions and options for cluetip and prepare it to be shown var cluetipShow = function(bpY) { $cluetip.addClass('cluetip-' + ctClass); if (defaults.truncate) { var $truncloaded = $cluetipInner.text().slice(0,defaults.truncate) + '...'; $cluetipInner.html($truncloaded); } function doNothing() {}; //empty function tipTitle ? $cluetipTitle.show().html(tipTitle) : (defaults.showTitle) ? $cluetipTitle.show().html(' ') : doNothing();//$cluetipTitle.hide(); if (defaults.sticky) { var $closeLink = $('
'); (defaults.closePosition == 'bottom') ? $closeLink.appendTo($cluetipInner) : (defaults.closePosition == 'title') ? $closeLink.prependTo($cluetipTitle) : $closeLink.prependTo($cluetipInner); $closeLink.click(function() { cluetipClose(); return false; }); if (defaults.mouseOutClose) { $cluetip.hover(function() {doNothing(); }, function() {$closeLink.trigger('click'); }); } else { $cluetip.unbind('mouseout'); } } // now that content is loaded, finish the positioning $cluetipOuter.css({overflow: defHeight == 'auto' ? 'visible' : 'auto', height: defHeight}); tipHeight = defHeight == 'auto' ? $cluetip.outerHeight() : parseInt(defHeight,10); //tipHeight = defHeight == 'auto' ? 0 : parseInt(defHeight,10); tipY = posY; if ( (posX < mouseX && Math.max(posX, 0) + tipWidth > mouseX) || defaults.positionBy == 'bottomTop') { tipY = posY + tipHeight > sTop + wHeight && mouseY - sTop > tipHeight + 10 ? mouseY - tipHeight - 16 : mouseY + 20; } else if ( posY + tipHeight > sTop + wHeight ) { tipY = (tipHeight >= wHeight) ? sTop : sTop + wHeight - tipHeight - 10; } else if ($this.css('display') == 'block' || $this[0].tagName.toLowerCase() == 'area' || defaults.positionBy == "mouse") { tipY = bpY - 10; } else { tipY = posY - defaults.dropShadowSteps; } $cluetip.css({top: tipY + 'px'}); if (defaults.arrows) { // set up background positioning to align with element var bgPos = '0 0'; var bgY = (posY - tipY - defaults.dropShadowSteps); if ($cluetip.is('.clue-left-' + ctClass)) { bgPos = posX >=0 ? '100% ' + bgY + 'px' : '100% 0'; } else if ($cluetip.is('.clue-right-' +ctClass)) { bgPos = (posX >=0 && bgY > 0) ? '0 ' + bgY + 'px' : '0 0'; } } else { bgPos = '0 100%'; } $cluetip.css({backgroundPosition: bgPos}); // (first hide, then) ***SHOW THE CLUETIP*** $dropShadow.hide(); //$cluetip.hide()[defaults.fx.open](defaults.fx.open != 'show' && defaults.fx.openSpeed); if (defaults.dropShadow) $dropShadow.css({height: tipHeight, width: defaults.width}).show(); // trigger the optional onShow function defaults.onShow($cluetip, $cluetipInner); }; /*************************************** =INACTIVATION -------------------------------------- */ var inactivate = function() { isActive = false; $('#cluetip-waitimage').hide(); if (!defaults.sticky) { cluetipClose(); }; if (defaults.hoverClass) { $this.removeClass(defaults.hoverClass); } }; // close cluetip and reset title attribute if one exists var cluetipClose = function() { $cluetipOuter //.parent()[defaults.fx.close](defaults.fx.closeSpeed).removeClass().end() .parent().removeClass().end() .children().empty(); if(tipTitle) { $this.attr('title', tipTitle); } }; /*************************************** =BIND EVENTS -------------------------------------- */ // activate by click if (defaults.activation == 'click'||defaults.activation == 'toggle') { $this.click(function(event) { if ($cluetip.is(':hidden')) { activate(event); } else { inactivate(event); } this.blur(); return false; }); // activate by hover // clicking is returned false if cluetip url is same as href url } else { $this.click(function() { if (tipAttribute == $this.attr('href')) { return false; } }); if ($.fn.hoverIntent && defaults.hoverIntent) { $this.hoverIntent({ sensitivity: defaults.hoverIntent.sensitivity, interval: defaults.hoverIntent.interval, over: function(event) {activate(event);}, timeout: defaults.hoverIntent.timeout, out: function(event) {inactivate(event);} }); } else { $this.hover(function(event) { activate(event); }, function(event) { inactivate(event); }); } } }); }; /* * Global defaults for clueTips. Apply to all calls to the clueTip plugin. * * @example $.cluetip.setup({ * insertionType: 'prependTo', * insertionElement: '#container' * }); * * @property * @name $.cluetip.setup * @type Map * @cat Plugins/tooltip * @option String insertionType: Default is 'appendTo'. Determines the method to be used for inserting the clueTip into the DOM. Permitted values are 'appendTo', 'prependTo', 'insertBefore', and 'insertAfter' * @option String insertionElement: Default is 'body'. Determines which element in the DOM the plugin will reference when inserting the clueTip. * */ var insertionType = 'appendTo', insertionElement = 'body'; $.cluetip = {}; $.cluetip.setup = function(options) { if (options && options.insertionType && (options.insertionType).match(/appendTo|prependTo|insertBefore|insertAfter/)) { insertionType = options.insertionType; } if (options && options.insertionElement) { insertionElement = options.insertionElement; } }; })(jQuery);/** * Star Rating - jQuery plugin * * Copyright (c) 2006 Wil Stuckey * * Dual licensed under the MIT and GPL licenses: * http://www.opensource.org/licenses/mit-license.php * http://www.gnu.org/licenses/gpl.html * */ /** * Create a degradeable star rating interface out of a simple form structure. * Returns a modified jQuery object containing the new interface. * * @example jQuery('form.rating').rating(); * @cat plugin * @type jQuery * */ (function($){ var buildRatingNumber = function($obj){ var total = $obj.attr("total"); var voters = $obj.attr("voters"); var percent = Math.floor(100*voters/total); $obj.addClass("ratingNumber"); $obj.append('' + percent + ''); $obj.append('
'+percent+'%
'); $obj.children('a').css('width', percent + "%"); return $obj; } var buildRating = function($obj){ var $obj = buildInterface($obj), averageIndex = $obj.averageRating[0], averagePercent = $obj.averageRating[1], myIndex = $obj.myRating || 0, interact = $obj.interactive, $stars = $($obj.children('.CVC_star')); // hover and focus events added if(interact) { $stars .mouseover(function(){ event.drain(); event.fill(this); }) .mouseout(function(){ event.drain(); event.reset(); }) .focus(function(){ event.drain(); event.fill(this) }) .blur(function(){ event.drain(); event.reset(); }); $stars.click(function(){ myIndex = $(this).children('a').html(); Convocast.doRequest({route:'1',write:'posts',action:"rate_comment",rating:myIndex,el:$obj.ratingID,ref:$obj.ref}); return false; }); } else { myIndex = 0; $obj.css("cursor","default"); $stars.css("cursor","default").children('a').css("cursor","default"); } var event = { fill: function(el){ // fill to the current mouse position. var index = $stars.index(el) + 1; $stars .children('a').css('width', '100%').end() .slice(0, index).addClass('CVC_hover'); }, drain: function() { // drain all the stars. $stars.removeClass("CVC_on CVC_hover CVC_avgThenMine"); }, reset: function(){ // Reset the stars to the default index. if(myIndex <= averageIndex) { $stars.slice(0, myIndex).addClass('CVC_hover'); $stars.slice(myIndex, averageIndex).addClass('CVC_on'); } else { $stars.slice(0, averageIndex).addClass('CVC_on'); $stars.slice(averageIndex, myIndex).addClass('CVC_hover'); } var percent = (averagePercent) ? averagePercent * 10 : 0; if (percent > 0) { if(myIndex <= averageIndex) { $($stars[averageIndex]).addClass('CVC_on').children('a').css('width', percent + "%"); } else { $($stars[averageIndex]).removeClass('CVC_hover').addClass('CVC_avgThenMine').children('a').css('width', percent + "%"); } } } } event.reset(); $obj[0].setRating = function(index,avg) { myIndex = $.trim(index); avg = $.trim(avg).split('.'); averageIndex = avg[0]; averagePercent = avg[1]||0; event.reset(); }; return $obj; } /** * Accepts jQuery object containing a form element. * Returns the proper div structure for the star interface. * * @return jQuery * @param {Object} $form * */ var buildInterface = function($form){ var $container = $(document.createElement('div')).attr({ "title": "Average Rating: "+($form.attr("averageRating") || "Not Rated"), "class": $form.attr('class'), "id": $form.attr('id')+$form.attr("ref"), "style": $form.attr('style') }); $.extend($container, { averageRating: $.trim($form.attr("averageRating")).split('.'), myRating: $.trim($form.attr("myRating")), ratingID: $.trim($form.attr("id"))+$form.attr("ref"), ref: $form.attr("ref"), interactive: $form.attr("inactive") ? false : true }); var totalStars = $form.attr("totalStars") || 0;//.children('select').children('option'); for (var i = 1; i <= totalStars; i++){ $div = $(''); $container.append($div[0]); } if(totalStars!=0) { $form.after($container); } $form.remove(); return $container; } /** * Set up the plugin */ $.fn.rating = function(){ var stack = []; this.each(function(){ if($(this).attr("totalStars") != null) { var ret = buildRating($(this)); stack = $.merge(ret, stack); } }); return $(stack); } $.fn.ratingNumber = function(){ var stack = []; this.each(function(){ var ret = buildRatingNumber($(this)); stack = $.merge(ret, stack); }); return $(stack); } // fix ie6 background flicker problem. if ($.browser.msie) { document.execCommand('BackgroundImageCache', false, true); } })(jQuery);/* ** jquery.xsajax.js -- jQuery plugin for Cross-Site AJAX-style Javascript loading ** Copyright (c) 2007 Ralf S. Engelschall ** Licensed under GPL ** ** $LastChangedDate$ ** $LastChangedRevision$ */ (function($){ if ( $.browser.safari || navigator.userAgent.match(/Konqueror/i)) { $.extend({ _xsajax$node: [], _xsajax$nodes: 0 }); } $.extend({ getScriptXS: function () { var args = arguments[0].split("?"); if ($.browser.msie) { //IE needs indirection setTimeout(function(){ $.ajax({ type: "GET", url: args[0], data: args[1], dataType: "script" }); },23); } else { $.ajax({ type: "GET", url: args[0], data: args[1], dataType: "script" }); } return; //return $.getScript(arguments[0]); /* determine arguments */ var arg = { 'url': null, 'gc': false, 'cb': null, 'cb_args': null }; if (typeof arguments[0] == "string") { /* simple usage */ arg.url = arguments[0]; if (typeof arguments[1] == "function") { arg.cb = arguments[1]; } } else if (typeof arguments[0] == "object") { /* flexible usage */ for (var option in arguments[0]) if (typeof arg[option] != "undefined") arg[option] = arguments[0][option]; } /* generate