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

var tb_pathToImage = "http://www.bu.edu/nis/lib/jquery/thickbox/loadingAnimation.gif";

eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('$(o).2S(9(){1u(\'a.18, 3n.18, 3i.18\');1w=1p 1t();1w.L=2H});9 1u(b){$(b).s(9(){6 t=X.Q||X.1v||M;6 a=X.u||X.23;6 g=X.1N||P;19(t,a,g);X.2E();H P})}9 19(d,f,g){3m{3(2t o.v.J.2i==="2g"){$("v","11").r({A:"28%",z:"28%"});$("11").r("22","2Z");3(o.1Y("1F")===M){$("v").q("<U 5=\'1F\'></U><4 5=\'B\'></4><4 5=\'8\'></4>");$("#B").s(G)}}n{3(o.1Y("B")===M){$("v").q("<4 5=\'B\'></4><4 5=\'8\'></4>");$("#B").s(G)}}3(1K()){$("#B").1J("2B")}n{$("#B").1J("2z")}3(d===M){d=""}$("v").q("<4 5=\'K\'><1I L=\'"+1w.L+"\' /></4>");$(\'#K\').2y();6 h;3(f.O("?")!==-1){h=f.3l(0,f.O("?"))}n{h=f}6 i=/\\.2s$|\\.2q$|\\.2m$|\\.2l$|\\.2k$/;6 j=h.1C().2h(i);3(j==\'.2s\'||j==\'.2q\'||j==\'.2m\'||j==\'.2l\'||j==\'.2k\'){1D="";1G="";14="";1z="";1x="";R="";1n="";1r=P;3(g){E=$("a[@1N="+g+"]").36();25(D=0;((D<E.1c)&&(R===""));D++){6 k=E[D].u.1C().2h(i);3(!(E[D].u==f)){3(1r){1z=E[D].Q;1x=E[D].u;R="<1e 5=\'1X\'>&1d;&1d;<a u=\'#\'>2T &2R;</a></1e>"}n{1D=E[D].Q;1G=E[D].u;14="<1e 5=\'1U\'>&1d;&1d;<a u=\'#\'>&2O; 2N</a></1e>"}}n{1r=1b;1n="1t "+(D+1)+" 2L "+(E.1c)}}}S=1p 1t();S.1g=9(){S.1g=M;6 a=2x();6 x=a[0]-1M;6 y=a[1]-1M;6 b=S.z;6 c=S.A;3(b>x){c=c*(x/b);b=x;3(c>y){b=b*(y/c);c=y}}n 3(c>y){b=b*(y/c);c=y;3(b>x){c=c*(x/b);b=x}}13=b+30;1a=c+2G;$("#8").q("<a u=\'\' 5=\'1L\' Q=\'1o\'><1I 5=\'2F\' L=\'"+f+"\' z=\'"+b+"\' A=\'"+c+"\' 23=\'"+d+"\'/></a>"+"<4 5=\'2D\'>"+d+"<4 5=\'2C\'>"+1n+14+R+"</4></4><4 5=\'2A\'><a u=\'#\' 5=\'Z\' Q=\'1o\'>1l</a> 1k 1j 1s</4>");$("#Z").s(G);3(!(14==="")){9 12(){3($(o).N("s",12)){$(o).N("s",12)}$("#8").C();$("v").q("<4 5=\'8\'></4>");19(1D,1G,g);H P}$("#1U").s(12)}3(!(R==="")){9 1i(){$("#8").C();$("v").q("<4 5=\'8\'></4>");19(1z,1x,g);H P}$("#1X").s(1i)}o.1h=9(e){3(e==M){I=2w.2v}n{I=e.2u}3(I==27){G()}n 3(I==3k){3(!(R=="")){o.1h="";1i()}}n 3(I==3j){3(!(14=="")){o.1h="";12()}}};16();$("#K").C();$("#1L").s(G);$("#8").r({Y:"T"})};S.L=f}n{6 l=f.2r(/^[^\\?]+\\??/,\'\');6 m=2p(l);13=(m[\'z\']*1)+30||3h;1a=(m[\'A\']*1)+3g||3f;W=13-30;V=1a-3e;3(f.O(\'2j\')!=-1){1E=f.1B(\'3d\');$("#15").C();3(m[\'1A\']!="1b"){$("#8").q("<4 5=\'2f\'><4 5=\'1H\'>"+d+"</4><4 5=\'2e\'><a u=\'#\' 5=\'Z\' Q=\'1o\'>1l</a> 1k 1j 1s</4></4><U 1W=\'0\' 2d=\'0\' L=\'"+1E[0]+"\' 5=\'15\' 1v=\'15"+1f.2c(1f.1y()*2b)+"\' 1g=\'1m()\' J=\'z:"+(W+29)+"p;A:"+(V+17)+"p;\' > </U>")}n{$("#B").N();$("#8").q("<U 1W=\'0\' 2d=\'0\' L=\'"+1E[0]+"\' 5=\'15\' 1v=\'15"+1f.2c(1f.1y()*2b)+"\' 1g=\'1m()\' J=\'z:"+(W+29)+"p;A:"+(V+17)+"p;\'> </U>")}}n{3($("#8").r("Y")!="T"){3(m[\'1A\']!="1b"){$("#8").q("<4 5=\'2f\'><4 5=\'1H\'>"+d+"</4><4 5=\'2e\'><a u=\'#\' 5=\'Z\'>1l</a> 1k 1j 1s</4></4><4 5=\'F\' J=\'z:"+W+"p;A:"+V+"p\'></4>")}n{$("#B").N();$("#8").q("<4 5=\'F\' 3c=\'3b\' J=\'z:"+W+"p;A:"+V+"p;\'></4>")}}n{$("#F")[0].J.z=W+"p";$("#F")[0].J.A=V+"p";$("#F")[0].3a=0;$("#1H").11(d)}}$("#Z").s(G);3(f.O(\'37\')!=-1){$("#F").q($(\'#\'+m[\'26\']).1T());$("#8").24(9(){$(\'#\'+m[\'26\']).q($("#F").1T())});16();$("#K").C();$("#8").r({Y:"T"})}n 3(f.O(\'2j\')!=-1){16();3($.1q.35){$("#K").C();$("#8").r({Y:"T"})}}n{$("#F").34(f+="&1y="+(1p 33().32()),9(){16();$("#K").C();1u("#F a.18");$("#8").r({Y:"T"})})}}3(!m[\'1A\']){o.21=9(e){3(e==M){I=2w.2v}n{I=e.2u}3(I==27){G()}}}}31(e){}}9 1m(){$("#K").C();$("#8").r({Y:"T"})}9 G(){$("#2Y").N("s");$("#Z").N("s");$("#8").2X("2W",9(){$(\'#8,#B,#1F\').2V("24").N().C()});$("#K").C();3(2t o.v.J.2i=="2g"){$("v","11").r({A:"1Z",z:"1Z"});$("11").r("22","")}o.1h="";o.21="";H P}9 16(){$("#8").r({2U:\'-\'+20((13/2),10)+\'p\',z:13+\'p\'});3(!(1V.1q.2Q&&1V.1q.2P<7)){$("#8").r({38:\'-\'+20((1a/2),10)+\'p\'})}}9 2p(a){6 b={};3(!a){H b}6 c=a.1B(/[;&]/);25(6 i=0;i<c.1c;i++){6 d=c[i].1B(\'=\');3(!d||d.1c!=2){39}6 e=2a(d[0]);6 f=2a(d[1]);f=f.2r(/\\+/g,\' \');b[e]=f}H b}9 2x(){6 a=o.2M;6 w=1S.2o||1R.2o||(a&&a.1Q)||o.v.1Q;6 h=1S.1P||1R.1P||(a&&a.2n)||o.v.2n;1O=[w,h];H 1O}9 1K(){6 a=2K.2J.1C();3(a.O(\'2I\')!=-1&&a.O(\'3o\')!=-1){H 1b}}',62,211,'|||if|div|id|var||TB_window|function||||||||||||||else|document|px|append|css|click||href|body||||width|height|TB_overlay|remove|TB_Counter|TB_TempArray|TB_ajaxContent|tb_remove|return|keycode|style|TB_load|src|null|unbind|indexOf|false|title|TB_NextHTML|imgPreloader|block|iframe|ajaxContentH|ajaxContentW|this|display|TB_closeWindowButton||html|goPrev|TB_WIDTH|TB_PrevHTML|TB_iframeContent|tb_position||thickbox|tb_show|TB_HEIGHT|true|length|nbsp|span|Math|onload|onkeydown|goNext|Esc|or|close|tb_showIframe|TB_imageCount|Close|new|browser|TB_FoundURL|Key|Image|tb_init|name|imgLoader|TB_NextURL|random|TB_NextCaption|modal|split|toLowerCase|TB_PrevCaption|urlNoQuery|TB_HideSelect|TB_PrevURL|TB_ajaxWindowTitle|img|addClass|tb_detectMacXFF|TB_ImageOff|150|rel|arrayPageSize|innerHeight|clientWidth|self|window|children|TB_prev|jQuery|frameborder|TB_next|getElementById|auto|parseInt|onkeyup|overflow|alt|unload|for|inlineId||100||unescape|1000|round|hspace|TB_closeAjaxWindow|TB_title|undefined|match|maxHeight|TB_iframe|bmp|gif|png|clientHeight|innerWidth|tb_parseQuery|jpeg|replace|jpg|typeof|which|keyCode|event|tb_getPageSize|show|TB_overlayBG|TB_closeWindow|TB_overlayMacFFBGHack|TB_secondLine|TB_caption|blur|TB_Image|60|tb_pathToImage|mac|userAgent|navigator|of|documentElement|Prev|lt|version|msie|gt|ready|Next|marginLeft|trigger|fast|fadeOut|TB_imageOff|hidden||catch|getTime|Date|load|safari|get|TB_inline|marginTop|continue|scrollTop|TB_modal|class|TB_|45|440|40|630|input|188|190|substr|try|area|firefox'.split('|'),0,{}))

function NavMenu(spec, href, key) {
  this.spec = spec;
  this.href = href;
  this.key = key;
  this.nextId = spec.length;

  // prevents IE 5 for Mac running the code poorly
  if (window.print)
    this.init();
}

NavMenu.prototype.init = function() {
  var me = this;

  function buildMenu(ul, spec, isDropdown) {
    for (var i = 0; i < spec.length; i++) {
      var item = spec[i];
      var li = document.createElement("li");
      var a = document.createElement("a");
      var href = (item.uri.charAt(0) == '/' || item.uri.substr(0, 4) == 'http') ? item.uri : me.href + item.uri;
      a.appendChild(document.createTextNode(item.label.replace(/ /g, "\u00a0")));
      a.setAttribute('href', href);

      if (item.target) a.setAttribute('target', item.target);
      if (item.className) li.className = item.className;

      //ul.style.visibility = "hidden";
      ul.style.display = "none";
      li.appendChild(a);
      ul.appendChild(li);
      ul.className = (isDropdown) ? 'dropdown' : 'flyout';

      if (item.submenu) {
        var subul = document.createElement("ul");
        li.id = me.key + (me.nextId++);
        li.appendChild(subul);
        buildMenu(subul, item.submenu, false);

        me.attachFlyoutEvents(li, subul);
      }
      else {
      	me.attachFlyoutEventsNoSub(li);
      }
    }
  }


  for (var i = 0; i < this.spec.length; i++) {
    var item = this.spec[i];
    var container = document.getElementById(this.key + i);
    var ul = document.createElement("ul");

    container.appendChild(ul);
    buildMenu(ul, item, true);

    this.attachDropdownEvents(container, ul);
  }
};


NavMenu.prototype.attachDropdownEvents = function(container, ul) {
  var me = this;
  var pendingTimeout = false;
  var pendingTimeout2 = false;
  var thunk = function() { 
    if (pendingTimeout) {
      me.hideMenu(container);
    } 
  };



  container.onmouseover = function(evt) {
    pendingTimeout = false;

    if (!evt) evt = window.event;
	
	pendingTimeout2 = true;
	setTimeout(function() {
		if (pendingTimeout2) {
			for (var i = 0; i < me.spec.length; i++) {
			  var menu = document.getElementById(me.key + i);
			  if (menu != container)
				me.hideMenu(menu);
			  else 
				me.showMenu(menu);
			}
		}
	},250);
  };

  container.onmouseout = function(evt) {
	pendingTimeout2 = false;  
    if (!evt) evt = window.event;

    var to = (evt.toElement ? evt.toElement : evt.relatedTarget);

	if (!to) return;

    var p = to.parentNode;
    while (p) {
      if (p == container) {
        return;
      }
      p = p.parentNode;
    }

    pendingTimeout = true;
    setTimeout(thunk, 250);
  };
};

NavMenu.prototype.attachFlyoutEvents = function(container, ul) {
  var me = this;
  var pendingTimeout = false;
  var thunk = function() { 
    if (pendingTimeout)
      me.hideMenu(container); 
  };

  container.onmouseover = function(evt) {
    pendingTimeout = false;
    if (!evt) evt = window.event;

    var tempEl = container.getElementsByTagName("ul")[0];
    if (tempEl.style.display == "block")
      return;

    var anchor = container.getElementsByTagName("a")[0];
    tempEl.style.visibility = "hidden";
    tempEl.style.display = "block";
    anchor.className = "hover";

    var tempY = getAbsY(tempEl) + tempEl.offsetHeight;
    tempEl.style.top = "0px"; 
    if (getWindowHeight() - tempY < 0) 
      tempEl.style.top = "-"+(tempEl.offsetHeight-container.offsetHeight)+"px";

    tempEl.style.visibility = "visible";

    var lis = container.parentNode.getElementsByTagName("li");
    for (var i = 0; i < lis.length; i++) {
      if (lis[i] != container)
        me.hideMenu(lis[i]);
    }
  };

  container.onmouseout = function(evt) {
    if (!evt) evt = window.event;

    var to = (evt.toElement ? evt.toElement : evt.relatedTarget);
    var p = to.parentNode;
    while (p) {
      if (p == container) {
        return;
      }
      p = p.parentNode;
    }

    pendingTimeout = true;
    setTimeout(thunk, 250);
  };
};

