/*
 * 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);};});})();
/**
 * jQuery.ScrollTo - Easy element scrolling using jQuery.
 * Copyright (c) 2008 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
 * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
 * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
 * Date: 2/19/2008
 * @author Ariel Flesler
 * @version 1.3.3
 */
;(function($){var o=$.scrollTo=function(a,b,c){o.window().scrollTo(a,b,c)};o.defaults={axis:'y',duration:1};o.window=function(){return $($.browser.safari?'body':'html')};$.fn.scrollTo=function(l,m,n){if(typeof m=='object'){n=m;m=0}n=$.extend({},o.defaults,n);m=m||n.speed||n.duration;n.queue=n.queue&&n.axis.length>1;if(n.queue)m/=2;n.offset=j(n.offset);n.over=j(n.over);return this.each(function(){var a=this,b=$(a),t=l,c,d={},w=b.is('html,body');switch(typeof t){case'number':case'string':if(/^([+-]=)?\d+(px)?$/.test(t)){t=j(t);break}t=$(t,this);case'object':if(t.is||t.style)c=(t=$(t)).offset()}$.each(n.axis.split(''),function(i,f){var P=f=='x'?'Left':'Top',p=P.toLowerCase(),k='scroll'+P,e=a[k],D=f=='x'?'Width':'Height';if(c){d[k]=c[p]+(w?0:e-b.offset()[p]);if(n.margin){d[k]-=parseInt(t.css('margin'+P))||0;d[k]-=parseInt(t.css('border'+P+'Width'))||0}d[k]+=n.offset[p]||0;if(n.over[p])d[k]+=t[D.toLowerCase()]()*n.over[p]}else d[k]=t[p];if(/^\d+$/.test(d[k]))d[k]=d[k]<=0?0:Math.min(d[k],h(D));if(!i&&n.queue){if(e!=d[k])g(n.onAfterFirst);delete d[k]}});g(n.onAfter);function g(a){b.animate(d,m,n.easing,a&&function(){a.call(this,l)})};function h(D){var b=w?$.browser.opera?document.body:document.documentElement:a;return b['scroll'+D]-b['client'+D]}})};function j(a){return typeof a=='object'?a:{top:a,left:a}}})(jQuery);
var current_nav_id = '';
var doHide = false;
var liToRestore = null;

function showMenu(id, submenuId)
{	
	doHide = false;
	
	current_nav_id = id;
	
	var pos = $('#'+ id).position();
	
	var lr = document.getElementById(submenuId);
	
	lr.style.top = pos.top + $('#'+ id).height() + 'px';
	lr.style.left = pos.left + 'px';
	
	$('#'+submenuId).show();
	
	$('#li_'+ id ).addClass('current');
}

function forceHideAll()
{
	doHide = true;
	$('li[class=current]').removeClass('current');
	$('.submenu').hide();
}

function hideMenu(id)
{
	doHide = true;
	setTimeout(delayHide, 500);
}

function delayHide()
{
	if(doHide)
	{
		$('#li_'+ current_nav_id ).removeClass('current');
		$('.submenu').hide();
	}
}
/* Copyright (c) 2007 Paul Bakaus (paul.bakaus@googlemail.com) and Brandon Aaron (brandon.aaron@gmail.com || http://brandonaaron.net)
 * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
 * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
 *
 * $LastChangedDate: 2007-08-12 22:47:23 -0500 (Sun, 12 Aug 2007) $
 * $Rev: 2669 $
 *
 * Version: 1.1
 *
 * Requires: jQuery 1.1.3+
 */
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}('(8($){k e=$.1u.B,p=$.1u.p;$.1u.J({B:8(){3(!1[0])f();3(1[0]==o)3(($.9.15||$.9.O)&&$(5).p()>m.18)6 m.16-i();s 6 m.16||$.K&&5.11.1I||5.n.1I;3(1[0]==5)6 1F.1E(5.n.1W,5.n.1b);6 e.1x(1,1Q)},p:8(){3(!1[0])f();3(1[0]==o)3(($.9.15||$.9.O)&&$(5).B()>m.16)6 m.18-i();s 6 m.18||$.K&&5.11.1P||5.n.1P;3(1[0]==5)3($.9.15){k a=m.1t;m.19(26,m.1s);k b=m.1t;m.19(a,m.1s);6 5.n.17+b}s 6 1F.1E(5.n.25,5.n.17);6 p.1x(1,1Q)},16:8(){3(!1[0])f();6 1[0]==o||1[0]==5?1.B():1.V(\':L\')?1[0].1b-h(1,\'t\')-h(1,\'1M\'):1.B()+h(1,\'1m\')+h(1,\'1L\')},18:8(){3(!1[0])f();6 1[0]==o||1[0]==5?1.p():1.V(\':L\')?1[0].17-h(1,\'r\')-h(1,\'1H\'):1.p()+h(1,\'1i\')+h(1,\'1G\')},23:8(a){3(!1[0])f();a=$.J({w:u},a||{});6 1[0]==o||1[0]==5?1.B():1.V(\':L\')?1[0].1b+(a.w?(h(1,\'H\')+h(1,\'1D\')):0):1.B()+h(1,\'t\')+h(1,\'1M\')+h(1,\'1m\')+h(1,\'1L\')+(a.w?(h(1,\'H\')+h(1,\'1D\')):0)},1V:8(a){3(!1[0])f();a=$.J({w:u},a||{});6 1[0]==o||1[0]==5?1.p():1.V(\':L\')?1[0].17+(a.w?(h(1,\'I\')+h(1,\'1y\')):0):1.p()+h(1,\'r\')+h(1,\'1H\')+h(1,\'1i\')+h(1,\'1G\')+(a.w?(h(1,\'I\')+h(1,\'1y\')):0)},l:8(a){3(!1[0])f();3(a!=1B)6 1.1w(8(){3(1==o||1==5)o.19(a,$(o).q());s 1.l=a});3(1[0]==o||1[0]==5)6 m.1t||$.K&&5.11.l||5.n.l;6 1[0].l},q:8(a){3(!1[0])f();3(a!=1B)6 1.1w(8(){3(1==o||1==5)o.19($(o).l(),a);s 1.q=a});3(1[0]==o||1[0]==5)6 m.1s||$.K&&5.11.q||5.n.q;6 1[0].q},Y:8(a){6 1.1N({w:u,C:u,v:1.z()},a)},1N:8(b,c){3(!1[0])f();k x=0,y=0,G=0,F=0,7=1[0],4=1[0],N,X,W=$.A(7,\'Y\'),E=$.9.15,M=$.9.24,14=$.9.O,1r=$.9.13,P=$.9.13&&12($.9.1q)>1p,1o=u,1n=u,b=$.J({w:Q,10:u,1e:u,C:Q,1K:u,v:5.n},b||{});3(b.1K)6 1.1J(b,c);3(b.v.1k)b.v=b.v[0];3(7.D==\'U\'){x=7.S;y=7.R;3(E){x+=h(7,\'I\')+(h(7,\'r\')*2);y+=h(7,\'H\')+(h(7,\'t\')*2)}s 3(14){x+=h(7,\'I\');y+=h(7,\'H\')}s 3((M&&1g.K)){x+=h(7,\'r\');y+=h(7,\'t\')}s 3(P){x+=h(7,\'I\')+h(7,\'r\');y+=h(7,\'H\')+h(7,\'t\')}}s{Z{X=$.A(4,\'Y\');x+=4.S;y+=4.R;3(E||M||P){x+=h(4,\'r\');y+=h(4,\'t\');3(E&&X==\'1f\')1o=Q;3(M&&X==\'22\')1n=Q}N=4.z||5.n;3(b.C||E){Z{3(b.C){G+=4.l;F+=4.q}3(14&&($.A(4,\'21\')||\'\').20(/1Z-1Y|1X/)){G=G-((4.l==4.S)?4.l:0);F=F-((4.q==4.R)?4.q:0)}3(E&&4!=7&&$.A(4,\'1d\')!=\'L\'){x+=h(4,\'r\');y+=h(4,\'t\')}4=4.1C}T(4!=N)}4=N;3(4==b.v&&!(4.D==\'U\'||4.D==\'1c\')){3(E&&4!=7&&$.A(4,\'1d\')!=\'L\'){x+=h(4,\'r\');y+=h(4,\'t\')}3(((1r&&!P)||14)&&X!=\'1l\'){x-=h(N,\'r\');y-=h(N,\'t\')}1A}3(4.D==\'U\'||4.D==\'1c\'){3(((1r&&!P)||(M&&$.K))&&W!=\'1f\'&&W!=\'1z\'){x+=h(4,\'I\');y+=h(4,\'H\')}3(P||(E&&!1o&&W!=\'1z\')||(M&&W==\'1l\'&&!1n)){x+=h(4,\'r\');y+=h(4,\'t\')}1A}}T(4)}k a=j(7,b,x,y,G,F);3(c){$.J(c,a);6 1}s{6 a}},1J:8(b,c){3(!1[0])f();k x=0,y=0,G=0,F=0,4=1[0],z,b=$.J({w:Q,10:u,1e:u,C:Q,v:5.n},b||{});3(b.v.1k)b.v=b.v[0];Z{x+=4.S;y+=4.R;z=4.z||5.n;3(b.C){Z{G+=4.l;F+=4.q;4=4.1C}T(4!=z)}4=z}T(4&&4.D!=\'U\'&&4.D!=\'1c\'&&4!=b.v);k a=j(1[0],b,x,y,G,F);3(c){$.J(c,a);6 1}s{6 a}},z:8(){3(!1[0])f();k a=1[0].z;T(a&&(a.D!=\'U\'&&$.A(a,\'Y\')==\'1l\'))a=a.z;6 $(a)}});k f=8(){1U"1T: 1g 1S V 1R";};k h=8(a,b){6 12($.A(a.1k?a[0]:a,b))||0};k j=8(a,b,x,y,d,c){3(!b.w){x-=h(a,\'I\');y-=h(a,\'H\')}3(b.10&&(($.9.13&&12($.9.1q)<1p)||$.9.O)){x+=h(a,\'r\');y+=h(a,\'t\')}s 3(!b.10&&!(($.9.13&&12($.9.1q)<1p)||$.9.O)){x-=h(a,\'r\');y-=h(a,\'t\')}3(b.1e){x+=h(a,\'1i\');y+=h(a,\'1m\')}3(b.C&&(!$.9.O||a.S!=a.l&&a.R!=a.l)){d-=a.l;c-=a.q}6 b.C?{1h:y-c,1j:x-d,q:c,l:d}:{1h:y,1j:x}};k g=0;k i=8(){3(!g){k a=$(\'<1v>\').A({p:1a,B:1a,1d:\'2c\',Y:\'1f\',1h:-1O,1j:-1O}).2b(\'n\');g=1a-a.2a(\'<1v>\').29(\'1v\').A({p:\'1a%\',B:28}).p();a.27()}6 g}})(1g);',62,137,'|this||if|parent|document|return|elem|function|browser|||||||||||var|scrollLeft|self|body|window|width|scrollTop|borderLeftWidth|else|borderTopWidth|false|relativeTo|margin|||offsetParent|css|height|scroll|tagName|mo|st|sl|marginTop|marginLeft|extend|boxModel|visible|ie|op|opera|sf3|true|offsetTop|offsetLeft|while|BODY|is|elemPos|parPos|position|do|border|documentElement|parseInt|safari|oa|mozilla|innerHeight|offsetWidth|innerWidth|scrollTo|100|offsetHeight|HTML|overflow|padding|absolute|jQuery|top|paddingLeft|left|jquery|static|paddingTop|relparent|absparent|520|version|sf|pageYOffset|pageXOffset|fn|div|each|apply|marginRight|fixed|break|undefined|parentNode|marginBottom|max|Math|paddingRight|borderRightWidth|clientHeight|offsetLite|lite|paddingBottom|borderBottomWidth|offset|1000|clientWidth|arguments|empty|collection|Dimensions|throw|outerWidth|scrollHeight|inline|row|table|match|display|relative|outerHeight|msie|scrollWidth|99999999|remove|200|find|append|appendTo|auto'.split('|'),0,{}))
function $_get(controlId)
{
	return document.getElementById(controlId);
}

