var eMap = {
	
	properties: {
		mStoreIcon : _createIcon({
	        image:'images/711_24X24.gif', 
	        shadow:'image/shadow.png', 
	        imgsize:{width:24,height:24},
	        imganchor:{width:12,height:22},
	        shwsize:{width:37,height:34},
	        shwanchor:{width:10,height:34}
	    }),  
		mStoreSelectedIcon : _createIcon({
	        image:'images/711_sl_24X24.gif', 
	        shadow:'image/shadow.png', 
	        imgsize:{width:24,height:24},
	        imganchor:{width:12,height:22},
	        shwsize:{width:37,height:34},
	        shwanchor:{width:10,height:34}
	    })
	},
	isBrowserSupport:function() {
		
		var isSupport = true;

		if($.browser.msie) {			

			if($.browser.version < 6) {
				isSupport = false;
			}
		}
		else if($.browser.mozilla) {
			//isSupport = true;
		}
		else if($.browser.safari) {
			
//			if($.browser.version >= 3) {
//				isSupport = true;
//			}
//			else {
				isSupport = true;
//			}
		}
		else if($.browser.opera) {
			isSupport = false;
		}
		else {
			isSupport = false;
		}
		return isSupport;
	},
	
	init:function() {
		
		if(eMap.isBrowserSupport()) {
		
			_mPermission.init();
			var cssPath = _mPermission.getProperty('CssPath');
			
			if((typeof cssPath != 'undefined') && (cssPath != null)) {
				var oldCss = document.getElementById('css_profile1');	
				if(oldCss){oldCss.href=cssPath;}
			}
		}
		else {
			alert('您所使用的瀏覽器為:'+navigator.appName + '\n' + 
				  '目前電子地圖尚未支援此瀏覽器\n' +
			      '建議使用: Internet Explore 或 Firefox\n' + 
			      '若造成您的不便，請多見諒！！');
			history.back();
		}
			
	},
	_mValidateRegex:/[!@#\$%\^&\*\(\)\+\}\{\[\]"'<>\?]/,
	textfieldValidation:function(ps) { //ps:string to validate
		return !this._mValidateRegex.test(ps);
	}
}

var _mPermission = {
    
    _mPrm : new Object(), //permission map
    
	_mPrpty : new Object(), //property map
    
    init:function() {
		$.ajaxSetup({async:false});
        $.post(
            'CheckPermission.aspx',
            {},
            function(pXML){
            	_mPermission._mParseXML(pXML);
							$.ajaxSetup({async:true});
            }
        );
    },
    
    /**
     * 
     * @param {Document} pXML
     */
    _mParseXML:function(pXML) {
        $(pXML).find('iMapSDKOutput').children().each(
			function(){
				var node = $(this);
				var name = this.nodeName;
				if(name == 'Permission') {
					 _mPermission._mPrm[node.text()] = true;
				}
				else {
					_mPermission._mPrpty[name] = node.text();
				}
			}
		);
    },
    getPermission:function(pKey) {
        var _lBool=false;
        if(_mPermission._mPrm[pKey]!=null){
            _lBool=_mPermission._mPrm[pKey];
        }
        return _lBool;
    },
	getAllPermission:function() {
		return _mPermission._mPrm;
	},
	getProperty:function(pKey) {
		return _mPermission._mPrpty[pKey];
	}
}

var mSelectedID = null;
var mShowSelectedInfo = false;
var _mSelectCityID = -1;
var _mSelectCityName = null;

function vsp(pID, pPermission) {
	
	var _lallprmsn = _mPermission.getAllPermission();
	var _lnav = $('#'+pID);
	var _lelem = null; 
	var _lelems = new Array();
	var _lflg = false;
		
    for(_lprmsn in _lallprmsn) {

		_lelem = document.getElementById(_lprmsn);
		if(_lelem!=null) {
			_lelems.push(_lelem);
			if(!_lflg && (_lprmsn == pPermission)) {
				_lflg = true;
			}
		}
    }
	
	if(_lelems.length > 0 && _lflg) {
		_lnav.empty();
		for(var i=0;i<_lelems.length;i++) {			
			_lnav.append($('<tr></tr>').append(_lelems[i]));
		}
	}
	else {
		location.href = 'error_timeout.htm';
	}
} 

function blockSearch(pID) {
	
	$('#'+pID).block(
		'<h3><img src="images/busy.gif" /> 處理中...</h3>', 
		{ color: '#626262'}
	);	
}

function unblockSearch(pID) {
	$('#'+pID).unblock();	
}

/**
 * @return {bool}
 * @param {Document} _pDoc xml document
 */
function XmlParser(_pXml){
	if(!_pXml) {			
			location.href = 'error_timeout.htm';  //session timeout
			return null;		
	}	
	
	if(_pXml.length > 0 && _pXml.indexOf("error.aspx",0)>0){
						
			location.href = 'error.aspx';  //DB disconnect
			return null;		
	}
	
	if(_pXml.haschildNodes) {
		if(_pXml.childNodes.length == 0)
		{					
			location.href = 'error_timeout.htm';  //session timeout
			return null;
		}
	}
  
  this.getValueByTagName = function(pElm, pName) {

	  if (!pElm || pElm == null) {
	  	  return null;
	  }
      var _lt = pElm.getElementsByTagName(pName);
      
      if(_lt && _lt[0]) {
          if(_lt[0].firstChild) {
              return  _lt[0].firstChild.nodeValue;
          }
      }
      return null;
  }
  var _lcid = this.getValueByTagName(_pXml,'CommandID');
  var _lmid = this.getValueByTagName(_pXml,'MessageID');
  var _lStatus = this.getValueByTagName(_pXml,'Status');
  
  if(_lmid == '00001') {
  		  
		location.href = 'error_timeout.htm';
		return null;
  }
  
  
  var _lOb = new Object();
  _lOb.mCID = _lcid;
  _lOb.mMID = _lmid;
  _lOb.mStatus = _lStatus;
  
  if(_lcid == 'GetCity') {
      
	  var _lCity = new Array();
      var _lTags = _pXml.getElementsByTagName('GeoPosition');
	  var _lt=null,_lN=null,_lID=null,_iX=0,_lY=0;
	  
	  if (_lTags != null) {
	  	  for (var i = 0; i < _lTags.length; i++) {
		  	
			  _lt=null,_lN=null,_lID=null,_iX=0,_lY=0;
	  
	  		  var _lt = this.getValueByTagName(_lTags[i], 'CityID');
	  		  if (!_lt) {
	  		  	continue;
	  		  }
			  _lID = _lt;
	  		  _lt = this.getValueByTagName(_lTags[i], 'CityName');
	  		  if (!_lt) {
	  		  	continue;
	  		  }
			  _lN = _lt;
	  		  _lt = this.getValueByTagName(_lTags[i], 'X');
	  		  if (!_lt) {
	  		  	continue;
	  		  }
			  _lX = parseInt(_lt);
	  		  _lt = this.getValueByTagName(_lTags[i], 'Y');
	  		  if (!_lt) {
	  		  	continue;
	  		  }
			  _lY = parseInt(_lt);
			  _lCity.push({mName:_lN,mID:_lID,mX:_lX,mY:_lY});
	  	  }
	  }
  	  _lOb.mCity = _lCity;
  }   
  if(_lcid == 'GetTown') {
      
	  var _lTown = new Array();
      var _lTags = _pXml.getElementsByTagName('GeoPosition');
	  var _lt=null,_lN=null,_lID=null,_iX=0,_lY=0;
	  
	  if (_lTags != null) {
	  	  for (var i = 0; i < _lTags.length; i++) {
		  	
			  _lt=null,_lN=null,_lID=null,_iX=0,_lY=0;
	  
	  		  var _lt = this.getValueByTagName(_lTags[i], 'TownID');
	  		  if (!_lt) {
	  		  	continue;
	  		  }
			  _lID = _lt;
	  		  _lt = this.getValueByTagName(_lTags[i], 'TownName');
	  		  if (!_lt) {
	  		  	continue;
	  		  }
			  _lN = _lt;
	  		  _lt = this.getValueByTagName(_lTags[i], 'X');
	  		  if (!_lt) {
	  		  	continue;
	  		  }
			  _lX = parseInt(_lt);
	  		  _lt = this.getValueByTagName(_lTags[i], 'Y');
	  		  if (!_lt) {
	  		  	continue;
	  		  }
			  _lY = parseInt(_lt);
			  _lTown.push({mName:_lN,mID:_lID,mX:_lX,mY:_lY});
	  	  }
	  }
  	  _lOb.mTown = _lTown;
  }  
  else if(_lcid == 'Search0001' || _lcid == 'Search0002' || _lcid == 'Search0007' || _lcid == 'Search0789') {
      var _lPoi = new Array();
      var _lTags = _pXml.getElementsByTagName('GeoPosition');
	  if (_lTags != null) {
	  	for (var i = 0; i < _lTags.length; i++) {
	  		var _lt = this.getValueByTagName(_lTags[i], 'POIName');
	  		if (!_lt) {
	  			continue;
	  		}
	  		var _ln = _lt;
	  		_lt = this.getValueByTagName(_lTags[i], 'X');
	  		if (!_lt) {
	  			continue;
	  		}
	  		var _lx = parseInt(_lt);
	  		_lt = this.getValueByTagName(_lTags[i], 'Y');
	  		if (!_lt) {
	  			continue;
	  		}
	  		var _ly = parseInt(_lt);
	  		var _ladd = this.getValueByTagName(_lTags[i], 'Address');
	  		var _lid = this.getValueByTagName(_lTags[i], 'POIID');
	  		var _ltel = this.getValueByTagName(_lTags[i], 'TelNo');
	  		var _lfax = this.getValueByTagName(_lTags[i], 'FaxNo');
	  		var _lsvc = this.getValueByTagName(_lTags[i], 'Service');
	  		var _lrmk = this.getValueByTagName(_lTags[i], 'Remark');
	  		_lPoi.push({
	  			mName: _ln,
	  			mX: _lx,
	  			mY: _ly,
	  			mAddress: _ladd,
	  			mID: _lid,
	  			mTel: _ltel,
	  			mFax: _lfax,
	  			mService: _lsvc,
	  			mRemark: _lrmk
	  		});
	  	}
	  }
      _lOb.mPoi = _lPoi;              
  }
  else if(_lcid == 'Search0006' || _lcid == 'Search0004') {  	 
      var _lPoi = new Array();
      var _lTags = _pXml.getElementsByTagName('GeoPosition');
	  if (_lTags != null) {
	  	for (var i = 0; i < _lTags.length; i++) {
	  		var _lt = this.getValueByTagName(_lTags[i], 'POIName');
			if (!_lt) {
	  			continue;
	  		}
	  		var _ln = _lt;
	  		_lt = this.getValueByTagName(_lTags[i], 'X');
	  		if (!_lt) {
	  			continue;
	  		}
	  		var _lx = parseInt(_lt);
	  		_lt = this.getValueByTagName(_lTags[i], 'Y');
	  		if (!_lt) {
	  			continue;
	  		}
	  		var _ly = parseInt(_lt);
	  		_lPoi.push({
	  			mName: _ln,
	  			mX: _lx,
	  			mY: _ly
	  		});
	  	}
	  }
      _lOb.mPoi = _lPoi;        
  }
  else if(_lcid == 'FindRoad1' || _lcid == 'FindRoad') {
      var _lRd = new Array();
      var _lTags = _pXml.getElementsByTagName('RoadName');
	  if (_lTags != null) {
	  	for (var i = 0; i < _lTags.length; i++) {
	  		var _lt = this.getValueByTagName(_lTags[i], 'rd_name_1');
	  		if (!_lt) {
	  			continue;
	  		}
	  		var _ln = _lt;
	  		var _ls = this.getValueByTagName(_lTags[i], 'section_1');
	  		_lRd.push({
	  			mName: _ln,
	  			mSection: _ls
	  		});
	  	}
	  }
      _lOb.mRoad = _lRd;              
      
  }
  else if(_lcid == 'FindRoad2') {
      var _lRd = new Array();
      var _lTags = _pXml.getElementsByTagName('RoadName');
	  if (_lTags != null) {
	  	for (var i = 0; i < _lTags.length; i++) {
	  		var _lt = this.getValueByTagName(_lTags[i], 'rd_name_2');
	  		if (!_lt) {
	  			continue;
	  		}
	  		var _ln = _lt;
	  		_lt = this.getValueByTagName(_lTags[i], 'X');
	  		if (!_lt) {
	  			continue;
	  		}
	  		var _lx = parseInt(_lt);
	  		_lt = this.getValueByTagName(_lTags[i], 'Y');
	  		if (!_lt) {
	  			continue;
	  		}
	  		var _ly = parseInt(_lt);
	  		var _ls = this.getValueByTagName(_lTags[i], 'section_2');
	  		_lRd.push({
	  			mName: _ln,
	  			mX: _lx,
	  			mY: _ly,
	  			mSection: _ls
	  		});
	  	}
	  }
      _lOb.mRoad = _lRd;                            
  }
  return _lOb;          

}

function Request(_pUrl, _pParam, _pCallback) {
    $.post(
        _pUrl, 
        _pParam, 
        function(_pXML){
        	var _xml = XmlParser(_pXML);
        	if(_xml && _xml != null) {
            	_pCallback(_xml);
            }
        }
    );
}

function InitCity(_p, _pOnClick) {

    var _lem = $(_p).find('a');
    var _lcode = -1;
	    
    for(var i = 0; i < _lem.length; i++) {
        
        var _la = _lem[i];

        _lcode = AREACODE.getCityCodeByName(_la.innerHTML);
		
        if(_lcode > 0) {
            _la.mOnClick = _pOnClick;
            _la.mCityCode = _lcode;
            _la.href = 'javascript:void(0)';
            $(_la).click(
                function() {
                    if (this.mOnClick) {
                        
                        if(_mSelectCityID >= 0) {
                            $(_p+' a.focus').removeClass('focus');
                        }                        
		                _mSelectCityID = this.mCityCode;
		                _mSelectCityName = this.innerHTML;    
						if(_mSelectCityName=='馬祖') {
							_mSelectCityName = '連江縣';
						}
                        this.className='focus';
                        this.mOnClick(this.mCityCode, _mSelectCityName);
                    }
                }
            );
        }
    }
	
    $('#clear_city').click(
        function() {
            if(_mSelectCityID >= 0) {
                $(_p+' a.focus').removeClass('focus');
                _mSelectCityID = -1;
                _mSelectCityName = null;
            }
        }
    ).get(0).href='javascript:void(0);';
    
}


function InitTownOption(pSelection, pCityID, pCityName, pBlockPaneID) {
          
	if(pBlockPaneID){blockSearch(pBlockPaneID);};
    
    pSelection.clearAllOption();    
    pSelection._mDefaultOption.text = '請選擇';
	
	$.post(
		'EMapSDK.aspx',
		{commandid:'GetTown',cityid:pCityID},
		function(pXML) {
		    
			var _lTwn = XmlParser(pXML);
			
			if(_lTwn && _lTwn != null) {
			    
				for(var i = 0; i < _lTwn.mTown.length; i++) {
			        var _lopt = document.createElement('option');
					_lopt.mName = _lTwn.mTown[i].mName;
					_lopt.mID = _lTwn.mTown[i].mID;
					_lopt.mX = _lTwn.mTown[i].mX;
					_lopt.mY = _lTwn.mTown[i].mY;
			        _lopt.text = _lopt.mName;
			        _lopt.value = _lopt.mName;
					pSelection.addOption(_lopt);
				}
			}
			if(pBlockPaneID){unblockSearch(pBlockPaneID);};
		}
	); 
}

function GenerateAddressOption(_pSelection, _lob) {

    if (_lob.mRoad && _lob.mRoad.length > 0) {
        
        _pSelection.clearAllOption();
        
        _pSelection._mDefaultOption.text = '請選擇';

        
        for (var i = 0; i < _lob.mRoad.length; i++) {
            
            _lo = document.createElement('option');
            
            if(_lob.mRoad[i].mSection != null) {
                _lo.text = _lob.mRoad[i].mName + _lob.mRoad[i].mSection;
            }
            else {
                _lo.text = _lob.mRoad[i].mName;                              
            }
            _lo.mRoad = _lob.mRoad[i];
            _pSelection.addOption(_lo);
        }
    }                           
}

function GenerateStoreOption(_pSelection, _lob){

    if (_lob.mPoi && _lob.mPoi.length > 0) {
        
        _pSelection.clearAllOption();

        _pSelection._mDefaultOption.text = '請選擇';
        
        for (var i = 0; i < _lob.mPoi.length; i++) {
            _lo = document.createElement('option');
            _lo.text = _lob.mPoi[i].mName;
            _lo.mPoi = _lob.mPoi[i];
            _pSelection.addOption(_lo);
        }
    }                       
}

function GenerateStoreOption1(_pSelection, _lob){
String.prototype.Trim = function(){return this.replace(/^\s+|\s+$/g,"");}

    if (_lob.mPoi && _lob.mPoi.length > 0) {
        
        _pSelection.clearAllOption();

        _pSelection._mDefaultOption.text = '請選擇';
        
        for (var i = 0; i < _lob.mPoi.length; i++) {
            _lo = document.createElement('option');
            _lo.text = _lob.mPoi[i].mName.Trim() + '(' + _lob.mPoi[i].mAddress.Trim() + ')';
            _lo.mPoi = _lob.mPoi[i];
            _pSelection.addOption(_lo);
        }
    }                       
}

function GeneratePoiOption(_pSelection, _lob){

   if (_lob.mPoi && _lob.mPoi.length > 0) {
        
        _pSelection.clearAllOption();
        
        for (var i = 0; i < _lob.mPoi.length; i++) {
            _lo = document.createElement('option');
            _lo.text = _lob.mPoi[i].mName;
            _lo.mPoi = _lob.mPoi[i];
            _pSelection.addOption(_lo);
        }
    }                       
}

/**
 * 
 * @param {Object} _pElement
 * @param {Object} _pParam
 */
function Selection(_pElement, pDefaultOption) {
    /**
     * @type {Element} select element.
     */
    
    this._mElement = null;
    this._mDefaultOption = null;
    
    if(typeof(_pElement) == 'string') {
        this._mElement = document.getElementById(_pElement);
    }
    else if(typeof(_pElement) == 'object') {
        this._mElement = _pElement;
    }
    if(this._mElement != null) {
		if(typeof(pDefaultOption) == 'undefined') {
	        this._mDefaultOption = document.createElement('option');			
	        this._mDefaultOption.text = '請選擇';
	        this._mDefaultOption.value = -1;
	        this._mElement.options.add(this._mDefaultOption);
		}
		else if(pDefaultOption && pDefaultOption != null) {
			this._mDefaultOption = pDefaultOption;			
	        this._mElement.options.add(this._mDefaultOption);
		}
		//pDefaultOption null break;
    }
}

Selection.prototype.addOption = function(_pOption) {
    if(typeof(_pOption) == 'object') {
        this._mElement.options.add(_pOption);
    }
};

Selection.prototype.getOption = function(_pIdx) {
    return this._mElement.options[_pIdx];
};   

Selection.prototype.removeOption = function(_pOption) {
    
    if(typeof(_pOption) == 'object') {
        this._mElement.options.remove(_pOption);
    }
};

Selection.prototype.getSelectedIndex = function() {
    return this._mElement.selectedIndex;
}

Selection.prototype.addChangeListener = function(_pl) {
    
    if(this._mElement && _pl != null) {
         var _lSrc = this;
         $(this._mElement).change(function(){
             _pl(_lSrc)
         });
    }
}
   
Selection.prototype.clearAllOption = function() {

    if(this._mElement && this._mElement.options) {

        this._mElement.options.length = 0;
		if(this._mDefaultOption != null) {
	        this._mElement.options.add(this._mDefaultOption);        
		}
    }
//    while(this._mElement.options.length > 0) {
//        this._mElement.options.remove(this._mElement.options[0]);
//    }
};

/**
 * @return {Element} return select element.
 */
Selection.prototype.getContent = function() {
    return this._mElement;
};

/**
 * 
 * @param {Array} _pBlks blocks id(string) array.
 */
function DisplaySwitch(_pBlks) {
    this._mBlocks = new Array();
    for(var i = 0; i < _pBlks.length; i++) {
        this._mBlocks.push(document.getElementById(_pBlks[i]));
    }
}

DisplaySwitch.prototype.switchBlock = function(_pID) {
    
    for(var i = 0; i < this._mBlocks.length; i++) {
        if(this._mBlocks[i].id == _pID) {
            this._mBlocks[i].style.display = "block";
        }
        else {
            this._mBlocks[i].style.display = "none";            
        }
    }    
}


//////////////////////////////////////////////////////////////////////////
/////////////////////////////iMap Initial/////////////////////////////////
//////////////////////////////////////////////////////////////////////////

var _mMarkM =null;
var _mContextMenu = null;
var _mEditPoi = null;
var _mEditStartMenuItem = null;
var _mEditEndMenuItem = null;
var _mIsMarkIconSelectd = false;
var _mSelectdMark = null;
var _mFocusMark = null;
var _mStoreBlockBound = null;
var _mMapScale = -1;

function UpdatePoi(pOldPoi, pNewData) {
    $.post('EMapSDK.aspx', {commandid:'UpdatePosition',storeid:pOldPoi.mID,x:pNewData.x,y:pNewData.y});
}

function InitContextMenu(pR) {
    
    var _ljM=new aH("設為起點",null);
    var _ljL=new aH("設為終點",null);
    var _ljP=new aH("開始規劃",null);
    var _ljO=new aH("關閉選單",null);

    var _lmK=new bt();

    _lmK.aA=function(e){
        P.gz(imap.cK({x:_mContextMenu.x,y:_mContextMenu.y}));
    };
    _ljM.aB(_lmK);
    var _lmF=new bt();
    _lmF.aA=function(e){
        P.setEndPoint(imap.cK({x:_mContextMenu.x,y:_mContextMenu.y}));
    };
    _ljL.aB(_lmF);
    var _lmC=new bt();
    _lmC.aA=function(e){
        P.bB();
    };
    _ljP.aB(_lmC);
    var _lmD=new bt();
    _lmD.aA=function(e){
        _mContextMenu.hide();
    };
    _ljO.aB(_lmD);


    if(_mPermission.getPermission('F007')) {

        var _ljQ=new aH('<font color="black">修改位置<font>',null);
        var _ljS=new aH('<font color="black">取消修改<font>',null);
        var _ljR=new aH('<font color="black">完成修改<font>',null);
    
        var _lmQ=new bt();
        _lmQ.aA=function(e){
            if(_mFocusMark != null) {
                _mSelectdMark = _mFocusMark;
                _mEditPoi = _mSelectdMark._mObj;
            }
            _ljQ.hide();
            _ljS.show();
            _ljR.show();
        }
        _ljQ.aB(_lmQ);

        var _lmS=new bt();
        _lmS.aA=function(e){
            _mSelectdMark = null;;
            _mEditPoi = null;
            _ljR.hide();
            _ljS.hide();
        }
        _ljS.aB(_lmS);

        var _lmR=new bt();
        _lmR.aA=function(e){
            _ljR.hide();
            _ljS.hide();
            
			var _lgis=imap.cK({x:_mContextMenu.x,y:_mContextMenu.y});
			var _lOldPt = _mSelectdMark.getPoint();
           _mSelectdMark.setPoint(_lgis);
            imap.fZ();
			var _lSubmit = confirm("請確認是否修改？");			
 			if(_lSubmit) {
	            UpdatePoi(_mEditPoi,{x:_lgis.ac,y:_lgis.Y});				
			}
			else {
            	_mSelectdMark.setPoint(_lOldPt);
			}
            _mSelectdMark = null;
            _mEditPoi = null;
        }
        _ljR.aB(_lmR);
    
        _mEditStartMenuItem = _ljQ;
        _mEditEndMenuItem = _ljR;        
    }

    _mContextMenu=new dU(pR);
    _mContextMenu.jx({className:"menu"});

    if (_mPermission.getPermission('F008')) {
		_mContextMenu.cT(_ljM);
		_mContextMenu.cT(_ljL);
		_mContextMenu.cT(_ljP);
	}

    if (_mPermission.getPermission('F007')) {
        _mContextMenu.cT(_ljQ);
        _mContextMenu.cT(_ljS);
        _mContextMenu.cT(_ljR);
        $(pR).bind('contextmenu', 
            function(){
                if(_mIsMarkIconSelectd && _mEditPoi == null) {
                    _ljQ.show();
                }
                else {
                    _ljQ.hide();                
                }
            }
        );
     _ljR.hide();
	 _ljS.hide();
   }
    
    _mContextMenu.cT(_ljO);    
    _mContextMenu.hide();

}



function InitMap(mainDiv, subDiv, opt){
    
	var _lRules = getCssRule();                      
	
	if(_lRules['.store_icon']) {
    var _lImgPath = _lRules['.store_icon']['backgroundImage'];
    if(!_lImgPath && _lRules['.store_icon']['parentRule']['style']) {
    	_lImgPath = _lRules['.store_icon']['parentRule']['style'].getPropertyValue('background-image');
    }
    if(_lImgPath) {
		_lImgPath = _lImgPath.replace(/url\(|\).*/g, "");
			eMap.properties.mStoreIcon = _createIcon({
	        image:_lImgPath, 
	        shadow:'image/shadow.png', 
	        imgsize:{width:24,height:24},
	        imganchor:{width:12,height:22},
	        shwsize:{width:37,height:34},
	        shwanchor:{width:10,height:34}
	    });
	  }  						
	}
	if(_lRules['.store_selected_icon']) {
        var _lSelImgPath = _lRules['.store_selected_icon']['backgroundImage'];
    if(!_lSelImgPath && _lRules['.store_icon']['parentRule']) {
    	_lSelImgPath = _lRules['.store_icon']['parentRule']['style'].getPropertyValue('background-image');
    }
    if(_lSelImgPath) {
		_lSelImgPath = _lSelImgPath.replace(/url\(|\).*/g, "");					
			eMap.properties.mStoreSelectedIcon = _createIcon({
	        image:_lSelImgPath, 
	        shadow:'image/shadow.png', 
	        imgsize:{width:24,height:24},
	        imganchor:{width:12,height:22},
	        shwsize:{width:37,height:34},
	        shwanchor:{width:10,height:34}
	    });
	  }  					
	}

    mMN = mainDiv;
    sMN = subDiv;
    imap = new V(document.getElementById(mMN));
    if(opt) {
        ix0 = opt.x;
        iy0 = opt.y;        
    }
    else {
        ix0 = 121564550;
        iy0 = 25079255;
    }
    
    jr();
	if (opt.zoom) {
		imap.cv(opt.zoom);
	}
    _mMarkM = new DynamicMarkManager(imap);
    
    imap.aq(
		function(){
			var _lA = _mMarkM._getMapBound();
//			var _lB = new bY([{x:_lA.x1,y:_lA.y1},{x:_lA.x2,y:_lA.y2}]);
			var _lScl = imap.aR();
			if (_lScl < 4) {
				_mMarkM.update(null);
			}
			else{				
	        	if (_mStoreBlockBound != null 
				 && _mMapScale==_lScl
				 && _mStoreBlockBound.x1<=_lA.x1
				 && _mStoreBlockBound.y1>=_lA.y1
				 && _mStoreBlockBound.x2>=_lA.x2
				 && _mStoreBlockBound.y2<=_lA.y2) {
				}
				else {
					_mStoreBlockBound = {
						x1:(_lA.x1-imap.B.aU[_lScl].al),
						y1:(_lA.y1+imap.B.aU[_lScl].ak),
						x2:(_lA.x2+imap.B.aU[_lScl].al),
						y2:(_lA.y2-imap.B.aU[_lScl].ak)
					};					
					$.post(
						'EMapSDK.aspx', 
						{
							commandid: 'Search0007',
							x1: _mStoreBlockBound.x1,
							y1: _mStoreBlockBound.y1,
							x2: _mStoreBlockBound.x2,
							y2: _mStoreBlockBound.y2
						}, 
						function(pXml){
							_mMarkM.update(XmlParser(pXml));
						}
					);
				}
			}            
			_mMapScale=_lScl;
    });
    P.eS(imap);
    InitContextMenu(document.getElementById('search_map'));
}
//
///** @id Emark **/
//function EMark() {
//    /** @id Emark._mMark **/
//    this._mMark = new Array();
//}
//
//EMark.prototype.add = function(pMark) {
//    this._mMark.push(pMark);
//}
//
//EMark.prototype.remove = function() {
//    this._mMark.length;
//}
//
//EMark.prototype.get = function() {
//    
//}
//
//EMark.prototype.size = function() {
//    return this._mMark.length;
//}
//
//EMark.prototype.isEmpty = function() {
//    return (this._mMark.length > 0) ? true : false;
//}


function EMarkManager(pMap) {
    
    this._mMap = pMap;
    /** @type IArrayList **/
    this._mMarkList = new IArrayList();
    this._oldScale = pMap.aR();
}

EMarkManager.prototype.addMark = function(pMark) {
    if(_mMarkList != null) {
        this._mMarkList.add(pMark);        
    }
}

EMarkManager.prototype.removeMark = function(pMark) {
    if(pMark != null) {
        
        var _lE = null;
        
        if(typeof(pMark) == 'number') {
            _lE = this._mMarkList.get(pMark);
        }
        else {
            _lE = pMark;
        }
        this._mMarkList.remove(pMark);        
    }    
}

EMarkManager.prototype.clearAllMark = function() {
    var _lSz = this._mMarkList.size();
    if(_lSz > 0) {
        for(var i = 0; i < _lSz; i++) {
            this._mMarkList.get(i).remove();
        }
        this._mMarkList.clear();
    }
}

EMarkManager.prototype._getMapBound = function(){
    
	var _lCpt = this._mMap.af;
	var _lUpt = {x : _lCpt.x - this.map.root.offsetWidth / 2,
               y : _lCpt.y - this.map.root.offsetHeight / 2}; 
	var _lDpt = {x : upt.x + this.map.root.offsetWidth, 
               y : upt.y + this.map.root.offsetHeight};    
    var _lU = this.map.ay(_lUpt);
    var _lD = this.map.ay(_lDpt);
    return {x1:_lU.ac, y1:_lU.Y, x2:_lD.ac, y2:_lD.Y};
}

EMarkManager.prototype.mapChanged = function() {

    var _lA = this._getMapBound();
    $.post(
        'EMapSDK.aspx',
        {
            commandid:'Search0007', 
            x1:_lA.x1, 
            y1:_lA.y1, 
            x2:_lA.x2, 
            y2:_lA.y2
        }, 
        this.update(XmlParser(pXml)));
	
}

EMarkManager.prototype.update = function(pNodeList) {

    if(pNodeList && PNodeList != null) {
        
        for(var i = 0; i < this._mMarkList.size(); i++) {
            this._mMarkList.get(i).redraw(true);
        }
    }
    else {
        for(var i = 0; i < this._mMarkList.size(); i++) {
            this._mMarkList.get(i).redraw(true);
        }
    }

}


function DynamicMarkManager(pMap) {
    
    this._mMap = pMap;
    
    /** @type IArrayList **/
    this._mMarkList = new IArrayList();
    
    this._mOldScale = this._mMap.aR();
	
	this._mBound = null;

}

//DynamicMarkManager.prototype.init = function(){
//    this._mMap.aq(this._mapChanged);
//}

DynamicMarkManager.prototype._getMapBound = function(){
    
    var _lCpt = this._mMap.af;
	var _lUpt = {x : _lCpt.x - this._mMap.root.offsetWidth / 2,
               y : _lCpt.y - this._mMap.root.offsetHeight / 2}; 
	var _lDpt = {x : _lUpt.x + this._mMap.root.offsetWidth, 
               y : _lUpt.y + this._mMap.root.offsetHeight};    
    var _lU = this._mMap.ay(_lUpt);
    var _lD = this._mMap.ay(_lDpt);
    return {x1:_lU.ac, y1:_lU.Y, x2:_lD.ac, y2:_lD.Y};
};

//DynamicMarkManager.prototype._mapChanged = function() {
//    
//    var _lA = this._getMapBound();
//
//    $.post(
//        'EMapSDK.aspx',
//        {
//            commandid:'Search0007', 
//            x1:_lA.x1, 
//            y1:_lA.y1, 
//            x2:_lA.x2, 
//            y2:_lA.y2
//        }, 
//        this.update(XmlParser(pXml)));
//	
//}

DynamicMarkManager.prototype._createMark = function(pNode){
    
    var _lScl = this._mMap.aR();
    var _liC = null;
    	
    var _lInfo = _createStoreInfo(pNode);
	var _lM = null;
    if(mSelectedID != null && pNode.mID == mSelectedID) {

/*	    if(_lScl > 7) { //lv13:7
	        _liC = _ICON.sl_px36;
	    }
	    else if (_lScl > 5) { //lv11:5
	        _liC = _ICON.sl_px24;        
	    }
	    else {
	        _liC = _ICON.sl_px18;        
	    }
*/
		_liC = eMap.properties.mStoreSelectedIcon;
				
        if(mShowSelectedInfo && _lInfo) {

            var _lScl = imap.aR();
            var _lPosPerH =  imap.B.aU[_lScl].ak / imap.ax().height;
            imap.bq(
                new bu(
                    pNode.mX, 
                    pNode.mY+_lPosPerH*_liC.bG.height
                ),
                _lInfo, 
                null
            );
			mShowSelectedInfo = false;
        }
	}
	else {
/*
	    if(_lScl > 7) { //lv13:7
	        _liC = _ICON.px36;
	    }
	    else if (_lScl > 5) { //lv11:5
	        _liC = _ICON.px24;        
	    }
	    else {
	        _liC = _ICON.px18;        
	    }		
*/
		_liC = eMap.properties.mStoreIcon;	
	}

		 
    _lM = new EMark(new bu(pNode.mX, pNode.mY), {icon:_liC, info:_lInfo, object:pNode, title:pNode.mName});
   
    _lM.initialize(this._mMap);
    
    _lM.show();
    
    return _lM;
}

DynamicMarkManager.prototype.update = function(pNodeList) {
	
    if(this._mMap.aR() < 5) { //lv11
		if(this._mMarkList.size() > 0) {
			this._mMarkList.clear();			
		}
	}
    else if(typeof(pNodeList) != 'undefined') {
            
        for(var i = 0; i < this._mMarkList.size(); i++) {
            this._mMarkList.get(i).remove();
        }
        for(var i = 0; i < this._mMarkList.size(); i++) {
            this._mMarkList.clear();
        }
        
        if(pNodeList != null) {
            for(var i = 0; i < pNodeList.mPoi.length; i++) {
                var _lM = this._createMark(pNodeList.mPoi[i]);
                this._mMarkList.add(_lM);
            }
        }
    }
    else {
        for(var i = 0; i < this._mMarkList.size(); i++) {
            this._mMarkList.get(i).redraw(true);
        }
    }

}

var _mCloseInfoWinTimeout = null;
var _mTimeoutMap = null;

function _closeInfoWin() {
	
    if(_mTimeoutMap) {
        _mTimeoutMap.fZ();        
    }
}

function EMark(pPt, pOpt) {
    
	this._mMap = null;
	this._mPt = (pPt) ? pPt : null;;
	this._mIcon = (pOpt['icon']) ? pOpt['icon'] : null;
	this._mInfo = (pOpt['info']) ? pOpt['info'] : null;
	this._mImgNode = null;
    this._mShwNode = null;
    this._mPos = null;
    this._mPixOff = null;
    this._mObj = (pOpt['object']) ? pOpt['object'] : null;
    this._mTitle = (pOpt['title']) ? pOpt['title'] : null;
}

EMark.prototype = new bQ();

EMark.prototype.show = function() {
	
    this._mImgNode.style.visibility = "visible";
    if(this._mShwNode)this._mShwNode.style.visibility = "visible";
};

EMark.prototype.hide = function() {
    
    this._mImgNode.style.visibility = "hidden";
    if(this._mShwNode)
    this._mShwNode.style.visibility = "hidden";
};

EMark.prototype.initialize = function(pMap) {
    
	this._mMap = pMap;
    this.setIcon(this._mIcon);
    this.redraw(true);
};

EMark.prototype.setIcon = function(pIcon) {
    
    if(pIcon != null) {
        
        this.remove();
        this._mIcon = pIcon;
        
    	var _lCord = this._mMap.I(this._mPt);
        
    	this._mImgNode=au.aZ(
    		this._mIcon.image,
    		_lCord.x-this._mIcon.az.width,
    		_lCord.y-this._mIcon.az.height,
    		this._mIcon.bG.width,
    		this._mIcon.bG.height
    	);
        if(this._mTitle) {
            this._mImgNode.title = this._mTitle;    
        }
        this._mMap.getPane(o.I_MAP_MARKER_PANE).appendChild(this._mImgNode);


//        if(this._mIcon.shadow) {
//            this._ShwNode=au.aZ(
//                this._mIcon.shadow,
//                _lCord.x-this._mIcon.aO.width,
//                _lCord.y-this._mIcon.aO.height,
//                this._mIcon.aX.width,
//                this._mIcon.aX.height
//            );        
//   	        this._mMap.getPane(o.I_MAP_MARKER_SHADOW_PANE).appendChild(this._mShwNode);
//        }
        
        var _lCur = this;
        
        $(this._mImgNode).click(
            function(e) {
                if(!e) {
                    e = window.event;
                }
                if(_mCloseInfoWinTimeout != null) {
                    clearTimeout(_mCloseInfoWinTimeout);
                    _mTimeoutMap = null;
                    _mCloseInfoWinTimeout = null;
                }

                if(_lCur._mInfo) {

                    var _lScl = _lCur._mMap.aR();
                    var _lPosPerH =  _lCur._mMap.B.aU[_lScl].ak / _lCur._mMap.ax().height;
                    _lCur._mMap.bq(
                        new bu(
                            _lCur._mPt.ac, 
                            _lCur._mPt.Y+_lPosPerH*_lCur._mIcon.bG.height
                        ),
                        _lCur._mInfo, 
                        null
                    );
                }
                cancelBubble(e);
            }
        );    
         $(this._mImgNode).dblclick(
            function(e) {
                if(!e) {
                    e = window.event;
                }
                cancelBubble(e);
            }
        ); 
        $(this._mImgNode).mousedown(
            function(e) {
                if(!e) {
                    e = window.event;
                }
                cancelBubble(e);
            }
        );
        $(this._mImgNode).hover(
            function(e){ //over

                this.style.cursor = 'pointer';
                _mIsMarkIconSelectd = true;
                _mFocusMark = _lCur;

            },
            function(e){ //out
                _mTimeoutMap = _lCur._mMap;
//                _mCloseInfoWinTimeout = setTimeout('_closeInfoWin()', 1000);
                this.style.cursor = 'default';
                _mIsMarkIconSelectd = false;
            }        
        );
    }
    
};

//
EMark.prototype.getPixelOffset = function() {
    return this._mPixOff;
}

//gis point
EMark.prototype.getPoint = function() {
    return this._mPt;
}

EMark.prototype.setPoint = function(pPt) {
    if(pPt != this._mPt) {
        this._mPt = pPt;
        this.redraw(true);
    }
}

EMark.prototype.remove = function () {
	
    if(this._mImgNode && this._mImgNode.parentNode != null) {
    	this._mImgNode.parentNode.removeChild(this._mImgNode);
	}
    if(this._mShwNode && this._mShwNode.parentNode != null) {
        this._mShwNode.parentNode.removeChild(this._mShwNode);
    }
};

EMark.prototype.redraw = function(force) {

    if(!force) return;
    
    var _lCord = this._mMap.I(this._mPt);
    this._mPixOff = _lCord;
    
    this._mImgNode.style.top = _lCord.y - this._mIcon.az.height + "px";
    this._mImgNode.style.left = _lCord.x - this._mIcon.az.width + "px";	

    if(this._mShwNode) {
        this._mShwNode.style.top = _lCord.y - this._mIcon.aO.height + "px";
        this._mShwNode.style.left = _lCord.x - this._mIcon.aO.width + "px";
    }
};

function _createIcon(pOpt) {
    
	var _liC=new fD();
    _liC.image=(pOpt['image'])?pOpt['image']:null;
    _liC.shadow=(pOpt['shadow'])?pOpt['shadow']:null;
    _liC.bG=(pOpt['imgsize'])?pOpt['imgsize']:null;
    _liC.az=(pOpt['imganchor'])?pOpt['imganchor']:null;
    _liC.aX=(pOpt['shwsize'])?pOpt['shwsize']:null;
    _liC.aO=(pOpt['shwanchor'])?pOpt['shwanchor']:null;
    return _liC;
}

function _createStoreInfo(pPoi) {
    
    var _lUl = document.createElement('ul');
    
    var _lLi = document.createElement('li');    
    
    _lLi.innerHTML = '<h3>店號：</h3>' + pPoi.mID;    
    _lUl.appendChild(_lLi);
    
    _lLi = document.createElement('li');    
    _lLi.innerHTML = '<h3>店名：</h3>' + pPoi.mName;    
    _lUl.appendChild(_lLi);
    
    _lLi = document.createElement('li');    
    
    _lLi.innerHTML = '<h3>地址：</h3><span>' + pPoi.mAddress +'</span>';
    _lUl.appendChild(_lLi);
    
    _lLi = document.createElement('li'); 
	
	if(!_mPermission.getPermission('EService')) { //非EService顯示電話及傳真
		
	    _lLi.innerHTML = '<h3>電話：</h3>' + ((pPoi.mTel != null) ? pPoi.mTel : ' ');
	    _lUl.appendChild(_lLi);
	    
	    _lLi = document.createElement('li');    
	    
	    _lLi.innerHTML = '<h3>傳真：</h3>' + ((pPoi.mFax != null) ? pPoi.mFax : ' ');
	    _lUl.appendChild(_lLi);
	    
	    _lLi = document.createElement('li');    
	}   
    
    
    _lLi.innerHTML = '<h3>服務：</h3>' + ((pPoi.mService != null) ? pPoi.mService : ' ');
	_lLi.style.visibility="hidden";
    _lUl.appendChild(_lLi);

    _lLi = document.createElement('li');    
    
    _lLi.innerHTML = '<h3>備註：</h3>' + ((pPoi.mRemark != null) ? pPoi.mRemark : ' ');
	_lLi.style.visibility="hidden";
    _lUl.appendChild(_lLi);
	
    var _lDiv = document.createElement('div');  
     
    _lDiv.appendChild(_lUl);

	if(_mPermission.getPermission('EService')) {
		
		var _fm = document.createElement('form');
		_fm.method = 'POST';
		_fm.action = 'end.aspx';
		_fm.name = 'deliver_store';
        
        _fm.appendChild(_createFormInput('storeid', pPoi.mID, {display:'none', visibility: 'hidden'}));
        _fm.appendChild(_createFormInput('storename', pPoi.mName, {display:'none', visibility: 'hidden'}));
        _fm.appendChild(_createFormInput('storeaddress', pPoi.mAddress, {display:'none', visibility: 'hidden'}));

	    var _lSubmitBut = document.createElement('input');
	    _lSubmitBut.type = 'button';
	    _lSubmitBut.value = '確認配送門市';
//	    _lSubmitBut.setAttribute(
//			'query', 
//			'end.htm?id='+pPoi.mID+'&storename='+pPoi.mName+'&address='+pPoi.mAddress
//		);
//	    _lSubmitBut.setAttribute(
//			'query', 
//			Util.url.generateURL('end.htm', {id:pPoi.mID,storename:pPoi.mName,address:pPoi.mAddress})
//		);
//	    _lSubmitBut.onclick = function(e) {
//	        if(!e) {
//	            e = window.event;
//	        }
//			location.href=encodeURI(this.getAttribute('query'));
//	    }
		_fm.appendChild(_lSubmitBut);
		_lDiv.appendChild(_fm);
		_lSubmitBut.className='submit_button';
		_lSubmitBut.onclick = function() {_fm.submit();}
		
	}
   
//    _lLi = document.createElement('li');    
//    _lLi.appendChild(_lAdvBut);
//    _lUl.appendChild(_lLi);    
    
    return _lDiv;

}

function ParseURL(pURL) {
	var _la = new Object();
	var _ltmp = pURL.split('?');
	if(_ltmp.length==2) {
		_ltmp = _ltmp[1];
		_ltmp=_ltmp.split('&');
		_lv=null;
		for(var i=0; i<_ltmp.length;i++) {
			_lv=_ltmp[i].split('=');
			if(_lv.length==2) {
				_la[_lv[0]]=_lv[1];
			}
		}
	}
	return _la;
}

function getCssRule() {
     
    var styleSheetLen = document.styleSheets.length;      
    
	if(!styleSheetLen) return;
	     
        var ruleName = (document.styleSheets[0].cssRules)?'cssRules':'rules';     
        var result = {};
        var totalRuleLen = 0;
        var totalSelectorLen = 0;
        var totalProperty = 0;
		
        for(var i=0; i<styleSheetLen; i++) {
			
            var styleSheet = document.styleSheets[i];
            var ruleLen = styleSheet[ruleName].length;          
            totalRuleLen += ruleLen;          
            
			for(var j=0; j<ruleLen; j++) {
				
                var selectors = styleSheet[ruleName][j].selectorText.toLowerCase().split(",");
                var selectorLen = selectors.length;
                totalSelectorLen += selectorLen;
                
				for(var k=0; k<selectorLen; k++) {
                    selector = selectors[k].replace(/(^\s*)|(\s*$)/g, "");                 
                    result[selector] = {};                 
                    var styleSet = styleSheet[ruleName][j].style;                  
                    for (property in styleSet) {
                        if(styleSet[property] && property != 'cssText') {                        
                        result[selector][property] = styleSet[property];                         
                        totalProperty += 1;                     
                    }                 
                }             
            }         
        }     
    }  
    return result; 
} 

function _createFormInput(name, value, styles) {
    
	var _input = document.createElement('input');			
	_input.type='text';
	_input.name = name;
	_input.value = value;
    
    if (styles && styles != null) {        
        for (_s in styles) {_input.style[_s] = styles[_s];}
    }
    return _input;
}


//function convertPoiToString(pVal) {
//    
//    var _lPt = '' + pVal;
//    var _lCnt = _lPt.length;
//    
//    if(_lCnt > 6) {
//        var _la = _lPt.substring(0, _lCnt - 7);
//        var _lb = _lPt.substring( _lCnt - 6, _lCnt - 1);
//        _la + '.' + _lb;
//    }
//    else {
//        _lPt = '0.' + _lPt;
//    }
//    
//}
