/* * jQuery JavaScript Library v1.3.2 * //jquery.com/ * * Copyright (c) 2009 John Resig * Dual licensed under the MIT and GPL licenses. * //docs.jquery.com/License * * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009) * Revision: 6246 */ (function(){var l=this,g,y=l.jQuery,p=l.$,o=l.jQuery=l.$=function(E,F){return new o.fn.init(E,F)},D=/^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;o.fn=o.prototype={init:function(E,H){E=E||document;if(E.nodeType){this[0]=E;this.length=1;this.context=E;return this}if(typeof E==="string"){var G=D.exec(E);if(G&&(G[1]||!H)){if(G[1]){E=o.clean([G[1]],H)}else{var I=document.getElementById(G[3]);if(I&&I.id!=G[3]){return o().find(E)}var F=o(I||[]);F.context=document;F.selector=E;return F}}else{return o(H).find(E)}}else{if(o.isFunction(E)){return o(document).ready(E)}}if(E.selector&&E.context){this.selector=E.selector;this.context=E.context}return this.setArray(o.isArray(E)?E:o.makeArray(E))},selector:"",jquery:"1.3.2",size:function(){return this.length},get:function(E){return E===g?Array.prototype.slice.call(this):this[E]},pushStack:function(F,H,E){var G=o(F);G.prevObject=this;G.context=this.context;if(H==="find"){G.selector=this.selector+(this.selector?" ":"")+E}else{if(H){G.selector=this.selector+"."+H+"("+E+")"}}return G},setArray:function(E){this.length=0;Array.prototype.push.apply(this,E);return this},each:function(F,E){return o.each(this,F,E)},index:function(E){return o.inArray(E&&E.jquery?E[0]:E,this)},attr:function(F,H,G){var E=F;if(typeof F==="string"){if(H===g){return this[0]&&o[G||"attr"](this[0],F)}else{E={};E[F]=H}}return this.each(function(I){for(F in E){o.attr(G?this.style:this,F,o.prop(this,E[F],G,I,F))}})},css:function(E,F){if((E=="width"||E=="height")&&parseFloat(F)<0){F=g}return this.attr(E,F,"curCSS")},text:function(F){if(typeof F!=="object"&&F!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(F))}var E="";o.each(F||this,function(){o.each(this.childNodes,function(){if(this.nodeType!=8){E+=this.nodeType!=1?this.nodeValue:o.fn.text([this])}})});return E},wrapAll:function(E){if(this[0]){var F=o(E,this[0].ownerDocument).clone();if(this[0].parentNode){F.insertBefore(this[0])}F.map(function(){var G=this;while(G.firstChild){G=G.firstChild}return G}).append(this)}return this},wrapInner:function(E){return this.each(function(){o(this).contents().wrapAll(E)})},wrap:function(E){return this.each(function(){o(this).wrapAll(E)})},append:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.appendChild(E)}})},prepend:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.insertBefore(E,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this)})},after:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this.nextSibling)})},end:function(){return this.prevObject||o([])},push:[].push,sort:[].sort,splice:[].splice,find:function(E){if(this.length===1){var F=this.pushStack([],"find",E);F.length=0;o.find(E,this[0],F);return F}else{return this.pushStack(o.unique(o.map(this,function(G){return o.find(E,G)})),"find",E)}},clone:function(G){var E=this.map(function(){if(!o.support.noCloneEvent&&!o.isXMLDoc(this)){var I=this.outerHTML;if(!I){var J=this.ownerDocument.createElement("div");J.appendChild(this.cloneNode(true));I=J.innerHTML}return o.clean([I.replace(/ jQuery\d+="(?:\d+|null)"/g,"").replace(/^\s*/,"")])[0]}else{return this.cloneNode(true)}});if(G===true){var H=this.find("*").andSelf(),F=0;E.find("*").andSelf().each(function(){if(this.nodeName!==H[F].nodeName){return}var I=o.data(H[F],"events");for(var K in I){for(var J in I[K]){o.event.add(this,K,I[K][J],I[K][J].data)}}F++})}return E},filter:function(E){return this.pushStack(o.isFunction(E)&&o.grep(this,function(G,F){return E.call(G,F)})||o.multiFilter(E,o.grep(this,function(F){return F.nodeType===1})),"filter",E)},closest:function(E){var G=o.expr.match.POS.test(E)?o(E):null,F=0;return this.map(function(){var H=this;while(H&&H.ownerDocument){if(G?G.index(H)>-1:o(H).is(E)){o.data(H,"closest",F);return H}H=H.parentNode;F++}})},not:function(E){if(typeof E==="string"){if(f.test(E)){return this.pushStack(o.multiFilter(E,this,true),"not",E)}else{E=o.multiFilter(E,this)}}var F=E.length&&E[E.length-1]!==g&&!E.nodeType;return this.filter(function(){return F?o.inArray(this,E)<0:this!=E})},add:function(E){return this.pushStack(o.unique(o.merge(this.get(),typeof E==="string"?o(E):o.makeArray(E))))},is:function(E){return !!E&&o.multiFilter(E,this).length>0},hasClass:function(E){return !!E&&this.is("."+E)},val:function(K){if(K===g){var E=this[0];if(E){if(o.nodeName(E,"option")){return(E.attributes.value||{}).specified?E.value:E.text}if(o.nodeName(E,"select")){var I=E.selectedIndex,L=[],M=E.options,H=E.type=="select-one";if(I<0){return null}for(var F=H?I:0,J=H?I+1:M.length;F=0||o.inArray(this.name,K)>=0)}else{if(o.nodeName(this,"select")){var N=o.makeArray(K);o("option",this).each(function(){this.selected=(o.inArray(this.value,N)>=0||o.inArray(this.text,N)>=0)});if(!N.length){this.selectedIndex=-1}}else{this.value=K}}})},html:function(E){return E===g?(this[0]?this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g,""):null):this.empty().append(E)},replaceWith:function(E){return this.after(E).remove()},eq:function(E){return this.slice(E,+E+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","))},map:function(E){return this.pushStack(o.map(this,function(G,F){return E.call(G,F,G)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument||this[0]).createDocumentFragment(),F=o.clean(J,(this[0].ownerDocument||this[0]),I),H=I.firstChild;if(H){for(var G=0,E=this.length;G1||G>0?I.cloneNode(true):I)}}if(F){o.each(F,z)}}return this;function K(N,O){return M&&o.nodeName(N,"table")&&o.nodeName(O,"tr")?(N.getElementsByTagName("tbody")[0]||N.appendChild(N.ownerDocument.createElement("tbody"))):N}}};o.fn.init.prototype=o.fn;function z(E,F){if(F.src){o.ajax({url:F.src,async:false,dataType:"script"})}else{o.globalEval(F.text||F.textContent||F.innerHTML||"")}if(F.parentNode){F.parentNode.removeChild(F)}}function e(){return +new Date}o.extend=o.fn.extend=function(){var J=arguments[0]||{},H=1,I=arguments.length,E=false,G;if(typeof J==="boolean"){E=J;J=arguments[1]||{};H=2}if(typeof J!=="object"&&!o.isFunction(J)){J={}}if(I==H){J=this;--H}for(;H-1}},swap:function(H,G,I){var E={};for(var F in G){E[F]=H.style[F];H.style[F]=G[F]}I.call(H);for(var F in G){H.style[F]=E[F]}},css:function(H,F,J,E){if(F=="width"||F=="height"){var L,G={position:"absolute",visibility:"hidden",display:"block"},K=F=="width"?["Left","Right"]:["Top","Bottom"];function I(){L=F=="width"?H.offsetWidth:H.offsetHeight;if(E==="border"){return}o.each(K,function(){if(!E){L-=parseFloat(o.curCSS(H,"padding"+this,true))||0}if(E==="margin"){L+=parseFloat(o.curCSS(H,"margin"+this,true))||0}else{L-=parseFloat(o.curCSS(H,"border"+this+"Width",true))||0}})}if(H.offsetWidth!==0){I()}else{o.swap(H,G,I)}return Math.max(0,Math.round(L))}return o.curCSS(H,F,J)},curCSS:function(I,F,G){var L,E=I.style;if(F=="opacity"&&!o.support.opacity){L=o.attr(E,"opacity");return L==""?"1":L}if(F.match(/float/i)){F=w}if(!G&&E&&E[F]){L=E[F]}else{if(q.getComputedStyle){if(F.match(/float/i)){F="float"}F=F.replace(/([A-Z])/g,"-$1").toLowerCase();var M=q.getComputedStyle(I,null);if(M){L=M.getPropertyValue(F)}if(F=="opacity"&&L==""){L="1"}}else{if(I.currentStyle){var J=F.replace(/\-(\w)/g,function(N,O){return O.toUpperCase()});L=I.currentStyle[F]||I.currentStyle[J];if(!/^\d+(px)?$/i.test(L)&&/^\d/.test(L)){var H=E.left,K=I.runtimeStyle.left;I.runtimeStyle.left=I.currentStyle.left;E.left=L||0;L=E.pixelLeft+"px";E.left=H;I.runtimeStyle.left=K}}}}return L},clean:function(F,K,I){K=K||document;if(typeof K.createElement==="undefined"){K=K.ownerDocument||K[0]&&K[0].ownerDocument||document}if(!I&&F.length===1&&typeof F[0]==="string"){var H=/^<(\w+)\s*\/?>$/.exec(F[0]);if(H){return[K.createElement(H[1])]}}var G=[],E=[],L=K.createElement("div");o.each(F,function(P,S){if(typeof S==="number"){S+=""}if(!S){return}if(typeof S==="string"){S=S.replace(/(<(\w+)[^>]*?)\/>/g,function(U,V,T){return T.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?U:V+">"});var O=S.replace(/^\s+/,"").substring(0,10).toLowerCase();var Q=!O.indexOf("",""]||!O.indexOf("",""]||O.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"","
"]||!O.indexOf("",""]||(!O.indexOf("",""]||!O.indexOf("",""]||!o.support.htmlSerialize&&[1,"div
","
"]||[0,"",""];L.innerHTML=Q[1]+S+Q[2];while(Q[0]--){L=L.lastChild}if(!o.support.tbody){var R=/"&&!R?L.childNodes:[];for(var M=N.length-1;M>=0;--M){if(o.nodeName(N[M],"tbody")&&!N[M].childNodes.length){N[M].parentNode.removeChild(N[M])}}}if(!o.support.leadingWhitespace&&/^\s/.test(S)){L.insertBefore(K.createTextNode(S.match(/^\s*/)[0]),L.firstChild)}S=o.makeArray(L.childNodes)}if(S.nodeType){G.push(S)}else{G=o.merge(G,S)}});if(I){for(var J=0;G[J];J++){if(o.nodeName(G[J],"script")&&(!G[J].type||G[J].type.toLowerCase()==="text/javascript")){E.push(G[J].parentNode?G[J].parentNode.removeChild(G[J]):G[J])}else{if(G[J].nodeType===1){G.splice.apply(G,[J+1,0].concat(o.makeArray(G[J].getElementsByTagName("script"))))}I.appendChild(G[J])}}return E}return G},attr:function(J,G,K){if(!J||J.nodeType==3||J.nodeType==8){return g}var H=!o.isXMLDoc(J),L=K!==g;G=H&&o.props[G]||G;if(J.tagName){var F=/href|src|style/.test(G);if(G=="selected"&&J.parentNode){J.parentNode.selectedIndex}if(G in J&&H&&!F){if(L){if(G=="type"&&o.nodeName(J,"input")&&J.parentNode){throw"type property can't be changed"}J[G]=K}if(o.nodeName(J,"form")&&J.getAttributeNode(G)){return J.getAttributeNode(G).nodeValue}if(G=="tabIndex"){var I=J.getAttributeNode("tabIndex");return I&&I.specified?I.value:J.nodeName.match(/(button|input|object|select|textarea)/i)?0:J.nodeName.match(/^(a|area)$/i)&&J.href?0:g}return J[G]}if(!o.support.style&&H&&G=="style"){return o.attr(J.style,"cssText",K)}if(L){J.setAttribute(G,""+K)}var E=!o.support.hrefNormalized&&H&&F?J.getAttribute(G,2):J.getAttribute(G);return E===null?g:E}if(!o.support.opacity&&G=="opacity"){if(L){J.zoom=1;J.filter=(J.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(K)+""=="NaN"?"":"alpha(opacity="+K*100+")")}return J.filter&&J.filter.indexOf("opacity=")>=0?(parseFloat(J.filter.match(/opacity=([^)]*)/)[1])/100)+"":""}G=G.replace(/-([a-z])/ig,function(M,N){return N.toUpperCase()});if(L){J[G]=K}return J[G]},trim:function(E){return(E||"").replace(/^\s+|\s+$/g,"")},makeArray:function(G){var E=[];if(G!=null){var F=G.length;if(F==null||typeof G==="string"||o.isFunction(G)||G.setInterval){E[0]=G}else{while(F){E[--F]=G[F]}}}return E},inArray:function(G,H){for(var E=0,F=H.length;E0?this.clone(true):this).get();o.fn[F].apply(o(L[K]),I);J=J.concat(I)}return this.pushStack(J,E,G)}});o.each({removeAttr:function(E){o.attr(this,E,"");if(this.nodeType==1){this.removeAttribute(E)}},addClass:function(E){o.className.add(this,E)},removeClass:function(E){o.className.remove(this,E)},toggleClass:function(F,E){if(typeof E!=="boolean"){E=!o.className.has(this,F)}o.className[E?"add":"remove"](this,F)},remove:function(E){if(!E||o.filter(E,[this]).length){o("*",this).add([this]).each(function(){o.event.remove(this);o.removeData(this)});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:function(){o(this).children().remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(E,F){o.fn[E]=function(){return this.each(F,arguments)}});function j(E,F){return E[0]&&parseInt(o.curCSS(E[0],F,true),10)||0}var h="jQuery"+e(),v=0,A={};o.extend({cache:{},data:function(F,E,G){F=F==l?A:F;var H=F[h];if(!H){H=F[h]=++v}if(E&&!o.cache[H]){o.cache[H]={}}if(G!==g){o.cache[H][E]=G}return E?o.cache[H][E]:H},removeData:function(F,E){F=F==l?A:F;var H=F[h];if(E){if(o.cache[H]){delete o.cache[H][E];E="";for(E in o.cache[H]){break}if(!E){o.removeData(F)}}}else{try{delete F[h]}catch(G){if(F.removeAttribute){F.removeAttribute(h)}}delete o.cache[H]}},queue:function(F,E,H){if(F){E=(E||"fx")+"queue";var G=o.data(F,E);if(!G||o.isArray(H)){G=o.data(F,E,o.makeArray(H))}else{if(H){G.push(H)}}}return G},dequeue:function(H,G){var E=o.queue(H,G),F=E.shift();if(!G||G==="fx"){F=E[0]}if(F!==g){F.call(H)}}});o.fn.extend({data:function(E,G){var H=E.split(".");H[1]=H[1]?"."+H[1]:"";if(G===g){var F=this.triggerHandler("getData"+H[1]+"!",[H[0]]);if(F===g&&this.length){F=o.data(this[0],E)}return F===g&&H[1]?this.data(H[0]):F}else{return this.trigger("setData"+H[1]+"!",[H[0],G]).each(function(){o.data(this,E,G)})}},removeData:function(E){return this.each(function(){o.removeData(this,E)})},queue:function(E,F){if(typeof E!=="string"){F=E;E="fx"}if(F===g){return o.queue(this[0],E)}return this.each(function(){var G=o.queue(this,E,F);if(E=="fx"&&G.length==1){G[0].call(this)}})},dequeue:function(E){return this.each(function(){o.dequeue(this,E)})}}); /* * Sizzle CSS Selector Engine - v0.9.3 * Copyright 2009, The Dojo Foundation * Released under the MIT, BSD, and GPL Licenses. * More information: //sizzlejs.com/ */ (function(){var R=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,L=0,H=Object.prototype.toString;var F=function(Y,U,ab,ac){ab=ab||[];U=U||document;if(U.nodeType!==1&&U.nodeType!==9){return[]}if(!Y||typeof Y!=="string"){return ab}var Z=[],W,af,ai,T,ad,V,X=true;R.lastIndex=0;while((W=R.exec(Y))!==null){Z.push(W[1]);if(W[2]){V=RegExp.rightContext;break}}if(Z.length>1&&M.exec(Y)){if(Z.length===2&&I.relative[Z[0]]){af=J(Z[0]+Z[1],U)}else{af=I.relative[Z[0]]?[U]:F(Z.shift(),U);while(Z.length){Y=Z.shift();if(I.relative[Y]){Y+=Z.shift()}af=J(Y,af)}}}else{var ae=ac?{expr:Z.pop(),set:E(ac)}:F.find(Z.pop(),Z.length===1&&U.parentNode?U.parentNode:U,Q(U));af=F.filter(ae.expr,ae.set);if(Z.length>0){ai=E(af)}else{X=false}while(Z.length){var ah=Z.pop(),ag=ah;if(!I.relative[ah]){ah=""}else{ag=Z.pop()}if(ag==null){ag=U}I.relative[ah](ai,ag,Q(U))}}if(!ai){ai=af}if(!ai){throw"Syntax error, unrecognized expression: "+(ah||Y)}if(H.call(ai)==="[object Array]"){if(!X){ab.push.apply(ab,ai)}else{if(U.nodeType===1){for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&(ai[aa]===true||ai[aa].nodeType===1&&K(U,ai[aa]))){ab.push(af[aa])}}}else{for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&ai[aa].nodeType===1){ab.push(af[aa])}}}}}else{E(ai,ab)}if(V){F(V,U,ab,ac);if(G){hasDuplicate=false;ab.sort(G);if(hasDuplicate){for(var aa=1;aa":function(Z,U,aa){var X=typeof U==="string";if(X&&!/\W/.test(U)){U=aa?U:U.toUpperCase();for(var V=0,T=Z.length;V=0)){if(!V){T.push(Y)}}else{if(V){U[X]=false}}}}return false},ID:function(T){return T[1].replace(/\\/g,"")},TAG:function(U,T){for(var V=0;T[V]===false;V++){}return T[V]&&Q(T[V])?U[1]:U[1].toUpperCase()},CHILD:function(T){if(T[1]=="nth"){var U=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(T[2]=="even"&&"2n"||T[2]=="odd"&&"2n+1"||!/\D/.test(T[2])&&"0n+"+T[2]||T[2]);T[2]=(U[1]+(U[2]||1))-0;T[3]=U[3]-0}T[0]=L++;return T},ATTR:function(X,U,V,T,Y,Z){var W=X[1].replace(/\\/g,"");if(!Z&&I.attrMap[W]){X[1]=I.attrMap[W]}if(X[2]==="~="){X[4]=" "+X[4]+" "}return X},PSEUDO:function(X,U,V,T,Y){if(X[1]==="not"){if(X[3].match(R).length>1||/^\w/.test(X[3])){X[3]=F(X[3],null,null,U)}else{var W=F.filter(X[3],U,V,true^Y);if(!V){T.push.apply(T,W)}return false}}else{if(I.match.POS.test(X[0])||I.match.CHILD.test(X[0])){return true}}return X},POS:function(T){T.unshift(true);return T}},filters:{enabled:function(T){return T.disabled===false&&T.type!=="hidden"},disabled:function(T){return T.disabled===true},checked:function(T){return T.checked===true},selected:function(T){T.parentNode.selectedIndex;return T.selected===true},parent:function(T){return !!T.firstChild},empty:function(T){return !T.firstChild},has:function(V,U,T){return !!F(T[3],V).length},header:function(T){return/h\d/i.test(T.nodeName)},text:function(T){return"text"===T.type},radio:function(T){return"radio"===T.type},checkbox:function(T){return"checkbox"===T.type},file:function(T){return"file"===T.type},password:function(T){return"password"===T.type},submit:function(T){return"submit"===T.type},image:function(T){return"image"===T.type},reset:function(T){return"reset"===T.type},button:function(T){return"button"===T.type||T.nodeName.toUpperCase()==="BUTTON"},input:function(T){return/input|select|textarea|button/i.test(T.nodeName)}},setFilters:{first:function(U,T){return T===0},last:function(V,U,T,W){return U===W.length-1},even:function(U,T){return T%2===0},odd:function(U,T){return T%2===1},lt:function(V,U,T){return UT[3]-0},nth:function(V,U,T){return T[3]-0==U},eq:function(V,U,T){return T[3]-0==U}},filter:{PSEUDO:function(Z,V,W,aa){var U=V[1],X=I.filters[U];if(X){return X(Z,W,V,aa)}else{if(U==="contains"){return(Z.textContent||Z.innerText||"").indexOf(V[3])>=0}else{if(U==="not"){var Y=V[3];for(var W=0,T=Y.length;W=0)}}},ID:function(U,T){return U.nodeType===1&&U.getAttribute("id")===T},TAG:function(U,T){return(T==="*"&&U.nodeType===1)||U.nodeName===T},CLASS:function(U,T){return(" "+(U.className||U.getAttribute("class"))+" ").indexOf(T)>-1},ATTR:function(Y,W){var V=W[1],T=I.attrHandle[V]?I.attrHandle[V](Y):Y[V]!=null?Y[V]:Y.getAttribute(V),Z=T+"",X=W[2],U=W[4];return T==null?X==="!=":X==="="?Z===U:X==="*="?Z.indexOf(U)>=0:X==="~="?(" "+Z+" ").indexOf(U)>=0:!U?Z&&T!==false:X==="!="?Z!=U:X==="^="?Z.indexOf(U)===0:X==="$="?Z.substr(Z.length-U.length)===U:X==="|="?Z===U||Z.substr(0,U.length+1)===U+"-":false},POS:function(X,U,V,Y){var T=U[2],W=I.setFilters[T];if(W){return W(X,V,U,Y)}}}};var M=I.match.POS;for(var O in I.match){I.match[O]=RegExp(I.match[O].source+/(?![^\[]*\])(?![^\(]*\))/.source)}var E=function(U,T){U=Array.prototype.slice.call(U);if(T){T.push.apply(T,U);return T}return U};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(N){E=function(X,W){var U=W||[];if(H.call(X)==="[object Array]"){Array.prototype.push.apply(U,X)}else{if(typeof X.length==="number"){for(var V=0,T=X.length;V";var T=document.documentElement;T.insertBefore(U,T.firstChild);if(!!document.getElementById(V)){I.find.ID=function(X,Y,Z){if(typeof Y.getElementById!=="undefined"&&!Z){var W=Y.getElementById(X[1]);return W?W.id===X[1]||typeof W.getAttributeNode!=="undefined"&&W.getAttributeNode("id").nodeValue===X[1]?[W]:g:[]}};I.filter.ID=function(Y,W){var X=typeof Y.getAttributeNode!=="undefined"&&Y.getAttributeNode("id");return Y.nodeType===1&&X&&X.nodeValue===W}}T.removeChild(U)})();(function(){var T=document.createElement("div");T.appendChild(document.createComment(""));if(T.getElementsByTagName("*").length>0){I.find.TAG=function(U,Y){var X=Y.getElementsByTagName(U[1]);if(U[1]==="*"){var W=[];for(var V=0;X[V];V++){if(X[V].nodeType===1){W.push(X[V])}}X=W}return X}}T.innerHTML="";if(T.firstChild&&typeof T.firstChild.getAttribute!=="undefined"&&T.firstChild.getAttribute("href")!=="#"){I.attrHandle.href=function(U){return U.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var T=F,U=document.createElement("div");U.innerHTML="

";if(U.querySelectorAll&&U.querySelectorAll(".TEST").length===0){return}F=function(Y,X,V,W){X=X||document;if(!W&&X.nodeType===9&&!Q(X)){try{return E(X.querySelectorAll(Y),V)}catch(Z){}}return T(Y,X,V,W)};F.find=T.find;F.filter=T.filter;F.selectors=T.selectors;F.matches=T.matches})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var T=document.createElement("div");T.innerHTML="
";if(T.getElementsByClassName("e").length===0){return}T.lastChild.className="e";if(T.getElementsByClassName("e").length===1){return}I.order.splice(1,0,"CLASS");I.find.CLASS=function(U,V,W){if(typeof V.getElementsByClassName!=="undefined"&&!W){return V.getElementsByClassName(U[1])}}})()}function P(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W0){X=T;break}}}T=T[U]}ad[W]=X}}}var K=document.compareDocumentPosition?function(U,T){return U.compareDocumentPosition(T)&16}:function(U,T){return U!==T&&(U.contains?U.contains(T):true)};var Q=function(T){return T.nodeType===9&&T.documentElement.nodeName!=="HTML"||!!T.ownerDocument&&Q(T.ownerDocument)};var J=function(T,aa){var W=[],X="",Y,V=aa.nodeType?[aa]:aa;while((Y=I.match.PSEUDO.exec(T))){X+=Y[0];T=T.replace(I.match.PSEUDO,"")}T=I.relative[T]?T+"*":T;for(var Z=0,U=V.length;Z0||T.offsetHeight>0};F.selectors.filters.animated=function(T){return o.grep(o.timers,function(U){return T===U.elem}).length};o.multiFilter=function(V,T,U){if(U){V=":not("+V+")"}return F.matches(V,T)};o.dir=function(V,U){var T=[],W=V[U];while(W&&W!=document){if(W.nodeType==1){T.push(W)}W=W[U]}return T};o.nth=function(X,T,V,W){T=T||1;var U=0;for(;X;X=X[V]){if(X.nodeType==1&&++U==T){break}}return X};o.sibling=function(V,U){var T=[];for(;V;V=V.nextSibling){if(V.nodeType==1&&V!=U){T.push(V)}}return T};return;l.Sizzle=F})();o.event={add:function(I,F,H,K){if(I.nodeType==3||I.nodeType==8){return}if(I.setInterval&&I!=l){I=l}if(!H.guid){H.guid=this.guid++}if(K!==g){var G=H;H=this.proxy(G);H.data=K}var E=o.data(I,"events")||o.data(I,"events",{}),J=o.data(I,"handle")||o.data(I,"handle",function(){return typeof o!=="undefined"&&!o.event.triggered?o.event.handle.apply(arguments.callee.elem,arguments):g});J.elem=I;o.each(F.split(/\s+/),function(M,N){var O=N.split(".");N=O.shift();H.type=O.slice().sort().join(".");var L=E[N];if(o.event.specialAll[N]){o.event.specialAll[N].setup.call(I,K,O)}if(!L){L=E[N]={};if(!o.event.special[N]||o.event.special[N].setup.call(I,K,O)===false){if(I.addEventListener){I.addEventListener(N,J,false)}else{if(I.attachEvent){I.attachEvent("on"+N,J)}}}}L[H.guid]=H;o.event.global[N]=true});I=null},guid:1,global:{},remove:function(K,H,J){if(K.nodeType==3||K.nodeType==8){return}var G=o.data(K,"events"),F,E;if(G){if(H===g||(typeof H==="string"&&H.charAt(0)==".")){for(var I in G){this.remove(K,I+(H||""))}}else{if(H.type){J=H.handler;H=H.type}o.each(H.split(/\s+/),function(M,O){var Q=O.split(".");O=Q.shift();var N=RegExp("(^|\\.)"+Q.slice().sort().join(".*\\.")+"(\\.|$)");if(G[O]){if(J){delete G[O][J.guid]}else{for(var P in G[O]){if(N.test(G[O][P].type)){delete G[O][P]}}}if(o.event.specialAll[O]){o.event.specialAll[O].teardown.call(K,Q)}for(F in G[O]){break}if(!F){if(!o.event.special[O]||o.event.special[O].teardown.call(K,Q)===false){if(K.removeEventListener){K.removeEventListener(O,o.data(K,"handle"),false)}else{if(K.detachEvent){K.detachEvent("on"+O,o.data(K,"handle"))}}}F=null;delete G[O]}}})}for(F in G){break}if(!F){var L=o.data(K,"handle");if(L){L.elem=null}o.removeData(K,"events");o.removeData(K,"handle")}}},trigger:function(I,K,H,E){var G=I.type||I;if(!E){I=typeof I==="object"?I[h]?I:o.extend(o.Event(G),I):o.Event(G);if(G.indexOf("!")>=0){I.type=G=G.slice(0,-1);I.exclusive=true}if(!H){I.stopPropagation();if(this.global[G]){o.each(o.cache,function(){if(this.events&&this.events[G]){o.event.trigger(I,K,this.handle.elem)}})}}if(!H||H.nodeType==3||H.nodeType==8){return g}I.result=g;I.target=H;K=o.makeArray(K);K.unshift(I)}I.currentTarget=H;var J=o.data(H,"handle");if(J){J.apply(H,K)}if((!H[G]||(o.nodeName(H,"a")&&G=="click"))&&H["on"+G]&&H["on"+G].apply(H,K)===false){I.result=false}if(!E&&H[G]&&!I.isDefaultPrevented()&&!(o.nodeName(H,"a")&&G=="click")){this.triggered=true;try{H[G]()}catch(L){}}this.triggered=false;if(!I.isPropagationStopped()){var F=H.parentNode||H.ownerDocument;if(F){o.event.trigger(I,K,F,true)}}},handle:function(K){var J,E;K=arguments[0]=o.event.fix(K||l.event);K.currentTarget=this;var L=K.type.split(".");K.type=L.shift();J=!L.length&&!K.exclusive;var I=RegExp("(^|\\.)"+L.slice().sort().join(".*\\.")+"(\\.|$)");E=(o.data(this,"events")||{})[K.type];for(var G in E){var H=E[G];if(J||I.test(H.type)){K.handler=H;K.data=H.data;var F=H.apply(this,arguments);if(F!==g){K.result=F;if(F===false){K.preventDefault();K.stopPropagation()}}if(K.isImmediatePropagationStopped()){break}}}},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 toElement view wheelDelta which".split(" "),fix:function(H){if(H[h]){return H}var F=H;H=o.Event(F);for(var G=this.props.length,J;G;){J=this.props[--G];H[J]=F[J]}if(!H.target){H.target=H.srcElement||document}if(H.target.nodeType==3){H.target=H.target.parentNode}if(!H.relatedTarget&&H.fromElement){H.relatedTarget=H.fromElement==H.target?H.toElement:H.fromElement}if(H.pageX==null&&H.clientX!=null){var I=document.documentElement,E=document.body;H.pageX=H.clientX+(I&&I.scrollLeft||E&&E.scrollLeft||0)-(I.clientLeft||0);H.pageY=H.clientY+(I&&I.scrollTop||E&&E.scrollTop||0)-(I.clientTop||0)}if(!H.which&&((H.charCode||H.charCode===0)?H.charCode:H.keyCode)){H.which=H.charCode||H.keyCode}if(!H.metaKey&&H.ctrlKey){H.metaKey=H.ctrlKey}if(!H.which&&H.button){H.which=(H.button&1?1:(H.button&2?3:(H.button&4?2:0)))}return H},proxy:function(F,E){E=E||function(){return F.apply(this,arguments)};E.guid=F.guid=F.guid||E.guid||this.guid++;return E},special:{ready:{setup:B,teardown:function(){}}},specialAll:{live:{setup:function(E,F){o.event.add(this,F[0],c)},teardown:function(G){if(G.length){var E=0,F=RegExp("(^|\\.)"+G[0]+"(\\.|$)");o.each((o.data(this,"events").live||{}),function(){if(F.test(this.type)){E++}});if(E<1){o.event.remove(this,G[0],c)}}}}}};o.Event=function(E){if(!this.preventDefault){return new o.Event(E)}if(E&&E.type){this.originalEvent=E;this.type=E.type}else{this.type=E}this.timeStamp=e();this[h]=true};function k(){return false}function u(){return true}o.Event.prototype={preventDefault:function(){this.isDefaultPrevented=u;var E=this.originalEvent;if(!E){return}if(E.preventDefault){E.preventDefault()}E.returnValue=false},stopPropagation:function(){this.isPropagationStopped=u;var E=this.originalEvent;if(!E){return}if(E.stopPropagation){E.stopPropagation()}E.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var a=function(F){var E=F.relatedTarget;while(E&&E!=this){try{E=E.parentNode}catch(G){E=this}}if(E!=this){F.type=F.data;o.event.handle.apply(this,arguments)}};o.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(F,E){o.event.special[E]={setup:function(){o.event.add(this,F,a,E)},teardown:function(){o.event.remove(this,F,a)}}});o.fn.extend({bind:function(F,G,E){return F=="unload"?this.one(F,G,E):this.each(function(){o.event.add(this,F,E||G,E&&G)})},one:function(G,H,F){var E=o.event.proxy(F||H,function(I){o(this).unbind(I,E);return(F||H).apply(this,arguments)});return this.each(function(){o.event.add(this,G,E,F&&H)})},unbind:function(F,E){return this.each(function(){o.event.remove(this,F,E)})},trigger:function(E,F){return this.each(function(){o.event.trigger(E,F,this)})},triggerHandler:function(E,G){if(this[0]){var F=o.Event(E);F.preventDefault();F.stopPropagation();o.event.trigger(F,G,this[0]);return F.result}},toggle:function(G){var E=arguments,F=1;while(F=0){var E=G.slice(I,G.length);G=G.slice(0,I)}var H="GET";if(J){if(o.isFunction(J)){K=J;J=null}else{if(typeof J==="object"){J=o.param(J);H="POST"}}}var F=this;o.ajax({url:G,type:H,dataType:"html",data:J,complete:function(M,L){if(L=="success"||L=="notmodified"){F.html(E?o("
").append(M.responseText.replace(//g,"")).find(E):M.responseText)}if(K){F.each(K,[M.responseText,L,M])}}});return this},serialize:function(){return o.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?o.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password|search/i.test(this.type))}).map(function(E,F){var G=o(this).val();return G==null?null:o.isArray(G)?o.map(G,function(I,H){return{name:F.name,value:I}}):{name:F.name,value:G}}).get()}});o.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(E,F){o.fn[F]=function(G){return this.bind(F,G)}});var r=e();o.extend({get:function(E,G,H,F){if(o.isFunction(G)){H=G;G=null}return o.ajax({type:"GET",url:E,data:G,success:H,dataType:F})},getScript:function(E,F){return o.get(E,null,F,"script")},getJSON:function(E,F,G){return o.get(E,F,G,"json")},post:function(E,G,H,F){if(o.isFunction(G)){H=G;G={}}return o.ajax({type:"POST",url:E,data:G,success:H,dataType:F})},ajaxSetup:function(E){o.extend(o.ajaxSettings,E)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return l.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest()},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(M){M=o.extend(true,M,o.extend(true,{},o.ajaxSettings,M));var W,F=/=\?(&|$)/g,R,V,G=M.type.toUpperCase();if(M.data&&M.processData&&typeof M.data!=="string"){M.data=o.param(M.data)}if(M.dataType=="jsonp"){if(G=="GET"){if(!M.url.match(F)){M.url+=(M.url.match(/\?/)?"&":"?")+(M.jsonp||"callback")+"=?"}}else{if(!M.data||!M.data.match(F)){M.data=(M.data?M.data+"&":"")+(M.jsonp||"callback")+"=?"}}M.dataType="json"}if(M.dataType=="json"&&(M.data&&M.data.match(F)||M.url.match(F))){W="jsonp"+r++;if(M.data){M.data=(M.data+"").replace(F,"="+W+"$1")}M.url=M.url.replace(F,"="+W+"$1");M.dataType="script";l[W]=function(X){V=X;I();L();l[W]=g;try{delete l[W]}catch(Y){}if(H){H.removeChild(T)}}}if(M.dataType=="script"&&M.cache==null){M.cache=false}if(M.cache===false&&G=="GET"){var E=e();var U=M.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+E+"$2");M.url=U+((U==M.url)?(M.url.match(/\?/)?"&":"?")+"_="+E:"")}if(M.data&&G=="GET"){M.url+=(M.url.match(/\?/)?"&":"?")+M.data;M.data=null}if(M.global&&!o.active++){o.event.trigger("ajaxStart")}var Q=/^(\w+:)?\/\/([^\/?#]+)/.exec(M.url);if(M.dataType=="script"&&G=="GET"&&Q&&(Q[1]&&Q[1]!=location.protocol||Q[2]!=location.host)){var H=document.getElementsByTagName("head")[0];var T=document.createElement("script");T.src=M.url;if(M.scriptCharset){T.charset=M.scriptCharset}if(!W){var O=false;T.onload=T.onreadystatechange=function(){if(!O&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){O=true;I();L();T.onload=T.onreadystatechange=null;H.removeChild(T)}}}H.appendChild(T);return g}var K=false;var J=M.xhr();if(M.username){J.open(G,M.url,M.async,M.username,M.password)}else{J.open(G,M.url,M.async)}try{if(M.data){J.setRequestHeader("Content-Type",M.contentType)}if(M.ifModified){J.setRequestHeader("If-Modified-Since",o.lastModified[M.url]||"Thu, 01 Jan 1970 00:00:00 GMT")}J.setRequestHeader("X-Requested-With","XMLHttpRequest");J.setRequestHeader("Accept",M.dataType&&M.accepts[M.dataType]?M.accepts[M.dataType]+", */*":M.accepts._default)}catch(S){}if(M.beforeSend&&M.beforeSend(J,M)===false){if(M.global&&!--o.active){o.event.trigger("ajaxStop")}J.abort();return false}if(M.global){o.event.trigger("ajaxSend",[J,M])}var N=function(X){if(J.readyState==0){if(P){clearInterval(P);P=null;if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}}else{if(!K&&J&&(J.readyState==4||X=="timeout")){K=true;if(P){clearInterval(P);P=null}R=X=="timeout"?"timeout":!o.httpSuccess(J)?"error":M.ifModified&&o.httpNotModified(J,M.url)?"notmodified":"success";if(R=="success"){try{V=o.httpData(J,M.dataType,M)}catch(Z){R="parsererror"}}if(R=="success"){var Y;try{Y=J.getResponseHeader("Last-Modified")}catch(Z){}if(M.ifModified&&Y){o.lastModified[M.url]=Y}if(!W){I()}}else{o.handleError(M,J,R)}L();if(X){J.abort()}if(M.async){J=null}}}};if(M.async){var P=setInterval(N,13);if(M.timeout>0){setTimeout(function(){if(J&&!K){N("timeout")}},M.timeout)}}try{J.send(M.data)}catch(S){o.handleError(M,J,null,S)}if(!M.async){N()}function I(){if(M.success){M.success(V,R)}if(M.global){o.event.trigger("ajaxSuccess",[J,M])}}function L(){if(M.complete){M.complete(J,R)}if(M.global){o.event.trigger("ajaxComplete",[J,M])}if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}return J},handleError:function(F,H,E,G){if(F.error){F.error(H,E,G)}if(F.global){o.event.trigger("ajaxError",[H,F,G])}},active:0,httpSuccess:function(F){try{return !F.status&&location.protocol=="file:"||(F.status>=200&&F.status<300)||F.status==304||F.status==1223}catch(E){}return false},httpNotModified:function(G,E){try{var H=G.getResponseHeader("Last-Modified");return G.status==304||H==o.lastModified[E]}catch(F){}return false},httpData:function(J,H,G){var F=J.getResponseHeader("content-type"),E=H=="xml"||!H&&F&&F.indexOf("xml")>=0,I=E?J.responseXML:J.responseText;if(E&&I.documentElement.tagName=="parsererror"){throw"parsererror"}if(G&&G.dataFilter){I=G.dataFilter(I,H)}if(typeof I==="string"){if(H=="script"){o.globalEval(I)}if(H=="json"){I=l["eval"]("("+I+")")}}return I},param:function(E){var G=[];function H(I,J){G[G.length]=encodeURIComponent(I)+"="+encodeURIComponent(J)}if(o.isArray(E)||E.jquery){o.each(E,function(){H(this.name,this.value)})}else{for(var F in E){if(o.isArray(E[F])){o.each(E[F],function(){H(F,this)})}else{H(F,o.isFunction(E[F])?E[F]():E[F])}}}return G.join("&").replace(/%20/g,"+")}});var m={},n,d=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];function t(F,E){var G={};o.each(d.concat.apply([],d.slice(0,E)),function(){G[this]=F});return G}o.fn.extend({show:function(J,L){if(J){return this.animate(t("show",3),J,L)}else{for(var H=0,F=this.length;H").appendTo("body");K=I.css("display");if(K==="none"){K="block"}I.remove();m[G]=K}o.data(this[H],"olddisplay",K)}}for(var H=0,F=this.length;H=0;H--){if(G[H].elem==this){if(E){G[H](true)}G.splice(H,1)}}});if(!E){this.dequeue()}return this}});o.each({slideDown:t("show",1),slideUp:t("hide",1),slideToggle:t("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(E,F){o.fn[E]=function(G,H){return this.animate(F,G,H)}});o.extend({speed:function(G,H,F){var E=typeof G==="object"?G:{complete:F||!F&&H||o.isFunction(G)&&G,duration:G,easing:F&&H||H&&!o.isFunction(H)&&H};E.duration=o.fx.off?0:typeof E.duration==="number"?E.duration:o.fx.speeds[E.duration]||o.fx.speeds._default;E.old=E.complete;E.complete=function(){if(E.queue!==false){o(this).dequeue()}if(o.isFunction(E.old)){E.old.call(this)}};return E},easing:{linear:function(G,H,E,F){return E+F*G},swing:function(G,H,E,F){return((-Math.cos(G*Math.PI)/2)+0.5)*F+E}},timers:[],fx:function(F,E,G){this.options=E;this.elem=F;this.prop=G;if(!E.orig){E.orig={}}}});o.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(o.fx.step[this.prop]||o.fx.step._default)(this);if((this.prop=="height"||this.prop=="width")&&this.elem.style){this.elem.style.display="block"}},cur:function(F){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var E=parseFloat(o.css(this.elem,this.prop,F));return E&&E>-10000?E:parseFloat(o.curCSS(this.elem,this.prop))||0},custom:function(I,H,G){this.startTime=e();this.start=I;this.end=H;this.unit=G||this.unit||"px";this.now=this.start;this.pos=this.state=0;var E=this;function F(J){return E.step(J)}F.elem=this.elem;if(F()&&o.timers.push(F)&&!n){n=setInterval(function(){var K=o.timers;for(var J=0;J=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var E=true;for(var F in this.options.curAnim){if(this.options.curAnim[F]!==true){E=false}}if(E){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(o.css(this.elem,"display")=="none"){this.elem.style.display="block"}}if(this.options.hide){o(this.elem).hide()}if(this.options.hide||this.options.show){for(var I in this.options.curAnim){o.attr(this.elem.style,I,this.options.orig[I])}}this.options.complete.call(this.elem)}return false}else{var J=G-this.startTime;this.state=J/this.options.duration;this.pos=o.easing[this.options.easing||(o.easing.swing?"swing":"linear")](this.state,J,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};o.extend(o.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(E){o.attr(E.elem.style,"opacity",E.now)},_default:function(E){if(E.elem.style&&E.elem.style[E.prop]!=null){E.elem.style[E.prop]=E.now+E.unit}else{E.elem[E.prop]=E.now}}}});if(document.documentElement.getBoundingClientRect){o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}var G=this[0].getBoundingClientRect(),J=this[0].ownerDocument,F=J.body,E=J.documentElement,L=E.clientTop||F.clientTop||0,K=E.clientLeft||F.clientLeft||0,I=G.top+(self.pageYOffset||o.boxModel&&E.scrollTop||F.scrollTop)-L,H=G.left+(self.pageXOffset||o.boxModel&&E.scrollLeft||F.scrollLeft)-K;return{top:I,left:H}}}else{o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}o.offset.initialized||o.offset.initialize();var J=this[0],G=J.offsetParent,F=J,O=J.ownerDocument,M,H=O.documentElement,K=O.body,L=O.defaultView,E=L.getComputedStyle(J,null),N=J.offsetTop,I=J.offsetLeft;while((J=J.parentNode)&&J!==K&&J!==H){M=L.getComputedStyle(J,null);N-=J.scrollTop,I-=J.scrollLeft;if(J===G){N+=J.offsetTop,I+=J.offsetLeft;if(o.offset.doesNotAddBorder&&!(o.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(J.tagName))){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}F=G,G=J.offsetParent}if(o.offset.subtractsBorderForOverflowNotVisible&&M.overflow!=="visible"){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}E=M}if(E.position==="relative"||E.position==="static"){N+=K.offsetTop,I+=K.offsetLeft}if(E.position==="fixed"){N+=Math.max(H.scrollTop,K.scrollTop),I+=Math.max(H.scrollLeft,K.scrollLeft)}return{top:N,left:I}}}o.offset={initialize:function(){if(this.initialized){return}var L=document.body,F=document.createElement("div"),H,G,N,I,M,E,J=L.style.marginTop,K='
';M={position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"};for(E in M){F.style[E]=M[E]}F.innerHTML=K;L.insertBefore(F,L.firstChild);H=F.firstChild,G=H.firstChild,I=H.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(G.offsetTop!==5);this.doesAddBorderForTableAndCells=(I.offsetTop===5);H.style.overflow="hidden",H.style.position="relative";this.subtractsBorderForOverflowNotVisible=(G.offsetTop===-5);L.style.marginTop="1px";this.doesNotIncludeMarginInBodyOffset=(L.offsetTop===0);L.style.marginTop=J;L.removeChild(F);this.initialized=true},bodyOffset:function(E){o.offset.initialized||o.offset.initialize();var G=E.offsetTop,F=E.offsetLeft;if(o.offset.doesNotIncludeMarginInBodyOffset){G+=parseInt(o.curCSS(E,"marginTop",true),10)||0,F+=parseInt(o.curCSS(E,"marginLeft",true),10)||0}return{top:G,left:F}}};o.fn.extend({position:function(){var I=0,H=0,F;if(this[0]){var G=this.offsetParent(),J=this.offset(),E=/^body|html$/i.test(G[0].tagName)?{top:0,left:0}:G.offset();J.top-=j(this,"marginTop");J.left-=j(this,"marginLeft");E.top+=j(G,"borderTopWidth");E.left+=j(G,"borderLeftWidth");F={top:J.top-E.top,left:J.left-E.left}}return F},offsetParent:function(){var E=this[0].offsetParent||document.body;while(E&&(!/^body|html$/i.test(E.tagName)&&o.css(E,"position")=="static")){E=E.offsetParent}return o(E)}});o.each(["Left","Top"],function(F,E){var G="scroll"+E;o.fn[G]=function(H){if(!this[0]){return null}return H!==g?this.each(function(){this==l||this==document?l.scrollTo(!F?H:o(l).scrollLeft(),F?H:o(l).scrollTop()):this[G]=H}):this[0]==l||this[0]==document?self[F?"pageYOffset":"pageXOffset"]||o.boxModel&&document.documentElement[G]||document.body[G]:this[0][G]}});o.each(["Height","Width"],function(I,G){var E=I?"Left":"Top",H=I?"Right":"Bottom",F=G.toLowerCase();o.fn["inner"+G]=function(){return this[0]?o.css(this[0],F,false,"padding"):null};o.fn["outer"+G]=function(K){return this[0]?o.css(this[0],F,false,K?"margin":"border"):null};var J=G.toLowerCase();o.fn[J]=function(K){return this[0]==l?document.compatMode=="CSS1Compat"&&document.documentElement["client"+G]||document.body["client"+G]:this[0]==document?Math.max(document.documentElement["client"+G],document.body["scroll"+G],document.documentElement["scroll"+G],document.body["offset"+G],document.documentElement["offset"+G]):K===g?(this.length?o.css(this[0],J):null):this.css(J,typeof K==="string"?K:K+"px")}})})(); /* jquery.mrcookie Start */ /** * Mail.Ru cookie parser plugin * Copyright (c) 2009 Mail.Ru */ (function($) { var cookie = function(name, value, options) { if (typeof value != 'undefined') { 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(); } 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 { 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]); if (cookie.substring(0, name.length + 1) == (name + '=')) { cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); break; } } } return cookieValue; } } var PRIMARY_LIST = ['s']; $.mrcookie = function(name, field, value) { var o = {}, s = '', d = window.location.hostname, i ; if ( name && field ) { s = cookie(name) || ''; // Read s.replace( /(\w+)\=(.*?)(\||$)/g, function($0, $1, $2) { o[$1] = $2; }); // Write if ( value != undefined ) { if ( d && (d = d.match(/(?:[^\.]+\.)?([^\.]+\.\w+)$/)) ) { d = d[ $.inArray(name, PRIMARY_LIST) ? 0 : 1 ]; o[field] = value; s = []; for (i in o) if ( o.hasOwnProperty(i) ) s.push(i + '=' + o[i]); cookie( name, s.join('|'), { domain : d, expires : 365 } ); } } // Return return o[field]; } return undefined; } })(jQuery); /* jquery.mrcookie End */ /* jquery.splash-bm Start */ (function($) { $.bookmark = function(opt) { // Settings this.index = 0; this.indexes = {}; this.slot = 0; this.slots = []; this.counters = []; this.hasScroll = false; this.dir = 'none'; this.delay = 300; // Prefixes && ids & classes this.slotPrefix = '#slot_'; this.bmPrefix = '#bm_'; this.wrapperId = '#wrapperId'; this.scrollIds = ['#bmUp', '#bmDown']; this.scrollClasses = { up : ['up', 'upOff'], down : ['down', 'downOff'] }; // Callbacks this.beforeChange = function() {}; this.afterChange = function() {}; // Init for (var i in opt) if ( opt.hasOwnProperty(i) ) this[i] = opt[i]; this.init(); } $.bookmark.prototype = { delta : 16, init : function(opt) { var _t = this; this.slot = this.slots[0]; if ( this.hasScroll ) { $(this.scrollIds[0]).click(function(e) { _t.up(); e.preventDefault(); }); $(this.scrollIds[1]).click(function(e) { _t.down(); e.preventDefault(); }); this.scroll(); } var ua = navigator.userAgent.toLowerCase(); this.delta = ( ua.indexOf("opera") == -1 && ua.match(/msie (\d\.\d)/g) && parseFloat(RegExp.$1) < 8 ) ? this.delta - 1 : this.delta; var id, i; for (i = 0; i < this.slots.length; i++) { id = this.slots[i]; this.indexes[id] = i; (function(id) { $(_t.bmPrefix + id).click(function(e) { if ( id == _t.slot || !$(_t.slotPrefix + id).length ) return true; // Second click _t.change(id); e.preventDefault(); }); })(id); } }, bookmarks : function() { var id = this.slot; var index = this.indexes[this.slot]; if ( !$(this.bmPrefix + id).length ) { while( index > 0 ) { index--; id = this.slots[index]; if ( $(this.bmPrefix + id).length ) break; } } id = this.bmPrefix + id; $(id) .parents('tr:first') .find('td') .each(function() { if ( $(this).hasClass('act') || $(this).hasClass('aftact') || $(this).hasClass('pas') ) { $(this).attr( 'class', $(this).find(id).length ? 'act' : ($(this).prev('td').attr('class') == 'act' ? 'aftact' : 'pas') ); } }) ; }, scroll : function() { if ( !this.hasScroll ) return; $(this.scrollIds[0]).attr( 'class', this.scrollClasses.up[this.slot == this.slots[0] ? 1 : 0] ); $(this.scrollIds[1]).attr( 'class', this.scrollClasses.down[this.slot == this.slots[this.slots.length - 1] ? 1 : 0] ); }, change : function(id) { this.beforeChange(); // index = this.indexes[id]; if ( index != undefined ) { this.slot = id; this.index = index; this.scroll(); this.bookmarks(); for (i = 0; i < this.slots.length; i++) $(this.slotPrefix + this.slots[i]).css('display', 'none'); $(this.slotPrefix + id).css('display', ''); if ( this.counters[index] ) document.createElement("IMG").src = this.counters[index] + "?rnd=" + Math.random()*1E9; } // this.afterChange(); }, up : function() { if ( this.slot == this.slots[0] ) return false; this.dir = 'up'; $(this.wrapperId) .css({ 'overflow' : 'hidden', 'height' : ($(this.slotPrefix + this.slot).height() + this.delta) + 'px' }); var _t = this; var id = this.slots[this.index - 1]; var prev = this.slotPrefix + id; var cur = this.slotPrefix + this.slot; $(prev).css({ 'display' : '', 'marginTop' : (-1 * $(prev).height()) + 'px' }); $(prev) .animate( { 'marginTop' : 0 }, this.delay, "swing", function() { _t.change(id); $(cur).css({ 'display' : 'none' }); $(_t.wrapperId) .css({ 'overflow' : 'visible', 'height' : 'auto' }); } ); }, down : function() { if( this.slot == this.slots[this.slots.length - 1] ) return false; $(this.wrapperId) .css({ 'overflow' : 'hidden', 'height' : ($(this.slotPrefix + this.slot).height() + this.delta) + 'px' }); var _t = this; var id = this.slots[this.index + 1]; var next = this.slotPrefix + id; var cur = this.slotPrefix + this.slot; $(next).css('display', ''); $(cur) .animate( {'marginTop' : (-1 * ($(cur).height() + _t.delta)) + 'px'}, this.delay, "swing", function() { _t.change(id); $(cur).css({ 'marginTop' : 0, 'display' : 'none' }); $(_t.wrapperId) .css({ 'overflow' : 'visible', 'height' : 'auto' }); } ); } } })(jQuery); /* jquery.splash-bm End */ /* mail_splash Start */ /* ______________ дата в блоке погоды на главной морде ______________*/ function detectDate() {// 14 декабря, пятница var cur = new Date(); var monthes = ["января","февраля","марта","апреля","мая","июня","июля","августа","сентября","октября","ноября","декабря"]; var weekdays = ["", "понедельник","вторник","среда","четверг","пятница","суббота","воскресенье"]; var out = cur.getDate() + " "; out += monthes[cur.getMonth()]; // + ", "; //out += weekdays[cur.getDay()]; return out; } /* __ old code __ */ var torg_pos=1; function torg_cell(inc) { torg_pos+=inc; if(torg_pos<1) torg_pos++; if(!document.getElementById('trgcl_t'+(torg_pos+2))) torg_pos--; var tlc_on=document.getElementById('trg_left_ctrl_on'); var tlc_off=document.getElementById('trg_left_ctrl_off'); var trc_on=document.getElementById('trg_right_ctrl_on'); var trc_off=document.getElementById('trg_right_ctrl_off'); if(!document.getElementById('trgcl_t'+(torg_pos-1))) {tlc_on.className="off"; tlc_off.className="";} else {tlc_on.className=""; tlc_off.className="off";} if(!document.getElementById('trgcl_t'+(torg_pos+3))) {trc_on.className="off"; trc_off.className="";} else {trc_on.className=""; trc_off.className="off";} for(var i=1;;i++) { var o_t=document.getElementById('trgcl_t'+i); var o_m=document.getElementById('trgcl_m'+i); var o_b=document.getElementById('trgcl_b'+i); if(!o_t) break; if(i>=torg_pos && i<=torg_pos+2) {o_t.className="c"; o_m.className="c"; o_b.className="c";} else {o_t.className="c off"; o_m.className="c off"; o_b.className="c off";} } return false; } var geneva_pos=1; function geneva_cell(inc) { geneva_pos+=inc; if(geneva_pos<1) geneva_pos++; var tlc_on=document.getElementById('geneva_left_ctrl_on'); var tlc_off=document.getElementById('geneva_left_ctrl_off'); var trc_on=document.getElementById('geneva_right_ctrl_on'); var trc_off=document.getElementById('geneva_right_ctrl_off'); if(!document.getElementById('geneva_cl_m'+(geneva_pos-1))) {tlc_on.className="off"; tlc_off.className="";} else {tlc_on.className=""; tlc_off.className="off";} if(!document.getElementById('geneva_cl_m'+(geneva_pos+3))) {trc_on.className="off"; trc_off.className="";} else {trc_on.className=""; trc_off.className="off";} for(var i=1;;i++) { var o_m=document.getElementById('geneva_cl_m'+i); var o_b=document.getElementById('geneva_cl_b'+i); if(!o_m) break; if(i>=geneva_pos && i<=geneva_pos+2) { o_m.className="c"; o_b.className="c"; } else { o_m.className="c off"; o_b.className="c off"; } } return false; } var geneva_pos = 1; function geneva_cell_2(inc) { geneva_pos += inc; if (geneva_pos < 1) geneva_pos++; var tlc_on = document.getElementById('geneva_left_ctrl_on'); var tlc_off = document.getElementById('geneva_left_ctrl_off'); var trc_on = document.getElementById('geneva_right_ctrl_on'); var trc_off = document.getElementById('geneva_right_ctrl_off'); if (!document.getElementById('geneva_cl_m'+(geneva_pos-1))) { tlc_on.className = "off"; tlc_off.className = ""; } else { tlc_on.className = ""; tlc_off.className = "off"; } if (!document.getElementById('geneva_cl_m'+(geneva_pos+1))) { trc_on.className = "off"; trc_off.className = ""; } else { trc_on.className = ""; trc_off.className = "off"; } for (var i=1; ; i++) { var o_m = document.getElementById('geneva_cl_m'+i); if (!o_m) break; if (i == geneva_pos) o_m.className = ""; else o_m.className = "off"; } return false; } /* __ old code __ */ /* ______________ код для линейки превью на главной морде v2 ______________*/ // Сокращаем запись document.getElementById function gebi(obj) { return document.getElementById(obj); } var PMoveObjects_photo_new = {}; function getPMove_photo_new(id) { if (typeof(PMoveObjects_photo_new[id]) == "undefined") { PMoveObjects_photo_new[id] = new PMove_photo_new(id); } return PMoveObjects_photo_new[id]; } function PMove_photo_new(id) { this.id = id; this.previewWidth = false; this.previewHeight = false; this.containerWidth = 0; this.containerWidthMin = 300; this.previewCount = 0; this.marginLeft = false; this.scriptURL = ""; this.xmlEnable = false; this.initFlag = 0; this.nameItemEnable = false; this._container = "cont_"; this._leftAngle = "left_"; this._rightAngle = "right_"; this.defaultArray = []; this.casheImages = []; this.curPos = 0; this.isRight = 0; this.isLeft = 0; this.container = null; this.leftAngle = null; this.rightAngle = null; // Scroll this.initTimeout = 200; this.stepTimeout = 200; this.stepDirection = ""; this.init = function(w, h, m, e, u, d) { if ( typeof w == "undefined" || typeof h == "undefined" || typeof m == "undefined" || typeof u == "undefined" || typeof d == "undefined" ) return; this.previewWidth = w; this.previewHeight = h; this.marginLeft = m; this.scriptURL = u; this.defaultArray = d; this.container = this.gebi(this._container + this.id); if (this.container == null) { // Error. Do nothing return; } this.leftAngle = this.gebi(this._leftAngle + this.id); if (this.leftAngle == null) { // Error. Do nothing return; } this.rightAngle = this.gebi(this._rightAngle + this.id); if (this.rightAngle == null) { // Error. Do nothing return; } if (this.defaultArray.length >= 1) { // Mix preview this.mixPreview(); // Draw preview & angles this.drawPreview(); this.drawAngles(); // Add rezize-event handler var id = this.id; this.addHandler( window, "resize", function() { try {getPMove_photo_new(id).drawPreview();} catch(e) {} } ); this.addHandler( document, "mouseup", function() {getPMove_photo_new(id).mouseUpHandler()} ); this.addHandler(this.leftAngle, "mousedown", function(evt) { evt = evt || window.event; if (evt.preventDefault) evt.preventDefault(); }); this.addHandler(this.rightAngle, "mousedown", function(evt) { evt = evt || window.event; if (evt.preventDefault) evt.preventDefault(); }); this.addHandler(this.leftAngle, "dragstart", function() {return false;}); this.addHandler(this.rightAngle, "dragstart", function() {return false;}); this.initFlag = 1; } else { // Error. Do nothing return; } } } var stepTimer = {}; PMove_photo_new.prototype = { // ----------- Default ----------- gebi : function(id) { return document.getElementById(id); }, newImg : function(path) { var image = new Image(); image.src = path; return image; }, addHandler : function(object, event, handler, useCapture) { if (object.addEventListener) { object.addEventListener(event, handler, useCapture ? useCapture : false); } else if (object.attachEvent) { object.attachEvent('on' + event, handler); } }, screenSize : function() { var w, h; w = (window.innerWidth ? window.innerWidth : (document.documentElement.clientWidth ? document.documentElement.clientWidth : document.body.offsetWidth)); h = (window.innerHeight ? window.innerHeight : (document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body.offsetHeight)); return {w:w, h:h}; }, // ----------- Funcs ----------- scrollInit : function(order) { //if (this.xmlEnable) this.ajaxLoad(); //ajax_json.js was exclude from splash this.stepDirection = order; var id = this.id; if (stepTimer[id] == null || typeof stepTimer[id] == "undefined") stepTimer[id] = setInterval("getPMove_photo_new('" + id + "').scrollRepeat()", 100); }, scrollRepeat : function() { this.showNext(this.stepDirection); var id = this.id; if (typeof stepTimer[id] == "undefined" || stepTimer[id] != null) { clearInterval(stepTimer[id]); stepTimer[id] = null; stepTimer[id] = setInterval("getPMove_photo_new('" + id + "').scrollRepeat()", this.stepTimeout); } }, mouseUpHandler : function() { var id = this.id; if (typeof stepTimer[id] == "undefined" || stepTimer[id] == null) return; clearInterval(stepTimer[id]); stepTimer[id] = null; this.showNext(this.stepDirection); }, mixPreview : function() { if (this.defaultArray.length > 1) { var randKey = 0; var bufer = []; for (i = 0; i <= 3; i++) { randKey = parseInt(Math.random() * this.defaultArray.length); if (typeof this.defaultArray[i] == "undefined") continue; bufer = this.defaultArray[i]; this.defaultArray[i] = this.defaultArray[randKey]; this.defaultArray[randKey] = bufer; } } }, drawNameItem : function(valueNameItem, urlNameItem) { if (this.nameItemEnable) { var nameItem = '' + '
' + '
' + '' + '
' + '
'; } else { var nameItem = ''; } return nameItem; }, drawPreview : function() { this.containerWidthDetect(); var html = []; try { html[html.length] = ''; var j; for (i = 0; i < this.previewCount; i++) { j = (this.curPos + i) % this.defaultArray.length; this.casheImages[j] = this.newImg(this.defaultArray[j][1]); if (!(document.all && !window.opera && parseInt(/msie\s([^;]+)/i.exec(navigator.appVersion)[1]) <= 6)) { var watermark_src = '//img.mail.ru/r/watermark_80.png'; } else { var watermark_src = '//img.mail.ru/0.gif'; } var nameItem = (this.nameItemEnable && (this.defaultArray[j][2] != undefined)) ? this.defaultArray[j][2] : ''; if (this.id == 'video') { var preview_unit = ''; } else if(this.id=='blogs') { var preview_unit = ''; } else { var preview_unit = ''; } html[html.length] = preview_unit; } html[html.length] = '
' + nameItem + '
' + nameItem + '
'; html = html.join(''); } catch (e) { // Error. Do nothing alert("Error"); return; } this.container.innerHTML = html; }, showPreview : function() { var j; for (i = 0; i < this.previewCount; i++) { var itemMain = this.gebi('preview_' + this.id + i + '_Id'); j = (this.curPos + i) % this.defaultArray.length; itemMain.src = this.defaultArray[j][1]; if (this.id == 'video') { itemMain.nextSibling.firstChild.href = this.defaultArray[j][0]; if (this.nameItemEnable) { var nameItem = (this.nameItemEnable && (this.defaultArray[j][2] != undefined)) ? this.defaultArray[j][2] : ''; itemMain.nextSibling.firstChild.title = nameItem; itemMain.nextSibling.firstChild.firstChild.alt = nameItem; } } else if(this.id=='blogs') { itemMain.parentNode.href = this.defaultArray[j][0]; if(typeof this.defaultArray[j][2] == "object") { for(var k in this.defaultArray[j][2]) { if(this.defaultArray[j][2].hasOwnProperty(k) && this.defaultArray[j][2][k]!='' && this.defaultArray[j][2][k].match(/^return/)) eval("itemMain.parentNode."+k+"= function (event) { "+this.defaultArray[j][2][k]+" }"); } } } else {itemMain.parentNode.href = this.defaultArray[j][0];} } }, containerWidthDetect : function() { this.containerWidth = this.screenSize().w * 0.9 * 0.26; this.containerWidth = this.containerWidth < this.containerWidthMin ? this.containerWidthMin : this.containerWidth; this.previewCount = parseInt(this.containerWidth / (this.previewWidth + this.marginLeft)); }, showNext : function(side) { if (side == "right") this.curPos++; else this.curPos--; if (this.curPos < 0) this.curPos = this.defaultArray.length - 1; if (this.curPos > this.defaultArray.length - 1) this.curPos = 0; this.showPreview(); this.drawAngles(); if (side == "left" && !this.isLeft) { clearInterval(stepTimer[this.id]); stepTimer[this.id] = null; } return false; }, drawAngles : function() { this.define(); var i = a = img = 0, node, nodes = {}; for (i = 0; i < this.leftAngle.childNodes.length; i++) { node = this.leftAngle.childNodes[i]; if (node.nodeType != 1) continue; nodes[node.nodeName.toLowerCase()] = node; } if (typeof nodes["a"] != "undefined" && typeof nodes["img"] != "undefined") { nodes["a"].style.display = this.isLeft ? "" : "none"; nodes["img"].style.display = this.isLeft ? "none" : ""; if (!this.initFlag) nodes["img"].style.backgroundColor = "#D9D9D9"; } for (i = 0; i < this.rightAngle.childNodes.length; i++) { node = this.rightAngle.childNodes[i]; if (node.nodeType != 1) continue; nodes[node.nodeName.toLowerCase()] = node; } if (typeof nodes["a"] != "undefined" && typeof nodes["img"] != "undefined") { nodes["a"].style.display = this.isRight ? "" : "none"; nodes["img"].style.display = this.isRight ? "none" : ""; if (!this.initFlag) nodes["img"].style.backgroundColor = "#D9D9D9"; } //this.loadPreview(); }, define : function() { /* //this.isLeft = this.curPos ? true : false; this.isLeft = true; this.isRight = true; */ this.isLeft = this.curPos ? true : false; this.isRight = true; }, loadPreview : function() { if (this.casheImages.length != this.defaultArray.length) { for (i = 0; i < this.previewCount * 2; i++) { j = (this.curPos + i) % this.defaultArray.length; if (typeof this.casheImages[j] == "undefined") this.casheImages[j] = this.newImg(this.defaultArray[j][1]); } } }, ajaxLoad : function() { var _this = this; this.scriptURL = (this.scriptURL.indexOf('//') == -1) ? ('//' + window.location.hostname + this.scriptURL) : this.scriptURL; //this.scriptURL = '//' + 'mail.ru' + this.scriptURL;//window.location.hostname //alert(this.nameItemEnable); ajax_call_static( this.scriptURL, function(arr) { var item = new Array(); var str = ''; if (arr.length) { for (var i = 0; i < arr.length; i++) { if (arr[i]["PhotoName"] != 'undefined') { try {// if contain №, for conversion to № var result = arr[i]["PhotoName"].match(/&#\d+;/g); if (result != null) { for (var j = 0; j < result.length; j++) { result[j] = result[j].replace(/[&#;]/g, ''); arr[i]["PhotoName"] = arr[i]["PhotoName"].replace(/&#\d+;/g, String.fromCharCode(result[j])); } } } catch(e) {} item = [arr[i]["url"], arr[i]["prevurl"], arr[i]["PhotoName"]];// } else item = [arr[i]["url"], arr[i]["prevurl"]]; _this.defaultArray[_this.defaultArray.length] = item; } } } ); this.xmlEnable = false; } } /* ______________ код для линейки превью на главной морде v2 ______________*/ /* ______________ код анимированного слайдера на главной морде ______________*/ var aslider = { // Namespace archive : {}, get : function(id) { if (typeof this.archive[id] == 'undefined') this.archive[id] = new this.create(id); return this.archive[id]; }, create : function(id) { // Constructor this.id = id; this.data = []; this.cur = 0; this.length = 0; this.preloaded = {}; this.timer = null; this.moveState = false; this.longer = false; this.mixData = false; this.items = 2; this.itemWidth = 100; this.showest = []; this.html = []; // DOM elements this.table = null; this.left = null; this.right = null; this.headerPhoto = '#'; this.headerVideo = '#'; } } aslider.create.prototype = {// Prototype $ : function(id) {return document.getElementById(id);}, addHandler : function(o, e, h) { if (o.addEventListener) o.addEventListener(e, h, false); else if (o.attachEvent) o.attachEvent('on' + e, h); }, init : function() { this.left = this.$('aleft_' + this.id); this.right = this.$('aright_' + this.id); this.table = this.$('acont_' + this.id); this.ie6 = (navigator.userAgent.toLowerCase().indexOf('msie 6') != -1) ? true : false; this.ie8 = (navigator.userAgent.toLowerCase().indexOf('msie 8') != -1) ? true : false; this.row = this.table.rows[0]; if (!(this.left && this.right && this.table)) return false; if (!(typeof this.data != 'undefined' && this.data.length)) return false; if (this.id == 'video') { this.dataL = this.data.length; for (var i = 0; i < this.dataL; i++) { this.data[i][2].title = (this.data[i][2].title.length > 36) ? (this.data[i][2].title.substr(0,36) + '…') : this.data[i][2].title; } } this.left.style.display = this.right.style.display = ''; this.length = this.data.length; this.mix(); var _this = this; // Add handlers this.left.onmousedown = function(evt) { evt = evt || window.event; if (evt.preventDefault) evt.preventDefault(); _this.longer = true; _this.goLeft(); return false; } this.left.ondragstart = function() {return false;}; this.left.onclick = function(evt) {return false;} this.right.onmousedown = function(evt) { evt = evt || window.event; if (evt.preventDefault) evt.preventDefault(); _this.longer = true; _this.goRight(); return false; } this.right.ondragstart = function() {return false;}; this.right.onclick = function(evt) {return false;} this.addHandler(document, 'mouseup', function() {_this.longer = false;}); this.addHandler(window, 'mouseout', function() {_this.longer = false;}); this.addHandler(window, 'load', function() { _this.resize(); _this.preload(); }); this.addHandler(window, 'resize', function() { _this.resize(); }); this.resize(); }, mix : function() { if (this.mixData) { this.data.sort(function() { return Math.random() > 0.5 ? 1 : -1; }); } }, resize : function() { if (this.moveState) { setTimeout('aslider.get("'+this.id+'").resize()', 100); return; } if (this.table.offsetWidth) { var _t = this; setTimeout(function() { if (typeof _t != 'undefined') { _t.items = Math.floor(_t.table.parentNode.offsetWidth / _t.itemWidth); _t.setShowest(); _t.draw(); if (_t.id != 'video') _t.freeze(); } }, 1); } }, setShowest : function() { this.showest = []; for (var i = 0; i < this.items; i++) this.showest[i] = this.cur + i >= this.length ? this.cur + i - this.length : this.cur + i; this.getHTML(); }, draw : function() { if (this.moveState || this.longer) return; for (i = this.row.cells.length - 1; i >= 0; i--) { this.row.deleteCell(i); } for (i = 0; i < this.html.length; i++) { this.row.insertCell(-1).innerHTML = this.html[i]; } }, getHTML : function() { this.html = []; var index, i; if (this.id == 'video') { for (var i = 0; i < this.showest.length; i++) { index = this.showest[i]; var but_play = !this.ie6 ? '//img.mail.ru/r/watermark_90x50.png' : '//img.imgsmail.ru/0.gif'; this.html[i] = '
' + '' + '' + '' + '' + '
 
' + '
Видео: ' + this.data[index][2].album_name + '
' + '' + this.data[index][2].title + '
' + '' + '
 
'; } } else { for (var i = 0; i < this.showest.length; i++) { index = this.showest[i]; this.html[i] = '
'; } } }, goLeft : function() { if (this.moveState) return; this.cur -= this.items; this.cur = this.cur < 0 ? this.cur + this.length : this.cur; this.setShowest(); this.update(0) }, goRight : function() { if (this.moveState) return; this.cur += this.items; this.cur = this.cur >= this.length ? this.cur - this.length : this.cur; this.setShowest(); this.update(1); }, update : function(r,i,w) { this.moveState = true; this.preload(); var _this = this; w = this.table.offsetWidth; if (r) for (var i = 0; i < this.html.length; i++) this.row.insertCell(-1).innerHTML = this.html[i]; else for (var i = this.html.length - 1; i >= 0; i--) this.row.insertCell(0).innerHTML = this.html[i]; this.freeze(w); if (!r) this.table.style.marginLeft = (-1)*w + 'px'; this.move((r?0:(-1)*w), (r?0:(-1)*w), (r?(-1)*w:0), r); }, preload : function() { var div, s, i, radius = 6, html = ''; if (!(div = this.$('preloader_'+this.id))) { div = document.createElement("div"); div.id = 'preloader_'+this.id; s = div.style; s.position = "absolute"; s.top = s.left = 0; s.visibility = "hidden"; document.body.appendChild(div); } div = this.$('preloader_'+this.id); for (i = this.cur - radius; i <= this.cur + radius; i++) { if (this.data[i] && typeof this.preloaded[i] == 'undefined') { html += '\n'; this.preloaded[i] = true; } } if (html) div.innerHTML += html; }, move : function(x, start, end, r) { var percent = x / (end - start) * (r ? 1 : -1); x = x + (r ? -1 : 1) * (5 + 20 * percent); clearTimeout(this.timer); this.timer = null; if ((r && x < end) || (!r && x > end)) { if (r) { for (var i = this.items - 1; i >= 0; i--) { this.row.deleteCell(i); } } else { for (var i = 2 * this.items - 1; i >= this.items; i--) { this.row.deleteCell(i); } } this.table.style.marginLeft = 0; this.freeze(); this.moveState = false; if (this.longer) { if (r) this.goRight(); else this.goLeft(); } } else { this.table.style.marginLeft = x + 'px'; this.timer = setTimeout('aslider.get("'+this.id+'").move('+x+', '+start+', '+end+', '+r+')', 5); } }, freeze : function(w) { if (w) w = w / this.items; else w = this.table.parentNode.parentNode.parentNode.offsetWidth / this.items; for (var i = 0; i < this.row.cells.length; i++) { if (w) this.row.cells[i].firstChild.style.width = w + 'px'; else this.row.cells[i].firstChild.style.width = 'auto'; } } } /* ______________ код анимированного слайдера на главной морде ______________*/ /* Учёт кликов по стрелочкам полосок */ function AccountingClicks(id) { var img = new Image(); img.src = '//r.mail.ru/d' + id + '_1.gif?' + parseInt(Math.random()*100000); } /* Учёт кликов по стрелочкам полосок */ /* Cookie */ function setCookie(name, value) { var valueEscaped = escape(value); var expiresDate = new Date(); // get current time expiresDate.setTime(expiresDate.getTime() + 365 * 24 * 60 * 60 * 1000); // add 1 year lifetime var expires = expiresDate.toGMTString(); // get formatted date string var newCookie = name + "=" + valueEscaped + "; path=/; expires=" + expires; if (valueEscaped.length <= 4000) document.cookie = newCookie + ";"; } function getCookie(name) { var prefix = name + "="; var cookieStartIndex = document.cookie.indexOf(prefix); if (cookieStartIndex == -1) return null; var cookieEndIndex = document.cookie.indexOf(";", cookieStartIndex + prefix.length); if (cookieEndIndex == -1) cookieEndIndex = document.cookie.length; return unescape(document.cookie.substring(cookieStartIndex + prefix.length, cookieEndIndex)); } /* /Cookie */ /* mail_splash End */ /* search_top Start */ /* Misc functions */ function str_split_digit(str,d) { var p=[], s=str.length; for (var x=0;(s-x)>=1;x+=d) p.push(str.substring(x,(x+d))); return p; } function RGB2HEX(r,g,b) { var cv = function(d) { var c = "0123456789ABCDEF"; return String(c.charAt(Math.floor(d/16)))+String(c.charAt(d-(Math.floor(d/16)*16))); }; return cv(r)+cv(g)+cv(b); } function set_query(oElem) {oElem.href += document.MSearch.q.value; return 0;} function CheckQ(oForm) {if (oForm.q.value.length != 0) { return true; } else { document.location.href="//go.mail.ru"; return false;}}; function changeMenu(id) { var divmenu=new Array('fff','sss'); for (i=0;i255)?z=255:(z<0)?z=0:null; rgb.push(z); } newColor = RGB2HEX.apply(null,rgb); var a = parseInt(startColor,16); var b = parseInt(stopColor,16); var c = parseInt(newColor,16); var _stop = false; if (((a>b&&c<=b)||(a<=b&&c>=b))||it>=end) { _stop = true; newColor=stopColor; } callback.apply(null,[newColor,_stop]); if (_stop) return; var t = arguments.callee; setTimeout(function(){ t.apply(null,[startColor,stopColor,callback,speed,newColor,end,(++it)]); },70); return; } function fieldPasteFocusLight(field,str) { if (typeof field == "string") field = document.getElementById(field); if (!field) return false; field.focus(); field.value = str; if (field.getAttribute("operation") == "true") return false; softColor("ffff66","FFFFFF",function(c, _stop){ if (_stop) { field.setAttribute("operation","false"); } field.style.background="#"+c; },0.1); field.setAttribute("operation","true"); var form = document.forms.MSearch; form.setAttribute("action","//r.mail.ru/cln4533/go.mail.ru/search"); return true; } var browser = (function(){ var ua = navigator.userAgent.toLowerCase(); return { ie5: ua.indexOf('msie 5') != -1, ie6: ua.indexOf('msie 6') != -1 }; })(); function redirect(u, ret) { var root; (root = self.parent).document.location.href ? root.document.location.href = u : root.location = u; return ret || false; } function createElement(name,attr,root) { root = root || self.parent.document; var e = root.createElement(name), x; if (attr) { for (x in attr) { if (x.toLowerCase() !== "tojsonstring") { e.setAttribute(x, attr[x]); } } } return e; } function absPosition(elem) { var left = 0, top = 0; if (typeof elem.getBoundingClientRect !== 'undefined') { var box = elem.getBoundingClientRect(), body = document.body, docElem = document.documentElement; left = box.left + (window.pageXOffset || docElem.scrollLeft || body.scrollLeft) - (docElem.clientLeft || body.clientLeft || 0); top = box.top + (window.pageYOffset || docElem.scrollTop || body.scrollTop) - (docElem.clientTop || body.clientTop || 0); } else { while (elem) { left += elem.offsetLeft; top += elem.offsetTop; if (elem.offsetParent === null) { elem = (elem.nodeName === 'BODY') ? null : elem.parentNode; } if (elem !== null) { elem = elem.offsetParent; } } } return { x: Math.round(left), y: Math.round(top) }; } function addHandler(elem, event, fn) { if (typeof elem.addEventListener !== 'undefined') { elem.addEventListener(event, fn, false); } else if (typeof elem.attachEvent !== 'undefined') { elem.attachEvent('on'+event, fn); } return elem; } function preventDefault(e) { if (typeof e.preventDefault !== 'undefined') { e.preventDefault(); } else { e.returnValue = false; } return e; } function AJAX(url, args, keyHash, method, timeout, bCached, callbackFunc, callbackPhase, callbackArgs) { this.url = url; this.args = args; this.keyHash = keyHash; this.method = method.toLowerCase(); this.timeout = timeout; this.timeoutID = null; this.bCached = bCached; this.callback = callbackFunc; this.callbackPhase = callbackPhase.toLowerCase(); this.callbackArgs = (callbackArgs)?callbackArgs:[]; this.request = new this.XHR(); } AJAX.prototype = { XHR : function() { var req = false; if (window.XMLHttpRequest) { try {req = new XMLHttpRequest();} catch (e){} } else if (window.ActiveXObject) { try {req = new ActiveXObject('Msxml2.XMLHTTP');} catch (e) { try {req = new ActiveXObject('Microsoft.XMLHTTP');} catch (e){} } } return req; }, send : function() { if (!this.request) return false; var correctURL=this.url, correctArgs = ""; if (this.args && this.args.length > 0) { correctArgs += ((this.method=="get")?"?":"")+this.args; } if (this.keyHash) { correctArgs += ((correctArgs.length>0)?"&":"?")+"key="+this.keyHash; } if (this.method == "get") { correctURL += correctArgs; correctArgs = null; } var t = this; if (t.timeout) { t.timeoutID = setTimeout(function(){ t.callback.apply({response:null,request:null,err:{reason:"timeout"}},t.callbackArgs); t.request.abort(); },t.timeout); } this.request.onreadystatechange = function(){(function(){ var complete = false; try { if (this.request.readyState == 4) { complete = true; } switch (this.callbackPhase) { case "complete": if (this.request.readyState == 4) { if (this.request.status == 200) { this.callback.apply({response:this.request.responseText,request:null,err:null},this.callbackArgs); } else { this.callback.apply({response:null,request:null,err:{reason:"!200",status:this.request.status}},this.callbackArgs); } } break; case "process": this.callback.apply({response:null,request:this.request,err:null},this.callbackArgs); break; } } catch (e) {complete = true;} if (complete) { this.timeout?clearTimeout(this.timeoutID):null; } }).call(t);}; this.request.open(this.method, correctURL, true); (this.method == "post")?this.request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"):null; (!this.bCached)?this.request.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 1970 00:00:00 GMT"):null; this.request.send(correctArgs); return true; } }; var Suggest = function (c) { this.addObjectToThis = function(obj) { for (var x in obj) { if (typeof this[x] != "undefined") { //alert("Reserver var \"" + x + "\".\nOld value to be rewrite."); } this[x] = obj[x]; } }; /* Flags */ this._operOff = false; this._operIgnored = false; this._operTimeout = false; this._operRequest = false; /* Timeout */ this.sReqDelay = 200; this.sReqTimeout = false; /* Cache */ this.cache = {}; this.cacheCounter = 0; this.cacheLimit = 100; this.cacheResponses = {}; this.submitType = false; this.redirectLink = false; this.suggestAreaXCor = 0; this.suggestAreaYCor = 0; this.suggestAreaWidth = 350; this.suggestAreaHeight = 0; this.addObjectToThis(c); /* URL */ this.sReqUrl = null; this.sReqHS = this.sReqUrlHost + this.sReqUrlScript; if (!this.sReqMethod) this.sReqMethod = "GET"; this.fieldCurrentValue = null; this.fieldCurrentValueEncode = null; this.fieldCurrentValueLength = null; this.fieldPrevValue = null; this.fieldPrevValueEncode = null; this.fieldPrevValueLength = null; /* AJAX Response */ this.response = null; this.responseObj = null; /* Suggest */ this.suggestMouseOver = false; this.suggestArea = null; this.suggestAreaHTML = null; this.suggestBlock = null; this.suggestOpen = false; this.suggestItems = null; this.suggestItemSelect = null; this.selectArrowPause = false; this.selectArrowPauseLength = 80; this.field.setAttribute("autocomplete","off"); this.field.blur(); this.setFieldEvents(); this.setFormSubmitHandler(); } Suggest.prototype = { fieldFocus: function(f) { setTimeout(function(){f.focus();},50); }, cacheCheck : function() { if ((this.cache[this.fieldCurrentValueEncode] || this.cache[this.fieldCurrentValueEncode] === null) && this.cacheResponses[this.fieldCurrentValueEncode]) { return true; } return false; }, cacheClean : function() { this.cache = {}; this.cacheCounter = 0; this.cacheResponses = {}; }, cacheWrite : function() { this.cache[this.fieldCurrentValueEncode] = (this.response=="OK")?this.responseObj:null; this.cacheResponses[this.fieldCurrentValueEncode] = this.response; this.cacheCounter++; }, compareValues : function() { /* encodeURIComponent(this.field.value.toLowerCase()) */ if (this.fieldPrevValueEncode !== encodeURIComponent(this.field.value.toLowerCase())) { return false; } return true; }, defineReqUrlParam : function() { var i = 0; var coolParam = ""; if (this.sReqUrlParam) { for (var x in this.sReqUrlParam) { coolParam += ((i++!=0)?"&":"") + x + "="; if ((typeof this.sReqUrlParam[x]).toLowerCase() == "array" || (typeof this.sReqUrlParam[x]).toLowerCase() == "object") { if ((this[this.sReqUrlParam[x]] === false || typeof this[this.sReqUrlParam[x]] == "undefined") && this[this.sReqUrlParam[x]] !== null) { //alert("Incorrect var name \"" + this.sReqUrlParam[x] + "\" in class!"); continue; } coolParam += this[this.sReqUrlParam[x]]; } else { coolParam += this.sReqUrlParam[x]; } } } return coolParam; }, destroyThis : function() { this._operOff = true; }, fieldFocusMoveToEnd : function() { if (this.field.createTextRange) { var c=0,b=0; var d=this.field.createTextRange(),e=document.selection.createRange(); if(d.inRange(e)){ d.setEndPoint("EndToStart",e); b=d.text.length; d.setEndPoint("EndToEnd",e); c=d.text.length; } } else if (this.field.selectionStart) { var end = this.field.value.length; this.field.setSelectionRange(end,end); } this.field.focus(); }, fieldValueCheck : function() { var r = /^[ \s]*$/i; r = r.test(this.field.value); return r?false:true; }, formSubmit: function() { this.suggestAreaDestroy(); if (this.redirectLink) { redirect(this.redirectLink); this.redirectLink = false; return false; } if (this.formSubmitFunc) { this.formSubmitFunc.apply(this.form,this.formSubmitFuncAttr); } else { this.form.submit(); } }, getFieldValue : function() { this.fieldCurrentValue = this.field.value; this.fieldCurrentValueLength = this.fieldCurrentValue.length; this.fieldCurrentValueEncode = encodeURIComponent(this.fieldCurrentValue.toLowerCase()); }, getResultInCache : function() { if (this.cacheResponses[this.fieldCurrentValueEncode] == "OK") { this.suggestAreaCreate(this.cache[this.fieldCurrentValueEncode],true); } else { if (this.suggestOpen) { this.suggestAreaDestroy(); } } if (this.cacheCounter > this.cacheLimit) { this.cacheClean(); } }, keyEvents : function(keyCode) { switch (keyCode) { case 13: if (this.suggestOpen && this.suggestItemSelect !== null) { this.submitType = "keydown"; if (!this.redirectLink) { this.field.value = this.suggestItems[this.suggestItemSelect].firstChild.firstChild.innerHTML; } } else { this.submitType = "default"; } break; case 27: if (this.suggestOpen) { if (this.suggestItemSelect !== null) { this.field.value = this.fieldPrevValue; } this.suggestAreaDestroy(); } break; case 38: if (this.suggestOpen) { this.suggestItemArrowSelect("up"); } break; case 40: if (this.suggestOpen) { this.suggestItemArrowSelect("down"); } else { this.getResultInCache(); } break; } return false; }, keyFilter : function(keyCode) { switch (keyCode) { case null: case 9: case 13: case 16: case 17: case 18: case 27: case 38: case 40: return false; break; default: return true; break; } }, responseHandler : function(res,err) { if (err) { this._operRequest = false; if (this.suggestOpen) { this.suggestAreaDestroy(); } return false; } res = (new Function('return (' + res + ')'))(); if (res.AJAXResponse == "OK" && res.response.length == 1 && res.response[0].query == this.fieldCurrentValue.toLowerCase()) { res.AJAXResponse = "ERR-NO_RESPONSE"; } this.response = res.AJAXResponse; if (res.AJAXResponse == "OK") { this.responseObj = res.response; if (this.compareValues() && !this.suggestOpen) { this.suggestAreaCreate(this.responseObj); } else if (this.suggestOpen) { this.suggestAreaCreate(this.responseObj); } } else { if (this.suggestOpen) { this.suggestAreaDestroy(); } } this.cacheWrite(); if (!this.compareValues()) { this.getFieldValue(); if (this.fieldCurrentValueLength != 0) { if (this.cacheCheck()) { this.getResultInCache(); this.setPrevFieldValue(); } else { this.setOperTimeout(); return false; } } } this.setPrevFieldValue(); this._operRequest = false; return true; }, sendRequest : function() { var t = this; var req = new AJAX(this.sReqHS,this.defineReqUrlParam(),false,this.sReqMethod,3000,false,function(){ var response = this.response; var error = this.err; t.responseHandler.apply(t,[response,error]); },"complete"); if (req.send()) { this._operRequest = true; clearTimeout(this._operTimeout); this._operTimeout = false; } }, setFieldEvents : function() { var t = this; var f = function (e) { e = e || window.event; t.switcher.call(t,e); }; //addHandler(this.field,"keypress",f); addHandler(this.field,"keydown",f); addHandler(this.field,"keyup",f); addHandler(this.field,"blur",function(){ if (t.suggestOpen && !t.suggestMouseOver) { if (t.suggestItemSelect !== null) { t.field.value = t.fieldPrevValue; } t.suggestAreaDestroy.call(t); } }); addHandler(document.body,"click",function(){(t.suggestOpen && !t.suggestMouseOver)?t.suggestAreaDestroy.call(t):null;}); }, setFormSubmitHandler : function() { if (this.formSubmitFunc) { var t = this; addHandler(this.form,"submit",function(e){ e = e || window.event; preventDefault(e); t.formSubmit.call(t); }); return true; } return false; }, setIgnored : function(value) { var old_value = this._operIgnored; this._operIgnored = value; return old_value; }, setOperTimeout : function() { var t = this; this._operTimeout = setTimeout(function(){ t.sendRequest.call(t); t.setPrevFieldValue.call(t); },this.sReqDelay); }, setPrevFieldValue : function() { this.fieldPrevValue = this.fieldCurrentValue; this.fieldPrevValueEncode = this.fieldCurrentValueEncode; this.fieldPrevValueLength = this.fieldCurrentValueLength; }, suggestBlockPosCorrect : function(obj) { var w = this.field.offsetWidth; var h = this.field.offsetHeight; var pos = absPosition(this.field); var x = pos.x; var y = pos.y; obj.style.left = (x+this.suggestAreaXCor) + "px"; obj.style.top = ((y+h)+this.suggestAreaYCor) + "px"; obj.style.width = this.suggestAreaWidth + "px"; if (this.suggestAreaHeight) { obj.style.height = this.suggestAreaHeight + "px"; } return obj; }, suggestAreaCreate : function(res, cache) { if (!this.suggestBlockID) return; this.suggestCleanItemCounters(); var sb, i; var ie5 = browser.ie5; var ie6 = browser.ie6; if (!document.getElementById(this.suggestBlockID) && this.suggestBlock === null) { var t = this; var f = function(e, click) { e = e || window.event; var obj = e.target || e.srcElement; while (obj) { if (obj.id == t.suggestBlockID) { return; } if (click && obj.nodeName == "A" && obj.className == "sClose") { t.suggestAreaDestroy(); t.destroyThis(); return; } else if (obj.nodeName == "TR") { break; } else { obj = obj.parentNode; } } var arg = (click)?[obj,true]:[obj]; t.suggestItemMouseSelect.apply(t,arg); }; var root = self.parent.document; var wrp = createElement("div"); var inr = createElement("div"); var sar = createElement("div"); var clsB = createElement("div"); var clsL = createElement("a"); var crnTR = createElement("b"); var crnBL = createElement("b"); var crnBR = createElement("b"); var brdR = createElement("b"); var brdB = createElement("b"); crnTR.className = "sCrnTR"; crnBL.className = "sCrnBL"; crnBR.className = "sCrnBR"; brdR.className = "sBrdR"; brdB.className = "sBrdB"; this.suggestBlock = createElement("div"); this.suggestBlock.id = this.suggestBlockID; this.suggestBlock.style.position = "absolute"; this.suggestBlockPosCorrect(this.suggestBlock); wrp.className = "sWrap"; inr.className = "sInnr"; sar.id = "g"+"ogo"+"S"+"ug"+"ges"+"tA"+"r"+"ea"+"_"+Math.round(Math.random()*1000000); sar.setAttribute("copyright","GoGo.Ru"); clsL.className = "sClose"; clsL.innerHTML = "закрыть"; clsB.className = "sClose"; clsB.appendChild(clsL); wrp.appendChild(inr); inr.appendChild(sar); inr.appendChild(clsB); wrp.appendChild(brdR); wrp.appendChild(brdB); wrp.appendChild(crnTR); wrp.appendChild(crnBL); wrp.appendChild(crnBR); this.suggestArea = sar; this.suggestBlock.appendChild(wrp); this.suggestBlock.appendChild(brdR); this.suggestBlock.appendChild(brdB); this.suggestBlock.appendChild(crnTR); this.suggestBlock.appendChild(crnBL); this.suggestBlock.appendChild(crnBR); sb = this.suggestBlock; addHandler(self.parent,"resize",function(){t.suggestBlockPosCorrect.call(t,sb)}); addHandler(this.suggestBlock,"mouseover",function(e){f(e);t.suggestMouseOver=true;}); addHandler(this.suggestBlock,"mouseout",function(){t.suggestMouseOver=false;}); addHandler(this.suggestBlock,"click",function(e){f(e,true);}); addHandler(this.suggestBlock,"contextmenu",function(e){preventDefault(e);f(e,true);}); try { root.body.appendChild(this.suggestBlock); } catch(e) {alert(e);} } if (this.suggestArea.firstChild) { this.suggestArea.innerHTML = ""; } this.suggestArea.appendChild(this.suggestAreaItemCreate(res)); this.suggestBlock.style.visibility = "hidden"; this.suggestBlock.style.visibility = ""; this.suggestItems = this.suggestArea.getElementsByTagName("tbody")[0].childNodes; this.suggestOpen = true; if (!this.fieldValueCheck()) { this.suggestAreaDestroy(); } }, suggestAreaDestroy : function() { if (this.suggestArea === null) return; this.suggestCleanItemCounters(); this.suggestBlock.style.visibility = "hidden"; this.suggestOpen = false; }, suggestCleanItemCounters : function() { this.suggestItems = this.suggestItemSelect = null; }, suggestAreaItemCreate : function(res) { var table, tbody, tr, td1, td1d, i = 0, j = true, item, link = false; table = createElement("table"); tbody = createElement("tbody"); while (item = res[i++]) { (function(str){ if (j && !str && item.site) { item.site = item.site.replace(/^http:\/\//,'').replace(/\/$/,''); str = ''+item.site+''; j = !j; arguments.callee(item.query); link = true; } else if (!str) { link = false; str = item.query; } tr = createElement("tr"); tr.className = 'rn' + (str && link ? ' link' : ''); td1 = createElement("td"); td1d = createElement("div"); td1d.innerHTML = str; td1.appendChild(td1d); tr.appendChild(td1); tbody.appendChild(tr); td1.className = "squery"; })(); } table.appendChild(tbody); table.className = "sList"; return table; }, suggestItemArrowSelect: function(arr) { if (!this.suggestItems) return; if (this.selectArrowPause) return; var n = this.suggestItems; var nl = n.length - 1; var v,t=this; if (this.suggestItemSelect === null) { if (arr == "down") { this.suggestItemSelect = 0; } else { this.suggestItemSelect = nl; } } else { n[this.suggestItemSelect].className = n[this.suggestItemSelect].className.replace('ra','rn'); if (arr == "down") { this.suggestItemSelect++; } else { this.suggestItemSelect--; } } if (this.suggestItemSelect < 0 || this.suggestItemSelect > nl) { this.suggestItemSelect = null; v = this.fieldPrevValue; } else { n[this.suggestItemSelect].className = n[this.suggestItemSelect].className.replace('rn','ra'); var obj = n[this.suggestItemSelect].firstChild.firstChild; if (obj.firstChild && obj.firstChild.nodeName == 'A') { v = this.fieldPrevValue; this.redirectLink = obj.firstChild.href; } else { v = obj.innerHTML; this.redirectLink = false; } } this.field.value = v; this.selectArrowPause = true; setTimeout(function(){ t.selectArrowPause = false; },this.selectArrowPauseLength); setTimeout(function(){ t.fieldFocusMoveToEnd.call(t); },10); return arr; }, suggestItemMouseSelect : function(obj,click) { if (click) { this.submitType = "click"; obj = obj.firstChild.firstChild; if (obj.firstChild && obj.firstChild.nodeName == 'A') { this.redirectLink = obj.firstChild.href; redirect(this.redirectLink); return; } var value = obj.innerHTML; this.field.value = value; this.formSubmit(); return; } if (!this.suggestItems) return; var n = this.suggestItems, check = new RegExp('(^| +)ra($| +)'), i, nl = (i = n.length) - 1; if (this.suggestItemSelect !== null) { n[this.suggestItemSelect].className = n[this.suggestItemSelect].className.replace('ra','rn'); } obj.className = obj.className.replace('rn','ra'); while (i--) { if (check.test(n[i].className)) { this.suggestItemSelect = i; break; } } }, switcher : function(e) { if (this._operOff) return false; var keyCode = e.keyCode ? e.keyCode : e.which ? e.which : null; if (!this.fieldValueCheck() && this.suggestOpen) { this.suggestAreaDestroy(); } if (this._operIgnored) return false; if (this._operTimeout) return false; if (this._operRequest) return false; if (!this.keyFilter(keyCode)) { if (e.type == "keydown") { this.keyEvents(keyCode); } return false; } this.getFieldValue(); if (!this.fieldValueCheck()) { if (this.suggestOpen) { this.suggestAreaDestroy(); } } else { if (this.cacheCheck()) { this.getResultInCache(); this.setPrevFieldValue(); } else { this.setOperTimeout(); } } } }; /* END SUGGEST */ function base64Encode( data ) { var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; var o1, o2, o3, h1, h2, h3, h4, bits, i=0, enc=''; do { o1 = data.charCodeAt(i++); o2 = data.charCodeAt(i++); o3 = data.charCodeAt(i++); bits = o1<<16 | o2<<8 | o3; h1 = bits>>18 & 0x3f; h2 = bits>>12 & 0x3f; h3 = bits>>6 & 0x3f; h4 = bits & 0x3f; enc += b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4); } while (i < data.length); switch( data.length % 3 ){ case 1: enc = enc.slice(0, -2) + '=='; break; case 2: enc = enc.slice(0, -1) + '='; break; } enc = enc.replace(new RegExp("=", "g"), "%3D"); enc = enc.replace(new RegExp("\/", "g"), "%2F"); return enc; } function chr(code) { return String.fromCharCode(code); } function code2utf(code) { if (code < 128) return chr(code); if (code < 2048) return chr(192+(code>>6)) + chr(128+(code&63)); if (code < 65536) return chr(224+(code>>12)) + chr(128+((code>>6)&63)) + chr(128+(code&63)); if (code < 2097152) return chr(240+(code>>18)) + chr(128+((code>>12)&63)) + chr(128+((code>>6)&63)) + chr(128+(code&63)); } function _utf8Encode(str) { var utf8str = new Array(); for (var i = 0; i < str.length; i++) utf8str[i] = code2utf(str.charCodeAt(i)); return utf8str.join(''); } function utf8Encode(str) { var utf8str = new Array(); var pos,j = 0; var tmpStr = ''; while ((pos = str.search(/[^\x00-\x7F]/)) != -1) { tmpStr = str.match(/([^\x00-\x7F]+[\x00-\x7F]{0,10})+/)[0]; utf8str[j++] = str.substr(0, pos); utf8str[j++] = _utf8Encode(tmpStr); str = str.substr(pos + tmpStr.length); } utf8str[j++] = str; return utf8str.join(''); } function strip(s){ return s.replace(/^\s*/, "").replace(/\s*$/, ""); } function mapSearch(hElem, value) { hElem.href += base64Encode(utf8Encode(strip(value))); return 0; } /* search_top End */ /* go_harmony Start */ (function(){ var GO = { ge: function (id) { return GO.doc.getElementById(id); }, chr: function () { if (arguments.length > 1) { return String.fromCharCode.apply(null, arguments); } return String.fromCharCode.call(null, arguments[0]); }, setQuery: function (oElem) { oElem.href += document.MSearch.q.value; return true; }, mapSearch: function (hElem, value) { hElem.href += GO.base64.encodeURI(value); return true; }, checkForm: function (oForm) { if (oForm.elements.q.value !== "") { return true; } window.location.href = "//go.mail.ru"; return false; } }; GO.win = this; GO.doc = document; GO.head = GO.doc.getElementsByTagName("head")[0] || GO.doc.documentElement; /* BEGIN GO.utf8 part */ var utf8re1 = /[^\x00-\x7F]/, utf8re2 = /([^\x00-\x7F]+[\x00-\x7F]{0,10})+/, utf8encodeFn1 = function (a) { if (a < 128) { return GO.chr(a); } if (a < 2048) { return GO.chr(192 + (a >> 6)) + GO.chr(128 + (a & 63)); } if (a < 65536) { return GO.chr(224 + (a >> 12)) + GO.chr(128 + ((a >> 6) & 63)) + GO.chr(128 + (a & 63)); } //if (a < 2097152) { // return GO.chr(240 + (a >> 18)) + GO.chr(128 + ((a >> 12) & 63)) + GO.chr(128 + ((a >> 6) & 63)) + GO.chr(128 + (a & 63)); //} return GO.chr(240 + (a >> 18)) + GO.chr(128 + ((a >> 12) & 63)) + GO.chr(128 + ((a >> 6) & 63)) + GO.chr(128 + (a & 63)); }, utf8encodeFn2 = function (b) { var c = [], i = 0, l = b.length; while (i < l) { c[i] = utf8encodeFn1(b.charCodeAt(i++)); } return c.join(''); }, utf8decodeFn = function (d) { var a = [], c1, c2, c3, c4, l = d.length, j = 0, i = 0; while (i < l) { c1 = d.charCodeAt(i++); if (c1 > 127) { c2 = d.charCodeAt(i++); } if (c1 > 223) { c3 = d.charCodeAt(i++); } if (c1 > 239) { c4 = d.charCodeAt(i++); } a[j++] = (function(){ if (c1 < 128) { return GO.chr(c1); } if (c1 < 224) { return GO.chr(((c1 - 192) << 6) + (c2 - 128)); } if (c1 < 240) { return GO.chr(((c1 - 224) << 12) + ((c2 - 128) << 6) + (c3 - 128)); } return GO.chr(((c1 - 240) << 18) + ((c2 - 128) << 12) + ((c3 - 128) << 6) + (c4 - 128)); })(); } return a.join(''); }; GO.utf8 = { encode: function (d) { d = d.replace(/^\s*/,"").replace(/\s*$/,""); var e = [], j = 0, g = '', f; while ((f = d.search(utf8re1)) != -1) { g = d.match(utf8re2)[0]; e[j++] = d.substr(0,f); e[j++] = utf8encodeFn2(g); d = d.substr(f + g.length); } e[j++] = d; return e.join(''); }, decode: function (d) { var a = [], b = 0, c = '', j = 0; while ((b = d.search(utf8re1)) != -1) { c = d.match(utf8re2)[0]; a[j++] = d.substr(0, b); a[j++] = utf8decodeFn(c); d = d.substr(b + c.length); } a[j++] = d; return a.join(''); } }; /* END GO.utf8 part */ /* BEGIN base64 part */ var base64coll = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; GO.base64 = { encode: function (a) { var l = a.length, c, o2, o3, h1, h2, h3, h4, bits, i = 0, enc = ""; do { c = a.charCodeAt(i++); o2 = a.charCodeAt(i++); o3 = a.charCodeAt(i++); bits = c << 16 | o2 << 8 | o3; h1 = bits >> 18 & 0x3f; h2 = bits >> 12 & 0x3f; h3 = bits >> 6 & 0x3f; h4 = bits & 0x3f; enc += base64coll.charAt(h1) + base64coll.charAt(h2) + base64coll.charAt(h3) + base64coll.charAt(h4); } while (i < l); switch (a.length % 3) { case 1: enc = enc.slice(0,-2) + '=='; break; case 2: enc = enc.slice(0,-1) + '='; break; } return enc; }, encodeURI: function (a) { return this.encode(GO.utf8.encode(a)).replace(/=/g,'%3D').replace(/\//g,'%2F'); }, decode: function (a) { var l = a.length, o1, o2, o3, h1, h2, h3, h4, bits, i=0, enc=''; do { h1 = base64coll.indexOf(a.charAt(i++)); h2 = base64coll.indexOf(a.charAt(i++)); h3 = base64coll.indexOf(a.charAt(i++)); h4 = base64coll.indexOf(a.charAt(i++)); bits = h1 << 18 | h2 << 12 | h3 << 6 | h4; o1 = bits >> 16 & 0xff; o2 = bits >> 8 & 0xff; o3 = bits & 0xff; if (h3 == 64) { enc += GO.chr(o1); } else if (h4 == 64) { enc += GO.chr(o1, o2); } else { enc += GO.chr(o1, o2, o3); } } while (i < l); return enc; }, decodeURI: function (a) { return GO.utf8.decode(this.decode(a.replace(/\%3D/gi, '=').replace(/\%2F/gi, '/'))); } }; /* END base64 part */ /* BEGIN onAir part */ GO.onAir = (function(){ var w = window, d = document, bind = function (elem, eType, fn) { if (elem.addEventListener) { elem.addEventListener(eType, fn, false); } else if (elem.attachEvent) { elem.attachEvent("on" + eType, fn); } return elem; }, OBJ2URI = function (obj) { var str = '', idx, i = true, item; for (idx in obj) { if (!obj.hasOwnProperty(idx)) { continue; } item = obj[idx]; str += (i ? '' : '&') + idx + '=' + (item.call ? item.call(this) : item); (i)?i=!i:null; } return str; }, run = function (str) { return (new Function("return (" + str + ")"))(); }, trim = function (str) { return str.replace(/^\s+/, '').replace(/\s+$/, ''); }, cutString = function (str, len, pst) { pst = pst || ''; if (len != 0 && str.length > len) { str = trim(str).substring(0, len) + pst; } return str; }, ID = 0, onAir = function (arg) { if (this.onAir) { return new onAir(arg); } if (!arg.parent || (!arg.requestURI && arg.requestURI != '' && !arg['static'])) { this.idx = null; return false; } onAir.instances[this.idx = ID++] = this; this.block = { id: 'onAirBlock_' + this.idx, node: null, width: arg.blockWidth || '', height: arg.blockHeight || '', className: arg.blockClass || false }; this.parent = arg.parent.nodeName ? arg.parent : d.getElementById(arg.parent); this.staticList = arg['static'] || false; this.list = { id: 'onAirList_' + this.idx, node: null, className: arg.listClass || false, items: [], itemClass: arg.listItemClass || false, itemHeight: false, itemHeightSet: arg.listItemHeight || false, itemMaxLength: arg.listItemMaxLength || 0, visibleItems: 0, mouseFocus: false }; this.scroll = { speed: arg.scrollSpeed || 1, amount: arg.scrollAmount || 2, currentItem: 0, currentScroll: 0, delay: arg.scrollDelay || 2000, delayTID: null, timeout: arg.scrollTimeout || 25, isAction: false, loop: 0 }; this.request = { type: arg.requestType || 'AJAX', uri: arg.requestURI, attr: arg.requestAttr || {}, period: arg.requestPeriod || 0, isAction: false, loadBlock: null, responseCharset: arg.requestResponseCharset || 'windows-1251' }; this.data = null; }; onAir.prototype = { get: function (data) { if (data) { if (typeof (data) === 'string') { try { data = run(data); } catch (e) {data = null} } return this.data = data; } else { switch (this.request.type) { case 'AJAX': this.sendRequestAjax(); break; case 'SCRIPT': this.sendRequestScript(); break; } } }, responseHandler: function (instance) { if (this.err) { (function(){ this.request.isAction = false; this.hideLoadBlock(); this.startScrollTimer(); }).call(instance); return; } if (this.response && this.response != '') { var response = this.response; (function(){ this.request.isAction = false; this.hideLoadBlock(); this.data = this.get(response); this.insertListItems(); this.setOperations(); }).call(instance); } }, sendRequestAjax: function () { var request = new AJAX( this.request.uri, OBJ2URI.call(this, this.request.attr), false, 'GET', 5000, false, this.responseHandler, 'complete', [this] ); if (request.send()) { this.request.isAction = true; this.showLoadBlock(); } }, sendRequestScript: function () { var t = this, id = 'r_oascr', oldScript, script = d.createElement('script'); if (oldScript = d.getElementById(id)) { oldScript.parentNode.removeChild(oldScript); } script.type = 'text/javascript'; script.src = this.request.uri + '?' + OBJ2URI.call(this, this.request.attr); script.id = id; script.setAttribute('charset',this.request.responseCharset); this.request.isAction = true; this.showLoadBlock(); return d.getElementsByTagName('head')[0].appendChild(script); }, createLoadBlock: function () { var block = this.request.loadBlock = d.createElement('div'); block.id = 'onAirLoadBlock_' + this.idx; block.className = 'onAirLoadBlock'; return this.block.node.appendChild(block); }, showLoadBlock: function () { var block; if (!(block = this.request.loadBlock)) { block = this.createLoadBlock(); } block.style.display = 'block'; return block; }, hideLoadBlock: function () { var block; if (!(block = this.request.loadBlock)) { block = this.createLoadBlock(); } block.style.display = 'none'; return block; }, setOperations: function () { if ((this.list.itemHeight * this.list.items.length) <= this.block.node.offsetHeight) { this.startScrollTimer = function(){}; return; } this.startScrollTimer(); }, sendRequest: function () { var t = this; (function(){ if (t.scroll.isAction || t.list.mouseFocus) { setTimeout(arguments.callee, 10); } else { t.stopScrollTimer.call(t); t.get.call(t); } })(); }, startScrollTimer: function () { var t = this; return (this.scroll.delayTID !== null) ? null : this.scroll.delayTID = setTimeout(function(){ t.scrolling.call(t); }, this.scroll.delay); }, stopScrollTimer: function (tid) { tid = tid || this.scroll.delayTID; if (tid !== null) { clearTimeout(tid); this.scroll.delayTID = null; } }, scrolling: function (item) { var t = this, amount = this.scroll.amount, nextItem = this.scroll.currentItem + amount, scrollLength, step, scroll = 0, list = this.list.node, height = this.list.itemHeight * amount, handler; this.scroll.isAction = true; if (!this.list.items[this.scroll.currentItem + this.list.visibleItems]) { this.scroll.loop++; if (!this.staticList && this.request.period && this.scroll.loop == this.request.period) { handler = function () { t.scroll.currentScroll = 0; t.scroll.currentItem = 0; t.scroll.loop = 0; t.scroll.isAction = false; t.sendRequest.call(t); }; } else { step = (scrollLength = t.scroll.currentScroll) * (this.scroll.speed / 10); handler = function () { scroll = ((scroll += step) > scrollLength) ? scrollLength : parseInt(scroll); list.style.top = (scroll == scrollLength?'':'-') + (t.scroll.currentScroll - scroll) + 'px'; if (scroll == scrollLength) { t.scroll.currentScroll = 0; t.scroll.currentItem = 0; t.scroll.isAction = false; t.startScrollTimer.call(t); } else { setTimeout(arguments.callee, t.scroll.timeout); } }; } } else { step = (scrollLength = height) * (this.scroll.speed / 10); handler = function () { var px; scroll = ((scroll += step) > scrollLength) ? scrollLength : parseInt(scroll); list.style.top = '-' + (px = (t.scroll.currentScroll + scroll))+'px'; if (scroll == scrollLength) { t.scroll.currentScroll = px; t.scroll.isAction = false; t.startScrollTimer.call(t); } else { setTimeout(arguments.callee, t.scroll.timeout); } }; } this.scroll.delayTID = null; this.scroll.currentItem = nextItem; handler(); }, setItemsAttr: function () { var items = this.list.items, l = items.length, item; while (l--) { item = items[l]; if (this.list.itemHeightSet) { item.style.height = this.list.itemHeightSet + 'px'; } } if (!this.list.itemHeight) { if (this.list.itemHeightSet) { this.list.itemHeight = this.list.itemHeightSet } else { this.list.itemHeight = item.offsetHeight; } } this.list.visibleItems = Math.floor(this.block.height / this.list.itemHeight); return items; }, createBlock: function (id) { var block = this.block.node = d.createElement('div'); block.id = id || this.block.id; block.style.width = this.block.width + (typeof this.block.width === 'string' ? '' : 'px'); block.style.height = this.block.height + (typeof this.block.height === 'string' ? '' : 'px'); block.style.overflow = 'hidden'; block.style.position = 'relative'; this.block.className ? block.className = this.block.className : null; return block; }, createList: function () { var list = this.list.node = d.createElement('ul'); list.id = this.list.id; list.style.position = 'relative'; this.list.className ? list.className = this.list.className : null; return list; }, clearList: function () { var list = this.list.node, items = this.list.items, item; while (item = list.firstChild) { list.removeChild(item); } items.length = 0; list.style.top = ''; this.scroll.currentScroll = 0; this.scroll.currentItem = 0; }, createListItems: function (data, list) { list = list || this.list.node; var i = data.length, items = []; if (this.list.items.length != 0) { this.clearList(); } if (data && i != 0) { while (i--) { items[i] = list.insertBefore(this.createListItem(data[i], i), list.firstChild); } } return this.list.items = items; }, createListItem: function (data, idx, item) { item = item || d.createElement('li'); var className = this.list.itemClass; item.className = (className ? className + ' ' : '') + ((idx % 2) == 0 ? 'odd' : 'even'); item.innerHTML = '' + cutString(data[0], this.list.itemMaxLength, '…') + ''; return item; }, insertListItems: function (list) { list = list || this.list.node; list.style.visibility = 'hidden'; if (this.createListItems(this.data).length != 0) { this.setItemsAttr(); } list.style.visibility = ''; return list; }, create: function () { if (this.idx === null) { return false; } var t = this, block = this.createBlock(this.block.id), scrollStart = function(){ t.list.mouseFocus = false; if (!t.scroll.isAction) { t.startScrollTimer.call(t); } }; block.appendChild(this.createList()); this.parent.appendChild(block); bind(bind(this.list.node, 'mouseover', function(){ t.list.mouseFocus = true; if (!t.scroll.isAction) { t.stopScrollTimer.call(t); } else { setTimeout(arguments.callee, 10); } }), 'mouseout', scrollStart); if (this.staticList) { this.data = this.get(this.staticList); this.insertListItems(); this.setOperations(); } else { this.get(); } } }; onAir.instances = []; onAir.responseScript = function (instanceID, response) { var instance = this.instances[instanceID]; instance.responseHandler.call(response, instance); }; return onAir; })(); /* END onAir part */ /* BEGIN MRP part */ GO.MRP = (function(){ var G = 0, W = this, D = document, H = D.getElementsByTagName("head")[0] || D.documentElement, expando = "MRP_" + now(); function now () { return +new Date; } /* * var suggest = new MRP({ * field: {String|DOMNode} id or DOMNode input * form: [Optional] {String|DOMNode} id or DOMNode field form * onsubmit: [Optional] {Function} onsubmit form handler * wrapper: [Optional] {String|DOMNode} id or DOMNode wrapper area suggest * wrapperId: [Optional] {String} id wrapper node, default "mrp-wrap-[GUID]" * wrapperCln: [Optional] {String} class wrapper node, default "mrp-wrap" * inner: [Optional] {String|DOMNode} id or DOMNode inner area suggest * innerId: [Optional] {String} id inner node, default "mrp-innr-[GUID]" * innerCln: [Optional] {String} class inner node, default "mrp-innr" * itemsId: [Optinal] {String} id each suggest item, default "mrp-item-[GUID]-[ITEM-ID]" * itemsCln: [Optinal] {String} class each suggest item, default "mrp-item" * itemsSelectCln: [Optinal] {String} class selected suggest item, default "mrp-item-select" * itemsLimit: [Optional] {Number} max number suggest item list, default 10 * checkFreq: [Optional] {Number} default 150 * keyLockFreq: [Optional] {Number} default 100 * cacheLimit: [Optional] {Number} default 100 * requestProtocol: [Optinal] * requestHost: [Optinal] * requestPort: [Optinal] * requestPath: [Optinal] * requestQuery: [Optinal], default { callback: "JSONP.cb", cp: function () {return this.valueCurr.length;}, q: function () {return this.valueCurr;} } * requestCharset: [Optinal], default "windows-1251" * correctPosX: [Optinal], default 0 * correctPosY: [Optinal], default 0 * }); */ /** * Конструктор саджестов * @param {Node|String} field Поле, к которому надо прицепить подсказаньки * @param {Object} sets Объект с полями настройки саджестовы * @return {Undefined} Void */ var MRP = function (sets) { /* Если нету настроек вообще, то создаем пустой объект */ sets = sets || {}; /* Если нету данных о поле, то возвращаем false */ if (!sets.field) { return false; } this.guid = G++; /* DOMNode поля, к которому все это дело колдуется. */ this.field = MRP.gee(sets.field); /* DOMNode формы, которой принадлежит поле. */ this.form = MRP.gee(sets.form); this.onsubmit = sets.onsubmit || null; this.ondraw = sets.ondraw || null; this.wrapper = MRP.gee(sets.wrapper); this.wrapperId = this.wrapper && !sets.wrapperId && this.wrapper.id || sets.wrapperId || "mrp-wrap-" + this.guid; this.wrapperCln = this.wrapper && !sets.wrapperCln && this.wrapper.className || sets.wrapperCln || "mrp-wrap"; this.inner = this.wrapper && MRP.gee(sets.inner); this.innerId = this.inner && !sets.innerId && this.inner.id || sets.innerId || "mrp-innr-" + this.guid; this.innerCln = this.inner && !sets.innerCln && this.inner.className || sets.innerCln || "mrp-innr"; this.items = []; this.itemsFilled = []; this.itemsId = sets.itemsId || "mrp-item-" + this.guid + "-"; this.itemsCln = sets.itemsCln || "mrp-item"; this.itemsSelectCln = sets.itemsSelectCln || "mrp-item-select"; this.itemsLimit = sets.itemsLimit || 10; this.itemsCurr = null; /* периодичность проверки поля на изменение содержимого текста */ this.checkFreq = sets.checkFreq || 150; this.keyLockFreq = sets.keyLockFreq || 100; /* Счетчик для кэша */ this._i = 0; /* Кэш - массив. Здесь будет хранится все по индексам. */ this._c = []; /* Кэш - хэш-таблица. Здесь будут хранится ключи к основному кэшу. */ this._h = {}; /* Ограничение размера кэша */ this.cacheLimit = sets.cacheLimit || 100; /* Для отслеживания запросов */ this.valueCurr = ""; this.valuePrev = ""; this.valueExc = null; /* Как форматируем значение поля */ this.getValueCase = sets.getValueCase || "lower"; var location = W.location; /* Настройки для запроса подсказок */ this.request = { protocol: sets.requestProtocol || location.protocol, host: sets.requestHost || location.host, port: sets.requestPort || location.port, path: sets.requestPath || location.pathname, query: sets.requestQuery || { cp: function () { return this.valueCurr.length; }, q: function () { return this.valueCurr; } }, charset: sets.requestCharset || "windows-1251", timeout: sets.requestTimeout || 3000 }; /* Корректировка координат */ this.correctPosX = sets.correctPosX || 0; this.correctPosY = sets.correctPosY || 0; /* Всячискии флаги выполнения или наоборот */ /* Есть ли фокус и поля */ this._focus = false; /* Номер проверки. По сути id таймаута */ this._checking = false; /* Отметка паузы в проверке, она то по сути идет, но ничего не проверяет */ this._paused = false; this._off = false; this._hidden = true; this._firstCorrection = false; this._data = {}; /* Записываем созданный this в кэш экземпляров */ MRP.coll[this.guid] = this; }; MRP.fn = MRP.prototype = { show: function () { MRP.show(this.wrapper); this._hidden = false; }, hide: function () { MRP.hide(this.wrapper); this._hidden = true; }, off: function (enabled) { this._off = !enabled; }, /** * Получает значение поля в данный момент, форматируя его в зависимости с настройками * @return {String} Значение поля */ getValue: function () { var value = this.field.value; switch (this.getValueCase) { case "upper": value = value.toUpperCase(); break; case "lower": value = value.toLowerCase(); break; } return value; }, correctPosition: function () { var coords = MRP.coords(this.field); this.wrapper.style.left = coords.x + this.correctPosX + "px"; this.wrapper.style.top = coords.y + this.field.offsetHeight + this.correctPosY + "px"; }, /** * Отчищает кэш объекты и сбрасывает счетчик */ cacheClear: function () { this._i = 0; this._c = []; this._h = []; }, /** * Добавляет запись в кэш * @param {Object} cacheItem Элемент, который следует добавить в кэш. он может быть почти любого вида, но обязательно сожержать поле hid. Также добавиться еще одно - cid, автоматом * @return {Number} id добавленного элемента в кэше */ cacheWrite: function (cacheItem) { if (this._i == this.cacheLimit) { this.cacheClear(); } this._c[this._h[cacheItem.hid || ""] = cacheItem.cid = this._i] = cacheItem; return this._i++; }, /** * Получает содержимое кэша по заданному индексу * @param {String|Number} cid Индентификатор поиска в массиве (Number) или в хэше (String) * @return {Object} Содержимое кэша по заданному cid или null, если такого не было найдено */ cacheRead: function (cid) { return (cid = this.cacheCheck(cid)) !== false && this._c[cid] || null; }, /** * Проверяет, есть ли позиция в кэше. * @param {String|Number} cid Индентификатор поиска в массиве (Number) или в хэше (String) * @return {Number|Boolean} id в массиве, если найдено, в ином случае false */ cacheCheck: function (cid) { var answer = false; if (typeof cid === "number" && this._c[cid]) { answer = cid; } else if (typeof cid === "string") { if (Object.prototype.hasOwnProperty(cid) && Object.prototype.hasOwnProperty.call(this._h, cid)) { answer = this._h[cid]; } else { answer = (answer = this._h[cid]) !== undefined && answer; } } return answer; }, /** * Выбирает саджест по порядковому номеру в массиве * @param {Number} id Идентификатор элемента в массиве с актуальными подсказками * @return {Object} MRP */ itemSelect: function (id) { var item; if (this.itemsCurr !== null) { item = this.items[this.itemsFilled[this.itemsCurr]]; if (item) { item.className = item.className.replace(" " + this.itemsSelectCln, ""); } } if (id !== null) { item = this.items[this.itemsFilled[id]]; if (item) { item.className += " " + this.itemsSelectCln; } } this.itemsCurr = id; return item || null; }, /** * Выбирает саджест с заданым шагом от исходного * @param {Number} step Шаг, через который следует выбрать элемент с подсказкой. * Может быть как положительным, так и отрицательным, но никак не 0. * @return {Object} MRP */ itemSelectStep: function (step) { var length = this.itemsFilled.length, itemsCurr = this.itemsCurr, itemsNext; if (itemsCurr === null) { if (step > 0) { itemsNext = 0; } else { itemsNext = length - 1; } } else { itemsNext = itemsCurr + step; if (step > 0) { if (itemsNext > length) { itemsNext = itemsNext - length - 1; } } else { if (itemsNext < 0) { itemsNext = length + 1 + itemsNext; } } } return this.itemSelect(itemsNext); }, itemsReset: function () { this.itemSelect(null); this.itemsFilled = []; }, /** * Инициализирует подсказки. Прикрепляет все обработчики, создает поля и все самое начальное * @return {Object|Boolean} Вернет экземпляр объекта или же false, если что-то пошло не так */ init: function () { /* Прячем this в замыкании для event-хендлеров */ var _this = this; /* Проверяем, нашлося ли поле при выхове конструктора */ if (!this.field) { return false; } /* Если форма не была получена по ид или ее даже в настройках не было, то ищем ее самостоятельно */ if (!this.form) { var form = this.field; do { form = form.parentNode; } while (form && form.nodeName !== "FORM"); this.form = form; } /* Если вдруг так получилось формы все равно не получено, то возвращаем функу */ if (!this.form) { return false; } /* Выключаем автозаполнение у поля */ MRP.attr(this.field, "autocomplete", "off"); /* Получаем настоящее значение поля в момент инициализации */ this.valueCurr = this.valuePrev = this.getValue(); /* ### BIND ### */ /* Добавляем обработчик для фокуса на поле */ MRP.bind(this.field, "focus", function(){ /* Делаем отметку, что поле получило фокус */ _this._focus = true; /* Определяем функу цикличной проверки поля на изменение сожержимого */ function LoopChecking () { if (!_this._off) { if (!_this._paused) { _this.valueCurr = _this.getValue(); if (_this.valuePrev !== _this.valueCurr) { if (_this.valueExc !== _this.valueCurr) { /* Проверяем строку на пустоту, если она пуста, то скрываем блок подсказок */ if (!MRP.isEmptyStr(_this.valueCurr)) { _this.getData(_this.valueCurr); } else { _this.hide(); } _this.valuePrev = _this.valueCurr; _this.valueExc = null; } } } } _this._checking = setTimeout(LoopChecking, _this.checkFreq); } /* Запускаем ее, а дальше она сама все сделает */ LoopChecking(); }); var stayVisible = false; MRP.bind(this.field, "blur", function(){ /* Снимаем отметку о полученом полем фокусе */ _this._focus = false; /* Стопим таймаут проверки */ clearTimeout(_this._checking); setTimeout(function(){ if (!stayVisible) { _this.valuePrev = _this.valueCurr; _this.valueExc = ""; _this.hide(); } }, 200); }); var keyLock = false; MRP.bind(this.field, MRP.ua.opera ? "keypress" : "keydown", function(event){ if (keyLock) { return; } keyLock = true; setTimeout(function(){ keyLock = false; }, _this.keyLockFreq); var keyCode = event.keyCode || event.which, keyHandler = _this.keys[keyCode]; if (keyHandler) { keyHandler.call(_this); } }); var submitHandlerPr = this.onsubmit, submitHandler = this.form.onsubmit, formSubmit = submitHandlerPr; if (submitHandler) { formSubmit = submitHandlerPr || submitHandler; this.form.onsubmit = null; } this.onsubmit = function (event) { var eventType = event ? "keydown" : "click", enter = true, item = _this.itemsFilled[_this.itemsCurr]; if (item !== undefined) { if ((item = _this._data.items[item]) !== undefined && !_this._hidden) { enter = MRP.getItemPrefs(item.type).enter.call(_this, item, eventType); } } if (enter === false || formSubmit && formSubmit.call(this, eventType) === false) { return false; } else { if (!event) { _this.form.submit(); } return true; } }; MRP.bind(this.form, "submit", this.onsubmit); /* Строим, дополняем, украшаем лю... главные врапперы для результатов */ var wrapper = this.wrapper, inner = this.inner; if (!wrapper) { wrapper = MRP.ce("div"); this.wrapper = wrapper; this.hide(); D.body.appendChild(wrapper); } if (!inner) { inner = MRP.ce("div"); this.inner = wrapper.appendChild(inner); } MRP.attr(wrapper, { id: this.wrapperId, "class": this.wrapperCln }); MRP.attr(inner, { id: this.innerId, "class": this.innerCln }); MRP.bind(W, "resize", function () { _this.correctPosition(); }); /* А тут делаем уже непосредственно сами блоки результов и создаем коллекцию из них */ var counter = 0, item; while (counter < this.itemsLimit) { item = this.items[counter] = this.inner.appendChild(MRP.ce("div", { id: this.itemsId + counter, "class": this.itemsCln })); MRP.bind(item, "mousemove", function () { _this.itemSelect(this._mrp); }); MRP.bind(item, "click", function (event, target) { var submit = true, item = _this._data.items[this._mrp]; while (target && target.id !== _this.wrapperId) { if (target.rel === "mrp-nosubmit") { submit = false; break; } target = target.parentNode; } if (submit) { _this.field.value = item.text; _this.onsubmit.call(_this.form); } else { stayVisible = true; } }); counter++; } /* Если все хорошо и функа дошла до сюда, то возвращаем экземпляр */ return this; } }; /* Вспомогательный функционал */ /** * Функция обхода объекта(массива в частном случае) * @param {Array|Object} obj Массив или объект, который следует обойти * @param {Function} iterFn Callback-функция вызываемая при каждой итерации. Контекстом вызова является значение ячейки в таблице или свойства/метода в объекте. 2 передаваемых параметра: индекс и значение * @return {Number|String} последний индекс в итерации */ MRP.each = function (obj, iterFn /* TODO: , iterFnArgs */) { var idx = 0, length, item; if ((length = obj.length) !== undefined) { while (idx < length) { item = obj[idx]; if (iterFn.call(item, idx++, item) === false) { break; } } } else { for (idx in obj) { item = obj[idx]; if (iterFn.call(item, idx, item) === false) { break; } } } return idx; }; /** * Дополняет исходный объект thisObj, дополнительными полями из объекта extObj, если thisObj не указано, то дополняется контекст выхова метода this * @param {Object} extObj Дополняющий объект * @param {Object} thisObj Исходный объект, который следует дополнить [Опционально] * @return {Object} Дополненный объект */ MRP.extend = MRP.fn.extend = function (extObj, thisObj) { thisObj = thisObj || this; MRP.each(extObj, function(prop, value){ thisObj[prop] = value; }); return thisObj; }; /** * Синоним document.getElementById * @param {String} id идентификатор элемента в документе * @return {Node|Null} DOMNode или Null, если не найдено */ MRP.ge = function (id) { return D.getElementById(id); }; MRP.gee = function (idOrNode) { if (idOrNode) { if (typeof idOrNode === "string") { return MRP.ge(idOrNode); } else if (idOrNode.nodeName && idOrNode.nodeType) { return idOrNode; } } return null; }; /** * Создает Node с именем name и атрибутами attrs * @param {String} name nodeName (тег) * @param {Object} attributes Атрибуты создаваемого элемента, например {id: 'foo', title: 'bar'} * @return {Node} Созданный элемент с атрибутами attrs, если таковые были */ MRP.ce = function (name, attributes) { var node = D.createElement(name); if (attributes) { MRP.attr(node, attributes); } return node; }; /** * Добавляем обработчик (handler) по событию (event) к элементу (elem) * @param {Node} elem Элемент * @param {String} event Собитие, без приставки "on", т.е. "click", "blur", "load", ... * @param {Function} handler Обработчик по событию. Если функция вернет false, то у элемента будет отменено действие по умолчанию * @return {Node} Элемент, к которому добавлялся обработчик */ MRP.bind = function (elem, event, handler) { function fn (evt) { evt = evt || W.event; if (handler.call(elem, evt, evt.target || evt.srcElement) === false) { if (typeof evt.preventDefault !== "undefined") { evt.preventDefault(); } else { evt.returnValue = false; } } } if (typeof elem.addEventListener !== "undefined") { elem.addEventListener(event, fn, false); } else if (typeof elem.attachEvent !== "undefined") { elem.attachEvent("on" + event, fn); } return elem; }; var quot1 = /"/g, quot2 = /'/g, emptyStr = /^\s*$/; MRP.escape = { /** * Преобразовывает строку в URI-последовательность (utf8) * @param {String} str Исходная строка * @return {String} Преобразованная строка */ uri: function (str) { if (W.encodeURIComponent) { str = W.encodeURIComponent(str); } else { str = W.escape(str); } return str; }, /** * Эскейпит html спец. символы в строку * @param {String} str Исходная строка * @return {String} Преобразованная строка */ html: function (str) { return MRP .ce("p") .appendChild(D.createTextNode(str)) .parentNode .innerHTML .replace(quot1, """) .replace(quot2, "'"); } }; /** * Проверяет строку на пустоту * @return {Boolean} Возвращает true, если строка пустая или состояит из одних пробелов, иначе false */ MRP.isEmptyStr = function (str) { return emptyStr.test(str || ""); } /** * Определяет координаты (px) элемента относительно левого правого угла документа * @param {Node} elem Элемент, координаты которого нужно узнать * @return {Object} объект с координатами {x: _left_, y: _top_} */ MRP.coords = function (elem) { var left = 0, top = 0; if (typeof elem.getBoundingClientRect !== "undefined") { var box = elem.getBoundingClientRect(), body = D.body, docElem = D.documentElement; left = box.left + (W.pageXOffset || docElem.scrollLeft || body.scrollLeft) - (docElem.clientLeft || body.clientLeft || 0); top = box.top + (W.pageYOffset || docElem.scrollTop || body.scrollTop) - (docElem.clientTop || body.clientTop || 0); } else { while (elem) { left += elem.offsetLeft; top += elem.offsetTop; if (elem.offsetParent === null) { if (elem.nodeName === 'BODY') { elem = null; } else { elem = elem.parentNode; } } if (elem !== null) { elem = elem.offsetParent; } } } return { x: left, y: top }; }; /** * User-Agent * @type {Object} */ var UserAgent = new String(navigator.userAgent.toLowerCase()); /* Дополняем строковой объект User-Agent */ MRP.ua = MRP.extend({ ie: UserAgent.indexOf("msie") != -1, ie6: UserAgent.indexOf("msie 6") != -1, ie7: UserAgent.indexOf("msie 7") != -1, ie8: UserAgent.indexOf("msie 8") != -1, ff: UserAgent.indexOf("firefox") != -1, opera: UserAgent.indexOf("opera") != -1, chrome: UserAgent.indexOf("applewebkit") != -1 && UserAgent.indexOf("chrome") != -1 }, UserAgent); /* Дополнительные переменные для проверок (Спижено из jQuery) */ var attrStyleFloat = UserAgent.ie ? "styleFloat" : "cssFloat", attrProps = { "for": "htmlFor", "class": "className", "float": attrStyleFloat, cssFloat: attrStyleFloat, styleFloat: attrStyleFloat, readonly: "readOnly", maxlength: "maxLength", cellspacing: "cellSpacing", rowspan: "rowSpan", tabindex: "tabIndex" }; /** * Получает значение аттрибута у элемента, если value не передано, если же передано, то меняет у аттрибута значение * @param {Node} elem Элемент * @param {String|Object} attribute Имя аттрибута * @param {String} value Значение аттрибута [Опционально] * @return {String|Void} Возвращает значение аттрибута, если функция вызввалась без указания значения, в ином случае ничего не возвращает */ MRP.attr = function (elem, attribute, value) { if (typeof attribute === "object") { MRP.each(attribute, function (attribute, value) { MRP.attr(elem, attribute, value); }); } else { if (value) { MRP.attr.st.call(elem, attribute, value); } else { return MRP.attr.gt.call(elem, attribute); } } }; MRP.attr.gt = function (attribute) { var value; if (attribute === "style") { if (MRP.ua.ie) { value = this.style.getAttribute("cssText"); } else { value = this.getAttribute(attribute); } } else { if (value = attrProps[attribute]) { value = this[value]; } else { value = this.getAttribute(attribute); } } return value; }; MRP.attr.st = function (attribute, value) { if (attribute === "style") { if (MRP.ua.ie) { this.style.setAttribute("cssText", value); } else { this.setAttribute(attribute, value); } } else { if (attrProps[attribute]) { this[attrProps[attribute]] = value; } else { this.setAttribute(attribute, value); } } }; MRP.shows = function (elem) { return elem.style.display !== "none"; }; MRP.hidden = function (elem) { return elem.style.display === "none"; }; MRP.show = function (elem) { if (!MRP.shows(elem)) { elem.style.display = ""; } }; MRP.hide = function (elem) { if (!MRP.hidden(elem)) { elem.style.display = "none"; } }; /** * Создает URI строку из объекта. н. {foo: 'bar', test: '1'} будет преобразовано в foo=bar&test=1 * @param {Object} obj Объект с парами key: value, где он преобразуется так key=value * @param {Object} context [Optional] Контекст вызова функции в value * @return {String} созданная URI строка */ MRP.createQuery = function (obj, context) { var idx = 0, query = []; context = context || this; MRP.each(obj, function(qArgName, qArgValue){ if (!obj.hasOwnProperty(qArgName)) { return; } if (idx != 0) { query[idx++] = "&"; } query[idx++] = qArgName + "="; if (qArgValue.call) { query[idx++] = MRP.escape.uri(qArgValue.call(context)); } else { query[idx++] = MRP.escape.uri(qArgValue); } }); return query.join(""); }; /** * Строит url-строку пригодную для AJAX запросов или для SCRIPT транспорта */ MRP.createUrl = function (lego) { var i = 0, url = []; if (lego.host) { url[i++] = lego.protocol + "//"; url[i++] = lego.host; if (lego.port && lego.port != 80) { url[i++] = ":" + lego.port; } if (!lego.path) { url[i++] = "/"; } } if (lego.path) { url[i++] = "/" + lego.path; } if (lego.query) { url[i++] = "?" + MRP.createQuery(lego.query, this); } return url.join(""); }; /** * Instances cache * @type {Array} */ MRP.coll = []; function BasicCallback (data) { if (MRP.isEmptyStr(this.valueCurr)) { this.hide(); return; } var _this = this, filledCounter = 0; this.itemsReset(); MRP.each(this.items, function (idx) { var sItem, sType, sInner; if ((sItem = data.items[idx]) && (sType = MRP.getItemPrefs(sItem.type)) && (sInner = sType.draw.call(_this, sItem)) !== false) { this.innerHTML = sInner; _this.itemsFilled[this._mrp = filledCounter++] = idx; MRP.show(this); } else { MRP.hide(this); } }); if (filledCounter) { if (this.ondraw) { this.ondraw(); } if (!this._firstCorrection) { this.correctPosition(); this._firstCorrection = true; } this.show(); } else { this.hide(); } } MRP.fn.extend({ /** * Получаем данные по данному запросу * @param {String} query Строка запроса (значение поля) [Опционально] */ getData: function (query, callback) { var instance = this, data; query = query || this.valueCurr; callback = callback || BasicCallback; /* Проверяем, есть ли в кэше этот запрос */ if (data = this.cacheRead(query)) { callback.call(this, this._data = data.response, true); } else { MRP.JSONP(MRP.createUrl.call(this, this.request), { callback: function () { instance.cacheWrite({ hid: query, response: this }); if (this.terms.query === instance.valueCurr) { callback.call(instance, instance._data = this, false); } }, charset: this.request.charset, timeout: this.request.timeout }); } }, keys: { 13: function () { // ENTER var _this = this; setTimeout(function(){ _this.hide(); }, 200); }, 27: function () { // ESC var _this = this; this.hide(); if (MRP.ua.opera) { setTimeout(function(){ _this.field.value = _this.valuePrev; }, 10); } else { this.field.value = this.valuePrev; } }, 37: function () { // LEFT ARROW }, 38: function () { // UP ARROW if (!this._hidden) { if (this.itemSelectStep(-1)) { var item, id = this.itemsFilled[this.itemsCurr]; if (id !== undefined) { item = this._data.items[id]; MRP.getItemPrefs(item.type).select.call(this, item); } } else { this.field.value = this.valuePrev; } } }, 39: function () { // RIGHT ARROW if (!this._hidden) { this.valueExc = null; } }, 40: function () { // DOWN ARROW if (!this._hidden) { if (this.itemSelectStep(1)) { var item, id = this.itemsFilled[this.itemsCurr]; if (id !== undefined) { item = this._data.items[id]; MRP.getItemPrefs(item.type).select.call(this, item); } } else { this.field.value = this.valuePrev; } } else { this.getData(this.valuePrev); } } } }); /* ### JSONP ### */ var JSONP_ID = 1; MRP.JSONP = function (url, sets) { sets = sets || {}; var timeout = sets.timeout, timeoutId = null, callback = sets.callback || null, callbackName = sets.callbackName || (expando + JSONP_ID++), callbackArgs = sets.args || []; if (callback) { W[callbackName] = function (response) { if (callbackArgs.length > 2) { callback.apply(response, callbackArgs); } else { callback.call(response, callbackArgs[0], callbackArgs[1]); } if (timeout) { clearTimeout(timeoutId); } if (MRP.ua.ie) { W[callbackName] = undefined; } else { delete W[callbackName]; } }; } url += [ /(\?).*$/.test(url) ? "&" : "?", "callback=", callbackName ].join(""); var script = MRP.ce("script", { type: "text/javascript", charset: sets.charset, src: url }); script.onreadystatechange = function() { if (this.readyState === "complete") { try { H.removeChild(script); } catch (e) {} } }; script.onload = function (event) { if (MRP.ua.opera) { try { (new Function("return (" + (event.srcElement || event.target).innerHTML + ")"))(); } catch (e) {} } H.removeChild(script); }; setTimeout(function () { H.insertBefore(script, null) }, 0); if (timeout) { timeoutId = setTimeout(function () { if (script && script.parentNode) { H.removeChild(script); } if (callback && W[callbackName]) { if (MRP.ua.ie) { W[callbackName] = undefined; } else { delete W[callbackName]; } } }, timeout); } }; /* Добавляем функционал шаблонов */ var itemsPrefs = {}; MRP.getItemPrefs = function (name) { return itemsPrefs[name] || null; }; MRP.setItemPrefs = function (name, prefs) { itemsPrefs[name] = MRP.extend(prefs, { draw: function (item) { return item.text; }, enter: function () { }, select: function (item) { this.valueExc = this.field.value = item.text; } }); return this; }; /* Удаленный конструктор настроек */ MRP.remote = function (url, initCallback) { this.build = function (sets) { MRP.call(this, sets); if (initCallback) { initCallback.call(this); } else { this.init(); } }; MRP.JSONP(url); }; MRP.remote.prototype = MRP.fn; return MRP; })(); /* END MRP part */ GO.win.GO = GO; GO.win.onAirWow = GO.onAir; GO.win.MRP = GO.MRP; })(); /* go_harmony End */