function $F(controlId)
{
	return $_get(controlId).value;
}

function Validator()
{
	this.controlToFocus = null;
	this.errors = new Array();
}

Validator.prototype._isLeapYear = function(year)
{
	if (year % 4 != 0) 
    { 
        return false; 
    }
    else 
    { 
        if (year % 100 != 0) 
        { 
            return true; 
        } 
        else 
        { 
            if (year % 400 != 0) 
            { 
                return false; 
            } 
            else 
            { 
                return true;   
            } 
        } 
    } 
}

Validator.prototype._updateError = function(ctlId, message)
{
	if(this.controlToFocus == null)
	{
		this.controlToFocus = ctlId;
	}
	this.errors[this.errors.length] = message;
}

Validator.prototype.checkData = function(ctlId, message)
{
	if($F(ctlId) == '')
	{
		this._updateError(ctlId, message);
		
		return false;
	}
	
	return true;
}

Validator.prototype.checkEmail = function(ctlId, message)
{
	var email = $F(ctlId);
	
	if(email == '')
	{
		return true;
	}
	
	var emailRegxp = /^([\w]+)(.[\w]+)*@([\w]+)(.[\w]{2,3}){1,2}$/;
	
	if(emailRegxp.test(email) != true)
	{
		this._updateError(ctlId, message);
		
		return false;
	}
	
	return true;
}

Validator.prototype.checkDate = function(ctlId, message)
{
	var dateValue = $F(ctlId);
	
	if(dateValue == '') return true;
	
	var parts = dateValue.split('/');
	
	if(parts.length != 3)
	{
		this._updateError(ctlId, message);
		return false;
	}
	
	var day = parseInt(parts[0] ,10);
	var month = parseInt(parts[1] ,10);
	var year = parseInt(parts[2] ,10);
	
	if(isNaN(day) || isNaN(month) || isNaN(year))
	{
		this._updateError(ctlId, message);
		return false;
	}
	
	if(year > 1990 && year < 3000)
	{
		if(month >= 1 && month <= 12)
		{
			var isLeapYear = this._isLeapYear(year);
			
			var daysInMonth = 31;
			
			if(month == 2 )
			{
				if(isLeapYear)
				{
					daysInMonth = 29;
				}
				else
				{
					daysInMonth = 28;
				}
			}
			else if(month == 4 || month == 6 || month == 9 ||  month == 11)
			{
				daysInMonth = 30;
			}
			else
			{
				daysInMonth = 31;
			}
			
			if(day >= 1 && day <= daysInMonth)
			{
				return true;
			}
		}
	}
	
	this._updateError(ctlId, message);
	return false;
}

Validator.prototype.checkNumeric = function(ctlId, message)
{
	if($F(ctlId) != '')
	{
		if( isNaN($F(ctlId)) )
		{
			this._updateError(ctlId, message);
		
			return false;
		}
	}
	
	return true;
}

Validator.prototype.addError = function(ctlId, message)
{
	this._updateError(ctlId, message);
}

Validator.prototype.isValid = function()
{
	return (this.errors.length == 0);
}

Validator.prototype.putFocus = function()
{
	var ctl = $_get(this.controlToFocus);
	
	if(ctl && ctl.focus)
	{
		ctl.focus();
		
		if(ctl.select)
		{
			ctl.select();
		}
	}
}

Validator.prototype.showMessageBox = function()
{
	var totalErrors = this.errors.length;
	
	if(totalErrors > 0)
	{
		var txt = '';//'<div class="' + errorCss + '">';
		
		txt += "Please check the following error(s):\n";
		
		for(var i = 0; i < totalErrors; i++)
		{
			txt += '* ' + this.errors[i] + '\n';
		}
		
		alert(txt);
		
		return true;
	}
	
	return false;
}


Validator.prototype.report = function(container, errorCss)
{
	var totalErrors = this.errors.length;
	
	if(totalErrors > 0)
	{
		var html = '';//'<div class="' + errorCss + '">';
		
		html += '<b>Please check the following error(s):</b><ul>';
		
		for(var i = 0; i < totalErrors; i++)
		{
			html += '<li>' + this.errors[i] + '</li>';
		}
		
		html += '</ul>';
		
		//html += '</div>';
		
		//$(container).style.display = '';
		/*$(container).className = errorCss;
		$(container).innerHTML = html;*/
		$("#"+container).attr('class', errorCss).html(html).fadeIn();
		return true;
	}
	
	return false;
}



/**
 * Class: FrameRequest
 *
 * author: Mohammad Ruhul Amin <ruhulshakib@yahoo.com>
 * date: 29 Jul 2006
 * version: 1.0.0
 */
var FrameRequest = 
{
	/**
	 * post request in frame
	 *
	 * @param string frameName
	 * @param string fromName
	 * @param string url
	 */
	doPost: function(frameName, formName, url)
	{
		var frm = document.forms[formName];
		
		frm.action = url;
		
		frm.target = frameName;
		
		frm.submit();
	},
	
	
	/**
	 * get request in frame
	 *
	 * @param string frameName
	 * @param string url
	 */
	doGet: function(frameName, url)
	{
		$_get(frameName).src = url;
	}
}


/**
 * common functions
 */
function message(container, msg, css)
{
	scroll(0,0);
	$('#' + container).html(msg).attr('class', css).slideDown('fast');
	/*
	$_get(container).innerHTML = msg;
	$_get(container).className = css;
	$_get(container).show();*/
}

function toJsonObj(data)
{
	var obj = null;
	
	eval('obj = ' + data + ';');
	
	return obj;
}

function busy(message, css)
{
	var id = '__ajx_status';
	
	var ctl = $_get(id);
	
	if(!ctl)
	{
		ctl = document.createElement('div');
		document.body.appendChild(ctl);
	}
	
	ctl.id = id;
	ctl.innerHTML = message;
	ctl.className = css;
	ctl.style.zIndex = 400;
	ctl.style.position = 'absolute';
	
	var pos = 0;
	
	if (window.innerHeight)
	{
		  pos = window.pageYOffset
	}
	else if (document.documentElement && document.documentElement.scrollTop)
	{
		pos = document.documentElement.scrollTop
	}
	else if (document.body)
	{
		  pos = document.body.scrollTop
	}
	
	ctl.style.top = pos + 'px';
	ctl.style.right = '0px';
	
	ctl.style.display = '';
}

function free()
{
	var id = '__ajx_status';
	if($_get(id))
	{
		$_get(id).style.display = 'none';
	}
}

function toggleDisplay(control, controlToFocus)
{
	if($_get(control).style.display == '')
	{
		$_get(control).style.display = 'none';
	}
	else
	{
		$_get(control).style.display = '';
		
		if($_get(controlToFocus))
		{
			if($_get(controlToFocus).focus)
			{
				$_get(controlToFocus).focus();
			}
			if($_get(controlToFocus).select)
			{
				$_get(controlToFocus).select();
			}
		}
	}
}

/// <reference name="MicrosoftAjax.js"/>