NavMenu.prototype.attachFlyoutEventsNoSub = function(container) {
  var me = this;
  container.onmouseover = function(evt) {
    var lis = container.parentNode.getElementsByTagName("li");
    for (var i = 0; i < lis.length; i++) {
      if (lis[i] != container) {
        me.hideMenu(lis[i]);
        }
    }
  };
  
};

NavMenu.prototype.showMenu = function(menu) {
  var uls = menu.getElementsByTagName("ul");
  var as = menu.getElementsByTagName("a");
  
  uls[0].style.visibility = "visible";
  uls[0].style.display = "block";
  as[0].className = "hover";
};


NavMenu.prototype.hideMenu = function(menu) {
  var uls = menu.getElementsByTagName("ul");
  var as = menu.getElementsByTagName("a");

  if (uls.length) {
    uls[0].style.display = "none";
    as[0].className = "";
  }
};


function getWindowHeight() {
	if (window.self && self.innerHeight) {
		return self.innerHeight;
	}
	if (document.documentElement && document.documentElement.clientHeight) {
		return document.documentElement.clientHeight;
	}
	return 0;
}

	
function getAbsY (myElement){
	if (myElement.absoluteY) 
		return myElement.absoluteY;

	var offset = 0;
	for (var elem = myElement; elem != null; elem = elem.offsetParent) 
		offset += elem.offsetTop;
	
	myElement.absoluteY = offset;
	return offset;
}


function buildNav() {
  var navMenu = new NavMenu(navset, basehref, keyword);
}

function NavMenu(spec, href, key) {
  this.spec = spec;
  this.href = href;
  this.key = key;
  this.nextId = spec.length;

  // prevents IE 5 for Mac running the code poorly
  if (window.print)
    this.init();
}

NavMenu.prototype.init = function() {
  var me = this;

  function buildMenu(ul, spec, isDropdown) {
    for (var i = 0; i < spec.length; i++) {
      var item = spec[i];
      var li = document.createElement("li");
      var a = document.createElement("a");
      var href = (item.uri.charAt(0) == '/' || item.uri.substr(0, 4) == 'http') ? item.uri : me.href + item.uri;
      a.appendChild(document.createTextNode(item.label.replace(/ /g, "\u00a0")));
      a.setAttribute('href', href);

      if (item.target) a.setAttribute('target', item.target);
      if (item.className) li.className = item.className;

      //ul.style.visibility = "hidden";
      ul.style.display = "none";
      li.appendChild(a);
      ul.appendChild(li);
      ul.className = (isDropdown) ? 'dropdown' : 'flyout';

      if (item.submenu) {
        var subul = document.createElement("ul");
        li.id = me.key + (me.nextId++);
        li.appendChild(subul);
        buildMenu(subul, item.submenu, false);

        me.attachFlyoutEvents(li, subul);
      }
      else {
      	me.attachFlyoutEventsNoSub(li);
      }
    }
  }


  for (var i = 0; i < this.spec.length; i++) {
    var item = this.spec[i];
    var container = document.getElementById(this.key + i);
    var ul = document.createElement("ul");

    container.appendChild(ul);
    buildMenu(ul, item, true);

    this.attachDropdownEvents(container, ul);
  }
};


NavMenu.prototype.attachDropdownEvents = function(container, ul) {
  var me = this;
  var pendingTimeout = false;
  var pendingTimeout2 = false;
  var thunk = function() { 
    if (pendingTimeout) {
      me.hideMenu(container);
    } 
  };



  container.onmouseover = function(evt) {
    pendingTimeout = false;

    if (!evt) evt = window.event;
	
	pendingTimeout2 = true;
	setTimeout(function() {
		if (pendingTimeout2) {
			for (var i = 0; i < me.spec.length; i++) {
			  var menu = document.getElementById(me.key + i);
			  if (menu != container)
				me.hideMenu(menu);
			  else 
				me.showMenu(menu);
			}
		}
	},250);
  };

  container.onmouseout = function(evt) {
	pendingTimeout2 = false;  
    if (!evt) evt = window.event;

    var to = (evt.toElement ? evt.toElement : evt.relatedTarget);

	if (!to) return;

    var p = to.parentNode;
    while (p) {
      if (p == container) {
        return;
      }
      p = p.parentNode;
    }

    pendingTimeout = true;
    setTimeout(thunk, 250);
  };
};

NavMenu.prototype.attachFlyoutEvents = function(container, ul) {
  var me = this;
  var pendingTimeout = false;
  var thunk = function() { 
    if (pendingTimeout)
      me.hideMenu(container); 
  };

  container.onmouseover = function(evt) {
    pendingTimeout = false;
    if (!evt) evt = window.event;

    var tempEl = container.getElementsByTagName("ul")[0];
    if (tempEl.style.display == "block")
      return;

    var anchor = container.getElementsByTagName("a")[0];
    tempEl.style.visibility = "hidden";
    tempEl.style.display = "block";
    anchor.className = "hover";

    var tempY = getAbsY(tempEl) + tempEl.offsetHeight;
    tempEl.style.top = "0px"; 
    if (getWindowHeight() - tempY < 0) 
      tempEl.style.top = "-"+(tempEl.offsetHeight-container.offsetHeight)+"px";

    tempEl.style.visibility = "visible";

    var lis = container.parentNode.getElementsByTagName("li");
    for (var i = 0; i < lis.length; i++) {
      if (lis[i] != container)
        me.hideMenu(lis[i]);
    }
  };

  container.onmouseout = function(evt) {
    if (!evt) evt = window.event;

    var to = (evt.toElement ? evt.toElement : evt.relatedTarget);
    var p = to.parentNode;
    while (p) {
      if (p == container) {
        return;
      }
      p = p.parentNode;
    }

    pendingTimeout = true;
    setTimeout(thunk, 250);
  };
};

NavMenu.prototype.attachFlyoutEventsNoSub = function(container) {
  var me = this;
  container.onmouseover = function(evt) {
    var lis = container.parentNode.getElementsByTagName("li");
    for (var i = 0; i < lis.length; i++) {
      if (lis[i] != container) {
        me.hideMenu(lis[i]);
        }
    }
  };
  
};

NavMenu.prototype.showMenu = function(menu) {
  var uls = menu.getElementsByTagName("ul");
  var as = menu.getElementsByTagName("a");
  
  uls[0].style.visibility = "visible";
  uls[0].style.display = "block";
  as[0].className = "hover";
};


NavMenu.prototype.hideMenu = function(menu) {
  var uls = menu.getElementsByTagName("ul");
  var as = menu.getElementsByTagName("a");

  if (uls.length) {
    uls[0].style.display = "none";
    as[0].className = "";
  }
};


function getWindowHeight() {
	if (window.self && self.innerHeight) {
		return self.innerHeight;
	}
	if (document.documentElement && document.documentElement.clientHeight) {
		return document.documentElement.clientHeight;
	}
	return 0;
}

	
function getAbsY (myElement){
	if (myElement.absoluteY) 
		return myElement.absoluteY;

	var offset = 0;
	for (var elem = myElement; elem != null; elem = elem.offsetParent) 
		offset += elem.offsetTop;
	
	myElement.absoluteY = offset;
	return offset;
}


function buildNav() {
  var navMenu = new NavMenu(navset, basehref, keyword);
}
/**
 * nbga.js - Non-Blocking Google Analytics
 * http://925html.com/code/non-blocking-google-analytics-integration/
 * 
 * Copyright (c) 2008 Eric Ferraiuolo - http://eric.ferraiuolo.name
 * MIT License - http://www.opensource.org/licenses/mit-license.php
 * 
 * @version 1.0
 */

function ga( adapter ){
	
	// Private
	
	var _adapters, _defaults, _config, _initialized;
	
	_adapters = {
		
		jquery : {
			merge : function( defaults, options ) {
				return jQuery.extend( {}, defaults, options );
			},
			getScript : function( url, callback ) {
				jQuery.getScript( url, callback );
			}
		}
		
	};
	
	if ( typeof adapter !== 'undefined' ) {
		adapter = adapter;
	} else if ( typeof jQuery !== 'undefined' ) {
		adapter = _adapters.jquery;
	}
	
	_defaults = {
		url: {
			http: 'http://www.google-analytics.com/ga.js',
			https: 'https://ssl.google-analytics.com/ga.js'
		}
	};
	_config = null;
	_initialized = false;
	
	function init() {
		var isSecure, gaURL;
		
		isSecure = (document.location.protocol == 'https:');
		gaURL = (isSecure && _config.url.https) ? (_config.url.https || _config.url)
			: (_config.url.http || _config.url);
		
		adapter.getScript( gaURL, function(){
			_config.tracker = _gat._getTracker( _config.id );
			_initialized = true;
			while ( _config.queue.length > 0 )
				Public.track( _config.queue.shift() );
		} );
	}
	
	// Public
	
	var Public = {
		
		config: function( options ) {
			options = adapter.merge( _defaults, (options || {}) );
			if ( !_config && options.id ) {
				_config = options;
				_config.queue = [];
				init();
			}
			return this;
		},
		
		track: function( url ) {
			if ( _initialized ) {
				if ( url )
					_config.tracker._trackPageview( url );
				else
					_config.tracker._trackPageview();
			} else if ( _config ) {
				_config.queue.push( url || null );
			}
			return this;
		}
		
	};
	return Public;
	
}
function parseUrl(url) {
	if (!url) url = location.href;
	if (url.substring(url.length -1) == '#') url = url.substring(0, url.length -1);
	if (url.indexOf('?') < 0) return [];
	var query = unescape(url.substr(url.lastIndexOf('?')+1));
	var params_array = query.split('&');

	var params = {};
	for (var i in params_array) {
		if (!params_array.hasOwnProperty(i)) continue;
		var key = params_array[i].substring(0, params_array[i].indexOf('='));
		var value = params_array[i].substring(params_array[i].indexOf('=')+1);
		
		// if the parameter is an array
		if (key.indexOf('[]', 1) > 0 && value != 'undefined' && value) {
			key = key.replace('[]', '');
			if (!params[key]) params[key] = [];
				params[key].push(value);
		}
		else {
			if (value != 'undefined' && value)
				params[key] = value;
		}
	}

	return params;
}

function xml2html(xml, xsl) {
	var popupXslTemplate = xsl;
	var result = '';
	// code for IE
	if (window.ActiveXObject) {
		result = xml.transformNode(popupXslTemplate);
	}
	// code for Mozilla, Firefox, Opera, etc.
	else
		if (document.implementation && document.implementation.createDocument) {
			var xsltProcessor=new XSLTProcessor();
			xsltProcessor.importStylesheet(popupXslTemplate);
			var resultDocument = xsltProcessor.transformToFragment(xml, document);
			result = resultDocument.firstChild.innerHTML;
		}
	return result.replace(/\\n/g, "<br />");
}

function string2xml(xmlString) {
	var xml_str = xmlString;
	if (xml_str.substring(0, 5) != unescape('%3C%3Fxml') )
		xml_str = unescape('%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E') + xml_str;
	
	// Mozilla and Netscape browsers
	if (document.implementation.createDocument) {
		var parser = new DOMParser()
		doc = parser.parseFromString(xml_str, "text/xml")
	// MSIE
	} else
		if (window.ActiveXObject) {
			doc = new ActiveXObject("Microsoft.XMLDOM")
			doc.async="false"
			doc.loadXML(xml_str)
	}
	return doc;
}

function object2xml(obj, root_str) {
	var xml_str = '<'+root_str+'>';
	if (typeof obj == 'string') {
		value =  htmlspecialchars(obj, 'ENT_QUOTES');
		value = value.replace(/\n/g, "\\n");
		xml_str += value + '</' + root_str + '>';
		return xml_str;
	}

	for(var key in obj) {
		if (!obj.hasOwnProperty(key)) continue;
		var value = obj[key];
		if (value) {
			if ( (typeof value) == 'object' )
				if (value instanceof Array) {
					xml_str += '<' + key + '>';
					for (var i = 0; i < value.length; i++) {
						//xml_str += object2xml(value[i]['extra'], 'extra');
						for(var key2 in value[i]) {
							if (!value[i].hasOwnProperty(key2)) continue;
							xml_str += object2xml(value[i][key2], key2);
						}
					}
					xml_str += '</' + key + '>';
				}
				else
					xml_str += object2xml(value, key);
			else {
				value =  htmlspecialchars(value, 'ENT_QUOTES');
				value = value.replace(/\n/g, "\\n");
				xml_str += '<' + key + '>' + value + '</' + key + '>';
			}
		}
	}
	xml_str += '</'+root_str+'>';
	return xml_str;
}

