/*!
 * @package js-common
 * @type js
 *
 * @file xtype.js
 * @file ../JsHttpRequest.js
 * @file base.js
 *
 * @author Nesterenko Dmitry (chebur.mail@gmail.com)
 */
Object.extend(Array.prototype,{diff:function(){return $A(arguments).inject(this,function(d,c){if(!Object.isArray(c)){c=[c]}return d.inject([],function(a,b){if(!c.include(b)){a.push(b)}return a})})}});var Xtype={};Object.extend(Prototype,{trueFunction:function(){return true},falseFunction:function(){return false}});document.ready=(function(b){document.observe("dom:loaded",function(){b.invoke("call",document);b.clear();document.ready=function(a){a.bind(document).defer()}});return function(a){b.push(a)}})([]);Object.extend(Hash.prototype,{diff:function(){return $A(arguments).inject(this,function(d,c){if(!Object.isHash(c)){c=$H(c)}return d.inject($H(),function(b,a){if(d.get(a.key)!=c.get(a.key)){b.set(a.key,a.value)}return b})})}});Math.rand=function(c,d){return d?Math.floor(Math.random()*(d-c+1))+c:Math.floor(Math.random()*(c+1))};Object.isEmpty=function(b){if(Object.isElement(b)){return b.empty()}else{if(Object.isHash(b)||Object.isArray(b)){return !b.toArray().length}else{if(Object.isNumber(b)){return false}else{return !b}}}};Xtype.Deferred=Class.create({initialize:(function(){var b=1;return function(a){this._chain=[];this._id=b++;this._fired=-1;this._paused=0;this._results=[null,null];this._canceller=a;this._silentlyCancelled=false}})(),inspect:function(){var b={"-1":"unfired","0":"success"}[this._fired]||"error";return"#<Deferred:("+this._id+", "+b+")>"},cancel:function(){if(this._fired==-1){if(this._canceller){this._canceller(this)}else{this._silentlyCancelled=true}if(this._fired==-1){this.errback(new Error(this.inspect()))}}else{if(this._fired==0&&(this._results[0] instanceof Xtype.Deferred)){this._results[0].cancel()}}},_resback:function(b){this._fired=(b instanceof Error)+0;this._results[this._fired]=b;this._fire()},_check:function(){if(this._fired!=-1){if(!this._silentlyCancelled){throw new Error("already called!")}this._silentlyCancelled=false;return}},callback:function(b){this._check();this._resback(b)},errback:function(b){this._check();if(!(b instanceof Error)){b=new Error(b)}this._resback(b)},addBoth:function(b){return this.addCallbacks(b,b)},addCallback:function(b){return this.addCallbacks(b)},addErrback:function(b){return this.addCallbacks(null,b)},addCallbacks:function(d,c){this._chain.push([d,c]);if(this._fired>=0){this._fire()}return this},_fire:function(){var n=this._chain;var k=this._fired;var o=this._results[k];var f=this;var j=null;while(n.length>0&&this._paused===0){var l=n.shift()[k];if(!l){continue}try{var o=l(o);k=(o instanceof Error)+0;if(o instanceof Xtype.Deferred){j=function(a){f._resback(a);f._paused--;if(f._paused===0&&f._fired>=0){f._fire()}};this._paused++}}catch(m){k=1;o=m}}this._fired=k;this._results[k]=o;if(j&&this._paused){o.addBoth(j)}}});Xtype.Logger={};Abstract.Logger=Class.create({defaultLevel:"debug",log:function(d,c){this[c||this.defaultLevel](d)}});["debug","info","warn","error"].each(function(b){Abstract.Logger.prototype[b]=function(a){this._log({date:new Date,message:a,level:b})}});Xtype.Logger.Null=Class.create(Abstract.Logger,{_log:Prototype.emptyFunction});Xtype.Logger.Memory=Class.create(Abstract.Logger,{memory:[],_log:function(b){this.memory.push(b)}});Xtype.Logger.Console=Class.create(Abstract.Logger,{_log:function(b){console[b.level](b.message)}});Xtype.Logger.Element=Class.create(Abstract.Logger,{formatter:'<pre class="#{level}">#{message}</pre>',initialize:function(b){if(!b){b=document.body.appendChild(new Element("div",{"class":"xtype-logger"}))}this.element=$(b)},_log:function(b){b.message=(Try.these(function(){b.message=b.message.inspect().escapeHTML()})||b.message);this.element.insert(this.formatter.interpolate(b))}});Xtype.Logger.Default=(window.console&&window.console.log&&window.console.debug&&window.console.info&&window.console.warn&&window.console.error)?Xtype.Logger.Console:Xtype.Logger.Element;Xtype.Profiler=Class.create(Hash,{initialize:function($super){$super();this._img=new Image()},start:function(b){this.set(b,(new Date()).getTime());return this},finish:function(b){this.set(b,(new Date()).getTime()-this.get(b));return this},profile:function(c,d){if(Object.isFunction(d)){this.start(c);d();this.finish(c)}return this},send:function(d,c){this._img.src=d+"?"+this.toQueryString();if(c){this._object={}}return this}});Object.extend(Form.Methods,{getValueOf:function(c,d){return Form.serializeElements(c.getElements(d),true)[d]},getElements:Form.Methods.getElements.wrap(function(h,i,g){if(g){var f=i.elements[g];return Object.isElement(f)?[f]:$A(f)}else{return h(i)}}),clone:function(d){var c=$(d.cloneNode(false));c.id="";c.style.display="none";document.body.appendChild(c);$H(d.serialize(true)).each(function(b){var a=new Element("input",{type:"hidden",name:b.key,value:b.value});c.insert(a);delete a});return c}});Element.addMethods();Form.BlurObserver=Form.Element.BlurObserver=Class.create(Abstract.EventObserver,{registerCallback:function(b){Event.observe(b,"blur",this.callback.bindAsEventListener(this))},getValue:Prototype.K});Form.ChangeObserver=Form.Element.ChangeObserver=Class.create(Abstract.EventObserver,function(){var b={};return{onElementEvent:function(j){var a=j.element(),k=a.form,i=k.getValueOf(a.name),h=b[k.identify()];if(h[a.name]!=i){j.memo={lastValue:h[a.name]};this.callback(j);h[a.name]=i}},registerCallback:function(m){var a={checkbox:"click",radio:"click","select-multiple":"change","select-one":"change",text:"keyup"},l=m.type.toLowerCase(),k=$(m.form),i=k.identify(),j=b[i]||{};j[m.name]=k.getValueOf(m.name);b[i]=j;if(l=="text"){m.writeAttribute("autocomplete","off")}m.observe(a[l]||"keyup",this.onElementEvent.bindAsEventListener(this))},getValue:Prototype.emptyFunction}}());Xtype.Filter={};Xtype.Filter.register=function(c,d){c=c.camelize();d.prototype.getName=function(){return c};return Xtype.Filter[c]=d};Abstract.Filter=Class.create({initialize:function(b){this._variables={};Object.extend(this._variables,b)}});Xtype.Filter.register("Alnum",Class.create(Abstract.Filter,{filter:function(c){var d=new RegExp("[|\\~*\"!+\\-:><./,;^@'_{=}`()\\[\\]&%$#?"+(!this._variables.whitespace?"\\s":"")+"]","g");return c.replace(d,"")}}));Xtype.Filter.register("Digits",Class.create(Abstract.Filter,{filter:function(b){return b.replace(/[^0-9]+/g,"")}}));Xtype.Filter.register("Float",Class.create(Abstract.Filter,{filter:function(d){var c=d.replace(/[^0-9,.]+/g,"").replace(/,/g,".").replace(/[\.|,]$/,"").split(".");return[c.shift(),c.join("")||null].compact().join(".")}}));Xtype.Filter.register("StringTrim",Class.create(Abstract.Filter,{filter:function(b){return b.strip()}}));Xtype.Filter.register("Functional",Class.create(Abstract.Filter,{initialize:function($super,b){$super(b);this.filter=b.filter}}));Xtype.Filter.register("Chain",Class.create({initialize:function(b){if(b&&b.filters){this.setFilters(b.filters)}},setFilter:function(k,m){if(Object.isString(k)){var i=Xtype.Filter[k];k=new i(m)}var j=this.getFilters(),h=k.getName();j.push(k);for(var l=0;l<j.length-1;++l){if(j[l].getName()==h){j[l]=k;j.pop();break}}this._filters=j;return this},setFilters:function(b){b.each(function(f){var g=f;if(Object.isArray(f)){var g=f.shift(),a=f[0]}this.setFilter(g,a||{})},this.cleanFilters());return this},getFilters:function(){if(Object.isUndefined(this._filters)){this.cleanFilters()}return this._filters.clone()},getFilter:function(b){return this._filters.find(function(a){return a.getName()==b})},cleanFilters:function(){this._filters=[];return this},filter:function(b){return this.getFilters().inject(b,function(a,d){return d.filter(a)})}}));Xtype.Validate={};Xtype.Validate.register=function(c,d){c=c.camelize();d.prototype.getName=function(){return c};return Xtype.Validate[c]=d};Abstract.Validate=Class.create({initialize:function(b){if(b&&Object.isString(b.template)){this.setTemplate(b.template)}this._variables={};Object.extend(this._variables,b)},setValue:function(b){this._value=b;return this.cleanError()},getValue:function(){return this._value},setTemplate:function(b){this._template=b;return this},getTemplate:function(){return this._template},setError:function(b){if(Object.isUndefined(b)){b=Object.extend(this._variables,{value:this._value})}this._hasError=true;this._error=this._template.interpolate(b);return this},getError:function(){return this._error},hasError:function(){if(Object.isUndefined(this._hasError)){this._hasError=false}return this._hasError},cleanError:function(){this._hasError=false;this._error=undefined;return this}});Xtype.Validate.register("Email",Class.create(Abstract.Validate,{_template:"Address is not valid.",isValid:function(a){this.setValue(a);var g=a.split("@"),h=new RegExp("^[A-Z0-9!#$%&'*+/=?^_`{|}~-]([A-Z0-9!#$%&'*+/=?^_`{|}~.-]*[A-Z0-9!#$%&'*+/=?^_`{|}~-])?$","i"),d=new RegExp("([A-Z0-9-]+.)+[A-Z]{2,6}$","i");var c=g[0],f=g[1];if(!c||!f||!c.match(h)||!f.match(d)){this.setError();return false}return true}}));Xtype.Validate.register("LessThan",Class.create(Abstract.Validate,{_template:"Value is not less than #{max}.",isValid:function(b){this.setValue(b);if(this._variables.strict&&b.length>=this._variables.max){this.setError();return false}else{if(!this._variables.strict&&b.length>this._variables.max){this.setError();return false}}return true}}));Xtype.Validate.register("GreaterThan",Class.create(Abstract.Validate,{_template:"Value is not greater than #{min}.",isValid:function(b){this.setValue(b);if(this._variables.strict&&b.length<=this._variables.min){this.setError();return false}else{if(!this._variables.strict&&b.length<this._variables.min){this.setError();return false}}return true}}));Xtype.Validate.register("NotEmpty",Class.create(Abstract.Validate,{_template:"Value can't be empty.",isValid:function(b){this.setValue(b);if(Object.isEmpty(b)){this.setError();return false}return true}}));Xtype.Validate.register("Alnum",Class.create(Abstract.Validate,{_template:"Value has not only alphabetic and digit characters.",initialize:function($super,d){$super(d);var c=new Xtype.Filter.Alnum;c._variables.whitespace=this._variables.whitespace;this._variables.filter=c},isValid:function(b){this.setValue(b);if(b!==this._variables.filter.filter(b)){this.setError();return false}return true}}));Xtype.Validate.register("Digits",Class.create(Abstract.Validate,{_template:"Value contains not only digit characters.",initialize:function($super,d){$super(d);var c=new Xtype.Filter.Digits;this._variables.filter=c},isValid:Xtype.Validate.Alnum.prototype.isValid}));Xtype.Validate.register("Identical",Class.create(Abstract.Validate,{_template:"Values do not match.",isValid:function(b){this.setValue(b);if(this._variables.target!==b){this.setError();return false}return true}}));Xtype.Validate.register("Regexp",Class.create(Abstract.Validate,{_template:"Value does not match against pattern",isValid:function(b){this.setValue(b);if(""!==b.replace(this._variables.regexp,"")){this.setError();return false}return true}}));Xtype.Validate.register("Functional",Class.create(Abstract.Validate,{isValid:function(b){this.setValue(b);if(!this._variables.validator.apply(this,[b])){this.setError();return false}return true}}));Xtype.Validate.register("Remote",Class.create(Abstract.Validate,{_template:"Remote validator failed.",initialize:function($super,b){$super(Object.extend({parameters:{},onSuccess:function(a){return true},onFailure:function(a){return false}},b))},isValid:function(i){var f=this.setValue(i),h=this._variables;var g=new Xtype.Deferred;g.addCallbacks(function(a){var b=h.onSuccess(a,f);if(b===false){f.setError()}return b},function(a){return h.onFailure(a,f)});new Ajax.Request(h.url,Object.extend(Object.clone(h),{parameters:$H(h.parameters).merge({value:i}),onSuccess:function(a){g.callback(a)},onFailure:function(a){f.setError();g.errback(a)}}));return g}}));Xtype.Validate.register("Timeout",Class.create(Abstract.Validate,{_template:"Timeout validator failed.",initialize:function($super,b){$super(Object.extend({timeout:1000},b))},isValid:function(c){this.setValue(c);var d=new Xtype.Deferred;window.setTimeout(function(){d.callback(true)},this._variables.timeout);return d}}));Xtype.Validate.Chain=Class.create({initialize:function(b){if(b&&b.validators){this.setValidators(b.validators)}},setValidator:function(k,m,j){if(Object.isString(k)){var o=Xtype.Validate[k];k=new o(m)}k.breakChain=j||false;var i=this.getValidators(),n=k.getName();i.push(k);for(var l=0;l<i.length-1;++l){if(i[l].getName()==n){i[l]=k;i.pop();break}}this._validators=i;return this},setValidators:function(b){b.each(function(g){var h=g,a=h.breakChain;if(Object.isArray(g)){var h=g.shift(),i=g.shift(),a=g[0]}this.setValidator(h,i||{},a)},this.cleanValidators());return this},getValidators:function(){if(Object.isUndefined(this._validators)){this.cleanValidators()}return this._validators.clone()},getValidator:function(b){return this._validators.find(function(a){return a.getName()==b})},cleanValidators:function(){this._validators=[];return this},setError:function(d,c){this._errors=this.getErrors();this._errors.set(d,c);this._hasErrors=true;return this},setErrors:function(c){var d=Object.isArray(c);if(!d){c=$H(c)}c.each(function(a){this.setError(d?a[0]:a.key,d?a[1]:a.value)},this.cleanErrors());return this},getErrors:function(){if(Object.isUndefined(this._errors)){this.cleanErrors()}return this._errors.clone()},hasErrors:function(){if(Object.isUndefined(this._hasErrors)){this._hasErrors=false}return this._hasErrors},cleanErrors:function(){this._hasErrors=false;this._errors=$H();return this},isValid:function(h){var i=new Xtype.Deferred,f=this.cleanErrors(),g;this.getValidators().each(function(a){i.addCallback(function(b){if(g){return b}var d=a.isValid(h);if(d instanceof Xtype.Deferred){d.addCallback(function(l){if(l&&b){return true}var m=a.getName();f.setError(m,m==="Chain"?a.getErrors():[a.getError()]);return false});return d}if(!d){b=false;var c=a.getName();f.setError(c,c==="Chain"?a.getErrors():[a.getError()]);g=!!a.breakChain}return b})});i.callback(true);return i}});Xtype.FormManager={Element:Class.create(Xtype.Validate.Chain,function(){function b(a){return $w(a.getClassElement().className).diff(a.getValidators().inject([],function(f,g){f.push(g.getName().underscore().dasherize());return f}).concat(["not-empty","invalid","valid"]))}return{initialize:function(f,g){f=this.element=$(f);var a=this.setOptions(g);new Form.Element.BlurObserver(f,function(c){a.fire("blur")});new Form.Element.ChangeObserver(f,function(c){a.fire("change")})},setOptions:function(a){a=Object.extend({classElement:this.element,validators:this.getValidators(),filters:this.getFilters(),required:this.getRequired(),allowEmpty:this.getAllowEmpty(),autoInsertNotEmpty:this.getAutoInsertNotEmpty()},a);return this.setClassElement(a.classElement).setValidators(a.validators).setFilters(a.filters).setRequired(a.required).setAllowEmpty(a.allowEmpty).setAutoInsertNotEmpty(a.autoInsertNotEmpty)},setClassElement:function(a){this._classElement=$(a);return this},getClassElement:function(){return this._classElement},getRequired:function(){if(Object.isUndefined(this._required)){this._required=false}return this._required},setRequired:function(a){this._required=a;this.getClassElement()[(a?"add":"remove")+"ClassName"]("required");return this},getAllowEmpty:function(){if(Object.isUndefined(this._allowEmpty)){this._allowEmpty=true}return this._allowEmpty},setAllowEmpty:function(a){this._allowEmpty=a;return this},getAutoInsertNotEmpty:function(){if(Object.isUndefined(this._autoInsertNotEmpty)){this._autoInsertNotEmpty=true}return this._autoInsertNotEmpty},setAutoInsertNotEmpty:function(a){this._autoInsertNotEmpty=a;return this},fire:function(f,g,a){g=g||{};g.widget=this;this.element.fire(Xtype.FormManager.Element.EVENT_NS+f,{widget:this},a);return this},observe:function(a,d){this.element.observe(Xtype.FormManager.Element.EVENT_NS+a,d);return this},getFilteredValue:function(){return Xtype.Filter.Chain.prototype.filter.apply(this,[this.getUnfilteredValue()])},getUnfilteredValue:function(){var a=this.element;return $(a.form).getValueOf(a.name)},getValue:function(){return this.getFilteredValue()},setValue:function(a,d){this.element.setValue(a);if(!d){this.fire(Xtype.FormManager.CHANGE_EVENT)}return this},isValid:function(){var a=this.getValidators(),l=this.getValue(),d,o=this,k;if(Object.isEmpty(l)&&this.getAllowEmpty()&&!this.getRequired()){this.cleanErrors();k=new Xtype.Deferred();k.callback(undefined);return k}else{if(this.getAutoInsertNotEmpty()&&this.getRequired()&&!this.getValidator("NotEmpty")){var m=new Xtype.Validate.NotEmpty;m.breakChain=true;a.unshift(m)}var n=new Xtype.Validate.Chain;k=n.setValidators(a).isValid(l);k.addCallback(function(c){if(!c){o.setErrors(n.getErrors())}return c})}k.addCallback(function(c){var f=o.getClassElement();switch(c){case true:if(o.hasErrors()){o.cleanErrors()}f.addClassName("valid").removeClassName("invalid");o.fire("valid");break;case false:o.fire("invalid");break}return c});return k},setFilter:Xtype.Filter.Chain.prototype.setFilter,setFilters:Xtype.Filter.Chain.prototype.setFilters,getFilters:Xtype.Filter.Chain.prototype.getFilters,getFilter:Xtype.Filter.Chain.prototype.getFilter,cleanFilters:Xtype.Filter.Chain.prototype.cleanFilters,setError:function($super,a,d){$super(a,d).getClassElement().addClassName(a.underscore().dasherize()).addClassName("invalid").removeClassName("valid");return this},cleanErrors:function($super){$super().getClassElement().className=b(this).join(" ");return this}}}())};Xtype.FormManager.Element.EVENT_NS="formmanager::element::";Xtype.FormManager.RadioGroup=Class.create(Xtype.FormManager.Element,{initialize:function($super,c,d){e=$(c);$(e.form).getElements(e.name).each(function(a){new $super(a,d)})},setValue:function(d){var c=this.element;$(c.form).getElements(c.name).each(function(a){a.checked=a.value==d});return this}});Xtype.FormManager.CheckboxGroup=Class.create(Xtype.FormManager.Element,{initialize:function($super,c,d){e=$(c);$(e.form).getElements(e.name).each(function(a){new $super(a,d)})},setValue:function(d){var c=this.element;d=Object.isArray(d)?d:[d];$(c.form).getElements(c.name).each(function(a){a.checked=d.indexOf(a.value)>=0});return this},unsetValue:function(d){var c=this.element;$(c.form).getElements(c.name).find(function(a){if(a.value==d){a.checked=undefined;return true}});return this},toggleValue:function(d){var c=this.element;$(c.form).getElements(c.name).find(function(a){if(a.value==d){a.checked=!a.checked;return true}});return this}});Xtype.FormManager.Form=Class.create({allowInvalid:false,elementsState:[],initialize:function(f,g){var i=this._element=$(f);this.setOptions(g);i.observe("submit",this._onSubmit.bindAsEventListener(this));var h=this._submit=i.select("input[type=submit]").find(function(a){return a.up("form")===i&&a.visible()});i.observe(Xtype.FormManager.Element.EVENT_NS+"change",function(b){var a=b.memo.widget;if(a instanceof Xtype.FormManager.RadioGroup||a.element&&a.element.tagName.toLowerCase()=="select"){a.isValid()}});i.observe(Xtype.FormManager.Element.EVENT_NS+"blur",function(c){var b=c.memo.widget;var a=b.isValid();a.addCallback(function(d){if(d){b.setValue(b.getFilteredValue(),true)}})})},_onSubmit:function(i){i.preventDefault();var h=this._submit,f=this;var g=new Xtype.Deferred;this.elements.each(function(a){g.addCallback(function(b){var c=a.isValid();c.addCallback(function(d){return d&&b});return c})});g.callback(true);g.addCallback(function(a){if(a&&Object.isFunction(f._beforeSubmit)){a=f._beforeSubmit(a)}if(a){f.submit()}})},addBeforesubmit:function(b){this._beforeSubmit=b},submit:function(){var b=this._element.clone().submit().remove()},setOptions:function(b){b=Object.extend({elements:[],allowInvalid:this.allowInvalid},b);return this.setElements(b.elements)},getElements:function(){return this.elements},createElement:function(j,g,i){var j=$(j),k={checkbox:"CheckboxGroup",radio:"RadioGroup","select-multiple":"change","select-one":"change",text:"Element"},h=i||k[j.type.toLowerCase()];return new Xtype.FormManager[i](j,g)},createRadioGroup:function(c,d){},createCheckboxGroup:function(c,d){},createSubmit:function(c,d){return Xtype.FormManager.Submit(c,d)},addElement:function(b){this.elements=this.elements||[];this.elements.push(b);return this},setElements:function(b){b.each(this.addElement,this);return this},getElement:function(){return this._element}});Xtype.Keyfilter=Class.create((function(){var g={63234:37,63235:39,63232:38,63233:40,63276:33,63277:34,63272:46,63273:36,63275:35};function f(a){var b=a.keyCode;b=Prototype.Browser.WebKit?(g[b]||b):b;return(b>=33&&b<=40)||b==Event.KEY_RETURN||b==Event.KEY_TAB||b==Event.KEY_ESC}function i(a){var b=a.keyCode;return b==9||b==13||b==40||b==27||b==16||b==17||(b>=18&&b<=20)||(Prototype.Browser.Opera&&(b==8||(b>=33&&b<=35)||(b>=36&&b<=39)||(b>=44&&b<=45)))}function h(a){var b=a.keyCode||a.charCode;return Prototype.Browser.WebKit?(g[b]||b):b}return{initialize:function(b,a){this.re=a;$(b).observe("keypress",this._keypress.bindAsEventListener(this))},_keypress:function(b){if(b.ctrlKey||b.altKey){return}var d=h(b);if(Prototype.Browser.Gecko&&(f(b)||d==Event.KEY_BACKSPACE||d==Event.KEY_DELETE)){return}var k=b.charCode||b.keyCode||b.which,a=String.fromCharCode(k),c;if(!Prototype.Browser.Gecko&&(i(b)||!a)){return}c=Object.isFunction(this.re)?this.re.call(this,a):this.re.test(a);if(!c){b.preventDefault()}}}})());function JsHttpRequest(){var t=this;t.onreadystatechange=null;t.readyState=0;t.responseText=null;t.responseXML=null;t.status=200;t.statusText="OK";t.responseJS=null;t.caching=false;t.loader=null;t.session_name="PHPSESSID";t._ldObj=null;t._reqHeaders=[];t._openArgs=null;t._errors={inv_form_el:"Invalid FORM element detected: name=%, tag=%",must_be_single_el:"If used, <form> must be a single HTML element in the list.",js_invalid:"JavaScript code generated by backend is invalid!\n%",url_too_long:"Cannot use so long query with GET request (URL is larger than % bytes)",unk_loader:"Unknown loader: %",no_loaders:"No loaders registered at all, please check JsHttpRequest.LOADERS array",no_loader_matched:"Cannot find a loader which may process the request. Notices are:\n%"};t.abort=function(){with(this){if(_ldObj&&_ldObj.abort){_ldObj.abort()}_cleanup();if(readyState==0){return}if(readyState==1&&!_ldObj){readyState=0;return}_changeReadyState(4,true)}};t.open=function(_2,_3,_4,_5,_6){with(this){if(_3.match(/^((\w+)\.)?(GET|POST)\s+(.*)/i)){this.loader=RegExp.$2?RegExp.$2:null;_2=RegExp.$3;_3=RegExp.$4}try{if(document.location.search.match(new RegExp("[&?]"+session_name+"=([^&?]*)"))||document.cookie.match(new RegExp("(?:;|^)\\s*"+session_name+"=([^;]*)"))){_3+=(_3.indexOf("?")>=0?"&":"?")+session_name+"="+this.escape(RegExp.$1)}}catch(e){}_openArgs={method:(_2||"").toUpperCase(),url:_3,asyncFlag:_4,username:_5!=null?_5:"",password:_6!=null?_6:""};_ldObj=null;_changeReadyState(1,true);return true}};t.send=function(_7){if(!this.readyState){return}this._changeReadyState(1,true);this._ldObj=null;var _8=[];var _9=[];if(!this._hash2query(_7,null,_8,_9)){return}var _a=null;if(this.caching&&!_9.length){_a=this._openArgs.username+":"+this._openArgs.password+"@"+this._openArgs.url+"|"+_8+"#"+this._openArgs.method;var _b=JsHttpRequest.CACHE[_a];if(_b){this._dataReady(_b[0],_b[1]);return false}}var _c=(this.loader||"").toLowerCase();if(_c&&!JsHttpRequest.LOADERS[_c]){return this._error("unk_loader",_c)}var _d=[];var _e=JsHttpRequest.LOADERS;for(var _f in _e){var ldr=_e[_f].loader;if(!ldr){continue}if(_c&&_f!=_c){continue}var _11=new ldr(this);JsHttpRequest.extend(_11,this._openArgs);JsHttpRequest.extend(_11,{queryText:_8.join("&"),queryElem:_9,id:(new Date().getTime())+""+JsHttpRequest.COUNT++,hash:_a,span:null});var _12=_11.load();if(!_12){this._ldObj=_11;JsHttpRequest.PENDING[_11.id]=this;return true}if(!_c){_d[_d.length]="- "+_f.toUpperCase()+": "+this._l(_12)}else{return this._error(_12)}}return _f?this._error("no_loader_matched",_d.join("\n")):this._error("no_loaders")};t.getAllResponseHeaders=function(){with(this){return _ldObj&&_ldObj.getAllResponseHeaders?_ldObj.getAllResponseHeaders():[]}};t.getResponseHeader=function(_13){with(this){return _ldObj&&_ldObj.getResponseHeader?_ldObj.getResponseHeader(_13):null}};t.setRequestHeader=function(_14,_15){with(this){_reqHeaders[_reqHeaders.length]=[_14,_15]}};t._dataReady=function(_16,js){with(this){if(caching&&_ldObj){JsHttpRequest.CACHE[_ldObj.hash]=[_16,js]}responseText=responseXML=_16;responseJS=js;if(js!==null){status=200;statusText="OK"}else{status=500;statusText="Internal Server Error"}_changeReadyState(2);_changeReadyState(3);_changeReadyState(4);_cleanup()}};t._l=function(_18){var i=0,p=0,msg=this._errors[_18[0]];while((p=msg.indexOf("%",p))>=0){var a=_18[++i]+"";msg=msg.substring(0,p)+a+msg.substring(p+1,msg.length);p+=1+a.length}return msg};t._error=function(msg){msg=this._l(typeof(msg)=="string"?arguments:msg);msg="JsHttpRequest: "+msg;if(!window.Error){throw msg}else{if((new Error(1,"test")).description=="test"){throw new Error(1,msg)}else{throw new Error(msg)}}};t._hash2query=function(_1e,_1f,_20,_21){if(_1f==null){_1f=""}if((""+typeof(_1e)).toLowerCase()=="object"){var _22=false;if(_1e&&_1e.parentNode&&_1e.parentNode.appendChild&&_1e.tagName&&_1e.tagName.toUpperCase()=="FORM"){_1e={form:_1e}}for(var k in _1e){var v=_1e[k];if(v instanceof Function){continue}var _25=_1f?_1f+"["+this.escape(k)+"]":this.escape(k);var _26=v&&v.parentNode&&v.parentNode.appendChild&&v.tagName;if(_26){var tn=v.tagName.toUpperCase();if(tn=="FORM"){_22=true}else{if(tn=="INPUT"||tn=="TEXTAREA"||tn=="SELECT"){}else{return this._error("inv_form_el",(v.name||""),v.tagName)}}_21[_21.length]={name:_25,e:v}}else{if(v instanceof Object){this._hash2query(v,_25,_20,_21)}else{if(v===null){continue}if(v===true){v=1}if(v===false){v=""}_20[_20.length]=_25+"="+this.escape(""+v)}}if(_22&&_21.length>1){return this._error("must_be_single_el")}}}else{_20[_20.length]=_1e}return true};t._cleanup=function(){try{var _28=this._ldObj;if(!_28){return}JsHttpRequest.PENDING[_28.id]=false;var _29=_28.span;if(!_29){return}_28.span=null;var _2a=function(){_29.parentNode.removeChild(_29)};JsHttpRequest.setTimeout(_2a,50)}catch(e){}};t._changeReadyState=function(s,_2c){with(this){if(_2c){status=statusText=responseJS=null;responseText=""}readyState=s;if(onreadystatechange){onreadystatechange()}}};t.escape=function(s){return escape(s).replace(new RegExp("\\+","g"),"%2B")}}JsHttpRequest.COUNT=0;JsHttpRequest.MAX_URL_LEN=2000;JsHttpRequest.CACHE={};JsHttpRequest.PENDING={};JsHttpRequest.LOADERS={};JsHttpRequest._dummy=function(){};JsHttpRequest.TIMEOUTS={s:window.setTimeout,c:window.clearTimeout};JsHttpRequest.setTimeout=function(b,c){window.JsHttpRequest_tmp=JsHttpRequest.TIMEOUTS.s;if(typeof(b)=="string"){d=window.JsHttpRequest_tmp(b,c)}else{var d=null;var a=function(){b();delete JsHttpRequest.TIMEOUTS[d]};d=window.JsHttpRequest_tmp(a,c);JsHttpRequest.TIMEOUTS[d]=a}window.JsHttpRequest_tmp=null;return d};JsHttpRequest.clearTimeout=function(b){window.JsHttpRequest_tmp=JsHttpRequest.TIMEOUTS.c;delete JsHttpRequest.TIMEOUTS[b];var a=window.JsHttpRequest_tmp(b);window.JsHttpRequest_tmp=null;return a};JsHttpRequest.query=function(a,f,d,c){var b=new this();b.caching=!c;b.onreadystatechange=function(){if(b.readyState==4){d(b.responseJS,b.responseText)}};b.open(null,a,true);b.send(f)};JsHttpRequest.dataReady=function(b){var a=this.PENDING[b.id];delete this.PENDING[b.id];if(a){a._dataReady(b.text,b.js)}else{if(a!==false){throw"dataReady(): unknown pending id: "+b.id}}};JsHttpRequest.extend=function(b,c){for(var a in c){b[a]=c[a]}};JsHttpRequest.LOADERS.xml={loader:function(req){JsHttpRequest.extend(req._errors,{xml_no:"Cannot use XMLHttpRequest or ActiveX loader: not supported",xml_no_diffdom:"Cannot use XMLHttpRequest to load data from different domain %",xml_no_headers:"Cannot use XMLHttpRequest loader or ActiveX loader, POST method: headers setting is not supported, needed to work with encodings correctly",xml_no_form_upl:"Cannot use XMLHttpRequest loader: direct form elements using and uploading are not implemented"});this.load=function(){if(this.queryElem.length){return["xml_no_form_upl"]}if(this.url.match(new RegExp("^([a-z]+://[^\\/]+)(.*)","i"))){if(RegExp.$1.toLowerCase()!=document.location.protocol+"//"+document.location.hostname.toLowerCase()){return["xml_no_diffdom",RegExp.$1]}}var xr=null;if(window.XMLHttpRequest){try{xr=new XMLHttpRequest()}catch(e){}}else{if(window.ActiveXObject){try{xr=new ActiveXObject("Microsoft.XMLHTTP")}catch(e){}if(!xr){try{xr=new ActiveXObject("Msxml2.XMLHTTP")}catch(e){}}}}if(!xr){return["xml_no"]}var _40=window.ActiveXObject||xr.setRequestHeader;if(!this.method){this.method=_40&&this.queryText.length?"POST":"GET"}if(this.method=="GET"){if(this.queryText){this.url+=(this.url.indexOf("?")>=0?"&":"?")+this.queryText}this.queryText="";if(this.url.length>JsHttpRequest.MAX_URL_LEN){return["url_too_long",JsHttpRequest.MAX_URL_LEN]}}else{if(this.method=="POST"&&!_40){return["xml_no_headers"]}}this.url+=(this.url.indexOf("?")>=0?"&":"?")+"JsHttpRequest="+(req.caching?"0":this.id)+"-xml";var id=this.id;xr.onreadystatechange=function(){if(xr.readyState!=4){return}xr.onreadystatechange=JsHttpRequest._dummy;req.status=null;try{req.status=xr.status;req.responseText=xr.responseText}catch(e){}if(!req.status){return}try{var _42=req.responseText||"{ js: null, text: null }";eval("JsHttpRequest._tmp = function(id) { var d = "+_42+"; d.id = id; JsHttpRequest.dataReady(d); }")}catch(e){return req._error("js_invalid",req.responseText)}JsHttpRequest._tmp(id);JsHttpRequest._tmp=null};xr.open(this.method,this.url,true,this.username,this.password);if(_40){for(var i=0;i<req._reqHeaders.length;i++){xr.setRequestHeader(req._reqHeaders[i][0],req._reqHeaders[i][1])}xr.setRequestHeader("Content-Type","application/octet-stream")}xr.send(this.queryText);this.span=null;this.xr=xr;return null};this.getAllResponseHeaders=function(){return this.xr.getAllResponseHeaders()};this.getResponseHeader=function(_44){return this.xr.getResponseHeader(_44)};this.abort=function(){this.xr.abort();this.xr=null}}};JsHttpRequest.LOADERS.script={loader:function(a){JsHttpRequest.extend(a._errors,{script_only_get:"Cannot use SCRIPT loader: it supports only GET method",script_no_form:"Cannot use SCRIPT loader: direct form elements using and uploading are not implemented"});this.load=function(){if(this.queryText){this.url+=(this.url.indexOf("?")>=0?"&":"?")+this.queryText}this.url+=(this.url.indexOf("?")>=0?"&":"?")+"JsHttpRequest="+this.id+"-script";this.queryText="";if(!this.method){this.method="GET"}if(this.method!=="GET"){return["script_only_get"]}if(this.queryElem.length){return["script_no_form"]}if(this.url.length>JsHttpRequest.MAX_URL_LEN){return["url_too_long",JsHttpRequest.MAX_URL_LEN]}var h=this,i=document,g=null,f=i.body;if(!window.opera){this.span=g=i.createElement("SCRIPT");var c=function(){g.language="JavaScript";if(g.setAttribute){g.setAttribute("src",h.url)}else{g.src=h.url}f.insertBefore(g,f.lastChild)}}else{this.span=g=i.createElement("SPAN");g.style.display="none";f.insertBefore(g,f.lastChild);g.innerHTML="Workaround for IE.<script><\/script>";var c=function(){g=g.getElementsByTagName("SCRIPT")[0];g.language="JavaScript";if(g.setAttribute){g.setAttribute("src",h.url)}else{g.src=h.url}}}JsHttpRequest.setTimeout(c,10);return null}}};JsHttpRequest.LOADERS.form={loader:function(a){JsHttpRequest.extend(a._errors,{form_el_not_belong:'Element "%" does not belong to any form!',form_el_belong_diff:'Element "%" belongs to a different form. All elements must belong to the same form!',form_el_inv_enctype:'Attribute "enctype" of the form must be "%" (for IE), "%" given.'});this.load=function(){var f=this;if(!f.method){f.method="POST"}f.url+=(f.url.indexOf("?")>=0?"&":"?")+"JsHttpRequest="+f.id+"-form";if(f.method=="GET"){if(f.queryText){f.url+=(f.url.indexOf("?")>=0?"&":"?")+f.queryText}if(f.url.length>JsHttpRequest.MAX_URL_LEN){return["url_too_long",JsHttpRequest.MAX_URL_LEN]}var c=f.url.split("?",2);f.url=c[0];f.queryText=c[1]||""}var h=null;var g=false;if(f.queryElem.length){if(f.queryElem[0].e.tagName.toUpperCase()=="FORM"){h=f.queryElem[0].e;g=true;f.queryElem=[]}else{h=f.queryElem[0].e.form;for(var j=0;j<f.queryElem.length;j++){var k=f.queryElem[j].e;if(!k.form){return["form_el_not_belong",k.name]}if(k.form!=h){return["form_el_belong_diff",k.name]}}}if(f.method=="POST"){var b="multipart/form-data";var r=(h.attributes.encType&&h.attributes.encType.nodeValue)||(h.attributes.enctype&&h.attributes.enctype.value)||h.enctype;if(r!=b){return["form_el_inv_enctype",b,r]}}}var l=h&&(h.ownerDocument||h.document)||document;var o="jshr_i_"+f.id;var q=f.span=l.createElement("DIV");q.style.position="absolute";q.style.display="none";q.style.visibility="hidden";q.innerHTML=(h?"":"<form"+(f.method=="POST"?' enctype="multipart/form-data" method="post"':"")+"></form>")+'<iframe name="'+o+'" id="'+o+'" style="width:0px; height:0px; overflow:hidden; border:none"></iframe>';if(!h){h=f.span.firstChild}l.body.insertBefore(q,l.body.lastChild);var n=function(w,x){var p=[];var d=w;if(w.mergeAttributes){var d=l.createElement("form");d.mergeAttributes(w,false)}for(var u=0;u<x.length;u++){var t=x[u][0],s=x[u][1];p[p.length]=[t,d.getAttribute(t)];d.setAttribute(t,s)}if(w.mergeAttributes){w.mergeAttributes(d,false)}return p};var m=function(){top.JsHttpRequestGlobal=JsHttpRequest;var u=[];if(!g){for(var p=0,w=h.elements.length;p<w;p++){u[p]=h.elements[p].name;h.elements[p].name=""}}var v=f.queryText.split("&");for(var p=v.length-1;p>=0;p--){var s=v[p].split("=",2);var t=l.createElement("INPUT");t.type="hidden";t.name=unescape(s[0]);t.value=s[1]!=null?unescape(s[1]):"";h.appendChild(t)}for(var p=0;p<f.queryElem.length;p++){f.queryElem[p].e.name=f.queryElem[p].name}var d=n(h,[["action",f.url],["method",f.method],["onsubmit",null],["target",o]]);h.submit();n(h,d);for(var p=0;p<v.length;p++){h.lastChild.parentNode.removeChild(h.lastChild)}if(!g){for(var p=0,w=h.elements.length;p<w;p++){h.elements[p].name=u[p]}}};JsHttpRequest.setTimeout(m,100);return null}}};var profiler=new Xtype.Profiler;function pseudoWindowClose(obj){obj_current="";while(1){obj_window=eval("obj"+obj_current);if(obj_window.className=="pseudoWindow"){obj_window.style.display="none";break}else{obj_current+=".parentNode"}}return false}function observeSMSEvents(){var a=$("sms-nickname-ico");$$(".sms-nickname").each(function(b){b.observe("mouseover",function(){var d=b.id.substring(1);try{var c=b.up("div.user_sms01").readAttribute("userfotourl");var g=b.up("div.user_sms01").readAttribute("userfotostyle")}catch(h){var c=null;var g=null}position=b.cumulativeOffset();var f=b.getDimensions();f.height=f.height?f.height:15;a.innerHTML='<img title="загрузка..." alt="загрузка..." src="'+c+'" style="'+g+'" />';a.setStyle({left:position[0]+f.width+"px",top:position[1]+f.height+"px",display:"block"})});b.observe("mouseout",function(){a.style.display="none"})})}function hideall(d){if(!document.getElementById){return}var b=document.getElementById("hideallt");var f=d.getElementsByTagName("span")[0];var a=d.getElementsByTagName("img")[0];if(d.default_text==null){d.default_text=f.innerHTML;d.default_img=a.src}if(b.style.display=="none"){b.style.display="block";f.innerHTML="Свернуть форму поиска";var c=a.cloneNode(false);c.alt="-";c.src="/images/i_minus.gif";d.removeChild(a);d.insertBefore(c,f)}else{b.style.display="none";f.innerHTML=d.default_text;var c=a.cloneNode(false);c.alt="+";c.src=d.default_img;d.removeChild(a);d.insertBefore(c,f)}}function addlayer(b){if(!document.getElementById){return}var a=document.getElementById("hidetext");img=b.getElementsByTagName("i")[0];if(a.style.display==""){a.style.display="none";document.getElementById("show_text").innerHTML="Расширенный поиск";img.className=img.className.replace(/minus\-ico/i,"plus-ico")}else{a.style.display="";document.getElementById("show_text").innerHTML="Основной поиск";img.className=img.className.replace(/plus\-ico/i,"minus-ico")}return false}function findPosition(a){var b=curtop=0;if(a.offsetParent){b=a.offsetLeft;curtop=a.offsetTop;while(a=a.offsetParent){b+=a.offsetLeft;curtop+=a.offsetTop}}return[b,curtop]}function inviteCustomerForTesting(a){new Ajax.Request(a,{onSuccess:function(){alert("Приглашение отправлено!")}});return false}function PlaceholderDecorator(c){c=$(c);var d=c.readAttribute("placeholder");if(!d){c.writeAttribute("placeholder","")}if(!Prototype.Browser.WebKit){var a=Element.getDimensions(c);var f=new Element("div",{"class":"placeholder-wrapper"});Element.wrap(c,f);var b=new Element("label",{"class":"placeholder-label quiet","for":Element.identify(c)});f.appendChild(b);b.innerHTML=d;b.style.display=(c.value==="")?"block":"none";$(b).observe("click",function(g){this.parentNode.getElementsByTagName("input")[0].focus()}.bindAsEventListener(b));$(c).observe("focus",function(g){this.parentNode.getElementsByTagName("label")[0].hide()}.bindAsEventListener(b));$(c).observe("keydown",function(g){(this.visible())?this.hide():null}.bindAsEventListener(b));$(c).observe("blur",function(h){if(this.value===""){var g=this.parentNode.getElementsByTagName("label")[0];g.innerHTML=c.readAttribute("placeholder");g.show()}}.bindAsEventListener(c))}}Event.observe(window,"load",function(c){for(var b=0,a=$$("#create-poll-form input[placeholder]");b<a.length;++b){new PlaceholderDecorator(a[b])}});function RatingStars(b,a){this.ol=b=$(b);if(b.tagName!=="OL"){throw"Element passed to RatingStars constructor should be OL."}Element.identify(b);this.options=a=$H({}).merge(a);b.observe("click",function(g){var h=Event.element(g);var d=a.url||h.href;var f=parseInt(h.className.match(/star\d/ig)[0].replace("star",""));var c=b.innerHTML;b.innerHTML='<li><i class="ajaxloader"></i></li>';new Ajax.Request(d,{parameters:$H(a.parameters).merge({vtvl:f}),onSuccess:function(i){if(a.onSuccess){a.onSuccess(i,this)}else{b.update(i.responseText)}},onFailure:function(i){b.innerHTML=c;alert(i.responseText)}});Event.stop(g)}.bindAsEventListener(this));b.observe("mouseover",function(h){var c=$$("#"+b.id+" .rating-star");var j=Event.element(h);if(j.tagName!=="A"){Event.stop(h);return}var f=parseInt(j.className.match(/star\d/ig)[0].replace("star",""));for(var d=0,g=c.length;d<g&&d<f;++d){c[d].addClassName("active")}}.bindAsEventListener(this));b.observe("mouseout",function(d){var c=$$("#"+b.id+" .rating-star");c.each(function(f){f.removeClassName("active")})}.bindAsEventListener(this))}Number.prototype.pluralize=function(c,b,a){return(this%10==1&&this%100!==11?b:(this%10>=2&&this%10<=4&&(this%100<10||this%100>=20)?a:c))};