var $U =
{
    ctl : function(e)
    {
        if(typeof e != 'object')
        {
            e = document.getElementById(e);
        }
        
        return e;
    },
    
    defined: function(e)
    {
        return (typeof e != 'undefined'); 
    },
    
    build : function()
    {
        var ctl = $U.ctl(arguments[0]);
        
        if(!ctl || !ctl.id)
        {
            var tag = 'div';
            
            if(arguments.length > 1) tag = arguments[1];
            
            ctl = document.createElement(tag);
            ctl.id = arguments[0];
            
            var container = document.body;
            
            if(arguments.length > 2) container = $U.ctl(arguments[2]);
            
            container.appendChild(ctl);
        }
        
        return ctl;
    },
    
    show : function(e)
    {
        var ctl = $U.ctl(e);
        ctl.style.display = '';
    },
    
    hide : function(e)
    {
        var ctl = $U.ctl(e);
        ctl.style.display = 'none';
    },
    
    visible : function(e, status)
    {
        var ctl = $U.ctl(e);
        
        if(status)
        {
            ctl.style.visibility = 'visible';
        }
        else
        {
            ctl.style.visibility = 'hidden';
        }
    },
    
    focus : function(e)
    {
        var ctl = $U.ctl(e);
        if(ctl.select)
        {
            ctl.select();
        }
        if(ctl.focus)
        {
            ctl.focus();
        }
    },
    
    html : function(e, html)
    {
        var ctl = $U.ctl(e);
        ctl.innerHTML = html;
    },
    
	checked: function(e)
	{
		var ctl = $U.ctl(arguments[0]);
		
		if(arguments.length > 1)
		{
			ctl.checked = arguments[1];
			
			return;
		}
		
		return ctl.checked;
	},
	
	
	
	disabled: function(e)
	{
		var ctl = $U.ctl(arguments[0]);
		
		if(arguments.length > 1)
		{
			ctl.disabled = arguments[1];
			return;
		}
		
		return ctl.disabled;
	},
	
	radioVal: function()
	{
		var total = arguments.length;
		
		var ctls = document.getElementsByName(arguments[0]);
		
		if(total == 2)
		{
			var val = arguments[1];
			// set
			for(var i = 0; i < ctls.length; i++)
			{
				var ctl = ctls[i];
				
				if(ctl.value == val)
				{
					ctl.checked = true;
					return true;
				}
			}
			
			return false;
		}
		else
		{
			// get
			for(var i = 0; i < ctls.length; i++)
			{
				var ctl = ctls[i];
				
				if(ctl.checked)
				{
					return ctl.value;
				}
			}
			
			return null;
		}
	},
	
    text : function()
    {
        var total = arguments.length;
        var ctl = $U.ctl(arguments[0]);
		
        if(ctl.type == 'text' || ctl.type == 'hidden' || ctl.type == 'file' || ctl.type == 'select-one' || ctl.type == 'textarea')
        {
            if(total == 1) return ctl.value;
            
            ctl.value = arguments[1];
        }
        else if(ctl.type == 'checkbox' || ctl.type == 'radio')
        {
            if(total == 1)
            {
                if(ctl.checked)
                {
                    return ctl.value;
                }
                
                return null;
            }
            else
            {
                ctl.checked = (ctl.value == arguments[1]);
            }
        }
    },
	
	listValues : function()
	{
		var total = arguments.length;
		var ctl = $U.ctl(arguments[0]);
		var totalOptions = ctl.options.length;
		
		if(total == 1)
		{
			var result = new Array();
			for(var i = 0; i < totalOptions; i++)
			{
				var opt = ctl.options[i];
				
				if(opt.selected)
				{
					result[result.length] = opt.value;
				}
			}
			
			return result;
		}
		
		var data = arguments[1];
		var totalData = data.length;
		for(var i = 0; i < totalOptions; i++)
		{
			var opt = ctl.options[i];
			opt.selected = false;
			for(var j = 0; j < totalData; j++)
			{
				if(opt.value == data[j])
				{
					opt.selected = true;
				}
			}
		}
	},
    
    clearOptions : function(e)
    {
        var ctl = $U.ctl(e);
        
        var total = ctl.options.length;
        
        for(var i = 0; i < total; i++)
        {
            ctl.options[0] = null;
        }
    },
    
    addOption : function(e, text, value)
    {
        var ctl = $U.ctl(e);
        
        ctl.options[ctl.options.length] = new Option(text, value);
    },
    
    removeOption: function(e, value)
    {
        var ctl = $U.ctl(e);
        
        var total = ctl.options.length;
        
        for(var i = 0; i < total; i++)
        {
            if(ctl.options[i].value == value)
            {
                ctl.options[i] = null;
                
                return;
            }
        }
    },
    
    setDropDownDisplay : function(e)
    {
        var elements = document.getElementsByTagName('select');
        var total = elements.length;
        for(var i = 0; i < total; i++)
        {
            $U.visible(elements[i], e);
        }
    },
    
    viewPortInfo: function()
    {
        var vpWidth = 0;
        var vpHeight = 0;
        var cntHeight = 0;
        var scrollX = 0;
        var scrollY = 0;
        
        if(document.documentElement && document.documentElement.clientWidth)
        {
            vpWidth = document.documentElement.clientWidth;
            vpHeight = document.documentElement.clientHeight;
        }
        else if(document.body && document.body.clientWidth)
        {
            vpWidth = document.body.clientWidth;
            vpHeight = document.body.clientHeight;
        }
        else if(window.innerWidth)
        {
            vpWidth = window.innerWidth;
            vpHeight = window.innerHeight - 18;
        }
        
        if(document.body && document.body.offsetHeight)
        {
            cntHeight = document.body.offsetHeight;
        }
        
        if(document.documentElement && (document.documentElement.scrollLeft || document.documentElement.scrollTop))
        {
            scrollX = document.documentElement.scrollLeft;
            scrollY = document.documentElement.scrollTop;
        }
        else if(document.body && (document.body.scrollLeft || document.body.scrollTop))
        {
            scrollX = document.body.scrollLeft;
            scrollY = document.body.scrollTop;
        }
        else if(window.pageXOffset || window.pageYOffset)
        {
            scrollX = window.pageXOffset;
            scrollY = window.pageYOffset;
        }
        else if(window.scrollX || window.scrollY)
        {
            scrollX = window.scrollX;
            scrollY = window.scrollY;
        }
        
        return {'width' : vpWidth, 'height' : vpHeight, 'contentHeight' : cntHeight, 'scrollX' : scrollX, 'scrollY' : scrollY};
    },
    
    
    position: function()
    {
        var ctl = $U.ctl(arguments[0]);
        
        if(arguments.length == 1)
        {
		    var width = ctl.offsetWidth;
		    var height = ctl.offsetHeight;
    		
		    var curleft = curtop = 0;
		    if (ctl.offsetParent) {
			    do {
				    curleft += ctl.offsetLeft;
				    curtop += ctl.offsetTop;
			    } while (ctl = ctl.offsetParent);
		    }
		    return {'left' : curleft, 'top' : curtop, 'width' : width, 'height': height};
		}
		else
		{
		    var pos = arguments[1];
		    
		    ctl.style.position = 'absolute';
		    if(!$U.defined(pos.noDisplay)) $U.show(ctl);
		    		    
		    if ($U.defined(pos.width)) ctl.style.width = pos.width + 'px';
	        if ($U.defined(pos.height)) ctl.style.height = pos.height + 'px';		    
	        
		    if(pos.align)
		    {
		        var info = $U.viewPortInfo();
		        
		        var x = ((info.width - ctl.offsetWidth)/2);
		        var y = ((info.height - ctl.offsetHeight)/2) + info.scrollY;
		        
		        if(pos.align == 't')
		        {
		            y = 0;
		        }
		        else if(pos.align == 'b')
		        {
		            y = (info.height - ctl.offsetHeight);
		        }
		        else if(pos.align == 'l')
		        {
		            x = 0;
		        }
		        else if(pos.align == 'r')
		        {
		            x = (info.width - ctl.offsetWidth);
		        }
		        else if(pos.align == 'tl' || pos.align == 'lt')
		        {
		            x = 0;
		            y = info.scrollY;
		        }
		        else if(pos.align == 'tr' || pos.align == 'rt')
		        {
		            x = (info.width - ctl.offsetWidth);
		            y = info.scrollY;
		        }
		        else if(pos.align == 'br' || pos.align == 'rb')
		        {
		            x = (info.width - ctl.offsetWidth);
		            y = (info.height - ctl.offsetHeight);
		        }
		        else if(pos.align == 'bl' || pos.align == 'lb')
		        {
		            x = 0;
		            y = (info.height - ctl.offsetHeight);
		        }
		        
				if(y < 0) y = 0;
				if(x < 0) x = 0;
				
		        ctl.style.top = y + 'px';
		        ctl.style.left = x + 'px';
		    }
		    else
		    {
		        if ($U.defined(pos.top)) ctl.style.top = pos.top + 'px';
		        if ($U.defined(pos.left)) ctl.style.left = pos.left + 'px';
		    }
		}
    },
    
    showProgress: function()
    {
        var ctl = $U.build('__ajax_status');
                
        $U.html(ctl, 'Working. Please wait...');
        ctl.className = 'progress';
        
        var args = arguments[0];
        var align = 'tr'; //top right align
        
        if( $U.defined(args))
        {
            if( $U.defined(args.message)) $U.html(ctl, args.message);
            if( $U.defined(args.css)) ctl.className = args.css;
            if( $U.defined(args.align)) align = args.align;
        }
        
        $U.position(ctl, {'align': align});
    },
    
    hideProgress: function()
    {
        var ctl = $U.ctl('__ajax_status');
        ctl.style.display = 'none';
    },
    
    showModal: function()
    {
        var ctl = $U.build('__ajax_block_ui');
        
        $U.setDropDownDisplay(false);
        //$U.hide('logo');
		
        var info = $U.viewPortInfo();
        
        ctl.className = 'blockUI';
        
        $U.position(ctl, {'top': 0, 'left': 0, 'width': info.width, 'height': Math.max(info.height, info.contentHeight)});
        
        
        var modal = $U.ctl(arguments[0]);
        modal.className = 'modal';
        
        var args = {'align' : 'c'};
        
        if(arguments.length > 1)
        {
            args = arguments[1];
            
            if(!$U.defined(args.align)) args.align = 'c';
        }
        
        $U.position(modal, args);
    },
    
    hideModal: function(e)
    {
        var modal = $U.ctl(e);
        //$U.hide(modal);
        
		$('#'+e).fadeOut('medium', 
		function()
		{
			var ctl = $U.ctl('__ajax_block_ui');
        	$U.hide(ctl);
			$U.setDropDownDisplay(true); 
			//$U.show('logo');
		});
    },
	
	showResponse : function(e, response)
	{
		if(response.succeed)
		{
			$U.message(e, response.message, 'message');
		}
		else
		{
			$U.message(e, response.message, 'error');
		}
	},
	
	message: function()
	{
		var ctl = $('#'+arguments[0]);
		
		var css = 'message';
		
		if(arguments.length > 2)
		{
			css = arguments[2];
		}
		
		$U.hideProgress();
		
		ctl.html(arguments[1]).addClass(css).fadeIn('fast');
	}
};

// JavaScript Document
function MenuBuilder(data, containerId, submenuCss, align)
{
	this.containerId = containerId;
	this.submenuCss = submenuCss;
	this.data = data;
	this.readyToHide = true;
	this.align = align;
}

MenuBuilder.prototype.getPos = function(id)
{
	var id = '#'+id;
	var pos = $(id).position();
	/*
	obj = document.getElementById(id);
	
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		do {
			curleft += obj.offsetLeft;
			curtop += obj.offsetTop;
		} while (obj = obj.offsetParent);
	}*/
	return [pos['left'],pos['top']];
}

MenuBuilder.prototype.hideSubmenu = function()
{
	
}

MenuBuilder.prototype.getMenuListItemHtml = function(nd)
{
	if(nd.url.indexOf('http') == -1)
	{
		return '<li class="' + nd.css + '"><a id="' + nd.id + '" href="' + nd.url + '" class="' + nd.css + '" >' + nd.name + '</a></li>';
	}
	else
	{
		return '<li class="' + nd.css + '"><a id="' + nd.id + '" href="' + nd.url + '" class="' + nd.css + '" target="_blank">' + nd.name + '</a></li>';
	}
}

