You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

9 lines
36 KiB

/* ImageMapster 1.2.4
Copyright 2011 James Treworgy
http://www.outsharked.com/imagemapster
https://github.com/jamietre/ImageMapster
A jQuery plugin to enhance image maps.
*/
(function($){var methods;$.fn.mapster=function(method){if(methods[method]){return methods[method].apply(this,Array.prototype.slice.call(arguments,1))}else if(typeof method==='object'||!method){return methods.bind.apply(this,arguments)}else{$.error('Method '+method+' does not exist on jQuery.mapster')}};$.mapster={};$.mapster.utils={area_corner:function(coords,left,top){var bestX,bestY,curX,curY,j;bestX=left?999999:-1;bestY=top?999999:-1;for(j=coords.length-2;j>=0;j-=2){curX=parseInt(coords[j],10);curY=parseInt(coords[j+1],10);if(top?curY<bestY:curY>bestY){bestY=curY;if(left?curX<bestX:curX>bestX){bestX=curX}}}return[bestX,bestY]},setOpacity:function(e,opacity,ie){if(ie){e.style.filter="Alpha(opacity="+String(opacity*100)+")"}else{e.style.opacity=opacity}},mergeObjects:function(options){var obj,i,len,prop,add=this.boolOrDefault(options.add,options.template?false:true),ignore=options.ignore?options.ignore.split(','):'',include=options.include?options.include.split(','):'',deep=options.deep?options.deep.split(','):'',target=options.target||{},source=[].concat(options.source);if(options.template){target=this.mergeObjects({target:{},source:[options.template,target]})}len=source.length;for(i=0;i<len;i++){obj=source[i];if(obj){for(prop in obj){if((!ignore||this.arrayIndexOf(ignore,prop)===-1)&&(!include||this.arrayIndexOf(include,prop)>=0)&&obj.hasOwnProperty(prop)&&(add||target.hasOwnProperty(prop))){if(deep&&this.arrayIndexOf(deep,prop)>=0&&typeof obj[prop]==='object'){if(typeof target[prop]!=='object'&&add){target[prop]={}}this.mergeObjects({target:target[prop],source:obj[prop],add:add})}else{target[prop]=this.clone(obj[prop])}}}}}return target},clone:function(obj){var prop,i,target,len;if($.isArray(obj)){target=[];len=obj.length;for(i=0;i<len;i++){target.push(obj[i])}}else if(typeof obj==='object'&&obj&&!obj.nodeName){target={};for(prop in obj){if(obj.hasOwnProperty(prop)){target[prop]=obj[prop]}}}else{target=obj}return target},isElement:function(o){return(typeof HTMLElement==="object"?o instanceof HTMLElement:typeof o==="object"&&o.nodeType===1&&typeof o.nodeName==="string")},arrayIndexOfProp:function(arr,prop,obj){var i=arr.length;while(i--){if(arr[i]&&arr[i][prop]===obj){return i}}return-1},boolOrDefault:function(obj,def){return this.isBool(obj)?obj:def||false},isBool:function(obj){return typeof obj==="boolean"},isFunction:function(obj){return obj&&typeof obj==='function'},ifFunction:function(obj,that,args){if($.isFunction(obj)){obj.call(that,args)}},isImageLoaded:function(img){if(typeof img.complete!=='undefined'&&!img.complete){return false}if(typeof img.naturalWidth!=='undefined'&&(img.naturalWidth===0||img.naturalHeight===0)){return false}return true},arrayIndexOf:function(arr,el){if(arr.indexOf){return arr.indexOf(el)}else{var i;for(i=arr.length-1;i>=0;i--){if(arr[i]===el){return i}}return-1}},arrayReuse:function(arr,obj){var index=this.arrayIndexOf(arr,null);if(index===-1){index=arr.push(obj)-1}else{arr[index]=obj}return index},each:function(obj,fn){var i,l;if(obj.constructor===Array){l=obj.length;for(i=0;i<l;i++){if(fn.call(obj[i],i)===false){return false}}}else if(obj){for(i in obj){if(obj.hasOwnProperty(i)){if(fn.call(obj[i],i)===false){return false}}}}return true},getScaleInfo:function(realW,realH,width,height){var pct;if(!width&&!height){pct=1}else{pct=width/ realW || height /realH;if(pct>0.98&&pct<1.02){pct=1}}return{scale:(pct!==1),scalePct:pct,realWidth:realW,realHeight:realH,width:width,height:height,ratio:width/height}},scaleInfo:function(image,scale){var imgCopy,realH,realW,width,height,img=$(image);if(!img.length){return}width=img.width();height=img.height();if(scale){imgCopy=$('<img src="'+img.attr('src')+'" />').hide();$('body').append(imgCopy);realH=imgCopy.height();realW=imgCopy.width();imgCopy.remove()}else{realH=height;realW=width}return this.getScaleInfo(realW,realH,width,height)},fader:(function(){var elements=[],lastKey=0,fade_func=function(el,op,endOp,duration,ie){var index,u=$.mapster.utils,obj;if(typeof el==='number'){index=u.arrayIndexOfProp(elements,'key',el);if(index===-1){return}else{obj=elements[index].element}}else{index=u.arrayIndexOfProp(elements,'element',el);if(index>=0){elements[index]=null}obj=el;el=++lastKey;u.arrayReuse(elements,{"element":obj,"key":el})}endOp=endOp||1;op=(op+(endOp/ 10) > endOp - 0.01) ? endOp : op + (endOp /10);u.setOpacity(obj,op,ie);if(op<endOp){setTimeout(function(){fade_func(el,op,endOp,duration,ie)},duration?duration/10:15)}};return fade_func}())};$.mapster.default_tooltip_container=function(){return'<div class="mapster-tooltip" style="border: 2px solid black; background: #EEEEEE; position:absolute; width:160px; padding:4px; margin: 4px; -moz-box-shadow: 3px 3px 5px #535353; '+'-webkit-box-shadow: 3px 3px 5px #535353; box-shadow: 3px 3px 5px #535353; -moz-border-radius: 6px 6px 6px 6px; -webkit-border-radius: 6px; '+'border-radius: 6px 6px 6px 6px;"></div>'};$.mapster.render_defaults={fade:true,fadeDuration:150,altImage:null,altImageOpacity:0.7,fill:true,fillColor:'000000',fillColorMask:'FFFFFF',fillOpacity:0.5,stroke:false,strokeColor:'ff0000',strokeOpacity:1,strokeWidth:1,includeKeys:'',alt_image:null};$.mapster.defaults=$.mapster.utils.mergeObjects({source:[{render_highlight:{},render_select:{fade:false},staticState:null,selected:false,isSelectable:true,isDeselectable:true,singleSelect:false,wrapClass:false,onGetList:null,sortList:false,listenToList:false,mapKey:'',mapValue:'',listKey:'value',listSelectedAttribute:'selected',listSelectedClass:null,showToolTip:false,toolTipFade:true,toolTipClose:['area-mouseout'],toolTipContainer:$.mapster.default_tooltip_container(),onClick:null,onMouseover:null,onMouseout:null,onStateChange:null,onShowToolTip:null,boundList:null,onCreateTooltip:null,onConfigured:null,configTimeout:10000,noHrefIsMask:true,scaleMap:true,areas:[]},$.mapster.render_defaults]});$.mapster.area_defaults=$.mapster.utils.mergeObjects({source:[$.mapster.defaults,{toolTip:'',includeKeys:'',isMask:false}],deep:"render_highlight, render_select",include:"fade,fadeDuration,fill,fillColor,fillOpacity,stroke,strokeColor,strokeOpacity,strokeWidth,staticState,selected,"+"isSelectable,isDeselectable,render_highlight,render_select,isMask,toolTip"});$.mapster.impl=(function(){var me={},AreaData,MapData,MapArea,Method,u=$.mapster.utils,map_cache=[],ie_config_complete=false,has_canvas=null,graphics=null,canvas_style={position:'absolute',left:0,top:0,padding:0,border:0};me.test=function(obj){return eval(obj)};function create_canvas(img){return $(graphics.create_canvas_for(img)).css(canvas_style)[0]}function get_map_data_index(obj){var img,id;switch(obj.tagName&&obj.tagName.toLowerCase()){case'area':id=$(obj).parent().attr('name');img=$("img[usemap='#"+id+"']")[0];break;case'img':img=obj;break}return img?u.arrayIndexOfProp(map_cache,'image',img):-1}function get_map_data(obj){var index=get_map_data_index(obj);if(index>=0){return index>=0?map_cache[index]:null}}function setBoundListProperties(opts,target,selected){target.each(function(){if(opts.listSelectedClass){if(selected){$(this).addClass(opts.listSelectedClass)}else{$(this).removeClass(opts.listSelectedClass)}}if(opts.listSelectedAttribute){$(this).attr(opts.listSelectedAttribute,selected)}})}function getBoundList(opts,key_list){return opts.boundList?opts.boundList.filter(':attrMatches("'+opts.listKey+'","'+key_list+'")'):null}function queue_command(map_data,that,command,args){if(!map_data.complete){map_data.commands.push({that:that,command:command,args:args});return true}return false}Method=function(that,args,func_map,func_area,opts){var me=this;me.output=that;me.input=that;me.first=false;me.args=Array.prototype.slice.call(args,0);me.key='';me.func_map=func_map;me.func_area=func_area;$.extend(me,opts)};Method.prototype.go=function(){var i,data,ar,len,result,src=this.input;len=src.length;for(i=0;i<len;i++){data=get_map_data(src[i]);if(data){ar=data.getData(src[i].nodeName==='AREA'?src[i]:this.key);if(ar){result=this.func_area.apply(ar,this.args)}else{result=this.func_map.apply(data,this.args)}if(this.first){break}}}if(typeof result!=='undefined'){return result}else{return me.output}};MapData=function(image,options){var me=this;this.index=-1;this.image=image;this.images=[];this.imageSources=[];this.imageStatus=[];this.altImagesXref={};this.map=null;this.options=options;this.area_options=u.mergeObjects({template:$.mapster.area_defaults,source:options});this.base_canvas=null;this.overlay_canvas=null;this.complete=false;this.commands=[];this.data=[];this.imgCssText=image.style.cssText||null;this.bindTries=options.configTimeout/200;this._xref={};this._highlightId=-1;this._tooltip_events=[];this.scaleInfo=null;this.mouseover=function(e){var ar=me.getDataForArea(this),opts=ar.effectiveOptions();if(!has_canvas){this.blur()}ar.highlight();if(me.options.showToolTip&&opts.toolTip&&me.activeToolTipID!==ar.areaId){ar.showTooltip(this)}if($.isFunction(me.options.onMouseover)){me.options.onMouseover.call(this,{e:e,options:opts,key:ar.key,selected:ar.isSelected()})}};this.mouseout=function(e){var key,ar=me.getDataForArea(this),opts=me.options;if(opts.toolTipClose&&u.arrayIndexOf(opts.toolTipClose,'area-mouseout')>=0){me.clearTooltip()}me.ensureNoHighlight();if($.isFunction(opts.onMouseout)){opts.onMouseout.call(this,{e:e,options:opts,key:key,selected:ar.isSelected()})}};this.click=function(e){var selected,list,list_target,newSelectionState,canChangeState,that=this,ar=me.getDataForArea(this),opts=me.options;e.preventDefault();if(!has_canvas){this.blur()}opts=me.options;function clickArea(ar){var areaOpts;canChangeState=(ar.isSelectable()&&(ar.isDeselectable()||!ar.isSelected()));if(canChangeState){newSelectionState=!ar.isSelected()}else{newSelectionState=ar.isSelected()}list_target=getBoundList(opts,ar.key);if($.isFunction(opts.onClick)){if(false===opts.onClick.call(that,{e:e,listTarget:list_target,key:ar.key,selected:newSelectionState})){return}}if(canChangeState){selected=ar.toggleSelection()}if(opts.boundList&&opts.boundList.length>0){setBoundListProperties(opts,list_target,ar.isSelected())}areaOpts=ar.effectiveOptions();if(areaOpts.includeKeys){list=areaOpts.includeKeys.split(',');u.each(list,function(){var ar=me.getDataForKey(this.toString());if(!ar.options.isMask){clickArea(ar)}})}}clickArea(ar)}};MapData.prototype.resize=function(width,height,duration){var newsize,me=this;function sizeCanvas(canvas,w,h){if(has_canvas){canvas.width=w;canvas.height=h}else{$(canvas).width(w);$(canvas).height(h)}}function finishResize(){me.scaleInfo=u.getScaleInfo(me.scaleInfo.realWidth,me.scaleInfo.realHeight,width,height);u.each(me.data,function(){u.each(this.areas,function(){this.resize()})});sizeCanvas(me.base_canvas,width,height);sizeCanvas(me.overlay_canvas,width,height);me.setAreasSelected()}if(!width){width=height*me.scaleInfo.ratio}if(!height){height=width/me.scaleInfo.ratio}newsize={'width':String(width)+'px','height':String(height)+'px'};if(!has_canvas){$(me.base_canvas).children().remove()}if(duration){$(me.wrapper).find('.mapster_el').add(me.wrapper).animate(newsize,duration||1000);$(this.image).animate(newsize,1100,finishResize)}else{$(me.wrapper).find('.mapster_el').add(me.wrapper).add(this.image).css(newsize);finishResize()}};MapData.prototype.addImage=function(src,altId){var index;if(!src){return}index=$.inArray(src,this.imageSources);if(index<=0){index=this.imageSources.push(src)-1;this.imageStatus[index]=false}if(altId){this.altImagesXref[altId]=index}};MapData.prototype.bindImages=function(dontBind){var alreadyLoaded=true,me=this;function onLoad(){var index;if(alreadyLoaded){return}index=$.inArray(this,me.images);if(index<0){throw("Unable to find ref to image '"+this.src+"'.")}me.imageStatus[index]=true;if($.inArray(false,me.imageStatus)<0){me.initialize()}}if(me.complete){return}u.each(this.imageSources,function(i){var img=new Image();img.src=this;if(u.isImageLoaded(img)){me.images[i]=img;me.imageStatus[i]=true}else if(!dontBind){alreadyLoaded=false;img=new Image();me.images[i]=img;img.onload=onLoad;img.src=this}});if(alreadyLoaded){me.initialize()}else{if(me.bindTries-->0){window.setTimeout(function(){me.bindImages(true)},1000)}else{throw("Images never seemed to finish loading.")}}};MapData.prototype.altImage=function(mode){return this.images[this.altImagesXref[mode]]};MapData.prototype.wrapId=function(){return'mapster_wrap_'+this.index};MapData.prototype._idFromKey=function(key){return this.complete&&typeof key==="string"&&this._xref.hasOwnProperty(key)?this._xref[key]:-1};MapData.prototype.getSelected=function(){var result='';u.each(this.data,function(){if(this.isSelected()){result+=(result?',':'')+this.key}});return result};MapData.prototype.getDataForArea=function(area){var ar,key=$(area).data('mapster_key');ar=this.data[this._idFromKey(key)];if(ar){ar.area=area}return ar};MapData.prototype.getDataForKey=function(key){return this.data[this._idFromKey(key)]};MapData.prototype.getData=function(obj){if(typeof obj==='string'){return this.getDataForKey(obj)}else if(obj instanceof jQuery||u.isElement(obj)){return this.getDataForArea(obj)}else{return null}};MapData.prototype.ensureNoHighlight=function(){var ar;if(this._highlightId>=0){graphics.init(this);graphics.clear_highlight();ar=this.data[this._highlightId];ar.changeState('highlight',false);this._highlightId=-1}};MapData.prototype.setHighlight=function(id){this._highlightId=id};MapData.prototype.initGraphics=function(){graphics.init(this)};MapData.prototype.setAreaOptions=function(area_list){var i,area_options,ar,areas=area_list||{};for(i=areas.length-1;i>=0;i--){area_options=areas[i];ar=this.getDataForKey(area_options.key);if(ar){u.mergeObjects({target:ar.options,source:area_options});if(u.isBool(area_options.selected)){ar.selected=area_options.selected}}}};MapData.prototype.setAreasSelected=function(selected_list){var i;this.initGraphics();if(selected_list){for(i=selected_list.length-1;i>=0;i--){this.data[selected_list[i]].setAreaSelected()}}else{u.each(this.data,function(){if(this.isSelectedOrStatic()){this.setAreaSelected()}})}};MapData.prototype.initialize=function(){var base_canvas,overlay_canvas,wrap,parentId,$area,area,css,sel,areas,i,j,keys,key,area_id,default_group,group_value,img,sort_func,sorted_list,dataItem,mapArea,scale,me=this,opts=me.options;function addGroup(key,value){var dataItem=new AreaData(me,key,value,opts);dataItem.areaId=me._xref[key]=me.data.push(dataItem)-1;return dataItem.areaId}if(me.complete){return}me.complete=true;img=$(me.image);parentId=img.parent().attr('id');if(parentId&&parentId.length>=12&&parentId.substring(0,12)==="mapster_wrap"){wrap=img.parent();wrap.attr('id',me.wrapId())}else{wrap=$('<div id="'+me.wrapId()+'"></div>');if(opts.wrapClass){if(opts.wrapClass===true){wrap.addClass(img.attr('class'))}else{wrap.addClass(opts.wrapClass)}}}me.wrapper=wrap;base_canvas=create_canvas(me.image);overlay_canvas=create_canvas(me.image);me.base_canvas=base_canvas;me.overlay_canvas=overlay_canvas;me._xref={};me.data=[];default_group=!opts.mapKey;sel=($.browser.msie&&$.browser.version<=7)?'area':(default_group?'area[coords]':'area['+opts.mapKey+']');areas=$(me.map).find(sel);scale=me.scaleInfo=u.scaleInfo(me.image,opts.scaleMap);for(i=areas.length-1;i>=0;i--){area_id=0;area=areas[i];$area=$(area);key=area.getAttribute(opts.mapKey);keys=(default_group||typeof key!=='string')?['']:key.split(',');for(j=keys.length-1;j>=0;j--){key=keys[j];if(opts.mapValue){group_value=$area.attr(opts.mapValue)}if(default_group){area_id=addGroup(this.data.length,group_value);dataItem=this.data[area_id];dataItem.key=key=area_id.toString()}else{area_id=this._xref[key];if(area_id>=0){dataItem=this.data[area_id];if(group_value&&!this.data[area_id].value){dataItem.value=group_value}}else{area_id=addGroup(key,group_value);dataItem=this.data[area_id]}}mapArea=new MapArea(this,area);dataItem.areas.push(mapArea)}if(!mapArea.nohref){$area.bind('mouseover.mapster',this.mouseover).bind('mouseout.mapster',this.mouseout).bind('click.mapster',this.click);$area.data('mapster_key',key)}}css={display:'block',position:'relative',padding:0,width:scale.width,height:scale.height};img.css(canvas_style);me.images[0].style.cssText=me.image.style.cssText;me.images[0].className='mapster_el';u.setOpacity(me.images[0],1,!has_canvas);if(img.parent()[0]!==me.wrapper[0]){img.before(me.wrapper)}$(me.wrapper).css(css).append(me.images[0]).append(base_canvas).append(overlay_canvas).append(img);u.setOpacity(me.image,0,!has_canvas);this.setAreaOptions(opts.areas);if(opts.isSelectable&&opts.onGetList){sorted_list=this.data.slice(0);if(opts.sortList){if(opts.sortList==="desc"){sort_func=function(a,b){return a===b?0:(a>b?-1:1)}}else{sort_func=function(a,b){return a===b?0:(a<b?-1:1)}}sorted_list.sort(function(a,b){a=a.value;b=b.value;return sort_func(a,b)})}this.options.boundList=opts.onGetList.call(this.image,sorted_list)}me.setAreasSelected();if(me.commands.length){u.each(me.commands,function(){methods[this.command].apply(this.that,this.args)});me.commands=[]}if(opts.onConfigured&&typeof opts.onConfigured==='function'){opts.onConfigured.call(img,true)}};MapData.prototype.clearEvents=function(){$(this.map).find('area').unbind('mouseover.mapster').unbind('mouseout.mapster').unbind('click.mapster')};MapData.prototype._clearCanvases=function(preserveState){if(!preserveState){$(this.base_canvas).remove()}$(this.overlay_canvas).remove()};MapData.prototype.clearTooltip=function(){if(this.activeToolTip){this.activeToolTip.remove();this.activeToolTip=null;this.activeToolTipID=-1}u.each(this._tooltip_events,function(){this.object.unbind(this.event)})};MapData.prototype.clearMapData=function(preserveState){var me=this;this._clearCanvases(preserveState);u.each(this.data,function(){this.reset(preserveState)});this.data=null;if(!preserveState){this.image.style.cssText=this.imgCssText;$(this.wrapper).before(this.image).remove();$(this.images[0]).remove()}this.image=null;u.each(this.images,function(i){me.images[i]=null});this.clearTooltip()};MapData.prototype.bindTooltipClose=function(option,event,obj){var event_name=event+'.mapster-tooltip',me=this;if(u.arrayIndexOf(this.options.toolTipClose,option)>=0){obj.unbind(event_name).bind(event_name,function(){me.clearTooltip()});this._tooltip_events.push({object:obj,event:event_name})}};AreaData=function(owner,key,value){this.owner=owner;this.key=key||'';this.areaId=-1;this.value=value||'';this.options={};this.selected=null;this.areas=[];this.area=null;this._effectiveOptions=null};AreaData.prototype.reset=function(preserveState){u.each(this.areas,function(){this.reset(preserveState)});this.areas=null;this.options=null;this._effectiveOptions=null};AreaData.prototype.isSelectedOrStatic=function(){var o=this.effectiveOptions();return u.isBool(this.selected)?this.selected:(u.isBool(o.staticState)?o.staticState:(u.isBool(this.owner.options.staticState)?this.owner.options.staticState:false))};AreaData.prototype.isSelected=function(){return this.selected||false};AreaData.prototype.isSelectable=function(){return u.isBool(this.effectiveOptions().staticState)?false:(u.isBool(this.owner.options.staticState)?false:this.effectiveOptions().isSelectable)};AreaData.prototype.isDeselectable=function(){return u.isBool(this.effectiveOptions().staticState)?false:(u.isBool(this.owner.options.staticState)?false:this.effectiveOptions().isDeselectable)};AreaData.prototype.effectiveOptions=function(override_options){if(!this._effectiveOptions){this._effectiveOptions=u.mergeObjects({source:[this.owner.area_options,this.options,override_options||{},{id:this.areaId}],deep:"render_highlight,render_select"})}return this._effectiveOptions};AreaData.prototype.changeState=function(state_type,state){if($.isFunction(this.owner.options.onStateChange)){this.owner.options.onStateChange.call(this.owner.image,{key:this.key,state:state_type,selected:state})}};AreaData.prototype.highlight=function(){graphics.addShapeGroup(this,"highlight");this.owner.setHighlight(this.areaId);this.changeState('highlight',true)};AreaData.prototype.setAreaSelected=function(){graphics.addShapeGroup(this,"select");this.changeState('select',true)};AreaData.prototype.addSelection=function(){var o=this.owner;o.initGraphics();if(o.options.singleSelect){graphics.clear_selections();u.each(o.data,function(){this.selected=false})}if(!this.isSelected()){this.setAreaSelected();this.selected=true}if(o.options.singleSelect){graphics.refresh_selections()}};AreaData.prototype.removeSelection=function(){var o=this.owner;o.initGraphics();if(this.selected===false){return}this.selected=false;graphics.clear_selections(this.areaId);graphics.refresh_selections();graphics.clear_highlight();this.changeState('select',false)};AreaData.prototype.toggleSelection=function(){if(!this.isSelected()){this.addSelection()}else{this.removeSelection()}return this.isSelected()};AreaData.prototype.showTooltip=function(forArea){var tooltip,left,top,tooltipCss,coords,fromCoords,container,alignLeft=true,alignTop=true,opts=this.effectiveOptions(),map_data=this.owner,baseOpts=map_data.options,template=map_data.options.toolTipContainer;if(typeof template==='string'){container=$(template)}else{container=$(template).clone()}tooltip=container.html(opts.toolTip).hide();if(forArea){fromCoords=$(forArea).attr("coords").split(",")}else{fromCoords=[];u.each(this.areas,function(){fromCoords=fromCoords.concat(this.coords)})}coords=u.area_corner(fromCoords,alignLeft,alignTop);map_data.clearTooltip();$(map_data.image).after(tooltip);map_data.activeToolTip=tooltip;map_data.activeToolTipID=this.areaId;left=coords[0]-tooltip.outerWidth(true);top=coords[1]-tooltip.outerHeight(true);if(left<0){alignLeft=false}if(top<0){alignTop=false}if(!alignLeft||!alignTop){coords=u.area_corner(fromCoords,alignLeft,alignTop)}left=coords[0]-(alignLeft?tooltip.outerWidth(true):0);top=coords[1]-(alignTop?tooltip.outerHeight(true):0);tooltipCss={"left":left+"px","top":top+"px"};if(!tooltip.css("z-index")||tooltip.css("z-index")==="auto"){tooltipCss["z-index"]="2000"}tooltip.css(tooltipCss).addClass('mapster_tooltip');map_data.bindTooltipClose('area-click','click',$(map_data.map));map_data.bindTooltipClose('tooltip-click','click',tooltip);if(map_data.options.toolTipFade){u.setOpacity(tooltip[0],0,!has_canvas);tooltip.show();u.fader(tooltip[0],0,1,opts.fadeDuration,!has_canvas)}else{tooltip.show()}u.ifFunction(baseOpts.onShowToolTip,forArea||null,{toolTip:tooltip,areaOptions:opts,key:this.key,selected:this.isSelected()})};MapArea=function(owner,areaEl){var me=this;me.owner=owner;me.area=areaEl;me.originalCoords=areaEl.coords.split(',');me.length=me.originalCoords.length;me.shape=areaEl.shape.toLowerCase();me.nohref=areaEl.nohref||!areaEl.href;if(me.owner.scaleInfo.scale){me.resize()}};MapArea.prototype.resize=function(){this.area.coords=this.coords().join(',')};MapArea.prototype.reset=function(){this.area.coords=this.coords(1).join(',')};MapArea.prototype.coords=function(pct){var j,newCoords=[];pct=pct||this.owner.scaleInfo.scalePct;if(pct===1){return this.originalCoords}for(j=0;j<this.length;j++){newCoords.push(Math.round(this.originalCoords[j]*pct).toString())}return newCoords};me.get=function(key){var ar,map_data,result='';this.each(function(){map_data=get_map_data(this);if(!map_data){return true;}if(key){ar=map_data.getDataForKey(key);if(ar){result=ar.isSelected()}return false;}else{result=map_data.getSelected()}return false;});return result};me.data=function(key){return(new Method(this,arguments,null,function(){return this},{key:key})).go()};me.tooltip=function(key){return(new Method(this,arguments,function(){this.clearTooltip()},function(){if(this.effectiveOptions().toolTip){this.showTooltip(this.area)}},{key:key})).go()};me.highlight=function(key){return(new Method(this,arguments,function(selected){var id;if(key===false){this.ensureNoHighlight()}else{id=this._highlightId;return id>=0?this.data[id].key:null}},function(){this.highlight()},{key:key})).go()};me.set=function(selected,key,set_bound){var lastParent,parent,map_data,key_list,do_set_bound;function setSelection(ar){switch(selected){case true:ar.addSelection();break;case false:ar.removeSelection();break;default:ar.toggleSelection();break}}do_set_bound=u.isBool(set_bound)?set_bound:true;this.each(function(){var ar;map_data=get_map_data(this);if(!map_data){return true;}key_list='';if($(this).is('img')){if(queue_command(map_data,$(this),'set',[selected,key,do_set_bound])){return true}if(key instanceof Array){if(key.length){key_list=key.join(",")}}else{key_list=key}if(key_list){u.each(key_list.split(','),function(){setSelection(map_data.getDataForKey(this.toString()))})}}else{parent=$(this).parent()[0];if(lastParent&&parent!==lastParent){map_data=get_map_data(this);if(!map_data){return true}lastParent=parent}lastParent=parent;if(queue_command(map_data,$(this),'set',[selected,key,do_set_bound])){return true}ar=map_data.getDataForArea(this);if((key_list+",").indexOf(ar.key)<0){key_list+=(key_list===''?'':',')+ar.key}setSelection(ar)}if(do_set_bound&&map_data.options.boundList){setBoundListProperties(map_data.options,getBoundList(map_data.options,key_list),selected)}});return this};me.unbind=function(preserveState){var map_data;return this.each(function(){map_data=get_map_data(this);if(map_data){if(queue_command(map_data,$(this),'unbind')){return true}map_data.clearEvents();map_data.clearMapData(preserveState);map_cache.splice(map_data.index,1)}})};function merge_areas(map_data,areas){var ar,index,map_areas=map_data.options.areas;if(areas){u.each(areas,function(){index=u.arrayIndexOfProp(map_areas,"key",this.key);if(index>=0){$.extend(map_areas[index],this)}else{map_areas.push(this)}ar=map_data.getDataForKey(this.key);if(ar){$.extend(ar.options,this)}})}}function merge_options(map_data,options){u.mergeObjects({ignore:"areas",target:map_data.options,source:options,deep:"render_select,render_highlight"});merge_areas(map_data,options.areas);u.mergeObjects({target:map_data.area_options,source:map_data.options,add:false});u.each(map_data.data,function(){this._effectiveOptions=null})}me.rebind=function(options){var map_data;if(!options){return}this.filter('img').each(function(){map_data=get_map_data(this);if(map_data){if(queue_command(map_data,$(this),'rebind',[options])){return true}merge_options(map_data,options);map_data.setAreaOptions(options.areas||{});map_data.setAreasSelected()}});return this};me.get_options=function(key,effective){var opts,ar,map_data,img=this.filter('img').first()[0];effective=u.isBool(key)?key:effective;map_data=get_map_data(img);if(map_data){if(typeof key==='string'){ar=map_data.getDataForKey(key);if(ar){opts=effective?ar.effectiveOptions():ar.options}}else{opts=map_data.options;if(effective){opts.render_select=u.mergeObjects({template:$.mapster.render_defaults,source:[opts,opts.render_select]});opts.render_highlight=u.mergeObjects({template:$.mapster.render_defaults,source:[opts,opts.render_highlight]})}}return opts}return null};me.set_options=function(options){var img=this.filter('img')[0],map_data=get_map_data(img);if(map_data){if(queue_command(map_data,$(this),'set_options',[options])){return true}merge_options(map_data,options)}return this};me.bind=function(options){var opts=u.mergeObjects({source:[$.mapster.defaults,options],deep:"render_select,render_highlight"});return this.each(function(){var img,map,usemap,map_data;img=$(this);img.css('border',0);map_data=get_map_data(this);if(map_data){if(queue_command(map_data,$(this),'bind',[options])){return true}else{me.unbind.call(img);map_data=null}}usemap=this.getAttribute('usemap');map=usemap&&$('map[name="'+usemap.substr(1)+'"]');if(!(img.is('img')&&usemap&&map.size()>0)){return true}if(!map_data){map_data=new MapData(this,opts);map_data.index=map_cache.push(map_data)-1;map_data.map=map;map_data.addImage(this.src);if(has_canvas){map_data.addImage(opts.render_highlight.altImage||opts.altImage,"highlight");map_data.addImage(opts.render_select.altImage||opts.altImage,"select")}map_data.bindImages()}})};me.init=function(useCanvas){var style,shapes;has_canvas=$('<canvas></canvas>')[0].getContext?true:false;if(!(has_canvas||document.namespaces)){$.fn.mapster=function(){return this};return}if(u.isBool(useCanvas)){has_canvas=useCanvas}if($.browser.msie&&!has_canvas&&!ie_config_complete){document.namespaces.add("v","urn:schemas-microsoft-com:vml");style=document.createStyleSheet();shapes=['shape','rect','oval','circ','fill','stroke','imagedata','group','textbox'];$.each(shapes,function(){style.addRule('v\\:'+this,"behavior: url(#default#VML); antialias:true")});ie_config_complete=true}graphics=(function(){var element_name,map_data,canvas,context,width,height,masks,shapes,css3color,render_shape,addAltImage,me={};me.active=false;function addShapeGroupImpl(areaData,mode){var opts,areaOpts;areaOpts=areaData.effectiveOptions();opts=u.mergeObjects({source:[$.mapster.render_defaults,areaOpts,areaOpts['render_'+mode],{alt_image:map_data.altImage(mode)}]});u.each(areaData.areas,function(){opts.isMask=areaOpts.isMask||(this.nohref&&map_data.options.noHrefIsMask);if(!u.isBool(opts.staticState)){me.addShape(this,opts)}});return areaOpts}me.init=function(_map_data){map_data=_map_data};me.begin=function(curCanvas,curName){canvas=curCanvas;width=$(canvas).width();height=$(canvas).height();shapes=[];masks=[];me.active=true;me.beginSpecific(curName)};me.addShape=function(mapArea,options){var addto=options.isMask?masks:shapes;addto.push({mapArea:mapArea,options:options})};me.addShapeGroup=function(areaData,mode){var list,name,opts=areaData.effectiveOptions();me.init(areaData.owner);if(mode==='select'){name="static_"+areaData.areaId.toString();canvas=map_data.base_canvas}else{canvas=map_data.overlay_canvas}me.begin(canvas,name);if(opts.includeKeys){list=opts.includeKeys.split(',');u.each(list,function(){addShapeGroupImpl(map_data.getDataForKey(this.toString()),mode)})}opts=addShapeGroupImpl(areaData,mode);me.render();if(opts.fade&&mode==='highlight'){u.fader(canvas,0,1,opts.fadeDuration,!has_canvas)}};if(has_canvas){css3color=function(color,opacity){function hex_to_decimal(hex){return Math.max(0,Math.min(parseInt(hex,16),255))}return'rgba('+hex_to_decimal(color.substr(0,2))+','+hex_to_decimal(color.substr(2,2))+','+hex_to_decimal(color.substr(4,2))+','+opacity+')'};render_shape=function(context,mapArea){var i,c=mapArea.coords();switch(mapArea.shape){case'rect':context.rect(c[0],c[1],c[2]-c[0],c[3]-c[1]);break;case'poly':context.moveTo(c[0],c[1]);for(i=2;i<mapArea.length;i+=2){context.lineTo(c[i],c[i+1])}context.lineTo(c[0],c[1]);break;case'circ':case'circle':context.arc(c[0],c[1],c[2],0,Math.PI*2,false);break}};addAltImage=function(context,image,mapArea,options){context.beginPath();render_shape(context,mapArea);context.closePath();context.clip();context.globalAlpha=options.altImageOpacity;context.drawImage(image,0,0,mapArea.owner.scaleInfo.width,mapArea.owner.scaleInfo.height)};me.beginSpecific=function(){context=canvas.getContext('2d')};me.render=function(){var maskCanvas=$('<canvas width='+canvas.width+' height='+canvas.height+'></canvas>')[0],maskContext=maskCanvas.getContext('2d'),shapeCanvas=$('<canvas width='+canvas.width+' height='+canvas.height+'></canvas>')[0],shapeContext=shapeCanvas.getContext('2d');if(masks.length){u.each(masks,function(){maskContext.beginPath();render_shape(maskContext,this.mapArea);maskContext.closePath();maskContext.fillStyle='#fff';maskContext.fill()})}u.each(shapes,function(){var s=this;shapeContext.save();if(s.options.alt_image){addAltImage(shapeContext,s.options.alt_image,s.mapArea,s.options)}else if(s.options.fill){shapeContext.beginPath();render_shape(shapeContext,s.mapArea);shapeContext.closePath();shapeContext.clip();shapeContext.fillStyle=css3color(s.options.fillColor,s.options.fillOpacity);shapeContext.fill()}shapeContext.restore()});u.each(shapes.concat(masks),function(){var s=this;if(s.options.stroke){shapeContext.save();shapeContext.strokeStyle=css3color(s.options.strokeColor,s.options.strokeOpacity);shapeContext.lineWidth=s.options.strokeWidth;shapeContext.beginPath();render_shape(shapeContext,s.mapArea);shapeContext.closePath();shapeContext.stroke();shapeContext.restore();shapeContext.restore()}});maskContext.globalCompositeOperation="source-out";maskContext.drawImage(shapeCanvas,0,0);context.drawImage(maskCanvas,0,0);context=null;me.active=false;return canvas};me.create_canvas_for=function(img,width,height){var c,$img=$(img);c=$('<canvas width='+$img.width()+' height='+$img.height()+'></canvas>').addClass("mapster_el")[0];c.getContext("2d").clearRect(0,0,$img.width(),$img.height());return c};me.clear_highlight=function(){map_data.overlay_canvas.getContext('2d').clearRect(0,0,map_data.overlay_canvas.width,map_data.overlay_canvas.height)};me.clear_selections=function(){return null};me.refresh_selections=function(){var canvas_temp;canvas_temp=map_data.base_canvas;map_data.base_canvas=create_canvas(map_data.image);$(map_data.base_canvas).hide();$(map_data.image).before(map_data.base_canvas);map_data.setAreasSelected();$(map_data.base_canvas).show();$(canvas_temp).remove()};return me}else{render_shape=function(mapArea,options){var stroke,e,t_fill,el_name,template,c=mapArea.coords();el_name=element_name?'name="'+element_name+'" ':'';t_fill='<v:fill color="#'+options.fillColor+'" opacity="'+(options.fill?options.fillOpacity:0)+'" /><v:stroke opacity="'+options.strokeOpacity+'"/>';if(options.stroke){stroke='strokeweight='+options.strokeWidth+' stroked="t" strokecolor="#'+options.strokeColor+'"'}else{stroke='stroked="f"'}switch(mapArea.shape){case'rect':template='<v:rect '+el_name+' filled="t" '+stroke+' style="zoom:1;margin:0;padding:0;display:block;position:absolute;left:'+c[0]+'px;top:'+c[1]+'px;width:'+(c[2]-c[0])+'px;height:'+(c[3]-c[1])+'px;">'+t_fill+'</v:rect>';break;case'poly':template='<v:shape '+el_name+' filled="t" '+stroke+' coordorigin="0,0" coordsize="'+width+','+height+'" path="m '+c[0]+','+c[1]+' l '+c.slice(2).join(',')+' x e" style="zoom:1;margin:0;padding:0;display:block;position:absolute;top:0px;left:0px;width:'+width+'px;height:'+height+'px;">'+t_fill+'</v:shape>';break;case'circ':case'circle':template='<v:oval '+el_name+' filled="t" '+stroke+' style="zoom:1;margin:0;padding:0;display:block;position:absolute;left:'+(c[0]-c[2])+'px;top:'+(c[1]-c[2])+'px;width:'+(c[2]*2)+'px;height:'+(c[2]*2)+'px;">'+t_fill+'</v:oval>';break}e=$(template);$(canvas).append(e);return e};me.beginSpecific=function(name){element_name=name};me.create_canvas_for=function(img){var $img=$(img),width=$img.width(),height=$img.height();return $('<var width="'+width+'" height="'+height+'" style="zoom:1;overflow:hidden;display:block;width:'+width+'px;height:'+height+'px;"></var>')[0]};me.render=function(){var opts;u.each(shapes,function(){render_shape(this.mapArea,this.options)});if(masks.length){u.each(masks,function(){opts=u.mergeObjects({source:[this.options,{fillOpacity:1,fillColor:this.options.fillColorMask}]});render_shape(this.mapArea,opts)})}me.active=false;return canvas};me.clear_highlight=function(){$(map_data.overlay_canvas).children().remove()};me.clear_selections=function(area_id){if(area_id>=0){$(map_data.base_canvas).find('[name="static_'+area_id.toString()+'"]').remove()}else{$(map_data.base_canvas).children().remove()}};me.refresh_selections=function(){return null};return me}}())};me.unload=function(){var i;for(i=map_cache.length-1;i>=0;i--){if(map_cache[i]){me.unbind.call($(map_cache[i].image))}}graphics=null};me.resize=function(width,height,duration){var d;return this.each(function(){d=get_map_data(this);if((!width&&!height)||!d||queue_command(d,$(this),'snapshot')){return true}d.resize(width,height,duration)})};me.snapshot=function(){var d;return this.filter('img').each(function(){d=get_map_data(this);if(d){if(queue_command(d,$(this),'snapshot')){return true}u.each(d.data,function(){this.selected=false});d.base_canvas=create_canvas(d.image);$(d.base_canvas);$(d.image).before(d.base_canvas)}})};return me}());$.mapster.unload=function(){this.impl.unload();$.mapster.utils.fader=null;$.mapster.utils=null;$.mapster.impl=null;$.fn.mapster=null;$.mapster=null;$('*').unbind()};$.expr[':'].attrMatches=function(objNode,intStackIndex,arrProperties,arrNodeStack){var i,j,curVal,quoteChar=arrProperties[2],arrArguments=eval("["+quoteChar+arrProperties[3]+quoteChar+"]"),compareList=arrArguments[1].split(','),node=$(objNode);for(i=0;i<arrArguments.length;i++){curVal=node.attr(arrArguments[0]);for(j=compareList.length-1;j>=0;j--){if(curVal===compareList[j]){return true}}}return false};methods={select:function(){$.mapster.impl.set.call(this,true)},deselect:function(){$.mapster.impl.set.call(this,false)}};$.each(["bind","rebind","unbind","set","get","data","highlight","get_options","set_options","snapshot","tooltip","test","resize"],function(){methods[this]=$.mapster.impl[this]});$.mapster.impl.init()}(jQuery));