var UIPage=Class.create({initialize:function(cnf){this.cnf=cnf||{};this.layer=document.body;},search:function(){window.location=this.cnf.base+'search?'+encodeURIComponent($('search').value);},fetch:function(url,callback,params){this.req=Utils.fetch(url,callback,params);}});var Cookie={set:function(name,value,daysToExpire){var expire='';if(daysToExpire!=undefined){var d=new Date();d.setTime(d.getTime()+(86400000*parseFloat(daysToExpire)));expire='; expires='+d.toGMTString();}
return(document.cookie=escape(name)+'='+escape(value||'')+expire);},get:function(name){var cookie=document.cookie.match(new RegExp('(^|;)\\s*'+escape(name)+'=([^;\\s]*)'));return(cookie?unescape(cookie[2]):null);},erase:function(name){var cookie=Cookie.get(name)||true;Cookie.set(name,'',-1);return cookie;},accept:function(){if(typeof navigator.cookieEnabled=='boolean'){return navigator.cookieEnabled;}
Cookie.set('_test','1');return(Cookie.erase('_test')==='1');}};var Utils={select:function(id,className){$$('.'+className).invoke('removeClassName',className);$(id).addClassName(className);},mark:function(e,className){e[(e.hasClassName(className)?'remove':'add')+'ClassName'](className);},set_form_value:function(el,value){if((el.tagName=='INPUT'&&el.type=='text')||el.tagName=='TEXTAREA'||el.tagName=='SELECT'){el.setValue((value||'').unescapeHTML());}else if(el.tagName=='INPUT'&&el.type=='checkbox'){el.checked=Boolean(value);}},get_form_value:function(el){if((el.tagName=='INPUT'&&el.type=='text')||el.tagName=='TEXTAREA'||el.tagName=='SELECT'){return el.getValue().escapeHTML();}else if(el.tagName=='INPUT'&&el.type=='checkbox'){return el.checked?el.value:0;}
return null;},get_radio_value:function(item){for(var i=0;i<item.length;i++){if(item[i].checked){return item[i].value;}}
return null;},stop_and_clear:function(el){var children=el.childElements();if(children.size()>0){children.invoke('stopObserving').invoke('remove');}},swap_dom_siblings:function(foo,bar){var clone=$(foo).cloneNode(true);var el=$(bar);$(foo).replace($(bar).cloneNode(true));el.replace(clone);},get_center:function(map,foo,bar){var projection=map.getCurrentMapType().getProjection();var zoom=map.getZoom();var foo_gpoint=projection.fromLatLngToPixel(foo,zoom);var bar_gpoint=projection.fromLatLngToPixel(bar,zoom);return projection.fromPixelToLatLng(new GPoint(Math.abs(foo_gpoint.x+bar_gpoint.x)/2,Math.abs(foo_gpoint.y+bar_gpoint.y)/2),zoom);},line_center:function(map,polyline){var latlng;if(polyline.getVertexCount()>2){latlng=polyline.getVertex(Math.round(polyline.getVertexCount()/2));}else if(polyline.getVertexCount()==2){latlng=Utils.get_center(map,polyline.getVertex(0),polyline.getVertex(1));}
return latlng;},reset_info_window:function(map,latlng,_width,_height){var info=map.getInfoWindow();var dims=$(info.getContentContainers()[0]).getDimensions();info.reset(latlng,null,new GSize(_width||dims.width,(_height||dims.height)+6));return info;},fill_select:function(el,arr,empty){if(empty){el.options[el.options.length]=new Option(I18N.choose_option,'',true,true);}
arr.sort(function(a,b){return(a[3]-b[3])}).each(function(item){this.options[this.options.length]=new Option(item[2],item[0],false,false);}.bind(el));},_extract_number_regexp:new RegExp("(\\d+)$"),extract_number:function(string){if(string){var result=string.match(this._extract_number_regexp);if(result!=null){return Number(result[1]);}}
return null;},rnd_key:function(length){var chars="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";var pass="";for(x=0;x<(length||4);x++){i=Math.floor(Math.random()*62);pass+=chars.charAt(i);}
return pass;},human_date:function(value){return Date.parseFormattedString(value.replace(/T/,' ')).toString('MMMM d, yyyy HH:mm');},fetch:function(url,callback,params,error_callback){return new Ajax.Request(url+'?'+Math.random(),{method:'post',parameters:(params?params.toQueryString():null),onComplete:function(time,callback,error_callback,req){if(req.status=='200'&&((req.responseText.charAt(0)=="{")||(req.responseText.charAt(0)=="["))){callback(req.responseText.evalJSON()||{});}else{if(error_callback){error_callback();}}}.curry((new Date).getTime(),callback,error_callback)});},add_open_street:function(map){var copyOSM=new GCopyrightCollection('<a href="http://www.openstreetmap.org/">OpenStreetMap</a>');copyOSM.addCopyright(new GCopyright(1,new GLatLngBounds(new GLatLng(-90,-180),new GLatLng(90,180)),0,' '));var tilesMapnik=new GTileLayer(copyOSM,7,18,{tileUrlTemplate:'http://tile.openstreetmap.org/{Z}/{X}/{Y}.png',isPng:true});map.addMapType(new GMapType([tilesMapnik],G_NORMAL_MAP.getProjection(),'OSM'));},safe_ns:function(node,namespaceURI,prefix,elementName){var collection=null;try{collection=node.getElementsByTagNameNS(namespaceURI,elementName);}catch(e){collection=node.getElementsByTagName(prefix+":"+elementName);}
return collection;},toggle_target:function(event){this.next().toggle();if(this.next().visible()){this.addClassName('expanded');}else{this.removeClassName('expanded');}},register_targets:function(where){var triggers=where?where.select('.trigger'):$$('.trigger');for(var i=0,len=triggers.length;i<len;++i){triggers[i].next().hide();triggers[i].observe('click',this.toggle_target);}
var expandeds=where?where.select('.expanded'):$$('.expanded');for(var i=0,len=expandeds.length;i<len;++i){expandeds[i].addClassName('trigger');expandeds[i].observe('click',this.toggle_target);}},inline_items:function(el){if(Prototype.Browser.IE){var item=el.childElements().first();if(item){var space=item.getWidth()+(parseInt(item.getStyle('margin'))*2);el.childElements().each(function(e,i){e.setStyle({'position':'absolute','left':(i*this)+'px'});}.bind(space));el.setStyle({'width':(el.childElements().size()*space)+'px'});}}}}
var ProgressBar=Class.create({initialize:function(id,cnf){$(id).update().appendChild(new Element('span').setStyle({'display':'inline-block','height':$(id).getHeight()+'px','position':'absolute'}));$(id).appendChild(new Element('span').setStyle({'display':'inline-block','height':$(id).getHeight()+'px','width':$(id).getWidth()+'px','position':'absolute','textAlign':'center'}));this.cnf=cnf;this.id=id;},set:function(k){$(this.id).down().setStyle({'width':Math.ceil($(this.id).getWidth()*k)+'px','backgroundColor':'rgb('+this.color(k,0)+','+this.color(k,1)+','+this.color(k,2)+')','height':$(this.id).getHeight()+'px'});if(!this.pe){$(this.id).down().next().update((Math.round(k*100))+'%');}},color:function(koef,i){return Math.ceil(this.cnf.end_color[i]*koef+this.cnf.start_color[i]*(1-koef));},process:function(cnf){this.k=0;this.direction=1;$(this.id).down().next().update(I18N.process);this.pe=new PeriodicalExecuter(function(){this.set(this.k);this.k+=this.direction*0.1;if(this.k>1){this.k=1;this.direction=-1;}else if(this.k<0){this.k=0;this.direction=1;}
return true;}.bind(this),0.1);},stop:function(){if(this.pe){this.pe.stop();delete this.pe;}
return this;}});var LoadState=Class.create({initialize:function(){document.body.appendChild(new Element('div',{'id':'load_state'}));document.body.appendChild(new Element('div',{'id':'load_state_image'}));$('load_state','load_state_image').invoke('hide');$('load_state').setOpacity(0.3);},start:function(){$('load_state','load_state_image').invoke('show').invoke('setStyle',{'width':document.viewport.getWidth()+'px','height':document.viewport.getHeight()+'px'});return true;},stop:function(){$('load_state','load_state_image').invoke('hide');return true;}});var ImagePreloader=Class.create({counter:new Hash({'total':0,'size':0,'loaded':0,'time':0}),already_loaded:new Hash({}),initialize:function(){document.body.appendChild(new Element('div',{'id':'preloaded_images_container'}).setStyle({'position':'fixed','width':'0px','height':'0px'}));},cache_images:function(list){list.each(function(item){this.cache_image(this.IMAGE_URL_BASE+item);}.bind(this));},cache_image:function(src){if(!this.already_loaded.get(src)){this.already_loaded.set(src,1)}else{return true}
var pic=new Element('img',{'src':src});if(pic.readyState==='complete'){return true;}
$('preloaded_images_container').appendChild(pic);var id=pic.identify();Event.observe(id,'load',this.image_loaded.bindAsEventListener(this,id,src));Event.observe(id,'error',this.image_loaded.bindAsEventListener(this,id,src));this.counter.set('total',this.counter.get('total')+1);delete pic;return true;},image_loaded:function(e,id,src){Event.stopObserving(id);Event.stopObserving(id);$(id).remove();this.counter.set('loaded',this.counter.get('loaded')+1);if(this.counter.get('loaded')===this.counter.get('total')){this.already_loaded.keys().each(function(key){this.already_loaded.unset(key);}.bind(this));}},IMAGE_URL_BASE:'http://static.'+domain});Array.prototype.swap_elements=function(foo,bar){var copy=new Object(this[foo]);this[foo]=new Object(this[bar]);this[bar]=copy;}