
function addMap(mOpts){if(!GBrowserIsCompatible())
return false;mapEl=checkElement((hasProp(mOpts,'map'))?mOpts.map:'map');var map=new GMap2(mapEl);map['mOpts']=mOpts;mapEl['mapObj']=map;if(hasProp(mOpts,'delay')&&!!mOpts['delay']){map['loaded']=false;}else{startMap(map);}
return map;}
function startMap(map,mOpts){if(map.loaded)
return false;if(!isset(mOpts)){if(hasProp(map,'mOpts'))
mOpts=map.mOpts;else
return false;}
var excluded=['map','controls','center'];for(var opt in mOpts){if(excluded.indexOf(opt)!=-1)
continue;map[opt]=mOpts[opt];}
var setupMap=function(prop,defaultVal,isEl){if(!hasProp(map,prop)&&isset(defaultVal))
map[prop]=defaultVal;if(hasProp(map,prop)&&isEl)
map[prop]=checkElement(map[prop]);}
setupMap('bcList','nav_map',true);setupMap('bcSeparator','>');setupMap('list','dest_list',true);setupMap('dataSource','javascript/map/map_data.txt');setupMap('mapView',getElementsByClassName('map_view','*')[0],true);setupMap('isMax',false);setupMap('isMini',false);setupMap('dataTypes',[new DataType({id:'c',type:'Country',icon:ICON_POINT,processor:buildCountries,get:getCountries,display:displayCities}),new DataType({id:'city',type:'City',icon:ICON_DIAMOND,processor:buildCities,get:getCities,display:displayHotels,zoomOffset:0}),new DataType({id:'h',type:'Hotel',icon:ICON_HOTEL,hasChildren:false,processor:buildHotels,get:getHotels,present:presentHotels,actions:{clickList:hotelClick,clickMarker:hotelClick}})]);map['content']={"id":0,"levels":[]};map['data']=[];var cL=addContentLevel(map,new ContentLevel(map,"",Map['COUNTRIES']),0);if(hasProp(mOpts,'center')&&mOpts.center.length==3)
initCenter=mOpts.center;else
initCenter=[cL.center,cL.zoom];map.setCenter(initCenter[0],initCenter[1]);var controls={'common':[GMapTypeControl],'standard':[GSmallMapControl],'mini':[GSmallMapControl],'max':[GLargeMapControl,GOverviewMapControl]};if(hasProp(mOpts,'controls'))
controls=mOpts.controls;controls['use']=(map.isMini)?controls.mini:controls.common.concat((map.isMax)?controls.max:controls.standard);for(var contr=0;contr<controls.use.length;contr++){if(isFunction(controls.use[contr]))
map.addControl(new controls.use[contr]());}
if(hasProp(map,'mapView')){var mTT=Map['TT_MAX'],vFunc=mapMaximize;if(hasProp(map.mapView,'tagName')&&map.mapView.tagName.toLowerCase()=='img'){map.mapView.setAttribute('alt',Map['TT_MAX']);map.mapView.onmouseover=function(){toggleImage(this);}
map.mapView.onmouseout=function(){toggleImage(this);}}
else{map.mapView.innerHTML=Map['MAX'];}
if(map.isMax){mTT=Map['TT_MIN'];vFunc=mapMinimize;}
map.mapView.setAttribute('title',mTT);map.mapView.onclick=function(){if(isFunction(vFunc))
vFunc(map);return false;};}
map.enableContinuousZoom();map.enableScrollWheelZoom();if(map.scrollWheelZoomEnabled()){var wheelevent=function(e){if(!e){e=window.event}
if(e.preventDefault){e.preventDefault()}
e.returnValue=false;}
GEvent.addDomListener(map.getContainer(),"DOMMouseScroll",wheelevent);map.getContainer().onmousewheel=wheelevent;}
GEvent.addListener(map,'click',function(overlay,point){});setLevel(map);map.loaded=true;}
function buildCountries(data){var cObj={},coords,dItem;cObj['data']=sortObjArray(data.countries,'name');for(var x=0;x<cObj.data.length;x++){dItem=cObj.data[x];if(!hasProp(dItem,'bounds')){dItem['bounds']=new GLatLngBounds(dItem.coords,dItem.coords);}
checkItemBounds(cObj,dItem.bounds);}
return cObj;}
function buildCities(data,map){data=data.data;var tempObj={},country,city,coords,insert,item,arrLen,cityIndex,cLat,cLng;for(var i=0;i<data.length;i++){country=data[i].country;city=data[i].city;cityIndex=-1;insert=true;if(country in tempObj){cityIndex=objArrayIndexOf(tempObj[country],'name',city);if(cityIndex!=-1){insert=false;}}else{tempObj[country]=[];}
if(insert){arrLen=tempObj[country].push({"name":city});cCity=tempObj[country][arrLen-1];}
else
cCity=tempObj[country][cityIndex];if(!hasProp(data[i],'bounds'))
data[i]['bounds']=new GLatLngBounds(data[i]['coords'],data[i]['coords']);checkItemBounds(cCity,data[i]['bounds']);}
for(var x in tempObj){for(var y=0;y<tempObj[x].length;y++){cCity=tempObj[x][y];cCity['derived']=true;setItemBounds(cCity,map);}
sortObjArray(tempObj[x],'name');}
return tempObj;}
function checkItemBounds(item,bounds){if(!hasBounds(item)){item['bounds']=bounds;}
if(!item.bounds.containsBounds(bounds)){item.bounds.extend(bounds.getSouthWest());item.bounds.extend(bounds.getNorthEast());}}
function setItemBounds(item,map){if(!isset(item)||!hasProp(item,'bounds'))
return false;if(!(item.bounds instanceof GLatLngBounds)&&hasProp(item.bounds,['n','s','w','e']))
item['bounds']=new GLatLngBounds(new GLatLng(item.bounds.s,item.bounds.w),new GLatLng(item.bounds.n,item.bounds.e));if(isset(map)&&(map instanceof GMap2)&&hasProp(map,'processing')){if(hasProp(item,'derived')&&item['derived']===true){var extend=function(coords,ident){var cP=map.fromLatLngToDivPixel(coords),mult=2.5,op=1;if(!ident)
op=-1;cP.x=cP.x+(op*iSize.width*mult);cP.y=cP.y-(op*iSize.height*((ident)?mult:1));return map.fromDivPixelToLatLng(cP);};var c=map.getCenter(),z=map.getZoom();map.setCenter(c,map.getBoundsZoomLevel(item.bounds));var icon=getIcon(map,map.processing),iSize=icon.iconSize,ne=extend(item.bounds.getNorthEast(),true),sw=extend(item.bounds.getSouthWest(),false);item.bounds=new GLatLngBounds(sw,ne);}}
if(!hasCoords(item)){item['coords']=item.bounds.getCenter();}}
function buildHotels(data){return sortObjArray(data.data,'city');}
function getCountries(map){return map.data[0]['data'];}
function getCities(map){var country=getContent(map).id;if(country in map.data[1])
return map.data[1][country];return false;}
function getHotels(map){var content=getContent(map);var data=map.data[getContentLevel(map)];var retData=[];var cData;var foundData=false;for(var x=0;x<data.length;x++){cData=data[x];if(cData.city==content.name){retData.push(cData);foundData=true;}
else if(foundData){break;}}
retData=sortObjArray(retData,'name');return retData;}
function displayCities(map,item){var data=getContentItems(map,0);var marker=getMarker(item);var center=marker.getLatLng(),zLevel=getContent(map).zoom;if(hasBounds(item)){zLevel=map.getBoundsZoomLevel(item.bounds);}
processItem(map,item);}
function drawBounds(map,bounds){if(!checkFuncParams(args))
return false;var ne=bounds.getNorthEast(),sw=bounds.getSouthWest(),nw=new GLatLng(ne.lat(),sw.lng()),se=new GLatLng(sw.lat(),ne.lng());var pLine=new GPolygon([nw,ne,se,sw,nw],"#A5DB02",3,0.5,"#A5db02",0.2);map.addOverlay(pLine);}
function displayHotels(map,item){zLevel=map.getZoom();if('bounds'in item&&item.bounds instanceof GLatLngBounds){bZoomLevel=map.getBoundsZoomLevel(item.bounds)-1;if(bZoomLevel>zLevel)
zLevel=bZoomLevel;}
processItem(map,item);}
function presentHotels(map,item){var address=item.address+' '+item.city+' '+item.country;}
function buildGIcon(iconOptions){var icon=new GIcon(G_DEFAULT_ICON);for(x in iconOptions){icon[x]=iconOptions[x];}
return icon;}
var ICON_CIRCLE=buildGIcon({image:"javascript/map/images/icon_circle.png",iconSize:new GSize(10,10),shadow:"javascript/map/images/icon_circle_shadow.png",shadowSize:new GSize(16,10),iconAnchor:new GPoint(5,5)});var ICON_POINT=buildGIcon({image:"javascript/map/images/icon_point.png",toggle:true,iconSize:new GSize(11,16),shadow:"javascript/map/images/icon_point_shadow.png",shadowSize:new GSize(19,16),iconAnchor:new GPoint(5,16)});var ICON_DIAMOND=buildGIcon({image:"javascript/map/images/icon_diamond.png",toggle:true,iconSize:new GSize(10,15),shadow:"javascript/map/images/icon_diamond_shadow.png",shadowSize:new GSize(18,15),iconAnchor:new GPoint(5,15)})
var ICON_HOTEL=buildGIcon({image:"javascript/map/images/icon_hotel.png",toggle:true,iconSize:new GSize(15,25),shadow:"javascript/map/images/icon_hotel_shadow.png",shadowSize:new GSize(26,25),iconAnchor:new GPoint(10,25)});var MAP_TYPE=GMap2;function DataType(obj){this.id=obj.id||"";this.type=obj.type||"";this.icon=(obj.icon instanceof GIcon)?obj.icon:new GIcon(G_DEFAULT_ICON);this.hasChildren=(obj.hasChildren===false)?false:true;this.childQuery=obj.childQuery||'';this.schema=["id","name","coords"]
this.addExtended(obj.extended);this.processor=isFunction(obj.processor)?obj.processor:null;this.get=isFunction(obj.get)?obj.get:null;this.display=isFunction(obj.display)?obj.display:null;this.present=isFunction(obj.present)?obj.present:null;this.templates=obj.templates||null;this.zoomOffset=obj.zoomOffset||0;this.actions={add:addLabel,mouseover:itemMouseover,mouseout:itemMouseout,click:itemClick};this.setActions(obj.actions);}
DataType.prototype.addExtended=function(extended){if(typeof extended=="object"){for(var x in extended){if(extended[x])
this.schema.push(x);}}}
DataType.prototype.hasProcessor=function(){if(!this.processor)
return false;return true;}
DataType.prototype.process=function(data,map){if(!this.hasProcessor())
return false;if(data instanceof GMap2)
data=data.data;return this.processor(data,map);}
DataType.prototype.getData=function(map){if(!this.get||!(map instanceof GMap2)){return false;}
return this.get(map);}
DataType.prototype.hasTemplate=function(template){if(!this.templates||!(template in this.templates))
return false;return true;}
DataType.prototype.processTemplate=function(template,item){var format=''
if(!this.hasTemplate(template))
return format;return item[this.templates[template]];}
DataType.prototype.setActions=function(actions){if(typeof actions=='undefined')
return false;for(x in actions){var action=actions[x];if(isFunction(action))
this.actions[x]=action;else
delete this.actions[x];}}
DataType.prototype.hasAction=function(action){if(action in this.actions)
return true;}
DataType.prototype.doAction=function(action){if(typeof action=='undefined'||!this.hasAction(action))
return false;var args=[];for(var x=1;x<arguments.length;x++){args.push(arguments[x]);}
this.actions[action].apply(this,args);}
function ContentLevel(map,id,name,center,zoom,breadcrumb,items){if(!map||typeof map=='undefined'||!(map instanceof GMap2))
return false;this.map=map;this.id=id||"";this.name=name||"";this.center,this.zoom;this.setCenter(center);this.setZoom(zoom);this.setBreadcrumb(breadcrumb);this.items=(isset(items)&&(items instanceof Array||typeof(items)=="array"))?items:[];}
ContentLevel.prototype.addItems=function(itemsArr){if(!(itemsArr instanceof Array))
itemsArr=[itemsArr];if(!this.items.push)
this.items=[this.items];this.items=this.items.concat(itemsArr);}
ContentLevel.prototype.setCenter=function(center,zoom){var gCenter;if(isset(center)){if(center instanceof GLatLng)
gCenter=center;else if(center instanceof Array&&center.length>=2)
gCenter=new GLatLng(center[0],center[1]);}
if(!gCenter||!(gCenter instanceof GLatLng)){gCenter=new GLatLng(0,0);}
this.center=gCenter;if(isset(zoom)){this.setZoom(zoom);}}
ContentLevel.prototype.setZoom=function(zoom){var dZoom=1;if(!isset(zoom)||isNaN(parseInt(zoom)))
this.zoom=dZoom;else
this.zoom=parseInt(zoom);}
ContentLevel.prototype.setBreadcrumb=function(breadcrumb){if(!isset(breadcrumb))
breadcrumb=null;else{breadcrumb['level']=this.getLevel();}
this.breadcrumb=breadcrumb;}
ContentLevel.prototype.getLevel=function(){var content=this.map.content.levels;for(var x=0;x<content.length;x++){if(content[x]==this){return x;}}
return 99;}
ContentLevel.prototype.getDataType=function(){var level=this.getLevel();return getDataType(this.map,level);}
function processItem(map,item,center,zoom){if(!isset(map))
return false;if(!isset(item))
item=getContent(map);if(!isset(zoom)){var cZoom=getContent(map).zoom;var zBLevel=0;if(hasBounds(item)){zBLevel=map.getBoundsZoomLevel(item.bounds)+((!map.isMax)?getDataType(map,item.type).zoomOffset:0);if(!isset(center))
center=item.bounds.getCenter();}
zoom=(zBLevel>cZoom)?zBLevel:cZoom;}
if(!isset(center)){center=(hasCoords(item))?item.coords:map.getCenter();}
map.setCenter(center,zoom);if((item instanceof ContentLevel&&item.getDataType(map).hasChildren)||getDataType(map).hasChildren){var newType;if(item instanceof ContentLevel)
newType=item.getLevel();else{newType=getRecip(item).type+1;var baseItem=getRecip(item);addContentLevel(map,new ContentLevel(map,baseItem.id,baseItem.name,center,zoom),newType);}
setLevel(map,newType);}}
function zoomToItem(map,item){if(!isset(map))
return false;if(!isset(item))
item=getContent(map);var zLevel=3;if(item instanceof ContentLevel){processItem(map,item,item.center,item.zoom);}
else{hideTT(item);var baseObj=getRecip(item);var dt=getDataType(map,baseObj.type);if(isFunction(dt.display))
dt.display(map,baseObj);}}
function buildItems(map){var item,liItem,items=getContentItems(map,getContentLevel(map),arguments.callee);if(!items)
return false;var level=getContentLevel(map),dt=getDataType(map,level),content=getContent(map,level);if(level==0){var coords=map.data[0].bounds.getCenter();var zoom=map.getBoundsZoomLevel(map.data[0].bounds);map.setCenter(coords,zoom);content.setCenter(coords,zoom);}
var iterate=function(){for(var x=0;x<items.length;x++){item=items[x];item['recip']={'marker':null,'list':null};item['type']=level;addItem(map,item);}
clearLoading(map);}
var wait=0;if(items.length>10)
wait=1000;setTimeout(iterate,wait);}
function setLevel(map,level){var oldContent=getContent(map);var oldLevel=oldContent.getLevel();var init=false;if(!isset(level)){level=0;init=true;}
setContentLevel(map,level);var content=getContent(map,level);if(oldLevel>=level){var bc=content.breadcrumb;if(bc&&bc.hasChildNodes()){var bcNest=bc.firstChild;var hasLists=true;var c=0;while(hasLists){if(bcNest.childNodes[c].tagName.toLowerCase()=='ul'){bcNest.removeChild(bcNest.childNodes[c]);}else{c++;}
if(c>=bcNest.childNodes.length)
hasLists=false;}}}
if(oldLevel<=level){addBreadcrumb(map);}
if(oldContent!=content||init){showLoading(map);if(!init)
removeItems(oldContent);buildItems(map);}}
function showLoading(map){var loadClass='map_loading';if(!hasProp(map,'list'))
return false;if(!hasProp(map,'loadingNode')){var span=document.createElement('span');map['loadingNode']=span;span.className=loadClass;var lTxt=document.createTextNode(Map['LOADING']);span.appendChild(lTxt);map['loadingNode']=span;}
var loadWrap=checkElement(map.list);if(!hasProp(map.loadingNode,'parentNode')||map.loadingNode.parentNode!=loadWrap)
loadWrap.appendChild(map.loadingNode);}
function clearLoading(map){if(!hasProp(map,'loadingNode'))
return false;map.loadingNode.parentNode.removeChild(map.loadingNode);}
function mapMaximize(map){var wp=document.createElement('div'),ct=document.createElement('div'),ud=document.createElement('div');iud=document.createElement('iframe');iud.setAttribute('src',"javascript:'<html></html>';");addClass(wp,'map_big');addClass(ct,'box_blue_3');addClass(ud,'modal_under');addClass(iud,'modal_under');ud.style.height=getPageSize().pageHeight+'px';var siblings=[wp,ud,iud];for(var s=0;s<siblings.length;s++)
siblings[s]['siblings']=siblings;document.body.appendChild(iud);document.body.appendChild(ud);wp.appendChild(ct);document.body.appendChild(wp);var map=buildMapUI(ct,map);ud.onclick=function(){closeMD(this);}}
function getPageSize(){var obj={};obj['width']=window.innerWidth;obj['height']=window.innerHeight;obj['pageHeight'];obj['pageWidth'];if(window.innerHeight&&window.scrollMaxY){obj.pageWidth=window.innerWidth+window.scrollMaxX;obj.pageHeight=window.innerHeight+window.scrollMaxY;}
else if(document.body.scrollHeight>document.body.offsetHeight){obj.pageWidth=document.body.scrollWidth;obj.pageHeight=document.body.scrollHeight;}
else{obj.pageWidth=document.body.offsetWidth+document.body.offsetTop;obj.pageHeight=document.body.offsetHeight+document.body.offsetTop;}
return obj;}
function mapMinimize(map){if(map.isMax&&hasProp(map,'container')){var wrap=map.container.parentNode;closeMD(wrap);}}
function closeMD(el){if(!hasProp(el,'siblings'))
return false;for(var x=0;x<el.siblings.length;x++){if(hasProp(el.siblings[x],'parentNode')&&isset(el.siblings[x].parentNode)){el.siblings[x].parentNode.removeChild(el.siblings[x]);}}}
function buildMapUI(el,map){var nav=document.createElement('ul'),list=document.createElement('ul'),dest=document.createElement('div'),mBox=document.createElement('div'),mView=document.createElement('img');addClass(el,'map_wrap');addClass(nav,'map_nav list_inline');addClass(dest,'map_list');addClass(list,'list_simple');addClass(mBox,'map_box');addClass(mView,'map_view');mView.src="javascript/map/images/icon_close_big.gif";dest.appendChild(list);el.appendChild(nav);el.appendChild(dest);el.appendChild(mBox);el.appendChild(mView);var mOpts={'map':mBox,'list':list,'bcList':nav,'isMax':true,'mapView':mView,'container':el};if(isset(map)&&hasProp(map,'dataSource'))
mOpts['dataSource']=map.dataSource;var map=addMap(mOpts);return map;}
function itemMouseover(item){var marker=getMarker(item);var list=getList(item);GEvent.addListener(marker,"mouseover",function(){showTT(this);toggleMarkerImage(this);addClass(list,'selected');});list.onmouseover=function(){showTT(marker);toggleMarkerImage(marker);};}
function itemMouseout(item){var marker=getMarker(item);var list=getList(item);GEvent.addListener(marker,"mouseout",function(){hideTT(this);toggleMarkerImage(this)
removeClass(list,'selected');});list.onmouseout=function(){hideTT(marker);toggleMarkerImage(marker);}}
function itemClick(map,item){var type=getDataType(map,item.type);var marker=getMarker(item);GEvent.addListener(marker,'mousedown',function(){addClass(getList(this),'active');});GEvent.addListener(marker,'mouseup',function(){removeClass(getList(this),'active');});GEvent.addListener(marker,"click",function(){type.doAction('clickMarker',map,item);zoomToItem(map,item);return false;});getList(item).onclick=function(){type.doAction('clickList',map,item);zoomToItem(map,item);return false;};}
function hotelClick(map,item){var marker=getMarker(item);var bProto=(window.location.protocol.indexOf('http')==-1)?'http:':window.location.protocol;bProto+='//';var bUrl=(window.location.host.length<1)?'demo.vhr.com':window.location.host;var bPath=(window.location.host.length<1)?'/':window.location.pathname;var lSlash=bPath.lastIndexOf('/');if(lSlash!=-1)
bPath=bPath.substring(0,lSlash+1);bUrl+=bPath+'default.aspx?p=32&id='+item.id;bUrl=bProto+bUrl;var setLink=function(linkContent,cClass){if(typeof cClass=='undefined')
cClass='';return'<a href="'+bUrl+'" class="'+cClass+'">'+linkContent+'</a>';}
var content='<div class="map_infowindow"><h3>'+setLink(item.name)+'</h3>';if('image'in item)
content+=setLink('<img src="'+item.image+'" width="95" height="61" />','map_hotel_img');content+='<div class="map_hotel_content"><ul><li>'+Map['RATING_HOTEL']+': <img src="images/rating_stars_'+item.rate_hotel+'.gif" /></li><li>'+Map['RATING_MEMBER']+': <img src="images/rating_diamonds_'+item.rate_member+'.gif" /></li></ul>'+setLink(Map['HOTEL_DETAILS']+' &raquo;')+'</div>';content+='</div>';content+='<div class="map_footer">&nbsp;</div>';marker.openInfoWindow(content);}
function isMap(map){if(!map||typeof map=='undefined'||!(map instanceof MAP_TYPE))
return false;return true;}
function findMap(parentEl){var p=(isset(parentEl))?checkElement(parentEl):document;if(!p)
return false;var mClass='map_box',mObj='mapObj',mEl=null;var mBox=getElementsByClassName(mClass,null,p);for(var x=0;x<mBox.length;x++){if(hasProp(mBox[x],mObj)){return mBox[x][mObj];}}
if(!p.hasChildNodes())
return false;var el;for(var i=0;i<p.childNodes.length;i++){el=p.childNodes[i];if(hasProp(el,mObj))
return el[mObj];}
return false;}
function getDataType(map,level){if(!map||!(map instanceof GMap2))
return false;if(typeof level=='undefined')
level=getContentLevel(map);return map.dataTypes[level];}
function getIcon(map,level){var dt=getDataType(map,level);return dt.icon;}
function getPixelContainerRel(overlay,point){var p=(!point)?overlay.F:point;var pix=map.fromLatLngToDivPixel(p);var cB=map.fromDivPixelToLatLng(pix);var cBC=map.fromContainerPixelToLatLng(pix);var pixCBC=map.fromLatLngToDivPixel(cBC);var clickA={x:(pix.x*2)-pixCBC.x,y:(pix.y*2)-pixCBC.y};}
function getPixelFromLatLng(map,overlay,point){var coords=(!point)?overlay.F:point;var pix=map.fromLatLngToDivPixel(coords);var center=map.getCenter();var size=map.getSize();var pixC=map.fromLatLngToDivPixel(center);var offSize={x:Math.round(size.width/2)-pixC.x,y:Math.round(size.height/2)-pixC.y};var pixSizeA={x:pix.x+offSize.x,y:pix.y+offSize.y};}
function drawBounds(map,bounds){if(hasProp(bounds,'bounds'))
bounds=bounds.bounds;var ne=bounds.getNorthEast(),sw=bounds.getSouthWest(),nw=new GLatLng(ne.lat(),sw.lng()),se=new GLatLng(sw.lat(),ne.lng());var pLine=new GPolygon([nw,ne,se,sw,nw],"#A5DB02",3,0.5,"#A5db02",0.2);map.addOverlay(pLine);}
function moveLatLng(coords,dist,dir){if(!checkFuncParams(arguments)||!(coords instanceof GLatLng)||!isString(dir))
return false;var dist=parseFloat(dist);if(isNaN(dist))
return false;var dirs={lat:['n','s'],long:['e','w']};}
function addItem(map,item){var handleItem=function(point){if(!point){return false;}
var markerOptions={"icon":getIcon(map)};var marker=new GMarker(point,markerOptions);map.addOverlay(marker);setRecip(item,marker);addDestListItem(map,item);var dt=getDataType(map,item.type);dt.doAction('add',item);dt.doAction('mouseover',item);dt.doAction('mouseout',item);dt.doAction('click',map,item);}
if(hasCoords(item)){handleItem(item.coords);}}
function addListItem(list,obj,isBC){if(typeof(list)=='undefined'||typeof(obj)=='undefined')
return false;isBC=!!isBC;var addSeparator=function(el){if(!hasProp(obj,'map'))
return false;var sep=document.createElement('span');sep.className='separator';var sepTxt=document.createTextNode(obj.map.bcSeparator);sep.appendChild(sepTxt);el.appendChild(sep);};var li=document.createElement('li');if(obj.id)
li.id=obj.id;var a=document.createElement('a');a.setAttribute('href','#');var aTxt=document.createTextNode(obj.name);a.appendChild(aTxt);if(isBC)
addSeparator(li);li.appendChild(a);list.appendChild(li);return list;}
function setRecip(baseObj,item,type){if(typeof type=='undefined'){if(item instanceof GMarker)
type='marker';else
return false;}
baseObj['recip'][type]=item;item['recip']=baseObj;}
function getRecip(item,type){var recip;if(!hasProp(item,'recip'))
return item;if(!hasProp(item.recip,'recip'))
recip=item;else
recip=item.recip;if(typeof type=='undefined')
return recip;if(!hasProp(recip.recip,type))
return recip;return recip.recip[type];}
function getList(item){return getRecip(item,'list');}
function getMarker(item){return getRecip(item,'marker');}
function hasCoords(obj){return hasProp(obj,'coords',GLatLng);}
function hasBounds(obj){return hasProp(obj,'bounds',GLatLngBounds);}
function addLabel(item){var marker=getMarker(item);marker['tt']=addTT(marker,item.name);marker['label']=item.name;}
function addTT(el,content){if(typeof el!='object'){el=checkElement(el);if(!el)
return false;}
var block=document.createElement('div');block.className='TT';block.innerHTML='<div>'+content+'</div>';if('ml'in el){el.ml.parentNode.parentNode.appendChild(block);}
return block;}
function showTT(marker){if(!('tt'in marker))
return false;var pMap=marker.c;var pMapSize=pMap.getSize();var icon=marker.getIcon();var tt=marker.tt;var pBlock=tt.parentNode;var unit='px';var ttOff={x:8,y:-40,l:false,r:false,t:false,b:false};var pad=15;var pOff={x:parseInt(pBlock.style.left),y:parseInt(pBlock.style.top)};if(!pos){var posM=marker.getLatLng();var pos=pMap.fromLatLngToDivPixel(posM);}
var mAct={x:pos.x+pOff.x,y:pos.y+pOff.y};var ttPos;var getTTPos=function(){ttPos={x:mAct.x+ttOff.x,y:mAct.y+ttOff.y};}
getTTPos();var getIconPos=function(){icon['pos']={x:mAct.x-icon.iconAnchor.x,y:mAct.y-icon.iconAnchor.y};}
getIconPos();tt.style.left=pos.x+unit;tt.style.top=pos.y+unit;var ttOverlap=function(){getTTPos();getIconPos();if(ttPos.y+tt.offsetHeight>=icon.pos.y&&ttPos.y<mAct.y&&ttPos.x+tt.offsetWidth>=icon.pos.x&&ttPos.x<icon.pos.x+icon.iconSize.width){return true;}
return false;}
if(ttPos.x<=0){ttOff.x=ttOff.x-ttPos.x;ttOff.r=true;}
if(ttPos.x+tt.offsetWidth>=pMapSize.width){ttOff.x=ttOff.x+(pMapSize.width-(ttPos.x+tt.offsetWidth));ttOff.l=true;}
if(ttPos.y<=0){ttOff.y=ttOff.y-ttPos.y;ttOff.b=true;}
if(ttPos.y+tt.offsetHeight>=pMapSize.height){ttOff.y-=(ttPos.y+tt.offsetHeight)-pMapSize.height;ttOff.t=true;}
if(ttOverlap()){if(ttOff.l){ttOff.x=(tt.offsetWidth+icon.iconAnchor.x)*-1;}
else if(ttOff.r){ttOff.x=icon.iconSize.width-icon.iconAnchor.x;}
if(ttOff.t){ttOff.y=(icon.iconSize.height+tt.offsetHeight)*-1;}
else if(ttOff.b){ttOff.y=0;}}
tt.style.marginTop=ttOff.y+unit;tt.style.marginLeft=ttOff.x+unit;tt.style.visibility='visible';}
function hideTT(marker){marker=getMarker(marker);if(!('tt'in marker))
return false;marker.tt.style.visibility='hidden';}
function switchMarker(item,img){var el=getMarkerEl(item);el.src='images/icon_diamond.png';}
function toggleImage(img){if(!hasProp(img,'tagName')||img.tagName.toLowerCase()!='img')
return false;var toggler='on',separator='_',toggleVal=separator+toggler,file=getFileAttr(img.src),fileName;if(file.name.lastIndexOf(toggleVal)==(file.name.length-toggleVal.length)){fileName=file.name.substr(0,file.name.length-toggleVal.length);}else{fileName=file.name+toggleVal;}
img.src=fileName+'.'+file.extension;}
function getFileAttr(file){if(!isset(file))
return false;var fileAttr=/^(.+)(\.\w+)$/.exec(file);file={'name':fileAttr[1],'extension':fileAttr[2].replace('\.',''),'source':fileAttr[0]};return file;}
function toggleMarkerImage(item){if(!isset(item))
return false;var marker=getMarker(item);var icon=marker.getIcon();if(!hasProp(icon,'toggle'))
return false;if(!icon.toggle)
return false;var newImage;if(hasProp(icon,'hoverImage'))
newImage=icon.hoverImage;else
newImage=icon.image.replace(/^(.+)(\.\w+)$/,'$1_over$2');if(!marker||!hasProp(marker,'ml')||!hasProp(marker.ml,'src'))
return false;if(marker.ml.src.lastIndexOf(newImage)==marker.ml.src.length-newImage.length)
newImage=icon.image;setMarkerImage(marker,newImage);}
function setMarkerImage(item,img){if(!isset(item)||!isset(img)){return false;}
var marker=getMarker(item);GMarker.prototype.setImage.call(marker,img);}
function getMarkerEl(item){var marker=getMarker(item);}
function addDestListItem(map,obj){if(!isset(map)||!isset(obj))
return false;var list=checkElement(map.list);list=addListItem(list,obj);var a=list.lastChild.lastChild;setRecip(obj,a,'list');return a;}
function addBreadcrumb(map){var content=getContent(map);var pContent=getContent(map,content.getLevel()-1);if(content.getLevel()==0&&content.breadcrumb==map.bcList)
return false;var pList=(content==pContent)?map.bcList:pContent.breadcrumb;var findNode=function(element,tagName){if(element.hasChildNodes()){for(var x=0;x<element.childNodes.length;x++){var currEl=element.childNodes[x];if(currEl.tagName.toLowerCase()==tagName){return currEl;}}}
return false;};var hasNested=false;if(pList.hasChildNodes()){if(pList.tagName!='li'){var pList=findNode(pList,'li');}
if(pList){var nestList=findNode(pList,'ul');if(nestList)
hasNested=true;}}
if(!hasNested){var nestList=(pList.hasChildNodes())?document.createElement('ul'):pList;var isBC=true;if(nestList==pList)
isBC=false;addListItem(nestList,content,isBC);if(nestList!=pList)
pList.appendChild(nestList);content.setBreadcrumb(nestList);var a=nestList.firstChild.lastChild;a.onclick=function(){var level=this.parentNode.parentNode.level;zoomToItem(map,getContent(map,level));return false;}
a.onmouseover=function(){addClass(this.parentNode,'selected');}
a.onmouseout=function(){removeClass(this.parentNode,'selected');}}}
function checkAddress(map,address,city,zip,country){address+=', '+zip+' '+getCountry(country);var geoc=new GClientGeocoder();geoc.getLocations(address,function(response){});}
function buildAddress(map,item){if(!map||!item)
return false;var content=getContent(map),address,currLevel=content.getLevel(),dt=getDataType(map,currLevel);if(dt.hasTemplate('address'))
address=dt.processTemplate('address',item);else
address=item.name;if(currLevel>0){for(level=currLevel;level>0;level--){if(level!=currLevel)
content=getContent(map,level);address+=' '+content.name;}}
return address;}
function setContentLevel(map,level){if(!map||typeof map=='undefined'||typeof level=='undefined')
return false;map.content.id=level;}
function addContentLevel(map,contentLevel,level){if(!(contentLevel instanceof ContentLevel))
return false;if(!isset(level)||isNaN(parseInt(level)))
map.content.levels.push(contentLevel);else
map.content.levels[parseInt(level)]=contentLevel;return contentLevel;}
function getContent(map,level){if(!isset(level))
level=getContentLevel(map);if(level<0)
level=0;return map.content.levels[level];}
function getContentLevel(map){if(!(map instanceof GMap2))
return false;return map.content.id||0;}
function getContentItems(map,level,func){var content=getContent(map,level);if(!content.items||content.items.length==0){getChildren(map,level,func);return false;}
else{return content.items;}}
function getData(map,callback){if(hasProp(map,'dataSource')){GDownloadUrl(map.dataSource,function(data,responseCode){var eData=eval('('+data+')');var dt,data;for(var x=0;x<map.dataTypes.length;x++){dt=map.dataTypes[x];map['processing']=x;data=dt.process(eData,map);if(!!data)
map['data'][x]=data;}
map['processing']=null;if(callback){callback();}});}}
function getChildren(map,level,callback){var thisFunc=arguments.callee;if(!hasProp(map,'data')||map.data.length==0){getData(map,function(){thisFunc(map,level,callback)});return false;}
var dt=getDataType(map,level);data=dt.getData(map);if(data){getContent(map,level).addItems(data);callback(map);}}
function removeItems(content){var map=content.map,li,marker,item;for(var i=0;i<content.items.length;i++){item=content.items[i];marker=getMarker(item);if(marker){map.removeOverlay(marker);li=getList(item).parentNode;li.parentNode.removeChild(li);}}}