(function($){$.tools=$.tools||{};$.tools.overlay={version:'1.1.2',addEffect:function(name,loadFn,closeFn){effects[name]=[loadFn,closeFn];},conf:{top:'10%',left:'center',absolute:false,speed:'normal',closeSpeed:'fast',effect:'default',close:null,oneInstance:true,closeOnClick:true,closeOnEsc:true,api:false,expose:null,target:null}};var effects={};$.tools.overlay.addEffect('default',function(onLoad){this.getOverlay().fadeIn(this.getConf().speed,onLoad);},function(onClose){this.getOverlay().fadeOut(this.getConf().closeSpeed,onClose);});var instances=[];function Overlay(trigger,conf){var self=this,$self=$(this),w=$(window),closers,overlay,opened,expose=conf.expose&&$.tools.expose.version;var jq=conf.target||trigger.attr("rel");overlay=jq?$(jq):null||trigger;if(!overlay.length){throw"Could not find Overlay: "+jq;}
if(trigger&&trigger.index(overlay)==-1){trigger.click(function(e){self.load(e);return e.preventDefault();});}
$.each(conf,function(name,fn){if($.isFunction(fn)){$self.bind(name,fn);}});$.extend(self,{load:function(e){if(self.isOpened()){return self;}
var eff=effects[conf.effect];if(!eff){throw"Overlay: cannot find effect : \""+conf.effect+"\"";}
if(conf.oneInstance){$.each(instances,function(){this.close(e);});}
e=e||$.Event();e.type="onBeforeLoad";$self.trigger(e);if(e.isDefaultPrevented()){return self;}
opened=true;if(expose){overlay.expose().load(e);}
var top=conf.top;var left=conf.left;var oWidth=overlay.outerWidth({margin:true});var oHeight=overlay.outerHeight({margin:true});if(typeof top=='string'){top=top=='center'?Math.max((w.height()-oHeight)/2,0):parseInt(top,10)/100*w.height();}
if(left=='center'){left=Math.max((w.width()-oWidth)/2,0);}
if(!conf.absolute){top+=w.scrollTop();left+=w.scrollLeft();}
overlay.css({top:top,left:left,position:'absolute'});e.type="onStart";$self.trigger(e);eff[0].call(self,function(){if(opened){e.type="onLoad";$self.trigger(e);}});if(conf.closeOnClick){$(document).bind("click.overlay",function(e){if(!self.isOpened()){return;}
var et=$(e.target);if(et.parents(overlay).length>1){return;}
$.each(instances,function(){this.close(e);});});}
if(conf.closeOnEsc){$(document).unbind("keydown.overlay").bind("keydown.overlay",function(e){if(e.keyCode==27){$.each(instances,function(){this.close(e);});}});}
return self;},close:function(e){if(!self.isOpened()){return self;}
e=e||$.Event();e.type="onBeforeClose";$self.trigger(e);if(e.isDefaultPrevented()){return;}
opened=false;effects[conf.effect][1].call(self,function(){e.type="onClose";$self.trigger(e);});var allClosed=true;$.each(instances,function(){if(this.isOpened()){allClosed=false;}});if(allClosed){$(document).unbind("click.overlay").unbind("keydown.overlay");}
return self;},getContent:function(){return overlay;},getOverlay:function(){return overlay;},getTrigger:function(){return trigger;},getClosers:function(){return closers;},isOpened:function(){return opened;},getConf:function(){return conf;},bind:function(name,fn){$self.bind(name,fn);return self;},unbind:function(name){$self.unbind(name);return self;}});$.each("onBeforeLoad,onStart,onLoad,onBeforeClose,onClose".split(","),function(i,ev){self[ev]=function(fn){return self.bind(ev,fn);};});if(expose){if(typeof conf.expose=='string'){conf.expose={color:conf.expose};}
$.extend(conf.expose,{api:true,closeOnClick:conf.closeOnClick,closeOnEsc:false});var ex=overlay.expose(conf.expose);ex.onBeforeClose(function(e){self.close(e);});self.onClose(function(e){ex.close(e);});}
closers=overlay.find(conf.close||".close");if(!closers.length&&!conf.close){closers=$('<div class="close"></div>');overlay.prepend(closers);}
closers.click(function(e){self.close(e);});}
$.fn.overlay=function(conf){var el=this.eq(typeof conf=='number'?conf:0).data("overlay");if(el){return el;}
if($.isFunction(conf)){conf={onBeforeLoad:conf};}
var globals=$.extend({},$.tools.overlay.conf);conf=$.extend(true,globals,conf);this.each(function(){el=new Overlay($(this),conf);instances.push(el);$(this).data("overlay",el);});return conf.api?el:this;};})(jQuery);
function toggleMetro(id){var option=$('option[value='+id+']',$('#'+metroSelector));if(option.length){var img=$('#'+metroSelector+'_check_'+id);if(option.attr('selected')){option.attr('selected',false);img.removeClass('metro-selected');}else{option.attr('selected',true);img.addClass('metro-selected');}
updateMetroList();}
return false;}
function updateMetroList(){var options=$('option[selected=true]',$('#'+metroSelector));var html='';for(i=0;i<options.length;i++){html+='<div class="stat1"><a class="icodel" href="#" onclick="metroSelector=\''+metroSelector+'\'; metroStationsContainer=\''+metroStationsContainer+'\'; toggleMetro(\''+options[i].value+'\');return false;">&nbsp;&nbsp;&nbsp;&nbsp;</a>'+options[i].text+(i!=options.length-1?', ':'')+'</div>';}
html+='';$('#'+metroStationsContainer).html(html);}
function loadMetroMap(){var options=$('option[selected=true]',$('#'+metroSelector));if(options.length){for(i=0;i<options.length;i++){$('#'+metroSelector+'_check_'+options[i].value).addClass('metro-selected');}}}
function makeSelectedMetrosQuery(){var options=$('option[selected=true]',$('#'+metroSelector));var ret='';if(options.length){for(i=0;i<options.length;i++){ret+='&selectedStations[]='+options[i].value;}}
return ret;}