function htmlspecialchars(string, quote_style) {
	string = string.toString();

	string = string.replace(/&/g, '&amp;');
	string = string.replace(/</g, '&lt;');
	string = string.replace(/>/g, '&gt;');

	if (quote_style == 'ENT_QUOTES') {
		string = string.replace(/"/g, '&quot;');
		string = string.replace(/'/g, '&#039;');
	}
	else
		if (quote_style != 'ENT_NOQUOTES')
	        string = string.replace(/"/g, '&quot;');

	return string;
}

basehref = location.pathname.substring(0,location.pathname.lastIndexOf('/')+1);
keyword = "menu";
menu0 = [/*{label: 'Commencement', uri: 'index.php?category=commencement'},*/
    {label: 'BU Today: Best of BU', uri: 'index.php?category=bu_today_-_best_of_bu', className: 'submenu', submenu:
		 [
		  {label: 'Pizza', uri: 'index.php?category=best_of_bu_-_pizza'},
		  {label: 'Burger', uri: 'index.php?category=best_of_bu_-_burger'},
		  {label: 'Ice Cream', uri: 'index.php?category=best_of_bu_-_ice_cream'},
		  {label: 'Coffee', uri: 'index.php?category=best_of_bu_-_coffee'},
		  {label: "Place to Dine on Parents' Dime", uri: 'index.php?category=best_of_bu_-_place_to_dine_on_parents%27_dime'},
		  {label: 'BU Dining', uri: 'index.php?category=best_of_bu_-_bu_dining'},
		  {label: 'Takeout', uri: 'index.php?category=best_of_bu_-_takeout'},
		  {label: 'Free Entertainment', uri: 'index.php?category=best_of_bu_-_free_entertainment'},
		  {label: 'Cheap Eats', uri: 'index.php?category=best_of_bu_-_cheap_eats'},
		  {label: 'Live Music', uri: 'index.php?category=best_of_bu_-_live_music'},
		  {label: 'Dance Club', uri: 'index.php?category=best_of_bu_-_dance_club'},
		  {label: 'Downtown Shop', uri: 'index.php?category=best_of_bu_-_downtown_shop'},
		  {label: 'BU Outdoor Spot', uri: 'index.php?category=best_of_bu_-_bu_outdoor_spot'},
		  {label: 'Bookstore', uri: 'index.php?category=best_of_bu_-_bookstore'},
		  {label: 'Movie Theater', uri: 'index.php?category=best_of_bu_-_movie_theater'},
		  {label: 'Clothes Shopping', uri: 'index.php?category=best_of_bu_-_clothes_shopping'},
		  {label: 'All', uri: 'index.php?category=bu_today_-_best_of_bu'}
		 ]
		 },
	{label: 'Admissions', uri: 'index.php?category=admissions', className: 'submenu', submenu:
		[
		{label: 'Undergraduate', uri: 'index.php?category=undergraduate_admissions'},
		{label: 'Graduate', uri: 'index.php?category=graduate_admissions'},
		{label: 'International', uri: 'index.php?category=international_admissions'},
		{label: 'Extended Education', uri: 'index.php?category=extended_education_admissions'},
		{label: 'Financial Aid', uri: 'index.php?category=financial_aid'},
		{label: 'All', uri: 'index.php?category=admissions'}
		]
     },
	 {label: 'Academics', uri: 'index.php?category=academics', className: 'submenu', submenu:
		[
		{label: 'Schools and Colleges', uri: 'index.php?category=schools_and_colleges'},
		{label: 'Departments', uri: 'index.php?category=departments'},
		{label: 'Study Abroad', uri: 'index.php?category=study_abroad'},
		{label: 'Journals', uri: 'index.php?category=academic_journals'},
		{label: 'All', uri: 'index.php?category=academics'}
		]
	 },
	 {label: 'Research', uri: 'index.php?category=research', className: 'submenu', submenu:
		[
		{label: 'Centers and Institutes', uri: 'index.php?category=centers_and_institutes'},
		{label: 'Laboratories', uri: 'index.php?category=research_laboratories'},
		{label: 'Core Facilities', uri: 'index.php?category=core_facilities'},
		{label: 'Administration', uri: 'index.php?category=research_administration'},
		{label: 'All', uri: 'index.php?category=research'}
		]
	 },
	 {label: 'Libraries', uri: 'index.php?category=libraries'},
	 {label: 'Computing', uri: 'index.php?category=computing', className: 'submenu', submenu:
		[
		{label: 'University Wide', uri: 'index.php?category=university_wide_computing'},
		{label: 'Departmental', uri: 'index.php?category=departmental_computing'},
		{label: 'Computer Store', uri: 'index.php?category=computer_store'},
		{label: 'Computer Labs', uri: 'index.php?category=computer_labs'},
		{label: 'MyPrint Printers', uri: 'index.php?category=myprint_printers'},
		{label: 'All', uri: 'index.php?category=computing'}
		]
	 },
	 {label: 'Residences', uri: 'index.php?category=residences', className: 'submenu', submenu:
		[
		{label: 'Undergraduate', uri: 'index.php?category=undergraduate_residences'},
		{label: 'Graduate', uri: 'index.php?category=graduate_residences'},
		{label: 'Dining Halls', uri: 'index.php?category=dining_halls'},
		{label: 'Laundry', uri: 'index.php?category=laundry'},
		{label: 'All', uri: 'index.php?category=residences'}
		]
	 },
	 {label: 'Dining', uri: 'index.php?category=dining', className: 'submenu', submenu:
	 	[
		{label: 'Residence Dining', uri: 'index.php?category=residence_dining'},
		{label: 'Campus', uri: 'index.php?category=campus_dining'},
		{label: 'Dining Points', uri: 'index.php?category=dining_points'},
		{label: 'Area Restaurants', uri: 'index.php?category=area_restaurants'},
		{label: 'All', uri: 'index.php?category=dining'}
	 	]
	 },	
	 {label: 'Administrative', uri: 'index.php?category=administrative', className: 'submenu', submenu:
	 	[{label: 'Executive Offices', uri: 'index.php?category=executive_offices'},
		{label: 'Campus Services', uri: 'index.php?category=campus_services'},
		{label: 'Community Services', uri: 'index.php?category=community_services'},
		{label: 'Employment', uri: 'index.php?category=employment'},
		{label: 'Finances and Aid', uri: 'index.php?category=finances_and_aid'},
		{label: 'Health and Wellness', uri: 'index.php?category=health_and_wellness'},
		{label: 'Other', uri: 'index.php?category=other_administrative_offices'},
		{label: 'All', uri: 'index.php?category=administrative'}]
	 },
	 {label: 'Arts and Entertainment', uri: 'index.php?category=arts_and_entertainment'},
	 {label: 'Sports and Recreation', uri: 'index.php?category=sports_and_recreation'},
	 {label: 'Buildings', uri: 'index.php?category=buildings'},
	 {label: 'News and Publications', uri: 'index.php?category=news_and_publications', className: 'submenu', submenu:
	 	[{label: 'General', uri: 'index.php?category=general_news_and_publications'},
		 {label: 'Academic Journals', uri: 'index.php?category=academic_news_and_publications'},
		 {label: 'All', uri: 'index.php?category=news_and_publications'}]
	 },
	 {label: 'Transportation', uri: 'index.php?category=transportation', className: 'submenu', submenu:
	 	[{label: 'Parking', uri: 'index.php?category=parking'},
		 {label: 'T Stops', uri: 'index.php?category=t_stops'},
		 {label: 'BU Shuttle Stops', uri: 'index.php?category=bu_shuttle_stops'},
		 {label: 'Zipcars', uri: 'index.php?category=zipcars'},
		 {label: 'All', uri: 'index.php?category=transportation'}]
	 },
	 {label: 'Area Businesses', uri: 'index.php?category=area_businesses', className: 'submenu', submenu:
	 	[{label: 'Accommodations', uri: 'index.php?category=accommodations'},
		 {label: 'Banks and ATMs', uri: 'index.php?category=banks_and_atms'},
		 {label: 'Restaurants', uri: 'index.php?category=restaurants'}, 
		 {label: 'Services', uri: 'index.php?category=service_businesses'},
		 {label: 'Shopping', uri: 'index.php?category=shopping_businesses'},
		 {label: 'All', uri: 'index.php?category=area_businesses'}]
	 },
	 {label: 'City Life', uri: 'index.php?category=city_life', className: 'submenu', submenu:
	 	[{label: 'Movie Theaters', uri: 'index.php?category=movie_theaters'},
		 {label: 'Museums', uri: 'index.php?category=museums'},
		 {label: 'Performing Arts', uri: 'index.php?category=performing_arts'},
		 {label: 'Sports', uri: 'index.php?category=sports'}, 
		 {label: 'Tours', uri: 'index.php?category=tours'},
		 {label: 'All', uri: 'index.php?category=city_life'}]
	 }]

menu1 = [/*{label: 'Commencement', uri: 'index.php?category=commencement'},*/
		 {label: 'Admissions', uri: 'index.php?category=admissions&campus=charles%20river', className: 'submenu', submenu:
		[
		{label: 'Undergraduate', uri: 'index.php?category=undergraduate_admissions&campus=charles%20river'},
		{label: 'Graduate', uri: 'index.php?category=graduate_admissions&campus=charles%20river'},
		{label: 'International', uri: 'index.php?category=international_admissions&campus=charles%20river'},
		{label: 'Extended Education', uri: 'index.php?category=extended_education_admissions&campus=charles%20river'},
		{label: 'Financial Aid', uri: 'index.php?category=financial_aid&campus=charles%20river'},
		{label: 'All', uri: 'index.php?category=admissions&campus=charles%20river'}
		]
     },
	 {label: 'Academics', uri: 'index.php?category=academics&campus=charles%20river', className: 'submenu', submenu:
		[
		{label: 'Schools and Colleges', uri: 'index.php?category=schools_and_colleges&campus=charles%20river'},
		{label: 'Departments', uri: 'index.php?category=departments&campus=charles%20river'},
		{label: 'Journals', uri: 'index.php?category=academic_journals&campus=charles%20river'},
		{label: 'All', uri: 'index.php?category=academics&campus=charles%20river'}
		]
	 },
	 {label: 'Research', uri: 'index.php?category=research&campus=charles%20river', className: 'submenu', submenu:
		[
		{label: 'Centers and Institutes', uri: 'index.php?category=centers_and_institutes&campus=charles%20river'},
		{label: 'Laboratories', uri: 'index.php?category=research_laboratories&campus=charles%20river'},
		{label: 'Core Facilities', uri: 'index.php?category=core_facilities&campus=charles%20river'},
		{label: 'Administration', uri: 'index.php?category=research_administration&campus=charles%20river'},
		{label: 'All', uri: 'index.php?category=research&campus=charles%20river'}
		]
	 },
	 {label: 'Libraries', uri: 'index.php?category=libraries&campus=charles%20river'},
	 {label: 'Computing', uri: 'index.php?category=computing&campus=charles%20river', className: 'submenu', submenu:
		[
		{label: 'University Wide', uri: 'index.php?category=university_wide_computing&campus=charles%20river'},
		{label: 'Departmental', uri: 'index.php?category=departmental_computing&campus=charles%20river'},
		{label: 'Computer Store', uri: 'index.php?category=computer_store&campus=charles%20river'},
		{label: 'Computer Labs', uri: 'index.php?category=computer_labs&campus=charles%20river'},
		{label: 'MyPrint Printers', uri: 'index.php?category=myprint_printers&campus=charles%20river'},
		{label: 'All', uri: 'index.php?category=computing&campus=charles%20river'}
		]
	 },
	 {label: 'Residences', uri: 'index.php?category=residences&campus=charles%20river', className: 'submenu', submenu:
		[
		{label: 'Undergraduate', uri: 'index.php?category=undergraduate_residences&campus=charles%20river'},
		{label: 'Graduate', uri: 'index.php?category=graduate_residences&campus=charles%20river'},
		{label: 'Dining Halls', uri: 'index.php?category=dining_halls&campus=charles%20river'},
		{label: 'Laundry', uri: 'index.php?category=laundry&campus=charles%20river'},
		{label: 'All', uri: 'index.php?category=residences&campus=charles%20river'}
		]
	 },
	 {label: 'Dining', uri: 'index.php?category=dining&campus=charles%20river', className: 'submenu', submenu:
	 	[
		{label: 'Residence Dining', uri: 'index.php?category=residence_dining&campus=charles%20river'},
		{label: 'Campus', uri: 'index.php?category=campus_dining&campus=charles%20river'},
		{label: 'Dining Points', uri: 'index.php?category=dining_points&campus=charles%20river'},
		{label: 'Area Restaurants', uri: 'index.php?category=area_restaurants&campus=charles%20river'},
		{label: 'All', uri: 'index.php?category=dining&campus=charles%20river'}
	 	]
	 },	
	 {label: 'Administrative', uri: 'index.php?category=administrative&campus=charles%20river', className: 'submenu', submenu:
	 	[{label: 'Executive Offices', uri: 'index.php?category=executive_offices&campus=charles%20river'},
		{label: 'Campus Services', uri: 'index.php?category=campus_services&campus=charles%20river'},
		{label: 'Community Services', uri: 'index.php?category=community_services&campus=charles%20river'},
		{label: 'Employment', uri: 'index.php?category=employment&campus=charles%20river'},
		{label: 'Finances and Aid', uri: 'index.php?category=finances_and_aid&campus=charles%20river'},
		{label: 'Health and Wellness', uri: 'index.php?category=health_and_wellness&campus=charles%20river'},
		{label: 'Other', uri: 'index.php?category=other_administrative_offices&campus=charles%20river'},
		{label: 'All', uri: 'index.php?category=administrative&campus=charles%20river'}]
	 },
	 {label: 'Arts and Entertainment', uri: 'index.php?category=arts_and_entertainment&campus=charles%20river'},
	 {label: 'Sports and Recreation', uri: 'index.php?category=sports_and_recreation&campus=charles%20river'},
	 {label: 'Buildings', uri: 'index.php?category=buildings&campus=charles%20river'},
	 {label: 'News and Publications', uri: 'index.php?category=news_and_publications&campus=charles%20river', className: 'submenu', submenu:
	 	[{label: 'General', uri: 'index.php?category=general_news_and_publications&campus=charles%20river'},
		 {label: 'Academic Journals', uri: 'index.php?category=academic_news_and_publications&campus=charles%20river'},
		 {label: 'All', uri: 'index.php?category=news_and_publications&campus=charles%20river'}]
	 },
	 {label: 'Transportation', uri: 'index.php?category=transportation&campus=charles%20river', className: 'submenu', submenu:
	 	[{label: 'Parking', uri: 'index.php?category=parking&campus=charles%20river'},
		 {label: 'T Stops', uri: 'index.php?category=t_stops&campus=charles%20river'},
		 {label: 'BU Shuttle Stops', uri: 'index.php?category=bu_shuttle_stops&campus=charles%20river'},
		 {label: 'Zipcars', uri: 'index.php?category=zipcars&campus=charles%20river'},
		 {label: 'All', uri: 'index.php?category=transportation&campus=charles%20river'}]
	 },
	 {label: 'Area Businesses', uri: 'index.php?category=area_businesses&campus=charles%20river', className: 'submenu', submenu:
	 	[{label: 'Accommodations', uri: 'index.php?category=accommodations&campus=charles%20river'},
		 {label: 'Banks and ATMs', uri: 'index.php?category=banks_and_atms&campus=charles%20river'}, 
		 {label: 'Restaurants', uri: 'index.php?category=restaurants&campus=charles%20river'},
		 {label: 'Services', uri: 'index.php?category=service_businesses&campus=charles%20river'},
		 {label: 'Shopping', uri: 'index.php?category=shopping_businesses&campus=charles%20river'},
		 {label: 'All', uri: 'index.php?category=area_businesses&campus=charles%20river'}]
	 }]

menu2 = [{label: 'Admissions', uri: 'index.php?category=admissions&campus=medical'},
	 {label: 'Academics', uri: 'index.php?category=academics&campus=medical', className: 'submenu', submenu:
		[
		{label: 'Schools and Colleges', uri: 'index.php?campus=medical&category=schools_and_colleges'},
		{label: 'Departments', uri: 'index.php?campus=medical&category=departments'},
		{label: 'All', uri: 'index.php?category=academics&campus=medical'}
		]
	 },
	 {label: 'Research', uri: 'index.php?category=research&campus=medical', className: 'submenu', submenu:
		[
		{label: 'Centers and Institutes', uri: 'index.php?category=centers_and_institutes&campus=medical'},
		{label: 'Laboratories', uri: 'index.php?category=research_laboratories&campus=medical'},
		{label: 'Core Facilities', uri: 'index.php?category=core_facilities&campus=medical'},
		{label: 'Administration', uri: 'index.php?category=research_administration&campus=medical'},
		{label: 'All', uri: 'index.php?category=research&campus=medical'}
		]
	 },
	 {label: 'Libraries', uri: 'index.php?campus=medical&category=libraries'},
	 {label: 'Computing', uri: 'index.php?campus=medical&category=computing'},
	 {label: 'Residences', uri: 'index.php?category=residences&campus=medical'},
	 {label: 'Dining', uri: 'index.php?campus=medical&category=dining'},
	 {label: 'Administrative', uri: 'index.php?campus=medical&category=administrative'},
	 {label: 'Buildings', uri: 'index.php?category=buildings&campus=medical'},
	 {label: 'Transportation', uri: 'index.php?category=transportation&campus=medical', className: 'submenu', submenu:
	 	[{label: 'Parking', uri: 'index.php?category=parking&campus=medical'},
		 {label: 'T Stops', uri: 'index.php?category=t_stops&campus=medical'},
		 {label: 'BU Shuttle Stops', uri: 'index.php?category=bu_shuttle_stops&campus=medical'},
		 {label: 'Zipcars', uri: 'index.php?category=zipcars&campus=medical'},
		 {label: 'All', uri: 'index.php?category=transportation&campus=medical'}]
	 },
	 {label: 'Area Businesses', uri: 'index.php?category=area_businesses&campus=medical', className: 'submenu', submenu:
	 	[{label: 'Accommodations', uri: 'index.php?category=accommodations&campus=medical'},
		 {label: 'Banks and ATMs', uri: 'index.php?category=banks_and_atms&campus=medical'}, 
		 {label: 'Restaurants', uri: 'index.php?category=restaurants&campus=medical'},
		 {label: 'Services', uri: 'index.php?category=service_businesses&campus=medical'},
		 {label: 'Shopping', uri: 'index.php?category=shopping_businesses&campus=medical'},
		 {label: 'All', uri: 'index.php?category=area_businesses&campus=medical'}]
	 }]

menu3 = [{label: 'Boston', uri: 'index.php?campus=other&category=boston'},
	 {label: 'New England', uri: 'index.php?campus=other&category=new_england'},
	 {label: 'United States', uri: 'index.php?campus=other&category=united_states'},
	 {label: 'International', uri: 'index.php?campus=other&category=international'}]

navset = [menu0, menu1, menu2, menu3]
var map,
	loadingUp = 1,
	mapLargeControl,
	mapScaleControl,
	overviewmap,
	svOverlay,

	searchResults = [], // Markers from normal searches are stored here
	displayItems = [], //First index is type (e.g. 'train') second index is id
	closestMarker = null, //This is a GMarker when a 'closest' item
							//e.g. parking lot is opened
	polylines = {}, 	//Here we store named polylines
	item_cache = {},

    current_search = '',
    current_campus = '',
    current_search_type = 'search',

	last_real_search = null,
	last_real_campus = null,
	last_real_search_type = null,

	current_results_page = 1,
	current_page_size = 10,
	current_results_count = 0,

	current_closest_open_marker_id = null,
	current_open_marker_id = null,

	popupXslTemplate,
	loggedin;

	var campus_outline = [["enoaGnobqLrInArAmU`Ej@HiAtDr@VoEwBWp@sKpDTlAqSoD_@b@eItDb@r@aMbA@ZuEpARLwBhABLcBiAYZ}E`AJ@[cAKHw@`AJB_@cAMJoA}@OTuBnAf@fAo@b@`COJj@p@EfAzCZ[yBPGm@sDx@]Kq@{@\\a@sA_A^L|@y@\\c@SIm@bAoC`Aa@GY`Ac@Ga@g@TEQh@QU_Bo@XCSj@S_F}Y}@ZSeBu@Qh@iO|AGIoG}EKYkEx@I@SeA?e@WUN?bGoBDYdMxABMrDuAGsFzrAfBF\\yCtALc@rGyJ`UkElLiBfIgBjSe@|H", "BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"],["mmkaGz~xpL|C{Bx@y@n@hB`CuAtDsCcS_^iBcFm@sG[oBy@e@wC]_Ce@cDfEzEzHt@tAi@z@Zx@{EhGiDwF}@tAnIpLuBlCzDvGl@{@_@kAfA_B`M~P", "BBBBBBBBBBBBBBBBBBBBBBBBBBBB"],["y|laGjwzpLxC~Dg@|@_DqDl@kA", "BBBBB"],["epnaG~~{pLj@UCUm@TDT", "BBBBB"],["}qnaGrx{pLp@YIo@s@XJn@", "BBBBB"],["otnaG~z{pL~@_@QkAcAb@TfA", "BBBBB"],["scnaGtb}pLCwAj@GBxAk@D", "BBBBB"],["icnaGrn}pLx@c@Ky@aAd@Rv@", "BBBBB"],["otmaGrl~pLRv@w@ZO_Ar@S", "BBBBB"],["avmaGxo~pLVzAr@YUyAu@V", "BBBBB"],["unmaGvj_qLNv@f@QMy@i@R", "BBBBB"],["upmaGxn_qLF\\h@WG_@i@X", "BBBBB"],["w`naG`u_qLlANNuCkAOQtC", "BBBBB"],["y_naGhf`qL]~HqG_Af@mHfGl@", "BBBBB"],["ucoaGpi_qLpALJkD_BQ@nD", "BBBBB"],["cvlaGxjwpL`@n@rA_BVkA[U^cBy@i@wA~G","BBBBBBBB"],["mrlaGb`wpLfAuE\\RkAdFIEDQUK", "BBBBBBB"]];

$(document).ready(initMaps);
$(window).unload(GUnload);

function HelpControl() {}
HelpControl.prototype = new GControl();
HelpControl.prototype.initialize = function(map) {
	var container = $("#acc_container")[0];
	map.getContainer().appendChild(container);
	return container;
};
HelpControl.prototype.getDefaultPosition = function() {
	return new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(5, 42));
};

function setupExternalLinks( parent_node ) {
	if ( typeof parent_node == 'undefined' ) 
		parent_node = document.body;
	$(parent_node).find('a[rel=external]').click(function() {
		window.open($(this).attr('href'));
		return false;
	});
}

function initMaps() {
	$('#BU_load').show();
	resizeMap();
	buildNav();
	if (typeof loggedin == 'undefined') loggedin = false;
	if (loggedin)
		$('#primary-nav').find('#item8').addClass('loggedin');

	popupXslTemplate = string2xml(popupXslString);
	item_cache = eval('(' + item_cache_str + ')' );
	
	setTimeout(function() {
		setupExternalLinks();
		setupSearchLinks($('#side'));
		setupSearchLinks($('#nav'));
		delete item_cache_str;
	}, 1);

	// Init Google Analytics.
	setTimeout(function() {
		ga().config({ id: "UA-124985-1" }).track();
	}, 250);
	
	initialize();
	endLoad();
}

function initialize() {
	if (!GBrowserIsCompatible()) return -1;
	$(window).resize(resizeMap);
	initTabs();

	map = new GMap2($("#map")[0]);
	map.enableScrollWheelZoom()
	map.enableContinuousZoom();
	new GKeyboardHandler(map);
	map.addMapType(G_PHYSICAL_MAP);
	map.addControl(new GHierarchicalMapTypeControl());
	svOverlay = new GStreetviewOverlay();
	map.addControl(new StreetControl());
	overviewmap = new GOverviewMapControl(new GSize(118,117));
	map.addControl(overviewmap);
	mapLargeControl = new GLargeMapControl();
	map.addControl(mapLargeControl, new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(312,7)));
	mapScaleControl = new GScaleControl(); 
	map.addControl(mapScaleControl, new GControlPosition(G_ANCHOR_BOTTOM_LEFT, new GSize(369,5)));
	map.addControl(new HelpControl());

	centerMap();

	GEvent.addListener(map, "infowindowbeforeclose", function() {
		$('#results').children().removeClass('selected-result');
		
		current_closest_marker_id = null;
		current_open_marker_id = null;
	});
	
	// HACK ALERT
	var select_hack_func = function() {
		$('.bubble-trick').remove();
	}
	GEvent.addListener(map, 'zoomend', 	select_hack_func);
	GEvent.addListener(map, 'movestart', select_hack_func);
	GEvent.addListener(map, "infowindowbeforeclose", select_hack_func);
	// END HACK ALERT
	
	if ( $.browser.mozilla && $.browser.version.substring( 0, 5 ) === '1.9.0' ) 
		GEvent.addListener(map, "infowindowopen", resizeInfoWindow);

	GEvent.addListener(map, "click", function(overlay) {
		$('#pageLinkDisplay').hide();
		if (overlay && overlay.bumaps_info)
			openMarker(overlay.id, 'click');
	});

	$('#slideLink').click(toggleSide);

	addLine(campus_outline);

	$('#searchForm').submit(function() {
		var search = $('#search_input').val();
		var campus = $('#campusSelect').val();
		newSearch(search, campus, 'search');
		return false;
	});

	$('#side').mouseover(function() {
		try {
			map.disableScrollWheelZoom();
		}
		catch (e) {}
	});

	$('#side').mouseout(function() {
		// This causes an error but it does not seem to affect anything
		try {
			map.enableScrollWheelZoom();
		}
		catch(e) {}
	});

	if (loggedin) {
		populateMyMapSelect();
		$('#mymaps_select').change(function() {
			var i = $(this).val();
			if (i == 'select') return;

			if (!isNaN(i)) {
				myMaps.current_map_id = i;

				newSearch(i, 'all', 'mymap');
				$(this).val('select');
				return;
			}

			if (i == 'new') {
				myMapsNewSlideToggle();
				$(this).val('select');
				return;
			}
		});
	}


	URLSearch();

}
function centerMap() {
	map.setCenter(new GLatLng(0, 180), 2);
	var bounds = new GLatLngBounds();
	bounds.extend(new GLatLng(42.35507928656464, -71.12455487251282));
	bounds.extend(new GLatLng(42.33117050663451,-71.06317520141602));
	editBounds(map.getBoundsZoomLevel(bounds), bounds, 302, false, 0);
}

function resetEverything() {
	// window.blur seems to be reandomly called. We do not want this behavior
	// so we disable it for this function
	var blur = window.blur;
	window.blur = function() {return false;}

	startLoad();
	setTimeout(function() {
	removeSearchResults();
	$('#resultcount').hide();
	$('#hideshow').find('input').removeAttr('checked');
	toggleAllDisplay();
	$('#search_input').val('');
	$('#campusSelect').val('all');

	current_search = '';
	current_campus = '';
	current_search_type = 'search';
	last_real_search = null;
	last_real_campus = null;
	last_real_search_type = null;
	current_results_page = 1;
	current_results_count = 0;
	showSearchResults();
	centerMap();
	endLoad();
	window.blur = blur;
	});
}

function URLSearch() {
	// Map settings passed as url params

	var params = parseUrl();
	var lat = params['lat'];
	var lng = params['lng'];
	var zoom = params['zoom'];
	var map_type_name = params['type'];

	if (lat && lng) map.setCenter(new GLatLng(lat, lng));
	if (zoom) map.setZoom(zoom);
	if (map_type_name)
		for (var i in G_DEFAULT_MAP_TYPES)
			if (G_DEFAULT_MAP_TYPES[i].getName(true) == map_type_name) {
				map.setMapType(G_DEFAULT_MAP_TYPES[i]);
				break;
			}

	// Checkbox status parameters
	$('#parking_box').attr('checked', (params['parking_box']) ? 'checked' : '');
	$('#train_box').attr('checked', (params['train_box']) ? 'checked' : '');
	$('#bus_box').attr('checked', (params['bus_box']) ? 'checked' : '');
	$('#bicycle_box').attr('checked', (params['bicycle_box']) ? 'checked' : '');
	$('#blue_box').attr('checked', (params['blue_box']) ? 'checked' : '');
	$('#mail_box').attr('checked', (params['mail_box']) ? 'checked' : '');
	$('#wireless_box').attr('checked', (params['wireless_box']) ? 'checked' : '');
	$('#access_box').attr('checked', (params['access_box']) ? 'checked' : '');
	if (params['access_box']) {
		$('.access_checkbox').removeAttr('checked');
		$('#door_box').attr('checked', (params['door_box']) ? 'checked' : '');
		$('#tty_box').attr('checked', (params['tty_box']) ? 'checked' : '');
		$('#audible_box').attr('checked', (params['audible_box']) ? 'checked' : '');
		$('#curb_box').attr('checked', (params['curb_box']) ? 'checked' : '');

	}

	toggleAllDisplay();

	// Search settings passed in
	var closest_id = params['closest_id'];
	var open_id = params['open_id'];
	var id = params['id'];
	var ids = params['ids'];
	var search = params['search'];
	var category = params['category'];
	var campus = params['campus'];
	var show = params['show'];
	var mymap = params['mymap'];
	var page= (isNaN(params['page'])) ? 1 : params['page'];
	current_page_size = params['page_size'];
	current_page_size = (!isNaN(current_page_size)) ? current_page_size : 10;
	current_results_count = page*current_page_size;
	
	refreshPageSizeLinks();

	var open_opened_marker = function(e) {
		openMarker(e.data.open_id);
		$(document).unbind('search-finished', open_opened_marker);
	}

	var open_closest_marker = function(e) {
		closestPopTypeById(e.data.closest_id, e.data.open_id);
		$(document).unbind('search-finished', open_closest_marker);
	}

	if (open_id) {
		$(document).bind('search-finished', {open_id: open_id}, open_opened_marker);
	}
	
	if (open_id && closest_id) {
		$(document).bind('search-finished', {closest_id: closest_id, open_id: open_id}, open_closest_marker);
	}
	
	if (id) return newSearch(id, 'all', 'id', page);
	if (loggedin && mymap) return newSearch(mymap, campus, 'mymap', page);
	if (loggedin && show == 'mymap') return showMyMaps();
	if (ids) return newSearch(ids, 'all', 'multi-id', page);
	if (search) return newSearch(search, campus, 'search', page);
	if (category) return newSearch(category, campus, 'category', page);
	if (campus) return newSearch(campus, campus, 'campus', page);

}

function refreshPageSizeLinks() {
	$('#results_10').find('span').hide();
	$('#results_10').find('a').show();

	$('#results_15').find('span').hide();
	$('#results_15').find('a').show();

	$('#results_20').find('span').hide();
	$('#results_20').find('a').show();

	$('#results_'+current_page_size).find('a').hide();
	$('#results_'+current_page_size).find('span').show();

}

function newPageSize(size) {
	current_page_size=size;
	refreshPageSizeLinks();
	runCurrentSearch();
	return false;
}

function addLine (lines) {
	var encodedPolyline;
	for (var i = 0; i < lines.length; i++) {
		encodedPolyline = new GPolyline.fromEncoded({
				color: "#FF0000",
				weight: 3,
				points: lines[i][0],
				levels: lines[i][1],
				zoomFactor: 32,
				numLevels: 4
		});
		map.addOverlay(encodedPolyline);
	}
}

function addPolyLine(params) {
	if (!params) return false;
	if (!params.points || !params.levels || !params.id || !params.type) 
		return false;
	if (polylines[params.id]) return false;
	
	if (!params.color) params.color = '#FF0000';
	if (!params.weight) params.weight = 3;
	if (!params.zoomFactor) params.zoomFactor = 32;
	if (!params.numLevels) params.numLevels = 4;

	var encodedPolyline = new GPolyline.fromEncoded(params);
	map.addOverlay(encodedPolyline);
	if (!polylines[params.type]) polylines[params.type] = [];
	polylines[params.type][params.id] = encodedPolyline;
	return true;
}

function removePolyLines(type) {
	if (!polylines.hasOwnProperty(type)) return;
	for (var id in polylines[type]) {
		if (!polylines[type].hasOwnProperty(id)) continue;
		map.removeOverlay(polylines[type][id])
	}
	polylines[type] = [];
}

function resizeMap() {
	//Position divs side and arrowhs
	var windowHeight = $(window).height();
	var windowWidth = $(window).width();
	var headerHeight = $('#header').attr('offsetHeight');
	$('#side').css('top', headerHeight+'px');

	// Caclulate the height of viewport for the map
	// and set the correct sizes for divs map,side and arrowhs
	var offset = 0;
	for (var elem = $("#map")[0]; elem !== null; elem = elem.offsetParent) {
		offset += elem.offsetTop;
	}

	//var height = windowHeight - offset - 10;
	var height = windowHeight - headerHeight - 10;
	if (height >= 0) {
		$('#map').height(height);
		$('#side').height(height + 1);
		var tabs_height = (loggedin) ? $('#tabs').height() : 0;
		var side_container = $('#sideContainer');
		var side_height = height
			- tabs_height 
			- parseInt(side_container.css('padding-top'))
			- parseInt(side_container.css('padding-bottom'))

		side_container.height(side_height);
		$('#arrowhs').height($('#page').height());

		$('#pageLinkDisplay').css('top', headerHeight+'px');
	}

}

function getResultIcon(type, icon) {
	var path = 'icons/map-icons/icons/';
	var name = path + icon + '.gif';
	return name;
}

function addMarkerSideLink(data) {
	var li = $.create('li');
	
	var openFunc = function() {
		openMarker(data.id, 'side');
		return false;
	}

	var a = $.create('a').attr('href', './?id='+data.id).addClass('resultIcon');
	
	a.css('background-image', 'url(' + getResultIcon(data.type, data.icon)+ ')');
	a.click(openFunc);

	li.append(a);

	var div1 = $.create('div').addClass('resultDetails');
	var a1 = $.create('a').attr('href', './?id='+data.id).click(openFunc).text(data.title);
	if (data.sponsored < 100) a1.css('font-weight', 'bold');
	div1.append(a1).append($.create('br'));
	div1.append($.create('span').text(data.address));

	li.append(div1);

	if (current_search_type == 'mymap') {
		var a2 = $.create('a').attr('href', '#').addClass('x-icon').click(function() {
			rmMyMaps(data.id, current_search);
			return false;
		});
		li.append(a2);
	}
	
	li.append( $.create('div').addClass('clear') );

	$('#results').append(li);
}

// opening_action is for logging purposes only
// it can be one of these: only, side, click, closest
// only means it was the only one on the page
// side means it was opened with a side link
// click was a direct click on the marker on the map
// closest means it was opened as a "closest stop" or whatever
function openMarker(id, opening_action) {
	if (!id) return;
	if (id == current_closest_open_marker_id) return;
	var marker;

	//Search for the marker
	if (searchResults[id]) marker = searchResults[id];
	if (!marker)
		for (var key in displayItems)
			if (key != 'tty' && key != 'door' && key != 'curb' && key != 'audible')
				if (displayItems[key][id]) marker = displayItems[key][id];

	if (!marker && closestMarker)
		marker = (closestMarker.id == id) ? closestMarker : null;

	if (!marker) return;
	
	var display_info_window = function(marker) {
		var div = $.create('div').html(marker.bu_html);
		if (loggedin)
			addMyMapsControlsToPopup(id, div);

		addReferencedInfoToPopup(marker, div);
		div.find('.item-reference').click(function() {
			var params = parseUrl( $(this).attr('href') );
			closestPopTypeById( params['id'], current_open_marker_id);
			return false;
		});

		div.find('.directions-link').click(function() {
			var from = ( $(this).attr('rel') == 'from-here' );
			showDirectionsForm(from);
			return false;
		});

		div.find( '#popup_back_button a').click(function() {
			resetPopup();
			return false;
		});

		div.find( '#isolate' ).click(function() {
			popupShowLink(this); return false;
		});

		setupExternalLinks(div);

		marker.openInfoWindow(div[0]);
		if (opening_action == 'closest') 
			current_closest_open_marker_id = id;
		else
			current_open_marker_id = id;

		if (searchResults[id])
			$('#results').find('input[value='+id+']').parent().addClass('selected-result');

		setTimeout(function() {
				if (opening_action != 'undefined' && opening_action)
				$.get('ajax/trackopen.php', {id: id, opening_action: opening_action});
				}, 1);
	}

	if (!marker.bu_html) {
		try {
			if ( typeof window.ActiveXObject != 'undefined' || typeof XSLTProcessor != 'undefined' ) {
				var xml_string = object2xml(marker.bumaps_info, 'popup');
				var xml = string2xml(xml_string);
				marker.bu_html = xml2html(xml, popupXslTemplate);
				display_info_window(marker);
			}
			else {
				$.get('ajax/open-marker.php', {id: marker.id}, function(data) {
					marker.bu_html = data;
					display_info_window(marker);
				});
			}
		}
		catch(e) {
			alert('Error opening marker: ' + e);
			return false;
		}
	}
	else {
		display_info_window(marker);
	}

}

function addReferencedInfoToPopup(marker, div) {
	div.find('.item-reference[rel="building"]').each(function() {
        var ref_id = jQuery.trim($(this).text());
		var ref_item = item_cache[ref_id];
		if ( typeof ref_item != 'undefined' )
			$(this).text(ref_item.title);
	});
	
	div.find('.item-reference[rel="train-stop"]').each(function() {
        var ref_id = jQuery.trim($(this).text());
		var ref_item = item_cache[ref_id];
		if ( typeof ref_item != 'undefined' )
			$(this).text(ref_item.title);
	});
	
	div.find('.item-reference[rel="parking-lot"]').each(function() {
        var ref_id = jQuery.trim($(this).text());
		var ref_item = item_cache[ref_id];
		if ( typeof ref_item != 'undefined' )
			$(this).text(ref_item.title.substring(ref_item.title.indexOf(':') + 2));
	});

	div.find('.item-reference[rel="bus"]').each(function() {
        var ref_id = jQuery.trim($(this).text());
		var ref_item = item_cache[ref_id];
		if ( typeof ref_item != 'undefined' )
			$(this).text(ref_item.title.substring(0, ref_item.title.indexOf(':')));
	});
}

function addMyMapsControlsToPopup(id, div) {
	div2 = div.find('#popup_add_mymap');
	div2.append($.create('span').text('Save to MyMaps: '));

	// At least one mymap
	if ( myMaps.length > 0) {
		var a1 = $.create('a').text(myMaps[myMaps.current_map_id].name);
		a1.attr('href', '#').click(function() {
			addMyMaps(id, myMaps.current_map_id);
			return false;
		});

		div2.append(a1);
		div2.append($.create('span').text(' or '));
	}

	// More than one mymap
	var a2_text = ( myMaps.length > 0) ? 'a different MyMap' : 'a new MyMap';
	var a2 = $.create('a').text(a2_text);
	a2.attr('href', '#').click(popupShowAllMyMaps);
	div2.append(a2);

}

function setupResultsPages(total_results) {
	var results_nav = $('.pageslist');
	results_nav.empty();

	var page_size = current_page_size;
	var page = current_results_page;
	var num_pages = Math.ceil(total_results/page_size);
	var max_page = Math.ceil(total_results/page_size);
	if (max_page < 2) return;


	if (current_results_page > 1)
		results_nav.append($.create('li').addClass('resultleft').append($.create('a').attr('href', '#').text('Prev').click(function() {
			goToResultsPage(current_results_page-1);
			return false;
		})));

	var start = Math.max(current_results_page-3, 1);
	var end = Math.min(current_results_page+3, max_page);

	for (var i = start; i <= end; i++) {
		var li = $.create('li');
		if (i != current_results_page) {
			var a = $.create('a').attr('href', '#').text(i).click(function() {
				goToResultsPage(parseInt($(this).text()));
				return false;
			});
			li.append(a);
		}
		else
			li.addClass('current_page').text(i);
		results_nav.append(li);
	}

	if (current_results_page < max_page)
		results_nav.append($.create('li').addClass('resultright').append($.create('a').attr('href', '#').text('Next').click(function() {
			goToResultsPage(current_results_page+1);
			return false;
		})));

}

function setupSearchResultDisplay(count) {
	if (count > 0) $('#noresults').hide();
	var page_size = current_page_size;
	var from = (current_results_page-1)*page_size+1;
	var to = Math.min(current_results_page*page_size|0, count);

	var search_link = $.create('a').attr('href', '?'+current_search_type+'='+current_search);
	var link_text;
	if (current_search_type == 'search') link_text = current_search;
	if (current_search_type == 'campus') link_text = current_search + ' campus';
	if (current_search_type == 'category') link_text = current_search.replace(/_/g, ' ') + ' category';
	if (current_search_type == 'id') link_text = 'item number ' + current_search;

	search_link.text(link_text);
	var campus_name = $('#campusSelect').children('option[value='+current_campus+']').text();
	var campus_link = $.create('a').text(campus_name).attr('href', '?campus='+current_campus);

	var summary = $('#result_summary').empty();
	summary.append($.create('span').text('Results '));
	summary.append($.create('span').addClass('bold').text(from + ' - ' + to));
	summary.append($.create('span').text(' of '));
	summary.append($.create('span').addClass('bold').text(count));
	if (current_search_type != 'multi-id') summary.append($.create('span').text(' for '));

	if (current_search_type != 'mymap')	summary.append(search_link);
	else summary.append($.create('span').addClass('bold').text(myMaps[current_search].name));

	if (current_search_type != 'campus' && current_search_type != 'id' && current_search_type != 'mymap' && current_search_type != 'multi-id') {
			summary.append($.create('span').text(' in '));
			summary.append(campus_link);
	}
	setupSearchLinks(summary);

	if (count > 0) $('#resultcount').show();
	$('.resultnav').show();
}

function printSuggestion(suggestion, campus) {
	if (!suggestion) {
		$('#didYou').empty().hide();
		return;
	}
	campus = (campus) ? campus.toLowerCase() : 'all';

	var suggestion_span = $('#didYou').empty();
	suggestion_span.append($.create('span').css('color', 'rgb(204, 0, 0)').text('We have results for: '));
	suggestion_span.append($.create('a').text(suggestion).attr('href', '?search='+suggestion+'&campus='+campus));
	suggestion_span.append($.create('span').text(' in '));
	suggestion_span.append($.create('a').text(campus).attr('href', '?campus='+campus.toLowerCase()));
	suggestion_span.append($.create('br'));
	setupSearchLinks(suggestion_span.show());

	$('#noresults').show();
	$('#resultcount').hide();
}

function setupSearchLinks(links) {
	if (!links) links = $(document.body);

	var this_path = getUrlPath();
	$(links).find('a:not([rel=external])').each(function() {
		var href = this.href;
		if (href.substring(href.length-1) == '#') return;
		if (href.substring(0, 1) == '?') href = 'http://'+this_path+'/'+href;
		if (href.substring(0, 4) != 'http') href = 'http://www.bu.edu'+href;
		if (this_path != getUrlPath(href)) return;

		var params = parseUrl(href);
		var campus = params['campus'];
		var category = params['category'];
		var search = params['search'];
		var id = params['id'];
		
		if (!campus && !category && !search && !id) return;
		
		if (campus && !category && !search && !id)
			return $(this).click(function() {
				return newSearch(campus, campus, 'campus');
			});
		
		if (category && !search && !id)
			return $(this).click(function() {
				return newSearch(category, campus, 'category');
			});

		if (search && !id)
			return $(this).click(function() {
				return newSearch(search, campus, 'search');
			});

		if (id)
			return $(this).click(function() {
				return newSearch(id, 'all', 'id');
			});
	});

}

function addMarker(data) {
	var marker =
		new GMarker(new GLatLng(data.lat, data.lng), getMarkerIcon(data.type, data.icon));
	marker.id = data.id;
	marker.type = marker.type;
	marker.bumaps_info = data;
	map.addOverlay(marker);

	searchResults[marker.id] = marker;
	addMarkerSideLink(data);
}


function addSearchResults(search_results) {
	var markers = search_results.markers;
	var count = search_results.total_count;

	// If we somehow ended up on a page where
	// there are no results, but this search
	// actually returns results then we
	// fix the situation by searching again
	if (count > 1 && markers.length < 1) {
		current_results_page = 1;
		runCurrentSearch();
		endLoad();
		return;
	}

	current_results_count = count;

	for (var key in markers)
		addMarker(markers[key]);

	setupSearchResultDisplay(count);
	setupResultsPages(count);

	if (count == 1 && popupXslTemplate)
		openMarker(search_results.markers[0].id, 'only');

	$('#welcome').hide();
	if (count < 1) {
		if (current_search_type == 'mymap') {
			if ( myMaps.length < 1) {
				$('#nonemy').show();
				$('#empty_mymap').hide();
			}
			else {
				$('#nonemy').hide();
				$('#empty_mymap').show();
			}
		}
		else {
			printSuggestion(search_results.suggestion, search_results.suggestion_campus);
			if (current_search_type != 'mymap') $('#noresults').show();
		}
		$('#results').hide();
	}
	else {
		$('.noresults').hide();
		$('#results').show();
	}

	if (current_search_type == 'mymap' && myMaps.length > 0) {
		$('#mymaps_controls').show();
		$('#mymaps_current_title').show();
	}
	
	// This code makes sure that all results are visible
	var bounds = new GLatLngBounds();
	if (count > 1) {
		for (var key in searchResults) 
			bounds.extend(searchResults[key].getLatLng());
		editBounds(map.getBoundsZoomLevel(bounds), bounds, 302, false, -1);
	}
	else {
		bounds.extend(new GLatLng(42.35507928656464, -71.12455487251282));
		bounds.extend(new GLatLng(42.33117050663451,-71.06317520141602));
		editBounds(map.getBoundsZoomLevel(bounds), bounds, 302, false, -1);
	}

	// Trigger a search finished event
	$(document).trigger('search-finished');

	endLoad();
}

function getMarkerIcon(type, icon_name) {
	var icon = new GIcon(G_DEFAULT_ICON);
	var p_path = 'icons/map-icons/print-icons/'; //print icon path
	var m_path = 'icons/map-icons/markers/'; //marker icon path
	var p_icon = p_path+icon_name+'.gif';
	var m_icon = m_path+icon_name+'.png';

	if (type == 'normal' || type == 'normal2') {
		icon = new GIcon(G_DEFAULT_ICON, m_icon);
		icon.shadow = m_path + "shadow.png";
		icon.iconSize = new GSize(27, 26);
		icon.shadowSize = new GSize(41, 26);
		icon.iconAnchor = new GPoint(15, 27);
		icon.ifnoWindowAnchor = new GPoint(12, 2);
		icon.printShadow = p_path + "shadow.gif";
	}

	if (type == 'bus') {
		icon = new GIcon(G_DEFAULT_ICON, m_icon);
		icon.shadow = null;
		icon.iconSize = new GSize(18,18);
		icon.iconAnchor = new GPoint(10, 10);
		icon.printShadow = null;
	}

	if (type == 'parking') {
		icon = new GIcon(G_DEFAULT_ICON, m_icon);
		icon.shadow = null;
		icon.iconSize = new GSize(14,14);
		icon.iconAnchor = new GPoint(8, 8);
		icon.printShadow = null;
	}

	if (type == 'wireless') {
		icon= new GIcon(G_DEFAULT_ICON, m_icon);
		icon.shadow = null;
		icon.iconSize = new GSize(18,18);
		icon.iconAnchor = new GPoint(9, 9);
		icon.printShadow = null;
	}

	if (type == 'train') {
		icon= new GIcon(G_DEFAULT_ICON, m_icon);
		icon.shadow = null;
		icon.iconSize = new GSize(17,17);
		icon.iconAnchor = new GPoint(9, 9);
		icon.printShadow = null;
	}

	if (type == 'blue') {
		icon = new GIcon(G_DEFAULT_ICON, m_icon);
		icon.shadow = null;
		icon.iconSize = new GSize(14,14);
		icon.iconAnchor = new GPoint(7, 7);
		icon.printShadow = null;
	}

	if (type == 'tty') {
		icon = new GIcon(G_DEFAULT_ICON, m_icon);
		icon.shadow = null;
		icon.iconSize = new GSize(19,19);
		icon.iconAnchor = new GPoint(10, 10);
		icon.printShadow = null;
	}

	if (type == 'door') {
		icon = new GIcon(G_DEFAULT_ICON, m_icon);
		icon.shadow = null;
		icon.iconSize = new GSize(19,19);
		icon.iconAnchor = new GPoint(10, 10);
		icon.printShadow = null;
	}

	if (type == 'audible') {
		icon = new GIcon(G_DEFAULT_ICON, m_icon);
		icon.shadow = null;
		icon.iconSize = new GSize(19,19);
		icon.iconAnchor = new GPoint(10, 10);
		icon.printShadow = null;
	}

	if (type == 'curb') {
		icon = new GIcon(G_DEFAULT_ICON, m_icon);
		icon.shadow = null;
		icon.iconSize = new GSize(10,10);
		icon.iconAnchor = new GPoint(5, 5);
		icon.printShadow = null;
	}
	
	if (type == 'bicycle') {
		icon = new GIcon(G_DEFAULT_ICON, m_icon);
		icon.shadow = null;
		icon.iconSize = new GSize(16,16);
		icon.iconAnchor = new GPoint(8, 8);
		icon.printShadow = null;
	}

	if (type == 'mail') {
		icon = new GIcon(G_DEFAULT_ICON, m_path + icon_name + '.gif');
		icon.shadow = null;
		icon.iconSize = new GSize(19,19);
		icon.iconAnchor = new GPoint(10, 10);
		icon.printShadow = null;
	}

	if (type == 'bus_commencement') {
		icon = new GIcon(G_DEFAULT_ICON, m_icon);
		icon.shadow = null;
		icon.iconSize = new GSize(18,18);
		icon.iconAnchor = new GPoint(10, 10);
		icon.printShadow = null;
	}
	
	icon.printImage = p_icon;
	icon.mozPrintImage = p_icon;

	return icon;
}

function addDisplayItemMarker(data) {
	var clickable = (data.type != 'tty' && data.type != 'door' &&
			data.type != 'audible' && data.type != 'curb');

	var marker_options = {
		icon: getMarkerIcon(data.type, data.icon),
		clickable: clickable
	};

	var marker =
		new GMarker(new GLatLng(data.lat, data.lng), marker_options);
	marker.id = data.id;
	marker.type = data.type;
	marker.bumaps_info = data;

	map.addOverlay(marker);

	if (!displayItems[marker.type]) displayItems[marker.type] = [];
	displayItems[marker.type][marker.id] = marker;
}

function addDisplayItems(search_results) {
	var markers = search_results.markers;
	for (var key in markers)
		addDisplayItemMarker(markers[key]);
	
	if (search_results.polylines) {
		for(var i in search_results.polylines) {
			if (!search_results.polylines.hasOwnProperty(i)) continue;
			addPolyLine(search_results.polylines[i]);
		}
	}

	endLoad();
}

function removeDisplayItems(type) {
	for (var key in displayItems[type])
		map.removeOverlay(displayItems[type][key]);
	displayItems[type] = [];
	
	removePolyLines(type);
}

function removeSearchResults() {
	for (var key in searchResults)
		map.removeOverlay(searchResults[key]);
	$('#results').empty();
	$('.pageslist').empty();
	searchResults = [];
}


//Start a brand new search
function newSearch(search, campus, search_type, page) {
	if (!search) {
		if (search_type == 'mymap') {
			$('.resultnav').hide();
			$('#resultcount').hide();
			$('#results').hide();
			$('#welcome').hide();

			$('#mymaps_controls').hide();
			$('#mymaps_current_title').hide();
			$('#nonemy').show();
			current_search_type = search_type;
			removeSearchResults();
			jerkTabs();
		}

		return;
	}
	
	if (search_type == 'mymap' && !myMaps[search]) {
		alert('You cannot view the MyMap with id=' + search);
		location.href = 'http://' + getUrlPath(location.href) + '/';
		return false;
	}

	current_search = search;
	if (!campus) campus = 'all';
	current_campus = campus
	current_search_type = search_type;
	current_results_page = (page) ? page : 1;

	if (current_search_type != 'mymap') {
		last_real_search_type = current_search_type;
		last_real_search = current_search;
		last_real_campus = current_campus;
	}
	jerkTabs();
	
	runCurrentSearch();
	return false;
}

function goToResultsPage(page) {
	current_results_page = page;
	runCurrentSearch();
}

function runCurrentSearch() {
	if (current_search_type == 'search') searchMap();
	if (current_search_type == 'category') categorySearchMap();
	if (current_search_type == 'campus') campusSearchMap();
	if (current_search_type == 'id') idSearchMap();
	if (current_search_type == 'multi-id') multiIdSearchMap();
	if (current_search_type == 'mymap') searchMyMap();
}

// Visually prepare to search
function prepareToSearch() {
	startLoad();
	$('#didYou').hide();
	$('#resultcount').hide();
	$('#mymaps_new_slideout').hide();
	$('#mymaps_controls').hide();
	$('#mymaps_current_title').hide();
	$('#empty_mymap').hide();
	$('#pageLinkDisplay').hide();
	$('#campusSelect').val(current_campus); 
	$('#search_input').val((current_search_type == 'search') ? current_search : '');
		
	if (current_search_type == 'mymap')
		$('#mymaps_current_title').find('span').text(myMaps[current_search].name);

	current_results_page = Math.min(current_results_page,
		Math.ceil(current_results_count/current_page_size));
	current_results_page = Math.max(current_results_page, 1);
	removeSearchResults();
	map.closeInfoWindow();
}

function multiIdSearchMap() {
	prepareToSearch();
	var query = '';
	for(var i in current_search) 
		query += 'ids[]=' + current_search[i] + '&';
	query = query.substring(0, query.length-1);

	var params = {
		page: current_results_page,
		page_size: current_page_size
	};

	$.getJSON('ajax/multi-id-search-map.php?v=2&'+query, params, function(search_results) {
		addSearchResults(search_results);
	});
}


function idSearchMap() {
	prepareToSearch();
	var params = {
		id: current_search,
		page: current_results_page,
		page_size: current_page_size
	};

	$.getJSON('ajax/id-search-map.php?v=2', params, function(search_results) {
		addSearchResults(search_results);
	});
}

function campusSearchMap() {
	prepareToSearch();
	var params = {
		page: current_results_page,
		page_size: current_page_size,
		campus: current_campus
	};

	$.getJSON('ajax/campus-search-map.php?v=2', params, function(search_results) {
		addSearchResults(search_results);
	});
}

function categorySearchMap() {
	prepareToSearch();
	var params = {
		category: current_search,
		page: current_results_page,
		page_size: current_page_size,
		campus: current_campus
	};

	$.getJSON('ajax/category-search-map.php?v=2', params, function(search_results) {
		addSearchResults(search_results);
	});
}

function searchMap() {
	prepareToSearch();
	var params = {
		search: current_search,
		page: current_results_page,
		page_size: current_page_size,
		campus: current_campus
	};

	$.getJSON('ajax/search-map.php?v=2', params, function(search_results) {
		addSearchResults(search_results);
	});
}

function searchMyMap() {
	prepareToSearch();
	
	var params = {
		user_map_id: current_search,
		page: current_results_page,
		page_size: current_page_size
	}
	$.postJSON('ajax/get-my-map-items.php', params, function(search_results) {
		if (!search_results.error) {
			return addSearchResults(search_results);
		}
		else {
			alert('The MyMap you have requested does not exist.');
			location.href = document.location.href.substring(0, document.location.href.lastIndexOf('/')+1);
		}
	});
}

function toggleDisplayItem(type) {
	$('#pageLinkDisplay').hide();
	var type_box = $('#'+type+'_box');
	if (!type_box.attr('checked'))
		return removeDisplayItems(type);
	type_box.attr('disabled', true);
	startLoad();

	$.getJSON('ajax/get-display-items.php?v=2', {type: type}, function(search_results) {
		addDisplayItems(search_results);
		type_box.removeAttr('disabled');
	});
	return;
}

function toggleAllDisplay() {
	toggleDisplayItem("wireless");
    toggleDisplayItem("parking");
    toggleDisplayItem("train");
    toggleDisplayItem("bus");
    toggleDisplayItem("bicycle");
    toggleDisplayItem("blue");
    toggleDisplayItem("mail");
    toggleAccess();
}

function toggleAccess() {
	var box = $('#access_box');
	if (!box.attr('checked')) {
		removeDisplayItems('curb');
		removeDisplayItems('door');
		removeDisplayItems('audible');
		removeDisplayItems('tty');
		$('#acc_container').hide();
		return;
	}

	$('#acc_container').show();
	toggleAllAcc();
}

function toggleAllAcc () {
	toggleDisplayItem('tty');
	toggleDisplayItem('door');
	toggleDisplayItem('audible');
	toggleDisplayItem('curb');
}

function startLoad () {
	if(loadingUp === 0) {
	if (typeof document.body.style.maxHeight === "undefined") {//if IE 6
		$("body","html").css({height: "100%", width: "100%"});
		$("html").css("overflow","hidden");
		if ($("#BU_HideSelect").length < 1) //iframe to hide select elements in ie6
		$("body").append("<iframe id='BU_HideSelect'></iframe>");
	}
	if(document.getElementById("BU_overlay") === null){
		$("body").append("<div id='BU_overlay'></div><div id='BU_load'><img src='images/loadingAnimation.gif' /></div>");
		$('#BU_load').show();
	}
	loadingUp++;
	return 500;
	}
	loadingUp++;
	return 0;
}

function endLoad () {
	loadingUp--;
	loadingUp = Math.max(loadingUp, 0);
	if (loadingUp == 0) {
	$("#BU_overlay").remove();
	$("#BU_HideSelect").remove();
	$("#BU_load").remove();
	if (typeof document.body.style.maxHeight == "undefined") {//if IE 6
		$("body","html").css({height: "auto", width: "auto"});
		$("html").css("overflow","");
	}
	}
}

function getThisLink (for_public) {
	var theLink = "";
	if (!current_search) {
		theLink += "lat=" + map.getCenter().lat();
		theLink += "&lng=" + map.getCenter().lng();
		theLink += "&zoom=" + map.getZoom();
	}

	if (current_search_type != 'multi-id' && current_search_type != 'mymap')  {
		if (current_search)	theLink += '&'+current_search_type+'='+current_search;
	}

	if (!for_public && current_search_type == 'mymap')
		if (current_search)	theLink += '&'+current_search_type+'='+current_search;

	if (for_public && current_search_type == 'mymap')
		for(var i in searchResults)
			theLink += '&ids[]=' + searchResults[i].id;

	if (current_search_type == 'multi-id')
		for(var i in searchResults)
			theLink += '&ids[]=' + searchResults[i].id;

	if (current_open_marker_id) theLink += '&open_id=' + current_open_marker_id;
	if (current_closest_open_marker_id) theLink += '&closest_id=' + current_closest_open_marker_id;

	if (current_search_type != 'campus' && current_campus && current_campus != 'all') theLink += '&campus='+current_campus;
	if (current_results_page && current_results_page != 1) theLink += '&page='+current_results_page;
	if (current_page_size && current_page_size != 10) theLink += '&page_size='+current_page_size;

	if (theLink != '') {
	var map_type =map.getCurrentMapType().getName(true); 
		if (map_type != 'Map') theLink += "&type=" + map_type;
		theLink += ($('#parking_box').attr('checked')) ? "&parking_box=on": "";
		theLink += ($("#train_box").attr('checked')) ? "&train_box=on": "";
		theLink += ($("#bus_box").attr('checked')) ? "&bus_box=on": "";
		theLink += ($("#bicycle_box").attr('checked')) ? "&bicycle_box=on": "";
		theLink += ($("#access_box").attr('checked')) ? "&access_box=on": "";
		theLink += ($("#mail_box").attr('checked')) ? "&mail_box=on": "";
		theLink += ($("#blue_box").attr('checked')) ? "&blue_box=on": "";
		theLink += ($("#wireless_box").attr('checked')) ? "&wireless_box=on": "";
	
		if ($("#access_box").attr('checked')) {
			theLink += ($("#door_box").attr('checked')) ? "&door_box=on": "";
			theLink += ($("#tty_box").attr('checked')) ? "&tty_box=on": "";
			theLink += ($("#audible_box").attr('checked')) ?"&audible_box=on":"";
			theLink += ($("#curb_box").attr('checked')) ? "&curb_box=on": "";
		}
	}
	theLink = (theLink.substring(0, 1) == '&') ? theLink.substring(1) : theLink;
	return theLink;
}

function emailLink () {
	var linkEnd = getThisLink();
	var dir = 'http://' + getUrlPath(location.href) + '/';
	var tempStr = "mailto:?subject=BU%20Maps&body="
		+ dir + '?' + linkEnd.replace(/&/g, "%26");
	tempStr = tempStr.replace(/\s/g, "+");
	document.location.href = tempStr;
}

function displayLink() {
 	var public_link = 'http://' + getUrlPath(location.href) + '/' + '?' + getThisLink(true);
 	var private_link = 'http://' + getUrlPath(location.href) + '/' + '?' + getThisLink();

	$('#defaultLink').find('input').val(private_link);
	$('#privateLink').find('input').val(private_link);
	$('#publicLink').find('input').val(public_link);

	if (loggedin && current_search_type == 'mymap') {
		$('#defaultLink').hide();
		$('#privateLink').show();
		$('#publicLink').show();
	}
	else {
		$('#defaultLink').show();
		$('#privateLink').hide();
		$('#publicLink').hide();
	}

	$('#pageLinkDisplay').fadeToggle('fast', function() {
		if (!$(this).is(':hidden')) {
			$(this).find('div:visible:first').find('input').focus().select();
		}
	});
	return false;
}

$(document).ready(function() {
	$('.location_link').bind('mousedown', function(e) {
		var dir = 'http://' + getUrlPath(location.href) + '/'
		$(this).attr('href', dir + '?' + getThisLink());
	});

	$('#pageLinkDisplay').find('input').click(function() {
		this.focus();
		this.select();
	});

	$('.location_link').click(displayLink);
});

function printPopup () {
	window.open('print.php?v=2', '', 'toolbar=yes,scrollbars=yes,menubar=yes,location=yes,width=700,height=800,top=0,left=0,resizable=yes');
}

function closestPopTypeById(id, original_marker_id) {
	if(item_cache[id]) {
		var data = item_cache[id];
		openClosestMarker(data, original_marker_id);
	}
	else { 
		$.getJSON('ajax/id-search-map.php?v=2', {id: id}, function(data) {
			var data = data.markers[0];
			openClosestMarker(data, original_marker_id);
		});
	}
}

function openClosestMarker(data, original_marker_id) {
	var closestMarkerOpts = {
		icon: getMarkerIcon(data.type, data.icon),
		zIndexProcess: function() {return 100;}
	}
	
	closestMarker =
		new GMarker(new GLatLng(data.lat, data.lng),
			closestMarkerOpts);
	
	closestMarker.id = data.id;
	closestMarker.type = data.type;
	closestMarker.bumaps_info = data;

	map.addOverlay(closestMarker);

	map.closeInfoWindow();
	openMarker(data.id, 'closest');
	current_open_marker_id = original_marker_id;

	var handle = GEvent.addListener(map, 'infowindowbeforeclose', function() {
			map.removeOverlay(closestMarker);
			GEvent.removeListener(handle);
			openMarker(original_marker_id);
			current_closest_open_marker_id = null;
			closestMarker = null;
	});

}

function editBounds (myZoom, bounds, extra, addCheck, extra_zoom) {
	var normPro = G_NORMAL_MAP.getProjection();
	var swPixel, nePixel;
	/*
	if (addCheck) {
	swPixel = normPro.fromLatLngToPixel(bounds.getSouthWest(),myZoom);
	nePixel = normPro.fromLatLngToPixel(bounds.getNorthEast(),myZoom);
	swPixel.x -= 20;
	swPixel.y += 10;
	nePixel.x += 20;
	nePixel.y -= 40;
	bounds.extend(normPro.fromPixelToLatLng(swPixel,myZoom));
	bounds.extend(normPro.fromPixelToLatLng(nePixel,myZoom));
	}
	*/
	var mapSize = map.getSize();
	var mapCenter = bounds.getCenter();
	var mapZoom = map.getBoundsZoomLevel(bounds, new GSize(mapSize.width - extra, mapSize.height));
	mapZoom += extra_zoom;
	var pl = normPro.fromLatLngToPixel(new GLatLng(0,0), mapZoom);
	var px = normPro.fromPixelToLatLng(new GPoint(pl.x + (extra/2), pl.y), mapZoom);
	var lat_lng = new GLatLng(mapCenter.lat(),mapCenter.lng() - px.lng());  
	mapZoom = (mapZoom > 15) ? 15 : mapZoom
	map.setCenter(lat_lng, mapZoom);
}

// =========================================================================== //
// Functions related to InfoWindow bubbles
function resizeInfoWindow() {
	try{
		map.updateInfoWindow(map.getInfoWindow().getTabs());
		if ( $.browser.mozilla && $.browser.version.substring( 0, 5 ) === '1.9.0' ) 
			$('.popup').width( $('.popup .info').outerWidth() + $('.popup .imgwrap' ).outerWidth() + 15 );
	}
	catch(e) {}
}

function showDirectionsForm(from) {
	if (from) {
		$('#from_dir').show();
		$('#to_dir').hide();
	}
	else {
		$('#from_dir').hide();
		$('#to_dir').show();
	}

	$('#get_dirs').css('font-weight', 'bolder');

	$('#popup_view_link').hide();
	$('#popup_closest').hide();
	$('#popup_add_mymap').hide();
	$('#popup_add_diff_mymap').hide();

	$('#popup_back_button').show();
	resizeInfoWindow();
}

function popupShowLink(link) {
	$('#popup_get_directions').hide();
	$('#popup_closest').hide();
	$('#popup_add_mymap').hide();
	$('#popup_add_diff_mymap').hide();

	$("#popup_view_link").show().find("input").val(link.href);
	resizeInfoWindow();
	$('#popup_back_button').show();
}

function popupShowAllMyMaps() {
	var id = current_open_marker_id;
	$('#popup_add_mymap').hide();
	var div = $('#popup_add_diff_mymap').show();

	var sel = div.find('#popup_mymaps_select');
	
	sel.html($('#mymaps_select').html());

	sel.change(function() {
		var i = $(this).val();

		if (i == 'new') {
			$('#popup_new_mymap_input').show().val(suggestMyMapsName());
			resizeInfoWindow();
		}
		else {
			if (!$('#popup_new_mymap_input').is(':hidden')) {
				$('#popup_new_mymap_input').hide();
				resizeInfoWindow();
			}
		}
	});

	if ( myMaps.length < 1) 
		sel.val('new').trigger('change').hide();

	var button = div.find('button').click(function() {
		var i = $('#popup_mymaps_select').val();
		if (!isNaN(i))
			addMyMaps(id, i);
		else 
			if (i == 'new') {
				var new_map_name = $('#popup_new_mymap_input').val();
				createMyMap(new_map_name, id);
			}
		return false;
	});


	// MEGA HACK ALERT
	sel.mouseover(function() {
		var sel2 = $(this).clone().fadeTo(0, 0);
		$('.bubble-trick').remove();
		sel2.css('position', 'absolute');
		sel2.css('top', (getY(this)+1)+'px').css('left', (getX(this)+1)+'px');
		sel2.css('z-index', '50');
		sel2.addClass('bubble-trick');

		sel2.val($(this).val());
		
		sel2.change(function() {
			var val = $(this).val();
			$(this).remove();
			$('#popup_mymaps_select').val(val).trigger('change');
		});

		$(document.body).append(sel2);

	});
	
	// END MEGA HACK ALERT

	$('#popup_get_directions').hide();
	$('#popup_view_link').hide();
	$('#popup_closest').hide();
	$('#popup_back_button').show();
	resizeInfoWindow();
	return false;
}



function resetPopup() {
	$('.bubble-trick').remove();
	$('#popup_closest').show();
	$('#popup_get_directions').show();

	$('#popup_view_link').hide();
	$('#from_dir').hide();
	$('#to_dir').hide();
	$('#popup_add_diff_mymap').hide();
	$('#popup_add_mymap').show();
	$('#popup_back_button').hide();
	$('#popup_new_mymap_input').hide();

	$('#get_dirs').css('font-weight', '');

	resizeInfoWindow();
}



// =========================================================================== //
// MyMaps code

function suggestMyMapsName() {
	var suggest = '';
	if ( myMaps.length < 1) {
		suggest = 'Main';
	}
	else {
		var high_suffix = 0;
		for (var i in myMaps)
			if (!isNaN(i))
				if (!isNaN(parseInt(myMaps[i].name.substring(4)))) {
					high_suffix = Math.max(high_suffix, parseInt(myMaps[i].name.substring(4)));
				}
		high_suffix++;
		suggest = 'Map ' + high_suffix;
	}

	return suggest;

}

function myMapsNewSlideToggle() {
	
	$('#mymaps_new_slideout').find('input').val(suggestMyMapsName());
	$("#mymaps_new_slideout").slideToggle("fast").css('border-bottom-width', ( myMaps.length > 0) ? '1px' : 0);
}

function removeMyMap() {
	if (current_search_type != 'mymap') return;
	var id = current_search;
	if (!confirm('Deleting this map from MyMaps is permanent. Any listing saved to this map will be lost. Are you sure you want to delete "'+myMaps[id].name+'"?')) return false;
	deleteMyMap(id, function() {
		populateMyMapSelect();
		if (myMaps.current_map_id)
			$('#mymaps_select').val(myMaps.current_map_id).trigger('change');
		else 
			newSearch(myMaps.current_map_id, 'all', 'mymap');
	});
	return false;
}

function createMyMap(name, item_id) {
	if (!name.replace(/^\s+|\s+$/g,"")) return false;
	name = name.replace(/^\s+|\s+$/g,"");

	for (var id in myMaps) {
		if ( !myMaps.hasOwnProperty( id ) || isNaN( id ) ) continue;
		if (myMaps[id].name.toLowerCase() == name.replace(/^\s+|\s+$/g,"").toLowerCase()) {
			alert('You already have a MyMap called ' + name + '.');
			return false;
		}
	}

	$('#mymaps_new_slideout').fadeOut('fast', function () {
		startLoad();

		addMyMap(name, function() {
			populateMyMapSelect();
			if (item_id) {
				var new_map_id = myMaps.current_map_id;
				addMyMaps(item_id, new_map_id);
			}
			else newSearch(myMaps.current_map_id, 'all', 'mymap');

			endLoad();
		});
	});
}

function populateMyMapSelect(item_id) {
		var sel = $('#mymaps_select').empty();
		var option = $.create('option').val('select').text('--- Select a MyMap ---');
		sel.append(option);
		option.attr('selected', true);

		for(var key in myMaps)
			if (!isNaN(key)) 
					sel.append($.create('option').val(key).text(myMaps[key].name));

		sel.append($.create('option').val('new').text('Create a new MyMap...'));


		if (current_search_type == 'mymap') {
			if ( myMaps.length < 1) {
				$('#empty_mymap').hide();
				$('#nonemy').show();
				$('#mymaps_controls').hide();
			}
			else {
				$('#mymaps_controls').show();

			}
		}

}

function addMyMaps(id, map_id) {
	startLoad();
	
	myMaps.current_map_id = map_id;

	addMyMapItem(map_id, id, function() {
		if (current_search_type == 'mymap') {
			runCurrentSearch();
			$(document).bind('search-finished', null, function() {
				openMarker(id);
				$(document).unbind('search-finished');
			});
		}
		else openMarker(id);
		endLoad();
	});
}

function rmMyMaps(id, map_id) {
	if (!myMaps[map_id]) return;
	if (!confirm('Are you sure you want to delete this listing from "'+myMaps[map_id].name+'"?')) return;
	startLoad();

	deleteMyMapItem(map_id, id, function() {
			runCurrentSearch();
			endLoad();
	});
}

// =========================================================================== //
// Open/Close the sidebar code

function toggleSide() {
	($('#side').attr('offsetLeft') < 0 ) ? openSide() : closeSide();
	return false;
}

function closeSide() {
	map.removeControl(mapLargeControl);
	map.removeControl(mapScaleControl);
	map.addControl(mapLargeControl);
	map.addControl(mapScaleControl);

	$("#side").animate({
		left: "-305px"
	}, 200, "linear");

	$('#arrowhs').css('background-image', 'url(images/arrow-show.gif)');
	$('#poweredby').hide();
}

function openSide() {
	map.removeControl(mapLargeControl);
	map.removeControl(mapScaleControl);

	$("#side").show().animate({
		left: "0px"
	}, 200, "linear", function () {
	map.addControl(mapLargeControl, new GControlPosition(G_ANCHOR_TOP_LEFT, new GSize(312,7)));
	map.addControl(mapScaleControl, new GControlPosition(G_ANCHOR_BOTTOM_LEFT, new GSize(369,5)));
	} );

	$('#arrowhs').css('background-image', 'url(images/arrow-hide.gif)');
	$('#poweredby').show();
}

// =========================================================================== //
// Code to make the MyMaps and Search Results buttons tick

function showMyMaps() {
	$('#openMyMapsLink').blur();
	newSearch(myMaps.current_map_id, 'all', 'mymap');
	return false;
}

function showSearchResults() {
	$(this).blur();
	$('#mymaps_controls').hide();
	$('#mymaps_current_title').hide();
	$('#mymaps_new_slideout').hide();
	$('#nonemy').hide();
	$('#empty_mymap').hide();
	if (last_real_search != null)
		newSearch(last_real_search, last_real_campus, last_real_search_type);
	else {
		current_search_type = 'search';
		$('#welcome').show();
		$('#results').hide();
		$('#resultcount').hide();
		$('.resultnav').hide();
		removeSearchResults();
		$('#pageLinkDisplay').hide();
		current_search = '';
		jerkTabs();
	}
	return false;
}

function initTabs() {
	if (!loggedin) {
		$('#sideContainer').css('border-top-width', '1px');
		return $('#tabs').hide();
	}
	
	$('#sideContainer').css('border-top-width', '0');
	$('#tabs').show();

	var search_link = $('#openSearchResultsLink').click(showSearchResults);
	var mm_link = $('#openMyMapsLink').click(showMyMaps);

	jerkTabs();
}

// jerkTabs makes sure that between the state of
// Search Results and MyMaps links is correct
function jerkTabs() {
	var search_link = $('#openSearchResultsLink');
	var mm_link = $('#openMyMapsLink');

	if (current_search_type != 'mymap') {
		search_link.css('background-image', 'url(images/tab-search-on.gif)').removeClass('rollover');
		mm_link.css('background-image', 'url(images/tab-mymaps.gif)').addClass('rollover');
	}
	else {
		search_link.css('background-image', 'url(images/tab-search.gif)').addClass('rollover');
		mm_link.css('background-image', 'url(images/tab-mymaps-on.gif)').removeClass('rollover');
	}
}


///// Util functcioins that are sometimes used
jQuery.create= function(element) {
	return $(document.createElement(element));
}

jQuery.fn.extend({
	fadeToggle: function(speed, callback) {
		return ($(this).is(':hidden')) ? $(this).fadeIn(speed, callback) : $(this).fadeOut(speed, callback);
	}
});

$.postJSON = function(url, data, callback) {
	$.post(url, data, callback, "json");
};

function changeImage(name, image) {
	$('#'+name).attr('src', image);
}

function getUrlPath(url) {
	if (!url) url = location.href;
	var file = url.substring(url.indexOf('://') + 3);
	return file.substring(0, file.lastIndexOf('/'));
}

function getX(elem) {
	var x = 0;
	while( elem != null ) {
		x += elem.offsetLeft;
		elem = elem.offsetParent;
	}
	return x;
}

function getY(elem) {
	var y = 0;
	while( elem != null ) {
		y += elem.offsetTop;
		elem = elem.offsetParent;
	}
	return y;
}

var myPano = null;
var panoClient;
var currentYaw = 0, currentPitch = 0, currentZoom = 0, currentLatLng, myMarker = null;
var lastFlying;
var streetInstructions = "<div class=\"dragme1\">Street View</div><div class=\"dragme2\">Drag me onto a blue outlined street.<br> You can also just click on a blue outlined street.</div>";
var mapClickLis;
var streetTimer;

function e(id) {
	return document.getElementById(id);
}

function startStreet () {
    
    panoClient = new GStreetviewClient();            

    var myIcon = new GIcon(G_DEFAULT_ICON, "icons/street/man-0.png");
    myIcon.iconSize = new GSize(49, 52);
    myIcon.infoWindowAnchor = new GPoint(24,4);
    myIcon.iconAnchor = new GPoint(24,32);
    myIcon.shadow = null;
    myIcon.transparent = "icons/street/man-pick.png";
    myIcon.imageMap = [16,4, 31,4, 31,36, 16,36];
    currentLatLng = map.getBounds().getCenter();
    myMarker = new GMarker(currentLatLng, { icon:myIcon, draggable:true, bouncy:true });
    map.addOverlay(myMarker);
    letterOpening = "none";
    myMarker.openInfoWindowHtml(streetInstructions, {noCloseOnClick: true});
    
    GEvent.addListener(myMarker, "click", function() {
	if (map.getInfoWindow().isHidden() || !e("pano")) {
	    panoClient.getNearestPanorama(myMarker.getLatLng(), showPanoData);
	}
	else {
	    myMarker.setImage("icons/street/man-"+Math.round(currentYaw/24)+".png");
            letterOpening = "none";
	    myMarker.openInfoWindowHtml(streetInstructions, {noCloseOnClick: true});
	}
    });

    GEvent.addListener(myMarker, "drag", function() {
	if (lastFly > (lastFly = myMarker.getLatLng().lng())) {
	    myMarker.setImage("icons/street/flying_man_left.png");
	}
	else {
	    myMarker.setImage("icons/street/flying_man_right.png");
	}
    });

    GEvent.addListener(myMarker, "dragend", function() {
	GEvent.trigger(myMarker, "click");
    });

    GEvent.addListener(myMarker, "dragstart", function() {
        lastFly = myMarker.getLatLng().lng();
	currentLatLng = myMarker.getLatLng();
	map.closeInfoWindow();
    });
}

function showPanoData(panoData) {
    if (panoData.code != 200) {
	myMarker.setImage("icons/street/man-"+Math.round(currentYaw/24)+".png");
	myMarker.setLatLng(currentLatLng);
	myMarker.openInfoWindowHtml(streetInstructions, {noCloseOnClick: true});
	letterOpening = "none";
	return;
    }
    overviewmap.hide(true);
    myMarker.setLatLng(panoData.location.latlng);
    myMarker.setImage("icons/street/man_arrow-"+Math.round(currentYaw/24)+".png");
    map.openInfoWindowHtml(panoData.location.latlng,"<div id=\"streetTitle\"><b>"+panoData.location.description+"</b></div><div name=\"pano\" id=\"pano\" style=\"width: 500px; height: 300px\"></div>", {pixelOffset: new GSize(0,-28),noCloseOnClick: true, onCloseFn: closePanWindow});
    letterOpening = "none";
    clearTimeout(streetTimer);
    streetTimer = setTimeout(function() {
	if (e("pano") !== null) {
	    if (myPano !== null) {
		GEvent.clearInstanceListeners(myPano);
		myPano.remove();
		myPano = null;
	    }
	    myPano = new GStreetviewPanorama(document.getElementById("pano"), {latlng: panoData.location.latlng, pov: {yaw:currentYaw,pitch:currentPitch}});
	    panoEvents();
	}
    }, 500);
}

function showPanoData2(panoData) {
    if (panoData.code != 200) {
	return;
    }
    overviewmap.hide(true);
    myMarker.setLatLng(panoData.location.latlng);
    myMarker.setImage("icons/street/man_arrow-"+Math.round(currentYaw/24)+".png");
    map.openInfoWindowHtml(panoData.location.latlng,"<div id=\"streetTitle\"><b>"+panoData.location.description+"</b></div><div name=\"pano\" id=\"pano\" style=\"width: 500px; height: 300px\"></div>", {pixelOffset: new GSize(0,-28),noCloseOnClick: true, onCloseFn: closePanWindow});
    letterOpening = "none";
    clearTimeout(streetTimer);
    streetTimer = setTimeout(function() {
	if (document.getElementById("pano") !== null) {
	    if (myPano !== null) {
		GEvent.clearInstanceListeners(myPano);
		myPano.remove();
	    }

	    myPano = new GStreetviewPanorama(e("pano"), {latlng: panoData.location.latlng, pov: {yaw:currentYaw,pitch:currentPitch}});
	    panoEvents();
	}
    }, 500);
}

function panoEvents() {
    GEvent.addListener(myPano, "yawchanged", function(x) {
	myMarker.setImage("icons/street/man_arrow-"+Math.round(x/24)+".png");
        currentYaw = x;
    });
    GEvent.addListener(myPano, "pitchchanged", function(x) {
        currentPitch = x;
    });
    GEvent.addListener(myPano, "zoomchanged", function(x) {
        currentZoom = x;
    });
    
    GEvent.addListener(myPano, "initialized", function(x) {
	e("streetTitle").innerHTML = "<b>"+x.description+"</b>";
	myMarker.setLatLng(x.latlng);
	map.getInfoWindow().reset(x.latlng, null, new GSize(500,315), new GSize(0,-28));
    });
}
function closePanWindow () {
    clearTimeout(streetTimer);
    if (myPano) {
	GEvent.clearInstanceListeners(myPano);
	myPano.remove();
	myPano = null;
    }
    myMarker.setImage("icons/street/man-"+Math.round(currentYaw/24)+".png");
}

function handleNoFlash(errorCode) {
    if (errorCode == FLASH_UNAVAILABLE) {
        alert("Error: Flash doesn't appear to be supported by your browser");
        return;
    }
}  
function toggleOverlay() {
    if (!svOverlay) {
        svOverlay = new GStreetviewOverlay();
        map.addOverlay(svOverlay);
    } 
    else {
        map.removeOverlay(svOverlay);
	svOverlay = null;
    }
}


function StreetControl() {
}

StreetControl.prototype = new GControl();

StreetControl.prototype.initialize = function(map) {
	var containerDiv = $.create('div').addClass('google_control').append(
		$.create('div').text('Street View')
	);
	containerDiv.css('width', (containerDiv.children('div').text().length-4)+'em');

	containerDiv.click(
		function() {
			if (!$(this).hasClass('google_control_active')) {
				if (myMarker == null) 
					startStreet();
				else {
					if (map.getBounds().containsLatLng(myMarker.getLatLng())) 
						myMarker.show();
					else {
						currentLatLng = map.getBounds().getCenter();
						myMarker.setLatLng(currentLatLng);
						myMarker.show();
					}
				}
				mapClickLis = GEvent.addListener(map, "click", 
					function(a,b) {
						if(a == null) {
							map.closeInfoWindow();
							currentLatLng = myMarker.getLatLng();
							panoClient.getNearestPanorama(b, showPanoData2);
						}
					}
				);
				map.addOverlay(svOverlay);
				$(this).addClass('google_control_active');
			}
			else {
				GEvent.removeListener(mapClickLis);
				if (e("pano") || (!map.getInfoWindow().isHidden() && 
			    		map.getInfoWindow().getContentContainers()[0].innerHTML.search(/class=\"dragme1\"/i))) 
					map.closeInfoWindow();
				myMarker.hide();
				map.removeOverlay(svOverlay);
				$(this).removeClass('google_control_active');
			}
		}
	);

    map.getContainer().appendChild(containerDiv[0]);
    return containerDiv[0];

}

StreetControl.prototype.getDefaultPosition = function() {
    return new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(215, 7));
}

var myMapItems = {};

function getMyMaps(callback, data) {
	var processMyMaps = function(callback, data) {
		myMaps = data;
		len = 0;
		for (var key in myMaps)
			if (!isNaN(key)) len++;
		myMaps.length = len;
		if (callback) callback();
	}
	
	if (!data)
		$.post('ajax/get-my-maps.php', '', function (data) {processMyMaps(callback, data);}, 'json');
	else
		processMyMaps(callback, data);
}

function addMyMap(name, callback) {
	$.post('ajax/add-my-map.php', {name: name}, function(data) {
		getMyMaps(callback, data);
	}, 'json');
}

function deleteMyMap(map_id, callback) {
	$.post('ajax/rm-my-map.php', {user_map_id: map_id}, function(data) {
		getMyMaps(callback, data);
	}, 'json');
}

function addMyMapItem(map_id, item_id, callback) {
	$.post('ajax/add-my-map-item.php', {user_map_id: map_id, item_id: item_id}, 
	function(data) {
		if (data.error) {
			alert('This MyMap does not exist. Reloading to refresh MyMaps list.');
			location.href=location.href;
		}
		if (callback) callback();
	}, 'json');
}

function deleteMyMapItem(map_id, item_id, callback) {
	$.post('ajax/rm-my-map-item.php', {user_map_id: map_id, item_id: item_id}, function() {
		if (callback) callback();
	});
}

