
/* jQuery 1.2.6 - New Wave Javascript */
(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 UI 1.6
*
* Copyright (c) 2008 AUTHORS.txt (http://ui.jquery.com/about)
* Dual licensed under the MIT (MIT-LICENSE.txt)
* and GPL (GPL-LICENSE.txt) licenses.
*
* http://docs.jquery.com/UI
*/
(function(C) { var I = C.fn.remove, D = C.browser.mozilla && (parseFloat(C.browser.version) < 1.9); C.ui = { version: "1.6", plugin: { add: function(K, L, N) { var M = C.ui[K].prototype; for (var J in N) { M.plugins[J] = M.plugins[J] || []; M.plugins[J].push([L, N[J]]) } }, call: function(J, L, K) { var N = J.plugins[L]; if (!N) { return } for (var M = 0; M < N.length; M++) { if (J.options[N[M][0]]) { N[M][1].apply(J.element, K) } } } }, contains: function(L, K) { var J = C.browser.safari && C.browser.version < 522; if (L.contains && !J) { return L.contains(K) } if (L.compareDocumentPosition) { return !!(L.compareDocumentPosition(K) & 16) } while (K = K.parentNode) { if (K == L) { return true } } return false }, cssCache: {}, css: function(J) { if (C.ui.cssCache[J]) { return C.ui.cssCache[J] } var K = C('<div class="ui-gen">').addClass(J).css({ position: "absolute", top: "-5000px", left: "-5000px", display: "block" }).appendTo("body"); C.ui.cssCache[J] = !!((!(/auto|default/).test(K.css("cursor")) || (/^[1-9]/).test(K.css("height")) || (/^[1-9]/).test(K.css("width")) || !(/none/).test(K.css("backgroundImage")) || !(/transparent|rgba\(0, 0, 0, 0\)/).test(K.css("backgroundColor")))); try { C("body").get(0).removeChild(K.get(0)) } catch (L) { } return C.ui.cssCache[J] }, hasScroll: function(M, K) { if (C(M).css("overflow") == "hidden") { return false } var J = (K && K == "left") ? "scrollLeft" : "scrollTop", L = false; if (M[J] > 0) { return true } M[J] = 1; L = (M[J] > 0); M[J] = 0; return L }, isOverAxis: function(K, J, L) { return (K > J) && (K < (J + L)) }, isOver: function(O, K, N, M, J, L) { return C.ui.isOverAxis(O, N, J) && C.ui.isOverAxis(K, M, L) }, keyCode: { BACKSPACE: 8, CAPS_LOCK: 20, COMMA: 188, CONTROL: 17, DELETE: 46, DOWN: 40, END: 35, ENTER: 13, ESCAPE: 27, HOME: 36, INSERT: 45, LEFT: 37, NUMPAD_ADD: 107, NUMPAD_DECIMAL: 110, NUMPAD_DIVIDE: 111, NUMPAD_ENTER: 108, NUMPAD_MULTIPLY: 106, NUMPAD_SUBTRACT: 109, PAGE_DOWN: 34, PAGE_UP: 33, PERIOD: 190, RIGHT: 39, SHIFT: 16, SPACE: 32, TAB: 9, UP: 38} }; if (D) { var F = C.attr, E = C.fn.removeAttr, H = "http://www.w3.org/2005/07/aaa", A = /^aria-/, B = /^wairole:/; C.attr = function(K, J, L) { var M = L !== undefined; return (J == "role" ? (M ? F.call(this, K, J, "wairole:" + L) : (F.apply(this, arguments) || "").replace(B, "")) : (A.test(J) ? (M ? K.setAttributeNS(H, J.replace(A, "aaa:"), L) : F.call(this, K, J.replace(A, "aaa:"))) : F.apply(this, arguments))) }; C.fn.removeAttr = function(J) { return (A.test(J) ? this.each(function() { this.removeAttributeNS(H, J.replace(A, "")) }) : E.call(this, J)) } } C.fn.extend({ remove: function() { C("*", this).add(this).each(function() { C(this).triggerHandler("remove") }); return I.apply(this, arguments) }, enableSelection: function() { return this.attr("unselectable", "off").css("MozUserSelect", "").unbind("selectstart.ui") }, disableSelection: function() { return this.attr("unselectable", "on").css("MozUserSelect", "none").bind("selectstart.ui", function() { return false }) }, scrollParent: function() { var J; if ((C.browser.msie && (/(static|relative)/).test(this.css("position"))) || (/absolute/).test(this.css("position"))) { J = this.parents().filter(function() { return (/(relative|absolute|fixed)/).test(C.curCSS(this, "position", 1)) && (/(auto|scroll)/).test(C.curCSS(this, "overflow", 1) + C.curCSS(this, "overflow-y", 1) + C.curCSS(this, "overflow-x", 1)) }).eq(0) } else { J = this.parents().filter(function() { return (/(auto|scroll)/).test(C.curCSS(this, "overflow", 1) + C.curCSS(this, "overflow-y", 1) + C.curCSS(this, "overflow-x", 1)) }).eq(0) } return (/fixed/).test(this.css("position")) || !J.length ? C(document) : J } }); C.extend(C.expr[":"], { data: function(K, L, J) { return C.data(K, J[3]) }, tabbable: function(L, M, K) { var N = L.nodeName.toLowerCase(); function J(O) { return !(C(O).is(":hidden") || C(O).parents(":hidden").length) } return (L.tabIndex >= 0 && (("a" == N && L.href) || (/input|select|textarea|button/.test(N) && "hidden" != L.type && !L.disabled)) && J(L)) } }); function G(M, N, O, L) { function K(Q) { var P = C[M][N][Q] || []; return (typeof P == "string" ? P.split(/,?\s+/) : P) } var J = K("getter"); if (L.length == 1 && typeof L[0] == "string") { J = J.concat(K("getterSetter")) } return (C.inArray(O, J) != -1) } C.widget = function(K, J) { var L = K.split(".")[0]; K = K.split(".")[1]; C.fn[K] = function(P) { var N = (typeof P == "string"), O = Array.prototype.slice.call(arguments, 1); if (N && P.substring(0, 1) == "_") { return this } if (N && G(L, K, P, O)) { var M = C.data(this[0], K); return (M ? M[P].apply(M, O) : undefined) } return this.each(function() { var Q = C.data(this, K); (!Q && !N && C.data(this, K, new C[L][K](this, P))); (Q && N && C.isFunction(Q[P]) && Q[P].apply(Q, O)) }) }; C[L] = C[L] || {}; C[L][K] = function(O, N) { var M = this; this.widgetName = K; this.widgetEventPrefix = C[L][K].eventPrefix || K; this.widgetBaseClass = L + "-" + K; this.options = C.extend({}, C.widget.defaults, C[L][K].defaults, C.metadata && C.metadata.get(O)[K], N); this.element = C(O).bind("setData." + K, function(Q, P, R) { return M._setData(P, R) }).bind("getData." + K, function(Q, P) { return M._getData(P) }).bind("remove", function() { return M.destroy() }); this._init() }; C[L][K].prototype = C.extend({}, C.widget.prototype, J); C[L][K].getterSetter = "option" }; C.widget.prototype = { _init: function() { }, destroy: function() { this.element.removeData(this.widgetName) }, option: function(L, M) { var K = L, J = this; if (typeof L == "string") { if (M === undefined) { return this._getData(L) } K = {}; K[L] = M } C.each(K, function(N, O) { J._setData(N, O) }) }, _getData: function(J) { return this.options[J] }, _setData: function(J, K) { this.options[J] = K; if (J == "disabled") { this.element[K ? "addClass" : "removeClass"](this.widgetBaseClass + "-disabled") } }, enable: function() { this._setData("disabled", false) }, disable: function() { this._setData("disabled", true) }, _trigger: function(K, L, M) { var J = (K == this.widgetEventPrefix ? K : this.widgetEventPrefix + K); L = L || C.event.fix({ type: J, target: this.element[0] }); return this.element.triggerHandler(J, [L, M], this.options[K]) } }; C.widget.defaults = { disabled: false }; C.ui.mouse = { _mouseInit: function() { var J = this; this.element.bind("mousedown." + this.widgetName, function(K) { return J._mouseDown(K) }).bind("click." + this.widgetName, function(K) { if (J._preventClickEvent) { J._preventClickEvent = false; return false } }); if (C.browser.msie) { this._mouseUnselectable = this.element.attr("unselectable"); this.element.attr("unselectable", "on") } this.started = false }, _mouseDestroy: function() { this.element.unbind("." + this.widgetName); (C.browser.msie && this.element.attr("unselectable", this._mouseUnselectable)) }, _mouseDown: function(L) { (this._mouseStarted && this._mouseUp(L)); this._mouseDownEvent = L; var K = this, M = (L.which == 1), J = (typeof this.options.cancel == "string" ? C(L.target).parents().add(L.target).filter(this.options.cancel).length : false); if (!M || J || !this._mouseCapture(L)) { return true } this.mouseDelayMet = !this.options.delay; if (!this.mouseDelayMet) { this._mouseDelayTimer = setTimeout(function() { K.mouseDelayMet = true }, this.options.delay) } if (this._mouseDistanceMet(L) && this._mouseDelayMet(L)) { this._mouseStarted = (this._mouseStart(L) !== false); if (!this._mouseStarted) { L.preventDefault(); return true } } this._mouseMoveDelegate = function(N) { return K._mouseMove(N) }; this._mouseUpDelegate = function(N) { return K._mouseUp(N) }; C(document).bind("mousemove." + this.widgetName, this._mouseMoveDelegate).bind("mouseup." + this.widgetName, this._mouseUpDelegate); if (!C.browser.safari) { L.preventDefault() } return true }, _mouseMove: function(J) { if (C.browser.msie && !J.button) { return this._mouseUp(J) } if (this._mouseStarted) { this._mouseDrag(J); return J.preventDefault() } if (this._mouseDistanceMet(J) && this._mouseDelayMet(J)) { this._mouseStarted = (this._mouseStart(this._mouseDownEvent, J) !== false); (this._mouseStarted ? this._mouseDrag(J) : this._mouseUp(J)) } return !this._mouseStarted }, _mouseUp: function(J) { C(document).unbind("mousemove." + this.widgetName, this._mouseMoveDelegate).unbind("mouseup." + this.widgetName, this._mouseUpDelegate); if (this._mouseStarted) { this._mouseStarted = false; this._preventClickEvent = true; this._mouseStop(J) } return false }, _mouseDistanceMet: function(J) { return (Math.max(Math.abs(this._mouseDownEvent.pageX - J.pageX), Math.abs(this._mouseDownEvent.pageY - J.pageY)) >= this.options.distance) }, _mouseDelayMet: function(J) { return this.mouseDelayMet }, _mouseStart: function(J) { }, _mouseDrag: function(J) { }, _mouseStop: function(J) { }, _mouseCapture: function(J) { return true } }; C.ui.mouse.defaults = { cancel: null, distance: 1, delay: 0} })(jQuery); /*
 * jQuery UI Dialog 1.6
 *
 * Copyright (c) 2008 AUTHORS.txt (http://ui.jquery.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Dialog
 *
 * Depends:
 *	ui.core.js
 *	ui.draggable.js
 *	ui.resizable.js
 */
(function(B) { var A = { dragStart: "start.draggable", drag: "drag.draggable", dragStop: "stop.draggable", maxHeight: "maxHeight.resizable", minHeight: "minHeight.resizable", maxWidth: "maxWidth.resizable", minWidth: "minWidth.resizable", resizeStart: "start.resizable", resize: "drag.resizable", resizeStop: "stop.resizable" }; B.widget("ui.dialog", { _init: function() { this.originalTitle = this.element.attr("title"); this.options.title = this.options.title || this.originalTitle; var M = this, N = this.options, F = this.element.removeAttr("title").addClass("ui-dialog-content").wrap("<div></div>").wrap("<div></div>"), I = (this.uiDialogContainer = F.parent()).addClass("ui-dialog-container").css({ position: "relative", width: "100%", height: "100%" }), E = (this.uiDialogTitlebar = B("<div></div>")).addClass("ui-dialog-titlebar").mousedown(function() { M.moveToTop() }).prependTo(I), J = B('<a href="#"/>').addClass("ui-dialog-titlebar-close").attr("role", "button").appendTo(E), G = (this.uiDialogTitlebarCloseText = B("<span/>")).text(N.closeText).appendTo(J), L = N.title || "&nbsp;", D = B.ui.dialog.getTitleId(this.element), C = B("<span/>").addClass("ui-dialog-title").attr("id", D).html(L).prependTo(E), K = (this.uiDialog = I.parent()).appendTo(document.body).hide().addClass("ui-dialog").addClass(N.dialogClass).css({ position: "absolute", width: N.width, height: N.height, overflow: "hidden", zIndex: N.zIndex }).attr("tabIndex", -1).css("outline", 0).keydown(function(O) { (N.closeOnEscape && O.keyCode && O.keyCode == B.ui.keyCode.ESCAPE && M.close()) }).attr({ role: "dialog", "aria-labelledby": D }).mouseup(function() { M.moveToTop() }), H = (this.uiDialogButtonPane = B("<div></div>")).addClass("ui-dialog-buttonpane").css({ position: "absolute", bottom: 0 }).appendTo(K), J = B(".ui-dialog-titlebar-close", E).hover(function() { B(this).addClass("ui-dialog-titlebar-close-hover") }, function() { B(this).removeClass("ui-dialog-titlebar-close-hover") }).mousedown(function(O) { O.stopPropagation() }).click(function() { M.close(); return false }); E.find("*").add(E).disableSelection(); (N.draggable && B.fn.draggable && this._makeDraggable()); (N.resizable && B.fn.resizable && this._makeResizable()); this._createButtons(N.buttons); this._isOpen = false; (N.bgiframe && B.fn.bgiframe && K.bgiframe()); (N.autoOpen && this.open()) }, destroy: function() { (this.overlay && this.overlay.destroy()); this.uiDialog.hide(); this.element.unbind(".dialog").removeData("dialog").removeClass("ui-dialog-content").hide().appendTo("body"); this.uiDialog.remove(); (this.originalTitle && this.element.attr("title", this.originalTitle)) }, close: function() { if (false === this._trigger("beforeclose", null, { options: this.options })) { return } (this.overlay && this.overlay.destroy()); this.uiDialog.hide(this.options.hide).unbind("keypress.ui-dialog"); this._trigger("close", null, { options: this.options }); B.ui.dialog.overlay.resize(); this._isOpen = false }, isOpen: function() { return this._isOpen }, moveToTop: function(F) { if ((this.options.modal && !F) || (!this.options.stack && !this.options.modal)) { return this._trigger("focus", null, { options: this.options }) } var E = this.options.zIndex, D = this.options; B(".ui-dialog:visible").each(function() { E = Math.max(E, parseInt(B(this).css("z-index"), 10) || D.zIndex) }); (this.overlay && this.overlay.$el.css("z-index", ++E)); var C = { scrollTop: this.element.attr("scrollTop"), scrollLeft: this.element.attr("scrollLeft") }; this.uiDialog.css("z-index", ++E); this.element.attr(C); this._trigger("focus", null, { options: this.options }) }, open: function() { if (this._isOpen) { return } this.overlay = this.options.modal ? new B.ui.dialog.overlay(this) : null; (this.uiDialog.next().length && this.uiDialog.appendTo("body")); this._position(this.options.position); this.uiDialog.show(this.options.show); (this.options.autoResize && this._size()); this.moveToTop(true); (this.options.modal && this.uiDialog.bind("keypress.ui-dialog", function(E) { if (E.keyCode != B.ui.keyCode.TAB) { return } var D = B(":tabbable", this), F = D.filter(":first")[0], C = D.filter(":last")[0]; if (E.target == C && !E.shiftKey) { setTimeout(function() { F.focus() }, 1) } else { if (E.target == F && E.shiftKey) { setTimeout(function() { C.focus() }, 1) } } })); this.uiDialog.find(":tabbable:first").focus(); this._trigger("open", null, { options: this.options }); this._isOpen = true }, _createButtons: function(F) { var E = this, C = false, D = this.uiDialogButtonPane; D.empty().hide(); B.each(F, function() { return !(C = true) }); if (C) { D.show(); B.each(F, function(G, H) { B('<button type="button"></button>').text(G).click(function() { H.apply(E.element[0], arguments) }).appendTo(D) }) } }, _makeDraggable: function() { var C = this, D = this.options; this.uiDialog.draggable({ cancel: ".ui-dialog-content", helper: D.dragHelper, handle: ".ui-dialog-titlebar", start: function() { C.moveToTop(); (D.dragStart && D.dragStart.apply(C.element[0], arguments)) }, drag: function() { (D.drag && D.drag.apply(C.element[0], arguments)) }, stop: function() { (D.dragStop && D.dragStop.apply(C.element[0], arguments)); B.ui.dialog.overlay.resize() } }) }, _makeResizable: function(F) { F = (F === undefined ? this.options.resizable : F); var C = this, E = this.options, D = typeof F == "string" ? F : "n,e,s,w,se,sw,ne,nw"; this.uiDialog.resizable({ cancel: ".ui-dialog-content", helper: E.resizeHelper, maxWidth: E.maxWidth, maxHeight: E.maxHeight, minWidth: E.minWidth, minHeight: E.minHeight, start: function() { (E.resizeStart && E.resizeStart.apply(C.element[0], arguments)) }, resize: function() { (E.autoResize && C._size.apply(C)); (E.resize && E.resize.apply(C.element[0], arguments)) }, handles: D, stop: function() { (E.autoResize && C._size.apply(C)); (E.resizeStop && E.resizeStop.apply(C.element[0], arguments)); B.ui.dialog.overlay.resize() } }) }, _position: function(H) { var D = B(window), E = B(document), F = E.scrollTop(), C = E.scrollLeft(), G = F; if (B.inArray(H, ["center", "top", "right", "bottom", "left"]) >= 0) { H = [H == "right" || H == "left" ? H : "center", H == "top" || H == "bottom" ? H : "middle"] } if (H.constructor != Array) { H = ["center", "middle"] } if (H[0].constructor == Number) { C += H[0] } else { switch (H[0]) { case "left": C += 0; break; case "right": C += D.width() - this.uiDialog.outerWidth(); break; default: case "center": C += (D.width() - this.uiDialog.outerWidth()) / 2 } } if (H[1].constructor == Number) { F += H[1] } else { switch (H[1]) { case "top": F += 0; break; case "bottom": F += (B.browser.opera ? window.innerHeight : D.height()) - this.uiDialog.outerHeight(); break; default: case "middle": F += ((B.browser.opera ? window.innerHeight : D.height()) - this.uiDialog.outerHeight()) / 2 } } F = Math.max(F, G); this.uiDialog.css({ top: F, left: C }) }, _setData: function(D, E) { (A[D] && this.uiDialog.data(A[D], E)); switch (D) { case "buttons": this._createButtons(E); break; case "closeText": this.uiDialogTitlebarCloseText.text(E); break; case "draggable": (E ? this._makeDraggable() : this.uiDialog.draggable("destroy")); break; case "height": this.uiDialog.height(E); break; case "position": this._position(E); break; case "resizable": var C = this.uiDialog, F = this.uiDialog.is(":data(resizable)"); (F && !E && C.resizable("destroy")); (F && typeof E == "string" && C.resizable("option", "handles", E)); (F || this._makeResizable(E)); break; case "title": B(".ui-dialog-title", this.uiDialogTitlebar).html(E || "&nbsp;"); break; case "width": this.uiDialog.width(E); break } B.widget.prototype._setData.apply(this, arguments) }, _size: function() { var D = this.uiDialogContainer, G = this.uiDialogTitlebar, E = this.element, F = (parseInt(E.css("margin-top"), 10) || 0) + (parseInt(E.css("margin-bottom"), 10) || 0), C = (parseInt(E.css("margin-left"), 10) || 0) + (parseInt(E.css("margin-right"), 10) || 0); E.height(D.height() - G.outerHeight() - F); E.width(D.width() - C) } }); B.extend(B.ui.dialog, { version: "1.6", defaults: { autoOpen: true, autoResize: true, bgiframe: false, buttons: {}, closeOnEscape: true, closeText: "close", draggable: true, height: 200, minHeight: 100, minWidth: 150, modal: false, overlay: {}, position: "center", resizable: true, stack: true, width: 300, zIndex: 1000 }, getter: "isOpen", uuid: 0, getTitleId: function(C) { return "ui-dialog-title-" + (C.attr("id") || ++this.uuid) }, overlay: function(C) { this.$el = B.ui.dialog.overlay.create(C) } }); B.extend(B.ui.dialog.overlay, { instances: [], events: B.map("focus,mousedown,mouseup,keydown,keypress,click".split(","), function(C) { return C + ".dialog-overlay" }).join(" "), create: function(D) { if (this.instances.length === 0) { setTimeout(function() { B("a, :input").bind(B.ui.dialog.overlay.events, function() { var F = false; var H = B(this).parents(".ui-dialog"); if (H.length) { var E = B(".ui-dialog-overlay"); if (E.length) { var G = parseInt(E.css("z-index"), 10); E.each(function() { G = Math.max(G, parseInt(B(this).css("z-index"), 10)) }); F = parseInt(H.css("z-index"), 10) > G } else { F = true } } return F }) }, 1); B(document).bind("keydown.dialog-overlay", function(E) { (D.options.closeOnEscape && E.keyCode && E.keyCode == B.ui.keyCode.ESCAPE && D.close()) }); B(window).bind("resize.dialog-overlay", B.ui.dialog.overlay.resize) } var C = B("<div></div>").appendTo(document.body).addClass("ui-dialog-overlay").css(B.extend({ borderWidth: 0, margin: 0, padding: 0, position: "absolute", top: 0, left: 0, width: this.width(), height: this.height() }, D.options.overlay)); (D.options.bgiframe && B.fn.bgiframe && C.bgiframe()); this.instances.push(C); return C }, destroy: function(C) { this.instances.splice(B.inArray(this.instances, C), 1); if (this.instances.length === 0) { B("a, :input").add([document, window]).unbind(".dialog-overlay") } C.remove() }, height: function() { if (B.browser.msie && B.browser.version < 7) { var D = Math.max(document.documentElement.scrollHeight, document.body.scrollHeight); var C = Math.max(document.documentElement.offsetHeight, document.body.offsetHeight); if (D < C) { return B(window).height() + "px" } else { return D + "px" } } else { if (B.browser.opera) { return Math.max(window.innerHeight, B(document).height()) + "px" } else { return B(document).height() + "px" } } }, width: function() { if (B.browser.msie && B.browser.version < 7) { var C = Math.max(document.documentElement.scrollWidth, document.body.scrollWidth); var D = Math.max(document.documentElement.offsetWidth, document.body.offsetWidth); if (C < D) { return B(window).width() + "px" } else { return C + "px" } } else { if (B.browser.opera) { return Math.max(window.innerWidth, B(document).width()) + "px" } else { return B(document).width() + "px" } } }, resize: function() { var C = B([]); B.each(B.ui.dialog.overlay.instances, function() { C = C.add(this) }); C.css({ width: 0, height: 0 }).css({ width: B.ui.dialog.overlay.width(), height: B.ui.dialog.overlay.height() }) } }); B.extend(B.ui.dialog.overlay.prototype, { destroy: function() { B.ui.dialog.overlay.destroy(this.$el) } }) })(jQuery); /*
 * jQuery UI Tabs 1.6
 *
 * Copyright (c) 2008 AUTHORS.txt (http://ui.jquery.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Tabs
 *
 * Depends:
 *	ui.core.js
 */
(function(A) { A.widget("ui.tabs", { _init: function() { this._tabify(true) }, destroy: function() { var B = this.options; this.element.unbind(".tabs").removeClass(B.navClass).removeData("tabs"); this.$tabs.each(function() { var C = A.data(this, "href.tabs"); if (C) { this.href = C } var D = A(this).unbind(".tabs"); A.each(["href", "load", "cache"], function(E, F) { D.removeData(F + ".tabs") }) }); this.$lis.add(this.$panels).each(function() { if (A.data(this, "destroy.tabs")) { A(this).remove() } else { A(this).removeClass([B.selectedClass, B.deselectableClass, B.disabledClass, B.panelClass, B.hideClass].join(" ")) } }); if (B.cookie) { this._cookie(null, B.cookie) } }, _setData: function(B, C) { if ((/^selected/).test(B)) { this.select(C) } else { this.options[B] = C; this._tabify() } }, length: function() { return this.$tabs.length }, _tabId: function(B) { return B.title && B.title.replace(/\s/g, "_").replace(/[^A-Za-z0-9\-_:\.]/g, "") || this.options.idPrefix + A.data(B) }, _sanitizeSelector: function(B) { return B.replace(/:/g, "\\:") }, _cookie: function() { var B = this.cookie || (this.cookie = "ui-tabs-" + A.data(this.element[0])); return A.cookie.apply(null, [B].concat(A.makeArray(arguments))) }, _tabify: function(N) { this.$lis = A("li:has(a[href])", this.element); this.$tabs = this.$lis.map(function() { return A("a", this)[0] }); this.$panels = A([]); var O = this, C = this.options; this.$tabs.each(function(Q, P) { if (P.hash && P.hash.replace("#", "")) { O.$panels = O.$panels.add(O._sanitizeSelector(P.hash)) } else { if (A(P).attr("href") != "#") { A.data(P, "href.tabs", P.href); A.data(P, "load.tabs", P.href); var S = O._tabId(P); P.href = "#" + S; var R = A("#" + S); if (!R.length) { R = A(C.panelTemplate).attr("id", S).addClass(C.panelClass).insertAfter(O.$panels[Q - 1] || O.element); R.data("destroy.tabs", true) } O.$panels = O.$panels.add(R) } else { C.disabled.push(Q + 1) } } }); if (N) { this.element.addClass(C.navClass); this.$panels.addClass(C.panelClass); if (C.selected === undefined) { if (location.hash) { this.$tabs.each(function(Q, P) { if (P.hash == location.hash) { C.selected = Q; return false } }) } else { if (C.cookie) { var I = parseInt(O._cookie(), 10); if (I && O.$tabs[I]) { C.selected = I } } else { if (O.$lis.filter("." + C.selectedClass).length) { C.selected = O.$lis.index(O.$lis.filter("." + C.selectedClass)[0]) } } } } C.selected = C.selected === null || C.selected !== undefined ? C.selected : 0; C.disabled = A.unique(C.disabled.concat(A.map(this.$lis.filter("." + C.disabledClass), function(Q, P) { return O.$lis.index(Q) }))).sort(); if (A.inArray(C.selected, C.disabled) != -1) { C.disabled.splice(A.inArray(C.selected, C.disabled), 1) } this.$panels.addClass(C.hideClass); this.$lis.removeClass(C.selectedClass); if (C.selected !== null) { this.$panels.eq(C.selected).removeClass(C.hideClass); var E = [C.selectedClass]; if (C.deselectable) { E.push(C.deselectableClass) } this.$lis.eq(C.selected).addClass(E.join(" ")); var J = function() { O._trigger("show", null, O.ui(O.$tabs[C.selected], O.$panels[C.selected])) }; if (A.data(this.$tabs[C.selected], "load.tabs")) { this.load(C.selected, J) } else { J() } } A(window).bind("unload", function() { O.$tabs.unbind(".tabs"); O.$lis = O.$tabs = O.$panels = null }) } else { C.selected = this.$lis.index(this.$lis.filter("." + C.selectedClass)[0]) } if (C.cookie) { this._cookie(C.selected, C.cookie) } for (var G = 0, M; M = this.$lis[G]; G++) { A(M)[A.inArray(G, C.disabled) != -1 && !A(M).hasClass(C.selectedClass) ? "addClass" : "removeClass"](C.disabledClass) } if (C.cache === false) { this.$tabs.removeData("cache.tabs") } var B, H; if (C.fx) { if (C.fx.constructor == Array) { B = C.fx[0]; H = C.fx[1] } else { B = H = C.fx } } function D(P, Q) { P.css({ display: "" }); if (A.browser.msie && Q.opacity) { P[0].style.removeAttribute("filter") } } var K = H ? function(P, Q) { Q.animate(H, H.duration || "normal", function() { Q.removeClass(C.hideClass); D(Q, H); O._trigger("show", null, O.ui(P, Q[0])) }) } : function(P, Q) { Q.removeClass(C.hideClass); O._trigger("show", null, O.ui(P, Q[0])) }; var L = B ? function(Q, P, R) { P.animate(B, B.duration || "normal", function() { P.addClass(C.hideClass); D(P, B); if (R) { K(Q, R, P) } }) } : function(Q, P, R) { P.addClass(C.hideClass); if (R) { K(Q, R) } }; function F(R, T, P, S) { var Q = [C.selectedClass]; if (C.deselectable) { Q.push(C.deselectableClass) } T.addClass(Q.join(" ")).siblings().removeClass(Q.join(" ")); L(R, P, S) } this.$tabs.unbind(".tabs").bind(C.event + ".tabs", function() { var S = A(this).parents("li:eq(0)"), P = O.$panels.filter(":visible"), R = A(O._sanitizeSelector(this.hash)); if ((S.hasClass(C.selectedClass) && !C.deselectable) || S.hasClass(C.disabledClass) || A(this).hasClass(C.loadingClass) || O._trigger("select", null, O.ui(this, R[0])) === false) { this.blur(); return false } C.selected = O.$tabs.index(this); if (C.deselectable) { if (S.hasClass(C.selectedClass)) { O.options.selected = null; S.removeClass([C.selectedClass, C.deselectableClass].join(" ")); O.$panels.stop(); L(this, P); this.blur(); return false } else { if (!P.length) { O.$panels.stop(); var Q = this; O.load(O.$tabs.index(this), function() { S.addClass([C.selectedClass, C.deselectableClass].join(" ")); K(Q, R) }); this.blur(); return false } } } if (C.cookie) { O._cookie(C.selected, C.cookie) } O.$panels.stop(); if (R.length) { var Q = this; O.load(O.$tabs.index(this), P.length ? function() { F(Q, S, P, R) } : function() { S.addClass(C.selectedClass); K(Q, R) }) } else { throw "jQuery UI Tabs: Mismatching fragment identifier." } if (A.browser.msie) { this.blur() } return false }); if (C.event != "click") { this.$tabs.bind("click.tabs", function() { return false }) } }, add: function(E, D, C) { if (C == undefined) { C = this.$tabs.length } var G = this.options; var I = A(G.tabTemplate.replace(/#\{href\}/g, E).replace(/#\{label\}/g, D)); I.data("destroy.tabs", true); var H = E.indexOf("#") == 0 ? E.replace("#", "") : this._tabId(A("a:first-child", I)[0]); var F = A("#" + H); if (!F.length) { F = A(G.panelTemplate).attr("id", H).addClass(G.hideClass).data("destroy.tabs", true) } F.addClass(G.panelClass); if (C >= this.$lis.length) { I.appendTo(this.element); F.appendTo(this.element[0].parentNode) } else { I.insertBefore(this.$lis[C]); F.insertBefore(this.$panels[C]) } G.disabled = A.map(G.disabled, function(K, J) { return K >= C ? ++K : K }); this._tabify(); if (this.$tabs.length == 1) { I.addClass(G.selectedClass); F.removeClass(G.hideClass); var B = A.data(this.$tabs[0], "load.tabs"); if (B) { this.load(C, B) } } this._trigger("add", null, this.ui(this.$tabs[C], this.$panels[C])) }, remove: function(B) { var D = this.options, E = this.$lis.eq(B).remove(), C = this.$panels.eq(B).remove(); if (E.hasClass(D.selectedClass) && this.$tabs.length > 1) { this.select(B + (B + 1 < this.$tabs.length ? 1 : -1)) } D.disabled = A.map(A.grep(D.disabled, function(G, F) { return G != B }), function(G, F) { return G >= B ? --G : G }); this._tabify(); this._trigger("remove", null, this.ui(E.find("a")[0], C[0])) }, enable: function(B) { var C = this.options; if (A.inArray(B, C.disabled) == -1) { return } var D = this.$lis.eq(B).removeClass(C.disabledClass); if (A.browser.safari) { D.css("display", "inline-block"); setTimeout(function() { D.css("display", "block") }, 0) } C.disabled = A.grep(C.disabled, function(F, E) { return F != B }); this._trigger("enable", null, this.ui(this.$tabs[B], this.$panels[B])) }, disable: function(C) { var B = this, D = this.options; if (C != D.selected) { this.$lis.eq(C).addClass(D.disabledClass); D.disabled.push(C); D.disabled.sort(); this._trigger("disable", null, this.ui(this.$tabs[C], this.$panels[C])) } }, select: function(B) { if (typeof B == "string") { B = this.$tabs.index(this.$tabs.filter("[href$=" + B + "]")[0]) } this.$tabs.eq(B).trigger(this.options.event + ".tabs") }, load: function(G, K) { var L = this, D = this.options, E = this.$tabs.eq(G), J = E[0], H = K == undefined || K === false, B = E.data("load.tabs"); K = K || function() { }; if (!B || !H && A.data(J, "cache.tabs")) { K(); return } var M = function(N) { var O = A(N), P = O.find("*:last"); return P.length && P.is(":not(img)") && P || O }; var C = function() { L.$tabs.filter("." + D.loadingClass).removeClass(D.loadingClass).each(function() { if (D.spinner) { M(this).parent().html(M(this).data("label.tabs")) } }); L.xhr = null }; if (D.spinner) { var I = M(J).html(); M(J).wrapInner("<em></em>").find("em").data("label.tabs", I).html(D.spinner) } var F = A.extend({}, D.ajaxOptions, { url: B, success: function(P, N) { A(L._sanitizeSelector(J.hash)).html(P); C(); if (D.cache) { A.data(J, "cache.tabs", true) } L._trigger("load", null, L.ui(L.$tabs[G], L.$panels[G])); try { D.ajaxOptions.success(P, N) } catch (O) { } K() } }); if (this.xhr) { this.xhr.abort(); C() } E.addClass(D.loadingClass); L.xhr = A.ajax(F) }, url: function(C, B) { this.$tabs.eq(C).removeData("cache.tabs").data("load.tabs", B) }, ui: function(C, B) { return { options: this.options, tab: C, panel: B, index: this.$tabs.index(C)} } }); A.extend(A.ui.tabs, { version: "1.6", getter: "length", defaults: { ajaxOptions: null, cache: false, cookie: null, deselectable: false, deselectableClass: "ui-tabs-deselectable", disabled: [], disabledClass: "ui-tabs-disabled", event: "click", fx: null, hideClass: "ui-tabs-hide", idPrefix: "ui-tabs-", loadingClass: "ui-tabs-loading", navClass: "ui-tabs-nav", panelClass: "ui-tabs-panel", panelTemplate: "<div></div>", selectedClass: "ui-tabs-selected", spinner: "Loading&#8230;", tabTemplate: '<li><a href="#{href}"><span>#{label}</span></a></li>'} }); A.extend(A.ui.tabs.prototype, { rotation: null, rotate: function(C, F) { F = F || false; var B = this, E = this.options.selected; function G() { B.rotation = setInterval(function() { E = ++E < B.$tabs.length ? E : 0; B.select(E) }, C) } function D(H) { if (!H || H.clientX) { clearInterval(B.rotation) } } if (C) { G(); if (!F) { this.$tabs.bind(this.options.event + ".tabs", D) } else { this.$tabs.bind(this.options.event + ".tabs", function() { D(); E = B.options.selected; G() }) } } else { D(); this.$tabs.unbind(this.options.event + ".tabs", D) } } }) })(jQuery); /*
 * jQuery UI Datepicker 1.6
 *
 * Copyright (c) 2008 AUTHORS.txt (http://ui.jquery.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Datepicker
 *
 * Depends:
 *	ui.core.js
 */
(function($) { $.extend($.ui, { datepicker: { version: "1.6"} }); var PROP_NAME = "datepicker"; function Datepicker() { this.debug = false; this._curInst = null; this._keyEvent = false; this._disabledInputs = []; this._datepickerShowing = false; this._inDialog = false; this._mainDivId = "ui-datepicker-div"; this._inlineClass = "ui-datepicker-inline"; this._appendClass = "ui-datepicker-append"; this._triggerClass = "ui-datepicker-trigger"; this._dialogClass = "ui-datepicker-dialog"; this._promptClass = "ui-datepicker-prompt"; this._disableClass = "ui-datepicker-disabled"; this._unselectableClass = "ui-datepicker-unselectable"; this._currentClass = "ui-datepicker-current-day"; this._dayOverClass = "ui-datepicker-days-cell-over"; this._weekOverClass = "ui-datepicker-week-over"; this.regional = []; this.regional[""] = { clearText: "Clear", clearStatus: "Erase the current date", closeText: "Close", closeStatus: "Close without change", prevText: "&#x3c;Prev", prevStatus: "Show the previous month", prevBigText: "&#x3c;&#x3c;", prevBigStatus: "Show the previous year", nextText: "Next&#x3e;", nextStatus: "Show the next month", nextBigText: "&#x3e;&#x3e;", nextBigStatus: "Show the next year", currentText: "Today", currentStatus: "Show the current month", monthNames: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], monthNamesShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], monthStatus: "Show a different month", yearStatus: "Show a different year", weekHeader: "Wk", weekStatus: "Week of the year", dayNames: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], dayNamesShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], dayNamesMin: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"], dayStatus: "Set DD as first week day", dateStatus: "Select DD, M d", dateFormat: "mm/dd/yy", firstDay: 0, initStatus: "Select a date", isRTL: false }; this._defaults = { showOn: "focus", showAnim: "show", showOptions: {}, defaultDate: null, appendText: "", buttonText: "...", buttonImage: "", buttonImageOnly: false, closeAtTop: true, mandatory: false, hideIfNoPrevNext: false, navigationAsDateFormat: false, showBigPrevNext: false, gotoCurrent: false, changeMonth: true, changeYear: true, showMonthAfterYear: false, yearRange: "-10:+10", changeFirstDay: true, highlightWeek: false, showOtherMonths: false, showWeeks: false, calculateWeek: this.iso8601Week, shortYearCutoff: "+10", showStatus: false, statusForDate: this.dateStatus, minDate: null, maxDate: null, duration: "normal", beforeShowDay: null, beforeShow: null, onSelect: null, onChangeMonthYear: null, onClose: null, numberOfMonths: 1, showCurrentAtPos: 0, stepMonths: 1, stepBigMonths: 12, rangeSelect: false, rangeSeparator: " - ", altField: "", altFormat: "", constrainInput: true }; $.extend(this._defaults, this.regional[""]); this.dpDiv = $('<div id="' + this._mainDivId + '" style="display: none;"></div>') } $.extend(Datepicker.prototype, { markerClassName: "hasDatepicker", log: function() { if (this.debug) { console.log.apply("", arguments) } }, setDefaults: function(settings) { extendRemove(this._defaults, settings || {}); return this }, _attachDatepicker: function(target, settings) { var inlineSettings = null; for (var attrName in this._defaults) { var attrValue = target.getAttribute("date:" + attrName); if (attrValue) { inlineSettings = inlineSettings || {}; try { inlineSettings[attrName] = eval(attrValue) } catch (err) { inlineSettings[attrName] = attrValue } } } var nodeName = target.nodeName.toLowerCase(); var inline = (nodeName == "div" || nodeName == "span"); if (!target.id) { target.id = "dp" + (++this.uuid) } var inst = this._newInst($(target), inline); inst.settings = $.extend({}, settings || {}, inlineSettings || {}); if (nodeName == "input") { this._connectDatepicker(target, inst) } else { if (inline) { this._inlineDatepicker(target, inst) } } }, _newInst: function(target, inline) { var id = target[0].id.replace(/([:\[\]\.])/g, "\\\\$1"); return { id: id, input: target, selectedDay: 0, selectedMonth: 0, selectedYear: 0, drawMonth: 0, drawYear: 0, inline: inline, dpDiv: (!inline ? this.dpDiv : $('<div class="' + this._inlineClass + '"></div>'))} }, _connectDatepicker: function(target, inst) { var input = $(target); if (input.hasClass(this.markerClassName)) { return } var appendText = this._get(inst, "appendText"); var isRTL = this._get(inst, "isRTL"); if (appendText) { input[isRTL ? "before" : "after"]('<span class="' + this._appendClass + '">' + appendText + "</span>") } var showOn = this._get(inst, "showOn"); if (showOn == "focus" || showOn == "both") { input.focus(this._showDatepicker) } if (showOn == "button" || showOn == "both") { var buttonText = this._get(inst, "buttonText"); var buttonImage = this._get(inst, "buttonImage"); var trigger = $(this._get(inst, "buttonImageOnly") ? $("<img/>").addClass(this._triggerClass).attr({ src: buttonImage, alt: buttonText, title: buttonText }) : $('<button type="button"></button>').addClass(this._triggerClass).html(buttonImage == "" ? buttonText : $("<img/>").attr({ src: buttonImage, alt: buttonText, title: buttonText }))); input[isRTL ? "before" : "after"](trigger); trigger.click(function() { if ($.datepicker._datepickerShowing && $.datepicker._lastInput == target) { $.datepicker._hideDatepicker() } else { $.datepicker._showDatepicker(target) } return false }) } input.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).bind("setData.datepicker", function(event, key, value) { inst.settings[key] = value }).bind("getData.datepicker", function(event, key) { return this._get(inst, key) }); $.data(target, PROP_NAME, inst) }, _inlineDatepicker: function(target, inst) { var divSpan = $(target); if (divSpan.hasClass(this.markerClassName)) { return } divSpan.addClass(this.markerClassName).append(inst.dpDiv).bind("setData.datepicker", function(event, key, value) { inst.settings[key] = value }).bind("getData.datepicker", function(event, key) { return this._get(inst, key) }); $.data(target, PROP_NAME, inst); this._setDate(inst, this._getDefaultDate(inst)); this._updateDatepicker(inst); this._updateAlternate(inst) }, _dialogDatepicker: function(input, dateText, onSelect, settings, pos) { var inst = this._dialogInst; if (!inst) { var id = "dp" + (++this.uuid); this._dialogInput = $('<input type="text" id="' + id + '" size="1" style="position: absolute; top: -100px;"/>'); this._dialogInput.keydown(this._doKeyDown); $("body").append(this._dialogInput); inst = this._dialogInst = this._newInst(this._dialogInput, false); inst.settings = {}; $.data(this._dialogInput[0], PROP_NAME, inst) } extendRemove(inst.settings, settings || {}); this._dialogInput.val(dateText); this._pos = (pos ? (pos.length ? pos : [pos.pageX, pos.pageY]) : null); if (!this._pos) { var browserWidth = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth; var browserHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight; var scrollX = document.documentElement.scrollLeft || document.body.scrollLeft; var scrollY = document.documentElement.scrollTop || document.body.scrollTop; this._pos = [(browserWidth / 2) - 100 + scrollX, (browserHeight / 2) - 150 + scrollY] } this._dialogInput.css("left", this._pos[0] + "px").css("top", this._pos[1] + "px"); inst.settings.onSelect = onSelect; this._inDialog = true; this.dpDiv.addClass(this._dialogClass); this._showDatepicker(this._dialogInput[0]); if ($.blockUI) { $.blockUI(this.dpDiv) } $.data(this._dialogInput[0], PROP_NAME, inst); return this }, _destroyDatepicker: function(target) { var $target = $(target); if (!$target.hasClass(this.markerClassName)) { return } var nodeName = target.nodeName.toLowerCase(); $.removeData(target, PROP_NAME); if (nodeName == "input") { $target.siblings("." + this._appendClass).remove().end().siblings("." + this._triggerClass).remove().end().removeClass(this.markerClassName).unbind("focus", this._showDatepicker).unbind("keydown", this._doKeyDown).unbind("keypress", this._doKeyPress) } else { if (nodeName == "div" || nodeName == "span") { $target.removeClass(this.markerClassName).empty() } } }, _enableDatepicker: function(target) { var $target = $(target); if (!$target.hasClass(this.markerClassName)) { return } var nodeName = target.nodeName.toLowerCase(); if (nodeName == "input") { target.disabled = false; $target.siblings("button." + this._triggerClass).each(function() { this.disabled = false }).end().siblings("img." + this._triggerClass).css({ opacity: "1.0", cursor: "" }) } else { if (nodeName == "div" || nodeName == "span") { $target.children("." + this._disableClass).remove() } } this._disabledInputs = $.map(this._disabledInputs, function(value) { return (value == target ? null : value) }) }, _disableDatepicker: function(target) { var $target = $(target); if (!$target.hasClass(this.markerClassName)) { return } var nodeName = target.nodeName.toLowerCase(); if (nodeName == "input") { target.disabled = true; $target.siblings("button." + this._triggerClass).each(function() { this.disabled = true }).end().siblings("img." + this._triggerClass).css({ opacity: "0.5", cursor: "default" }) } else { if (nodeName == "div" || nodeName == "span") { var inline = $target.children("." + this._inlineClass); var offset = inline.offset(); var relOffset = { left: 0, top: 0 }; inline.parents().each(function() { if ($(this).css("position") == "relative") { relOffset = $(this).offset(); return false } }); $target.prepend('<div class="' + this._disableClass + '" style="' + ($.browser.msie ? "background-color: transparent; " : "") + "width: " + inline.width() + "px; height: " + inline.height() + "px; left: " + (offset.left - relOffset.left) + "px; top: " + (offset.top - relOffset.top) + 'px;"></div>') } } this._disabledInputs = $.map(this._disabledInputs, function(value) { return (value == target ? null : value) }); this._disabledInputs[this._disabledInputs.length] = target }, _isDisabledDatepicker: function(target) { if (!target) { return false } for (var i = 0; i < this._disabledInputs.length; i++) { if (this._disabledInputs[i] == target) { return true } } return false }, _getInst: function(target) { try { return $.data(target, PROP_NAME) } catch (err) { throw "Missing instance data for this datepicker" } }, _optionDatepicker: function(target, name, value) { var settings = name || {}; if (typeof name == "string") { settings = {}; settings[name] = value } var inst = this._getInst(target); if (inst) { if (this._curInst == inst) { this._hideDatepicker(null) } extendRemove(inst.settings, settings); var date = new Date(); extendRemove(inst, { rangeStart: null, endDay: null, endMonth: null, endYear: null, selectedDay: date.getDate(), selectedMonth: date.getMonth(), selectedYear: date.getFullYear(), currentDay: date.getDate(), currentMonth: date.getMonth(), currentYear: date.getFullYear(), drawMonth: date.getMonth(), drawYear: date.getFullYear() }); this._updateDatepicker(inst) } }, _changeDatepicker: function(target, name, value) { this._optionDatepicker(target, name, value) }, _refreshDatepicker: function(target) { var inst = this._getInst(target); if (inst) { this._updateDatepicker(inst) } }, _setDateDatepicker: function(target, date, endDate) { var inst = this._getInst(target); if (inst) { this._setDate(inst, date, endDate); this._updateDatepicker(inst); this._updateAlternate(inst) } }, _getDateDatepicker: function(target) { var inst = this._getInst(target); if (inst && !inst.inline) { this._setDateFromField(inst) } return (inst ? this._getDate(inst) : null) }, _doKeyDown: function(event) { var inst = $.datepicker._getInst(event.target); var handled = true; inst._keyEvent = true; if ($.datepicker._datepickerShowing) { switch (event.keyCode) { case 9: $.datepicker._hideDatepicker(null, ""); break; case 13: var sel = $("td." + $.datepicker._dayOverClass + ", td." + $.datepicker._currentClass, inst.dpDiv); if (sel[0]) { $.datepicker._selectDay(event.target, inst.selectedMonth, inst.selectedYear, sel[0]) } else { $.datepicker._hideDatepicker(null, $.datepicker._get(inst, "duration")) } return false; break; case 27: $.datepicker._hideDatepicker(null, $.datepicker._get(inst, "duration")); break; case 33: $.datepicker._adjustDate(event.target, (event.ctrlKey ? -$.datepicker._get(inst, "stepBigMonths") : -$.datepicker._get(inst, "stepMonths")), "M"); break; case 34: $.datepicker._adjustDate(event.target, (event.ctrlKey ? +$.datepicker._get(inst, "stepBigMonths") : +$.datepicker._get(inst, "stepMonths")), "M"); break; case 35: if (event.ctrlKey || event.metaKey) { $.datepicker._clearDate(event.target) } handled = event.ctrlKey || event.metaKey; break; case 36: if (event.ctrlKey || event.metaKey) { $.datepicker._gotoToday(event.target) } handled = event.ctrlKey || event.metaKey; break; case 37: if (event.ctrlKey || event.metaKey) { $.datepicker._adjustDate(event.target, -1, "D") } handled = event.ctrlKey || event.metaKey; if (event.originalEvent.altKey) { $.datepicker._adjustDate(event.target, (event.ctrlKey ? -$.datepicker._get(inst, "stepBigMonths") : -$.datepicker._get(inst, "stepMonths")), "M") } break; case 38: if (event.ctrlKey || event.metaKey) { $.datepicker._adjustDate(event.target, -7, "D") } handled = event.ctrlKey || event.metaKey; break; case 39: if (event.ctrlKey || event.metaKey) { $.datepicker._adjustDate(event.target, +1, "D") } handled = event.ctrlKey || event.metaKey; if (event.originalEvent.altKey) { $.datepicker._adjustDate(event.target, (event.ctrlKey ? +$.datepicker._get(inst, "stepBigMonths") : +$.datepicker._get(inst, "stepMonths")), "M") } break; case 40: if (event.ctrlKey || event.metaKey) { $.datepicker._adjustDate(event.target, +7, "D") } handled = event.ctrlKey || event.metaKey; break; default: handled = false } } else { if (event.keyCode == 36 && event.ctrlKey) { $.datepicker._showDatepicker(this) } else { handled = false } } if (handled) { event.preventDefault(); event.stopPropagation() } }, _doKeyPress: function(event) { var inst = $.datepicker._getInst(event.target); if ($.datepicker._get(inst, "constrainInput")) { var chars = $.datepicker._possibleChars($.datepicker._get(inst, "dateFormat")); var chr = String.fromCharCode(event.charCode == undefined ? event.keyCode : event.charCode); return event.ctrlKey || (chr < " " || !chars || chars.indexOf(chr) > -1) } }, _showDatepicker: function(input) { input = input.target || input; if (input.nodeName.toLowerCase() != "input") { input = $("input", input.parentNode)[0] } if ($.datepicker._isDisabledDatepicker(input) || $.datepicker._lastInput == input) { return } var inst = $.datepicker._getInst(input); var beforeShow = $.datepicker._get(inst, "beforeShow"); extendRemove(inst.settings, (beforeShow ? beforeShow.apply(input, [input, inst]) : {})); $.datepicker._hideDatepicker(null, ""); $.datepicker._lastInput = input; $.datepicker._setDateFromField(inst); if ($.datepicker._inDialog) { input.value = "" } if (!$.datepicker._pos) { $.datepicker._pos = $.datepicker._findPos(input); $.datepicker._pos[1] += input.offsetHeight } var isFixed = false; $(input).parents().each(function() { isFixed |= $(this).css("position") == "fixed"; return !isFixed }); if (isFixed && $.browser.opera) { $.datepicker._pos[0] -= document.documentElement.scrollLeft; $.datepicker._pos[1] -= document.documentElement.scrollTop } var offset = { left: $.datepicker._pos[0], top: $.datepicker._pos[1] }; $.datepicker._pos = null; inst.rangeStart = null; inst.dpDiv.css({ position: "absolute", display: "block", top: "-1000px" }); $.datepicker._updateDatepicker(inst); inst.dpDiv.width($.datepicker._getNumberOfMonths(inst)[1] * $(".ui-datepicker", inst.dpDiv[0])[0].offsetWidth); offset = $.datepicker._checkOffset(inst, offset, isFixed); inst.dpDiv.css({ position: ($.datepicker._inDialog && $.blockUI ? "static" : (isFixed ? "fixed" : "absolute")), display: "none", left: offset.left + "px", top: offset.top + "px" }); if (!inst.inline) { var showAnim = $.datepicker._get(inst, "showAnim") || "show"; var duration = $.datepicker._get(inst, "duration"); var postProcess = function() { $.datepicker._datepickerShowing = true; if ($.browser.msie && parseInt($.browser.version, 10) < 7) { $("iframe.ui-datepicker-cover").css({ width: inst.dpDiv.width() + 4, height: inst.dpDiv.height() + 4 }) } }; if ($.effects && $.effects[showAnim]) { inst.dpDiv.show(showAnim, $.datepicker._get(inst, "showOptions"), duration, postProcess) } else { inst.dpDiv[showAnim](duration, postProcess) } if (duration == "") { postProcess() } if (inst.input[0].type != "hidden") { inst.input[0].focus() } $.datepicker._curInst = inst } }, _updateDatepicker: function(inst) { var dims = { width: inst.dpDiv.width() + 4, height: inst.dpDiv.height() + 4 }; inst.dpDiv.empty().append(this._generateHTML(inst)).find("iframe.ui-datepicker-cover").css({ width: dims.width, height: dims.height }); var numMonths = this._getNumberOfMonths(inst); inst.dpDiv[(numMonths[0] != 1 || numMonths[1] != 1 ? "add" : "remove") + "Class"]("ui-datepicker-multi"); inst.dpDiv[(this._get(inst, "isRTL") ? "add" : "remove") + "Class"]("ui-datepicker-rtl"); if (inst.input && inst.input[0].type != "hidden" && inst == $.datepicker._curInst) { $(inst.input[0]).focus() } }, _checkOffset: function(inst, offset, isFixed) { var pos = inst.input ? this._findPos(inst.input[0]) : null; var browserWidth = window.innerWidth || (document.documentElement ? document.documentElement.clientWidth : document.body.clientWidth); var browserHeight = window.innerHeight || (document.documentElement ? document.documentElement.clientHeight : document.body.clientHeight); var scrollX = document.documentElement.scrollLeft || document.body.scrollLeft; var scrollY = document.documentElement.scrollTop || document.body.scrollTop; if (this._get(inst, "isRTL") || (offset.left + inst.dpDiv.width() - scrollX) > browserWidth) { offset.left = Math.max((isFixed ? 0 : scrollX), pos[0] + (inst.input ? inst.input.width() : 0) - (isFixed ? scrollX : 0) - inst.dpDiv.width() - (isFixed && $.browser.opera ? document.documentElement.scrollLeft : 0)) } else { offset.left -= (isFixed ? scrollX : 0) } if ((offset.top + inst.dpDiv.height() - scrollY) > browserHeight) { offset.top = Math.max((isFixed ? 0 : scrollY), pos[1] - (isFixed ? scrollY : 0) - (this._inDialog ? 0 : inst.dpDiv.height()) - (isFixed && $.browser.opera ? document.documentElement.scrollTop : 0)) } else { offset.top -= (isFixed ? scrollY : 0) } return offset }, _findPos: function(obj) { while (obj && (obj.type == "hidden" || obj.nodeType != 1)) { obj = obj.nextSibling } var position = $(obj).offset(); return [position.left, position.top] }, _hideDatepicker: function(input, duration) { var inst = this._curInst; if (!inst || (input && inst != $.data(input, PROP_NAME))) { return } var rangeSelect = this._get(inst, "rangeSelect"); if (rangeSelect && inst.stayOpen) { this._selectDate("#" + inst.id, this._formatDate(inst, inst.currentDay, inst.currentMonth, inst.currentYear)) } inst.stayOpen = false; if (this._datepickerShowing) { duration = (duration != null ? duration : this._get(inst, "duration")); var showAnim = this._get(inst, "showAnim"); var postProcess = function() { $.datepicker._tidyDialog(inst) }; if (duration != "" && $.effects && $.effects[showAnim]) { inst.dpDiv.hide(showAnim, $.datepicker._get(inst, "showOptions"), duration, postProcess) } else { inst.dpDiv[(duration == "" ? "hide" : (showAnim == "slideDown" ? "slideUp" : (showAnim == "fadeIn" ? "fadeOut" : "hide")))](duration, postProcess) } if (duration == "") { this._tidyDialog(inst) } var onClose = this._get(inst, "onClose"); if (onClose) { onClose.apply((inst.input ? inst.input[0] : null), [(inst.input ? inst.input.val() : ""), inst]) } this._datepickerShowing = false; this._lastInput = null; inst.settings.prompt = null; if (this._inDialog) { this._dialogInput.css({ position: "absolute", left: "0", top: "-100px" }); if ($.blockUI) { $.unblockUI(); $("body").append(this.dpDiv) } } this._inDialog = false } this._curInst = null }, _tidyDialog: function(inst) { inst.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker"); $("." + this._promptClass, inst.dpDiv).remove() }, _checkExternalClick: function(event) { if (!$.datepicker._curInst) { return } var $target = $(event.target); if (($target.parents("#" + $.datepicker._mainDivId).length == 0) && !$target.hasClass($.datepicker.markerClassName) && !$target.hasClass($.datepicker._triggerClass) && $.datepicker._datepickerShowing && !($.datepicker._inDialog && $.blockUI)) { $.datepicker._hideDatepicker(null, "") } }, _adjustDate: function(id, offset, period) { var target = $(id); var inst = this._getInst(target[0]); this._adjustInstDate(inst, offset, period); this._updateDatepicker(inst) }, _gotoToday: function(id) { var target = $(id); var inst = this._getInst(target[0]); if (this._get(inst, "gotoCurrent") && inst.currentDay) { inst.selectedDay = inst.currentDay; inst.drawMonth = inst.selectedMonth = inst.currentMonth; inst.drawYear = inst.selectedYear = inst.currentYear } else { var date = new Date(); inst.selectedDay = date.getDate(); inst.drawMonth = inst.selectedMonth = date.getMonth(); inst.drawYear = inst.selectedYear = date.getFullYear() } this._notifyChange(inst); this._adjustDate(target) }, _selectMonthYear: function(id, select, period) { var target = $(id); var inst = this._getInst(target[0]); inst._selectingMonthYear = false; inst["selected" + (period == "M" ? "Month" : "Year")] = inst["draw" + (period == "M" ? "Month" : "Year")] = parseInt(select.options[select.selectedIndex].value, 10); this._notifyChange(inst); this._adjustDate(target) }, _clickMonthYear: function(id) { var target = $(id); var inst = this._getInst(target[0]); if (inst.input && inst._selectingMonthYear && !$.browser.msie) { inst.input[0].focus() } inst._selectingMonthYear = !inst._selectingMonthYear }, _changeFirstDay: function(id, day) { var target = $(id); var inst = this._getInst(target[0]); inst.settings.firstDay = day; this._updateDatepicker(inst) }, _selectDay: function(id, month, year, td) { if ($(td).hasClass(this._unselectableClass)) { return } var target = $(id); var inst = this._getInst(target[0]); var rangeSelect = this._get(inst, "rangeSelect"); if (rangeSelect) { inst.stayOpen = !inst.stayOpen; if (inst.stayOpen) { $(".ui-datepicker td", inst.dpDiv).removeClass(this._currentClass); $(td).addClass(this._currentClass) } } inst.selectedDay = inst.currentDay = $("a", td).html(); inst.selectedMonth = inst.currentMonth = month; inst.selectedYear = inst.currentYear = year; if (inst.stayOpen) { inst.endDay = inst.endMonth = inst.endYear = null } else { if (rangeSelect) { inst.endDay = inst.currentDay; inst.endMonth = inst.currentMonth; inst.endYear = inst.currentYear } } this._selectDate(id, this._formatDate(inst, inst.currentDay, inst.currentMonth, inst.currentYear)); if (inst.stayOpen) { inst.rangeStart = this._daylightSavingAdjust(new Date(inst.currentYear, inst.currentMonth, inst.currentDay)); this._updateDatepicker(inst) } else { if (rangeSelect) { inst.selectedDay = inst.currentDay = inst.rangeStart.getDate(); inst.selectedMonth = inst.currentMonth = inst.rangeStart.getMonth(); inst.selectedYear = inst.currentYear = inst.rangeStart.getFullYear(); inst.rangeStart = null; if (inst.inline) { this._updateDatepicker(inst) } } } }, _clearDate: function(id) { var target = $(id); var inst = this._getInst(target[0]); if (this._get(inst, "mandatory")) { return } inst.stayOpen = false; inst.endDay = inst.endMonth = inst.endYear = inst.rangeStart = null; this._selectDate(target, "") }, _selectDate: function(id, dateStr) { var target = $(id); var inst = this._getInst(target[0]); dateStr = (dateStr != null ? dateStr : this._formatDate(inst)); if (this._get(inst, "rangeSelect") && dateStr) { dateStr = (inst.rangeStart ? this._formatDate(inst, inst.rangeStart) : dateStr) + this._get(inst, "rangeSeparator") + dateStr } if (inst.input) { inst.input.val(dateStr) } this._updateAlternate(inst); var onSelect = this._get(inst, "onSelect"); if (onSelect) { onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]) } else { if (inst.input) { inst.input.trigger("change") } } if (inst.inline) { this._updateDatepicker(inst) } else { if (!inst.stayOpen) { this._hideDatepicker(null, this._get(inst, "duration")); this._lastInput = inst.input[0]; if (typeof (inst.input[0]) != "object") { inst.input[0].focus() } this._lastInput = null } } }, _updateAlternate: function(inst) { var altField = this._get(inst, "altField"); if (altField) { var altFormat = this._get(inst, "altFormat") || this._get(inst, "dateFormat"); var date = this._getDate(inst); dateStr = (isArray(date) ? (!date[0] && !date[1] ? "" : this.formatDate(altFormat, date[0], this._getFormatConfig(inst)) + this._get(inst, "rangeSeparator") + this.formatDate(altFormat, date[1] || date[0], this._getFormatConfig(inst))) : this.formatDate(altFormat, date, this._getFormatConfig(inst))); $(altField).each(function() { $(this).val(dateStr) }) } }, noWeekends: function(date) { var day = date.getDay(); return [(day > 0 && day < 6), ""] }, iso8601Week: function(date) { var checkDate = new Date(date.getFullYear(), date.getMonth(), date.getDate()); var firstMon = new Date(checkDate.getFullYear(), 1 - 1, 4); var firstDay = firstMon.getDay() || 7; firstMon.setDate(firstMon.getDate() + 1 - firstDay); if (firstDay < 4 && checkDate < firstMon) { checkDate.setDate(checkDate.getDate() - 3); return $.datepicker.iso8601Week(checkDate) } else { if (checkDate > new Date(checkDate.getFullYear(), 12 - 1, 28)) { firstDay = new Date(checkDate.getFullYear() + 1, 1 - 1, 4).getDay() || 7; if (firstDay > 4 && (checkDate.getDay() || 7) < firstDay - 3) { return 1 } } } return Math.floor(((checkDate - firstMon) / 86400000) / 7) + 1 }, dateStatus: function(date, inst) { return $.datepicker.formatDate($.datepicker._get(inst, "dateStatus"), date, $.datepicker._getFormatConfig(inst)) }, parseDate: function(format, value, settings) { if (format == null || value == null) { throw "Invalid arguments" } value = (typeof value == "object" ? value.toString() : value + ""); if (value == "") { return null } var shortYearCutoff = (settings ? settings.shortYearCutoff : null) || this._defaults.shortYearCutoff; var dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort; var dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames; var monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort; var monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames; var year = -1; var month = -1; var day = -1; var doy = -1; var literal = false; var lookAhead = function(match) { var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match); if (matches) { iFormat++ } return matches }; var getNumber = function(match) { lookAhead(match); var origSize = (match == "@" ? 14 : (match == "y" ? 4 : (match == "o" ? 3 : 2))); var size = origSize; var num = 0; while (size > 0 && iValue < value.length && value.charAt(iValue) >= "0" && value.charAt(iValue) <= "9") { num = num * 10 + parseInt(value.charAt(iValue++), 10); size-- } if (size == origSize) { throw "Missing number at position " + iValue } return num }; var getName = function(match, shortNames, longNames) { var names = (lookAhead(match) ? longNames : shortNames); var size = 0; for (var j = 0; j < names.length; j++) { size = Math.max(size, names[j].length) } var name = ""; var iInit = iValue; while (size > 0 && iValue < value.length) { name += value.charAt(iValue++); for (var i = 0; i < names.length; i++) { if (name == names[i]) { return i + 1 } } size-- } throw "Unknown name at position " + iInit }; var checkLiteral = function() { if (value.charAt(iValue) != format.charAt(iFormat)) { throw "Unexpected literal at position " + iValue } iValue++ }; var iValue = 0; for (var iFormat = 0; iFormat < format.length; iFormat++) { if (literal) { if (format.charAt(iFormat) == "'" && !lookAhead("'")) { literal = false } else { checkLiteral() } } else { switch (format.charAt(iFormat)) { case "d": day = getNumber("d"); break; case "D": getName("D", dayNamesShort, dayNames); break; case "o": doy = getNumber("o"); break; case "m": month = getNumber("m"); break; case "M": month = getName("M", monthNamesShort, monthNames); break; case "y": year = getNumber("y"); break; case "@": var date = new Date(getNumber("@")); year = date.getFullYear(); month = date.getMonth() + 1; day = date.getDate(); break; case "'": if (lookAhead("'")) { checkLiteral() } else { literal = true } break; default: checkLiteral() } } } if (year == -1) { year = new Date().getFullYear() } else { if (year < 100) { year += new Date().getFullYear() - new Date().getFullYear() % 100 + (year <= shortYearCutoff ? 0 : -100) } } if (doy > -1) { month = 1; day = doy; do { var dim = this._getDaysInMonth(year, month - 1); if (day <= dim) { break } month++; day -= dim } while (true) } var date = this._daylightSavingAdjust(new Date(year, month - 1, day)); if (date.getFullYear() != year || date.getMonth() + 1 != month || date.getDate() != day) { throw "Invalid date" } return date }, ATOM: "yy-mm-dd", COOKIE: "D, dd M yy", ISO_8601: "yy-mm-dd", RFC_822: "D, d M y", RFC_850: "DD, dd-M-y", RFC_1036: "D, d M y", RFC_1123: "D, d M yy", RFC_2822: "D, d M yy", RSS: "D, d M y", TIMESTAMP: "@", W3C: "yy-mm-dd", formatDate: function(format, date, settings) { if (!date) { return "" } var dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort; var dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames; var monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort; var monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames; var lookAhead = function(match) { var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match); if (matches) { iFormat++ } return matches }; var formatNumber = function(match, value, len) { var num = "" + value; if (lookAhead(match)) { while (num.length < len) { num = "0" + num } } return num }; var formatName = function(match, value, shortNames, longNames) { return (lookAhead(match) ? longNames[value] : shortNames[value]) }; var output = ""; var literal = false; if (date) { for (var iFormat = 0; iFormat < format.length; iFormat++) { if (literal) { if (format.charAt(iFormat) == "'" && !lookAhead("'")) { literal = false } else { output += format.charAt(iFormat) } } else { switch (format.charAt(iFormat)) { case "d": output += formatNumber("d", date.getDate(), 2); break; case "D": output += formatName("D", date.getDay(), dayNamesShort, dayNames); break; case "o": var doy = date.getDate(); for (var m = date.getMonth() - 1; m >= 0; m--) { doy += this._getDaysInMonth(date.getFullYear(), m) } output += formatNumber("o", doy, 3); break; case "m": output += formatNumber("m", date.getMonth() + 1, 2); break; case "M": output += formatName("M", date.getMonth(), monthNamesShort, monthNames); break; case "y": output += (lookAhead("y") ? date.getFullYear() : (date.getYear() % 100 < 10 ? "0" : "") + date.getYear() % 100); break; case "@": output += date.getTime(); break; case "'": if (lookAhead("'")) { output += "'" } else { literal = true } break; default: output += format.charAt(iFormat) } } } } return output }, _possibleChars: function(format) { var chars = ""; var literal = false; for (var iFormat = 0; iFormat < format.length; iFormat++) { if (literal) { if (format.charAt(iFormat) == "'" && !lookAhead("'")) { literal = false } else { chars += format.charAt(iFormat) } } else { switch (format.charAt(iFormat)) { case "d": case "m": case "y": case "@": chars += "0123456789"; break; case "D": case "M": return null; case "'": if (lookAhead("'")) { chars += "'" } else { literal = true } break; default: chars += format.charAt(iFormat) } } } return chars }, _get: function(inst, name) { return inst.settings[name] !== undefined ? inst.settings[name] : this._defaults[name] }, _setDateFromField: function(inst) { var dateFormat = this._get(inst, "dateFormat"); var dates = inst.input ? inst.input.val().split(this._get(inst, "rangeSeparator")) : null; inst.endDay = inst.endMonth = inst.endYear = null; var date = defaultDate = this._getDefaultDate(inst); if (dates.length > 0) { var settings = this._getFormatConfig(inst); if (dates.length > 1) { date = this.parseDate(dateFormat, dates[1], settings) || defaultDate; inst.endDay = date.getDate(); inst.endMonth = date.getMonth(); inst.endYear = date.getFullYear() } try { date = this.parseDate(dateFormat, dates[0], settings) || defaultDate } catch (event) { this.log(event); date = defaultDate } } inst.selectedDay = date.getDate(); inst.drawMonth = inst.selectedMonth = date.getMonth(); inst.drawYear = inst.selectedYear = date.getFullYear(); inst.currentDay = (dates[0] ? date.getDate() : 0); inst.currentMonth = (dates[0] ? date.getMonth() : 0); inst.currentYear = (dates[0] ? date.getFullYear() : 0); this._adjustInstDate(inst) }, _getDefaultDate: function(inst) { var date = this._determineDate(this._get(inst, "defaultDate"), new Date()); var minDate = this._getMinMaxDate(inst, "min", true); var maxDate = this._getMinMaxDate(inst, "max"); date = (minDate && date < minDate ? minDate : date); date = (maxDate && date > maxDate ? maxDate : date); return date }, _determineDate: function(date, defaultDate) { var offsetNumeric = function(offset) { var date = new Date(); date.setDate(date.getDate() + offset); return date }; var offsetString = function(offset, getDaysInMonth) { var date = new Date(); var year = date.getFullYear(); var month = date.getMonth(); var day = date.getDate(); var pattern = /([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g; var matches = pattern.exec(offset); while (matches) { switch (matches[2] || "d") { case "d": case "D": day += parseInt(matches[1], 10); break; case "w": case "W": day += parseInt(matches[1], 10) * 7; break; case "m": case "M": month += parseInt(matches[1], 10); day = Math.min(day, getDaysInMonth(year, month)); break; case "y": case "Y": year += parseInt(matches[1], 10); day = Math.min(day, getDaysInMonth(year, month)); break } matches = pattern.exec(offset) } return new Date(year, month, day) }; date = (date == null ? defaultDate : (typeof date == "string" ? offsetString(date, this._getDaysInMonth) : (typeof date == "number" ? (isNaN(date) ? defaultDate : offsetNumeric(date)) : date))); date = (date && date.toString() == "Invalid Date" ? defaultDate : date); if (date) { date.setHours(0); date.setMinutes(0); date.setSeconds(0); date.setMilliseconds(0) } return this._daylightSavingAdjust(date) }, _daylightSavingAdjust: function(date) { if (!date) { return null } date.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0); return date }, _setDate: function(inst, date, endDate) { var clear = !(date); var origMonth = inst.selectedMonth; var origYear = inst.selectedYear; date = this._determineDate(date, new Date()); inst.selectedDay = inst.currentDay = date.getDate(); inst.drawMonth = inst.selectedMonth = inst.currentMonth = date.getMonth(); inst.drawYear = inst.selectedYear = inst.currentYear = date.getFullYear(); if (this._get(inst, "rangeSelect")) { if (endDate) { endDate = this._determineDate(endDate, null); inst.endDay = endDate.getDate(); inst.endMonth = endDate.getMonth(); inst.endYear = endDate.getFullYear() } else { inst.endDay = inst.currentDay; inst.endMonth = inst.currentMonth; inst.endYear = inst.currentYear } } if (origMonth != inst.selectedMonth || origYear != inst.selectedYear) { this._notifyChange(inst) } this._adjustInstDate(inst); if (inst.input) { inst.input.val(clear ? "" : this._formatDate(inst) + (!this._get(inst, "rangeSelect") ? "" : this._get(inst, "rangeSeparator") + this._formatDate(inst, inst.endDay, inst.endMonth, inst.endYear))) } }, _getDate: function(inst) { var startDate = (!inst.currentYear || (inst.input && inst.input.val() == "") ? null : this._daylightSavingAdjust(new Date(inst.currentYear, inst.currentMonth, inst.currentDay))); if (this._get(inst, "rangeSelect")) { return [inst.rangeStart || startDate, (!inst.endYear ? inst.rangeStart || startDate : this._daylightSavingAdjust(new Date(inst.endYear, inst.endMonth, inst.endDay)))] } else { return startDate } }, _generateHTML: function(inst) { var today = new Date(); today = this._daylightSavingAdjust(new Date(today.getFullYear(), today.getMonth(), today.getDate())); var showStatus = this._get(inst, "showStatus"); var initStatus = this._get(inst, "initStatus") || "&#xa0;"; var isRTL = this._get(inst, "isRTL"); var clear = (this._get(inst, "mandatory") ? "" : '<div class="ui-datepicker-clear"><a onclick="jQuery.datepicker._clearDate(\'#' + inst.id + "');\"" + this._addStatus(showStatus, inst.id, this._get(inst, "clearStatus"), initStatus) + ">" + this._get(inst, "clearText") + "</a></div>"); var controls = '<div class="ui-datepicker-control">' + (isRTL ? "" : clear) + '<div class="ui-datepicker-close"><a onclick="jQuery.datepicker._hideDatepicker();"' + this._addStatus(showStatus, inst.id, this._get(inst, "closeStatus"), initStatus) + ">" + this._get(inst, "closeText") + "</a></div>" + (isRTL ? clear : "") + "</div>"; var prompt = this._get(inst, "prompt"); var closeAtTop = this._get(inst, "closeAtTop"); var hideIfNoPrevNext = this._get(inst, "hideIfNoPrevNext"); var navigationAsDateFormat = this._get(inst, "navigationAsDateFormat"); var showBigPrevNext = this._get(inst, "showBigPrevNext"); var numMonths = this._getNumberOfMonths(inst); var showCurrentAtPos = this._get(inst, "showCurrentAtPos"); var stepMonths = this._get(inst, "stepMonths"); var stepBigMonths = this._get(inst, "stepBigMonths"); var isMultiMonth = (numMonths[0] != 1 || numMonths[1] != 1); var currentDate = this._daylightSavingAdjust((!inst.currentDay ? new Date(9999, 9, 9) : new Date(inst.currentYear, inst.currentMonth, inst.currentDay))); var minDate = this._getMinMaxDate(inst, "min", true); var maxDate = this._getMinMaxDate(inst, "max"); var drawMonth = inst.drawMonth - showCurrentAtPos; var drawYear = inst.drawYear; if (drawMonth < 0) { drawMonth += 12; drawYear-- } if (maxDate) { var maxDraw = this._daylightSavingAdjust(new Date(maxDate.getFullYear(), maxDate.getMonth() - numMonths[1] + 1, maxDate.getDate())); maxDraw = (minDate && maxDraw < minDate ? minDate : maxDraw); while (this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1)) > maxDraw) { drawMonth--; if (drawMonth < 0) { drawMonth = 11; drawYear-- } } } var prevText = this._get(inst, "prevText"); prevText = (!navigationAsDateFormat ? prevText : this.formatDate(prevText, this._daylightSavingAdjust(new Date(drawYear, drawMonth - stepMonths, 1)), this._getFormatConfig(inst))); var prevBigText = (showBigPrevNext ? this._get(inst, "prevBigText") : ""); prevBigText = (!navigationAsDateFormat ? prevBigText : this.formatDate(prevBigText, this._daylightSavingAdjust(new Date(drawYear, drawMonth - stepBigMonths, 1)), this._getFormatConfig(inst))); var prev = '<div class="ui-datepicker-prev">' + (this._canAdjustMonth(inst, -1, drawYear, drawMonth) ? (showBigPrevNext ? "<a onclick=\"jQuery.datepicker._adjustDate('#" + inst.id + "', -" + stepBigMonths + ", 'M');\"" + this._addStatus(showStatus, inst.id, this._get(inst, "prevBigStatus"), initStatus) + ">" + prevBigText + "</a>" : "") + "<a onclick=\"jQuery.datepicker._adjustDate('#" + inst.id + "', -" + stepMonths + ", 'M');\"" + this._addStatus(showStatus, inst.id, this._get(inst, "prevStatus"), initStatus) + ">" + prevText + "</a>" : (hideIfNoPrevNext ? "" : (showBigPrevNext ? "<label>" + prevBigText + "</label>" : "") + "<label>" + prevText + "</label>")) + "</div>"; var nextText = this._get(inst, "nextText"); nextText = (!navigationAsDateFormat ? nextText : this.formatDate(nextText, this._daylightSavingAdjust(new Date(drawYear, drawMonth + stepMonths, 1)), this._getFormatConfig(inst))); var nextBigText = (showBigPrevNext ? this._get(inst, "nextBigText") : ""); nextBigText = (!navigationAsDateFormat ? nextBigText : this.formatDate(nextBigText, this._daylightSavingAdjust(new Date(drawYear, drawMonth + stepBigMonths, 1)), this._getFormatConfig(inst))); var next = '<div class="ui-datepicker-next">' + (this._canAdjustMonth(inst, +1, drawYear, drawMonth) ? "<a onclick=\"jQuery.datepicker._adjustDate('#" + inst.id + "', +" + stepMonths + ", 'M');\"" + this._addStatus(showStatus, inst.id, this._get(inst, "nextStatus"), initStatus) + ">" + nextText + "</a>" + (showBigPrevNext ? "<a onclick=\"jQuery.datepicker._adjustDate('#" + inst.id + "', +" + stepBigMonths + ", 'M');\"" + this._addStatus(showStatus, inst.id, this._get(inst, "nextBigStatus"), initStatus) + ">" + nextBigText + "</a>" : "") : (hideIfNoPrevNext ? "" : "<label>" + nextText + "</label>" + (showBigPrevNext ? "<label>" + nextBigText + "</label>" : ""))) + "</div>"; var currentText = this._get(inst, "currentText"); var gotoDate = (this._get(inst, "gotoCurrent") && inst.currentDay ? currentDate : today); currentText = (!navigationAsDateFormat ? currentText : this.formatDate(currentText, gotoDate, this._getFormatConfig(inst))); var html = (closeAtTop && !inst.inline ? controls : "") + '<div class="ui-datepicker-links">' + (isRTL ? next : prev) + (this._isInRange(inst, gotoDate) ? '<div class="ui-datepicker-current"><a onclick="jQuery.datepicker._gotoToday(\'#' + inst.id + "');\"" + this._addStatus(showStatus, inst.id, this._get(inst, "currentStatus"), initStatus) + ">" + currentText + "</a></div>" : "") + (isRTL ? prev : next) + "</div>" + (prompt ? '<div class="' + this._promptClass + '"><span>' + prompt + "</span></div>" : ""); var firstDay = parseInt(this._get(inst, "firstDay")); firstDay = (isNaN(firstDay) ? 0 : firstDay); var changeFirstDay = this._get(inst, "changeFirstDay"); var dayNames = this._get(inst, "dayNames"); var dayNamesShort = this._get(inst, "dayNamesShort"); var dayNamesMin = this._get(inst, "dayNamesMin"); var monthNames = this._get(inst, "monthNames"); var beforeShowDay = this._get(inst, "beforeShowDay"); var highlightWeek = this._get(inst, "highlightWeek"); var showOtherMonths = this._get(inst, "showOtherMonths"); var showWeeks = this._get(inst, "showWeeks"); var calculateWeek = this._get(inst, "calculateWeek") || this.iso8601Week; var weekStatus = this._get(inst, "weekStatus"); var status = (showStatus ? this._get(inst, "dayStatus") || initStatus : ""); var dateStatus = this._get(inst, "statusForDate") || this.dateStatus; var endDate = inst.endDay ? this._daylightSavingAdjust(new Date(inst.endYear, inst.endMonth, inst.endDay)) : currentDate; var defaultDate = this._getDefaultDate(inst); for (var row = 0; row < numMonths[0]; row++) { for (var col = 0; col < numMonths[1]; col++) { var selectedDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, inst.selectedDay)); html += '<div class="ui-datepicker-one-month' + (col == 0 ? " ui-datepicker-new-row" : "") + '">' + this._generateMonthYearHeader(inst, drawMonth, drawYear, minDate, maxDate, selectedDate, row > 0 || col > 0, showStatus, initStatus, monthNames) + '<table class="ui-datepicker" cellpadding="0" cellspacing="0"><thead><tr class="ui-datepicker-title-row">' + (showWeeks ? "<td" + this._addStatus(showStatus, inst.id, weekStatus, initStatus) + ">" + this._get(inst, "weekHeader") + "</td>" : ""); for (var dow = 0; dow < 7; dow++) { var day = (dow + firstDay) % 7; var dayStatus = (status.indexOf("DD") > -1 ? status.replace(/DD/, dayNames[day]) : status.replace(/D/, dayNamesShort[day])); html += "<td" + ((dow + firstDay + 6) % 7 >= 5 ? ' class="ui-datepicker-week-end-cell"' : "") + ">" + (!changeFirstDay ? "<span" : "<a onclick=\"jQuery.datepicker._changeFirstDay('#" + inst.id + "', " + day + ');"') + this._addStatus(showStatus, inst.id, dayStatus, initStatus) + ' title="' + dayNames[day] + '">' + dayNamesMin[day] + (changeFirstDay ? "</a>" : "</span>") + "</td>" } html += "</tr></thead><tbody>"; var daysInMonth = this._getDaysInMonth(drawYear, drawMonth); if (drawYear == inst.selectedYear && drawMonth == inst.selectedMonth) { inst.selectedDay = Math.min(inst.selectedDay, daysInMonth) } var leadDays = (this._getFirstDayOfMonth(drawYear, drawMonth) - firstDay + 7) % 7; var numRows = (isMultiMonth ? 6 : Math.ceil((leadDays + daysInMonth) / 7)); var printDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1 - leadDays)); for (var dRow = 0; dRow < numRows; dRow++) { html += '<tr class="ui-datepicker-days-row">' + (showWeeks ? '<td class="ui-datepicker-week-col"' + this._addStatus(showStatus, inst.id, weekStatus, initStatus) + ">" + calculateWeek(printDate) + "</td>" : ""); for (var dow = 0; dow < 7; dow++) { var daySettings = (beforeShowDay ? beforeShowDay.apply((inst.input ? inst.input[0] : null), [printDate]) : [true, ""]); var otherMonth = (printDate.getMonth() != drawMonth); var unselectable = otherMonth || !daySettings[0] || (minDate && printDate < minDate) || (maxDate && printDate > maxDate); html += '<td class="ui-datepicker-days-cell' + ((dow + firstDay + 6) % 7 >= 5 ? " ui-datepicker-week-end-cell" : "") + (otherMonth ? " ui-datepicker-other-month" : "") + ((printDate.getTime() == selectedDate.getTime() && drawMonth == inst.selectedMonth && inst._keyEvent) || (defaultDate.getTime() == printDate.getTime() && defaultDate.getTime() == selectedDate.getTime()) ? " " + $.datepicker._dayOverClass : "") + (unselectable ? " " + this._unselectableClass : "") + (otherMonth && !showOtherMonths ? "" : " " + daySettings[1] + (printDate.getTime() >= currentDate.getTime() && printDate.getTime() <= endDate.getTime() ? " " + this._currentClass : "") + (printDate.getTime() == today.getTime() ? " ui-datepicker-today" : "")) + '"' + ((!otherMonth || showOtherMonths) && daySettings[2] ? ' title="' + daySettings[2] + '"' : "") + (unselectable ? (highlightWeek ? " onmouseover=\"jQuery(this).parent().addClass('" + this._weekOverClass + "');\" onmouseout=\"jQuery(this).parent().removeClass('" + this._weekOverClass + "');\"" : "") : " onmouseover=\"jQuery(this).addClass('" + this._dayOverClass + "')" + (highlightWeek ? ".parent().addClass('" + this._weekOverClass + "')" : "") + ";" + (!showStatus || (otherMonth && !showOtherMonths) ? "" : "jQuery('#ui-datepicker-status-" + inst.id + "').html('" + (dateStatus.apply((inst.input ? inst.input[0] : null), [printDate, inst]) || initStatus) + "');") + '" onmouseout="jQuery(this).removeClass(\'' + this._dayOverClass + "')" + (highlightWeek ? ".parent().removeClass('" + this._weekOverClass + "')" : "") + ";" + (!showStatus || (otherMonth && !showOtherMonths) ? "" : "jQuery('#ui-datepicker-status-" + inst.id + "').html('" + initStatus + "');") + '" onclick="jQuery.datepicker._selectDay(\'#' + inst.id + "'," + drawMonth + "," + drawYear + ', this);"') + ">" + (otherMonth ? (showOtherMonths ? printDate.getDate() : "&#xa0;") : (unselectable ? printDate.getDate() : "<a>" + printDate.getDate() + "</a>")) + "</td>"; printDate.setDate(printDate.getDate() + 1); printDate = this._daylightSavingAdjust(printDate) } html += "</tr>" } drawMonth++; if (drawMonth > 11) { drawMonth = 0; drawYear++ } html += "</tbody></table></div>" } } html += (showStatus ? '<div style="clear: both;"></div><div id="ui-datepicker-status-' + inst.id + '" class="ui-datepicker-status">' + initStatus + "</div>" : "") + (!closeAtTop && !inst.inline ? controls : "") + '<div style="clear: both;"></div>' + ($.browser.msie && parseInt($.browser.version, 10) < 7 && !inst.inline ? '<iframe src="javascript:false;" class="ui-datepicker-cover"></iframe>' : ""); inst._keyEvent = false; return html }, _generateMonthYearHeader: function(inst, drawMonth, drawYear, minDate, maxDate, selectedDate, secondary, showStatus, initStatus, monthNames) { minDate = (inst.rangeStart && minDate && selectedDate < minDate ? selectedDate : minDate); var changeMonth = this._get(inst, "changeMonth"); var changeYear = this._get(inst, "changeYear"); var showMonthAfterYear = this._get(inst, "showMonthAfterYear"); var html = '<div class="ui-datepicker-header">'; var monthHtml = ""; if (secondary || !changeMonth) { monthHtml += monthNames[drawMonth] } else { var inMinYear = (minDate && minDate.getFullYear() == drawYear); var inMaxYear = (maxDate && maxDate.getFullYear() == drawYear); monthHtml += '<select class="ui-datepicker-new-month" onchange="jQuery.datepicker._selectMonthYear(\'#' + inst.id + "', this, 'M');\" onclick=\"jQuery.datepicker._clickMonthYear('#" + inst.id + "');\"" + this._addStatus(showStatus, inst.id, this._get(inst, "monthStatus"), initStatus) + ">"; for (var month = 0; month < 12; month++) { if ((!inMinYear || month >= minDate.getMonth()) && (!inMaxYear || month <= maxDate.getMonth())) { monthHtml += '<option value="' + month + '"' + (month == drawMonth ? ' selected="selected"' : "") + ">" + monthNames[month] + "</option>" } } monthHtml += "</select>" } if (!showMonthAfterYear) { html += monthHtml + (secondary || changeMonth || changeYear ? "&#xa0;" : "") } if (secondary || !changeYear) { html += drawYear } else { var years = this._get(inst, "yearRange").split(":"); var year = 0; var endYear = 0; if (years.length != 2) { year = drawYear - 10; endYear = drawYear + 10 } else { if (years[0].charAt(0) == "+" || years[0].charAt(0) == "-") { year = endYear = new Date().getFullYear(); year += parseInt(years[0], 10); endYear += parseInt(years[1], 10) } else { year = parseInt(years[0], 10); endYear = parseInt(years[1], 10) } } year = (minDate ? Math.max(year, minDate.getFullYear()) : year); endYear = (maxDate ? Math.min(endYear, maxDate.getFullYear()) : endYear); html += '<select class="ui-datepicker-new-year" onchange="jQuery.datepicker._selectMonthYear(\'#' + inst.id + "', this, 'Y');\" onclick=\"jQuery.datepicker._clickMonthYear('#" + inst.id + "');\"" + this._addStatus(showStatus, inst.id, this._get(inst, "yearStatus"), initStatus) + ">"; for (; year <= endYear; year++) { html += '<option value="' + year + '"' + (year == drawYear ? ' selected="selected"' : "") + ">" + year + "</option>" } html += "</select>" } if (showMonthAfterYear) { html += (secondary || changeMonth || changeYear ? "&#xa0;" : "") + monthHtml } html += "</div>"; return html }, _addStatus: function(showStatus, id, text, initStatus) { return (showStatus ? " onmouseover=\"jQuery('#ui-datepicker-status-" + id + "').html('" + (text || initStatus) + "');\" onmouseout=\"jQuery('#ui-datepicker-status-" + id + "').html('" + initStatus + "');\"" : "") }, _adjustInstDate: function(inst, offset, period) { var year = inst.drawYear + (period == "Y" ? offset : 0); var month = inst.drawMonth + (period == "M" ? offset : 0); var day = Math.min(inst.selectedDay, this._getDaysInMonth(year, month)) + (period == "D" ? offset : 0); var date = this._daylightSavingAdjust(new Date(year, month, day)); var minDate = this._getMinMaxDate(inst, "min", true); var maxDate = this._getMinMaxDate(inst, "max"); date = (minDate && date < minDate ? minDate : date); date = (maxDate && date > maxDate ? maxDate : date); inst.selectedDay = date.getDate(); inst.drawMonth = inst.selectedMonth = date.getMonth(); inst.drawYear = inst.selectedYear = date.getFullYear(); if (period == "M" || period == "Y") { this._notifyChange(inst) } }, _notifyChange: function(inst) { var onChange = this._get(inst, "onChangeMonthYear"); if (onChange) { onChange.apply((inst.input ? inst.input[0] : null), [inst.selectedYear, inst.selectedMonth + 1, inst]) } }, _getNumberOfMonths: function(inst) { var numMonths = this._get(inst, "numberOfMonths"); return (numMonths == null ? [1, 1] : (typeof numMonths == "number" ? [1, numMonths] : numMonths)) }, _getMinMaxDate: function(inst, minMax, checkRange) { var date = this._determineDate(this._get(inst, minMax + "Date"), null); return (!checkRange || !inst.rangeStart ? date : (!date || inst.rangeStart > date ? inst.rangeStart : date)) }, _getDaysInMonth: function(year, month) { return 32 - new Date(year, month, 32).getDate() }, _getFirstDayOfMonth: function(year, month) { return new Date(year, month, 1).getDay() }, _canAdjustMonth: function(inst, offset, curYear, curMonth) { var numMonths = this._getNumberOfMonths(inst); var date = this._daylightSavingAdjust(new Date(curYear, curMonth + (offset < 0 ? offset : numMonths[1]), 1)); if (offset < 0) { date.setDate(this._getDaysInMonth(date.getFullYear(), date.getMonth())) } return this._isInRange(inst, date) }, _isInRange: function(inst, date) { var newMinDate = (!inst.rangeStart ? null : this._daylightSavingAdjust(new Date(inst.selectedYear, inst.selectedMonth, inst.selectedDay))); newMinDate = (newMinDate && inst.rangeStart < newMinDate ? inst.rangeStart : newMinDate); var minDate = newMinDate || this._getMinMaxDate(inst, "min"); var maxDate = this._getMinMaxDate(inst, "max"); return ((!minDate || date >= minDate) && (!maxDate || date <= maxDate)) }, _getFormatConfig: function(inst) { var shortYearCutoff = this._get(inst, "shortYearCutoff"); shortYearCutoff = (typeof shortYearCutoff != "string" ? shortYearCutoff : new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10)); return { shortYearCutoff: shortYearCutoff, dayNamesShort: this._get(inst, "dayNamesShort"), dayNames: this._get(inst, "dayNames"), monthNamesShort: this._get(inst, "monthNamesShort"), monthNames: this._get(inst, "monthNames")} }, _formatDate: function(inst, day, month, year) { if (!day) { inst.currentDay = inst.selectedDay; inst.currentMonth = inst.selectedMonth; inst.currentYear = inst.selectedYear } var date = (day ? (typeof day == "object" ? day : this._daylightSavingAdjust(new Date(year, month, day))) : this._daylightSavingAdjust(new Date(inst.currentYear, inst.currentMonth, inst.currentDay))); return this.formatDate(this._get(inst, "dateFormat"), date, this._getFormatConfig(inst)) } }); function extendRemove(target, props) { $.extend(target, props); for (var name in props) { if (props[name] == null || props[name] == undefined) { target[name] = props[name] } } return target } function isArray(a) { return (a && (($.browser.safari && typeof a == "object" && a.length) || (a.constructor && a.constructor.toString().match(/\Array\(\)/)))) } $.fn.datepicker = function(options) { if (!$.datepicker.initialized) { $(document.body).append($.datepicker.dpDiv).mousedown($.datepicker._checkExternalClick); $.datepicker.initialized = true } var otherArgs = Array.prototype.slice.call(arguments, 1); if (typeof options == "string" && (options == "isDisabled" || options == "getDate")) { return $.datepicker["_" + options + "Datepicker"].apply($.datepicker, [this[0]].concat(otherArgs)) } return this.each(function() { typeof options == "string" ? $.datepicker["_" + options + "Datepicker"].apply($.datepicker, [this].concat(otherArgs)) : $.datepicker._attachDatepicker(this, options) }) }; $.datepicker = new Datepicker(); $.datepicker.initialized = false; $.datepicker.uuid = new Date().getTime(); $.datepicker.version = "1.6" })(jQuery);
/*
* jQuery UI Autocomplete 1.6rc2

*
* Copyright (c) 2007, 2008 Dylan Verheul, Dan G. Switzer, Anjesh Tuladhar, Jörn Zaefferer
* Dual licensed under the MIT (MIT-LICENSE.txt)
* and GPL (GPL-LICENSE.txt) licenses.
* 
* http://docs.jquery.com/UI/Autocomplete
*
* Depends:
*	ui.core.js
*/
(function($)
{

    $.widget("ui.autocomplete", {

        _init: function()
        {

            $.extend(this.options, {
                delay: this.options.url ? $.Autocompleter.defaults.delay : 10,
                max: !this.options.scroll ? 10 : 150,
                highlight: this.options.highlight || function(value) { return value; }, // if highlight is set to false, replace it with a do-nothing function
                formatMatch: this.options.formatMatch || this.options.formatItem // if the formatMatch option is not specified, then use formatItem for backwards compatibility
            });

            new $.Autocompleter(this.element[0], this.options);

        },

        result: function(handler)
        {
            return this.element.bind("result", handler);
        },
        search: function(handler)
        {
            return this.element.trigger("search", [handler]);
        },
        flushCache: function()
        {
            return this.element.trigger("flushCache");
        },
        setData: function(key, value)
        {
            return this.element.trigger("setOptions", [{ key: value}]);
        },
        destroy: function()
        {
            return this.element.trigger("unautocomplete");
        }

    });

    $.Autocompleter = function(input, options)
    {

        var KEY = {
            UP: 38,
            DOWN: 40,
            DEL: 46,
            TAB: 9,
            RETURN: 13,
            ESC: 27,
            COMMA: 188,
            PAGEUP: 33,
            PAGEDOWN: 34,
            BACKSPACE: 8
        };

        // Create $ object for input element
        var $input = $(input).attr("autocomplete", "off").addClass(options.inputClass);
        if (options.result) $input.bind('result.autocomplete', options.result);

        var timeout;
        var previousValue = "";
        var cache = $.Autocompleter.Cache(options);
        var hasFocus = 0;
        var lastKeyPressCode;
        var config = {
            mouseDownOnSelect: false
        };
        var select = $.Autocompleter.Select(options, input, selectCurrent, config);

        var blockSubmit;

        // prevent form submit in opera when selecting with return key
        $.browser.opera && $(input.form).bind("submit.autocomplete", function()
        {
            if (blockSubmit)
            {
                blockSubmit = false;
                return false;
            }
        });

        // only opera doesn't trigger keydown multiple times while pressed, others don't work with keypress at all
        $input.bind(($.browser.opera ? "keypress" : "keydown") + ".autocomplete", function(event)
        {
            // track last key pressed
            lastKeyPressCode = event.keyCode;
            switch (event.keyCode)
            {

                case KEY.UP:
                    event.preventDefault();
                    if (select.visible())
                    {
                        select.prev();
                    } else
                    {
                        onChange(0, true);
                    }
                    break;

                case KEY.DOWN:
                    event.preventDefault();
                    if (select.visible())
                    {
                        select.next();
                    } else
                    {
                        onChange(0, true);
                    }
                    break;

                case KEY.PAGEUP:
                    event.preventDefault();
                    if (select.visible())
                    {
                        select.pageUp();
                    } else
                    {
                        onChange(0, true);
                    }
                    break;

                case KEY.PAGEDOWN:
                    event.preventDefault();
                    if (select.visible())
                    {
                        select.pageDown();
                    } else
                    {
                        onChange(0, true);
                    }
                    break;

                // matches also semicolon    
                case options.multiple && $.trim(options.multipleSeparator) == "," && KEY.COMMA:
                case KEY.TAB:
                case KEY.RETURN:
                    if (selectCurrent())
                    {
                        // stop default to prevent a form submit, Opera needs special handling
                        event.preventDefault();
                        blockSubmit = true;
                        return false;
                    }
                    break;

                case KEY.ESC:
                    select.hide();
                    break;

                default:
                    clearTimeout(timeout);
                    timeout = setTimeout(onChange, options.delay);
                    break;
            }
        }).focus(function()
        {
            // track whether the field has focus, we shouldn't process any
            // results if the field no longer has focus
            hasFocus++;
        }).blur(function()
        {
            hasFocus = 0;
            if (!config.mouseDownOnSelect)
            {
                hideResults();
            }
        }).click(function()
        {
            // show select when clicking in a focused field
            if (hasFocus++ > 1 && !select.visible())
            {
                onChange(0, true);
            }
        }).bind("search", function()
        {
            // TODO why not just specifying both arguments?
            var fn = (arguments.length > 1) ? arguments[1] : null;
            function findValueCallback(q, data)
            {
                var result;
                if (data && data.length)
                {
                    for (var i = 0; i < data.length; i++)
                    {
                        if (data[i].result.toLowerCase() == q.toLowerCase())
                        {
                            result = data[i];
                            break;
                        }
                    }
                }
                if (typeof fn == "function") fn(result);
                else $input.trigger("result", result && [result.data, result.value]);
            }
            $.each(trimWords($input.val()), function(i, value)
            {
                request(value, findValueCallback, findValueCallback);
            });
        }).bind("flushCache", function()
        {
            cache.flush();
        }).bind("setOptions", function()
        {
            $.extend(options, arguments[1]);
            // if we've updated the data, repopulate
            if ("data" in arguments[1])
                cache.populate();
        }).bind("unautocomplete", function()
        {
            select.unbind();
            $input.unbind();
            $(input.form).unbind(".autocomplete");
        });


        function selectCurrent()
        {
            var selected = select.selected();
            if (!selected)
                return false;

            var v = selected.result;
            previousValue = v;

            if (options.multiple)
            {
                var words = trimWords($input.val());
                if (words.length > 1)
                {
                    v = words.slice(0, words.length - 1).join(options.multipleSeparator) + options.multipleSeparator + v;
                }
                v += options.multipleSeparator;
            }

            $input.val(v);
            hideResultsNow();
            $input.trigger("result", [selected.data, selected.value]);
            return true;
        }

        function onChange(crap, skipPrevCheck)
        {
            if (lastKeyPressCode == KEY.DEL)
            {
                select.hide();
                return;
            }

            var currentValue = $input.val();

            if (!skipPrevCheck && currentValue == previousValue)
                return;

            previousValue = currentValue;

            currentValue = lastWord(currentValue);
            if (currentValue.length >= options.minChars)
            {
                $input.addClass(options.loadingClass);
                if (!options.matchCase)
                    currentValue = currentValue.toLowerCase();
                request(currentValue, receiveData, hideResultsNow);
            } else
            {
                stopLoading();
                select.hide();
            }
        };

        function trimWords(value)
        {
            if (!value)
            {
                return [""];
            }
            var words = value.split(options.multipleSeparator);
            var result = [];
            $.each(words, function(i, value)
            {
                if ($.trim(value))
                    result[i] = $.trim(value);
            });
            return result;
        }

        function lastWord(value)
        {
            if (!options.multiple)
                return value;
            var words = trimWords(value);
            return words[words.length - 1];
        }

        // fills in the input box w/the first match (assumed to be the best match)
        // q: the term entered
        // sValue: the first matching result
        function autoFill(q, sValue)
        {
            // autofill in the complete box w/the first match as long as the user hasn't entered in more data
            // if the last user key pressed was backspace, don't autofill
            if (options.autoFill && (lastWord($input.val()).toLowerCase() == q.toLowerCase()) && lastKeyPressCode != KEY.BACKSPACE)
            {
                // fill in the value (keep the case the user has typed)
                $input.val($input.val() + sValue.substring(lastWord(previousValue).length));
                // select the portion of the value not typed by the user (so the next character will erase)
                $.Autocompleter.Selection(input, previousValue.length, previousValue.length + sValue.length);
            }
        };

        function hideResults()
        {
            clearTimeout(timeout);
            timeout = setTimeout(hideResultsNow, 200);
        };

        function hideResultsNow()
        {
            var wasVisible = select.visible();
            select.hide();
            clearTimeout(timeout);
            stopLoading();
            if (options.mustMatch)
            {
                // call search and run callback
                $input.autocomplete("search", function(result)
                {
                    // if no value found, clear the input box
                    if (!result)
                    {
                        if (options.multiple)
                        {
                            var words = trimWords($input.val()).slice(0, -1);
                            $input.val(words.join(options.multipleSeparator) + (words.length ? options.multipleSeparator : ""));
                        }
                        else
                            $input.val("");
                    }
                }
			);
            }
            if (wasVisible)
            // position cursor at end of input field
                $.Autocompleter.Selection(input, input.value.length, input.value.length);
        };

        function receiveData(q, data)
        {
            if (data && data.length && hasFocus)
            {
                stopLoading();
                select.display(data, q);
                autoFill(q, data[0].value);
                select.show();
            } else
            {
                hideResultsNow();
            }
        };

        function request(term, success, failure)
        {
            if (!options.matchCase)
                term = term.toLowerCase();
            var data = cache.load(term);
            // recieve the cached data
            if (data && data.length)
            {
                success(term, data);
                // if an AJAX url has been supplied, try loading the data now

            } else if ((typeof options.url == "string") && (options.url.length > 0))
            {

                var extraParams = {
                    timestamp: +new Date()
                };
                $.each(options.extraParams, function(key, param)
                {
                    extraParams[key] = typeof param == "function" ? param() : param;
                });

                $.ajax({
                    // try to leverage ajaxQueue plugin to abort previous requests
                    mode: "abort",
                    // limit abortion to this input
                    port: "autocomplete" + input.name,
                    dataType: options.dataType,
                    url: options.url,
                    data: $.extend({
                        q: lastWord(term),
                        limit: options.max
                    }, extraParams),
                    success: function(data)
                    {
                        var parsed = options.parse && options.parse(data) || parse(data);
                        cache.add(term, parsed);
                        success(term, parsed);
                    }
                });
            }

            else if (options.source && typeof options.source == 'function')
            {
                var resultData = options.source(term);
                var parsed = (options.parse) ? options.parse(resultData) : resultData;

                cache.add(term, parsed);
                success(term, parsed);
            } else
            {
                // if we have a failure, we need to empty the list -- this prevents the the [TAB] key from selecting the last successful match
                select.emptyList();
                failure(term);
            }
        };

        function parse(data)
        {
            var parsed = [];
            var rows = data.split("\n");
            for (var i = 0; i < rows.length; i++)
            {
                var row = $.trim(rows[i]);
                if (row)
                {
                    row = row.split("|");
                    parsed[parsed.length] = {
                        data: row,
                        value: row[0],
                        result: options.formatResult && options.formatResult(row, row[0]) || row[0]
                    };
                }
            }
            return parsed;
        };

        function stopLoading()
        {
            $input.removeClass(options.loadingClass);
        };

    };

    $.Autocompleter.defaults = {
        inputClass: "ui-autocomplete-input",
        resultsClass: "ui-autocomplete-results",
        loadingClass: "ui-autocomplete-loading",
        minChars: 1,
        delay: 400,
        matchCase: false,
        matchSubset: true,
        matchContains: false,
        cacheLength: 10,
        max: 100,
        mustMatch: false,
        extraParams: {},
        selectFirst: false,
        formatItem: function(row) { return row[0]; },
        formatMatch: null,
        autoFill: false,
        width: 0,
        multiple: false,
        multipleSeparator: ", ",
        highlight: function(value, term)
        {
            return value.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + term.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi, "\\$1") + ")(?![^<>]*>)(?![^&;]+;)", "gi"), "<strong>$1</strong>");
        },
        scroll: true,
        scrollHeight: 180
    };

    $.extend($.ui.autocomplete, {
        defaults: $.Autocompleter.defaults
    });

    $.Autocompleter.Cache = function(options)
    {

        var data = {};
        var length = 0;

        function matchSubset(s, sub)
        {
            if (!options.matchCase)
                s = s.toLowerCase();
            var i = s.indexOf(sub);
            if (i == -1) return false;
            return i == 0 || options.matchContains;
        };

        function add(q, value)
        {
            if (length > options.cacheLength)
            {
                flush();
            }
            if (!data[q])
            {
                length++;
            }
            data[q] = value;
        }

        function populate()
        {
            if (!options.data) return false;
            // track the matches
            var stMatchSets = {},
			nullData = 0;

            // no url was specified, we need to adjust the cache length to make sure it fits the local data store
            if (!options.url) options.cacheLength = 1;

            // track all options for minChars = 0
            stMatchSets[""] = [];

            // loop through the array and create a lookup structure
            for (var i = 0, ol = options.data.length; i < ol; i++)
            {
                var rawValue = options.data[i];
                // if rawValue is a string, make an array otherwise just reference the array
                rawValue = (typeof rawValue == "string") ? [rawValue] : rawValue;

                var value = options.formatMatch(rawValue, i + 1, options.data.length);
                if (value === false)
                    continue;

                var firstChar = value.charAt(0).toLowerCase();
                // if no lookup array for this character exists, look it up now
                if (!stMatchSets[firstChar])
                    stMatchSets[firstChar] = [];

                // if the match is a string
                var row = {
                    value: value,
                    data: rawValue,
                    result: options.formatResult && options.formatResult(rawValue) || value
                };

                // push the current match into the set list
                stMatchSets[firstChar].push(row);

                // keep track of minChars zero items
                if (nullData++ < options.max)
                {
                    stMatchSets[""].push(row);
                }
            };

            // add the data items to the cache
            $.each(stMatchSets, function(i, value)
            {
                // increase the cache size
                options.cacheLength++;
                // add to the cache
                add(i, value);
            });
        }

        // populate any existing data
        setTimeout(populate, 25);

        function flush()
        {
            data = {};
            length = 0;
        }

        return {
            flush: flush,
            add: add,
            populate: populate,
            load: function(q)
            {
                if (!options.cacheLength || !length)
                    return null;
                /* 
                * if dealing w/local data and matchContains than we must make sure
                * to loop through all the data collections looking for matches
                */
                if (!options.url && options.matchContains)
                {
                    // track all matches
                    var csub = [];
                    // loop through all the data grids for matches
                    for (var k in data)
                    {
                        // don't search through the stMatchSets[""] (minChars: 0) cache
                        // this prevents duplicates
                        if (k.length > 0)
                        {
                            var c = data[k];
                            $.each(c, function(i, x)
                            {
                                // if we've got a match, add it to the array
                                if (matchSubset(x.value, q))
                                {
                                    csub.push(x);
                                }
                            });
                        }
                    }
                    return csub;
                } else
                // if the exact item exists, use it
                    if (data[q])
                {
                    return data[q];
                } else
                    if (options.matchSubset)
                {
                    for (var i = q.length - 1; i >= options.minChars; i--)
                    {
                        var c = data[q.substr(0, i)];
                        if (c)
                        {
                            var csub = [];
                            $.each(c, function(i, x)
                            {
                                if (matchSubset(x.value, q))
                                {
                                    csub[csub.length] = x;
                                }
                            });
                            return csub;
                        }
                    }
                }
                return null;
            }
        };
    };

    $.Autocompleter.Select = function(options, input, select, config)
    {
        var CLASSES = {
            ACTIVE: "ui-autocomplete-over"
        };

        var listItems,
		active = -1,
		data,
		term = "",
		needsInit = true,
		element,
		list;

        // Create results
        function init()
        {
            if (!needsInit)
                return;
            element = $("<div/>")
		.hide()
		.addClass(options.resultsClass)
		.css("position", "absolute")
		.appendTo(document.body);

            list = $("<ul/>").appendTo(element).mouseover(function(event)
            {
                if (target(event).nodeName && target(event).nodeName.toUpperCase() == 'LI')
                {
                    active = $("li", list).removeClass(CLASSES.ACTIVE).index(target(event));
                    $(target(event)).addClass(CLASSES.ACTIVE);
                }
            }).click(function(event)
            {
                $(target(event)).addClass(CLASSES.ACTIVE);
                select();
                // TODO provide option to avoid setting focus again after selection? useful for cleanup-on-focus
                input.focus();
                return false;
            }).mousedown(function()
            {
                config.mouseDownOnSelect = true;
            }).mouseup(function()
            {
                config.mouseDownOnSelect = false;
            });

            if (options.width > 0)
                element.css("width", options.width);

            needsInit = false;
        }

        function target(event)
        {
            var element = event.target;
            while (element && element.tagName != "LI")
                element = element.parentNode;
            // more fun with IE, sometimes event.target is empty, just ignore it then
            if (!element)
                return [];
            return element;
        }

        function moveSelect(step)
        {
            listItems.slice(active, active + 1).removeClass(CLASSES.ACTIVE);
            movePosition(step);
            var activeItem = listItems.slice(active, active + 1).addClass(CLASSES.ACTIVE);
            if (options.scroll)
            {
                var offset = 0;
                listItems.slice(0, active).each(function()
                {
                    offset += this.offsetHeight;
                });
                if ((offset + activeItem[0].offsetHeight - list.scrollTop()) > list[0].clientHeight)
                {
                    list.scrollTop(offset + activeItem[0].offsetHeight - list.innerHeight());
                } else if (offset < list.scrollTop())
                {
                    list.scrollTop(offset);
                }
            }
        };

        function movePosition(step)
        {
            active += step;
            if (active < 0)
            {
                active = listItems.size() - 1;
            } else if (active >= listItems.size())
            {
                active = 0;
            }
        }

        function limitNumberOfItems(available)
        {
            return options.max && options.max < available
			? options.max
			: available;
        }

        function fillList()
        {
            list.empty();
            var max = limitNumberOfItems(data.length);
            for (var i = 0; i < max; i++)
            {
                if (!data[i])
                    continue;
                var formatted = options.formatItem(data[i].data, i + 1, max, data[i].value, term);
                if (formatted === false)
                    continue;
                var li = $("<li/>").html(options.highlight(formatted, term)).addClass(i % 2 == 0 ? "ui-autocomplete-even" : "ui-autocomplete-odd").appendTo(list)[0];
                $.data(li, "ui-autocomplete-data", data[i]);
            }
            listItems = list.find("li");
            if (options.selectFirst)
            {
                listItems.slice(0, 1).addClass(CLASSES.ACTIVE);
                active = 0;
            }
            // apply bgiframe if available
            if ($.fn.bgiframe)
                list.bgiframe();
        }

        return {
            display: function(d, q)
            {
                init();
                data = d;
                term = q;
                fillList();
            },
            next: function()
            {
                moveSelect(1);
            },
            prev: function()
            {
                moveSelect(-1);
            },
            pageUp: function()
            {
                if (active != 0 && active - 8 < 0)
                {
                    moveSelect(-active);
                } else
                {
                    moveSelect(-8);
                }
            },
            pageDown: function()
            {
                if (active != listItems.size() - 1 && active + 8 > listItems.size())
                {
                    moveSelect(listItems.size() - 1 - active);
                } else
                {
                    moveSelect(8);
                }
            },
            hide: function()
            {
                element && element.hide();
                listItems && listItems.removeClass(CLASSES.ACTIVE)
                active = -1;
                $(input).triggerHandler("autocompletehide", [{}, { options: options}], options["hide"]);
            },
            visible: function()
            {
                return element && element.is(":visible");
            },
            current: function()
            {
                return this.visible() && (listItems.filter("." + CLASSES.ACTIVE)[0] || options.selectFirst && listItems[0]);
            },
            show: function()
            {
                var offset = $(input).offset();
                element.css({
                    width: typeof options.width == "string" || options.width > 0 ? options.width : $(input).width(),
                    top: offset.top + input.offsetHeight,
                    left: offset.left
                }).show();

                if (options.scroll)
                {
                    list.scrollTop(0);
                    list.css({
                        maxHeight: options.scrollHeight,
                        overflow: 'auto'
                    });

                    if ($.browser.msie && typeof document.body.style.maxHeight === "undefined")
                    {
                        var listHeight = 0;
                        listItems.each(function()
                        {
                            listHeight += this.offsetHeight;
                        });
                        var scrollbarsVisible = listHeight > options.scrollHeight;
                        list.css('height', scrollbarsVisible ? options.scrollHeight : listHeight);
                        if (!scrollbarsVisible)
                        {
                            // IE doesn't recalculate width when scrollbar disappears
                            listItems.width(list.width() - parseInt(listItems.css("padding-left")) - parseInt(listItems.css("padding-right")));
                        }
                    }

                }

                $(input).triggerHandler("autocompleteshow", [{}, { options: options}], options["show"]);

            },
            selected: function()
            {
                var selected = listItems && listItems.filter("." + CLASSES.ACTIVE).removeClass(CLASSES.ACTIVE);
                return selected && selected.length && $.data(selected[0], "ui-autocomplete-data");
            },
            emptyList: function()
            {
                list && list.empty();
            },
            unbind: function()
            {
                element && element.remove();
            }
        };
    };

    $.Autocompleter.Selection = function(field, start, end)
    {
        if (field.createTextRange)
        {
            var selRange = field.createTextRange();
            selRange.collapse(true);
            selRange.moveStart("character", start);
            selRange.moveEnd("character", end);
            selRange.select();
        } else if (field.setSelectionRange)
        {
            field.setSelectionRange(start, end);
        } else
        {
            if (field.selectionStart)
            {
                field.selectionStart = start;
                field.selectionEnd = end;
            }
        }
        field.focus();
    };

})(jQuery);
jQuery.cookie = function(name, value, options) {
    if (typeof value != 'undefined') { // name and value given, set cookie
        options = options || {};
        if (value === null) {
            value = '';
            options.expires = -1;
        }
        var expires = '';
        if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) {
            var date;
            if (typeof options.expires == 'number') {
                date = new Date();
                date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
            } else {
                date = options.expires;
            }
            expires = '; expires=' + date.toUTCString(); // use expires attribute, max-age is not supported by IE
        }
        // CAUTION: Needed to parenthesize options.path and options.domain
        // in the following expressions, otherwise they evaluate to undefined
        // in the packed version for some reason...
        var path = options.path ? '; path=' + (options.path) : '';
        var domain = options.domain ? '; domain=' + (options.domain) : '';
        var secure = options.secure ? '; secure' : '';
        document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');
    } else { // only name given, get cookie
        var cookieValue = null;
        if (document.cookie && document.cookie != '') {
            var cookies = document.cookie.split(';');
            for (var i = 0; i < cookies.length; i++) {
                var cookie = jQuery.trim(cookies[i]);
                // Does this cookie string begin with the name we want?
                if (cookie.substring(0, name.length + 1) == (name + '=')) {
                    cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                    break;
                }
            }
        }
        return cookieValue;
    }
};
/*
 * jMsAjax 0.2.1 - Microsoft Ajax jQuery Plugin
 *
 * Copyright (c) 2008 Adam Schrцder (schotime.net)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * $Date: 2008-07-12 $
 */
(function($){$.jmsajax=function(options){var defaults={type:"POST",dataType:"msjson",data:{},beforeSend:function(xhr){xhr.setRequestHeader("Content-type","application/json; charset=utf-8");},contentType:"application/json; charset=utf-8",error:function(x,s,m){alert("Status: "+((x.statusText)?x.statusText:"Unknown")+"\nMessage: "+msJSON.parse(((x.responseText)?x.responseText:"Unknown")).Message);}};var options=$.extend(defaults,options);if(options.method)
options.url+="/"+options.method;if(options.data)
{if(options.type=="GET"){var data="";for(var i in options.data){if(data!="")
data+="&";data+=i+"="+msJSON.stringify(options.data[i]);}
options.url+="?"+data;data=null;options.data="{}";}
else if(options.type=="POST")
{options.data=msJSON.stringify(options.data);}}
if(options.success)
{if(options.dataType)
{if(options.dataType=="msjson")
{var base=options.success;options.success=function(response,status)
{var y=dateparse(response);if(options.version){if(options.version>=3.5)
y=y.d;}
else{if(response.indexOf("{\"d\":")==0)
y=y.d;}
base(y,status);}}}}
return $.ajax(options);};dateparse=function(data)
{try{return msJSON.parse(data,function(key,value){var a;if(typeof value==="string"){if(value.indexOf("Date")>=0)
{a=/^\/Date\(([0-9]+)\)\/$/.exec(value);if(a){return new Date(parseInt(a[1],10));}}}
return value;});}
catch(e){return null;}}
msJSON=function(){function f(n){return n<10?'0'+n:n;}
//Date.prototype.toJSON=function(key){return this.getUTCFullYear()+'-'+f(this.getUTCMonth()+1)+'-'+f(this.getUTCDate())+'T'+f(this.getUTCHours())+':'+f(this.getUTCMinutes())+':'+f(this.getUTCSeconds())+'Z';};
var cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,escapeable=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,gap,indent,meta={'\b':'\\b','\t':'\\t','\n':'\\n','\f':'\\f','\r':'\\r','"':'\\"','\\':'\\\\'},rep;function quote(string){escapeable.lastIndex=0;return escapeable.test(string)?'"'+string.replace(escapeable,function(a){var c=meta[a];if(typeof c==='string'){return c;}
return'\\u'+('0000'+
(+(a.charCodeAt(0))).toString(16)).slice(-4);})+'"':'"'+string+'"';}
function str(key,holder){var i,k,v,length,mind=gap,partial,value=holder[key];if(value&&typeof value==='object'&&typeof value.toJSON==='function'){value=value.toJSON(key);}
if(typeof rep==='function'){value=rep.call(holder,key,value);}
switch(typeof value){case'string':return quote(value);case'number':return isFinite(value)?String(value):'null';case'boolean':case'null':return String(value);case'object':if(!value){return'null';}
if (value.toUTCString) { return '"\\/Date(' + (value.getTime()) + ')\\/"'; }
gap+=indent;partial=[];if(typeof value.length==='number'&&!(value.propertyIsEnumerable('length'))){length=value.length;for(i=0;i<length;i+=1){partial[i]=str(i,value)||'null';}
v=partial.length===0?'[]':gap?'[\n'+gap+
partial.join(',\n'+gap)+'\n'+
mind+']':'['+partial.join(',')+']';gap=mind;return v;}
if(rep&&typeof rep==='object'){length=rep.length;for(i=0;i<length;i+=1){k=rep[i];if(typeof k==='string'){v=str(k,value,rep);if(v){partial.push(quote(k)+(gap?': ':':')+v);}}}}else{for(k in value){if(Object.hasOwnProperty.call(value,k)){v=str(k,value,rep);if(v){partial.push(quote(k)+(gap?': ':':')+v);}}}}
v=partial.length===0?'{}':gap?'{\n'+gap+partial.join(',\n'+gap)+'\n'+
mind+'}':'{'+partial.join(',')+'}';gap=mind;return v;}}
return{stringify:function(value,replacer,space){var i;gap='';indent='';if(typeof space==='number'){for(i=0;i<space;i+=1){indent+=' ';}}else if(typeof space==='string'){indent=space;}
rep=replacer;if(replacer&&typeof replacer!=='function'&&(typeof replacer!=='object'||typeof replacer.length!=='number')){throw new Error('JSON.stringify');}
return str('',{'':value});},parse:function(text,reviver){var j;function walk(holder,key){var k,v,value=holder[key];if(value&&typeof value==='object'){for(k in value){if(Object.hasOwnProperty.call(value,k)){v=walk(value,k);if(v!==undefined){value[k]=v;}else{delete value[k];}}}}
return reviver.call(holder,key,value);}
cx.lastIndex=0;if(cx.test(text)){text=text.replace(cx,function(a){return'\\u'+('0000'+
(+(a.charCodeAt(0))).toString(16)).slice(-4);});}
if(/^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,'@').replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,']').replace(/(?:^|:|,)(?:\s*\[)+/g,''))){j=eval('('+text+')');return typeof reviver==='function'?walk({'':j},''):j;}
throw new SyntaxError('JSON.parse');}};}();})(jQuery);
/**
  * jQuery Maxlength plugin 1.0.1
  *
  * http://www.anon-design.se
  *
  * Copyright (c) 2008 Emil Stjerneman <emil@anon-design.se>
  * 
  * Dual licensed under the MIT and GPL licenses:
  * http://www.opensource.org/licenses/mit-license.php
  * http://www.gnu.org/licenses/gpl.html
  */

(function($) {

    $.fn.maxlength = function(options) {
        var settings = jQuery.extend(
		{
		    maxCharacters: 10, // characters limit
		    status: true, // true to show status indicator bewlow the element
		    statusClass: "status", // the class on the status div
		    statusText: "character left", // the status text
		    notificationClass: "notification", // Will be added to the emement when maxlength is reached
		    showAlert: false, // true to show a regular alert message
		    alertText: "You have typed to many characters.", // Text in the alert message
		    statusNotificationClass: "status_notification",
		    alertFunction: null,
		    checkFunction: null
		}, options);

        return this.each(function() {

            var item = $(this);
            item.unbind('keyup');

            var charactersLength = $(this).val().length;

            if (!validateElement()) {
                return false;
            }

            $(this).keyup(function(e) {
                charactersLength = item.val().length;
                checkChars();
            });

            // Insert the status div
            if (settings.status) {
                item.before($("<div/>").addClass(settings.statusClass).html('-'));
                updateStatus();
            }

            // remove the status div
            if (!settings.status) {
                var removeThisDiv = item.parent().find("div");

                if (removeThisDiv) {
                    removeThisDiv.remove();
                }

            }

            function checkChars() {
                var valid = true;

                // Too many chars?
                if (charactersLength >= settings.maxCharacters) {
                    // To may chars, set the valid boolean to false
                    valid = false;
                    // Add the notifycation class when we have to many chars
                    item.addClass(settings.notificationClass);
                    // Cut down the string
                    //item.val(item.val().substr(0,settings.maxCharacters));
                    // Show the alert dialog box, if its set to true
                    showAlert();

                    if (settings.alertFunction) {
                        settings.alertFunction(charactersLength);
                    }
                }
                else {
                    // Remove the notification class
                    if (item.hasClass(settings.notificationClass)) {
                        item.removeClass(settings.notificationClass);
                    }
                }

                if (settings.status) {
                    updateStatus();
                }

                if (settings.checkFunction)
                    settings.checkFunction(charactersLength);
            };

            function updateStatus() {
                var charactersLeft = settings.maxCharacters - charactersLength;
                var el = item.parent().find("div:eq(0)");

                if (charactersLeft < 0) {
                    //charactersLeft = 0;
                    if (settings.statusNotificationClass) {
                        el.addClass(settings.statusNotificationClass);
                    }
                }
                else {
                    if (settings.statusNotificationClass) {
                        el.removeClass(settings.statusNotificationClass);
                    }
                }

                el.html(settings.statusText + " " + charactersLeft);
            };

            function showAlert() {
                if (settings.showAlert) {
                    alert(settings.alertText);
                }
            };

            function validateElement() {

                var ret = false;

                if (item.is('textarea')) {
                    ret = true;
                } else if (item.filter("input[type=text]")) {
                    ret = true;
                } else if (item.filter("input[type=password]")) {
                    ret = true;
                }

                return ret;
            };

        });
    };
})(jQuery);


(function($)
{

    $.clearwatermarks = function()
    {
        $("[wmwrap='true']").find("input,textarea").watermark({ remove: true });
    };

    $.addwatermarks = function()
    {
        $("[watermark != '']").each(function(num, el)
        {
            $(el).watermark($(el).attr("watermark"));
        });
    };

    $.watermark = function(o)
    {
        o.el = $(o.el);
        if (o.remove)
        {
            if (o.el.parent().attr("wmwrap") == 'true')
            {
                o.el.parent().replaceWith(o.el);
            };
        } else
        {
            if (o.el.parent().attr("wmwrap") != 'true')
            {
                o.el = o.el.wrap("<div wmwrap='true' style='position:relative; float:left;'/>");
                var l = $("<div/>");

                if (o.html) { l.html(o.html); };
                if (o.cls) { l.addClass(o.cls); };
                if (o.css) { l.css(o.css); };


               

                if (!o.cls && !o.css)
                {
                    l.css({ position: "absolute", left: "20px", top: "5px", cursor: "text" });
                    l.css("color", "#ccc");
                };

                if (!o.el.is("textarea")) { l.css({ top: ($.browser.mozilla) ? "3px" : "4px" }); };

                var focus = function()
                {
                    l.hide();
                };

                var blur = function()
                {
                    if (o.el.val() == "")
                    {
                        l.show();
                    } else
                    {
                        l.hide();
                    };
                };

                var click = function()
                {
                    o.el.focus();
                };

                if (o.inherit)
                {
                    if (typeof o.inherit == "string")
                    {
                        l.css(o.inherit, o.el.css(o.inherit));
                    } else
                    {
                        for (var x = 0; x < o.inherit.length; x++)
                        {
                            l.css(o.inherit[x], o.el.css(o.inherit[x]));
                        };
                    };
                };

                o.el.focus(focus).blur(blur);
                l.click(click);
                o.el.before(l);
                if ($.browser.mozilla && o.el.is("textarea")) { o.el.focus().blur(); }
                if (o.el.val() != "") { l.hide(); };
            };
        };
        return o.el;
    };

    $.fn.watermark = function(o)
    {
        return this.each(function()
        {

            if (typeof (o) == "string")
            {
                try { o = eval("(" + o + ")"); } catch (ex) { o = { html: o }; };
            };
            o.el = this;
            o.cls = $(this).attr("wclass");
            
            return $.watermark(o);
        });
    };
})(jQuery);


/* Copyright (c) 2006 Brandon Aaron (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-07-21 18:45:56 -0500 (Sat, 21 Jul 2007) $
 * $Rev: 2447 $
 *
 * Version 2.1.1
 */
(function($){$.fn.bgIframe=$.fn.bgiframe=function(s){if($.browser.msie&&/6.0/.test(navigator.userAgent)){s=$.extend({top:'auto',left:'auto',width:'auto',height:'auto',opacity:true,src:'javascript:false;'},s||{});var prop=function(n){return n&&n.constructor==Number?n+'px':n;},html='<iframe class="bgiframe"frameborder="0"tabindex="-1"src="'+s.src+'"'+'style="display:block;position:absolute;z-index:-1;'+(s.opacity!==false?'filter:Alpha(Opacity=\'0\');':'')+'top:'+(s.top=='auto'?'expression(((parseInt(this.parentNode.currentStyle.borderTopWidth)||0)*-1)+\'px\')':prop(s.top))+';'+'left:'+(s.left=='auto'?'expression(((parseInt(this.parentNode.currentStyle.borderLeftWidth)||0)*-1)+\'px\')':prop(s.left))+';'+'width:'+(s.width=='auto'?'expression(this.parentNode.offsetWidth+\'px\')':prop(s.width))+';'+'height:'+(s.height=='auto'?'expression(this.parentNode.offsetHeight+\'px\')':prop(s.height))+';'+'"/>';return this.each(function(){if($('> iframe.bgiframe',this).length==0)this.insertBefore(document.createElement(html),this.firstChild);});}return this;};})(jQuery);
eval(function(p,a,c,k,e,d){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--)d[e(c)]=k[c]||e(c);k=[function(e){return d[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}('(p($){c 2T="f";p 3Z(){b.7P=E;b.3Q=t;b.2y=[];b.3l=E;b.2S=E;b.5W="v-f-I";b.6f="v-f-1c";b.6h="v-f-3v";b.2w="v-f-4o";b.5Y="v-f-af";b.5B="v-f-3I";b.6e="v-f-4u";b.5v="v-f-49";b.4G="v-f-4O-H";b.6k=[];b.6k[""]={76:"ae",77:"ad 3s 4O h",74:"7U",75:"7U ac 7j",2M:"&#6m;ab",72:"3t 3s 7T F",2N:"&#6m;&#6m;",73:"3t 3s 7T B",2L:"aa&#6l;",71:"3t 3s 3H F",2K:"&#6l;&#6l;",70:"3t 3s 3H B",3f:"a9",6Z:"3t 3s 4O F",1n:["a8","a7","a6","a5","7S","a4","a3","a2","a1","a0","9Z","9Y"],1Z:["9X","9W","9V","9U","7S","9T","9S","9R","9Q","9P","9O","9N"],6K:"3t a 7R F",6D:"3t a 7R B",6X:"9M",4d:"9L 9K 3s B",1v:["9J","9I","9H","9G","9F","9E","9D"],1z:["9C","9B","9A","9z","9y","9x","9w"],4K:["9v","9u","9t","9s","9r","9q","9p"],4L:"9o 4g 9n 9m 2F H",3d:"7Q 4g, M d",2X:"4U/3J/3k",1B:0,Z:"7Q a h",1I:E};b.1D={3r:"2P",1V:"69",62:{},2e:t,4v:"",2W:"...",3X:"",7N:E,47:1d,5E:E,4h:E,2I:E,3g:E,5C:E,6L:1d,6H:1d,44:E,6G:"-10:+10",4f:1d,3D:E,2C:E,4e:E,4I:b.4M,1F:"+10",15:E,6Y:b.3d,R:t,T:t,1j:"9l",4c:t,4s:t,2Q:t,6C:t,4q:t,6B:1,4P:0,2r:1,2q:12,1K:E,4j:" - ",4n:"",3N:""};$.4x(b.1D,b.6k[""]);b.O=$(\'<I u="\'+b.5W+\'" 46="6a: 7t;"></I>\')}$.4x(3Z.6q,{29:"9k",5L:p(){k(b.7P){9j.5L.2k("",5d)}},9i:p(z){3x(b.1D,z||{});r b},6n:p(n,z){c 3Y=t;1l(59 6v b.1D){c 58=n.9h("h:"+59);k(58){3Y=3Y||{};5O{3Y[59]=9g(58)}5M(7x){3Y[59]=58}}}c 1a=n.1a.4t();c 1c=(1a=="I"||1a=="2H");k(!n.u){n.u="7F"+(++b.5a)}c 8=b.6i($(n),1c);8.z=$.4x({},z||{},3Y||{});k(1a=="q"){b.7O(n,8)}P{k(1c){b.7I(n,8)}}},6i:p(n,1c){c u=n[0].u.5y(/([:\\[\\]\\.])/g,"\\\\\\\\$1");r{u:u,q:n,1u:0,1m:0,1q:0,G:0,J:0,1c:1c,O:(!1c?b.O:$(\'<I 16="\'+b.6f+\'"></I>\'))}},7O:p(n,8){c q=$(n);k(q.2R(b.29)){r}c 4v=b.l(8,"4v");c 1I=b.l(8,"1I");k(4v){q[1I?"7K":"7J"](\'<2H 16="\'+b.6h+\'">\'+4v+"</2H>")}c 3r=b.l(8,"3r");k(3r=="2P"||3r=="4D"){q.2P(b.3U)}k(3r=="3W"||3r=="4D"){c 2W=b.l(8,"2W");c 3X=b.l(8,"3X");c 4o=$(b.l(8,"7N")?$("<56/>").2o(b.2w).7M({5s:3X,7L:2W,4b:2W}):$(\'<3W 4r="3W"></3W>\').2o(b.2w).V(3X==""?2W:$("<56/>").7M({5s:3X,7L:2W,4b:2W})));q[1I?"7K":"7J"](4o);4o.9f(p(){k($.f.3l&&$.f.3O==n){$.f.2s()}P{$.f.3U(n)}r E})}q.2o(b.29).6g(b.54).7C(b.6d).57("7H.f",p(3P,2V,K){8.z[2V]=K}).57("7G.f",p(3P,2V){r b.l(8,2V)});$.3n(n,2T,8)},7I:p(n,8){c 6j=$(n);k(6j.2R(b.29)){r}6j.2o(b.29).3v(8.O).57("7H.f",p(3P,2V,K){8.z[2V]=K}).57("7G.f",p(3P,2V){r b.l(8,2V)});$.3n(n,2T,8);b.5G(8,b.5K(8));b.26(8)},9e:p(8){c 1i=b.3z(8);8.O.1E(1i[1]*$(".v-f",8.O[0]).1E())},9d:p(q,7D,2Q,z,2x){c 8=b.7E;k(!8){c u="7F"+(++b.5a);b.2g=$(\'<q 4r="5l" u="\'+u+\'" 2f="1" 46="1T: 4Z; 1x: -7m;"/>\');b.2g.6g(b.54);$("2l").3v(b.2g);8=b.7E=b.6i(b.2g,E);8.z={};$.3n(b.2g[0],2T,8)}3x(8.z,z||{});b.2g.3i(7D);b.1O=(2x?(2x.1f?2x:[2x.9c,2x.9b]):t);k(!b.1O){c 52=53.7o||1e.1W.67||1e.2l.67;c 51=53.7n||1e.1W.66||1e.2l.66;c 3q=1e.1W.3T||1e.2l.3T;c 3p=1e.1W.3S||1e.2l.3S;b.1O=[(52/2)-2Z+3q,(51/2)-9a+3p]}b.2g.2a("1N",b.1O[0]+"2U").2a("1x",b.1O[1]+"2U");8.z.2Q=2Q;b.2S=1d;b.O.2o(b.5Y);b.3U(b.2g[0]);k($.4p){$.4p(b.O)}$.3n(b.2g[0],2T,8);r b},99:p(n){c $n=$(n);k(!$n.2R(b.29)){r}c 1a=n.1a.4t();$.98(n,2T);k(1a=="q"){$n.3V("."+b.6h).3R().3F().3V("."+b.2w).3R().3F().3b(b.29).4Y("2P",b.3U).4Y("6g",b.54).4Y("7C",b.6d)}P{k(1a=="I"||1a=="2H"){$n.3b(b.29).7s()}}},97:p(n){c $n=$(n);k(!$n.2R(b.29)){r}c 1a=n.1a.4t();k(1a=="q"){n.4u=E;$n.3V("3W."+b.2w).3u(p(){b.4u=E}).3F().3V("56."+b.2w).2a({7B:"1.0",7A:""})}P{k(1a=="I"||1a=="2H"){$n.7z("."+b.6e).3R()}}b.2y=$.7y(b.2y,p(K){r(K==n?t:K)})},96:p(n){c $n=$(n);k(!$n.2R(b.29)){r}c 1a=n.1a.4t();k(1a=="q"){n.4u=1d;$n.3V("3W."+b.2w).3u(p(){b.4u=1d}).3F().3V("56."+b.2w).2a({7B:"0.5",7A:"4l"})}P{k(1a=="I"||1a=="2H"){c 1c=$n.7z("."+b.6f);c L=1c.L();c 55={1N:0,1x:0};1c.5X().3u(p(){k($(b).2a("1T")=="95"){55=$(b).L();r E}});$n.94(\'<I 16="\'+b.6e+\'" 46="\'+($.2c.4C?"93-92: 91; ":"")+"1E: "+1c.1E()+"2U; 2h: "+1c.2h()+"2U; 1N: "+(L.1N-55.1N)+"2U; 1x: "+(L.1x-55.1x)+\'2U;"></I>\')}}b.2y=$.7y(b.2y,p(K){r(K==n?t:K)});b.2y[b.2y.1f]=n},7v:p(n){k(!n){r E}1l(c i=0;i<b.2y.1f;i++){k(b.2y[i]==n){r 1d}}r E},1r:p(n){5O{r $.3n(n,2T)}5M(7x){3K"7i 90 3n 1l b f"}},8Z:p(n,1k,K){c z=1k||{};k(1X 1k=="41"){z={};z[1k]=K}c 8=b.1r(n);k(8){k(b.3Q==8){b.2s(t)}3x(8.z,z);c h=x A();3x(8,{1g:t,1Q:t,24:t,19:t,1u:h.S(),1m:h.X(),1q:h.Q(),1h:h.S(),1t:h.X(),1p:h.Q(),G:h.X(),J:h.Q()});b.26(8)}},8Y:p(n){c 8=b.1r(n);k(8){b.26(8)}},8X:p(n,h,23){c 8=b.1r(n);k(8){b.5G(8,h,23);b.26(8);b.5V(8)}},8W:p(n){c 8=b.1r(n);k(8&&!8.1c){b.5P(8)}r(8?b.5F(8):t)},54:p(e){c 8=$.f.1r(e.n);c 2i=1d;k($.f.3l){4k(e.6c){C 9:$.f.2s(t,"");N;C 13:$.f.5u(e.n,8.1m,8.1q,$("1A.v-f-3E-3c-2E",8.O)[0]);r E;N;C 27:$.f.2s(t,$.f.l(8,"1j"));N;C 33:$.f.1J(e.n,(e.1s?-$.f.l(8,"2q"):-$.f.l(8,"2r")),"M");N;C 34:$.f.1J(e.n,(e.1s?+$.f.l(8,"2q"):+$.f.l(8,"2r")),"M");N;C 35:k(e.1s){$.f.5D(e.n)}2i=e.1s;N;C 36:k(e.1s){$.f.5z(e.n)}2i=e.1s;N;C 37:k(e.1s){$.f.1J(e.n,-1,"D")}2i=e.1s;N;C 38:k(e.1s){$.f.1J(e.n,-7,"D")}2i=e.1s;N;C 39:k(e.1s){$.f.1J(e.n,+1,"D")}2i=e.1s;N;C 40:k(e.1s){$.f.1J(e.n,+7,"D")}2i=e.1s;N;4l:2i=E}}P{k(e.6c==36&&e.1s){$.f.3U(b)}P{2i=E}}k(2i){e.8V();e.8U()}},6d:p(e){c 8=$.f.1r(e.n);c 2t=$.f.7e($.f.l(8,"2X"));c 6b=8T.8S(e.7w==5f?e.6c:e.7w);r e.1s||(6b<" "||!2t||2t.6W(6b)>-1)},3U:p(q){q=q.n||q;k(q.1a.4t()!="q"){q=$("q",q.8R)[0]}k($.f.7v(q)||$.f.3O==q){r}c 8=$.f.1r(q);c 4s=$.f.l(8,"4s");3x(8.z,(4s?4s.2k(q,[q,8]):{}));$.f.2s(t,"");$.f.3O=q;$.f.5P(8);k($.f.2S){q.K=""}k(!$.f.1O){$.f.1O=$.f.64(q);$.f.1O[1]+=q.8Q}c 1y=E;$(q).5X().3u(p(){1y|=$(b).2a("1T")=="7u";r!1y});k(1y&&$.2c.65){$.f.1O[0]-=1e.1W.3T;$.f.1O[1]-=1e.1W.3S}c L={1N:$.f.1O[0],1x:$.f.1O[1]};$.f.1O=t;8.1g=t;8.O.2a({1T:"4Z",6a:"8P",1x:"-8O"});$.f.26(8);8.O.1E($.f.3z(8)[1]*$(".v-f",8.O[0])[0].8N);L=$.f.7p(8,L,1y);8.O.2a({1T:($.f.2S&&$.4p?"8M":(1y?"7u":"4Z")),6a:"7t",1N:L.1N+"2U",1x:L.1x+"2U"});k(!8.1c){c 1V=$.f.l(8,"1V")||"69";c 1j=$.f.l(8,"1j");c 3m=p(){$.f.3l=1d;k($.2c.4C&&1G($.2c.6N,10)<7){$("4B.v-f-5r").2a({1E:8.O.1E()+4,2h:8.O.2h()+4})}};k($.50&&$.50[1V]){8.O.69(1V,$.f.l(8,"62"),1j,3m)}P{8.O[1V](1j,3m)}k(1j==""){3m()}k(8.q[0].4r!="63"){8.q[0].2P()}$.f.3Q=8}},26:p(8){c 68={1E:8.O.1E()+4,2h:8.O.2h()+4};8.O.7s().3v(b.78(8)).8L("4B.v-f-5r").2a({1E:68.1E,2h:68.2h});c 1i=b.3z(8);8.O[(1i[0]!=1||1i[1]!=1?"7r":"3R")+"7q"]("v-f-8K");8.O[(b.l(8,"1I")?"7r":"3R")+"7q"]("v-f-8J");k(8.q&&8.q[0].4r!="63"){$(8.q[0]).2P()}},7p:p(8,L,1y){c 2x=8.q?b.64(8.q[0]):t;c 52=53.7o||1e.1W.67;c 51=53.7n||1e.1W.66;c 3q=1e.1W.3T||1e.2l.3T;c 3p=1e.1W.3S||1e.2l.3S;k(b.l(8,"1I")||(L.1N+8.O.1E()-3q)>52){L.1N=21.2z((1y?0:3q),2x[0]+(8.q?8.q.1E():0)-(1y?3q:0)-8.O.1E()-(1y&&$.2c.65?1e.1W.3T:0))}P{L.1N-=(1y?3q:0)}k((L.1x+8.O.2h()-3p)>51){L.1x=21.2z((1y?0:3p),2x[1]-(1y?3p:0)-(b.2S?0:8.O.2h())-(1y&&$.2c.65?1e.1W.3S:0))}P{L.1x-=(1y?3p:0)}r L},64:p(3o){3h(3o&&(3o.4r=="63"||3o.8I!=1)){3o=3o.8H}c 1T=$(3o).L();r[1T.1N,1T.1x]},2s:p(q,1j){c 8=b.3Q;k(!8||(q&&8!=$.3n(q,2T))){r}c 1K=b.l(8,"1K");k(1K&&8.2v){b.4W("#"+8.u,b.2Y(8,8.1h,8.1t,8.1p))}8.2v=E;k(b.3l){1j=(1j!=t?1j:b.l(8,"1j"));c 1V=b.l(8,"1V");c 3m=p(){$.f.5Z(8)};k(1j!=""&&$.50&&$.50[1V]){8.O.61(1V,$.f.l(8,"62"),1j,3m)}P{8.O[(1j==""?"61":(1V=="8G"?"8F":(1V=="8E"?"8D":"61")))](1j,3m)}k(1j==""){b.5Z(8)}c 4q=b.l(8,"4q");k(4q){4q.2k((8.q?8.q[0]:t),[(8.q?8.q.3i():""),8])}b.3l=E;b.3O=t;8.z.3I=t;k(b.2S){b.2g.2a({1T:"4Z",1N:"0",1x:"-7m"});k($.4p){$.8C();$("2l").3v(b.O)}}b.2S=E}b.3Q=t},5Z:p(8){8.O.3b(b.5Y).4Y(".v-f");$("."+b.5B,8.O).3R()},6s:p(3P){k(!$.f.3Q){r}c $n=$(3P.n);k(($n.5X("#"+$.f.5W).1f==0)&&!$n.2R($.f.29)&&!$n.2R($.f.2w)&&$.f.3l&&!($.f.2S&&$.4p)){$.f.2s(t,"")}},1J:p(u,L,20){c n=$(u);c 8=b.1r(n[0]);b.4z(8,L,20);b.26(8)},5z:p(u){c n=$(u);c 8=b.1r(n[0]);k(b.l(8,"5C")&&8.1h){8.1u=8.1h;8.G=8.1m=8.1t;8.J=8.1q=8.1p}P{c h=x A();8.1u=h.S();8.G=8.1m=h.X();8.J=8.1q=h.Q()}b.43(8);b.1J(n)},5o:p(u,3a,20){c n=$(u);c 8=b.1r(n[0]);8.4X=E;8["45"+(20=="M"?"7l":"7k")]=8["8B"+(20=="M"?"7l":"7k")]=1G(3a.2j[3a.8A].K,10);b.43(8);b.1J(n)},5n:p(u){c n=$(u);c 8=b.1r(n[0]);k(8.q&&8.4X&&!$.2c.4C){8.q[0].2P()}8.4X=!8.4X},6V:p(u,H){c n=$(u);c 8=b.1r(n[0]);8.z.1B=H;b.26(8)},5u:p(u,F,B,1A){k($(1A).2R(b.5v)){r}c n=$(u);c 8=b.1r(n[0]);c 1K=b.l(8,"1K");k(1K){8.2v=!8.2v;k(8.2v){$(".v-f 1A",8.O).3b(b.4G);$(1A).2o(b.4G)}}8.1u=8.1h=$("a",1A).V();8.1m=8.1t=F;8.1q=8.1p=B;k(8.2v){8.1Q=8.24=8.19=t}P{k(1K){8.1Q=8.1h;8.24=8.1t;8.19=8.1p}}b.4W(u,b.2Y(8,8.1h,8.1t,8.1p));k(8.2v){8.1g=x A(8.1p,8.1t,8.1h);b.26(8)}P{k(1K){8.1u=8.1h=8.1g.S();8.1m=8.1t=8.1g.X();8.1q=8.1p=8.1g.Q();8.1g=t;k(8.1c){b.26(8)}}}},5D:p(u){c n=$(u);c 8=b.1r(n[0]);k(b.l(8,"5E")){r}8.2v=E;8.1Q=8.24=8.19=8.1g=t;b.4W(n,"")},4W:p(u,1U){c n=$(u);c 8=b.1r(n[0]);1U=(1U!=t?1U:b.2Y(8));k(b.l(8,"1K")&&1U){1U=(8.1g?b.2Y(8,8.1g):1U)+b.l(8,"4j")+1U}k(8.q){8.q.3i(1U)}b.5V(8);c 2Q=b.l(8,"2Q");k(2Q){2Q.2k((8.q?8.q[0]:t),[1U,8])}P{k(8.q){8.q.4o("7j")}}k(8.1c){b.26(8)}P{k(!8.2v){b.2s(t,b.l(8,"1j"));b.3O=8.q[0];k(1X(8.q[0])!="4w"){8.q[0].2P()}b.3O=t}}},5V:p(8){c 4n=b.l(8,"4n");k(4n){c 3N=b.l(8,"3N");c h=b.5F(8);1U=(6u(h)?(!h[0]&&!h[1]?"":b.1Y(3N,h[0],b.1P(8))+b.l(8,"4j")+b.1Y(3N,h[1]||h[0],b.1P(8))):b.1Y(3N,h,b.1P(8)));$(4n).3u(p(){$(b).3i(1U)})}},8z:p(h){c H=h.3A();r[(H>0&&H<6),""]},4M:p(h){c 25=x A(h.Q(),h.X(),h.S(),(h.8y()/-60));c 3M=x A(25.Q(),1-1,4);c 1B=3M.3A()||7;3M.4y(3M.S()+1-1B);k(1B<4&&25<3M){25.4y(25.S()-3);r $.f.4M(25)}P{k(25>x A(25.Q(),12-1,28)){1B=x A(25.Q()+1,1-1,4).3A()||7;k(1B>4&&(25.3A()||7)<1B-3){r 1}}}r 21.8x(((25-3M)/8w)/7)+1},3d:p(h,8){r $.f.1Y($.f.l(8,"3d"),h,$.f.1P(8))},5N:p(18,K,z){k(18==t||K==t){3K"5H 5d"}K=(1X K=="4w"?K.5e():K+"");k(K==""){r t}c 1F=(z?z.1F:t)||b.1D.1F;c 1z=(z?z.1z:t)||b.1D.1z;c 1v=(z?z.1v:t)||b.1D.1v;c 1Z=(z?z.1Z:t)||b.1D.1Z;c 1n=(z?z.1n:t)||b.1D.1n;c B=-1;c F=-1;c H=-1;c 3j=-1;c 1L=E;c 1M=p(1o){c 1C=(U+1<18.1f&&18.1b(U+1)==1o);k(1C){U++}r 1C};c 3L=p(1o){1M(1o);c 5U=(1o=="@"?14:(1o=="y"?4:(1o=="o"?3:2)));c 2f=5U;c 2u=0;3h(2f>0&&1S<K.1f&&K.1b(1S)>="0"&&K.1b(1S)<="9"){2u=2u*10+1G(K.1b(1S++),10);2f--}k(2f==5U){3K"7i 5i 5T 1T "+1S}r 2u};c 5S=p(1o,4S,4T){c 4m=(1M(1o)?4T:4S);c 2f=0;1l(c j=0;j<4m.1f;j++){2f=21.2z(2f,4m[j].1f)}c 1k="";c 7h=1S;3h(2f>0&&1S<K.1f){1k+=K.1b(1S++);1l(c i=0;i<4m.1f;i++){k(1k==4m[i]){r i+1}}2f--}3K"8v 1k 5T 1T "+7h};c 4V=p(){k(K.1b(1S)!=18.1b(U)){3K"8u 1L 5T 1T "+1S}1S++};c 1S=0;1l(c U=0;U<18.1f;U++){k(1L){k(18.1b(U)=="\'"&&!1M("\'")){1L=E}P{4V()}}P{4k(18.1b(U)){C"d":H=3L("d");N;C"D":5S("D",1z,1v);N;C"o":3j=3L("o");N;C"m":F=3L("m");N;C"M":F=5S("M",1Z,1n);N;C"y":B=3L("y");N;C"@":c h=x A(3L("@"));B=h.Q();F=h.X()+1;H=h.S();N;C"\'":k(1M("\'")){4V()}P{1L=1d}N;4l:4V()}}}k(B<2Z){B+=x A().Q()-x A().Q()%2Z+(B<=1F?0:-2Z)}k(3j>-1){F=1;H=3j;8t{c 5R=b.30(B,F-1);k(H<=5R){N}F++;H-=5R}3h(1d)}c h=x A(B,F-1,H);k(h.Q()!=B||h.X()+1!=F||h.S()!=H){3K"5H h"}r h},8s:"3k-4U-3J",8r:"D, 3J M 3k",8q:"3k-4U-3J",8p:"D, d M y",8o:"4g, 3J-M-y",8n:"D, d M y",8m:"D, d M 3k",8l:"D, d M 3k",8k:"D, d M y",8j:"@",8i:"3k-4U-3J",1Y:p(18,h,z){k(!h){r""}c 1z=(z?z.1z:t)||b.1D.1z;c 1v=(z?z.1v:t)||b.1D.1v;c 1Z=(z?z.1Z:t)||b.1D.1Z;c 1n=(z?z.1n:t)||b.1D.1n;c 1M=p(1o){c 1C=(U+1<18.1f&&18.1b(U+1)==1o);k(1C){U++}r 1C};c 4R=p(1o,K,7g){c 2u=""+K;k(1M(1o)){3h(2u.1f<7g){2u="0"+2u}}r 2u};c 5Q=p(1o,K,4S,4T){r(1M(1o)?4T[K]:4S[K])};c 1R="";c 1L=E;k(h){1l(c U=0;U<18.1f;U++){k(1L){k(18.1b(U)=="\'"&&!1M("\'")){1L=E}P{1R+=18.1b(U)}}P{4k(18.1b(U)){C"d":1R+=4R("d",h.S(),2);N;C"D":1R+=5Q("D",h.3A(),1z,1v);N;C"o":c 3j=h.S();1l(c m=h.X()-1;m>=0;m--){3j+=b.30(h.Q(),m)}1R+=4R("o",3j,3);N;C"m":1R+=4R("m",h.X()+1,2);N;C"M":1R+=5Q("M",h.X(),1Z,1n);N;C"y":1R+=(1M("y")?h.Q():(h.7f()%2Z<10?"0":"")+h.7f()%2Z);N;C"@":1R+=h.2b();N;C"\'":k(1M("\'")){1R+="\'"}P{1L=1d}N;4l:1R+=18.1b(U)}}}}r 1R},7e:p(18){c 2t="";c 1L=E;1l(c U=0;U<18.1f;U++){k(1L){k(18.1b(U)=="\'"&&!1M("\'")){1L=E}P{2t+=18.1b(U)}}P{4k(18.1b(U)){C"d":C"m":C"y":C"@":2t+="8h";N;C"D":C"M":r t;C"\'":k(1M("\'")){2t+="\'"}P{1L=1d}N;4l:2t+=18.1b(U)}}}r 2t},l:p(8,1k){r 8.z[1k]!==5f?8.z[1k]:b.1D[1k]},5P:p(8){c 2X=b.l(8,"2X");c 2O=8.q?8.q.3i().6F(b.l(8,"4j")):t;8.1Q=8.24=8.19=t;c h=2e=b.5K(8);k(2O.1f>0){c z=b.1P(8);k(2O.1f>1){h=b.5N(2X,2O[1],z)||2e;8.1Q=h.S();8.24=h.X();8.19=h.Q()}5O{h=b.5N(2X,2O[0],z)||2e}5M(e){b.5L(e);h=2e}}8.1u=h.S();8.G=8.1m=h.X();8.J=8.1q=h.Q();8.1h=(2O[0]?h.S():0);8.1t=(2O[0]?h.X():0);8.1p=(2O[0]?h.Q():0);b.4z(8)},5K:p(8){c h=b.42(b.l(8,"2e"),x A());c R=b.2m(8,"2n",1d);c T=b.2m(8,"2z");h=(R&&h<R?R:h);h=(T&&h>T?T:h);r h},42:p(h,2e){c 7b=p(L){c h=x A();h.6R(h.6Q()+L);r h};c 7c=p(L,5J){c h=x A();c B=h.Q();c F=h.X();c H=h.S();c 5I=/([+-]?[0-9]+)\\s*(d|D|w|W|m|M|y|Y)?/g;c 1C=5I.7d(L);3h(1C){4k(1C[2]||"d"){C"d":C"D":H+=1G(1C[1],10);N;C"w":C"W":H+=1G(1C[1],10)*7;N;C"m":C"M":F+=1G(1C[1],10);H=21.2n(H,5J(B,F));N;C"y":C"Y":B+=1G(1C[1],10);H=21.2n(H,5J(B,F));N}1C=5I.7d(L)}r x A(B,F,H)};h=(h==t?2e:(1X h=="41"?7c(h,b.30):(1X h=="5i"?(8g(h)?2e:7b(h)):h)));r(h&&h.5e()=="5H A"?2e:h)},5G:p(8,h,23){c 2B=!(h);c 7a=8.1m;c 79=8.1q;h=b.42(h,x A());8.1u=8.1h=h.S();8.G=8.1m=8.1t=h.X();8.J=8.1q=8.1p=h.Q();k(b.l(8,"1K")){k(23){23=b.42(23,t);8.1Q=23.S();8.24=23.X();8.19=23.Q()}P{8.1Q=8.1h;8.24=8.1t;8.19=8.1p}}k(7a!=8.1m||79!=8.1q){b.43(8)}b.4z(8);k(8.q){8.q.3i(2B?"":b.2Y(8)+(!b.l(8,"1K")?"":b.l(8,"4j")+b.2Y(8,8.1Q,8.24,8.19)))}},5F:p(8){c 4Q=(!8.1p||(8.q&&8.q.3i()=="")?t:x A(8.1p,8.1t,8.1h));k(b.l(8,"1K")){r[8.1g||4Q,(!8.19?8.1g||4Q:x A(8.19,8.24,8.1Q))]}P{r 4Q}},78:p(8){c 2G=x A();2G=x A(2G.Q(),2G.X(),2G.S());c 15=b.l(8,"15");c Z=b.l(8,"Z")||"&#5q;";c 1I=b.l(8,"1I");c 2B=(b.l(8,"5E")?"":\'<I 16="v-f-2B"><a 22="17.f.5D(\\\'#\'+8.u+"\');\\""+b.1H(15,8.u,b.l(8,"77"),Z)+">"+b.l(8,"76")+"</a></I>");c 5t=\'<I 16="v-f-8f">\'+(1I?"":2B)+\'<I 16="v-f-8e"><a 22="17.f.2s();"\'+b.1H(15,8.u,b.l(8,"75"),Z)+">"+b.l(8,"74")+"</a></I>"+(1I?2B:"")+"</I>";c 3I=b.l(8,"3I");c 47=b.l(8,"47");c 4h=b.l(8,"4h");c 2I=b.l(8,"2I");c 3g=b.l(8,"3g");c 1i=b.3z(8);c 4P=b.l(8,"4P");c 2r=b.l(8,"2r");c 2q=b.l(8,"2q");c 6T=(1i[0]!=1||1i[1]!=1);c 4H=(!8.1h?x A(8d,9,9):x A(8.1p,8.1t,8.1h));c R=b.2m(8,"2n",1d);c T=b.2m(8,"2z");c G=8.G-4P;c J=8.J;k(G<0){G+=12;J--}k(T){c 4i=x A(T.Q(),T.X()-1i[1]+1,T.S());4i=(R&&4i<R?R:4i);3h(x A(J,G,1)>4i){G--;k(G<0){G=11;J--}}}c 2M=b.l(8,"2M");2M=(!2I?2M:b.1Y(2M,x A(J,G-2r,1),b.1P(8)));c 2N=(3g?b.l(8,"2N"):"");2N=(!2I?2N:b.1Y(2N,x A(J,G-2q,1),b.1P(8)));c 4N=\'<I 16="v-f-4N">\'+(b.5h(8,-1,J,G)?(3g?"<a 22=\\"17.f.1J(\'#"+8.u+"\', -"+2q+", \'M\');\\""+b.1H(15,8.u,b.l(8,"73"),Z)+">"+2N+"</a>":"")+"<a 22=\\"17.f.1J(\'#"+8.u+"\', -"+2r+", \'M\');\\""+b.1H(15,8.u,b.l(8,"72"),Z)+">"+2M+"</a>":(4h?"":"<2J>"+2N+"</2J><2J>"+2M+"</2J>"))+"</I>";c 2L=b.l(8,"2L");2L=(!2I?2L:b.1Y(2L,x A(J,G+2r,1),b.1P(8)));c 2K=(3g?b.l(8,"2K"):"");2K=(!2I?2K:b.1Y(2K,x A(J,G+2q,1),b.1P(8)));c 3H=\'<I 16="v-f-3H">\'+(b.5h(8,+1,J,G)?"<a 22=\\"17.f.1J(\'#"+8.u+"\', +"+2r+", \'M\');\\""+b.1H(15,8.u,b.l(8,"71"),Z)+">"+2L+"</a>"+(3g?"<a 22=\\"17.f.1J(\'#"+8.u+"\', +"+2q+", \'M\');\\""+b.1H(15,8.u,b.l(8,"70"),Z)+">"+2K+"</a>":""):(4h?"":"<2J>"+2L+"</2J><2J>"+2K+"</2J>"))+"</I>";c 3f=b.l(8,"3f");c 5A=(b.l(8,"5C")&&8.1h?4H:2G);3f=(!2I?3f:b.1Y(3f,5A,b.1P(8)));c V=(3I?\'<I 16="\'+b.5B+\'">\'+3I+"</I>":"")+(47&&!8.1c?5t:"")+\'<I 16="v-f-8c">\'+(1I?3H:4N)+(b.5g(8,5A)?\'<I 16="v-f-4O"><a 22="17.f.5z(\\\'#\'+8.u+"\');\\""+b.1H(15,8.u,b.l(8,"6Z"),Z)+">"+3f+"</a></I>":"")+(1I?4N:3H)+"</I>";c 1B=b.l(8,"1B");c 4f=b.l(8,"4f");c 1v=b.l(8,"1v");c 1z=b.l(8,"1z");c 4K=b.l(8,"4K");c 1n=b.l(8,"1n");c 4c=b.l(8,"4c");c 3D=b.l(8,"3D");c 2C=b.l(8,"2C");c 4e=b.l(8,"4e");c 4I=b.l(8,"4I")||b.4M;c 4d=b.l(8,"4d");c 2d=(15?b.l(8,"4L")||Z:"");c 3d=b.l(8,"6Y")||b.3d;c 23=8.1Q?x A(8.19,8.24,8.1Q):4H;1l(c 3e=0;3e<1i[0];3e++){1l(c 3G=0;3G<1i[1];3G++){c 3B=x A(J,G,8.1u);V+=\'<I 16="v-f-8b-F\'+(3G==0?" v-f-x-3e":"")+\'">\'+b.6M(8,G,J,R,T,3B,3e>0||3G>0,15,Z,1n)+\'<6O 16="v-f" 8a="0" 89="0"><6U><4E 16="v-f-4b-3e">\'+(4e?"<1A"+b.1H(15,8.u,4d,Z)+">"+b.l(8,"6X")+"</1A>":"");1l(c 2p=0;2p<7;2p++){c H=(2p+1B)%7;c 4L=(2d.6W("4g")>-1?2d.5y(/4g/,1v[H]):2d.5y(/D/,1z[H]));V+="<1A"+((2p+1B+6)%7>=5?\' 16="v-f-2F-3F-3c"\':"")+">"+(!4f?"<2H":"<a 22=\\"17.f.6V(\'#"+8.u+"\', "+H+\');"\')+b.1H(15,8.u,4L,Z)+\' 4b="\'+1v[H]+\'">\'+4K[H]+(4f?"</a>":"</2H>")+"</1A>"}V+="</4E></6U><6P>";c 5x=b.30(J,G);k(J==8.1q&&G==8.1m){8.1u=21.2n(8.1u,5x)}c 4J=(b.6y(J,G)-1B+7)%7;c 48=x A(J,G,1-4J);c 3C=x A(J,G,1-4J);c 1w=3C;c 6S=(6T?6:21.88((4J+5x)/7));1l(c 5w=0;5w<6S;5w++){V+=\'<4E 16="v-f-3E-3e">\'+(4e?\'<1A 16="v-f-2F-3G"\'+b.1H(15,8.u,4d,Z)+">"+4I(1w)+"</1A>":"");1l(c 2p=0;2p<7;2p++){c 4a=(4c?4c.2k((8.q?8.q[0]:t),[1w]):[1d,""]);c 2D=(1w.X()!=G);c 49=2D||!4a[0]||(R&&1w<R)||(T&&1w>T);V+=\'<1A 16="v-f-3E-3c\'+((2p+1B+6)%7>=5?" v-f-2F-3F-3c":"")+(2D?" v-f-87-F":"")+(1w.2b()==3B.2b()&&G==8.1m?" v-f-3E-3c-2E":"")+(49?" "+b.5v:"")+(2D&&!2C?"":" "+4a[1]+(1w.2b()>=4H.2b()&&1w.2b()<=23.2b()?" "+b.4G:"")+(1w.2b()==2G.2b()?" v-f-2G":""))+\'"\'+((!2D||2C)&&4a[2]?\' 4b="\'+4a[2]+\'"\':"")+(49?(3D?" 5m=\\"17(b).4F().2o(\'v-f-2F-2E\');\\" 5k=\\"17(b).4F().3b(\'v-f-2F-2E\');\\"":""):" 5m=\\"17(b).2o(\'v-f-3E-3c-2E\')"+(3D?".4F().2o(\'v-f-2F-2E\')":"")+";"+(!15||(2D&&!2C)?"":"17(\'#v-f-2d-"+8.u+"\').V(\'"+(3d.2k((8.q?8.q[0]:t),[1w,8])||Z)+"\');")+"\\" 5k=\\"17(b).3b(\'v-f-3E-3c-2E\')"+(3D?".4F().3b(\'v-f-2F-2E\')":"")+";"+(!15||(2D&&!2C)?"":"17(\'#v-f-2d-"+8.u+"\').V(\'"+Z+"\');")+\'" 22="17.f.5u(\\\'#\'+8.u+"\',"+G+","+J+\', b);"\')+">"+(2D?(2C?1w.S():"&#5q;"):(49?1w.S():"<a>"+1w.S()+"</a>"))+"</1A>";48.4y(48.S()+1);3C.6R(3C.6Q()+1);1w=(48>3C?48:3C)}V+="</4E>"}G++;k(G>11){G=0;J++}V+="</6P></6O></I>"}}V+=(15?\'<I 46="2B: 4D;"></I><I u="v-f-2d-\'+8.u+\'" 16="v-f-2d">\'+Z+"</I>":"")+(!47&&!8.1c?5t:"")+\'<I 46="2B: 4D;"></I>\'+($.2c.4C&&1G($.2c.6N,10)<7&&!8.1c?\'<4B 5s="86:E;" 16="v-f-5r"></4B>\':"");r V},6M:p(8,G,J,R,T,3B,5p,15,Z,1n){R=(8.1g&&R&&3B<R?3B:R);c 44=b.l(8,"44");c V=\'<I 16="v-f-85">\';c 31="";k(5p||!b.l(8,"6L")){31+=1n[G]+"&#5q;"}P{c 6J=(R&&R.Q()==J);c 6I=(T&&T.Q()==J);31+=\'<3a 16="v-f-x-F" 6E="17.f.5o(\\\'#\'+8.u+"\', b, \'M\');\\" 22=\\"17.f.5n(\'#"+8.u+"\');\\""+b.1H(15,8.u,b.l(8,"6K"),Z)+">";1l(c F=0;F<12;F++){k((!6J||F>=R.X())&&(!6I||F<=T.X())){31+=\'<4A K="\'+F+\'"\'+(F==G?\' 45="45"\':"")+">"+1n[F]+"</4A>"}}31+="</3a>"}k(!44){V+=31}k(5p||!b.l(8,"6H")){V+=J}P{c 2A=b.l(8,"6G").6F(":");c B=0;c 19=0;k(2A.1f!=2){B=J-10;19=J+10}P{k(2A[0].1b(0)=="+"||2A[0].1b(0)=="-"){B=19=x A().Q();B+=1G(2A[0],10);19+=1G(2A[1],10)}P{B=1G(2A[0],10);19=1G(2A[1],10)}}B=(R?21.2z(B,R.Q()):B);19=(T?21.2n(19,T.Q()):19);V+=\'<3a 16="v-f-x-B" 6E="17.f.5o(\\\'#\'+8.u+"\', b, \'Y\');\\" 22=\\"17.f.5n(\'#"+8.u+"\');\\""+b.1H(15,8.u,b.l(8,"6D"),Z)+">";1l(;B<=19;B++){V+=\'<4A K="\'+B+\'"\'+(B==J?\' 45="45"\':"")+">"+B+"</4A>"}V+="</3a>"}k(44){V+=31}V+="</I>";r V},1H:p(15,u,5l,Z){r(15?" 5m=\\"17(\'#v-f-2d-"+u+"\').V(\'"+(5l||Z)+"\');\\" 5k=\\"17(\'#v-f-2d-"+u+"\').V(\'"+Z+"\');\\"":"")},4z:p(8,L,20){c B=8.J+(20=="Y"?L:0);c F=8.G+(20=="M"?L:0);c H=21.2n(8.1u,b.30(B,F))+(20=="D"?L:0);c h=x A(B,F,H);c R=b.2m(8,"2n",1d);c T=b.2m(8,"2z");h=(R&&h<R?R:h);h=(T&&h>T?T:h);8.1u=h.S();8.G=8.1m=h.X();8.J=8.1q=h.Q();k(20=="M"||20=="Y"){b.43(8)}},43:p(8){c 5j=b.l(8,"6C");k(5j){5j.2k((8.q?8.q[0]:t),[8.1q,8.1m+1,8])}},3z:p(8){c 1i=b.l(8,"6B");r(1i==t?[1,1]:(1X 1i=="5i"?[1,1i]:1i))},2m:p(8,6A,6z){c h=b.42(b.l(8,6A+"A"),t);k(h){h.84(0);h.83(0);h.82(0);h.81(0)}r(!6z||!8.1g?h:(!h||8.1g>h?8.1g:h))},30:p(B,F){r 32-x A(B,F,32).S()},6y:p(B,F){r x A(B,F,1).3A()},5h:p(8,L,6x,6w){c 1i=b.3z(8);c h=x A(6x,6w+(L<0?L:1i[1]),1);k(L<0){h.4y(b.30(h.Q(),h.X()))}r b.5g(8,h)},5g:p(8,h){c 3y=(!8.1g?t:x A(8.1q,8.1m,8.1u));3y=(3y&&8.1g<3y?8.1g:3y);c R=3y||b.2m(8,"2n");c T=b.2m(8,"2z");r((!R||h>=R)&&(!T||h<=T))},1P:p(8){c 1F=b.l(8,"1F");1F=(1X 1F!="41"?1F:x A().Q()%2Z+1G(1F,10));r{1F:1F,1z:b.l(8,"1z"),1v:b.l(8,"1v"),1Z:b.l(8,"1Z"),1n:b.l(8,"1n")}},2Y:p(8,H,F,B){k(!H){8.1h=8.1u;8.1t=8.1m;8.1p=8.1q}c h=(H?(1X H=="4w"?H:x A(B,F,H)):x A(8.1p,8.1t,8.1h));r b.1Y(b.l(8,"2X"),h,b.1P(8))}});p 3x(n,3w){$.4x(n,3w);1l(c 1k 6v 3w){k(3w[1k]==t||3w[1k]==5f){n[1k]=3w[1k]}}r n}p 6u(a){r(a&&(($.2c.80&&1X a=="4w"&&a.1f)||(a.6t&&a.6t.5e().1o(/\\6r\\(\\)/))))}$.7Z.f=p(2j){k(!$.f.5b){$(1e.2l).3v($.f.O).7Y($.f.6s);$.f.5b=1d}c 5c=6r.6q.7X.7W(5d,1);k(1X 2j=="41"&&(2j=="7V"||2j=="S")){r $.f["6p"+2j+"3Z"].2k($.f,[b[0]].6o(5c))}r b.3u(p(){1X 2j=="41"?$.f["6p"+2j+"3Z"].2k($.f,[b].6o(5c)):$.f.6n(b,2j)})};$.f=x 3Z();$.f.5b=E;$.f.5a=x A().2b()})(17)',62,636,'||||||||inst|||this|var|||datepicker||date|||if|_get||target||function|input|return||null|id|ui||new||settings|Date|year|case||false|month|drawMonth|day|div|drawYear|value|offset||break|dpDiv|else|getFullYear|minDate|getDate|maxDate|iFormat|html||getMonth||initStatus||||||showStatus|class|jQuery|format|endYear|nodeName|charAt|inline|true|document|length|rangeStart|currentDay|numMonths|duration|name|for|selectedMonth|monthNames|match|currentYear|selectedYear|_getInst|ctrlKey|currentMonth|selectedDay|dayNames|printDate|top|isFixed|dayNamesShort|td|firstDay|matches|_defaults|width|shortYearCutoff|parseInt|_addStatus|isRTL|_adjustDate|rangeSelect|literal|lookAhead|left|_pos|_getFormatConfig|endDay|output|iValue|position|dateStr|showAnim|documentElement|typeof|formatDate|monthNamesShort|period|Math|onclick|endDate|endMonth|checkDate|_updateDatepicker|||markerClassName|css|getTime|browser|status|defaultDate|size|_dialogInput|height|handled|options|apply|body|_getMinMaxDate|min|addClass|dow|stepBigMonths|stepMonths|_hideDatepicker|chars|num|stayOpen|_triggerClass|pos|_disabledInputs|max|years|clear|showOtherMonths|otherMonth|over|week|today|span|navigationAsDateFormat|label|nextBigText|nextText|prevText|prevBigText|dates|focus|onSelect|hasClass|_inDialog|PROP_NAME|px|key|buttonText|dateFormat|_formatDate|100|_getDaysInMonth|monthHtml|||||||||select|removeClass|cell|dateStatus|row|currentText|showBigPrevNext|while|val|doy|yy|_datepickerShowing|postProcess|data|obj|scrollY|scrollX|showOn|the|Show|each|append|props|extendRemove|newMinDate|_getNumberOfMonths|getDay|selectedDate|utcDate|highlightWeek|days|end|col|next|prompt|dd|throw|getNumber|firstMon|altFormat|_lastInput|event|_curInst|remove|scrollTop|scrollLeft|_showDatepicker|siblings|button|buttonImage|inlineSettings|Datepicker||string|_determineDate|_notifyChange|showMonthAfterYear|selected|style|closeAtTop|tzDate|unselectable|daySettings|title|beforeShowDay|weekStatus|showWeeks|changeFirstDay|DD|hideIfNoPrevNext|maxDraw|rangeSeparator|switch|default|names|altField|trigger|blockUI|onClose|type|beforeShow|toLowerCase|disabled|appendText|object|extend|setDate|_adjustInstDate|option|iframe|msie|both|tr|parent|_currentClass|currentDate|calculateWeek|leadDays|dayNamesMin|dayStatus|iso8601Week|prev|current|showCurrentAtPos|startDate|formatNumber|shortNames|longNames|mm|checkLiteral|_selectDate|_selectingMonthYear|unbind|absolute|effects|browserHeight|browserWidth|window|_doKeyDown|relOffset|img|bind|attrValue|attrName|uuid|initialized|otherArgs|arguments|toString|undefined|_isInRange|_canAdjustMonth|number|onChange|onmouseout|text|onmouseover|_clickMonthYear|_selectMonthYear|secondary|xa0|cover|src|controls|_selectDay|_unselectableClass|dRow|daysInMonth|replace|_gotoToday|gotoDate|_promptClass|gotoCurrent|_clearDate|mandatory|_getDate|_setDate|Invalid|pattern|getDaysInMonth|_getDefaultDate|log|catch|parseDate|try|_setDateFromField|formatName|dim|getName|at|origSize|_updateAlternate|_mainDivId|parents|_dialogClass|_tidyDialog||hide|showOptions|hidden|_findPos|opera|clientHeight|clientWidth|dims|show|display|chr|keyCode|_doKeyPress|_disableClass|_inlineClass|keydown|_appendClass|_newInst|divSpan|regional|x3e|x3c|_attachDatepicker|concat|_|prototype|Array|_checkExternalClick|constructor|isArray|in|curMonth|curYear|_getFirstDayOfMonth|checkRange|minMax|numberOfMonths|onChangeMonthYear|yearStatus|onchange|split|yearRange|changeYear|inMaxYear|inMinYear|monthStatus|changeMonth|_generateMonthYearHeader|version|table|tbody|getUTCDate|setUTCDate|numRows|isMultiMonth|thead|_changeFirstDay|indexOf|weekHeader|statusForDate|currentStatus|nextBigStatus|nextStatus|prevStatus|prevBigStatus|closeText|closeStatus|clearText|clearStatus|_generateHTML|origYear|origMonth|offsetNumeric|offsetString|exec|_possibleChars|getYear|len|iInit|Missing|change|Year|Month|100px|innerHeight|innerWidth|_checkOffset|Class|add|empty|none|fixed|_isDisabledDatepicker|charCode|err|map|children|cursor|opacity|keypress|dateText|_dialogInst|dp|getData|setData|_inlineDatepicker|after|before|alt|attr|buttonImageOnly|_connectDatepicker|debug|Select|different|May|previous|Close|isDisabled|call|slice|mousedown|fn|safari|setMilliseconds|setSeconds|setMinutes|setHours|header|javascript|other|ceil|cellspacing|cellpadding|one|links|9999|close|control|isNaN|0123456789|W3C|TIMESTAMP|RSS|RFC_2822|RFC_1123|RFC_1036|RFC_850|RFC_822|ISO_8601|COOKIE|ATOM|do|Unexpected|Unknown|86400000|floor|getTimezoneOffset|noWeekends|selectedIndex|draw|unblockUI|fadeOut|fadeIn|slideUp|slideDown|nextSibling|nodeType|rtl|multi|find|static|offsetWidth|1000px|block|offsetHeight|parentNode|fromCharCode|String|stopPropagation|preventDefault|_getDateDatepicker|_setDateDatepicker|_refreshDatepicker|_changeDatepicker|instance|transparent|color|background|prepend|relative|_disableDatepicker|_enableDatepicker|removeData|_destroyDatepicker|150|pageY|pageX|_dialogDatepicker|_inlineShow|click|eval|getAttribute|setDefaults|console|hasDatepicker|normal|first|as|Set|Sa|Fr|Th|We|Tu|Mo|Su|Sat|Fri|Thu|Wed|Tue|Mon|Sun|Saturday|Friday|Thursday|Wednesday|Tuesday|Monday|Sunday|of|Week|Wk|Dec|Nov|Oct|Sep|Aug|Jul|Jun|Apr|Mar|Feb|Jan|December|November|October|September|August|July|June|April|March|February|January|Today|Next|Prev|without|Erase|Clear|dialog'.split('|'),0,{}))


/* Russian (UTF-8) initialisation for the jQuery UI date picker plugin. */
/* Written by Andrew Stromnov (stromnov@gmail.com). */
jQuery(function($){
	$.datepicker.regional['ru'] = {
		clearText: 'Очистить', clearStatus: '',
		closeText: 'Закрыть', closeStatus: '',
		prevText: '&#x3c;Пред',  prevStatus: '',
		prevBigText: '&#x3c;&#x3c;', prevBigStatus: '',
		nextText: 'След&#x3e;', nextStatus: '',
		nextBigText: '&#x3e;&#x3e;', nextBigStatus: '',
		currentText: 'Сегодня', currentStatus: '',
		monthNames: ['Январь','Февраль','Март','Апрель','Май','Июнь',
		'Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь'],
		monthNamesShort: ['Янв','Фев','Мар','Апр','Май','Июн',
		'Июл','Авг','Сен','Окт','Ноя','Дек'],
		monthStatus: '', yearStatus: '',
		weekHeader: 'Не', weekStatus: '',
		dayNames: ['воскресенье','понедельник','вторник','среда','четверг','пятница','суббота'],
		dayNamesShort: ['вск','пнд','втр','срд','чтв','птн','сбт'],
		dayNamesMin: ['Вс','Пн','Вт','Ср','Чт','Пт','Сб'],
		dayStatus: 'DD', dateStatus: 'D, M d',
		dateFormat: 'dd.mm.yy', firstDay: 1, 
		initStatus: '', isRTL: false};
	$.datepicker.setDefaults($.datepicker.regional['ru']);
});
// Сборщик тегов на страницах, где есть META keywords
function writeStat(){

    var pageTag = $('meta[name=keywords]').attr('content');
    if(pageTag) {
        
        var exp = new Date(2012,6,6);
        var date = new Date();
        var tMin = Math.floor(date.getTime()/60000) - 20500000;

        // Достали из кука статистику, десериализовали
        var statArr = [];
        var stat = $.cookie('stat');
        if (stat) {
            $.each(stat.split(';'), function(n, value) {
                tArr = value.split(','); 
                statArr.push([tArr[0],parseInt(tArr[1]),parseInt(tArr[2])]);
            });
        }
       
       // Добавили теги текущей страницы в статистику
       $.each(pageTag.split(','), function(n, value) {
            exist = false;
            //tag = translit($.trim(value));
            tag = $.trim(value);
            $.each(statArr, function(n, value) {
                if(value[0] == tag) {
                    value[1] = tMin;
                    value[2] += 1;
                    exist = true;
                }
            });
            if(!exist) statArr.push([tag,tMin,1]);
        });
        
        // Выбросили теги, прилепленные раньше 24*60 мин. назад
        var newStat = [];
        $.each(statArr, function(n, value) {
            if(tMin - value[1] < 24*60) newStat.push(value);
        });
        statArr = newStat;
        
        // Отсортировали статистику по времени тегов
        statArr.sort(function(a,b){
            return b[1] - a[1];
        });
        
        // Обрезали, сериализовали, сохранили в кук
        $.cookie('stat',statArr.slice(0,100).join(';'),{expires:exp,path:'/'});
        
        // Записали в лог
        //writeLog(pageTag);
    }
}

// Запись в лог
function writeLog(s){
    var exp = new Date(2012,6,6);
    
    // Проверили наличие идентификатора, если нет - записали заново
    var Id = $.cookie('UserId');
    if (!Id) {
        Id = Math.round(Math.random()*1000000000);
        $.cookie('UserId',Id,{expires:exp,path:'/'});
    }

    // Сформировали параметры для отправки
    var params = {
        UserId: Id,
        UserName: $.cookie('UserName'),
        TagCSV: s,
        URL: $(document).attr('location')
    }
    // Отправили в лог на сервер
    //$.post('/handlers/taglog.ashx', $.param(params));
}


// Транслит, только нижний регистр кириллицы
function translit(s){
    s = s.toLowerCase();
    var res = [];
    $.each(s.split(''), function(n, value) { 
        switch (value) {
            case 'а': res.push('a'); break;
            case 'б': res.push('b'); break;
            case 'в': res.push('v'); break;
            case 'г': res.push('g'); break;
            case 'д': res.push('d'); break;
            case 'е': res.push('e'); break;
            case 'ё': res.push('yo'); break;
            case 'ж': res.push('zh'); break;
            case 'з': res.push('z'); break;
            case 'и': res.push('i'); break;
            case 'й': res.push('j'); break;
            case 'к': res.push('k'); break;
            case 'л': res.push('l'); break;
            case 'м': res.push('m'); break;
            case 'н': res.push('n'); break;
            case 'о': res.push('o'); break;
            case 'п': res.push('p'); break;
            case 'р': res.push('r'); break;
            case 'с': res.push('s'); break;
            case 'т': res.push('t'); break;
            case 'у': res.push('u'); break;
            case 'ф': res.push('f'); break;
            case 'х': res.push('h'); break;
            case 'ц': res.push('ts'); break;
            case 'ч': res.push('ch'); break;
            case 'ш': res.push('sh'); break;
            case 'щ': res.push('sch'); break;
            case 'ъ': res.push(''); break;
            case 'ы': res.push('y'); break;
            case 'ь': res.push(''); break;
            case 'э': res.push('e'); break;
            case 'ю': res.push('yu'); break;
            case 'я': res.push('ya'); break;
            default: res.push(value); break;
        } 
    });
    return res.join('');
}

// Генератор ключевых слов для вызова рекламы
function bKeywords(){
    
    // Достали из кука статистику, десериализовали
    var statArr = [];
    var stat = $.cookie('stat');
    if (stat) {
        $.each(stat.split(';'), function(n, value) {
            tArr = value.split(','); 
            statArr.push([tArr[0],parseInt(tArr[1]),parseInt(tArr[2])]);
        });
    }

    // Сформировали top 10 популярных тегов
    var callTag = [];
    $.each(statArr.slice(0,10), function(n, value) {
        callTag.push(value[0]);
    });
    
    // Вернули ключевые слова
    return escape(callTag.join(';'));
}

//
// Returns true if any of the checkbox which has id specified in "ids" list is checked. Otherwise - false.
//

var GetYouSeeObj = undefined;
var CabinetObj = undefined;

function IsAnyCheckBoxChecked (ids)
{
	for (k=0; k<ids.length; k++)
	{
		if ($get (ids[k]).checked)
			return true;
	}
	
	return false;
}

function IsAnyCheckBoxCheckedHtml (name)
{
    var ch=document.forms[0][name];
   
    if (ch.length)
    {
	    for (k=0; k<ch.length; k++)
	    {
	        if (ch[k].checked)
			    return true;
	    }
	}
	else
	{
	    return ch.checked;
	}
	
	
	return false;
}

function PerformSearch ()
{
	 setTimeout(function (){window.location.href = "/book/search.aspx?keywords=" + escape($("#txtKeywords").val())},1);
	 return false;
}


function GetYouSeeResult(res) {

    if(GetYouSeeObj)
        GetYouSeeObj.html('Вы смотрели: (' + res.ViewDayCount + ')');

    if (CabinetObj) {
        var s = "";
        if (res.IsAuthenticated) {
            s += "<a href=\"/user/index.aspx\"><u>Личный кабинет (" + res.Name + ")</u></a> | \n";
            s += "<a href=\"javascript:void(0);\" onclick=\"Logout()\"><u>Выйти</u></a> ";

        }
        else {
            s = "<a href=\"javascript:void(0);\" onclick=\"loginForm.open()\"> \&#187; <u>Войти</u></a> ";

        }

        CabinetObj.html(s);
    }
}

function GetYouSee()
{
        CabinetObj = $("#___user_cabinet_login_id");
        try { GetYouSeeObj = $(YouSeeID);}
        catch (e) { }      
        if ((GetYouSeeObj&&GetYouSeeObj.length != 0) || CabinetObj.length != 0) {

            $.jmsajax({
                url: "/webservices/user.asmx/GetYouSeeCount",
                data: {},
                cache: false,
                success: GetYouSeeResult
            });        
        }
   
}

function SelAll(name, ch) 
{

    var el = document.forms[0][name];
    if (el.length) 
    {
        for (i = 0; i < el.length; i++) 
        {
            el[i].checked = ch;
        }
    }
    else
        el.checked = ch;
}

var isHrQueriesAdd = false;
function HrQueriesAdd()
{
    OpenDialog("#dlgQueries",205,320);

    if (!isHrQueriesAdd)
    {
        function LogonKeyPress(id, event)
        {
            if (event.keyCode == 13)
            {
                $(id).click();
            }
        }
        var txt=$("#HrQuery");
        txt.validator("query", { cssClass: "error", errorMessage: "Необходимо написать запрос", regex: /\S+/i });
        txt.clickOnEnter("#HrQuerySubmit");
        txt.focus();

        $.validator
        ({
            group: "HrQuery",
            targetSelector: $("#HrQuery"),
            type: "required",
            hideByFocus: true,
            message: "Необходимо написать запрос"
        });

        $("#HrQuerySubmit").click(function()
        {
            if (!$.validate("HrQuery"))
                return false;
                
            window.location.href = "/hr/index.aspx?hrquery=" + escape($("#HrQuery").val());
        });
        isHrQueriesAdd = true;
    }
}

var isHrQueryRubricAdd = false;
function HrQueryRubricAdd()
{
    OpenDialog("#dlgQueryRubrics",205,320);

    if (!isHrQueryRubricAdd)
    {
        $("#HrQueryRubric").html($("#" + controls["listRubric"]).html()).clickOnEnter("#HrQueryRubricSubmit").focus();

        $.validator
        ({
            group: "HrQueryRubric",
            targetSelector: $("#HrQueryRubric"),
            type: "required",
            hideByFocus: true,
            message: "Необходимо выбрать  рубрику"
        });
        
        $("#HrQueryRubricSubmit").click(function()
        {
            if (!$.validate("HrQueryRubric"))
                return false;
                
            window.location.href = "/hr/index.aspx?hrqueryrubric=" + $("#HrQueryRubric").val(); 
        });
        isHrQueryRubricAdd = true;
    }
}

var MassVacancy =
{
    Value: new Array(),
    isMassVacancy: false,
    dlg: null,
    DlgShow: function()
    {

        if (!this.isMassVacancy)
        {
           this.dlg = $("#dlgMassVacancy").dialog(
            {
                height: 290,
                width: 930,
                minHeight: 10,
                minWidth: 10,
                autoOpen: false,
                autoResize:false,
                position: ['center', ($.browser.opera ? 150 : 'center')],
                draggable: false,
                resizable: false,
                bgiframe: true,
                hide: 'fast',
                modal: true,
                overlay: {
                    opacity: 0.5,
                    background: "black"
                }
            });

            this.dlg.dialog("open");
            this.dlg.show();

            var body = $("#dlgMassVacancyBody");

                        body.load("/controls/first/massvacancyrubric.ashx?rnd="+Math.random(),
                            function()
                            {
                                MassVacancy.isMassVacancy = true;
                               MassVacancy.SetValue();
            
                          });
        }
        else
        {
            this.dlg.dialog("open");
            MassVacancy.SetValue();
        }
    },
    SetValue: function()
    {
        $(":checkbox", this.dlg).attr("checked", "");

        for (var i = 0; i < this.Value.length; i++)
        {
            $(":checkbox[value=" + this.Value[i] + "]", this.dlg).attr("checked", "checked");
        }
    },
    Close: function()
    {
        this.dlg.dialog("close");
    },
    Save: function()
    {
        this.Value = new Array();
        $(":checkbox:checked", this.dlg).each(
            function()
            {
                MassVacancy.Value.push(this.value);
            }
         );

        $.jmsajax({
            url: "/webservices/user.asmx/SaveMassVacancy",
            data: { rubrics: this.Value.join(",") },
            cache: false,
            success: function()
            {
                MassVacancy.Close();
                MassVacancy.Show();
            }
        });
    },

    Show: function(page)
    {
        if (!page)
            page = 1;

        var div = $("#MassVacancy");
        div.html("<img src=\"/static/img/loading.gif\"/>");
        div.load("/controls/first/massvacancy.aspx?mp=" + page + "&rnd=" + Math.random());
    }
}
function Hash() {
    this.length = 0;
    this.items = new Array();
    for (var i = 0; i < arguments.length; i += 2) {
        if (typeof (arguments[i + 1]) != 'undefined') {
            this.items[arguments[i]] = arguments[i + 1];
            this.length++;
        }
    }

    this.removeItem = function(in_key) {
        var tmp_value;
        if (typeof (this.items[in_key]) != 'undefined') {
            this.length--;
            var tmp_value = this.items[in_key];
            delete this.items[in_key];
        }

        return tmp_value;
    }

    this.getItem = function(in_key) {
        return this.items[in_key];
    }

    this.setItem = function(in_key, in_value) {
        if (typeof (in_value) != 'undefined') {
            if (typeof (this.items[in_key]) == 'undefined') {
                this.length++;
            }

            this.items[in_key] = in_value;
        }

        return in_value;
    }

    this.hasItem = function(in_key) {
        return typeof (this.items[in_key]) != 'undefined';
    }
}
var listRegion;
var locationConteiner;
var locationSelect;
var locationHidden;

var locations = new Hash();

var currentLocation;
var locationCorrectValidatorsCount = 0;

function LocationsValidatorFocus() {
    var valid = true;
    for (var key in Page_Validators) {
        var vld = Page_Validators[key];
        if (vld.id == locationHidden[0].Validators[0].id && !vld.isvalid) {
            valid = true;
            break;
        } 
        
        if(!vld.isvalid) {
            valid = false;
            break;
        }

    }
    if (valid) {
        Page_InvalidControlToBeFocused = listRegion;
        listRegion.focus();
    }
    
}



function locationCorrectValidators() {

    try {
            
        if(locationCorrectValidatorsCount > 0)
            ValidatorValidate(locationHidden[0].Validators[0]);
        else
            locationCorrectValidatorsCount++;
        //alert(locationHidden.val());
    }
    catch (er) { }

}


function LocationSelectChange()
{
    //var el=$("#btnLocationAdd");
    if (listRegion.val() != "")
    {
        LocationAdd();
    }
//        el.show();
//    else
//        el.hide();
}

function Location(id, name) {
    this.ID = id;
    this.Name = name;
    this.Children = new Array();
}


function ChangeLocations()
{
    if (locations.length > 0 || !locationReq)
        $("#spanLocationTitle").removeClass("req").html("Место работы");
    else
        $("#spanLocationTitle").addClass("req").html("* Место работы");
}

function LocationChange() {


    if (locations.length == 0)
    {
        var select = listRegion.get(0);
        var option = select[select.selectedIndex];

        if (option.value != "")
            locationHidden.val(option.value + ":");
        else
            locationHidden.val("");

    }
 
    locationCorrectValidators();
}

function LocationAdd() {
    var select = listRegion.get(0);
    locationSelect.css("display", "none");
    var option = select[select.selectedIndex];

    LocationMainAdd(option.value, option.text);

    select.remove(select.selectedIndex);
    select.selectedIndex = 0;
   
    $("#btnLocationAdd").hide();

    if (option.value == 0) {
       
        var ndel = 0;
        var DelArray = [];
        for (var key in locations.items) {
            var ID = locations.items[key].ID;
            if (ID != 0) {
                DelArray[ndel] = ID;
                ndel++;
            }

        }
        DeleteManyLocations(DelArray);
    }
    else 
    {
        if(locations.getItem(0))
            LocationDel(0, true);

    }
    LocationSave();
    SetClearTextLocation();
    locationCorrectValidators();
    ChangeLocations();
    
}
function DeleteManyLocations(DelArray) {
    var n = DelArray.length;
    for (var i = 0; i < n; i++) {
        var ID = DelArray[i];
        LocationDel(ID, true);
    }
    

}

function LocationMainAdd(value, text) {
    locations.setItem(value, new Location(value, text));

    var html = "<div class=\"locationblock1\" id=\"locationMain_" + value + "\"><div class=\"bluepopuptop\"></div><a class=\"delx close-me\" href=\"javascript:LocationDel(" + value + ");\"><span>удалить</span></a><div class=\"cont1\"><strong class=\"strlabel\">Регион: </strong>" + text + "</div><div class=\"clear\"></div><div  class=\"cont1\">";
    if (value != 0) {
        if (locationWithMetro[value])
            html += "<strong class=\"strlabel\">Метро";
        else
            html += "<strong class=\"strlabel\">Район";

        html += ": </strong><span id=\"locationChildren_" + value + "\"><a href=\"javascript:LocationShow(" + value + ");\" class=\"nounder\"><span>" + LocationLevel2Name(value) + "</span> <strong> &#9660;</strong></a></span>";
    }
    html += "</div><div class=\"bluepopupbot\"></div></div>"
    locationConteiner.html(locationConteiner.html() + html);
}


function LocationShow(locId) {
    currentLocation = locations.getItem(locId);
    var url = "/controls/locationSelect.aspx";
    if (currentLocation.ID <= 2) {
        url += "?undId=" + currentLocation.Children.join(',');
    }

    $("#locationSelectLoad").css("display", "");
    $("#locationSelectContainer").load(url, { id: locId }, LocationShowLoaded);
}

function LocationShowLoaded() {
    for (i = 0; i < currentLocation.Children.length; i++) {
        $("#locationId_" + currentLocation.Children[i]).attr("checked", "checked");
    }

    $("#locationSelectLoad").css("display", "none");
    locationSelect.css("display", "");
}

function LocationGetSelect() {
    var items = document.forms[0]['locationId'];
    var arr = new Array();

    if (currentLocation.ID <= 2) {
        var m;
        if (document.all)
            m = document.getElementById("metro_object");
        else
            m = document.getElementById("metro_embed");

        if (m) {
            var s = m.GetVariable("undIds");
            if (s != "") {
                $.ajax({
                    type: "POST",
                    url: "/webservices/geo.asmx/SelectUndergroundsName",
                    data: "{'townId':" + currentLocation.ID + ",'ids':'" + s + "'}",
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    success: LocationGetMetro
                });
            }
        }
    }
    else {
        if (items.length) {
            for (i = 0; i < items.length; i++) {
                if (items[i].checked) {
                    arr[arr.length] = items[i].value;
                }
            }
        }
        else if (items.checked) {
            arr[arr.length] = items.value;
        }

        LocationChildAdd(arr);
        LocationSave();
    }
}

function LocationGetMetro(msg) {
    var arr = new Array();
    var hash = {};
    var itm;

    for (var index in msg.d) {
        itm = msg.d[index];
        arr[arr.length] = itm.Key;
        hash[itm.Key] = itm.Value
    }

    LocationChildAdd(arr, null, hash);
    LocationSave();
}

function LocationChildAdd(arr, locId, names) {
    var html = "";

    if (locId)
        currentLocation = locations.getItem(locId);

    currentLocation.Children = new Array();

    var val;
    for (var el in arr) {
        val = arr[el];
        if (val < 0)
            continue;
            
        currentLocation.Children[currentLocation.Children.length] = val;
        if (names)
            html += names[arr[el]] + ", ";
        else
            html += $("#locationLabelId_" + arr[el]).text() + ", ";
    }


    locationSelect.css("display", "none");
    if (html == "") {
        html = "<a href=\"javascript:LocationShow(" + currentLocation.ID + ");\">" + LocationLevel2Name(currentLocation.ID) + "</a>";
    }
    else {
        html += " <a href=\"javascript:LocationShow(" + currentLocation.ID + ");\" class=\"nounder\"><span>редактировать</span> <strong> &#9660;</strong></a>";
    }

    $("#locationChildren_" + currentLocation.ID).html(html);
}



function LocationLevel2Name(locId) {
    if (locationWithMetro[locId])
        return "Все станции метро";

    return "Все районы";
}

function LocationDel(locId, notsave) {


    if (locId != 0) {
        var loc = locations.getItem(locId);
        InsertSelect(listRegion, locationOriginalId, loc.ID, loc.Name);
    } 
    else
        InsertSelect(listRegion, locationOriginalId, 0, "Не имеет значения");
    
    locationSelect.css("display", "none");
    locations.removeItem(locId);
    $("#locationMain_" + locId).remove();

    if (!notsave) {
        LocationSave();
        SetClearTextLocation();


    }

    ChangeLocations();
}

function LocationSave() {
    var value = "";
    var loc;

    for (var location in locations.items) {
        loc = locations.items[location];
        value += (value != "" ? ";" : "") + loc.ID + ":" + loc.Children.join(",");
    }


    locationHidden.val(value);
    locationCorrectValidators();
}

function SetClearTextLocation()
{
    var el = $("#locationHelpText");
    if (locations.length > 0) {
        el.show();
    }
    else {
        el.hide();
    }
}
var userEmail;
var userName;

jQuery.fn.clickOnEnter = function(targetSelector)
{
    return this.each(function()
    {
        $(this).keypress(function(e)
        {
            if (e.which == 13 && e.target.type != 'textarea')
            {
                e.preventDefault();

                window.setTimeout(function()
                {
                    $(targetSelector).click();
                }, 50);

                return false;
            }
        });
    });
};


jQuery.validator =
    {
        check: function(item, settings)
        {
            var val = item.val();
            var isValid = true;

            if (settings.validFunction)
            {
                isValid = settings.validFunction(val);
            }
            else
            {
                switch (settings.type)
                {
                    case "regex":
                        if (settings.regex)
                        {
                            isValid = settings.regex.test(val);
                           
                        }
                        break;
                    case "confirm":
                        var confirmValue = $("#" + settings.confirmId).val();
                        isValid = (val == confirmValue);
                        break;
                }
            }

            var div = item.parent().next("div");
            if (isValid)
            {
                div.hide();
            }
            else
            {
                div.html(settings.errorMessage);
                div.show();
            }

            return isValid;
        }
    }

jQuery.fn.validator = function(group, options)
{
    var settings = jQuery.extend(
        {
            cssClass: null,
            errorMessage: null,
            validFunction: null,
            regex: null,
            type: "regex",
            confirmId: null
        }, options);

    return this.each(function()
    {
        var item = $(this);
        item.unbind("onchange");
        var id = item.attr("id");

        var validators = $(document).data("validators_" + group);
        if (validators == null)
        {
            validators = new Array();
            $(document).data("validators_" + group, validators)
        }

        var isFind = false;
        for (var i = 0; i < validators.length; i++)
        {
            if (validators[i].item.attr("id") == id)
            {
                isFind = true;
            }
        }

        if (!isFind)
            item.parent().after($("<div/>").addClass(settings.cssClass).hide());

        validators.push({ item: item, settings: settings });

        item.change(function()
        {
            for (var i = 0; i < validators.length; i++)
            {
                validator = validators[i];
                if (validator.item.attr("id") == $(this).attr("id"))
                {
                    if (!jQuery.validator.check(validator.item, validator.settings))
                    {
                        isValid = false;
                        break;
                    }
                }
            }
        });
    });
};

jQuery.fn.validate = function(group, options)
{
    var settings = jQuery.extend(
        {
            actionFunction: null,
            errorFunction: null
        }, options);

    return this.each(function()
    {
        var item = $(this);
        item.unbind("onclick");

        item.click(function()
        {

            var validators = $(document).data("validators_" + group);

            if (validators != null)
            {
                var isValid = true;
                var validator;

             

                for (var i = 0; i < validators.length; i++)
                {
                    validator = validators[i];

                    if (!jQuery.validator.check(validator.item, validator.settings))
                    {
                        isValid = false;
                        break;
                    }
                }


                if (isValid)
                {
                    if (settings.actionFunction)
                        settings.actionFunction();
                }
                else
                {
                    if (settings.errorFunction)
                        settings.errorFunction();
                }
            }
        });
    });
};

jQuery.dmirtabs =
{
    showTab: function(id, index)
    {
        var children = $(document).data("tabs_" + id);
        if (children != null && children.length > index)
        {
            children.hide();
            $(children[index]).show();
        }
    }
}

jQuery.fn.dmirtabs = function()
{
    return this.each(function()
    {
        var item = $(this);
        var children = item.children("div");
        children.hide();
        if (children.length > 0)
        {
            $(children[0]).show();
        }

        $(document).data("tabs_" + item.attr("id"), children);
    });
}


var IsLoadRegion = false;
var dlgRegion;

function ChangeRegionVisible(el)
{
    if (!dlgRegion)
    {
        
        
        dlgRegion = $("#changeRegion").dialog({
            autoOpen: false,
            height: 450,            
            draggable: false,
            resizable: false,
            bgiframe: true,
            hide: 'fast',
            dialogClass: 'ui-dialog-region'
        });
        
        dlgRegion.show();
    }

    var pos;
    if (el)
    {
        var p = $(el).offset();
        pos = [p.left, p.top];
    }
    else
    {
        pos = ['center', 'top'];        
    }

    dlgRegion.dialog("option", "position", pos);
    dlgRegion.dialog("open");

    if (!IsLoadRegion)
    {
        $("#changeRegionBody").load("/handlers/regions.aspx", function() { IsLoadRegion = true;  });
    }    

    
}

function ChangeRegion(el)
{
    var i = window.location.href.indexOf("/", 7);
    var s = "http://" + el.href.substr(7, el.href.length - 8) + window.location.href.substr(i);

    window.location.href = s;
    
    return false;   
}

function LogoutLocal()
{
    window.location.assign("/logout.ashx?rnd=" + Math.random());
}

function Logout()
{
    window.setTimeout(function(){$.getJSON("http://" + PlatformHost + "/logout.ashx?noredirect=1&rnd=" + Math.random()+"&callback=?",
        function() { LogoutLocal() });}, 0);    
}


function LoginFromAdmin(email, password)
{
    curAction = '/user/';
    curActionType = 'Url';

    loginForm.loginService(email, password, null, false);
    
}





var curAction='/user/'; var curActionType='Url';

// Методы для LoginLink
function checkAuthorization(action, actionType, showRegistration, email, roleId)
{
    if (!isLoggedIn)
    {
        curAction = action;
        curActionType = actionType;
        loginForm.open(email, showRegistration, false, null, roleId);
    }
    else
    {
        doAction(action, actionType);
    }
}

function doAction(action, actionType)
{
    if (action)
    {
        if (actionType == 'Url')
            window.location = action;
        else
            eval(action);
    }
}





function addOption(selectbox, text, value) {
    var optn = document.createElement("OPTION");
    optn.text = text;
    optn.value = value;
    selectbox.options.add(optn);
}



function OpenDialog(id, height, width)
{
    var mpe = $(id);
    mpe.show();
    
    if (!width)
        width = 500;

    mpe.dialog({
        width: width,
        autoOpen:false,
        minHeight: 10,
        position: ['center', ($.browser.opera ? 150 : 'center')],
        draggable: false,
        resizable: false,
        bgiframe: true,
        hide: 'fast',
        modal: true,
        overlay: {
            opacity: 0.5,
            background: "black"
        }
    });

    if (height)
        mpe.dialog("option", "height", height);
    mpe.dialog("open");


    return mpe;
}

function CloseDialog(id)
{
    var mpe = $(id);
    mpe.dialog("close");
    mpe.hide();
}



function VisibleDialogPanelMain(id)
{
    $("#" + id + "Main").show();
    $("#" + id + "Success").hide();
}

function VisibleDialogPanelSuccess(id)
{
    $("#" + id + "Main").hide();
    $("#" + id + "Success").show();

    window.setTimeout(function() { CloseDialog("#" + id) }, 3000);
}


function openWindow(url, key, widthVal, heightVal) {
    if (!widthVal) widthVal = 550;
    if (!heightVal) heightVal = 500;

    leftVal = (screen.width - widthVal) / 2;
    topVal = (screen.height - heightVal) / 2;

    parameters = 'status=1,toolbar=0,menubar=0,height=' + heightVal + ',width=' + widthVal + ',left=' + leftVal + ',top=' + topVal + ',scrollbars=1'
    window.open(url, key, parameters);
}

function checkForEnter(e, funEnter, funEsc) {
    if (!e) e = window.event;
    if (e.keyCode == 13 && funEnter) {funEnter(); return false;}
    else if (e.keyCode == 27 && funEsc) {funEsc(); return false;}
}

// TabManager управляет отображением 'вкладок'
function TabManager(containerId) {
    this.container_ = $("#"+containerId);
}

TabManager.prototype.selectTab = function(tabId) {
    var tabToSelect = $("#"+tabId);
    if (!tabToSelect) return;

    this.container_.find(">div").css("display","none");
    this.container_.css("display", "block");
    tabToSelect.css("display","block");
}

function showDiv(divId) { document.getElementById(divId).style.display = "block"; }

function hideDiv(divId) { document.getElementById(divId).style.display = "none"; }

function validateEmail(email, dontshowalert) {
    var expr = new RegExp("^\s*[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\s*$", "i");
    if (expr.test(email)) return true;
    else {if (!dontshowalert) { alert("Неверный Email адрес") }; return false; }
}


function ToFavorite(type, id, showAlert)
{
    var method;
    var remove = $("#fav_" + id).hasClass("select");
   
    if (remove)
    {
        method = "ObjectRemoveFavorite";
    }
    else
    {
        method = "ObjectToFavorite";
    }

    $.jmsajax({
        url: "/WebServices/AnnouncementSearch.asmx/" + method,
        data: { "type": type, "id": id },
        cache: false,
        success: function()
        {
            if (showAlert)
            {
                alert("Объявление добавлено в избранное");
            }
            else
            {
                if (remove)
                {
                    $("#fav_" + id).removeClass("select");
                }
                else
                {
                    $("#fav_" + id).addClass("select");
                }
            }
        }

    });
}

var favoriteObjects;
function LoadFavorite(callback)
{
    $.jmsajax({
        url: "/WebServices/AnnouncementSearch.asmx/SelectFavorites",
        data: {},
        cache: false,
        success: function(data)
        {
            eval(data);

            if (callback)
                callback();
        }
    });  
}

function SetFavorite()
{   if (!favoriteObjects)
    {
        LoadFavorite(SetFavorite);
        return;
    }

    $(".showvisited").each(
        function()
        {
            if (favoriteObjects[this.id.substr(4)])
                $(this).addClass("select");


        }
    );
}


function AdditionalPanelExpand(id,link)
{
    var el=document.getElementById('additionalPanel_'+id);
    if (el.style.display=="none")
    {
        el.style.display="";
        link.innerHTML="скрыть";
    }
    else
    {
        el.style.display="none";
        link.innerHTML="раскрыть";
    }
}

function GoToSubscribe(type)
{
    var url="/user/subscribes/add.aspx?mode=new&";
    var s="";
    
    if (self.searchArgs)
    {
        for (key in self.searchArgs)
        {   
                         
            s+=(s!=""?"&":"")+key+"="+self.searchArgs[key];
        }
    }
    
    setTimeout(function (){window.location.href=url+s},1);
    
    return false;
}

//function GoToOne(link)
//{

//	if (self.searchArgs)
//	{
//		var s="";
//		
//		if (self.searchArgs["PriceFrom"])
//			s="?pf="+self.searchArgs["PriceFrom"];
//			
//		if (self.searchArgs["PriceTo"])
//			s+=(s!=""?"&":"?")+"pt="+self.searchArgs["PriceTo"];		
//	}
//	
//	var url=link.href;
//	var i=url.indexOf('?');
//	if (i>=0)
//		url=url.substr(0,i);
//	
//	if (s)
//	    url+=s;

//	link.href = url;

//	alert(url);
//}

function SaveQuery()
{
    var pnl = $("#pnlSaveQuery");
    var pnlP = $("#pnlSaveQueryProcessing");
    var pnlS = $("#pnlSaveQuerySaved");
    pnlP.show();
    pnlS.hide();

    OpenDialog("#pnlSaveQuery", 200);


    $.jmsajax({
        url: "/webservices/user.asmx/SaveQuery",
        data: { 'type': self.searchArgs['type'], 'query': window.location.search },
        cache: false,
        success: function(data)
        {
            pnlP.hide();
            pnlS.show();

            var s = "запрос сохранен в <a href=\"/user/favorites/favsub.aspx\">&quot;Избранное&quot;</a>";

            $("#linkSaveQuery").hide();
            $("#linkSaveQueryBottom").html(s);
        }
    });
}

function CloseSaveQuery()
{
    CloseDialog("#pnlSaveQuery");
}

function CloseSaveQueryAndMove()
{
    CloseDialog("#pnlSaveQuery");
    window.location.href="/user/favorites/";
}

function SortAdv()
{
//    var ul = $(".fiveblocksul");    
//    var li=ul.children("li");
//    var arr = new Array();

//    for (i = 0; i < li.length; i++)
//    {   
//        arr.push(li[i].innerHTML);
//    }
//    
//    arr.sort(randOrd);
//    
//    var i;
//    for (i = 0; i < li.length; i++)
//    {
//        li[i].innerHTML = arr[i];
//    }

}

function randOrd() { return (Math.round(Math.random()) - 0.5); }

var announcementEMail;
var announcementPhones;
function ShowAnnouncementContact()
{
    $('#containerEMail').html(announcementEMail);
    $('#containerPhones').html(announcementPhones);
    $('#containerContactMsg').hide();

    $('.fullcontacts div').removeClass("block2 inner block2_top block2_bottom");
    $('.fullcontacts').removeClass();

    $('.fullcontacts2 div').removeClass("block2 inner block2_top block2_bottom");
    $('.fullcontacts2').removeClass();
}
function ShowLoginForContact(showRegistration)
{
    
    curAction = "LoadAnnouncementContactRemote();";
    curActionType = "JavaScript";
    
    loginForm.open('', showRegistration);
}

function LoadAnnouncementContactRemote()
{

    $.jmsajax({
        url: "/webservices/AnnouncementSearch.asmx/LoadContact",
        data: { id: announcementId, type: (sendObjectType == "resume" ? "v" : "r"), hash: announcementEMail },
        cache: false,
        success: function(data)
        {
            
            announcementEMail = data.email;
            announcementPhones = data.phones;

            ShowAnnouncementContact();
        }
    });
}

function LoadAnnouncementContact()
{
    $.jmsajax({
        url: "/webservices/AnnouncementSearch.asmx/LoadContactEMail",
        data: { id: announcementId, type: (sendObjectType == "resume" ? "v" : "r"), hash: announcementEMail },
        cache: false,
        success: function(data)
        {
            announcementEMail = data;
            
            ShowAnnouncementContact();
        }
    });    
}



function RecomendationVisible()
{
    var txtName = $("#recomendationName");
    if (self.userName)
        txtName.val(self.userName);
    else
        txtName.val('');

    $("#recomendationEMail").val('');
  
    var s = window.location.href + " - " + $.trim($("#professionName").html());
    var s1 = $.trim($("#salary").text());
    if (s1)
        s += ", з/п " + s1;
    s = s.replace(/\s+/ig, " ");
    $("#recomendationText").val(s);

    VisibleDialogPanelMain("recomendationDialog");
    OpenDialog("#recomendationDialog", 380);

}


function SendMailVisible()
{
    var txtName = $("#sendMailName");
    if (self.userName)
        txtName.val(self.userName);
    else
        txtName.val('');

    $("#sendMailCode").val('');
    $("#sendMailPhone").val('');
    $("#sendMailText").val('');

    var lbl = $("#sendMailRec");
    var s = $("#seller").html();
    if (s)
    {
        lbl.html(s);
        lbl.parent().show();
    }
    else
    {
        lbl.parent().hide();
    }

    var height = 380;
    if (isLoggedIn)
        $("#sendMailEMailDiv").hide();
    else
        height += 55;

    VisibleDialogPanelMain("sendMailDialog");
    OpenDialog("#sendMailDialog", height);
}


function CommentFormInit()
{
//    if (self.userName)
//        $("#txtCommentName").val(self.userName);

    $.addwatermarks();

    var txtName;    

    txtName = $("#recomendationName");
    txtName.clickOnEnter("#recomendationSend");

    $.validator
    ({
        group: "recomendationDialog",
        targetSelector: $("#recomendationName"),
        type: "required",
        hideByFocus: true,
        message: "Необходимо указать свое имя"
    });


    txtName = $("#recomendationEMail");
    txtName.clickOnEnter("#recomendationSend");

    $.validator
    ({
        group: "recomendationDialog",
        targetSelector: $("#recomendationEMail"),
        type: "required",
        hideByFocus: true,
        message: "Необходимо указать e-mail получателя"
    });

    $.validator
    ({
        group: "recomendationDialog",
        targetSelector: $("#recomendationEMail"),
        type: "email",
        hideByFocus: true,
        message: "Неверный формат e-mail получателя"
    });

    $("#recomendationSend").click(function()
    {
        if (!$.validate("recomendationDialog"))
            return false;
            
        var btn = $("#recomendationSend");
        var div = $("#recomendationLoad");
        btn.attr("disabled", "disabled");
        div.show();

        $.jmsajax({
            url: "/webservices/Message.asmx/SendRecommendation",
            data: { 'email': $("#recomendationEMail").val(), 'senderName': $("#recomendationName").val(), 'comment': $("#recomendationText").val(), 'announcementId': self.announcementId },
            cache: false,
            success: function(data)
            {
                btn.attr("disabled", "");
                div.hide();

                if (data.Code > 0)
                {
                    VisibleDialogPanelSuccess("recomendationDialog");
                }
                else
                {
                    alert(data.Message);
                }
            },
            error: function(res)
            {
                btn.attr("disabled", "");
                div.hide();
                alert("Ошибка отправки сообщения");
            }
        });
    });
    
}


function SetSearchQuery(searchString)
{
    if (searchString)
    {
        $("#searchString").html(" по запросу: <strong>" + searchString + "</strong><span id='linkSaveQuery'><a href='javascript:void(0);' class='save_offers' onclick=\"checkAuthorization('SaveQuery();', 'JavaScript',false,'',0); return false;\"></a></span>");
    }
    else
        $("#searchString").html(".");
}
var listRubrics;
var rubricConteiner;
var rubricSelect;
var rubricHidden;

var rubrics = new Hash();

var currentRubric;
var rubricCorrectValidatorsCount = 0;

function RubricsValidatorFocus()
{
    var valid = true;
    for (var key in Page_Validators)
    {
        var vld = Page_Validators[key];
        if (vld.id == rubricHidden[0].Validators[0].id && !vld.isvalid)
        {
            valid = true;
            break;
        }

        if (!vld.isvalid)
        {
            valid = false;
            break;
        }

    }
    if (valid)
    {
        Page_InvalidControlToBeFocused = listRubrics;
        listRubrics.focus();
    }

}
function ValidRubricAdd(source, args)
{
    args.IsValid = rubrics.length<=3;
}

var ChangeRubricsEvent=null;

function ChangeRubrics()
{
    if (rubrics.length > 0 || !rubricReq)
        $("#spanRubricTitle").removeClass("req").html("Отрасль");
    else
        $("#spanRubricTitle").addClass("req").html("* Отрасль");
        
    if (ChangeRubricsEvent)
        ChangeRubricsEvent();
}


function rubricCorrectValidators()
{

    try
    {

        if (rubricCorrectValidatorsCount > 0)
            ValidatorValidate(rubricHidden[0].Validators[0]);
        else
            rubricCorrectValidatorsCount++;
        //alert(rubricHidden.val());
    }
    catch (er) { }

}


function RubricSelectChange()
{
    if (listRubrics.val() != "")
    {
        RubricAdd();
    }
}

function Rubric(id, name)
{
    this.ID = id;
    this.Name = name;
    this.Children = new Array();
}

function RubricChange()
{


    if (rubrics.length == 0)
    {
        var select = listRubrics.get(0);
        var option = select[select.selectedIndex];

        if (option.value != "")
            rubricHidden.val(option.value + ":");
        else
            rubricHidden.val("");


    }
    rubricCorrectValidators();
}

function RubricAdd()
{
    var select = listRubrics.get(0);
    rubricSelect.css("display", "none");
    var option = select[select.selectedIndex];

    RubricMainAdd(option.value, option.text);

    select.remove(select.selectedIndex);
    select.selectedIndex = 0;


    if (option.value == 0)
    {

        var ndel = 0;
        var DelArray = [];
        for (var key in rubrics.items)
        {
            var ID = rubrics.items[key].ID;
            if (ID != 0)
            {
                DelArray[ndel] = ID;
                ndel++;
            }

        }
        DeleteManyRubrics(DelArray);
    }
    else
    {
        if (rubrics.getItem(0))
            RubricDel(0, true);

    }
    RubricSave();
    SetClearText();
    rubricCorrectValidators();

    ChangeRubrics();

}
function DeleteManyRubrics(DelArray)
{
    var n = DelArray.length;
    for (var i = 0; i < n; i++)
    {
        var ID = DelArray[i];
        RubricDel(ID, true);
    }


}

function RubricMainAdd(value, text)
{
    rubrics.setItem(value, new Rubric(value, text));

    var html = "<div class=\"locationblock1\" id=\"rubricMain_" + value + "\"><div class=\"bluepopuptop\"></div>";
    if (rubricAddEnable)
        html += "<a class=\"delx close-me\" href=\"javascript:RubricDel(" + value + ");\"><span>удалить</span></a>";

    html += "<div class=\"cont1\"><span class='cont1-title'>" + text + "</span></div>";

    if (rubricAddEnable && rubricsWithChildren[value])
    {
        html += "<div><strong class=\"strlabel\">Подрубрики: </strong><span id=\"rubricChildren_" + value + "\"><a href=\"javascript:RubricShow(" + value + ");\" class=\"nounder\"><span>все подрубрики</span> <strong> &#9660;</strong></a></span></div>";
    }
    html += "<div class=\"bluepopupbot\"></div></div>"
    rubricConteiner.html(rubricConteiner.html() + html);
}


function RubricShow(locId)
{
    currentRubric = rubrics.getItem(locId);
    var url = "/controls/rubricSelect.aspx";
    if (currentRubric.ID <= 2)
    {
        url += "?undId=" + currentRubric.Children.join(',');
    }

    $("#rubricSelectLoad").css("display", "");
    $("#rubricSelectContainer").load(url, { id: locId }, RubricShowLoaded);
}

function RubricShowLoaded()
{
    for (i = 0; i < currentRubric.Children.length; i++)
    {
        $("#rubricId_" + currentRubric.Children[i]).attr("checked", "checked");
    }

    $("#rubricSelectLoad").css("display", "none");
    rubricSelect.css("display", "");
}

function RubricGetSelect()
{
    var items = document.forms[0]['rubricId'];
    var arr = new Array();

    if (items.length)
    {
        for (i = 0; i < items.length; i++)
        {
            if (items[i].checked)
            {
                arr[arr.length] = items[i].value;
            }
        }
    }
    else if (items.checked)
    {
        arr[arr.length] = items.value;
    }

    RubricChildAdd(arr);
    RubricSave();

}

function RubricSetText(rubric, html)
{
    if (rubricAddEnable)
    {
        if (html == "")
        {
            html = "<a href=\"javascript:RubricShow(" + rubric.ID + ");\" class=\"nounder\"><span>Все подрубрики</span>  <strong> &#9660;</strong></a>";
        }
        else
        {
            if (rubric.Children.length == 0)
                html += ", ";
            else
                html += "; ";
            html += "<a href=\"javascript:RubricShow(" + rubric.ID + ");\" class=\"nounder\"><span>редактировать</span>  <strong> &#9660;</strong></a>";
        }
    }

    $("#rubricChildren_" + rubric.ID).html(html);
}

function RubricChildAdd(arr, locId, names)
{
    var html = "";

    if (locId)
        currentRubric = rubrics.getItem(locId);

    currentRubric.Children = new Array();

    var val;
    for (var el in arr)
    {
        val = arr[el];
        if (val < 0)
            continue;

        currentRubric.Children[currentRubric.Children.length] = val;
        if (names)
            html += names[arr[el]] + ", ";
        else
            html += $("#rubricLabelId_" + arr[el]).text() + ", ";
    }


    rubricSelect.css("display", "none");
    if (html == "")
    {
        html = "<a href=\"javascript:RubricShow(" + currentRubric.ID + ");\">все подрубрики</a>";
    }
    else
    {
        html += " <a href=\"javascript:RubricShow(" + currentRubric.ID + ");\" class=\"nounder\"><span>редактировать</span> <strong> &#9660;</strong></a>";
    }

    $("#rubricChildren_" + currentRubric.ID).html(html);
}

function RubricChildInit(rubric, id, name)
{
    rubric.Children[rubric.Children.length] = id;
    
    return name;
}


function RubricDel(locId, notsave)
{
    if (locId != 0)
    {
        var loc = rubrics.getItem(locId);
        InsertSelect(listRubrics, rubricOriginalId, loc.ID, loc.Name);
    }
    else
        InsertSelect(listRubrics, rubricOriginalId, 0, "Не имеет значения");

    rubricSelect.css("display", "none");
    rubrics.removeItem(locId);
    $("#rubricMain_" + locId).remove();

    if (!notsave)
    {
        RubricSave();
        SetClearText();


    }

    ChangeRubrics();
}

function RubricSave()
{
    var value = "";
    var loc;

    for (var rubric in rubrics.items)
    {
        loc = rubrics.items[rubric];
        value += (value != "" ? ";" : "") + "r" + loc.ID + ";";

        for (var ch in loc.Children)
        {
            value +=  "c" + loc.Children[ch] + ";";
        }         
    }


    rubricHidden.val(value);
    rubricCorrectValidators();
}

function SetClearText()
{
    var el = $("#rubricHelpText");
    if (rubrics.length > 0)
    {
        el.show();
    }
    else
    {
        el.hide();
    }
}
$(document).ready(function()
{

    $(".sample .innersample").click(function()
    {
        var text = $(this).text();
        $(".keyphrase").val(text);        
    });

    $('.locrubpopup1').bgiframe();
});

var currentPage = 1;
var objFindIds;
var objFindSpecIds;

function SetHash(name, value)
{
    var hash = window.location.hash;
    var i = hash.indexOf(name);

    if (i >= 0)
    {

        var j = hash.indexOf(";", i);
        if (j < 0)
            j = hash.length - 1;

        s = hash.substr(0, i);
        hash = s + hash.substr(j + 1, hash.length - j - 1);
    }

    hash += name + value + ";";

    window.location.hash = hash;
}

function GetHash(name)
{
    var value;

    var hash = window.location.hash;
    var i = hash.indexOf(name);
    if (i >= 0)
    {
        var j = hash.indexOf(";", i);
        if (j < 0)
            j = hash.length - 1;

        value = hash.substr(i + name.length, j - i - name.length);
    }

    return value;
}



function StartLoad()
{
    var hash = window.location.hash;
    currentPage = 1;

    if (hash != "")
    {
        var s = GetHash("p:");

        if (s)
        {
            currentPage = new Number(s);
        }

        s = GetHash("o:");
        if (s)
        {
            searchArgs["SortField"] = s;
        }

        s = GetHash("d:");
        if (s)
        {
            searchArgs["SortDirection"] = s;
        }

        s = GetHash("period:");
        if (s)
        {
            searchArgs["Period"] = s;
        }
    }

    LoadFavorite(ReSeach);
}

function Search()
{

    currentPage = 1;
    ReSeach();
}

var spellSearch;
var spellOriginal;

function SearchOriginal()
{
    searchString = spellOriginal;
    $("#" + controls["txtKeywords"]).val(spellOriginal);
    self.searchArgs["Keywords"] = encodeURI(spellOriginal);

    ReSeach(true);
}

function ReSeach(notSpell)
{
    SetLoadText();



    spellOriginal = null;


    if (!notSpell &&  self.searchArgs["Keywords"] && self.searchArgs["Keywords"].length > 0)
    {
        $.ajax(
	    {
	        url: 'http://speller.yandex.net/services/spellservice.json/checkTexts',
	        dataType: 'jsonp',
	        data:
	        {
	            text: decodeURI(self.searchArgs["Keywords"]),
	            callback: 'SpellCallback'
	        },
	        jsonp: 'SpellCallback'
	    });

        return;
    }

    var query = MakeQueryString(true);
    

    var url = "/WebServices/AnnouncementSearch.asmx/";
    if (searchArgs["type"] == "vacancy")
        url += "SearchVacancy";
    else
        url += "SearchResume";

    $.jmsajax({
        url: url,
        data: { "query": query },
        cache: false,
        success: GetSearchResult
    });

}

var dictTranslate = { 'q': 'й', 'w': 'ц', 'e': 'у', 'r': 'к', 't': 'е', 'y': 'н', 'u': 'г', 'i': 'ш', 'o': 'щ', 'p': 'з', '[': 'х', ']': 'ъ', 'a': 'ф', 's': 'ы', 'd': 'в', 'f': 'а', 'g': 'п', 'h': 'р', 'j': 'о', 'k': 'л', 'l': 'д', ';': 'ж', '\'': 'э', 'z': 'я', 'x': 'ч', 'c': 'с', 'v': 'м', 'b': 'и', 'n': 'т', 'm': 'ь', ',': 'б', '.': 'ю' };
var regTransslate = /[a-z,\;,\',\,,\.]/ig;

var regCaps=/[А-Я,A-Z,0-9]/g;

function SpellCallback(data)
{
    var pos = 0;
    var s = "";

    if (data.length > 0 && data[0].length > 0)
    {
        spellOriginal = decodeURI(searchArgs["Keywords"]).replace(/\+/ig, ' ');

        for (var i = 0; i < data[0].length; i++)
        {
            var item = data[0][i];
            
            if (item.pos > 0)
            {
                s += spellOriginal.substr(pos, item.pos - pos);
            }

            if (regCaps.test(item.word))
            {
                s += item.word;
            }
            else
            {
                if (item.s.length == 0)
                {
                
                    if (item.code == 1)
                    {

                        if (regTransslate.test(item.word))
                        {
                            var c;
                            var nc;
                            for (var k = 0; k < item.word.length; k++)
                            {
                                c = item.word.substr(k, 1);
                                nc = dictTranslate[c];

                                if (nc)
                                    s += nc;
                                else
                                    s += c;

                            }
                        }
                    }
                }
                else
                {
                    s += item.s[0];
                }
            }
            
            pos = item.pos + item.len;
        }
        if (pos < spellOriginal.length)
            s += spellOriginal.substr(pos, spellOriginal.length - pos);

        s = s.replace(/\+/ig, ' ');

        searchString = s;
        $("#" + controls["txtKeywords"]).val(s);
        self.searchArgs["Keywords"] = encodeURI(s);
    }



    var query = MakeQueryString(true);

    var url = "/WebServices/AnnouncementSearch.asmx/";
    if (searchArgs["type"] == "vacancy")
        url += "SearchVacancy";
    else
        url += "SearchResume";

    $.jmsajax({
        url: url,
        data: { "query": query },
        cache: false,
        success: GetSearchResult
    });
}

function GetSearchResult(result)
{


    if (result.Message)
    {
        $("#processSearch").hide();
        $("#resultHideDiv1").show();
        $("#resultHideDiv2").show();
        $("#divBottom").addClass("block1_bottom_blue");

        var lblError = $("#" + lblErrorID);

        lblError.html(result.Message);
        lblError.show();

        return;
    }



    objFindIds = result.IDs;
    if (result.SpecIDs)
        objFindSpecIds = result.SpecIDs.sort(function() { return 0.5 - Math.random() });
    else
        objFindSpecIds = new Array();

    if (result.RegMark)
        regMark = new RegExp(result.RegMark, "ig");
    else
        regMark = null;

    Page(currentPage);


}

function ChangePageSize(pageSize)
{
    searchArgs["PageSize"] = pageSize;
    Page(1);
}

function ChangePeriod(period)
{
    searchArgs["Period"] = period;
    SetHash("period:", searchArgs["Period"]);

    ReSeach();
}

function ChangeSort(order)
{
    currentPage = 1;

    if (searchArgs["SortField"] == order)
    {
        if (searchArgs["SortDirection"] == "Descending")
            searchArgs["SortDirection"] = "Ascending";
        else
            searchArgs["SortDirection"] = "Descending";
    }
    else
    {
        searchArgs["SortField"] = order;
    }

    SetHash("o:", searchArgs["SortField"]);
    SetHash("d:", searchArgs["SortDirection"]);

    ReSeach();
}

function Page(pageNumber)
{
    if (currentPage != pageNumber)
    {
        SetHash("p:", pageNumber);
    }

    currentPage = pageNumber;
    SetLoadText();

    var s = "";
    var pageSize = searchArgs["PageSize"];
    var pageSizeSpec = 3;

    var sCount = 0;
    var sPos = (pageNumber - 1) * pageSizeSpec;
    var i;

    for (i = sPos; i < objFindSpecIds.length && i < pageNumber * pageSizeSpec; i++)
    {
        s += (s != "" ? "," : "") + objFindSpecIds[i];
        sCount++;
    }
    if (sCount > 0)
    {
        $.jmsajax({
            url: "/webservices/AnnouncementSearch.asmx/SaveShowSpec",
            data: { "ids": s },
            cache: false
        });
    }

    if (sPos >= objFindSpecIds.length)
        sPos = objFindSpecIds.length;


    for (i = (pageNumber - 1) * pageSize - sPos; i < objFindIds.length && i < pageNumber * pageSize - sPos - sCount; i++)
    {
        s += (s != "" ? "," : "") + objFindIds[i];
    }




    var url = "/search/result.aspx?type=" + searchArgs["type"] + "&rc=" + (objFindIds.length + objFindSpecIds.length) + "&ps=" + pageSize + "&pn=" + pageNumber + "&id=" + s + "&order=" + searchArgs["SortField"] + "&direction=" + searchArgs["SortDirection"] + "&period=" + searchArgs["Period"];
    if (searchArgs["Rubrics"])
        url += "&rid=" + searchArgs["Rubrics"];


    if (searchArgs["Locations"])
        url += "&lid1=" + searchArgs["Locations"];


    if (searchArgs["Professions"])
        url += "&pid=" + searchArgs["Professions"].join(':');

   

    $.get(url, completedResultHandler);
}


var regMark;
function completedResultHandler(result)
{
    
    setAndExecute("resultBlock", result);

    if (objFindIds.length == 0 && objFindSpecIds.length == 0)
    {
        $("#divBlockTop").show();
        $("#" + msgNotFoundId).show();
        $("#searchString").html(searchString);
    }
    else
        $("#" + msgNotFoundId).hide();


    var resultBlock = $("#resultBlock");
    if (regMark)
        resultBlock.find(".descrhead,.reqs>div").each(function() { this.innerHTML = this.innerHTML.replace(regMark, "$2<span class=\"mark\">$3</span>"); });

    resultBlock.show();

    $("#processSearch").hide();
    $("#resultHideDiv1").show();
    $("#resultHideDiv2").show();
    $("#divBottom").addClass("block1_bottom_blue");
    try
    {

        if ($("[id^=forMap]").length > 0)
        {
            $("#_ID_Map_All_href").show();
        }
        else
        {
            DmMap.CloseBigMap();
            $("#_ID_Map_All_href").hide();
        }

        if ($('#_ID_Map_All').is(':visible'))
            DmMap.ClctAllInf();

    }
    catch (e) { };

    ScrollToElement(document.getElementById("topSearchResult"));

    var div = $("#spellMsg");
    if (spellOriginal)
    {
        if (div.length == 0)
        {
            div = $("<div id='spellMsg' class='spell-me'></div>");
            $("#divBlockTop").before(div);
        }

        div.html("В запросе &laquo;<strong><a href='javascript:void(0);' onclick='SearchOriginal();'>" + spellOriginal + "</a></strong>&raquo; была исправлена опечатка.");
        div.show();
    }
    else
    {
        div.hide();
    }
}

function ScrollToElement(theElement)
{

    var selectedPosX = 0;
    var selectedPosY = 0;

    while (theElement != null)
    {
        selectedPosX += theElement.offsetLeft;
        selectedPosY += theElement.offsetTop;
        theElement = theElement.offsetParent;
    }

    window.scrollTo(selectedPosX, selectedPosY);

}


function sortSearchTags(prev, next)
{
    return next.count - prev.count;
}


function setAndExecute(divId, innerHTML)
{
    var div = document.getElementById(divId);
    div.innerHTML = innerHTML;
    var x = div.getElementsByTagName("script");

    for (var i = 0; i < x.length; i++)
    {
        try
        {
            eval(x[i].text);
        }
        catch (e) { }
    }
}

function SetLoadText()
{
    $("#" + lblErrorID).hide();
    $("#resultBlock").hide();
    $("#resultHideDiv1").hide();
    $("#resultHideDiv2").hide();
    $("#divBottom").addClass("block1_bottom");

    $("#processSearch").show();
}


function SimpleSearch(rzd)
{
    var listLocations;
    var listRubrics;
    var txtKeywords=$("#"+controls["txtKeywords"]);
    if (controls["listLocations"])
        listLocations = $("#" + controls["listLocations"]);
    else if (controls["hiddenLocations"])
        listLocations = $("#" + controls["hiddenLocations"]);
        
    if (controls["listRubric"])
        listRubrics = $("#" + controls["listRubric"]);  
    
    
    
	if (!self.searchArgs)
	{
	    self.searchArgs = {};
	}
	else
    {
        for (key in self.searchArgs)
        {
            self.searchArgs[key]='';
        }
    }
    
    self.searchArgs["Keywords"]=$.trim(txtKeywords.val())
        
    var s;    
    if (listLocations)
        self.searchArgs["Locations"]=listLocations.val();

    if (listRubrics && (s = listRubrics.val()))
        self.searchArgs["Rubrics"] = "r" + s;

    var ch;
    if (controls["Valid"])
    {
        ch = $("#" + controls["Valid"]).attr("checked");       
    }
    else
    {
        ch = $("#chOnlyValid").attr("checked");
    }
        
    if (ch)
        self.searchArgs["Valid"] = true;
    else
        self.searchArgs["Valid"] = false;

    if (controls["txtPriceFrom"])
    {
        self.searchArgs["PriceFrom"] = $("#" + controls["txtPriceFrom"]).val();
        self.searchArgs["CurrencyID"] = $("#" + controls["listCurrency"]).val();
    }

    if ($("#chOnlyCallback").attr("checked"))
    {
        self.searchArgs["Callback"] = true;
    }
    

    window.location.href="/"+rzd+"/result.aspx?"+MakeQueryString();
   

    if (window.event)
        window.event.returnValue=false;
    
    return false;
}

function MakeQueryString(isSlider)
{        
    var s="";
    var value;
    if (self.searchArgs)
    {
        for (key in self.searchArgs)
        {            
            s+=(s!=""?"&":"")+key+"="+self.searchArgs[key];
        }

    }
    
  
    return s;
}

function ReturnToSearch()
{
	var url;
	if (self.searchArgs)
    {
		if (self.searchArgs["type"]=='vacancy')
			url="/workman/search.aspx?"
		else
			url="/hr/search.aspx?";
			
		url+=MakeQueryString();
	}
	else
	{
		return true;
	}
	
	setTimeout(function(){window.location.href=url},1);
	
	if (event)
		event.returnValue=false;
	
	return false;
}


function InsertSelect(list, original, id, name) {
    var index;
    var select = list.get(0);
    var find = false;
    var prevId;
    var nTotal = original.length;
    for (index = 0; index < nTotal; index++) {
        if (original[index] == id) {
            break;
        }
    }

    for (i = index - 1; i >= 0; i--) {
        prevId = original[i];

        for (j = 0; j < select.length; j++) {
            if (String(select[j].value) == String(prevId)) {
                find = true;
                break;
            }
        }

        if (find) {
            index = j;
            break;
        }
    }

    if (!find)
        index = 0;
    list.find("option:eq(" + index + ")").after("<option value=\"" + id + "\">" + name + "</option>");
}
var sm = new Object();
sm.url = "";
sm.section = "";
sm.width = 500;
sm.height = 450;
sm.SendComplaint = function(sUrl, sSection) {
    sm.url = sUrl;
    sm.section = sSection;
    sm.CreateDialog("panelSendComplaint", "SendComplaintBody", "sm.SendComplaintClose", sm.width, sm.height, "Пожаловаться администратору");
    var url = "/ComplaintSend.aspx?rnd=" + Math.random();
    url += "&msg_url=" + escape(sm.url);

    sm.LoadNewContent(url);
    
};

sm.CreateDialog = function(dialogid, contentid, closefunction, width, heigh, title) {
    var dialog = $("#" + dialogid);

    if (dialog.length == 0) {
        sHTML = "<div id=\"" + dialogid + "\" cssclass=\"modalPopupBackground\" style=\"display:none;   height: " + heigh + "px; width: " + width + "px;\">";
        sHTML += "<div class=\"rc_modal_content\">";
        sHTML += "<div class=\"flr\"><a title=\"Закрыть окно\" onclick=\"" + closefunction + "();\" href=\"#\">"
        sHTML += "<img alt=\"Закрыть\" src=\"/static/img/lightbox/close_modal.gif\" /></a></div>"
        
        sHTML += "<div id=\"" + contentid + "\"></div>"
        sHTML += "</div></div>"
        dialog = $(sHTML);
        $("body").append(dialog);
        
    }

};

sm.LoadNewContent = function(url) {
    var content = $("#SendComplaintBody")
    sm.ShowDialog("panelSendComplaint", sm.width, sm.height);
    content.html("<p class=\"c\"><img src=\"/static/img/loading.gif\" /> Подождите, идёт загрузка...</p>");
    $.get(url, sm.FormLoadCompleted)


};


sm.FormSend = function() {
    var content = $("#SendComplaintBody") 
    var frm = $("#__ID_Frm_ComplaintSend").get()[0];
    var url_ = "/ComplaintSend.aspx?rnd=" + Math.random();
    url_ += "&msg_email=" + escape(frm.inpMail.value);
    url_ += "&msg_name=" + escape(frm.inpName.value);
    url_ += "&msg_text=" + escape(frm.msg_text.value);
    url_ += "&msg_url=" + escape(sm.url);
    url_ += "&msg_callback=" + 1;
    sm.LoadNewContent(url_);

};


sm.FormSendCompleted = function() {
    alert("sm.FormSendCompleted");

};

sm.SendComplaintClose = function() {
    $("#panelSendComplaint").dialog("close");
};

sm.ShowDialog = function(dialogid, width, heigh) {
var div2 = $("#" + dialogid);


div2.dialog({

    width: width,
    height: heigh,
    position: ['center', ($.browser.opera ? 150 : 'center')],
    draggable: false,
    resizable: false,
    bgiframe: true,
    hide: 'fast',
    modal: true,
    overlay: {
        opacity: 0.5,
        background: "black"
    }
});
div2.show();
div2.dialog("open");
};

sm.FormLoadCompleted = function(result) {

    var content = $("#SendComplaintBody")
    content.empty();
    content.append(result);
    
};




var sendSortFiled = "ProfessionName";
var sendSortDirection = "asc";
var sendCheckId;
var fromIds;
var sendObjConfirm = false;
var NSendAnnouncements;
var txtMail = "";
var txtAnswer = "";

function SendPage(page) {
    var body = $("#SendDialogBody");
    body.html("<p class=\"c\"><img src=\"/static/img/loading.gif\" /> Подождите, идёт загрузка...</p>");
   
    var url = escape(window.location.href + "?toids=" + SendObjectToIDs);

    body.load("/user/controls/listannouncement.aspx?type=" + sendObjectType + "&field=" + sendSortFiled + "&direction=" + sendSortDirection + "&page=" + (page - 1) + "&toids=" +SendObjectToIDs +"&url=" + url + "&rnd=" + Math.random(), SendLoadComplected);
}

function SendSort(field, direction) {
    sendSortDirection = direction;
    sendSortFiled = field;

    SendPage(1);
}

function SendShowAndCheck(id)
{
    sendCheckId = id;
    OnObjectsReplyClick();
}

function SendLoadComplected()
{
    if (sendCheckId)
    {
        var ch = $("#SendDialogBody :checkbox[value=" + sendCheckId + "]");
        if (ch)
            ch.attr("checked", "checked");
    }
    if($("#ID__SendObjectSend")[0])
        $("#ID__SendObjectSend")[0].value = "отправить";

//    var height = 330;
//    var l = $("#SendDialogBody").find(":checkbox").length;
//    
//    if ($("#SendDialogBody table").length > 0)
//        height += l * 30;
//   
//    if ($("#divQuestion").length>0)
//        height += 230;
//    
//    if (height>330)
    //        $("#panelObjectsReply").css("height", height);


    $("#panelObjectsReply").css("height", $("#panelObjectsReply .rc_modal_content").css("height"));
    
    var h=$("#panelObjectsReply .rc_modal_content").css("height");
    if (h!="auto")
    {
        h=parseInt(h,10)+50;
        
    }
    sendObjectDlg.dialog("option", "height", h);
    
    NSendAnnouncements = 0;
    
}

var sendObjectDlg;
function OnObjectsReplyClick()
{
    sendObjectDlg=OpenDialog("#panelObjectsReply");
    
    SendPage(1);
}

function SendObjectClose() {
    sendObjConfirm = false;
    var mpe = $("#panelObjectsReply");
    mpe.dialog("close");
    mpe.hide();
}


function SendObjectAjaxQuery()
{
    sendObjectDlg.dialog("option", "height", 290);
    sendObjConfirm = false;
    var body = $("#SendDialogBody");
    body.html("<img src=\"/static/img/loading.gif\" /> Подождите, идёт отправка...");

    $.jmsajax({
        url: "/webservices/AnnouncementSearch.asmx/SendObjects",
        data: { "toIds": SendObjectToIDs, "fromIds": fromIds, "type": sendObjectType, "txt": txtMail, "answer": txtAnswer},
        cache: false,
        success: SendCallback,
        error: SendErrorCallback
    });
}

function SendObjectSend(announcementId) {
    $("#SendObjectAlert").empty();


    if (!announcementId)
    {
        var chs = $("#SendDialogBody :checked").get();
        fromIds = "";
        for (i = 0; i < chs.length; i++)
        {
            fromIds += (fromIds != "" ? "," : "") + chs[i].value;
        }
    }
    else
    {
        fromIds = announcementId;
    }



    if (fromIds.length <= 0) {
        $("#SendObjectAlert").append("Чтобы отправить выбранное объявление, отметьте его галочкой!");
        
        //alert("Чтобы отправить выбранное объявление, отметьте его галочкой!");
        sendObjConfirm = false;
        return;
    }

    txtMail = $("#txtMail").val();
    txtAnswer = $("#txtAnswer").val()
    if (!txtAnswer)
    {
        txtAnswer = "";
        if ($("#txtAnswer").length > 0)
        {
            $("#SendObjectAlert").append("Нужно ответить на вопрос работодателя!");
            sendObjConfirm = false;
            return;
        }
    }


    if (sendObjConfirm || NoNeedInConfirmDialog())
    {
        SendObjectAjaxQuery();

        
        $("#panelObjectsReply").hide();
        $("#panelObjectsReply").show();
    
    }
    else
        ConfirmDialog();
    
    //SendObjectAjaxQuery();

}

function NoNeedInConfirmDialog(announcementId)
{
    NSendAnnouncements = 0;
    var result = true;
    if (!announcementId)
    {
        var a = $("#SendDialogBody").find("tr");
        var n = a.length;
        for (var i = 1; i < n; i++)
        {
            var cell = a[i].cells[2];
            if (cell.innerHTML.length > 7)
            {
                var cell2 = a[i].cells[3];
                var checked = $(cell2).find(":checked");
                if (checked.length > 0)
                {
                    a[i].style.backgroundColor = "#FFFFC4";
                    NSendAnnouncements++;
                    result = false;
                    //break;
                }
                else
                {
                    a[i].style.backgroundColor = "";
                }
            }
        }

        if (!result)
        {
            for (var i = 0; i < n; i++)
            {
                var cell = $(a[i].cells[2]).show();

            }
        }
    }
    else
    {
        result = $("#ID__SendObjectSend").attr("wasSend") == "1";
    }
    
    return result;
}

function ConfirmDialog() {
    var sAlert = "";
    if (sendObjectType.toUpperCase() == "RESUME") {
        if (NSendAnnouncements == 1) {
            sAlert = "Вы уже отправляли свое резюме на эту вакансию.<br />Отправить еще раз?";
        }
        else {
            sAlert = "Вы уже отправляли свои резюме на эту вакансию.<br />Отправить еще раз?";
        }

    }
    else if (sendObjectType.toUpperCase() == "VACANCY") {
        if (NSendAnnouncements == 1) {
            sAlert = "Вы уже отправляли свою вакансию на это резюме.<br />Отправить еще раз?";
        }
        else {
            sAlert = "Вы уже отправляли свои вакансии на это резюме.<br />Отправить еще раз?";
        }

    }
    
    $("#SendObjectAlert").empty();
    $("#SendObjectAlert").append(sAlert);
    $("#ID__SendObjectSend")[0].value = "отправить";
    sendObjConfirm = true;
}

function SendCallback(result) {
    var body = $("#SendDialogBody");
    if (result.Code == 1)
        body.html(result.Message);
    else {
        body.html("");
        alert(result.Message);
        SendPage(1);
    }
}

function SendErrorCallback(result) {
    var body = $("#SendDialogBody");
    body.html("");
    alert(result.responseText);
    SendPage(1);
}
function ChangePwdDialog()
{
    OpenDialog("#pnlChangePwd", 320);
}

function ChangeEMailDialog()
{
    OpenDialog("#pnlChangeEmail", 260);
}



function changePwdInput_KeyPress()
{
    if (event.keyCode == 13) { changePwdButton_Click(); return false; }
}

function changePwdButton_Click()
{

    var pwdOld = $.trim($("#change_pwd_form_old_pwd").val());
    var pwd1 = $.trim($("#change_pwd_form_pwd1").val());
    var pwd2 = $.trim($("#change_pwd_form_pwd2").val());

    if (pwdOld == "" || pwd1 == "" || pwd2 == "") { alert("Заполните все поля!"); return; }
    if (pwd1 != pwd2) { alert("Новые пароли не совпадают!"); return; }

    $.jmsajax({
        url: "/webservices/user.asmx/ChangePassword",
        data: { "oldPassword": pwdOld, "newPassword": pwd1 },
        cache: false,
        success: changePasswordCallback,
        error: errorCallbackChangePwd
    });

    showDiv("change_pwd_form_request");
}


function changePasswordCallback(result)
{
    hideDiv("change_pwd_form_request");

    if (result.Code < 1)
    { alert(result.Message); }
    else if (result.Code == 1)
        changePwdFormTM.selectTab("change_pwd_form_message");
}

function hideChangePwd()
{
    $("#change_pwd_form_old_pwd").val("");
    $("#change_pwd_form_pwd1").val("");
    $("#change_pwd_form_pwd2").val("");
    changePwdFormTM.selectTab("change_pwd_form_main");

    CloseDialog("#pnlChangePwd");
}



function hideChangeEmail()
{
    changeEmailFormTM.selectTab("change_email_form_main");
    CloseDialog("#pnlChangeEmail");
}

function changeEmailButton_Click()
{
    var email = $.trim($("#change_email_form_email").val());
    if (!validateEmail(email)) return;

    $.jmsajax({
        url: "/webservices/user.asmx/ChangeEmail",
        data: { "newEmail": email },
        cache: false,
        success: changeEmailCallback,
        error: errorCallbackChangeEmail
    });

    showDiv("change_email_form_request");
}

function changeEmailCallback(result)
{
    hideDiv("change_email_form_request");
    if (result.Code < 1)
    { alert(result.Message); }
    else if (result.Code == 1)
        changeEmailFormTM.selectTab("change_email_form_message");
}


function errorCallbackChangePwd(result)
{
    hideDiv("change_pwd_form_request");
    if (result.responseText)
        alert(result.responseText);
}

function errorCallbackChangeEmail(result)
{
    hideDiv("change_email_form_request");
    if (result.responseText)
        alert(result.responseText);
}
function FirmMakeQuery()
{
    return "?search=1&keywords=" + escape($("#" + txtKeywordsId).val()) + "&region=" + escape($("#" + listRegionId).val()) + "&all=" + $("#" + chWithAllAnnouncementId).attr("checked")
}

function FirmSearch()
{
    FirmShowResult(FirmMakeQuery());
}

function FirmShowResult(query)
{
    window.location.href = "/workman/g_" + firmGroupId + "/company.aspx" + query;
}

function FirmPageSize(el)
{
    $.jmsajax({
        url: "/webservices/user.asmx/ChangeUserPageSize",
        data: { 'pageSize': $(el).val()},
        cache: false,
        success: function()
            {
                FirmSearch();
            }
        });
}

function FirmOrderChange(el)
{
    var order = $(el).val();

    var query = FirmMakeQuery();
    query += "&sort=" + order;
    if (order == "Counts")
        query += "&sdir=desc";

    FirmShowResult(query);
}


//
// Author: Logutov Michael
// Date: 03 december 2008
// Description: This plugin handle form validations
//

var validateRegexRequired = /\s*[^\s]+\s*/i;
var validateRegexEmail = /^\s*[A-Za-z0-9](([_\.\-]?[a-zA-Z0-9]+)*)@([A-Za-z0-9]+)(([\.\-]?[a-zA-Z0-9]+)*)\.([A-Za-z]{2,})\s*$/i;
var validateRegexDate = /^\s*(\d{2})\.(\d{2})\.(\d{4})\s*$/i;
var validateRegexTime = /^\s*(\d{2})\:(\d{2})\s*$/i;
var validateRegexFloat = /^\s*[+-]?\d*\.?\d*\s*$/i;
var validateRegexInteger = /^\s*[+-]?\d+\s*$/i;
var ValidatorErrorOptionsKey = "validatorError.options";

//
// This function will shows error message inside element by specified selector
//
function ShowError(errorElementSelectorOrObject, message)
{
	var t = (typeof (errorElementSelectorOrObject) == "string" ? $(errorElementSelectorOrObject) : errorElementSelectorOrObject);

	if (!t.data("errorDisplayed"))
		t.data("oldHtml", t.html());

	t.data("errorDisplayed", true).addClass("error").html(message).show();
}

//
// This function will clears error message inside element by specified selector
//
function HideError(errorElementSelectorOrObject)
{
	var t = (typeof (errorElementSelectorOrObject) == "string" ? $(errorElementSelectorOrObject) : errorElementSelectorOrObject);

	if (t.data("errorDisplayed"))
		t.removeData("errorDisplayed").removeClass("error").html(t.data("oldHtml") || "");
}

; (function($)
{
    $.validatorsClear = function(group)
    {
        var validators = $(document).data("validators" + group);
        if (validators)
        {
            for (var k = validators.length - 1; k >= 0; k--)
                validators[k].clearError();
        }

        $(document).data("validators" + group, null);
    }

    $.validator = function(options)
    {
        opt = $.extend({
            group: "Default",

            targetSelector: null, 		// can be selector or object
            errorSelector: null, 		// can be selector or object
            errorBindSelector: null, 	// used only if errorSelector is null

            type: "required",
            message: "Validate error",

            zIndex: 99999,
            isHtml: false,

            errorAnimate:
			{
			    left: "+=10"
			},

            hideByFocus: false, //скрывать при фокусировки
            validByChange: true, //валидировать при изменении

            cssClass: "validatorError",

            showError: function(target, errorSelector, message)
            {
                if (errorSelector)
                    ShowError(errorSelector, message);
                else
                    target
						.attr("error", 1)
						.showValidatorError
						({
						    content: message,
						    zIndex: this.zIndex,
						    errorBindSelector: this.errorBindSelector,
						    animate: this.errorAnimate,
						    cssClass: this.cssClass
						});
            },
            clearError: function()
            {
                if (this.errorSelector)
                    HideError(this.errorSelector);
                else
                {
                    var t = $(this.targetSelector);

                    t
						.attr("error", 0)
						.hideValidatorError();
                }
            },
            isEnabled: function()
            {
                return true;
            }
        }, options);

        if (!opt.targetSelector)
            throw "No targetSelector specified for validator";


        v = opt;



        validators = $(document).data("validators" + v.group);
        if (!validators)
        {
            validators = new Array();
            $(document).data("validators" + v.group, validators);
        }
        validators.push(v);


        if (typeof (v.type) == "function")
        {
            v.validate = v.type;
        }
        else
        {
            switch (v.type)
            {
                case "required":
                    {
                        v.validate = function(v, target)
                        {
                            var val = v.isHtml ? target.html() : target.val();
                            if (!val || !validateRegexRequired.test(val))
                                return v.message;

                            return null;
                        };

                        break;
                    }

                case "regex":
                    {
                        v.validate = function(v, target)
                        {
                            if (!v.regex.test(v.isHtml ? target.html() : target.val()))
                                return v.message;

                            return null;
                        };

                        break;
                    }

                case "email":
                    {
                        v.validate = function(v, target)
                        {
                            if (!validateRegexEmail.test(v.isHtml ? target.html() : target.val()))
                                return v.message;

                            return null;
                        };

                        break;
                    }

                case "date":
                    {
                        v.validate = function(v, target)
                        {
                            if (!validateRegexDate.test(v.isHtml ? target.html() : target.val()))
                                return v.message;

                            var dt;
                            try
                            {
                                dt = ParseDate(v.isHtml ? target.html() : target.val());

                                if (!dt)
                                    return v.message;
                            }
                            catch (e)
                            {
                                return v.message;
                            }

                            if (v.minDate)
                            {
                                check_dt = new Date(v.minDate.getFullYear(), v.minDate.getMonth(), v.minDate.getDate());
                                if (dt < check_dt)
                                    return v.message;
                            }

                            if (v.maxDate)
                            {
                                check_dt = new Date(v.maxDate.getFullYear(), v.maxDate.getMonth(), v.maxDate.getDate());
                                if (dt > check_dt)
                                    return v.message;
                            }

                            return null;
                        };

                        break;
                    }

                case "time":
                    {
                        v.validate = function(v, target)
                        {
                            var val = v.isHtml ? target.html() : target.val();

                            if (!validateRegexTime.test(val))
                                return v.message;

                            var t = val.split(":");
                            if (t.length != 2)
                                return v.message;

                            var h = parseInt(t[0]);
                            var m = parseInt(t[1]);

                            if (h < 0 || h > 24 || m < 0 || m > 59)
                                return v.message;

                            return null;
                        };

                        break;
                    }

                case "float":
                    {
                        v.validate = function(v, target)
                        {
                            try
                            {
                                if (!validateRegexFloat.test(v.isHtml ? target.html() : target.val()))
                                    return v.message;
                            }
                            catch (e)
                            {
                                return v.message;
                            }

                            return null;
                        };

                        break;
                    }

                case "integer":
                    {
                        v.validate = function(v, target)
                        {
                            try
                            {
                                if (!validateRegexInteger.test(v.isHtml ? target.html() : target.val()))
                                    return v.message;
                            }
                            catch (e)
                            {
                                return v.message;
                            }

                            return null;
                        };

                        break;
                    }

                case "compare":
                    {
                        v.validate = function(v, target)
                        {
                            var a = v.isHtml ? target.html() : target.val();
                            var b = v.targetSelector2 ? (v.isHtml ? $(v.targetSelector2).html() : $(v.targetSelector2).val()) : v.targetValue;

                            if (!a || !b)
                                return null;

                            switch (v.valueType)
                            {
                                case "integer":
                                    {
                                        a = parseInt(a);
                                        b = parseInt(b);

                                        if (isNaN(a) || isNaN(b))
                                            return null;

                                        break;
                                    }

                                case "float":
                                    {
                                        a = parseFloat(a);
                                        b = parseFloat(b);

                                        if (isNaN(a) || isNaN(b))
                                            return null;

                                        break;
                                    }

                                case "date":
                                    {
                                        a = ParseDate(a);
                                        b = ParseDate(b);

                                        if (!a || !b)
                                            return null;

                                        break;
                                    }
                            }

                            switch (v.compareType)
                            {
                                case "equal":
                                    {
                                        if (!(a == b))
                                            return v.message;

                                        break;
                                    }

                                case "less":
                                    {
                                        if (!(a < b))
                                            return v.message;

                                        break;
                                    }

                                case "lessOrEqual":
                                    {
                                        if (!(a <= b))
                                            return v.message;

                                        break;
                                    }

                                case "greater":
                                    {
                                        if (!(a > b))
                                            return v.message;

                                        break;
                                    }

                                case "greaterOrEqual":
                                    {
                                        if (!(a >= b))
                                            return v.message;

                                        break;
                                    }

                                case "notEqual":
                                    {
                                        if (!(a != b))
                                            return v.message;

                                        break;
                                    }

                                default:
                                    throw "Invalid or unsupported compare type '" + v.compareType + "'";
                            }

                            return null;
                        };

                        break;
                    }

                case "mod10":
                    {
                        v.validate = function(v, target)
                        {
                            // Strip any non-digits (useful for credit card numbers with spaces and hyphens)
                            var number = (v.isHtml ? target.html() : target.val()).replace(/\D/g, '');

                            // Set the string length and parity
                            var number_length = number.length;
                            var parity = number_length % 2;

                            // Loop through each digit and do the maths
                            var total = 0;
                            for (i = 0; i < number_length; i++)
                            {
                                var digit = number.charAt(i);
                                // Multiply alternate digits by two
                                if (i % 2 == parity)
                                {
                                    digit = digit * 2;
                                    // If the sum is two digits, add them together (in effect)
                                    if (digit > 9)
                                    {
                                        digit = digit - 9;
                                    }
                                }
                                // Total up the digits
                                total = total + parseInt(digit);
                            }

                            // If the total mod 10 equals 0, the number is valid
                            if (total % 10 == 0)
                                return null;

                            return v.message;
                        };

                        break;
                    }

                default:
                    throw "Unsupported validator type '" + v.type + "'";
            }
        }

        v.performValidation = function(target)
        {
            if (!this.isEnabled() || (this.type != "required" && typeof (this.type) != "function" && !(v.isHtml ? target.html() : target.val())))
                return true;

            message = this.validate(this, target);

            if (message)
            {
                if (this.errorSelector)
                    $(this.errorSelector).attr("validateError", this.group).addClass("error");

                this.showError(target, this.errorSelector, message);

                //target.focus();
                return false;
            }
            else
                return true;
        }

        // save validator into array associated with the target element
        target_validators = $(v.targetSelector).data("validators");
        if (!target_validators)
        {
            target_validators = new Array();
            $(v.targetSelector).data("validators", target_validators);
        }
        target_validators.push(v);

        if (v.hideByFocus)
        {
            // validate on target value possibly changed
            $(v.targetSelector).bind("focus", function()
            {
                target_validators = $(this).data("validators");

                // clear all errors first
                for (k = target_validators.length - 1; k >= 0; k--)
                    target_validators[k].clearError();
            });
        }


        // validate on target value possibly changed
        $(v.targetSelector).bind("change", function()
        {

            target_validators = $(this).data("validators");

            // clear all errors first
            for (k = target_validators.length - 1; k >= 0; k--)
                target_validators[k].clearError();

            
            if (v.validByChange)
            {
                // now validate
                for (k = target_validators.length - 1; k >= 0; k--)
                {
                    v = target_validators[k];
                    v.performValidation($(this));
                }
            }
        });

    }

    $.validate = function(group)
    {
        var validators = $(document).data("validators" + group);
        if (!validators)
            throw new "No validators defined for group '" + group + "'";

        var is_valid = true;

        for (var k = validators.length - 1; k >= 0; k--)
            validators[k].clearError();

        for (k = validators.length - 1; k >= 0; k--)
        {
            try
            {
                var v = validators[k];

                $(v.targetSelector).each(function()
                {
                    if (!v.performValidation($(this)))
                        is_valid = false;
                });
            }
            catch (ex)
            {
                is_valid = false;
            }
        }

        return is_valid;
    }

    $.validatorsHideErrors = function(group)
    {
        var validators = $(document).data("validators" + group);
        if (!validators)
            throw new "No validators defined for group '" + group + "'";

        for (k = 0; k < validators.length; k++)
            validators[k].clearError();
    }

    $.fn.extend
	({
	    hideErrors: function()
	    {
	        return this.find("*[error=1]").each(function()
	        {
	            var t = $(this);

	            t
					.attr("error", 0)
					.hideValidatorError();
	        });

	        return this.find(".error").each(function()
	        {
	            HideError($(this));
	        });
	    },

	    //
	    // Hides validator error
	    //
	    hideValidatorError: function()
	    {
	        var t = $(this);
	        var opt = t.data(ValidatorErrorOptionsKey, opt);
	        if (opt)
	        {
	            opt.controls.p
							.stop(true)
							.remove();

	            t.removeData(ValidatorErrorOptionsKey);
	        }
	    },

	    //
	    // Shows validator error message near the control
	    //
	    showValidatorError: function(options)
	    {
	        var t = $(this);
	        t.hideValidatorError();

	        if (typeof (options) == "string")
	            options = { content: options };

	        var opt = $.extend
			({
			    content: null,
			    animate:
				{
				    left: "+=10"
				},
			    zIndex: 100
			}, options);

	        if (!opt.content)
	            throw new "Not content specified for showValidatorError.";

	        t.data(ValidatorErrorOptionsKey, opt);

	        opt.controls = new Object();
	        opt.controls.p = $(
				"<div class='" + opt.cssClass + "' style='position: absolute; display: none; z-index: " + opt.zIndex + "'>" +
					"<div class='content'></div>" +
				"</div>");

	        $(document.body).append(opt.controls.p);

	        if (typeof (opt.content) == "function")
	            $(".content", opt.controls.p).html(opt.content(opt));
	        else
	            $(".content", opt.controls.p).html(opt.content);

	        var bind_obj = (opt.errorBindSelector || t);
	        var pos = bind_obj.offset();

	        opt.controls.p
				.css
				({
				    left: pos.left + bind_obj.outerWidth(),
				    top: pos.top - 3,
				    opacity: 0,
				    display: "block"
				})
				.animate($.extend({ opacity: 1 }, opt.animate), 200);
	    }
	});

})(jQuery);
var loginForm =
{
    dlg: null,
    loadRegion: false,
    locationId: null,
    phoneCode: null,
    phoneNumber: null,
    loginText: null,
    registerText: null,

    init: function()
    {
        $("#loginFormFirmInfo").hide();

        var g = this;
        g.dlg = $("#loginForm");

        g.dlg.dialog({
            autoOpen: false,
            width: 540,
            height: 380,
            position: ['center', ($.browser.opera ? 150 : 'center')],
            draggable: false,
            resizable: false,
            bgiframe: true,
            hide: 'fast',
            modal: true,
            dialogClass: "popupDialog",
            closeText: "X",
            overlay: {
                opacity: 0.5,
                background: "black"
            },
            close: function()
            {
                $.validatorsClear("LoginFormLogin");
                $.validatorsClear("LoginFormRegistration");
                $.validatorsClear("LoginFormForgot");
            }
        });


        $.validator
        ({
            group: "LoginFormLogin",
            targetSelector: $("#login_groupId"),
            hideByFocus: true,
            type: function()
            {
                if ($("#div_login_groupId").css("display") != "none" && $.trim($("#login_groupId").val()) == '')
                    return "Необходимо выбрать свой статус";

                return null;
            }
        });


        $.validator
        ({
            group: "LoginFormLogin",
            targetSelector: $("#loginFormEMail"),
            type: "required",
            hideByFocus: true,
            message: "Необходимо указать свой e-mail адрес"
        });

        $.validator
        ({
            group: "LoginFormLogin",
            targetSelector: $("#loginFormEMail"),
            type: "email",
            hideByFocus: true,
            message: "Неверный формат e-mail адреса"
        });

        $.validator
        ({
            group: "LoginFormLogin",
            targetSelector: $("#loginFormPassword"),
            type: "required",
            hideByFocus: true,
            message: "Необходимо указать пароль"
        });

        var btnLogin = $("#btnLogin");
        $("#loginFormEMail").clickOnEnter(btnLogin)
        $("#loginFormPassword").clickOnEnter(btnLogin)

        btnLogin.click(function()
        {
            if (!$.validate("LoginFormLogin"))
                return false;

            var loading = $("#loginLoading");
            loading.show();

            var groupId = null;
            if ($("#div_login_groupId").css("display") == "block")
                groupId = $("#login_groupId").val();

            var email = $.trim($("#loginFormEMail").val());
            var password = $.trim($("#loginFormPassword").val());
            var rememberMe = $("#loginFormPersist").attr("checked");

            g.loginService(email, password, groupId, rememberMe);
        });




        $.validator
        ({
            group: "LoginFormRegistration",
            targetSelector: $("#reg_groupId"),
            type: "required",
            message: "Необходимо указать свой статус"
        });

        $.validator
        ({
            group: "LoginFormRegistration",
            targetSelector: $("#loginFormRegisterEMail"),
            type: "required",
            hideByFocus: true,
            message: "Необходимо указать свой e-mail адрес"
        });

        $.validator
        ({
            group: "LoginFormRegistration",
            targetSelector: $("#loginFormRegisterEMail"),
            type: "email",
            hideByFocus: true,
            message: "Неверный формат e-mail адреса"
        });

        $.validator
        ({
            group: "LoginFormRegistration",
            targetSelector: $("#loginFormRegisterPassword"),
            hideByFocus: true,
            type: "required",
            message: "Необходимо указать пароль"
        });

        $.validator
        ({
            group: "LoginFormRegistration",
            targetSelector: $("#Pravila"),
            errorBindSelector: $("#lblPravila"),
            hideByFocus: true,
            type: function()
            {
                if (!$("#Pravila").attr("checked"))
                    return "Необходимо ознакомится с правилами";

                return null;
            }

        });

        $.validator
        ({
            group: "LoginFormRegistration",
            targetSelector: $("#loginFormRegisterConfirm"),
            errorBindSelector: $("#loginFormRegisterPassword"),
            hideByFocus: true,
            type: function(v, target)
            {
                if ($("#loginFormRegisterPassword").val() != $("#loginFormRegisterConfirm").val())
                    return "Неверно указан пароль";

                return null;
            }
        });

        $.validator
        ({
            group: "LoginFormRegistration",
            targetSelector: $("#loginFormRegisterPhone"),
            hideByFocus: true,
            type: function()
            {
                var code = $("#loginFormRegisterCode").val();
                var phone = $("#loginFormRegisterPhone").val();

                if (code != '' && !validateRegexInteger.test(code) || phone != '' && !validateRegexInteger.test(phone))
                    return "Код города и телефон должны содержать только цифры";

                return null;
            }
        });

        $("#loginFormRegisterCode").watermark({ html: "код", cls: "watermark_cabinet" });
        $("#loginFormRegisterPhone").watermark("телефон");

        var btnRegistration = $("#btnRegistration");
        $("#loginFormRegisterEMail").clickOnEnter(btnRegistration)
        $("#loginFormRegisterPassword").clickOnEnter(btnRegistration)
        $("#loginFormRegisterConfirm").clickOnEnter(btnRegistration)

        $("#reg_groupId").change(function()
        {
            var id = $("#reg_groupId").val();
            if (id <= 1)
            {
                $("#loginFormFirmInfo").hide();
                g.dlg.dialog("option", "height", 380);
            }
            else
            {
                g.dlg.dialog("option", "height", 430);
                $("#loginFormFirmInfo").show();

                if (!g.loadRegion)
                {

                    $.jmsajax({
                        url: "/webservices/geo.asmx/SelectFirstLocationLevel",
                        data: { 'knownCategoryValues': '', 'category': 138 },
                        cache: false,
                        complete: function()
                        {
                            g.loadRegion = true;
                        },
                        success: function(data)
                        {
                            var html = [];
                            for (var i = 0; i < data.length; i++)
                            {
                                html.push("<option value='" + data[i].value + "'>" + data[i].name + "</option>");
                            }

                            $("#loginFormRegisterLocation").append(html.join("")).val(g.locationId);

                        }
                    });
                }

                $("#loginFormRegisterCode").val(g.phoneCode);
                $("#loginFormRegisterPhone").val(g.phoneNumber);
            }
        });


        btnRegistration.click(function()
        {
            if (!$.validate("LoginFormRegistration"))
                return false;

            var loading = $("#loginLoading");
            loading.show();

            var groupId = $("#reg_groupId").val();
            var email = $.trim($("#loginFormRegisterEMail").val());
            var password = $.trim($("#loginFormRegisterPassword").val());
            var locationId = $.trim($("#loginFormRegisterLocation").val());
            var firmName = $.trim($("#loginFormRegisterFirmName").val());
            var code = $.trim($("#loginFormRegisterCode").val());
            var phone = $.trim($("#loginFormRegisterPhone").val());


            $.jmsajax({
                url: "/webservices/user.asmx/RegisterZarplata",
                data: { 'email': email, 'password': password, "groupId": groupId, 'rememberMe': true, 'locationId': locationId, 'firmName': firmName, 'code': code, 'phone': phone },
                cache: false,
                complete: function()
                {
                    loading.hide();
                },
                success: function(data)
                {
                    if (data.Code <= 0)
                    {
                        alert(data.Message);
                    }
                    else
                    {
                        $.getJSON("http://" + PlatformHost + "/handlers/userhandler.ashx?action=login&ticket=" + escape(data.Ticket) + "&remember=1&callback=?",
                        function()
                        {
                            g.loginComplete(data);
                        });

                        g.loginComplete(data);
                    }
                }
            });
        });


        $.validator
        ({
            group: "LoginFormForgot",
            targetSelector: $("#loginFormForgotEMail"),
            type: "required",
            hideByFocus: true,
            message: "Необходимо указать свой e-mail адрес"
        });

        $.validator
        ({
            group: "LoginFormForgot",
            targetSelector: $("#loginFormForgotEMail"),
            type: "email",
            hideByFocus: true,
            message: "Неверный формат e-mail адреса"
        });

        var btnForgot = $("#btnForgotPassword");
        $("#loginFormForgotEMail").clickOnEnter(btnForgot)

        btnForgot.click(function()
        {
            if (!$.validate("LoginFormForgot"))
                return false;

            var loading = $("#loginLoading");
            loading.show();

            $.jmsajax({
                url: "/webservices/user.asmx/RememberPassword",
                data: { 'email': $.trim($("#loginFormForgotEMail").val()) },
                cache: false,
                complete: function()
                {
                    loading.hide();
                },
                success: function(data)
                {
                    if (data.Code == 0)
                    {
                        alert(data.Message);
                    }
                    else
                    {
                        alert("Пароль был выслан на Ваш e-mail");
                        g.switchTabs("login");
                    }
                }
            });
        });

    },

    loginService: function(email, password, groupId, rememberMe)
    {
        var g = this;

        $.jmsajax({
            url: "/webservices/user.asmx/LoginZarplata",
            data: { 'email': email, 'password': password, 'groupId': groupId, 'rememberMe': rememberMe },
            cache: false,
            complete: function()
            {
                $("#loginLoading").hide();
            },
            success: function(data)
            {
                switch (data.Code)
                {
                    case 0:
                        alert(data.Message);
                        break;
                    case 1:
                        $.getJSON("http://" + PlatformHost + "/handlers/userhandler.ashx?action=login&ticket=" + escape(data.Ticket) + (rememberMe ? "&remember=1" : "") + "&callback=?",
                            function()
                            {
                                g.loginComplete(data);
                            });
                        break;
                    case 2:
                        alert(data.Message);
                        g.onNeedRole();
                        break;
                }
            }
        });
    },

    loginComplete: function(data)
    {
        isLoggedIn = true;
        var item = $("#___user_cabinet_login_id");
        item.after("<a href=\"/user/\"><u>Личный кабинет (" + data.Message + ")</u></a> | <a href=\"javascript:void(0);\" onclick=\"Logout();return false;\"><u>Выйти</u></a> ");
        item.remove();

        this.close();

        if (curAction)
        {
            doAction(curAction, curActionType);
        }
    },

    onNeedRole: function()
    {
        $("#div_login_groupId").css("display", "block");
    },

    open: function(email, showRegistration, hideRegisterBackLinks, groupIds, roleId)
    {
        if (!this.dlg)
        {
            this.init();
        }

        if (email)
        {
            $("#loginFormEMail").val(email);
        }

        if (groupIds)
        {
            this.setComboRoles("reg_groupId", groupIds);
            this.setComboRoles("login_groupId", groupIds);
        }
        else
        {
            this.setComboRoles("reg_groupId", { 0: 1, 1: 1, 2: 1, 3: 1 });
            this.setComboRoles("login_groupId", { 0: 1, 1: 1, 2: 1, 3: 1 });
        }

        if (roleId)
        {
            $("#reg_groupId").val(roleId).change();
        }

        if (this.loginText)
        {
            $("#loginFormLoginText").html(this.loginText);
        }

        if (this.registerText)
        {
            $("#loginFormRegisterText").html(this.registerText);
        }


        this.dlg.show();
        this.dlg.dialog("open");
        this.switchTabs((showRegistration ? "registration" : "login"));
    },

    setComboRoles: function(comboId, groupIds)
    {
        var comboEl = $("#" + comboId).get(0);
        comboEl.options.length = 0;
        addOption(comboEl, "Выберите статус", "");
        addOption(comboEl, "Соискатель", 1);
        addOption(comboEl, "Кадровое агентство", 2);
        addOption(comboEl, "Работодатель", 3);

        for (var i = comboEl.options.length - 1; i != 0; i--)
        {
            if (!groupIds[Number(comboEl.options[i].value)])
                comboEl.remove(i);
        }
    },


    switchTabs: function(tab)
    {
        this.dlg.children("div").hide();
        this.dlg.hideErrors();

        var txtEmailLogin = $("#loginFormEMail");
        var txtEmailRegister = $("#loginFormRegisterEMail");
        var txtEmailForgot = $("#loginFormForgotEMail");

        var forFocus;

        var i;
        switch (tab)
        {
            case "login":
            case 0:
                i = 0;
                if (txtEmailLogin.val() != '')
                {
                    forFocus = $("#loginFormPassword");
                }
                else
                {
                    forFocus = txtEmailLogin;
                }
                break;
            case "forgot":
            case 1:
                i = 1;
                txtEmailForgot.val(txtEmailLogin.val());
                forFocus = txtEmailForgot;
                break;
            case "registration":
            case 2:
                i = 2;
                txtEmailRegister.val(txtEmailLogin.val());
                if (txtEmailLogin.val() != '')
                {
                    forFocus = $("#loginFormRegisterPassword");
                }
                else
                {
                    forFocus = txtEmailRegister;
                }
                break;
        }

        this.dlg.children("div:eq(" + i + ")").show();
        forFocus.focus();
    },

    close: function()
    {
        this.dlg.dialog("close");
    },

    logonByTicket: function()
    {
        var g = this;

        $.getJSON("http://" + PlatformHost + "/handlers/userhandler.ashx?action=getticket&callback=?",
            function(ticket)
            {
                if (ticket)
                {

                    $.jmsajax({
                        url: "/webservices/user.asmx/LoginByTicket",
                        data: { 'ticket': ticket },
                        cache: false,
                        success:
                            function(data)
                            {
                                if (data.Code == 1)
                                {
                                    curAction = null;
                                    g.loginComplete(data);
                                }
                            }
                    });
                }
            }
        )
    }
}
/**
* SWFObject v1.5: Flash Player detection and embed - http://blog.deconcept.com/swfobject/
* MODIFIED 1 :  escape(variables[key]); 
* MODIFIED 2:  document.write(this.getSWFHTML());
*
*/
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(swf, id, w, h, ver, c, quality, xiRedirectUrl, redirectUrl, detectKey)
{
    if (!document.getElementById) { return; }
    this.DETECT_KEY = detectKey ? detectKey : 'detectflash';
    this.skipDetect = deconcept.util.getRequestParameter(this.DETECT_KEY);
    this.params = new Object();
    this.variables = new Object();
    this.attributes = new Array();
    if (swf) { this.setAttribute('swf', swf); }
    if (id) { this.setAttribute('id', id); }
    if (w) { this.setAttribute('width', w); }
    if (h) { this.setAttribute('height', h); }
    if (ver) { this.setAttribute('version', new deconcept.PlayerVersion(ver.toString().split("."))); }
    this.installedVer = deconcept.SWFObjectUtil.getPlayerVersion();
    if (!window.opera && document.all && this.installedVer.major > 7)
    {
        // only add the onunload cleanup if the Flash Player version supports External Interface and we are in IE
        deconcept.SWFObject.doPrepUnload = true;
    }
    if (c) { this.addParam('bgcolor', c); }
    var q = quality ? quality : 'high';
    this.addParam('quality', q);
    this.setAttribute('useExpressInstall', false);
    this.setAttribute('doExpressInstall', false);
    var xir = (xiRedirectUrl) ? xiRedirectUrl : window.location;
    this.setAttribute('xiRedirectUrl', xir);
    this.setAttribute('redirectUrl', '');
    if (redirectUrl) { this.setAttribute('redirectUrl', redirectUrl); }
}
deconcept.SWFObject.prototype = {
    useExpressInstall: function(path)
    {
        this.xiSWFPath = !path ? "expressinstall.swf" : path;
        this.setAttribute('useExpressInstall', true);
    },
    setAttribute: function(name, value)
    {
        this.attributes[name] = value;
    },
    getAttribute: function(name)
    {
        return this.attributes[name];
    },
    addParam: function(name, value)
    {
        this.params[name] = value;
    },
    getParams: function()
    {
        return this.params;
    },
    addVariable: function(name, value)
    {
        this.variables[name] = value;
    },
    getVariable: function(name)
    {
        return this.variables[name];
    },
    getVariables: function()
    {
        return this.variables;
    },
    getVariablePairs: function()
    {
        var variablePairs = new Array();
        var key;
        var variables = this.getVariables();
        for (key in variables)
        {
            variablePairs[variablePairs.length] = key + "=" + escape(variables[key]);
        }
        return variablePairs;
    },
    getSWFHTML: function()
    {
        var swfNode = "";
        if (navigator.plugins && navigator.mimeTypes && navigator.mimeTypes.length)
        { // netscape plugin architecture
            if (this.getAttribute("doExpressInstall"))
            {
                this.addVariable("MMplayerType", "PlugIn");
                this.setAttribute('swf', this.xiSWFPath);
            }
            swfNode = '<embed type="application/x-shockwave-flash" src="' + this.getAttribute('swf') + '" width="' + this.getAttribute('width') + '" height="' + this.getAttribute('height') + '" style="' + this.getAttribute('style') + '"';
            swfNode += ' id="' + this.getAttribute('id') + '" name="' + this.getAttribute('id') + '" ';
            var params = this.getParams();
            for (var key in params) { swfNode += [key] + '="' + params[key] + '" '; }
            var pairs = this.getVariablePairs().join("&");
            if (pairs.length > 0) { swfNode += 'flashvars="' + pairs + '"'; }
            swfNode += '/>';
        } else
        { // PC IE
            if (this.getAttribute("doExpressInstall"))
            {
                this.addVariable("MMplayerType", "ActiveX");
                this.setAttribute('swf', this.xiSWFPath);
            }
            swfNode = '<object id="' + this.getAttribute('id') + '" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="' + this.getAttribute('width') + '" height="' + this.getAttribute('height') + '" style="' + this.getAttribute('style') + '">';
            swfNode += '<param name="movie" value="' + this.getAttribute('swf') + '" />';
            var params = this.getParams();
            for (var key in params)
            {
                swfNode += '<param name="' + key + '" value="' + params[key] + '" />';
            }
            var pairs = this.getVariablePairs().join("&");
            if (pairs.length > 0) { swfNode += '<param name="flashvars" value="' + pairs + '" />'; }
            swfNode += "</object>";
        }
        return swfNode;
    },
    write: function(elementId)
    {
        if (this.getAttribute('useExpressInstall'))
        {
            // check to see if we need to do an express install
            var expressInstallReqVer = new deconcept.PlayerVersion([6, 0, 65]);
            if (this.installedVer.versionIsValid(expressInstallReqVer) && !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 elementId == 'string') ? document.getElementById(elementId) : elementId;
            if (n)
            { n.innerHTML = this.getSWFHTML(); }
            else
            { document.write(this.getSWFHTML()); }
            return true;
        } else
        {
            if (this.getAttribute('redirectUrl') != "")
            {
                document.location.replace(this.getAttribute('redirectUrl'));
            }
        }
        return false;
    }
}

/* ---- detection functions ---- */
deconcept.SWFObjectUtil.getPlayerVersion = function()
{
    var PlayerVersion = new deconcept.PlayerVersion([0, 0, 0]);
    if (navigator.plugins && navigator.mimeTypes.length)
    {
        var x = navigator.plugins["Shockwave Flash"];
        if (x && x.description)
        {
            PlayerVersion = 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)
    { // if Windows CE
        var axo = 1;
        var counter = 3;
        while (axo)
        {
            try
            {
                counter++;
                axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash." + counter);
                //				document.write("player v: "+ counter);
                PlayerVersion = new deconcept.PlayerVersion([counter, 0, 0]);
            } catch (e)
            {
                axo = null;
            }
        }
    } else
    { // Win IE (non mobile)
        // do minor version lookup in IE, but avoid fp6 crashing issues
        // see http://blog.deconcept.com/2006/01/11/getvariable-setvariable-crash-internet-explorer-flash-6/
        try
        {
            var axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
        } catch (e)
        {
            try
            {
                var axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
                PlayerVersion = new deconcept.PlayerVersion([6, 0, 21]);
                axo.AllowScriptAccess = "always"; // error if player version < 6.0.47 (thanks to Michael Williams @ Adobe for this code)
            } catch (e)
            {
                if (PlayerVersion.major == 6)
                {
                    return PlayerVersion;
                }
            }
            try
            {
                axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
            } catch (e) { }
        }
        if (axo != null)
        {
            PlayerVersion = new deconcept.PlayerVersion(axo.GetVariable("$version").split(" ")[1].split(","));
        }
    }
    return PlayerVersion;
}
deconcept.PlayerVersion = function(arrVersion)
{
    this.major = arrVersion[0] != null ? parseInt(arrVersion[0]) : 0;
    this.minor = arrVersion[1] != null ? parseInt(arrVersion[1]) : 0;
    this.rev = arrVersion[2] != null ? parseInt(arrVersion[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;
}
/* ---- get value of query string param ---- */
deconcept.util = {
    getRequestParameter: function(param)
    {
        var q = document.location.search || document.location.hash;
        if (param == null) { return q; }
        if (q)
        {
            var pairs = q.substring(1).split("&");
            for (var i = 0; i < pairs.length; i++)
            {
                if (pairs[i].substring(0, pairs[i].indexOf("=")) == param)
                {
                    return pairs[i].substring((pairs[i].indexOf("=") + 1));
                }
            }
        }
        return "";
    }
}
/* fix for video streaming bug */
deconcept.SWFObjectUtil.cleanupSWFs = function()
{
    var objects = document.getElementsByTagName("OBJECT");
    for (var i = objects.length - 1; i >= 0; i--)
    {
        objects[i].style.display = 'none';
        for (var x in objects[i])
        {
            if (typeof objects[i][x] == 'function')
            {
                objects[i][x] = function() { };
            }
        }
    }
}
// fixes bug in some fp9 versions see http://blog.deconcept.com/2006/07/28/swfobject-143-released/
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;
    }
}
/* add document.getElementById if needed (mobile IE < 5) */
if (!document.getElementById && document.all) { document.getElementById = function(id) { return document.all[id]; } }

/* add some aliases for ease of use/backwards compatibility */
var getQueryParamValue = deconcept.util.getRequestParameter;
var FlashObject = deconcept.SWFObject; // for legacy support
var SWFObject = deconcept.SWFObject;
