var CityChoose = { init : function(){ var that = this; if(document.getElementById("city_list")){ this.oCityList = document.getElementById("city_list"); this.commonOverlap(); this.attachEvents(); } }, attachEvents : function(){ var that = this; Common.Event.add( this.oCityList, "click", function(evt){ if(Common.Class.match(that.oCityList, 'open')){ that.cityListClickChoose(evt); } else { that.cityListClickOpen(evt); } Common.Event.cancel(evt); } ); Common.Event.add( document.body, "click", function(evt){ if(Common.Class.match(that.oCityList, 'open')){ that.cityListClickChoose(evt); } } ); }, cityListClickOpen : function(evt){ this.calculatePosition(evt); Common.Class.add(this.oCityList, 'open') }, cityListClickChoose : function(evt){ Common.Class.remove(this.oCityList, 'open'); if(evt.target.nodeName == 'SPAN'){ this.calculatePosition(evt); this.reloadIframe(evt); } }, calculatePosition : function(evt){ var oCityListStyle = this.oCityList.firstChild.style; oCityListStyle.top = '-' + evt.target.offsetTop + 'px'; }, reloadIframe : function(evt){ var cityName = evt.target.innerHTML; var oIFrame = document.getElementById('map').getElementsByTagName('iframe'); if(oIFrame[0].getAttribute('src').indexOf('other') == -1){ var cityHref = 'http://www5.eatlas.ru/rebirth3/main/?lay=office_p&map=' + cityName; } else { var cityHref = 'http://www5.eatlas.ru/rebirth3/other/?lay=office_p&map=' + cityName; } oIFrame[0].setAttribute('src', cityHref); }, // перекрытие нормализации эвентов каммона commonOverlap : function(){ Common.Event.add = function( mElement, mEventType, fEventFunction ) { if(mElement.length && mElement.sort) { for(var i = 0; i < mElement.length; i++) { this.add(mElement[i], mEventType, fEventFunction); } return; } if(!mEventType.match && mEventType.length) { for(var i = 0; i < mEventType.length; i++) { this.add(mElement, mEventType[i], fEventFunction); } return; } if(mElement.addEventListener) { mElement.addEventListener( mEventType, function(evt){ fEventFunction(Common.Event.normalize(evt)); }, false ); } else if(mElement.attachEvent) { if(this.aObservers.length == 0) { this.aObservers.push([mElement, mEventType, fEventFunction]); this.add( window, 'unload', function() { Common.Event.detachObservers(); } ); } else { this.aObservers.push([mElement, mEventType, fEventFunction]); } mElement.attachEvent( 'on' + mEventType, function(evt){ fEventFunction(Common.Event.normalize(evt)); } ); } } } }; Common.Event.add(window, "load", function(){ CityChoose.init(); });