MenuBuilder.prototype.buildSubmenu = function(node)
{
	if(node.nodes != null && node.nodes.length > 0)
	{
		var obj = this;
		
		var html = '<div id="div_' + node.id + '" class="' + this.submenuCss + '">';
		html += '<ul  class="' + node.css +'">';
		
		var total = node.nodes.length;
		
		for(var i = 0; i < total; i++)
		{
			var nd = node.nodes[i];
			
			html += this.getMenuListItemHtml(nd);
		
			this.buildSubmenu(nd);
		}
		
		html += '</ul>';
		html += '</div>';
		
		//var cnt = '#'+this.containerId;
		$('#left_col').append(html);
	}
};


MenuBuilder.prototype.hideSubmenu = function()
{
	$('.submenu').hide();
}

MenuBuilder.prototype.showSubmenu = function(parentId)
{
	var parent = $('#' + parentId);
	var jmenu = $('#div_' + parentId);
	var menu = document.getElementById('div_' + parentId);
	if(menu)
	{
		var pos = this.getPos(parentId);
		
		var left = pos[0];
		var top = pos[1];
		
		if(this.align == '' || this.align == 'bottom')
		{
			menu.style.top = top + parent.outerHeight({margin: true }) - 1 + 'px';
			menu.style.left = left + 'px';
		}
		else if(this.align == 'left' || this.align == 'l')
		{
			menu.style.top = top + 'px';
			menu.style.left = left + parent.outerWidth({margin:true}) - 1 +  'px';
		}
		else if(this.align == 'right' || this.align == 'r')
		{
			menu.style.top = (top -1) + 'px';
			menu.style.left = left + parent.outerWidth({margin:true}) - 1 +  'px';
		}
		
		jmenu.show();
	}
}

MenuBuilder.prototype.checkState = function()
{
	alert(this.readyToHide);
}

MenuBuilder.prototype.build = function()
{
	var container = $('#' + this.containerId);
	
	var html = '<ul class="vmenu">';
	
	var obj = this;
	
	$.each(this.data, function()
	{
		html += obj.getMenuListItemHtml(this);
		
		obj.buildSubmenu(this);
	});
	
	html += '</ul>';
	
	container.append(html);
	
	container.find('a').bind('mouseover', function(e)
	{
		obj.readyToHide = true;
		obj.hideSubmenu(this.id);
		obj.readyToHide = false;
		obj.showSubmenu(this.id);
	}).bind('mouseout', function(e)
	{
		obj.readyToHide = true;
		window.setTimeout(function()
		{
			if(obj.readyToHide)
			{
				obj.hideSubmenu();
			}
		}, 500);
	});
	
	$('.' + this.submenuCss).find('a').bind('mouseover', function(e)
	{
		obj.readyToHide = false;
		var lnk = this;
		var lstPos = lnk.id.lastIndexOf('_');
		var divId = 'div_' + lnk.id.substring(0,lstPos);
		
		$.each($('.' + this.submenuCss), function()
		{
			if(this.id.indexOf(divId+'_') == 0)
			{
				this.style.display ='none';
			}
		});
					
		obj.showSubmenu(this.id, 'left');
	}).bind('mouseout', function(e)
	{
		obj.readyToHide = true;
		window.setTimeout(function()
		{
			if(obj.readyToHide)
			{
				obj.hideSubmenu();
			}
		}, 1000);
	});
	
}


MenuBuilder.prototype.get_ContainerId = function()
{
	return this.containerId;
}
var FormValidator = function()
{
	this._errors = new Array();
	this._controls = new Array();
	this._isEmpty = function(data)
	{
		return (data == null || data == '');
	};
	this._isEmail = function(data)
	{
		var filter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
		
		return filter.test(data);
	};
	this._isNumber = function(data)
	{
		return (!isNaN(data));
	};
	this._isDigitOnly = function(data)
	{
		if(this._isNumber(data))
		{
			if(data.indexOf(".") != -1)
			{
				return false;
			}
			return true;
		}
		return false;
	};
	this._isEqual = function(a, b)
	{
		return (a == b);
	};
	this._addError = function(controlId, message)
	{
		this._errors[this._errors.length] = message;
		this._controls[this._controls.length] = controlId;
	};
	this._isChecked = function(controlName, message)
	{
		var controls = document.getElementsByName(controlName);
		var total = controls.length;
		for(var i = 0; i < total; i++)
		{
			var ctl = controls[i];
			if((ctl.type == 'radio' || ctl.type == 'checkbox') && ctl.checked)
			{
				return true;
			}
		}
		return false;
	};
	this.checkEmpty = function(arg)
	{
		for(var controlId in arg)
		{
			var data = $U.text(controlId);
			if(this._isEmpty(data))
			{
				this._addError(controlId, arg[controlId]);
			}
		}
	};
	this.checkId = function(ctlId, arg)
	{
		var data = $U.text(ctlId);
		if(!this._isEmpty(data) && this._isDigitOnly(data) && parseInt(data) > 0)
		{
			return true;
		}
		else
		{
			this._addError(ctlId, arg);
			return false;
		}
	};
	this.checkEmail = function(arg)
	{
		for(var controlId in arg)
		{
			var data = $U.text(controlId);
			if(!this._isEmpty(data) && !this._isEmail(data))
			{
				this._addError(controlId, arg[controlId]);
			}
		}
	};
	this.checkEqual = function(ctlToVal, ctlToComp, msg)
	{
		if(this._isEmpty(ctlToVal)) return;
		if($U.text(ctlToVal) != $U.text(ctlToComp))
		{
			this._addError(ctlToComp, msg);
		}
	};
	this.checkDigit = function(arg)
	{
		for(var controlId in arg)
		{
			var data = $U.text(controlId);
			if(!this._isEmpty(data) && !this._isDigitOnly(data))
			{
				this._addError(controlId, arg[controlId]);
			}
		}
	};
	this.checkNumber = function(arg)
	{
		for(var controlId in arg)
		{
			var data = $U.text(controlId);
			if(!this._isEmpty(data) && !this._isNumber(data))
			{
				this._addError(controlId, arg[controlId]);
			}
		}
	};
	this.checkSelected = function(arg)
	{
		for(var controlName in arg)
		{
			if(!this._isChecked(controlName))
			{
				this._addError(controlName, arg[controlName]);
			}
		}
	};
	this.isValid = function()
	{
		return (this._errors.length == 0);
	};
	this.focus = function()
	{
		if(this._controls.length > 0)
		{
			$U.focus(this._controls[0]);
		}
	};
	this.html = function()
	{
		var total = this._errors.length;
		
		if(total == 0) return '';
		
		var html = '<b>Please check the following error(s):</b>';
		
		html += '<ul>';
		
		for(var i = 0; i < total; i++)
		{
			html += '<li>' + this._errors[i] + '</li>';
		}
		
		html += '</ul>';
		
		return html;
	};
	this.text = function()
	{
		var total = this._errors.length;
		
		if(total == 0) return '';
		
		var txt = 'Please check the following error(s):' + "\n";
		
		for(var i = 0; i < total; i++)
		{
			txt += '* ' + this._errors[i];
			
			if(i < (total -1))
			{
				txt += "\n";
			}
		}
		
		return txt;
	}
}
$.fn.fastSerialize = function() {
    var a = [];
    $('input,textarea,select,button', this).each(function() {
        var n = this.name;
        var t = this.type;
        if ( !n || this.disabled || t == 'reset' ||
            (t == 'checkbox' || t == 'radio') && !this.checked ||
            (t == 'submit' || t == 'image' || t == 'button') && this.form.clicked != this ||
            this.tagName.toLowerCase() == 'select' && this.selectedIndex == -1)
            return;
        if (t == 'image' && this.form.clicked_x)
            return a.push(
                {name: n+'_x', value: this.form.clicked_x},
                {name: n+'_y', value: this.form.clicked_y}
            );
        if (t == 'select-multiple') {
            $('option:selected', this).each( function() {
                a.push({name: n, value: this.value});
            });
            return;
        }
        a.push({name: n, value: this.value});
    });
    return a;
};
/*
 * jQuery corner plugin
 *
 * version 1.7 (1/26/2007)
 *
 * Dual licensed under the MIT and GPL licenses:
 *   http://www.opensource.org/licenses/mit-license.php
 *   http://www.gnu.org/licenses/gpl.html
 */

/**
 * The corner() method provides a simple way of styling DOM elements.  
 *
 * corner() takes a single string argument:  $().corner("effect corners width")
 *
 *   effect:  The name of the effect to apply, such as round or bevel. 
 *            If you don't specify an effect, rounding is used.
 *
 *   corners: The corners can be one or more of top, bottom, tr, tl, br, or bl. 
 *            By default, all four corners are adorned. 
 *
 *   width:   The width specifies the width of the effect; in the case of rounded corners this 
 *            will be the radius of the width. 
 *            Specify this value using the px suffix such as 10px, and yes it must be pixels.
 *
 * For more details see: http://methvin.com/jquery/jq-corner.html
 * For a full demo see:  http://malsup.com/jquery/corner/
 *
 *
 * @example $('.adorn').corner();
 * @desc Create round, 10px corners 
 *
 * @example $('.adorn').corner("25px");
 * @desc Create round, 25px corners 
 *
 * @example $('.adorn').corner("notch bottom");
 * @desc Create notched, 10px corners on bottom only
 *
 * @example $('.adorn').corner("tr dog 25px");
 * @desc Create dogeared, 25px corner on the top-right corner only
 *
 * @example $('.adorn').corner("round 8px").parent().css('padding', '4px').corner("round 10px");
 * @desc Create a rounded border effect by styling both the element and its parent
 * 
 * @name corner
 * @type jQuery
 * @param String options Options which control the corner style
 * @cat Plugins/Corner
 * @return jQuery
 * @author Dave Methvin (dave.methvin@gmail.com)
 * @author Mike Alsup (malsup@gmail.com)
 */
jQuery.fn.corner = function(o) {
    function hex2(s) {
        var s = parseInt(s).toString(16);
        return ( s.length < 2 ) ? '0'+s : s;
    };
    function gpc(node) {
        for ( ; node && node.nodeName.toLowerCase() != 'html'; node = node.parentNode  ) {
            var v = jQuery.css(node,'backgroundColor');
            if ( v.indexOf('rgb') >= 0 ) { 
                rgb = v.match(/\d+/g); 
                return '#'+ hex2(rgb[0]) + hex2(rgb[1]) + hex2(rgb[2]);
            }
            if ( v && v != 'transparent' )
                return v;
        }
        return '#ffffff';
    };
    function getW(i) {
        switch(fx) {
        case 'round':  return Math.round(width*(1-Math.cos(Math.asin(i/width))));
        case 'cool':   return Math.round(width*(1+Math.cos(Math.asin(i/width))));
        case 'sharp':  return Math.round(width*(1-Math.cos(Math.acos(i/width))));
        case 'bite':   return Math.round(width*(Math.cos(Math.asin((width-i-1)/width))));
        case 'slide':  return Math.round(width*(Math.atan2(i,width/i)));
        case 'jut':    return Math.round(width*(Math.atan2(width,(width-i-1))));
        case 'curl':   return Math.round(width*(Math.atan(i)));
        case 'tear':   return Math.round(width*(Math.cos(i)));
        case 'wicked': return Math.round(width*(Math.tan(i)));
        case 'long':   return Math.round(width*(Math.sqrt(i)));
        case 'sculpt': return Math.round(width*(Math.log((width-i-1),width)));
        case 'dog':    return (i&1) ? (i+1) : width;
        case 'dog2':   return (i&2) ? (i+1) : width;
        case 'dog3':   return (i&3) ? (i+1) : width;
        case 'fray':   return (i%2)*width;
        case 'notch':  return width; 
        case 'bevel':  return i+1;
        }
    };
    o = (o||"").toLowerCase();
    var keep = /keep/.test(o);                       // keep borders?
    var cc = ((o.match(/cc:(#[0-9a-f]+)/)||[])[1]);  // corner color
    var sc = ((o.match(/sc:(#[0-9a-f]+)/)||[])[1]);  // strip color
    var width = parseInt((o.match(/(\d+)px/)||[])[1]) || 10; // corner width
    var re = /round|bevel|notch|bite|cool|sharp|slide|jut|curl|tear|fray|wicked|sculpt|long|dog3|dog2|dog/;
    var fx = ((o.match(re)||['round'])[0]);
    var edges = { T:0, B:1 };
    var opts = {
        TL:  /top|tl/.test(o),       TR:  /top|tr/.test(o),
        BL:  /bottom|bl/.test(o),    BR:  /bottom|br/.test(o)
    };
    if ( !opts.TL && !opts.TR && !opts.BL && !opts.BR )
        opts = { TL:1, TR:1, BL:1, BR:1 };
    var strip = document.createElement('div');
    strip.style.overflow = 'hidden';
    strip.style.height = '1px';
    strip.style.backgroundColor = sc || 'transparent';
    strip.style.borderStyle = 'solid';
    return this.each(function(index){
        var pad = {
            T: parseInt(jQuery.css(this,'paddingTop'))||0,     R: parseInt(jQuery.css(this,'paddingRight'))||0,
            B: parseInt(jQuery.css(this,'paddingBottom'))||0,  L: parseInt(jQuery.css(this,'paddingLeft'))||0
        };

        if (jQuery.browser.msie) this.style.zoom = 1; // force 'hasLayout' in IE
        if (!keep) this.style.border = 'none';
        strip.style.borderColor = cc || gpc(this.parentNode);
        var cssHeight = jQuery.curCSS(this, 'height');

        for (var j in edges) {
            var bot = edges[j];
            strip.style.borderStyle = 'none '+(opts[j+'R']?'solid':'none')+' none '+(opts[j+'L']?'solid':'none');
            var d = document.createElement('div');
            var ds = d.style;

            bot ? this.appendChild(d) : this.insertBefore(d, this.firstChild);

            if (bot && cssHeight != 'auto') {
                if (jQuery.css(this,'position') == 'static')
                    this.style.position = 'relative';
                ds.position = 'absolute';
                ds.bottom = ds.left = ds.padding = ds.margin = '0';
                if (jQuery.browser.msie)
                    ds.setExpression('width', 'this.parentNode.offsetWidth');
                else
                    ds.width = '100%';
            }
            else {
                ds.margin = !bot ? '-'+pad.T+'px -'+pad.R+'px '+(pad.T-width)+'px -'+pad.L+'px' : 
                                    (pad.B-width)+'px -'+pad.R+'px -'+pad.B+'px -'+pad.L+'px';                
            }

            for (var i=0; i < width; i++) {
                var w = Math.max(0,getW(i));
                var e = strip.cloneNode(false);
                e.style.borderWidth = '0 '+(opts[j+'R']?w:0)+'px 0 '+(opts[j+'L']?w:0)+'px';
                bot ? d.appendChild(e) : d.insertBefore(e, d.firstChild);
            }
        }
    });
};

/**
 * SWFObject v1.5: Flash Player detection and embed - http://blog.deconcept.com/swfobject/
 *
 * SWFObject is (c) 2007 Geoff Stearns and is released under the MIT License:
 * http://www.opensource.org/licenses/mit-license.php
 *
 */
if(typeof deconcept=="undefined"){var deconcept=new Object();}if(typeof deconcept.util=="undefined"){deconcept.util=new Object();}if(typeof deconcept.SWFObjectUtil=="undefined"){deconcept.SWFObjectUtil=new Object();}deconcept.SWFObject=function(_1,id,w,h,_5,c,_7,_8,_9,_a){if(!document.getElementById){return;}this.DETECT_KEY=_a?_a:"detectflash";this.skipDetect=deconcept.util.getRequestParameter(this.DETECT_KEY);this.params=new Object();this.variables=new Object();this.attributes=new Array();if(_1){this.setAttribute("swf",_1);}if(id){this.setAttribute("id",id);}if(w){this.setAttribute("width",w);}if(h){this.setAttribute("height",h);}if(_5){this.setAttribute("version",new deconcept.PlayerVersion(_5.toString().split(".")));}this.installedVer=deconcept.SWFObjectUtil.getPlayerVersion();if(!window.opera&&document.all&&this.installedVer.major>7){deconcept.SWFObject.doPrepUnload=true;}if(c){this.addParam("bgcolor",c);}var q=_7?_7:"high";this.addParam("quality",q);this.setAttribute("useExpressInstall",false);this.setAttribute("doExpressInstall",false);var _c=(_8)?_8:window.location;this.setAttribute("xiRedirectUrl",_c);this.setAttribute("redirectUrl","");if(_9){this.setAttribute("redirectUrl",_9);}};deconcept.SWFObject.prototype={useExpressInstall:function(_d){this.xiSWFPath=!_d?"expressinstall.swf":_d;this.setAttribute("useExpressInstall",true);},setAttribute:function(_e,_f){this.attributes[_e]=_f;},getAttribute:function(_10){return this.attributes[_10];},addParam:function(_11,_12){this.params[_11]=_12;},getParams:function(){return this.params;},addVariable:function(_13,_14){this.variables[_13]=_14;},getVariable:function(_15){return this.variables[_15];},getVariables:function(){return this.variables;},getVariablePairs:function(){var _16=new Array();var key;var _18=this.getVariables();for(key in _18){_16[_16.length]=key+"="+_18[key];}return _16;},getSWFHTML:function(){var _19="";if(navigator.plugins&&navigator.mimeTypes&&navigator.mimeTypes.length){if(this.getAttribute("doExpressInstall")){this.addVariable("MMplayerType","PlugIn");this.setAttribute("swf",this.xiSWFPath);}_19="<embed type=\"application/x-shockwave-flash\" src=\""+this.getAttribute("swf")+"\" width=\""+this.getAttribute("width")+"\" height=\""+this.getAttribute("height")+"\" style=\""+this.getAttribute("style")+"\"";_19+=" id=\""+this.getAttribute("id")+"\" name=\""+this.getAttribute("id")+"\" ";var _1a=this.getParams();for(var key in _1a){_19+=[key]+"=\""+_1a[key]+"\" ";}var _1c=this.getVariablePairs().join("&");if(_1c.length>0){_19+="flashvars=\""+_1c+"\"";}_19+="/>";}else{if(this.getAttribute("doExpressInstall")){this.addVariable("MMplayerType","ActiveX");this.setAttribute("swf",this.xiSWFPath);}_19="<object id=\""+this.getAttribute("id")+"\" classid=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\" width=\""+this.getAttribute("width")+"\" height=\""+this.getAttribute("height")+"\" style=\""+this.getAttribute("style")+"\">";_19+="<param name=\"movie\" value=\""+this.getAttribute("swf")+"\" />";var _1d=this.getParams();for(var key in _1d){_19+="<param name=\""+key+"\" value=\""+_1d[key]+"\" />";}var _1f=this.getVariablePairs().join("&");if(_1f.length>0){_19+="<param name=\"flashvars\" value=\""+_1f+"\" />";}_19+="</object>";}return _19;},write:function(_20){if(this.getAttribute("useExpressInstall")){var _21=new deconcept.PlayerVersion([6,0,65]);if(this.installedVer.versionIsValid(_21)&&!this.installedVer.versionIsValid(this.getAttribute("version"))){this.setAttribute("doExpressInstall",true);this.addVariable("MMredirectURL",escape(this.getAttribute("xiRedirectUrl")));document.title=document.title.slice(0,47)+" - Flash Player Installation";this.addVariable("MMdoctitle",document.title);}}if(this.skipDetect||this.getAttribute("doExpressInstall")||this.installedVer.versionIsValid(this.getAttribute("version"))){var n=(typeof _20=="string")?document.getElementById(_20):_20;n.innerHTML=this.getSWFHTML();return true;}else{if(this.getAttribute("redirectUrl")!=""){document.location.replace(this.getAttribute("redirectUrl"));}}return false;}};deconcept.SWFObjectUtil.getPlayerVersion=function(){var _23=new deconcept.PlayerVersion([0,0,0]);if(navigator.plugins&&navigator.mimeTypes.length){var x=navigator.plugins["Shockwave Flash"];if(x&&x.description){_23=new deconcept.PlayerVersion(x.description.replace(/([a-zA-Z]|\s)+/,"").replace(/(\s+r|\s+b[0-9]+)/,".").split("."));}}else{if(navigator.userAgent&&navigator.userAgent.indexOf("Windows CE")>=0){var axo=1;var _26=3;while(axo){try{_26++;axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash."+_26);_23=new deconcept.PlayerVersion([_26,0,0]);}catch(e){axo=null;}}}else{try{var axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");}catch(e){try{var axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");_23=new deconcept.PlayerVersion([6,0,21]);axo.AllowScriptAccess="always";}catch(e){if(_23.major==6){return _23;}}try{axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash");}catch(e){}}if(axo!=null){_23=new deconcept.PlayerVersion(axo.GetVariable("$version").split(" ")[1].split(","));}}}return _23;};deconcept.PlayerVersion=function(_29){this.major=_29[0]!=null?parseInt(_29[0]):0;this.minor=_29[1]!=null?parseInt(_29[1]):0;this.rev=_29[2]!=null?parseInt(_29[2]):0;};deconcept.PlayerVersion.prototype.versionIsValid=function(fv){if(this.major<fv.major){return false;}if(this.major>fv.major){return true;}if(this.minor<fv.minor){return false;}if(this.minor>fv.minor){return true;}if(this.rev<fv.rev){return false;}return true;};deconcept.util={getRequestParameter:function(_2b){var q=document.location.search||document.location.hash;if(_2b==null){return q;}if(q){var _2d=q.substring(1).split("&");for(var i=0;i<_2d.length;i++){if(_2d[i].substring(0,_2d[i].indexOf("="))==_2b){return _2d[i].substring((_2d[i].indexOf("=")+1));}}}return "";}};deconcept.SWFObjectUtil.cleanupSWFs=function(){var _2f=document.getElementsByTagName("OBJECT");for(var i=_2f.length-1;i>=0;i--){_2f[i].style.display="none";for(var x in _2f[i]){if(typeof _2f[i][x]=="function"){_2f[i][x]=function(){};}}}};if(deconcept.SWFObject.doPrepUnload){if(!deconcept.unloadSet){deconcept.SWFObjectUtil.prepUnload=function(){__flash_unloadHandler=function(){};__flash_savedUnloadHandler=function(){};window.attachEvent("onunload",deconcept.SWFObjectUtil.cleanupSWFs);};window.attachEvent("onbeforeunload",deconcept.SWFObjectUtil.prepUnload);deconcept.unloadSet=true;}}if(!document.getElementById&&document.all){document.getElementById=function(id){return document.all[id];};}var getQueryParamValue=deconcept.util.getRequestParameter;var FlashObject=deconcept.SWFObject;var SWFObject=deconcept.SWFObject;
// JavaScript Document
function MenuBuilder(data, containerId, submenuCss, align)
{
	this.containerId = containerId;
	this.submenuCss = submenuCss;
	this.data = data;
	this.readyToHide = true;
	this.align = align;
}

MenuBuilder.prototype.getPos = function(id)
{
	var id = '#'+id;
	var pos = $(id).position();
	/*
	obj = document.getElementById(id);
	
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		do {
			curleft += obj.offsetLeft;
			curtop += obj.offsetTop;
		} while (obj = obj.offsetParent);
	}*/
	return [pos['left'],pos['top']];
}

MenuBuilder.prototype.hideSubmenu = function()
{
	
}

MenuBuilder.prototype.getMenuListItemHtml = function(nd)
{
	if(nd.url.indexOf('http') == -1)
	{
		return '<li class="' + nd.css + '"><a id="' + nd.id + '" href="' + nd.url + '" class="' + nd.css + '" >' + nd.name + '</a></li>';
	}
	else
	{
		return '<li class="' + nd.css + '"><a id="' + nd.id + '" href="' + nd.url + '" class="' + nd.css + '" target="_blank">' + nd.name + '</a></li>';
	}
}

MenuBuilder.prototype.buildSubmenu = function(node)
{
	if(node.nodes != null && node.nodes.length > 0)
	{
		var obj = this;
		
		var html = '<div id="div_' + node.id + '" class="' + this.submenuCss + '">';
		html += '<ul  class="' + node.css +'">';
		
		var total = node.nodes.length;
		
		for(var i = 0; i < total; i++)
		{
			var nd = node.nodes[i];
			
			html += this.getMenuListItemHtml(nd);
		
			this.buildSubmenu(nd);
		}
		
		html += '</ul>';
		html += '</div>';
		
		//var cnt = '#'+this.containerId;
		$('#left_col').append(html);
	}
};


MenuBuilder.prototype.hideSubmenu = function()
{
	$('.submenu').hide();
}

MenuBuilder.prototype.showSubmenu = function(parentId)
{
	var parent = $('#' + parentId);
	var jmenu = $('#div_' + parentId);
	var menu = document.getElementById('div_' + parentId);
	if(menu)
	{
		var pos = this.getPos(parentId);
		
		var left = pos[0];
		var top = pos[1];
		
		if(this.align == '' || this.align == 'bottom')
		{
			menu.style.top = top + parent.outerHeight({margin: true }) - 1 + 'px';
			menu.style.left = left + 'px';
		}
		else if(this.align == 'left' || this.align == 'l')
		{
			menu.style.top = top + 'px';
			menu.style.left = left + parent.outerWidth({margin:true}) - 1 +  'px';
		}
		else if(this.align == 'right' || this.align == 'r')
		{
			menu.style.top = (top -1) + 'px';
			menu.style.left = left + parent.outerWidth({margin:true}) - 1 +  'px';
		}
		
		jmenu.show();
	}
}

MenuBuilder.prototype.checkState = function()
{
	alert(this.readyToHide);
}

MenuBuilder.prototype.build = function()
{
	var container = $('#' + this.containerId);
	
	var html = '<ul class="vmenu">';
	
	var obj = this;
	
	$.each(this.data, function()
	{
		html += obj.getMenuListItemHtml(this);
		
		obj.buildSubmenu(this);
	});
	
	html += '</ul>';
	
	container.append(html);
	
	container.find('a').bind('mouseover', function(e)
	{
		obj.readyToHide = true;
		obj.hideSubmenu(this.id);
		obj.readyToHide = false;
		obj.showSubmenu(this.id);
	}).bind('mouseout', function(e)
	{
		obj.readyToHide = true;
		window.setTimeout(function()
		{
			if(obj.readyToHide)
			{
				obj.hideSubmenu();
			}
		}, 500);
	});
	
	$('.' + this.submenuCss).find('a').bind('mouseover', function(e)
	{
		obj.readyToHide = false;
		var lnk = this;
		var lstPos = lnk.id.lastIndexOf('_');
		var divId = 'div_' + lnk.id.substring(0,lstPos);
		
		$.each($('.' + this.submenuCss), function()
		{
			if(this.id.indexOf(divId+'_') == 0)
			{
				this.style.display ='none';
			}
		});
					
		obj.showSubmenu(this.id, 'left');
	}).bind('mouseout', function(e)
	{
		obj.readyToHide = true;
		window.setTimeout(function()
		{
			if(obj.readyToHide)
			{
				obj.hideSubmenu();
			}
		}, 1000);
	});
	
}


MenuBuilder.prototype.get_ContainerId = function()
{
	return this.containerId;
}
/* MarcGrabanski.com v2.4 */
/* Pop-Up Calendar Built from Scratch by Marc Grabanski */
/* Enhanced by Keith Wood (kbwood@iprimus.com.au). */
/* Under the Creative Commons Licence http://creativecommons.org/licenses/by/3.0/
	Share or Remix it but please Attribute the authors. */
var popUpCal = {
	selectedDay: 0,
	selectedMonth: 0, // 0-11
	selectedYear: 0, // 4-digit year
	clearText: 'Clear', // Display text for clear link
	closeText: 'Close', // Display text for close link
	prevText: '&lt;Prev', // Display text for previous month link
	nextText: 'Next&gt;', // Display text for next month link
	currentText: 'Today', // Display text for current month link
	appendText: '', // Display text following the input box, e.g. showing the format
	buttonText: '...', // Text for trigger button
	buttonImage: '', // URL for trigger button image
	buttonImageOnly: false, // True if the image appears alone, false if it appears on a button
	dayNames: ['Su','Mo','Tu','We','Th','Fr','Sa'], // Names of days starting at Sunday
	monthNames: ['January','February','March','April','May','June','July','August','September','October','November','December'], // Names of months
	dateFormat: 'DMY/', // First three are day, month, year in the required order, fourth is the separator, e.g. US would be 'MDY/'
	yearRange: '-10:+10', // Range of years to display in drop-down, either relative to current year (-nn:+nn) or absolute (nnnn:nnnn)
	changeMonth: true, // True if month can be selected directly, false if only prev/next
	changeYear: true, // True if year can be selected directly, false if only prev/next
	firstDay: 0, // The first day of the week, Sun = 0, Mon = 1, ...
	changeFirstDay: true, // True to click on day name to change, false to remain as set
	showOtherMonths: false, // True to show dates in other months, false to leave blank
	minDate: null, // The earliest selectable date, or null for no limit
	maxDate: null, // The latest selectable date, or null for no limit
	speed: 'medium', // Speed of display/closure
	autoPopUp: 'focus', // 'focus' for popup on focus, 'button' for trigger button, or 'both' for either
	closeAtTop: true, // True to have the clear/close at the top, false to have them at the bottom
	hideIfNoPrevNext: true, // True to hide next/previous month links if not applicable, false to just disable them
	customDate: null, // Function that takes a date and returns an array with [0] = true if selectable, false if not,
		// [1] = custom CSS class name(s) or '', e.g. popUpCal.noWeekends
	fieldSettings: null, // Function that takes an input field and returns a set of custom settings for the calendar
	inline: false, // this sets the calendar to always display, use this with customEvent
	customEvent: false, // define an action for the inline calendar

	/* Initialisation. */
	init: function() {
		this.popUpShowing = false;
		this.selectingMonthYear = false;
		this.standalone = false;
		this.lastInput = null;
		this.disabledInputs = [];
		this.calendarDiv = $('<div id="calendar_div"></div>');
		$('body').append(this.calendarDiv);
		$(document).mousedown(popUpCal.checkExternalClick);
	},

	/* Pop-up the calendar in a "dialog" box. */
	showStandalone: function(dateText, prompt, callback, pos) {
		if (!this.standaloneInput) { // internal input field
			this.standaloneInput = $('<input type="text" style="position: absolute; top: -100px;"/>');
			this.standaloneInput.keydown(this.doKeyDown);
			$('body').append(this.standaloneInput);
		}
		this.standaloneInput.val(dateText);
		var windowWidth, windowHeight;
		if (self.innerHeight) { // all except Explorer
			windowWidth = self.innerWidth;
			windowHeight = self.innerHeight;
		} else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
			windowWidth = document.documentElement.clientWidth;
			windowHeight = document.documentElement.clientHeight;
		} else if (document.body) { // other Explorers
			windowWidth = document.body.clientWidth;
			windowHeight = document.body.clientHeight;
		} 
		this.pos = pos || ($.blockUI ? [0, 0] : [(windowWidth - 200) / 2,
			(windowHeight - 200) / 2]); // should use actual width/height
		this.prompt = prompt;
		this.customEvent = callback;
		this.standalone = true;
		this.calendarDiv.addClass('calendar_dialog');
		this.showFor(this.standaloneInput[0]);
		if ($.blockUI) $.blockUI(this.calendarDiv, { width: '200px' });
	},

	/* Pop-up the calendar for a given input field. */
	showFor: function(target) {
		var input = (target.nodeName && target.nodeName.toLowerCase() == 'input' ? target : this);
		if (input.nodeName.toLowerCase() != 'input') { // find from button/image trigger
			input = $('../input', input)[0];
		}
		if (popUpCal.lastInput == input) { // already here
			return;
		}
		for (var i = 0; i < popUpCal.disabledInputs.length; i++) {  // check not disabled
			if (popUpCal.disabledInputs[i] == input) {
				return;
			}
		}
		popUpCal.input = $(input);
		popUpCal.hideCalendar('');
		popUpCal.lastInput = input;
		popUpCal.setDateFromField();
		if (!popUpCal.pos) { // position below input
			popUpCal.pos = popUpCal.findPos(input);
			popUpCal.pos[1] += input.offsetHeight;
		}
		popUpCal.calendarDiv.css('position', (popUpCal.standalone && $.blockUI ? 'static' : 'absolute')).
			css('left', popUpCal.pos[0] + 'px').css('top', popUpCal.pos[1] + 'px');
		popUpCal.pos = null;
		$.extend(popUpCal, (popUpCal.fieldSettings ? popUpCal.fieldSettings(input) : {}));
		popUpCal.showCalendar();
	},

	/* Handle keystrokes. */
	doKeyDown: function(e) {
		if (popUpCal.popUpShowing) {
			switch (e.keyCode) {
				case 9:  popUpCal.hideCalendar(''); break; // hide on tab out
				case 13: popUpCal.selectDate(); break; // select the value on enter
				case 27: popUpCal.hideCalendar(popUpCal.speed); break; // hide on escape
				case 33: popUpCal.adjustDate(-1, (e.ctrlKey ? 'Y' : 'M')); break; // previous month/year on page up/+ ctrl
				case 34: popUpCal.adjustDate(+1, (e.ctrlKey ? 'Y' : 'M')); break; // next month/year on page down/+ ctrl
				case 35: if (e.ctrlKey) popUpCal.clearDate(); break; // clear on ctrl+end
				case 36: if (e.ctrlKey) popUpCal.gotoToday(); break; // current on ctrl+home
				case 37: if (e.ctrlKey) popUpCal.adjustDate(-1, 'D'); break; // -1 day on ctrl+left
				case 38: if (e.ctrlKey) popUpCal.adjustDate(-7, 'D'); break; // -1 week on ctrl+up
				case 39: if (e.ctrlKey) popUpCal.adjustDate(+1, 'D'); break; // +1 day on ctrl+right
				case 40: if (e.ctrlKey) popUpCal.adjustDate(+7, 'D'); break; // +1 week on ctrl+down
			}
		}
		else if (e.keyCode == 36 && e.ctrlKey) { // display the calendar on ctrl+home
			popUpCal.showFor(this);
		}
	},

	/* Filter entered characters. */
	doKeyPress: function(e) {
		var chr = String.fromCharCode(e.charCode == undefined ? e.keyCode : e.charCode);
		return (chr < ' ' || chr == popUpCal.dateFormat.charAt(3) || (chr >= '0' && chr <= '9')); // only allow numbers and separator
	},

	/* Attach the calendar to an input field. */
	connectCalendar: function(target) {
		var $input = $(target);
		$input.after('<span class="calendar_append">' + this.appendText + '</span>');
		if (this.autoPopUp == 'focus' || this.autoPopUp == 'both') { // pop-up calendar when in the marked fields
			$input.focus(this.showFor);
		}
		if (this.autoPopUp == 'button' || this.autoPopUp == 'both') { // pop-up calendar when button clicked
			$input.wrap('<span class="calendar_wrap"></span>').
				after(this.buttonImageOnly ? '<img class="calendar_trigger" src="' +
				this.buttonImage + '" alt="' + this.buttonText + '" title="' + this.buttonText + '"/>' :
				'<button type="button" class="calendar_trigger">' + (this.buttonImage != '' ?
				'<img src="' + this.buttonImage + '" alt="' + this.buttonText + '" title="' + this.buttonText + '"/>' :
				this.buttonText) + '</button>');
			$((this.buttonImageOnly ? 'img' : 'button') + '.calendar_trigger', $input.parent('span')).click(this.showFor);
		}
		$input.keydown(this.doKeyDown).keypress(this.doKeyPress);
	},

	/* Attach an inline calendar to a div. */
	displayInline: function(target) {
		$(target).append('<div id="calendar_inline_div"></div><div style="clear:both"></div>');
		popUpCal.selectedDay = new Date().getDate();
		popUpCal.selectedMonth = new Date().getMonth();
		popUpCal.selectedYear = new Date().getFullYear();
		popUpCal.adjustDate(); 
		popUpCal.showCalendar(); 
	},
	
	/* Enable the input field(s) for entry. */
	enableFor: function(inputs) {
		inputs = (inputs.jquery ? inputs : $(inputs));
		inputs.each(function() {
			this.disabled = false;
			$('../button.calendar_trigger', this).each(function() { this.disabled = false; });
			$('../img.calendar_trigger', this).css('opacity', '1.0');
			var $this = this;
			popUpCal.disabledInputs = $.map(popUpCal.disabledInputs,
				function(value) { return (value == $this ? null : value); }); // delete entry
		});
		return false;
	},

	/* Disable the input field(s) from entry. */
	disableFor: function(inputs) {
		inputs = (inputs.jquery ? inputs : $(inputs));
		inputs.each(function() {
			this.disabled = true;
			$('../button.calendar_trigger', this).each(function() { this.disabled = true; });
			$('../img.calendar_trigger', this).css('opacity', '0.5');
			var $this = this;
			popUpCal.disabledInputs = $.map(popUpCal.disabledInputs,
				function(value) { return (value == $this ? null : value); }); // delete entry
			popUpCal.disabledInputs[popUpCal.disabledInputs.length] = this;
		});
		return false;
	},

	/* Construct and display the calendar. */
	showCalendar: function() {
		this.popUpShowing = true;
		var today = new Date();
		today = new Date(today.getFullYear(), today.getMonth(), today.getDate()); // clear time
		// build the calendar HTML
		var controls = '<div id="calendar_control">' +
			'<a id="calendar_clear" onclick="popUpCal.clearDate();">' + this.clearText + '</a>' +
			'<a id="calendar_close" onclick="popUpCal.hideCalendar(popUpCal.speed);">' +
			this.closeText + '</a></div>';
		var html = (this.prompt ? '<div id="calendar_prompt">' + this.prompt + '</div>' : '') +
			(this.closeAtTop && !this.inline ? controls : '') + '<div id="calendar_links">' +
			(this.canAdjustMonth(-1) ? '<a id="calendar_prev" ' +
			'onclick="popUpCal.adjustDate(-1, \'M\');">' + this.prevText + '</a>' :
			(this.hideIfNoPrevNext ? '' : '<label id="calendar_prev">' + this.prevText + '</label>')) +
			(this.isInRange(today) ? '<a id="calendar_current" ' +
			'onclick="popUpCal.gotoToday();">' + this.currentText + '</a>' : '') +
			(this.canAdjustMonth(+1) ? '<a id="calendar_next" ' +
			'onclick="popUpCal.adjustDate(+1, \'M\');">' + this.nextText + '</a>' :
			(this.hideIfNoPrevNext ? '' : '<label id="calendar_next">' + this.nextText + '</label>')) +
			'</div><div id="calendar_header">';
		if (!this.changeMonth) {
			html += this.monthNames[this.selectedMonth] + '&nbsp;';
		}
		else {
			var inMinYear = (this.minDate && this.minDate.getFullYear() == this.selectedYear);
			var inMaxYear = (this.maxDate && this.maxDate.getFullYear() == this.selectedYear);
			html += '<select id="calendar_newMonth" onchange="popUpCal.selectMonthYear(this, \'M\');" ' +
				'onclick="popUpCal.clickMonthYear();">';
			for (var month = 0; month < 12; month++) {
				if ((!inMinYear || month >= this.minDate.getMonth()) &&
						(!inMaxYear || month <= this.maxDate.getMonth())) {
					html += '<option value="' + month + '"' +
						(month == this.selectedMonth ? ' selected="selected"' : '') +
						'>' + this.monthNames[month] + '</option>';
				}
			}
			html += '</select>';
		}
		if (!this.changeYear) {
			html += this.selectedYear;
		}
		else {
			// determine range of years to display
			var years = this.yearRange.split(':');
			var year = 0;
			var endYear = 0;
			if (years.length != 2) {
				year = this.selectedYear - 10;
				endYear = this.selectedYear + 10;
			}
			else if (years[0].charAt(0) == '+' || years[0].charAt(0) == '-') {
				year = this.selectedYear + parseInt(years[0]);
				endYear = this.selectedYear + parseInt(years[1]);
			}
			else {
				year = parseInt(years[0]);
				endYear = parseInt(years[1]);
			}
			year = (this.minDate ? Math.max(year, this.minDate.getFullYear()) : year);
			endYear = (this.maxDate ? Math.min(endYear, this.maxDate.getFullYear()) : endYear);
			html += '<select id="calendar_newYear" onchange="popUpCal.selectMonthYear(this, \'Y\');" ' +
				'onclick="popUpCal.clickMonthYear();">';
			for (; year <= endYear; year++) {
				html += '<option value="' + year + '"' +
					(year == this.selectedYear ? ' selected="selected"' : '') +
					'>' + year + '</option>';
			}
			html += '</select>';
		}
		html += '</div><table id="calendar" cellpadding="0" cellspacing="0"><thead>' +
			'<tr class="calendar_titleRow">';
		for (var dow = 0; dow < 7; dow++) {
			html += '<td>' + (this.changeFirstDay ? '<a onclick="popUpCal.changeWeekDay(this);">' : '') +
				this.dayNames[(dow + this.firstDay) % 7] + (this.changeFirstDay ? '</a>' : '') + '</td>';
		}
		html += '</tr></thead><tbody>';
		var daysInMonth = this.getDaysInMonth(this.selectedYear, this.selectedMonth);
		this.selectedDay = Math.min(this.selectedDay, daysInMonth);
		var leadDays = (this.getFirstDayOfMonth(this.selectedYear, this.selectedMonth) - this.firstDay + 7) % 7;
		var currentDate = new Date(this.currentYear, this.currentMonth, this.currentDay);
		var selectedDate = new Date(this.selectedYear, this.selectedMonth, this.selectedDay);
		var printDate = new Date(this.selectedYear, this.selectedMonth, 1 - leadDays);
		var numRows = Math.ceil((leadDays + daysInMonth) / 7); // calculate the number of rows to generate
		for (var row = 0; row < numRows; row++) { // create calendar rows
			html += '<tr class="calendar_daysRow">';
			for (var dow = 0; dow < 7; dow++) { // create calendar days
				var customSettings = (this.customDate ? this.customDate(printDate) : [true, '']);
				var otherMonth = (printDate.getMonth() != this.selectedMonth);
				var unselectable = otherMonth || !customSettings[0] ||
					(this.minDate && printDate < this.minDate) ||
					(this.maxDate && printDate > this.maxDate);
				html += '<td class="calendar_daysCell' +
					((dow + this.firstDay + 6) % 7 >= 5 ? ' calendar_weekEndCell' : '') + // highlight weekends
					(otherMonth ? ' calendar_otherMonth' : '') + // highlight days from other months
					(printDate.getTime() == selectedDate.getTime() ? ' calendar_daysCellOver' : '') + // highlight selected day
					(unselectable ? ' calendar_unselectable' : '') +  // highlight unselectable days
					(!otherMonth || this.showOtherMonths ? ' ' + customSettings[1] : '') + '"' + // highlight custom dates
					(printDate.getTime() == currentDate.getTime() ? ' id="calendar_currentDay"' : // highlight current day
					(printDate.getTime() == today.getTime() ? ' id="calendar_today"' : '')) + // highlight today (if different)
					(unselectable ? '' : ' onmouseover="$(this).addClass(\'calendar_daysCellOver\');"' +
					' onmouseout="$(this).removeClass(\'calendar_daysCellOver\');"' +
					' onclick="popUpCal.selectDay(this);")') + '>' + // actions
					(otherMonth ? (this.showOtherMonths ? printDate.getDate() : '&nbsp;') : // display for other months
					(unselectable ? printDate.getDate() : '<a>' + printDate.getDate() + '</a>')) + '</td>'; // display for this month
				printDate.setDate(printDate.getDate() + 1);
			}
			html += '</tr>';
		}
		html += '</tbody></table>' + (this.closeAtTop || this.inline ? '' : controls) +
			'<!--[if lte IE 6.5]><iframe src="javascript:false;" id="calendar_cover"></iframe><![endif]-->';
		// add calendar to element to calendar div
		if (!this.inline) {
			this.calendarDiv.empty().append(html).show(this.speed, this.coverSelects);
			if (this.speed == '') this.coverSelects();
			this.input[0].focus();
		}
		else {
			$('#calendar_inline_div').empty().append(html);
		}
	}, // end showCalendar

	/* Fix IE < 7 select problems. */
	coverSelects: function() {
		if ($.browser.msie) {
			$('#calendar_cover').css({width: popUpCal.calendarDiv[0].offsetWidth + 4,
				height: popUpCal.calendarDiv[0].offsetHeight + 4});
		}
	},
	
	/* Hide the calendar from view. */
	hideCalendar: function(speed) {
		if (this.popUpShowing) {
			this.calendarDiv.hide(speed, this.tidyStandalone);
			if (speed == '') this.tidyStandalone();
			this.popUpShowing = false;
			this.lastInput = null;
			this.prompt = null;
			if (this.standalone && $.blockUI) $.unblockUI();
			this.standalone = false;
		}
	},

	/* Tidy up after a dialog display. */
	tidyStandalone: function() {
		popUpCal.calendarDiv.removeClass('calendar_dialog');
		$('calendar_prompt').remove();
	},

	/* Action for current link. */
	gotoToday: function() {
		var date = new Date();
		popUpCal.selectedDay = date.getDate();
		popUpCal.selectedMonth = date.getMonth();
		popUpCal.selectedYear = date.getFullYear();
		popUpCal.adjustDate();
	},

	/* Action for selecting a new month/year. */
	selectMonthYear: function(select, period) {
		popUpCal.selectingMonthYear = false;
		popUpCal[period == 'M' ? 'selectedMonth' : 'selectedYear'] =
			select.options[select.selectedIndex].value - 0;
		popUpCal.adjustDate();
	},

	/* Restore input focus after not changing month/year. */
	clickMonthYear: function() {
		if (popUpCal.selectingMonthYear && !$.browser.msie) {
			popUpCal.input[0].focus();
		}
		popUpCal.selectingMonthYear = !popUpCal.selectingMonthYear;
	},

	/* Action for changing the first week day. */
	changeWeekDay: function(a) {
		for (var i = 0; i < 7; i++) {
			if (popUpCal.dayNames[i] == a.firstChild.nodeValue) {
				popUpCal.firstDay = i;
				break;
			}
		}
		popUpCal.showCalendar();
	},

	/* Action for selecting a day. */
	selectDay: function(td) {
		popUpCal.selectedDay = $("a", td).html();
		popUpCal.selectDate();
	},

	/* Update the input field with the selected date. */
	selectDate: function(value) {
		this.currentDay = this.selectedDay;
		this.currentMonth = this.selectedMonth;
		this.currentYear = this.selectedYear;
		this.date = (value != null ? value : this.formatDate(this.selectedDay, this.selectedMonth, this.selectedYear));
		if (this.customEvent) {
			this.customEvent();  // trigger it
		} 
		else {
			// set the input field with the date and fire the change event
			this.input.val(this.date);
			this.input.trigger('change');
		}
		if (!this.inline) {
			this.hideCalendar(this.speed);
		}
	},

	/* Erase the input field and hide the calendar. */
	clearDate: function() {
		this.selectDate('');
	},

	/* Close calendar if clicked elsewhere. */
	checkExternalClick: function(event) {
		if (popUpCal.popUpShowing && !(popUpCal.standalone && $.blockUI)) {
			var node = event.target;
			var cal = popUpCal.calendarDiv[0];
			while (node && node != cal && node.className != 'calendar_trigger') {
				node = node.parentNode;
			}
			if (!node) {
				popUpCal.hideCalendar('');
			}
		}
	},

	/* Set as customDate function to prevent selection of weekends. */
	noWeekends: function(date) {
		var day = date.getDay();
		return [(day > 0 && day < 6), ''];
	},

	/* Format and display the given date. */
	formatDate: function(day, month, year) {
		month++; // adjust javascript month
		var dateString = '';
		for (var i = 0; i < 3; i++) {
			dateString += this.dateFormat.charAt(3) +
				(this.dateFormat.charAt(i) == 'D' ? (day < 10 ? '0' : '') + day :
				(this.dateFormat.charAt(i) == 'M' ? (month < 10 ? '0' : '') + month :
				(this.dateFormat.charAt(i) == 'Y' ? year : '?')));
		}
		return dateString.substring(this.dateFormat.charAt(3) ? 1 : 0);
	},

	/* Parse existing date and initialise calendar. */
	setDateFromField: function() {
		var currentDate = this.input.val().split(this.dateFormat.charAt(3));
		if (currentDate.length == 3) {
			this.currentDay = parseInt(this.trimNumber(currentDate[this.dateFormat.indexOf('D')]));
			this.currentMonth = parseInt(this.trimNumber(currentDate[this.dateFormat.indexOf('M')])) - 1;
			this.currentYear = parseInt(this.trimNumber(currentDate[this.dateFormat.indexOf('Y')]));
		}
		else {
			this.currentDay = new Date().getDate();
			this.currentMonth = new Date().getMonth();
			this.currentYear = new Date().getFullYear();
		}
		this.selectedDay = this.currentDay;
		this.selectedMonth = this.currentMonth;
		this.selectedYear = this.currentYear;
		this.adjustDate(0, 'D', true);
	},

	/* Ensure numbers are not treated as octal. */
	trimNumber: function(value) {
		if (value == '')
			return '';
		while (value.charAt(0) == '0') {
			value = value.substring(1);
		}
		return value;
	},


	/* Adjust one of the date sub-fields. */
	adjustDate: function(offset, period, dontShow) {
		var date = new Date(this.selectedYear + (period == 'Y' ? offset : 0),
			this.selectedMonth + (period == 'M' ? offset : 0),
			this.selectedDay + (period == 'D' ? offset : 0));
		// ensure it is within the bounds set
		date = (this.minDate && date < this.minDate ? this.minDate : date);
		date = (this.maxDate && date > this.maxDate ? this.maxDate : date);
		this.selectedDay = date.getDate();
		this.selectedMonth = date.getMonth();
		this.selectedYear = date.getFullYear();
		if (!dontShow) {
			this.showCalendar();
		}
	},

	/* Find the number of days in a given month. */
	getDaysInMonth: function(year, month) {
		return 32 - new Date(year, month, 32).getDate();
	},

	/* Find the day of the week of the first of a month. */
	getFirstDayOfMonth: function(year, month) {
		return new Date(year, month, 1).getDay();
	},

	/* Determines if we should allow a "next/prev" month display change. */
	canAdjustMonth: function(offset) {
		var date = new Date(this.selectedYear, this.selectedMonth + offset, 1);
		if (offset < 0) {
			date.setDate(this.getDaysInMonth(date.getFullYear(), date.getMonth()));
		}
		return this.isInRange(date);
	},

	/* Is the given date in the accepted range? */
	isInRange: function(date) {
		return ((!this.minDate || date >= this.minDate) && (!this.maxDate || date <= this.maxDate));
	},

	/* Find an object's position on the screen. */
	findPos: function(obj) {
		var curleft = curtop = 0;
		if (obj.offsetParent) {
			curleft = obj.offsetLeft;
			curtop = obj.offsetTop;
			while (obj = obj.offsetParent) {
				var origcurleft = curleft;
				curleft += obj.offsetLeft;
				if (curleft < 0) {
					curleft = origcurleft;
				}
				curtop += obj.offsetTop;
			}
		}
		return [curleft,curtop];
	}
};

/* Attach the calendar to a jQuery selection. */
$.fn.calendar = function(settings) {
	// customise the calendar object
	$.extend(popUpCal, settings || {});
	// attach the calendar to each nominated input element
	return this.each(function() {
		if (this.nodeName.toLowerCase() == 'input') {
			popUpCal.connectCalendar(this);
		} 
		else if (this.nodeName.toLowerCase() == 'div') {
			popUpCal.displayInline(this);
		}
	});
};

/* Initialise the calendar. */
$(document).ready(function() {
   popUpCal.init();
});

