


var Modello = {
    version: '0.0.3',
    date: '2006-03-27'
};


var Class = new (function () {

    this.create = function () {
        var cls = function () {this.__class__ = arguments.callee; _construct.apply(this, arguments);};
        _extends(cls, arguments);
        cls.register = function (path, override) { return Class.register(this, path, override);};
        cls.create = _createInstance;
        cls.toString = _toStringClass;
        cls.subclassOf = function (cls) {return _subclassOf(this, cls);};
        cls.superclassOf = function (cls) {return _subclassOf(cls, this);};
        return cls;
    };

    this.register = function (cls, path, override) {
        var override = override || false;
        if (typeof cls != 'function') {
            throw new Error('Class register error: The first argument must be a function');
        }
        var pair = [];
        if (!_parse_path(path, pair)) {
            throw new Error('Class register error: Invalid class path');
        }
        var pkg = pair[0];
        var cn = pair[1];
        var old_class = _class_depository[pkg][cn];
        if (old_class) {
            if (override) {
                delete old_class.__package__;
                delete old_class.__classname__;
            } else {
                throw new Error('Class register error: Class "' + path + '" already exists');
            }
        }
        _class_depository[pkg][cn] = cls;
        cls.__package__ = pkg;
        cls.__classname__ = cn;
        return cls;
    };

    this.get = function (path) {
        var pair = [];
        if (!_parse_path(path, pair, true) || !_class_depository[pair[0]][pair[1]]) {
            throw new Error('Class get error: Class "' + path + '" is not found');
        }
        return _class_depository[pair[0]][pair[1]];
    };

    this.abstractMethod = function () {
        throw new Error('Class runtime error: call an abstract method that has not been implemented');
    };

    this.toString = function () { return '[object Class]'; };

    var _class_depository = {};

    var _parse_path = function (path, pair, check) {
        if (typeof path != 'string' || path.length == 0) {
            return false;
        }
        var arr = path.split('.');
        if (arr.length > 1) {
            pair[0] = arr.slice(0, arr.length - 1).join('.');
            pair[1] = arr[arr.length - 1];
        } else {
            pair[0] = '';
            pair[1] = path;
        }
        if (typeof _class_depository[pair[0]] != 'object') {
            if (check) {
                return false;
            } else {
                _class_depository[pair[0]] = {};
            }
        }
        return true;
    };

    var _createInstance = function () {
        var args = [];
        for (var i = 0; i < arguments.length; i++) {
            args.push('arguments[' + i + ']');
        }
        return eval('new this(' + args.join(', ') + ');');
    };

    var _extends = function (cls, args) {
        cls.__superclasses__ = [];
        for (var i = 0; i < args.length; i++) {
            var superclass = args[i];
            if (typeof superclass == 'string') {
                superclass = Class.get(superclass);
            }
            if (typeof superclass != 'function') {
                throw new Error('Class create error: Invalid superclass: ' + 'args[' + i + ']');
            }
            cls.__superclasses__.push(superclass);
        }
    };

    var _construct = function () {
        var cls = this.__class__;
        for (var i = cls.__superclasses__.length - 1; i >= 0; i--) {
            var s = cls.__superclasses__[i];
            eval('this.super' + i + ' = new s(Class);');
            eval('_extend(this, this.super' + i + ');');
        }
        this.__class__ = cls;
        this.toString = _toStringInstance;
        if (typeof cls.construct == 'function') {
            cls.construct.apply(this, [this, cls]);
        }
        this.getClass = function () {return this.__class__;};
        this.isA = function (cls) {return _subclassOf(this.__class__, cls);};
        this.instanceOf = _instanceOf;
        if (arguments[0] != Class && typeof this.initialize == 'function') {
            this.initialize.apply(this, arguments);
        }
    };

    var _extend = function (dest, src) {
        for (prop in src) {
            if (prop.substr(0, 5) == 'super' && !isNaN(parseInt(prop.substr(5)))) {
                continue;
            }
            dest[prop] = src[prop];
        }
    };

    var _toStringClass = function () {
        if (this.__classname__) {
            if (this.__package__.length > 0) {
                return '[class ' +  this.__package__ + '.' + this.__classname__ + ']';
            } else {
                return '[class ' +  this.__classname__ + ']';
            }
        } else {
            return '[class Anonymous]';
        }
    };

    var _toStringInstance = function () {
        if (this.__class__.__classname__) {
            if (this.__class__.__package__.length > 0) {
                return '[object ' + this.__class__.__package__ + '.' + this.__class__.__classname__ + ']';
            } else {
                return '[object ' + this.__class__.__classname__ + ']';
            }
        } else {
            if (this.__class__) {
                return '[object Anonymous class]';
            } else {
                return '[object Object]';
            }
        }
    };

    var _instanceOf = function (cls) {
        if (typeof cls == 'string') {
            cls = Class.get(cls);
        }
        if (typeof cls != 'function') {
            return false;
        }
        return this.__class__ == cls;
    };

    var _subclassOf = function (cls1, cls2) {
        if (typeof cls1 == 'string') {
            cls1 = Class.get(cls1);
        }
        if (typeof cls2 == 'string') {
            cls2 = Class.get(cls2);
        }
        if (typeof cls1 != 'function' || typeof cls2 != 'function') {
            return false;
        }
        if (!cls1.__superclasses__ || cls1.__superclasses__.constructor != Array) {
            return false;
        }
        for (var i = 0; i < cls1.__superclasses__.length; i++) {
            if (cls1.__superclasses__[i] == cls2) {
                return true;
            } else {
                if (_subclassOf(cls1.__superclasses__[i], cls2)) {
                    return true;
                }
            }
        }
        return false;
    };

});



var Define = (function () {
    var __defined_macros__ = [];
    return (function (name, value) {
        if (arguments.length < 2 || typeof name != 'string') {
            throw new Error('Define error: Usage: Define(\'name\', value);');
        }
        for (var i = 0; i < __defined_macros__.length; i++) {
            if (__defined_macros__[i] == name) {
                return;
            }
        }
        if (typeof value == 'string') {
            eval('window.' + name + ' = "' + value + '";');
        } else {
            if (typeof value == 'number' || typeof value == 'boolean') {
                eval('window.' + name + ' = ' + value + ';');
            } else {
                eval('window.' + name + ' = value ;');
            }
        }
        __defined_macros__.push(name);
    });
})();



if (!Array.prototype.push) {
    Array.prototype.push = function () {
        var l = this.length;
        for (var i = 0; i < arguments.length; i++) {
            this[l + i] = arguments[i];
        }
        return this.length;
    }
};

if (!Function.prototype.apply) {
    Function.prototype.apply = function (obj, args) {
        var arr = [];
        var obj = obj || window;
        var args = args || [];
        for (var i = 0; i < args.length; i++) {
            arr[i] = 'args[' + i + ']';
        }
        obj.__tmp_method__ = this;
        var result = eval('obj.__tmp_method__(' + arr.join(', ') + ')');
        delete obj.__tmp_method__;
        return result;
    }
};



Modello.ajax = {
    version: '0.0.6',
    date: '2006-04-18'
};




Class.create().register('modello.ajax.Connection').get = function () {
    var _conn = null;
    try {
        _conn = new ActiveXObject('Msxml2.XMLHTTP');
    } catch (e) {
        try {
            _conn = new ActiveXObject('Microsoft.XMLHTTP');
        } catch (E) {
            _conn = null;
        }
    }
    if (!_conn && typeof XMLHttpRequest != 'undefined') {
        _conn = new XMLHttpRequest();
    }
    return _conn;
};


Class.create().register('modello.ajax.Request').construct = function () {

    this.url = '';
    this.method = '';
    this.data = '';
    this.busy = false;

    var _conn = null;
    var _emptyMethod = function () {};
    var _handler = _emptyMethod;
    var _requestHeaders = {};
    var _state = ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];
    var _response = null;

    this.initialize = function (url, method, data) {
        _conn = Class.get('modello.ajax.Connection').get();
        if (!_conn) {
            throw new Error(this + ' initialize error: Connection establish faild');
        }
        this.url = url || '';
        this.method = method || 'GET';
        this.data = data || '';
        for (key in _requestHeaders) {
            delete _requestHeaders[key];
        }
    };

    this.reset = function () {
        if (!this.busy) {
            for (key in _requestHeaders) {
                _conn.setRequestHeader(key, '');
            }
            _requestHeaders = {};
            for (key in _requestHeaders) {
                delete _requestHeaders[key];
            }
        }
    };

    this.abort = function () {if (this.busy) _conn.abort();};

    this.setURL = function (url) {this.url = url;};

    this.setMethod = function (method) {this.method = method;};

    this.setData = function (data) {this.data = data;};

    this.setHandler = function (handler) {_handler = handler;};

    this.setHeader = function (key, value) {_requestHeaders[key] = value;};

   

	this.addHeader = function (header) { var ret = header.split(new RegExp(":\s*")); this.setHeader(ret[0], ret[1]); };

    this.open = function (async) {
        var async = async || false;
        if (this.busy) {
            throw new Error(this + ' open error: Network busy');
        }
        this.busy = true;
        _response = null;
        try {
            _conn.open(this.method.toUpperCase(), this.url, async);
            if (async) {
                _conn.onreadystatechange = Function.bind(this, _onStateChange);
            } else {
                _conn.onreadystatechange = _emptyMethod;
            }
            for (key in _requestHeaders) {
                _conn.setRequestHeader(key, _requestHeaders[key]);
            }
            if (this.method == 'POST') {
                _conn.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
                _conn.send(this.data);
            } else {
                _conn.send(null);
            }
        } catch (e) {
            this.onException(e);
        }
        if (!async) {
            this.busy = false;
            _response = Class.get('modello.ajax.Response').create(this);
            return _response;
        }
    };

    this.getState = function () {return _state[_conn.readyState];};

    this.getConnection = function () {return _conn;};

    this.getResponse = function () {return _response;};

    this.onException = function (e) {throw(e);};

    var _onStateChange = function () {
        var state = _state[_conn.readyState];
        try {
            if (state == 'Complete') {
                _response = Class.get('modello.ajax.Response').create(this);
                _handler(_response);
                _conn.onreadystatechange = _emptyMethod;
                this.busy = false;
            }
            if (typeof this['on' + state] == 'function') {
                this['on' + state]();
            }
        } catch (e) {
            this.onException(e);
        }
    };
};


Class.create().register('modello.ajax.Response').construct = function () {

    var _conn = null;

    this.initialize = function (request) {
        if (request.getState() != 'Complete') {
            throw new Error(this + ' initialize error: request is not complete');
        }
        _conn = request.getConnection();
    };

    this.getStatus = function () {return _conn.status;};

    this.getStatusText = function () {return _conn.statusText ? _conn.statusText : _conn.status;};

    this.getHeader = function (key) {return _conn.getResponseHeader(key);};

    this.getAllHeaders = function () {return _conn.getAllResponseHeaders();};

    this.getRawHeader = function () {return ['HTTP/1.x', this.getStatus(), this.getStatusText()].join(' ') + '\r\n' + this.getAllHeaders();};

    this.getText = function () { return _conn.responseText; };

    this.getXML = function () {return _conn.responseXML;};
};


Class.create().register('modello.ajax.Urllib').urlparse = function (url) {
    var ret = {};
    var arr = url.split('://', 2);
    if (arr.length > 1) {
        ret.scheme = arr[0];
        var host = arr[1];
        arr = host.split('/');
        if (arr.length < 2) {
            ret.host = arr[0];
            return ret;
        } else {
            var path = arr.slice(1).join('/');
            var host = arr[0];
            arr = host.split('@', 2);
            if (arr.length > 1) {
                var host = arr[1];
                var user = arr[0];
                arr = user.split(':', 2);
                ret.user = arr[0];
                if (arr.length > 1) {
                    ret.pass = arr[1];
                }
            } else {
                var host = arr[0];
            }
            arr = host.split(':', 2);
            ret.host = arr[0];
            if (arr.length > 1) {
                ret.port = arr[1];
            }
        }
    } else {
        var path = arr[0];
    }
    arr = path.split('?');
    ret.path = arr[0];
    if (typeof ret.host != 'undefined') {
        ret.path = '/' + ret.path;
    }
    if (arr.length > 1) {
        var query = arr.slice(1).join('?');
        arr = query.split('#');
        if (arr.length > 1) {
            ret.query = arr.slice(0, -1).join('#');
            ret.flagment = arr[arr.length-1];
        } else {
            ret.query = arr[0];
        }
    }
    return ret;
};


Class.get('modello.ajax.Urllib').urljoin = function (base, url) {
    var ret1 = Class.get('modello.ajax.Urllib').urlparse(base);
    var ret2 = Class.get('modello.ajax.Urllib').urlparse(url);
    if (typeof ret2.scheme != 'undefined') {
        return url;
    }
    if (!ret2.path) {
        return base;
    }
    var host = '';
    if (ret1.scheme) {
        host = ret1.scheme + '://';
    }
    if (ret1.user) {
        host += ret1.user;
        if (ret1.pass) {
            host += ':' + ret1.pass;
        }
        host += '@';
    }
    if (ret1.host) {
        host += ret1.host;
    }
    if (ret1.port) {
        host += ':' + ret1.port;
    }
    var path = ret2.path;
    if (path.charAt(0) != '/') {
        var arr = ret1.path.split('/');
        arr[arr.length-1] = path;
        path = arr.join('/');
    }
    var items = path.split('/');
    while (true) {
        var success = false;
        for (var i = 1; i < items.length; i++) {
            if (items[i] == '..' && items[i-1] && items[i-1] != '..') {
                Array.removeAt(items, i);
                Array.removeAt(items, i-1);
                success = true;
                break;
            }
        }
        if (!success) {
            break;
        }
    }
    path = items.join('/');
    if (ret2.query) {
        path += '?' + ret2.query;
    }
    if (ret2.flagment) {
        path += '#' + ret2.flagment;
    }
    return host + path;
};


Class.get('modello.ajax.Urllib').urlget = (function () {

    var _request_pool = [];

    var _reuse_request = function(chunnel) {
        if (typeof chunnel == 'string') {
            if (typeof _request_pool[chunnel] == 'undefined') {
                var request = Class.get('modello.ajax.Request').create();
                _request_pool[chunnel] = request;
            } else {
                var request = _request_pool[chunnel];
            }
            return request.busy ? false : request;
        }
        for (var i = 0; i < _request_pool.length; i++) {
            if (!_request_pool[i].busy) {
                return _request_pool[i];
            }
        }
        _request_pool[i] = Class.get('modello.ajax.Request').create();
        return _request_pool[i];
    };

    return function (url, data, callback, chunnel, headers) {
        var data = data || '';
        if (location.protocol.slice(0, 4).toLowerCase() != 'http') {
            throw new Error(this + ' urlget error: Please use this method in http environment');
        }
        var url = Class.get('modello.ajax.Urllib').urljoin(location.href, url);
        var ret1 = Class.get('modello.ajax.Urllib').urlparse(url);
        var ret2 = Class.get('modello.ajax.Urllib').urlparse(location.href);
        if (ret1.scheme.toLowerCase() != 'http') {
            throw new Error(this + ' urlget error: Only http protocol is supported');
        }
		
        request = _reuse_request(chunnel);
        if (!request) {
            return false;
        }

        request.reset();

        if (ret1.host == ret2.host) {
            url += url.indexOf('?') < 0 ? '?' : '&';
            request.setURL(url + '_time_stamp=' + (new Date()).getTime());
            if (data) {
                request.setData(data);
                request.setMethod('POST');
            } else  {
                request.setMethod('GET');
            }
            if (headers) {
                for (var i = 0; i < headers.length; i++) {
                    request.addHeader(headers[i]);
                }
            }
        } else {
            if (typeof URLGET_PROXY == 'undefined') {
                throw new Error(this + ' urlget error: Cross domain request must define URLGET_PROXY first');
            }
            proxy = URLGET_PROXY + (URLGET_PROXY.indexOf('?') < 0 ? '?' : '&');
            request.setURL(proxy + '_time_stamp=' + (new Date()).getTime());
            request.setMethod('POST');
            var header = '';
            if (headers) {
                header = headers.join('\r\n');
                header += '\r\n';
            }
            request.setData('url=' + encodeURIComponent(url) + '&data=' + encodeURIComponent(data) + '&header=' + encodeURIComponent(header));
        }

        if (callback && typeof callback == 'function') {
            var handler = function (response) {
                callback(response, chunnel);
            };
            request.setHandler(handler);
            request.open(true);
            return true;
        } else {
            return request.open(false);
        }
    };
})();


Function.bind = function (object, method) {
    return function () {method.apply(object, arguments);};
};

var TrimPath;


(function() {              
    if (TrimPath == null)
        TrimPath = new Object();
    if (TrimPath.evalEx == null)
        TrimPath.evalEx = function(src) { return eval(src); };

    var UNDEFINED;
    if (Array.prototype.pop == null) 
        Array.prototype.pop = function() {
            if (this.length === 0) {return UNDEFINED;}
            return this[--this.length];
        };
    if (Array.prototype.push == null)
        Array.prototype.push = function() {
            for (var i = 0; i < arguments.length; ++i) {this[this.length] = arguments[i];}
            return this.length;
        };

    TrimPath.parseTemplate = function(tmplContent, optTmplName, optEtc) {
        if (optEtc == null)
            optEtc = TrimPath.parseTemplate_etc;
        var funcSrc = parse(tmplContent, optTmplName, optEtc);
        var func = TrimPath.evalEx(funcSrc, optTmplName, 1);
        if (func != null)
            return new optEtc.Template(optTmplName, tmplContent, funcSrc, func, optEtc);
        return null;
    };
    
    try {
        String.prototype.process = function(context, optFlags) {
            var template = TrimPath.parseTemplate(this, null);
            if (template != null)
                return template.process(context, optFlags);
            return this;
        };
    } catch (e) {
    }
    
    TrimPath.parseTemplate_etc = {};           
    TrimPath.parseTemplate_etc.statementTag = "forelse|for|if|elseif|else|var|macro";
    TrimPath.parseTemplate_etc.statementDef = {
        "if"     : { delta:  1, prefix: "if (", suffix: ") {", paramMin: 1 },
        "else"   : { delta:  0, prefix: "} else {" },
        "elseif" : { delta:  0, prefix: "} else if (", suffix: ") {", paramDefault: "true" },
        "/if"    : { delta: -1, prefix: "}" },
        "for"    : { delta:  1, paramMin: 3, 
                     prefixFunc : function(stmtParts, state, tmplName, etc) {
                        if (stmtParts[2] != "in")
                            throw new etc.ParseError(tmplName, state.line, "bad for loop statement: " + stmtParts.join(' '));
                        var iterVar = stmtParts[1];
                        var listVar = "__LIST__" + iterVar;
                        return [ "var ", listVar, " = ", stmtParts[3], ";",
                            
                             "var __LENGTH_STACK__;",
                             "if (typeof(__LENGTH_STACK__) == 'undefined' || !__LENGTH_STACK__.length) __LENGTH_STACK__ = new Array();", 
                             "__LENGTH_STACK__[__LENGTH_STACK__.length] = 0;",
                             "if ((", listVar, ") != null) { ",
                             "var ", iterVar, "_ct = 0;",      
                             "for (var ", iterVar, "_index in ", listVar, ") { ",
                             iterVar, "_ct++;",
                             "if (typeof(", listVar, "[", iterVar, "_index]) == 'function') {continue;}",
                             "__LENGTH_STACK__[__LENGTH_STACK__.length - 1]++;",
                             "var ", iterVar, " = ", listVar, "[", iterVar, "_index];" ].join("");
                     } },
        "forelse" : { delta:  0, prefix: "} } if (__LENGTH_STACK__[__LENGTH_STACK__.length - 1] == 0) { if (", suffix: ") {", paramDefault: "true" },
        "/for"    : { delta: -1, prefix: "} }; delete __LENGTH_STACK__[__LENGTH_STACK__.length - 1];" },
        "var"     : { delta:  0, prefix: "var ", suffix: ";" },
        "macro"   : { delta:  1, 
                      prefixFunc : function(stmtParts, state, tmplName, etc) {
                          var macroName = stmtParts[1].split('(')[0];
                          return [ "var ", macroName, " = function", 
                                   stmtParts.slice(1).join(' ').substring(macroName.length),
                                   "{ var _OUT_arr = []; var _OUT = { write: function(m) { if (m) _OUT_arr.push(m); } }; " ].join('');
                     } }, 
        "/macro"  : { delta: -1, prefix: " return _OUT_arr.join(''); };" }
    };
    TrimPath.parseTemplate_etc.modifierDef = {
        "eat"        : function(v)    { return ""; },
       
	   
	    "escape"     : function(s)    { return String(s).replace(new RegExp("&","g"), "&amp;").replace(new RegExp("<","g"), "&lt;").replace(new RegExp(">","g"), "&gt;"); },
        "capitalize" : function(s)    { return String(s).toUpperCase(); },
        "default"    : function(s, d) { return s != null ? s : d; }
    };
    TrimPath.parseTemplate_etc.modifierDef.h = TrimPath.parseTemplate_etc.modifierDef.escape;

    TrimPath.parseTemplate_etc.Template = function(tmplName, tmplContent, funcSrc, func, etc) {
        this.process = function(context, flags) {
            if (context == null)
                context = {};
            if (context._MODIFIERS == null)
                context._MODIFIERS = {};
            if (context.defined == null)
                context.defined = function(str) { return (context[str] != undefined); };
            for (var k in etc.modifierDef) {
                if (context._MODIFIERS[k] == null)
                    context._MODIFIERS[k] = etc.modifierDef[k];
            }
            if (flags == null)
                flags = {};
            var resultArr = [];
            var resultOut = { write: function(m) { resultArr.push(m); } };
            try {
                func(resultOut, context, flags);
            } catch (e) {
                if (flags.throwExceptions == true)
                    throw e;
                var result = new String(resultArr.join("") + "[ERROR: " + e.toString() + (e.message ? '; ' + e.message : '') + "]");
                result["exception"] = e;
                return result;
            }
            return resultArr.join("");
        };
        this.name       = tmplName;
        this.source     = tmplContent; 
        this.sourceFunc = funcSrc;
        this.toString   = function() { return "TrimPath.Template [" + tmplName + "]"; };
    };
    TrimPath.parseTemplate_etc.ParseError = function(name, line, message) {
        this.name    = name;
        this.line    = line;
        this.message = message;
    };
    TrimPath.parseTemplate_etc.ParseError.prototype.toString = function() { 
        return ("TrimPath template ParseError in " + this.name + ": line " + this.line + ", " + this.message);
    };
    
    var parse = function(body, tmplName, etc) {
        body = cleanWhiteSpace(body);
        var funcText = [ "var TrimPath_Template_TEMP = function(_OUT, _CONTEXT, _FLAGS) { with (_CONTEXT) {" ];
        var state    = { stack: [], line: 1 };                             
        var endStmtPrev = -1;
        while (endStmtPrev + 1 < body.length) {
            var begStmt = endStmtPrev;
           
            begStmt = body.indexOf("{", begStmt + 1);
            while (begStmt >= 0) {
                var endStmt = body.indexOf('}', begStmt + 1);
                var stmt = body.substring(begStmt, endStmt);
                var blockrx = stmt.match(/^\{(cdata|minify|eval)/);
               
	           
                if (blockrx) {
                    var blockType = blockrx[1]; 
                    var blockMarkerBeg = begStmt + blockType.length + 1;
                    var blockMarkerEnd = body.indexOf('}', blockMarkerBeg);
                    if (blockMarkerEnd >= 0) {
                        var blockMarker;
                        if( blockMarkerEnd - blockMarkerBeg <= 0 ) {
                            blockMarker = "{/" + blockType + "}";
                        } else {
                            blockMarker = body.substring(blockMarkerBeg + 1, blockMarkerEnd);
                        }                        
                        
                        var blockEnd = body.indexOf(blockMarker, blockMarkerEnd + 1);
                        if (blockEnd >= 0) {                            
                            emitSectionText(body.substring(endStmtPrev + 1, begStmt), funcText);
                            
                            var blockText = body.substring(blockMarkerEnd + 1, blockEnd);
                            if (blockType == 'cdata') {
                                emitText(blockText, funcText);
                            } else if (blockType == 'minify') {
                                emitText(scrubWhiteSpace(blockText), funcText);
                            } else if (blockType == 'eval') {
                                if (blockText != null && blockText.length > 0)
                                    funcText.push('_OUT.write( (function() { ' + blockText + ' })() );');
                            }
                            begStmt = endStmtPrev = blockEnd + blockMarker.length - 1;
                        }
                    }                        
                } else if (body.charAt(begStmt - 1) != '$' &&              
                           body.charAt(begStmt - 1) != '\\') {             
                    var offset = (body.charAt(begStmt + 1) == '/' ? 2 : 1);
                                                                           
                    if (body.substring(begStmt + offset, begStmt + 10 + offset).search(TrimPath.parseTemplate_etc.statementTag) == 0) 
                        break;                                             
                }
                begStmt = body.indexOf("{", begStmt + 1);
            }
            if (begStmt < 0)                             
                break;
            var endStmt = body.indexOf("}", begStmt + 1);
            if (endStmt < 0)
                break;
            emitSectionText(body.substring(endStmtPrev + 1, begStmt), funcText);
            emitStatement(body.substring(begStmt, endStmt + 1), state, funcText, tmplName, etc);
            endStmtPrev = endStmt;
        }
        emitSectionText(body.substring(endStmtPrev + 1), funcText);
        if (state.stack.length != 0)
            throw new etc.ParseError(tmplName, state.line, "unclosed, unmatched statement(s): " + state.stack.join(","));
        funcText.push("}}; TrimPath_Template_TEMP");
        return funcText.join("");
    };
    
    var emitStatement = function(stmtStr, state, funcText, tmplName, etc) {
        var parts = stmtStr.slice(1, -1).split(' ');
        var stmt = etc.statementDef[parts[0]];
        if (stmt == null) {                   
            emitSectionText(stmtStr, funcText);
            return;
        }
        if (stmt.delta < 0) {
            if (state.stack.length <= 0)
                throw new etc.ParseError(tmplName, state.line, "close tag does not match any previous statement: " + stmtStr);
            state.stack.pop();
        } 
        if (stmt.delta > 0)
            state.stack.push(stmtStr);

        if (stmt.paramMin != null && stmt.paramMin >= parts.length) {
            throw new etc.ParseError(tmplName, state.line, "statement needs more parameters: " + stmtStr);
        }
        if (stmt.prefixFunc != null)
            funcText.push(stmt.prefixFunc(parts, state, tmplName, etc));
        else 
            funcText.push(stmt.prefix);
        if (stmt.suffix != null) {
            if (parts.length <= 1) {
                if (stmt.paramDefault != null)
                    funcText.push(stmt.paramDefault);
            } else {
                for (var i = 1; i < parts.length; i++) {
                    if (i > 1)
                        funcText.push(' ');
                    funcText.push(parts[i]);
                }
            }
            funcText.push(stmt.suffix);
        }
    };

    var emitSectionText = function(text, funcText) {
        if (text.length <= 0)
            return;
        var nlPrefix = 0;              
        var nlSuffix = text.length - 1;
        while (nlPrefix < text.length && (text.charAt(nlPrefix) == '\n'))
            nlPrefix++;
        while (nlSuffix >= 0 && (text.charAt(nlSuffix) == ' ' || text.charAt(nlSuffix) == '\t'))
            nlSuffix--;
        if (nlSuffix < nlPrefix)
            nlSuffix = nlPrefix;
        if (nlPrefix > 0) {
            funcText.push('if (_FLAGS.keepWhitespace == true) _OUT.write("');
            var s = text.substring(0, nlPrefix).replace('\n', '\\n');
            if (s.charAt(s.length - 1) == '\n')
            	s = s.substring(0, s.length - 1);
            funcText.push(s);
            funcText.push('");');
        }
        var lines = text.substring(nlPrefix, nlSuffix + 1).split('\n');
        for (var i = 0; i < lines.length; i++) {
            emitSectionTextLine(lines[i], funcText);
            if (i < lines.length - 1)
                funcText.push('_OUT.write("\\n");\n');
        }
        if (nlSuffix + 1 < text.length) {
            funcText.push('if (_FLAGS.keepWhitespace == true) _OUT.write("');
            var s = text.substring(nlSuffix + 1).replace('\n', '\\n');
            if (s.charAt(s.length - 1) == '\n')
            	s = s.substring(0, s.length - 1);
            funcText.push(s);
            funcText.push('");');
        }
    };
    
    var emitSectionTextLine = function(line, funcText) {
        var endMarkPrev = '}';
        var endExprPrev = -1;
        while (endExprPrev + endMarkPrev.length < line.length) {
            var begMark = "${", endMark = "}";
            var begExpr = line.indexOf(begMark, endExprPrev + endMarkPrev.length);
            if (begExpr < 0)
                break;
            if (line.charAt(begExpr + 2) == '%') {
                begMark = "${%";
                endMark = "%}";
            }
            var endExpr = line.indexOf(endMark, begExpr + begMark.length);        
            if (endExpr < 0)
                break;
            emitText(line.substring(endExprPrev + endMarkPrev.length, begExpr), funcText);                
           
            var exprArr = line.substring(begExpr + begMark.length, endExpr).replace(/\|\|/g, "#@@#").split('|');
		
	       
            for (var k in exprArr) {
                if (exprArr[k].replace)
                    exprArr[k] = exprArr[k].replace(/#@@#/g, '||');
				
	               
            }
            funcText.push('_OUT.write(');
            emitExpression(exprArr, exprArr.length - 1, funcText); 
            funcText.push(');');
            endExprPrev = endExpr;
            endMarkPrev = endMark;
        }
        emitText(line.substring(endExprPrev + endMarkPrev.length), funcText); 
    };
    
    var emitText = function(text, funcText) {
        if (text == null || text.length <= 0) return;
        text = text.replace(/\\/g, '\\\\');
        text = text.replace(/\n/g, '\\n');
        text = text.replace(/"/g,  '\\"');
	   
	    
        funcText.push('_OUT.write("');
        funcText.push(text);
        funcText.push('");');
    };
    
    var emitExpression = function(exprArr, index, funcText) {
       
        var expr = exprArr[index];
        if (index <= 0) {         
            funcText.push(expr);
            return;
        }
        var parts = expr.split(':');
        funcText.push('_MODIFIERS["');
        funcText.push(parts[0]);
        funcText.push('"](');
        emitExpression(exprArr, index - 1, funcText);
        if (parts.length > 1) {
            funcText.push(',');
            funcText.push(parts[1]);
        }
        funcText.push(')');
    };

    var cleanWhiteSpace = function(result) {
        result = result.replace(/\t/g,   "    ");
        result = result.replace(/\r\n/g, "\n");
        result = result.replace(/\r/g,   "\n");
        result = result.replace(/^(\s*\S*(\s+\S+)*)\s*$/, '$1');
	   
        
	    return result;
    };

    var scrubWhiteSpace = function(result) {
        result = result.replace(/^\s+/g,   "");
        result = result.replace(/\s+$/g,   "");
        result = result.replace(/\s+/g,   " ");
        result = result.replace(/^(\s*\S*(\s+\S+)*)\s*$/, '$1');
	   
	    
        return result;
    };

   
   
    TrimPath.parseDOMTemplate = function(elementId, optDocument, optEtc) {
        if (optDocument == null)
            optDocument = document;
        var element = optDocument.getElementById(elementId);
        var content = element.value;    
        if (content == null)
            content = element.innerHTML;
       
	   
        content = content.replace(new RegExp("&lt;","g"), "<").replace(new RegExp("&gt;","g"), ">");
        return TrimPath.parseTemplate(content, elementId, optEtc);
    };

    TrimPath.processDOMTemplate = function(elementId, context, optFlags, optDocument, optEtc) {
        return TrimPath.parseDOMTemplate(elementId, optDocument, optEtc).process(context, optFlags);
    };
}) ();


var mapbox = Class.create().register("mapbox");

var _MAPBOX_DEBUG = false;


var _debug = function(str)
{
	if(!_MAPBOX_DEBUG) return;

	if(typeof console == "object")
		console.debug(str);
	else
		alert(str);
	
};


var _error = function(str)
{
	if(!_MAPBOX_DEBUG) return;
	
	if(typeof console == "object")
		console.error(str);
	else
		alert(str);
	
};


var _isie_ = navigator.appName=="Microsoft Internet Explorer"?true:false;

mapbox.Tools = Class.create();
mapbox.Tools.register("mapbox.Tools");


mapbox.Tools.isArray = function(obj)
{
	if(typeof obj == "undefined") return false;

	if (obj.constructor.toString().indexOf("Array") == -1)
		return false;
	else
		return true;
};


mapbox.Tools.getEventObj = function(funobj)
{
	if(window.event)
	{
		return window.event;
	}
	else
	{
		while(funobj.caller) funobj = funobj.caller;

		if(typeof funobj.arguments!="undefined" && funobj.arguments && funobj.arguments.length>0)
		{
			if(funobj.arguments[0].constructor.toString().indexOf("Event"))
				return funobj.arguments[0];
		}
	}

	return null;

};


mapbox.Tools.getImage =	function()
{
	var _ATTR_NAME = "_img_state";
	
	var _timerId = null;
	
	var _imgs = [];
	
	var _cbks = [];
	
	var _checkState = function()
	{
		if(_imgs.length>0)
		{
			var allComplete = true;
			
			for(var i=0,len=_imgs.length; i<len; i++)
			{
				if(_imgs[i].getAttribute(_ATTR_NAME)=="failed")
				{
					_fireCbk(i);
				}
				else if(!_imgs[i].complete)
				{
					allComplete = false;
				}
				else
				{
					_fireCbk(i);
				}
			}
			
			if(allComplete)
			{
				window.clearInterval(_timerId);
				_timerId = null;
				_imgs.length = 0;
				_cbks.length = 0;
			}
			
		}
	};
	
	var _fireCbk = function(idx)
	{
		if(typeof _cbks[idx]=="function")
		{
			var img = _imgs[idx];
			var state = false;
			if(img.width>0 || (typeof img.fileSize!="undefined" && img.fileSize!=-1))
				state = true;
			_cbks[idx](img,state);
			_cbks[idx] = null;
		}
	};
	
	var _errHandler = function(imgObj)
	{
		imgObj.setAttribute(_ATTR_NAME,"failed");
	};
	 
	return function(imgurl,callback)
	{
		var img = new Image();
		img.setAttribute(_ATTR_NAME,"loading");
		_imgs.push(img);
		_cbks.push(callback);
		
		if(document.all)
		{
			var delegate = function(imgObj)
            {
                return function()
                {
                    _errHandler(imgObj);
                }
            };
			
			img.onerror = delegate(img);

		}
		
		img.src = imgurl;
		
		var delegate = function()
        {
            return function()
            {
                _checkState();
            }
        };
		
		if(!_timerId) _timerId = window.setInterval(delegate(),500);
		
	};
}();

mapbox.JsLoader = Class.create();
mapbox.JsLoader.register("mapbox.JsLoader");

mapbox.JsLoader.construct = function($self,$class)
{

	this.initialize = function(){};

};

mapbox.JsLoader.get = function(url,oncomplete,options)
{

    if(typeof options!="object") options={};
    var id = options.id || "scriptTemp";
    var bCache = options.bCache || false;

    var symbol="?";
    if(url.indexOf("?")!="-1") symbol="&";

    var head=document.getElementsByTagName("head")[0];
    var sT = document.getElementById(id);
    if(sT&&sT.src&&sT.src==url) { oncomplete(); return; }
    if (sT) sT.parentNode.removeChild(sT);

    var s = document.createElement("script");
    head.appendChild(s);
    s.setAttribute("language", "javascript");
    s.setAttribute("type", "text/javascript");
    s.setAttribute("id", id);
    s.setAttribute("src", (bCache && bCache == true) ? url + symbol + Math.random() : url);

    s.onload = s.onreadystatechange = function()
    {
        if (typeof ActiveXObject!="undefined")
        {
            if(s.readyState&&s.readyState=="loaded")
                if(typeof oncomplete=="function")
                    oncomplete();

            if(s.readyState && s.readyState=="complete")
                return;
        }
        else
        {
            if(typeof oncomplete=="function")
                oncomplete();
        }
    };

   
    s.onerror = function()
    {
        if(s && s.parentNode) s.parentNode.removeChild(s);

        if(typeof options.onfailure=="function")
            options.onfailure();
    };
};


mapbox.DataProvider = Class.create();
mapbox.DataProvider.register("mapbox.DataProvider");

mapbox.DataProvider.construct = function($self,$class)
{

   
    var _commConfig = null;

    
    this.initialize = function(commConfig)
    {
        _commConfig = commConfig;
    };

    
    this.get = function(url,paras,oncomplete,options)
    {
        switch(_commConfig.getMode())
        {
            case mapbox.CommConfig.MODE_AJAX:

                _getByAjaxMode.apply(this, [url, paras, oncomplete, options]); break;

            case mapbox.CommConfig.MODE_SCRIPT:

                _getByScriptMode.apply(this, [url, paras, oncomplete, options]); break;

            default:

                _getByScriptMode.apply(this, [url, paras, oncomplete, options]); break;

        }
    };

    
    var _getByAjaxMode = function(url,paras,oncomplete,options)
    {
        try
        {
            _debug("ajax get: " + encodeURI(url + "?" + paras));
            Class.get('modello.ajax.Urllib').urlget(
                url,
                paras,
                function(response, chunnel) {
                    if(response.getStatus()==200)
                    {
	                   
                       
	                   
	                    eval(response.getText().replace(new RegExp("var *[^ =]*","gi"),"var _processData_tmp_ "));
	                    if(typeof _processData_tmp_ == "object" && _processData_tmp_)
                            oncomplete(true, _processData_tmp_);
	                    else
	                        oncomplete(true, null);
                    }
                    else
                    {
                        oncomplete(false, null);
                    }
                }
            )
        }
        catch(e)
        {
            _error("mapbox.DataProvider._getByAjaxMode() error: " + e.message);
            oncomplete(false, null);
        }
    };

    
    var _getByScriptMode = function(url,paras,oncomplete,options)
    {

        try
        {

	        if(typeof options!="object") options = {};
	        options.onfailure = function()
	        {
		        if(typeof oncomplete!="function") return;
		        oncomplete(false,null);
	        };

            var symbol = "?";
            if(url.indexOf("?")!="-1") symbol = "&";

            url = url + symbol + paras;
	        
            _debug("script get: " + encodeURI(url));

            mapbox.JsLoader.get(
                url,
                function() {
	                if(typeof oncomplete!="function") return;
	                
	                var scriptObjectName = options.scriptObjectName || "";
	                if(scriptObjectName)
	                {
		                eval("var _processData_tmp_ = " + scriptObjectName + ";");
						if(typeof _processData_tmp_ == "object" && _processData_tmp_)
							oncomplete(true, _processData_tmp_);
						else
							oncomplete(false, null);
	                }
	                else
	                    oncomplete(false, null);

                },
		        options
            )
        }
        catch(e)
        {
            _error("mapbox.DataProvider._getByScriptMode() error: " + e.message);
            oncomplete(false, null);
        }
    };

    
    this.getCommConfig = function()
    {
        return _commConfig;
    };

};

mapbox.EventHandler = Class.create();
mapbox.EventHandler.register("mapbox.EventHandler");

mapbox.EventHandler.construct = function($self,$class)
{
	var _thisObj = this;


	var _handlerName = "";


	var _handler = null;


	var _handlerThisObjectName = "";


	var _handlerThisObject = null;


    
	this.initialize = function(handler)
	{
		_handlerName = handler;
	};


	this.fire = function()
	{
		var returnValue = null;

		try
		{
			if(!_handler && _handlerName)
			{
				_handlerThisObjectName = _handlerName.indexOf(".")!=-1 ? _handlerName.substring(0,_handlerName.indexOf(".")) : "";
				if(_handlerThisObjectName) {
					_handlerThisObject = eval(_handlerThisObjectName);
					if(typeof _handlerThisObject!="object") _handlerThisObject = null;
				}
				eval("_handler = " + _handlerName + ";");
			}

			if(typeof _handler=="function") returnValue = _handler.apply(_handlerThisObject, arguments);
		}
		catch(ex)
		{
			_error(this.toString() + ".fire() error : " + ex.message);
		}

		return returnValue;

	};

	

};

mapbox.GlobalConfig = Class.create();
mapbox.GlobalConfig.register("mapbox.GlobalConfig");

mapbox.GlobalConfig.construct = function($self,$class)
{

	this.allowDebug = false;


	this.autoInit = true;


	this.onInitialized = null;


	this.allowAutoStartUrlListener = true;
	
	this.initialize = function(){};
	
	
	this.UrlHashListener =
	{
	
		interval: 200,
	
		onLocationChanged: null
	};
	

	this.Communication = null;
	
	
	this.Map =
	{
	
		general:
		{
		
			allowAutoInit: true,
		
			overview: 3,
		
			wheelZoom: false,
		
		
		
		
		
			onMarked: null,
		
		
		
		
		
			onLine: null,
		
		
		
			onHotCity: null,
		
			autoZoomToCity: true

		},
	
		items: []
	};
	
	
	this.Processors = [];
};

mapbox.CommConfig = Class.create();
mapbox.CommConfig.register("mapbox.CommConfig");

mapbox.CommConfig.MODE_AJAX = "ajax";
mapbox.CommConfig.MODE_SCRIPT = "script";

mapbox.CommConfig.construct = function($self,$class)
{

   
    var _mode = mapbox.CommConfig.MODE_AJAX;

   
    var _ajaxProxy = "";

    
    this.initialize = function(mode,proxy)
    {
        this.setMode(mode);
        this.setAjaxProxy(proxy);
    };


    this.getMode = function()
    {
        return _mode;
    };

    this.setMode = function(mode)
    {
        _mode = mode;
    };

    this.getAjaxProxy = function()
    {
        return _ajaxProxy;
    };

    this.setAjaxProxy = function(proxy)
    {
	    if(_mode!=mapbox.CommConfig.MODE_AJAX) return;
        _ajaxProxy = proxy;

        try
        {
            Define("URLGET_PROXY",_ajaxProxy);
        }
        catch(e)
        {
            _error("mapbox.CommConfig.setAjaxProxy() error: " + e.message);
        }
    };
};



mapbox.ProcessorConfig = Class.create();
mapbox.ProcessorConfig.register("mapbox.ProcessorConfig");

mapbox.ProcessorConfig.construct = function($self,$class)
{

	this.id = "";
	
	this.initialize = function(id)
	{
		this.id = id;
	};
	

	this.dataSource = "";
	

	this.conditions = "";
	

	this.processor = mapbox.StandardProcessor;


	this.scriptObjectName = "";
	


	this.onFailed = "";
	

   
   

    this.onLoaded = "";
	

   
   


    this.onShown = "";
	

	this.mapid = "";

   
    this.templateInfo = null;

   
	this.autoMarkerInfo = [];
	

	this.autoLineInfo = [];

};

mapbox.MapConfig = Class.create();
mapbox.MapConfig.register("mapbox.MapConfig");

mapbox.MapConfig.construct = function($self,$class)
{

	this.id = "";
	
	this.initialize = function(mapid)
	{
		this.id = mapid;
	};
	

	this.showLogo = false;
	

	this.showCityHot = false;
	

	this.zoom = 0;
	

	this.center = "";
    
};

mapbox.MapInfo = Class.create();
mapbox.MapInfo.register("mapbox.MapInfo");

mapbox.MapInfo.construct = function($self,$class)
{
	this.initialize = function(){};
	

	this.center = "";
	

	this.width = 0;
	

	this.height = 0;
	

	this.zoom = 0;
	


	
	
};


mapbox.MapMarkerInfo = Class.create();
mapbox.MapMarkerInfo.register("mapbox.MapMarkerInfo");

mapbox.MapMarkerInfo.construct = function($self,$class)
{

	this.initialize = function(){};
	

	this.strlatlon = "";
	

	this.icon = 
	{
	
		name:"",
		url:"",
	
		width:-1,
	
		height:-1,
	
		left:0.5,
		top:1
	};
	

	this.infoWindow = 
	{
	
		title: "",
	
		content:"",
       
        templateInfo:null
    };
	
	
	this.parse = function(dataObj)
	{
		var mi = null;

		if(typeof dataObj=="object" && dataObj)
		{
			mi = new mapbox.MapMarkerInfo();
			mi.strlatlon = this.strlatlon.process(dataObj);
			mi.icon.name = this.icon.name.process(dataObj);
			mi.icon.url = this.icon.url.process(dataObj);
			mi.icon.width = parseInt(this.icon.width.toString().process(dataObj));
			mi.icon.height = parseInt(this.icon.height.toString().process(dataObj));
			mi.icon.top = parseFloat(this.icon.top.toString().process(dataObj));
			mi.icon.left = parseFloat(this.icon.left.toString().process(dataObj));

			if(this.infoWindow && (this.infoWindow.title || this.infoWindow.content || this.infoWindow.templateInfo))
			{
				mi.infoWindow.title = this.infoWindow.title.process(dataObj);

				var content = "";
				if(this.infoWindow.templateInfo)
                    content = this.infoWindow.templateInfo.process(dataObj);
				else
					content = this.infoWindow.content.process(dataObj);

				mi.infoWindow.content = content;
                
            }
			else
				mi.infoWindow = null;
			
		}
		
		return mi;
	};


	
	this.mergeFrom = function(mi)
	{
		if(mi.icon.name && this.icon.name!=mi.icon.name) this.icon.name = mi.icon.name;
		if(mi.icon.url && this.icon.url!=mi.icon.url) this.icon.url = mi.icon.url;
		if(!isNaN(mi.icon.width) && this.icon.width!=mi.icon.width) this.icon.width = mi.icon.width;
		if(!isNaN(mi.icon.height) && this.icon.height!=mi.icon.height) this.icon.height = mi.icon.height;
		if(!isNaN(mi.icon.left) && this.icon.left!=mi.icon.left) this.icon.left = mi.icon.left;
		if(!isNaN(mi.icon.top) && this.icon.top!=mi.icon.top) this.icon.top = mi.icon.top;

		if(!mi.infoWindow)
			this.infoWindow = null;
		else
		{
			if(!this.infoWindow)
				this.infoWindow = mi.infoWindow;
			else
			{
				if(mi.infoWindow.title && this.infoWindow.title!=mi.infoWindow.title) this.infoWindow.title = mi.infoWindow.title;
				if(mi.infoWindow.content && this.infoWindow.content!=mi.infoWindow.content) this.infoWindow.content = mi.infoWindow.content;
				if(mi.infoWindow.templateInfo && this.infoWindow.templateInfo!=mi.infoWindow.templateInfo) this.infoWindow.templateInfo = mi.infoWindow.templateInfo;
			}
		}
	};
};

mapbox.MapLineInfo = Class.create();
mapbox.MapLineInfo.register("mapbox.MapLineInfo");

mapbox.MapLineInfo.construct = function($self,$class)
{
	
	this.initialize = function(){};


	this.strlatlons = "";
	

	this.style = 0;
	

    this.color = "green";
	

	this.stroke = 3;
	

    this.transparency = 60;


    this.arrow = false;
	

	this.infoWindow = 
	{
	
		title: "",
	
		content:"",
       
        templateInfo:null
    };
	
	
	this.getPoints = function()
	{
		var retValue = [];
		if(this.strlatlons)
		{
			var ary = this.strlatlons.split(",");
			for(var i=0,len=ary.length; i<len; i++)
			{
				retValue.push(new MPoint(ary[i]));
			}
		} 
		return retValue;
	};
	
	
	this.parse = function(dataObj)
	{
		var li = null;

		if(typeof dataObj=="object" && dataObj)
		{

			li = new mapbox.MapLineInfo();
			li.strlatlons = this.strlatlons.process(dataObj);
			li.color = this.color.process(dataObj);
			li.style = parseInt(this.style.process(dataObj));
			li.stroke = parseInt(this.stroke.toString().process(dataObj));
			li.transparency = parseInt(this.transparency.toString().process(dataObj));
			li.arrow = this.arrow.toString().process(dataObj) ? true : false;

			if(this.infoWindow && (this.infoWindow.title || this.infoWindow.content || this.infoWindow.templateInfo))
			{
				
				li.infoWindow.title = this.infoWindow.title.process(dataObj);

				var content = "";
				if(this.infoWindow.templateInfo)
                    content = this.infoWindow.templateInfo.process(dataObj);
				else
					content = this.infoWindow.content.process(dataObj);

				li.infoWindow.content = content;

            }
			else
				li.infoWindow = null;
			
		}
		
		return li;
	};

	
	this.mergeFrom = function(li)
	{
		if(li.strlatlons && this.strlatlons!=li.strlatlons) this.strlatlons = li.strlatlons;
		if(li.style && this.style!=li.style) this.style = li.style;
		if(li.color && this.color!=li.color) this.color = li.color;
		if(li.stroke && this.stroke!=li.stroke) this.stroke = li.stroke;
		if(li.transparency && this.transparency!=li.transparency) this.transparency = li.transparency;
		if(li.arrow && this.arrow!=li.arrow) this.arrow = li.arrow;


		if(!li.infoWindow)
			this.infoWindow = null;
		else
		{
			if(!this.infoWindow)
				this.infoWindow = li.infoWindow;
			else
			{
				if(li.infoWindow.title && this.infoWindow.title!=li.infoWindow.title) this.infoWindow.title = li.infoWindow.title;
				if(li.infoWindow.content && this.infoWindow.content!=li.infoWindow.content) this.infoWindow.content = li.infoWindow.content;
				if(li.infoWindow.templateInfo && this.infoWindow.templateInfo!=li.infoWindow.templateInfo) this.infoWindow.templateInfo = li.infoWindow.templateInfo;
			}
		}
	};
};

mapbox.MapAutoMarkerInfo = Class.create();
mapbox.MapAutoMarkerInfo.register("mapbox.MapAutoMarkerInfo");

mapbox.MapAutoMarkerInfo.construct = function($self,$class)
{
		
	this.initialize = function(){};
	
	this.map = 
	{
	
		center:"",
	
		zoom:""
	};
	

	this.markerInfo = null;
	

	this.miDataObjectName = "";

};

mapbox.MapAutoLineInfo = Class.create();
mapbox.MapAutoLineInfo.register("mapbox.MapAutoLineInfo");

mapbox.MapAutoLineInfo.construct = function($self,$class)
{
		
	this.initialize = function(){};
	
	this.map = 
	{
	
		center:"",
	
		zoom:""
	};
	

	this.lineInfo = null;
	

	this.liDataObjectName = "";

};

mapbox.Processor = Class.create();
mapbox.Processor.register("mapbox.Processor");
mapbox.Processor.construct = function($self,$class)
{

	var _map = null;
	

	var _config = null;

   
    var _dataProvider = null;

     
	this.initialize = function(map,config,dp)
	{
		_map = map;
		_config = config;
        _dataProvider = dp;
    };
	
	
	this.getMap = function(){return _map;};
	
	
	this.setMap = function(map){_map = map;};
	
	
	this.getConfig = function(){return _config;};
	
	
	this.setConfig = function(config){_config=config;};

    
    this.getDataProvider = function(){return _dataProvider;};

    
    this.setDataProvider = function(dp){_dataProvider = dp;};

    
	this.process = function(urlhash,extdata){return;};
	
};

mapbox.StandardProcessor = Class.create(mapbox.Processor);
mapbox.StandardProcessor.register("mapbox.StandardProcessor");
mapbox.StandardProcessor.construct = function($self,$class)
{
	var _thisObj = this;

   
    var _onFailedHandler = null;

   
    var _onLoadedHandler = null;

   
    var _onShownHandler = null;

    
	this.initialize = function(map,config,dp)
	{
		$self.super0.initialize.call(_thisObj, map, config, dp);
	};
	
	this.process = function(urlhash,extdata)
	{
		var config = this.getConfig();
		try
		{

		
			if(typeof config.dataSource == "string" && config.dataSource)
			{
			
				if(config.dataSource.indexOf("/")!=-1)
				{
				
					var delegate = function()
					{
						return function(iscomplete,data)
						{
							_processData.apply(_thisObj,[iscomplete,data,extdata]);
						};
					};

					var options = {};
					options.id = config.id + "_script";
					options.scriptObjectName = config.scriptObjectName;
					options.bCache = true;
                    this.getDataProvider().get(config.dataSource,encodeURI(urlhash.getHash()),delegate(),options);
				}
				else
				{
				
					eval("var _process_dataObj = window." + config.dataSource + ";");
				
					if(typeof _process_dataObj == "object")
					{
						_debug("jsobj get: " + config.dataSource);
						_parseTemplate.apply(_thisObj,[_process_dataObj,extdata]);
					}
					else
						throw new Error("standardprocessor.process():config.dataSource\u671f\u671b\u662f\u4e00\u4e2a\u5bf9\u8c61\u3002");
				}
			}
			
		}
		catch(ex)
		{
			_error("mapbox.Processor.StandardProcessor.process() error: " + ex.message);
			_fireFailedEvent.apply(_thisObj,[extdata]);
		}
	};

    
	var _processData = function(iscomplete,data,extdata)
	{

        if(iscomplete && data)
        {
            try
            {
                _parseTemplate.apply(_thisObj,[data,extdata]);
            }
            catch(e)
            {
                _fireFailedEvent.apply(_thisObj,[extdata]);
            }
        }
        else
		{
			_fireFailedEvent.apply(_thisObj,[extdata]);
		}

	};

    
	var _parseTemplate = function(dataObj,extdata)
	{

		if(typeof dataObj!="object") throw "standardprocessor._parseTemplate(): dataobj\u53c2\u6570\u4e0d\u53ef\u7528\u3002";

		var config = this.getConfig();
		
	
        if(!_fireLoadedEvent.apply(_thisObj, [dataObj,extdata])) return;

	
		var shownState = true;
        if(config.templateInfo)
        {
            try
            {
                config.templateInfo.process(dataObj);
            }
            catch(e)
            {
                shownState = false;
                _error("mapbox.Processor.StandardProcessor \u89e3\u6790\u6a21\u677f\u5931\u8d25: " + e.message );

            }
        }


	
        if(!_fireShownEvent.apply(_thisObj, [shownState,dataObj,extdata])) return;

	
		var map = this.getMap();
		if (!map) return;

	
		var center = null;
		var zoom = null;
		var amis = config.autoMarkerInfo;
		if(amis.length>0 && typeof map == "object" && map)
		{
			for(var i=0,len=amis.length; i<len; i++)
			{
			
			
				var ami = amis[i].markerInfo;
				
				if(typeof amis[i]=="object" && amis[i] && ami)
				{
					var obj = null;
					if(amis[i].miDataObjectName)
						eval ("obj = dataObj." + amis[i].miDataObjectName);
					else
						obj = dataObj;

					if(typeof obj=="object" && obj)
					{
						if(mapbox.Tools.isArray(obj))
						{
							for(var i2=0,len2=obj.length; i2<len2; i2++)
							{
								try
								{
									map.addMarker(ami.parse(obj[i2]),extdata);
								}
								catch(e){_error("standardprocessor._parseTemplate() addMarker error: " + e.message);}
							}
						}
						else
						{
							try
							{
								map.addMarker(ami.parse(obj),extdata);
							}
							catch(e) {_error("standardprocessor._parseTemplate() addMarker error: " + e.message);}
						}
					}
				}
				
			
				if(amis[i].map.center)
				{
					var c = amis[i].map.center.process(dataObj);
					if(c) center = c;
				}
				
			
				if(amis[i].map.zoom)
				{
					var z = amis[i].map.zoom.process(dataObj);
					if(z) zoom = z;
				}
			}
			
			
			
		}
		
	
		var alis = config.autoLineInfo;
		if(alis.length>0 && typeof map == "object" && map)
		{
			for(var i=0,len=alis.length; i<len; i++)
			{

			
				var ali = alis[i].lineInfo;

				if(typeof alis[i]=="object" && alis[i] && ali)
				{
					var obj = null;
					if(alis[i].liDataObjectName)
						eval ("obj = dataObj." + alis[i].liDataObjectName);
					else
						obj = dataObj;

					if(typeof obj=="object" && obj)
					{
						if(mapbox.Tools.isArray(obj))
						{
							for(var i2=0,len2=obj.length; i2<len2; i2++)
							{
								try
								{
									map.addLine(ali.parse(obj[i2]),extdata);
								}
								catch(e){_error("standardprocessor._parseTemplate() addline error: " + e.message);}
							}
						}
						else
						{
							try
							{
								map.addLine(ali.parse(obj),extdata);
							}
							catch(e) {_error("standardprocessor._parseTemplate() addline error: " + e.message);}
						}
					}
				}
				
			
				if(alis[i].map.center)
				{
					var c = alis[i].map.center.process(dataObj);
					if(c) center = c;
				}
				
				
			
				if(alis[i].map.zoom)
				{
					var z = alis[i].map.zoom.process(dataObj);
					if(z) zoom = z;
				}
			}
		}

		if(!map.checkMapCenter())
		{
			if(center && zoom)
				map.centerAndZoom(center,zoom);
			else
				map.centerAndZoom();

			map.setupMapControls();
		}
		else
		{
			if(center) map.setCenter(center);
			if(zoom) map.setZoom(zoom);
			else map.setAutoZoom();
		}
		
	};
	
	
	var _fireFailedEvent = function(extdata)
	{
       
		if(this.getConfig().onFailed) return this.getConfig().onFailed.fire(extdata);
    };

    
    var _fireLoadedEvent = function(dataObj,extdata)
    {
        

	    if(this.getConfig().onLoaded) return this.getConfig().onLoaded.fire(dataObj,extdata);
	    return true;
    };

    
    var _fireShownEvent = function(state,dataObj,extdata)
    {
        

	    if(this.getConfig().onShown) return this.getConfig().onShown.fire(state,dataObj,extdata);
	    return true;
    };
};

mapbox.UrlHash = Class.create();
mapbox.UrlHash.register("mapbox.UrlHash");

mapbox.UrlHash.construct = function($self,$class)
{

	var _keys = [];

	var _values = [];

	
	this.initialize = function(hashstr)
	{
		if(hashstr)
		{
			if(hashstr.charAt(0)=="#") hashstr = hashstr.substring(1);
			
			var kvs = hashstr.split("&"),kv = null;
			for(var i=0,len=kvs.length; i<len; i++)
			{
				kv = kvs[i].split("=");
				if(kv.length>=1 && kv[0])
				{ 
					this.add(kv[0],typeof kv[1] == "undefined" ? "" : kv[1]);
				}
			}
		}
	};
	
	
	this.add = function(key,value)
	{
		if(!key) throw "mapbox.UrlHash.add()\u53c2\u6570key\u4e0d\u80fd\u4e3a\u7a7a";
		
		for (var i=0, len=_keys.length; i<len; i++)
		{
			if (_keys[i]==key)
			{
				_values[i] = value;
				return;
			}
		}

		_keys.push(key);
		_values.push(value);
		
	};
	
	
	this.getValue = function(key)
	{
		if(_keys.length>0)
		{
			for (var i=0, len=_keys.length; i<len; i++)
				if(_keys[i]==key)
					return _values[i];
		}
		
		return null;
	};
	
	
	this.getHash = function()
	{
		var retValue = "";
		
		if(_keys.length>0)
		{
			for (var i=0, len=_keys.length; i<len; i++)
				retValue += _keys[i] + "=" + _values[i] + (i<len-1?"&":"");
		}

		return retValue;
	};
	
	
	this.getHashKeys = function()
	{
		if(_keys.length>0) 
			return _keys.sort().join("&");

		return "";
	};
	
	
	this.matchKeys = function(hashObj)
	{
		if(!hashObj) throw "mapbox.UrlHash.matchKeys()\u53c2\u6570hashObj\u65e0\u6548\u3002";
		
		return this.getHashKeys().toLowerCase()==hashObj.getHashKeys().toLowerCase();
		
		
	};
};

mapbox.HashProcessor = Class.create();
mapbox.HashProcessor.register("mapbox.HashProcessor");

mapbox.HashProcessor.construct = function($self,$class)
{
	var _urlHash = null;
	var _processor = null;
	

	this.initialize = function(urlHash,processor)
	{
		_urlHash = urlHash;
		_processor = processor;
	};
	
	this.setUrlHash = function(urlHash)
	{
		_urlHash = urlHash;
	};
	
	this.getUrlHash = function() 
	{
		return _urlHash;
	};

	this.setProcessor = function(processor)
	{
		_processor = processor;
	};
	
	this.getProcessor = function()
	{
		return _processor;
	};

};

mapbox.UrlHashListener = Class.create();
mapbox.UrlHashListener.register("mapbox.UrlHashListener");

mapbox.UrlHashListener.construct = function($self,$class)
{


	var _listenerConfig = null;


	var _timerId = null;


	var _hashProcessors = [];


	var _processors = {};
	

	var _currentHashStr = "";


	var _extData = null;


	var _historyFrameID = "_mapbox_history_frame";


	var _historyFrame = null;


	var _currentHistoryHashStr = "";



	var _whoChangedLocation = "";





	var _FIRST_PAGE_HISTORY_HASH = "firstPage=";
	
	
	this.initialize = function(listenerConfig)
	{
		if(typeof listenerConfig!="object") listenerConfig = {};
		listenerConfig.interval = listenerConfig.interval || 200;
		if(isNaN(listenerConfig.interval)) listenerConfig.interval = 200;
	
		_listenerConfig = listenerConfig;

	
		if(_isie_) _addHistory(_FIRST_PAGE_HISTORY_HASH);
	};

	
	var _initHistoryFrame = function()
	{
		var historyFrame = document.createElement("iframe");
		historyFrame.id = _historyFrameID;
		historyFrame.style.position = "absolute";
		historyFrame.style.top = "-1900px";
		historyFrame.style.left = "-1900px";
		historyFrame.style.width = "1px";
		historyFrame.style.height = "1px";
		historyFrame.frameBorder = "0";
		document.body.appendChild(historyFrame);
	};

	
	var _generateHistoryFramePage = function(hashstr)
	{
		if(!_historyFrame)
		{
			_historyFrame = window.frames[_historyFrameID];
			if(!_historyFrame) _initHistoryFrame();
			_historyFrame = window.frames[_historyFrameID];
		}

		if(_historyFrame)
		{
			_historyFrame = window.frames[_historyFrameID];
			_historyFrame.document.open("text/html");
			_historyFrame.document.write("<html><head><title>" + document.title + "</title></head><body onload=\"var uhl = window.parent.mapbox.Manager.urlHashListener;if(typeof uhl=='object' && uhl) uhl.goHistory('" + hashstr + "');\"></body></html>");
			_historyFrame.document.close();
		}
	};

	
	this.goHistory = function(hashstr)
	{
		if(hashstr==_currentHashStr) return;
		_currentHistoryHashStr = hashstr;
		if(hashstr == _FIRST_PAGE_HISTORY_HASH)
			window.location.hash = "";
		else
			window.location.hash = encodeURI(hashstr);
	};

	
	var _addHistory = function(hashstr)
	{
		if(!hashstr) return;
		_debug("add history : " + hashstr);
		_generateHistoryFramePage(hashstr);
	};

	
	var _historyIsChanged = function()
	{
		if(_historyFrame)
		{
			var historyHash = _historyFrame.location.href;
			historyHash = historyHash.indexOf("#")!=-1 ? historyHash.substring(historyHash.indexOf("#")+1) : "";
			if(historyHash!=_currentHashStr)
			{
				return historyHash;
			}
		}

		return null;

	};
	
	
	this.start = function()
	{
		
		this.checkHash();
		_timerId = window.setInterval(this.checkHash,_listenerConfig.interval);
	};
	
	
	this.stop = function()
	{
		if(this.timerId) window.clearInterval(this.timerId);
	};
	
	
	this.checkHash = function()
	{
		var newHashStr = decodeURI(window.location.hash);
		if(newHashStr.charAt(0)=="#") newHashStr = newHashStr.substring(1);
		if(_currentHashStr!=newHashStr || _whoChangedLocation)
		{
			_debug("_currentHashStr: " + _currentHashStr);
			_debug("newHashStr: " + newHashStr);
			_currentHashStr = newHashStr;

			
			if(_isie_ && _currentHashStr!=_currentHistoryHashStr) _addHistory(_currentHashStr);

			
			var processor = _matchHashProcessor(_currentHashStr);
			if(processor) _callProcessor(_matchHashProcessor(_currentHashStr));

			
			if(!_whoChangedLocation)
				_fireLocationChangedEvent(processor ? processor.getConfig().id : "", processor ? _currentHashStr : "");
			else
				_whoChangedLocation = "";

		}
	};
	
	
	this.getHash = function()
	{
		return new mapbox.UrlHash(_currentHashStr);
	};
	
	
	this.setHash = function(hashObj,isChangeLocation,extData)
	{
		if(!hashObj) throw new Error("mapbox.UrlHashListener.setHash()\u7684hashObj\u53c2\u6570\u65e0\u6548\u3002");

		if(typeof isChangeLocation == "undefined" || isChangeLocation==null )
			isChangeLocation = true;
		
		_debug("isChangeLocation: " + isChangeLocation);

		var newHashStr = hashObj.getHash();

		if(isChangeLocation)
		{
			if(typeof extData!="undefined") _extData = extData;
			_whoChangedLocation = "sethash";
			window.location.hash = encodeURI(newHashStr);
		}
		else
		{
			_callProcessor(_matchHashProcessor(newHashStr),newHashStr,extData);
		}
		
	};

	
	var _setCurrentHash = function(newHashStr)
	{
		_currentHashStr = newHashStr;
	};
	
	
	var _matchHashProcessor = function(hashstr)
	{
		if(_hashProcessors.length>0)
		{
			var currentHash = new mapbox.UrlHash(hashstr);
			for(var i=0,len=_hashProcessors.length; i<len; i++)
			{
				if(_hashProcessors[i].getUrlHash().matchKeys(currentHash))
				{
					return _hashProcessors[i].getProcessor();
				}
			}
		}
		
		return null;
	};
	
	
	var _callProcessor = function(processor,hashstr,extData)
	{
		hashstr = hashstr || _currentHashStr;
		if(processor && typeof processor.process == "function")
		{
		
			if(typeof extData!="undefined") 
				processor.process(new mapbox.UrlHash(hashstr), extData);
			else
				processor.process(new mapbox.UrlHash(hashstr), _extData);

			_extData = null;
		}
		else _error("mapbox.UrlHashListener._callProcessor():processor\u4e0d\u53ef\u7528.");
	};
	
	
	this.addHashProcessor = function(hp)
	{
		if(!hp)
			_error("mapbox.UrlHashListener.addHashProcessor() error: \u53c2\u6570hp\u65e0\u6548\u3002");
		else
		{
			_hashProcessors.push(hp);
			_processors[hp.getProcessor().getConfig().id] = hp.getProcessor();
		}
		
	};

	
	this.getHashProcessors = function()
	{
		return _hashProcessors;
	};

	
	this.getProcessor = function(id)
	{
		if(typeof _processors[id]!="undefined")
			return _processors[id];
		else
			return null;
	};

	
	var _fireLocationChangedEvent = function(procId,urlHashStr)
	{
		
		
		if(_listenerConfig.onLocationChanged) _listenerConfig.onLocationChanged.fire(procId, new mapbox.UrlHash(urlHashStr));
	};

};

mapbox.TemplateInfo = Class.create();
mapbox.TemplateInfo.register("mapbox.TemplateInfo");

mapbox.TemplateInfo.construct = function($self,$class)
{
   
    this.templateDOMId = "";

   
    this.templateDOMObject = null;

   
    this.templateObject = null;

   
    this.templateCache = false;

   
    this.resultSpaceDOMId = "";

   
    this.resultSpaceDOMObject = "";

   
    var _Initialized = false;

    
    this.initialize = function(templid,cache,resultid)
    {

        this.templateDOMId = templid || "";
        if(typeof cache!="undefined" && cache!=null) this.templateCache = cache;
        this.resultSpaceDOMId = resultid || "";

    };

    
    var _init = function()
    {

        if(this.resultSpaceDOMId && this.resultSpaceDOMId.indexOf("${")==-1)
        {
            this.resultSpaceDOMObject = document.getElementById(this.resultSpaceDOMId);
        }

        if(this.templateDOMId)
			this.templateDOMObject = document.getElementById(this.templateDOMId);

		if( this.templateDOMObject && this.resultSpaceDOMId &&
		    (this.resultSpaceDOMId.indexOf("${")==-1 && this.resultSpaceDOMObject) &&
		    this.templateCache )
		{
			this.templateObject = TrimPath.parseTemplate(_getTemplateContent.apply(this));
		}
	    
    };


    
    this.process = function(dataObj)
    {
        var retValue = "";

        if(!_Initialized) _init.apply(this);

        if(this.templateObject)
            retValue = this.templateObject.process(dataObj);
        else
        {
	        var templObj = TrimPath.parseTemplate(_getTemplateContent.apply(this));
	        retValue = templObj.process(dataObj);
	    }

        if(retValue)
        {
	       
	       
	        retValue = retValue.replace(new RegExp("&lt;","g"), "<").replace(new RegExp("&gt;","g"), ">");
	        
	        if(this.resultSpaceDOMId.indexOf("${")!=-1)
	        {
		        this.resultSpaceDOMObject = document.getElementById(this.resultSpaceDOMId.process(dataObj));
	        }

	        if(this.resultSpaceDOMObject)
	        {
		       
			
				if(_isie_ && this.resultSpaceDOMObject.tagName=="SELECT")
				{
					var opts = retValue.split("</option>");
					if(opts.length>0)
					{
					
					
						var reg = new RegExp("<option value=[\"']?([^\"']*)[\"']?>(.*)","i");
						for(var i=0; i<opts.length; i++)
						{
							var result = reg.exec(opts[i]);
							if(result && result.length>=3)
							{
								this.resultSpaceDOMObject.options[i] = new Option("",result[1]);
							
								this.resultSpaceDOMObject.options[i].innerHTML = result[2];
							}
						}
					}
				}
				else
				{
					this.resultSpaceDOMObject.innerHTML = retValue;
				}
	        }
            
        }

        return retValue;
    };

	var _getTemplateContent = function()
	{
		var templContent = this.templateDOMObject.innerHTML;
	
	
		templContent = templContent.replace(new RegExp("&lt;","g"), "<").replace(new RegExp("&gt;","g"), ">");
		return this.templateDOMObject ? _getPagerMacro() + templContent : "";
	};

	var _getPagerMacro = function()
	{
		return "{macro pager(totalCount,pageSize,currentPage,cbkname,showList,limitPage)}" +
		       "{var _totalPage = Math.ceil(totalCount/pageSize);" +
		       "if (typeof limitPage==\"undefined\" || limitPage==null || limitPage==0) limitPage = _totalPage;" +
		       "if (_totalPage>limitPage) _totalPage=limitPage;" +
		       "if (typeof showList!=\"boolean\") showList = true;" +
		       "if (typeof cbkname!=\"string\") cbkname = \"\";" +
		       "}" +
		       "{if _totalPage>0}" +
		       "    {if currentPage!=1}" +
		       "        <a href=\"javascript:void(0);\" onclick=\"${cbkname}(1,${pageSize},${totalCount},${_totalPage});return false;\">\u9996\u9875</a>&nbsp;" +
		       "        <a href=\"javascript:void(0);\" onclick=\"${cbkname}(${currentPage-1},${pageSize},${totalCount},${_totalPage});return false;\">\u4e0a\u9875</a>&nbsp;" +
		       "    {/if}" +
		       "    {if showList}" +
		       "        {var iterator = [1,2,3,4,5,6,7,8,9,10];}" +
		       "        {for item in iterator}" +
		       "            {if item<=_totalPage}" +
		       "                {if item!=currentPage}" +
		       "                    <a href=\"javascript:void(0);\" onclick=\"${cbkname}(${item},${pageSize},${totalCount},${_totalPage});return false;\">[${item}]</a>" +
		       "                {else}" +
		       "                    [${item}]&nbsp;" +
		       "                {/if}" +
		       "            {/if}" +
		       "        {/for}" +
		       "    {/if}" +
		       "    {if currentPage!=_totalPage}" +
		       "        <a href=\"javascript:void(0);\" onclick=\"${cbkname}(${currentPage*1+1},${pageSize},${totalCount},${_totalPage});return false;\">\u4e0b\u9875</a>" +
		       "        <a href=\"javascript:void(0);\" onclick=\"${cbkname}(${_totalPage},${pageSize},${totalCount},${_totalPage});return false;\">\u672b\u9875</a>" +
		       "    {/if}" +
		       "{/if}" +
		       "{/macro}";
	};


};

mapbox.Map = Class.create();
mapbox.Map.register("mapbox.Map");

mapbox.Map.construct = function($self,$class)
{
	var _thisObj = this;
	

	var _maplet = null;


	var _initialized = false;



	var _generalConfig = null;
	

	var _mapConfig = null;
	

	var _markers = [];
	

	var _lines = [];

   
   

   
   




    
	this.initialize = function(generalConfig,mapConfig)
	{
		_generalConfig = generalConfig;
		_mapConfig = mapConfig;
		_initMaplet.apply(this);
	};
	
	
	var _initMaplet = function()
	{
		
		if(this.checkMaplet()) return true;

		_initialized = true;

		if(!document.getElementById(_mapConfig.id)) return false;
		
		try
		{
			_maplet = new Maplet(_mapConfig.id);
		}
		catch(e)
		{
			_error("maplet(id:" + _mapConfig.id + ")\u521d\u59cb\u5316\u5931\u8d25: " + e.message);
			return false;
		}
		
		return true;
	};

	
	this.centerAndZoom = function(center,zoom)
	{

		if(!this.checkMaplet()) return;

	
		if(typeof center=="undefined" || !center) center = _mapConfig.center;
		if(typeof zoom=="undefined" || !zoom) zoom = _mapConfig.zoom;
		if(!center) center = _mapConfig.center = "HESDWAZVVFWHD";
		if(!zoom) zoom = _mapConfig.zoom = "0";

		_maplet.centerAndZoom(new MPoint(center), zoom);
	};

	
	this.setupMapControls = function()
	{
		if(!this.checkMaplet()) return false;
		
		try
		{

		
			_maplet.addControl(new MStandardControl());
		
			if(!_mapConfig.showLogo) _maplet.showLogo(false);
		
			if(_generalConfig.overview==3) _maplet.showOverview(false);
		
			if(_mapConfig.showCityHot) addCityHot();

			return true;
		}
		catch(e)
		{
			_error("maplet(id:" + _mapConfig.id + ")\u5b89\u88c5\u63a7\u4ef6\u5931\u8d25: " + e.message);
			return false;
		}
	};
	
	
	var addCityHot = function()
	{
		_maplet.addHotspot(_mapConfig.id,"HSHWUDXBAHARIG","\u54c8\u5c14\u6ee8\u5e02",1,5);
		_maplet.addHotspot(_mapConfig.id,"HTJTRBXWTBGET","\u6c88\u9633\u5e02",1,5);
		_maplet.addHotspot(_mapConfig.id,"HTESJCVBACCRUU","\u957f\u6625\u5e02",1,5);
		_maplet.addHotspot(_mapConfig.id,"GTCIEDWVIRJSI","\u547c\u548c\u6d69\u7279\u5e02",1,5);
		_maplet.addHotspot(_mapConfig.id,"HETCUFWVVHUEE","\u5317\u4eac\u5e02",0,5);
		_maplet.addHotspot(_mapConfig.id,"HHCIWHXVVJDBG","\u5929\u6d25\u5e02",1,5);
		_maplet.addHotspot(_mapConfig.id,"IJSRVJXVIWCHC","\u4e0a\u6d77\u5e02",1,5);
		_maplet.addHotspot(_mapConfig.id,"IJITUVWUABJGJ","\u5e7f\u5dde\u5e02",1,5);
		_maplet.addHotspot(_mapConfig.id,"HFISFCXTWJRFB","\u91cd\u5e86\u5e02",1,5);
		_maplet.addHotspot(_mapConfig.id,"HRRRBTWVRIHDU","\u6d4e\u5357\u5e02",1,5);
		_maplet.addHotspot(_mapConfig.id,"HCAFICWVFITUB","\u592a\u539f\u5e02",1,5);
		_maplet.addHotspot(_mapConfig.id,"GHIEETXUTURWF","\u94f6\u5ddd\u5e02",1,5);
		_maplet.addHotspot(_mapConfig.id,"HESUBVWVITTHS","\u77f3\u5bb6\u5e84\u5e02",1,5);
		_maplet.addHotspot(_mapConfig.id,"GDIATWXUDCTBA","\u897f\u5b81\u5e02",1,5);
		_maplet.addHotspot(_mapConfig.id,"GHFHGUWUFFUUV","\u5170\u5dde\u5e02",1,5);
		_maplet.addHotspot(_mapConfig.id,"HBWSJFXURIERE","\u897f\u5b89\u5e02",1,5);
		_maplet.addHotspot(_mapConfig.id,"HIGSCCWVCHAHF","\u90d1\u5dde\u5e02",1,5);
		_maplet.addHotspot(_mapConfig.id,"IEGDCTWVGDBVS","\u5357\u4eac\u5e02",1,5);
		_maplet.addHotspot(_mapConfig.id,"ICGAACWVDIGSD","\u5408\u80a5\u5e02",1,5);
		_maplet.addHotspot(_mapConfig.id,"HWTARHXUUAIWI","\u6b66\u6c49\u5e02",1,5);
		_maplet.addHotspot(_mapConfig.id,"IJDAJAWVFJGCB","\u676d\u5dde\u5e02",1,5);
		_maplet.addHotspot(_mapConfig.id,"HABIJDVTUJEGA","\u6210\u90fd\u5e02",1,5);
		_maplet.addHotspot(_mapConfig.id,"IBGRTCVUHGRSF","\u957f\u6c99\u5e02",1,5);
		_maplet.addHotspot(_mapConfig.id,"IFCEUTVUTJJDU","\u5357\u660c\u5e02",1,5);
		_maplet.addHotspot(_mapConfig.id,"IVGDHIXUUTREW","\u798f\u5dde\u5e02",1,5);
		_maplet.addHotspot(_mapConfig.id,"HRFBHUVTSGBFI","\u8d35\u9633\u5e02",1,5);
		_maplet.addHotspot(_mapConfig.id,"HGIVRBXTCWBDG","\u6606\u660e\u5e02",1,5);
		_maplet.addHotspot(_mapConfig.id,"FUUVCJWSIEVAR","\u62c9\u8428\u5e02",1,5);
		_maplet.addHotspot(_mapConfig.id,"ICIFVTWTIBCAU","\u5357\u5b81\u5e02",1,5);
		_maplet.addHotspot(_mapConfig.id,"IJTRTWXTGUUSR","\u6d77\u53e3\u5e02",1,5);
		_maplet.addHotspot(_mapConfig.id,"ITDUCVZUADIUW","\u9999\u6e2f",1,5);
		_maplet.addHotspot(_mapConfig.id,"ISGWHFZTWBWWE","\u6fb3\u95e8",1,5);
		_maplet.addHotspot(_mapConfig.id,"JDDVURZUWREDH","\u53f0\u6e7e",1,5);

		MEvent.addListener(_maplet, 'hotspot', function(obj) {_fireHotCityEvent.apply(_thisObj,[obj]);});
	};

	
	var _fireHotCityEvent = function(obj)
	{
		var city = "";
		if(obj && obj.indexOf("=")!=-1)
			city = obj.substring(obj.indexOf("=")+1);

       
		var retValue = true;

		

		if(_generalConfig.onHotCity) retValue = _generalConfig.onHotCity.fire(_thisObj, city);

	
		if(_generalConfig.autoZoomToCity && city && retValue)
		{
			this.setCenter(city);
			this.setZoom(8);
		}
	};
	
	
	this.getMapInfo = function()
	{
		try
		{
			if(this.checkMaplet())
			{
				var ary = _maplet.getCurrentMap().split("&")[1].split("=")[1].split(",");
				var mapinfo = new mapbox.MapInfo();
				mapinfo.zoom = ary[0];
				mapinfo.center = ary[1];
				mapinfo.width = ary[2];
				mapinfo.height = ary[3];
				
				return mapinfo;
			}
		}
		catch(e) {throw "mapbox.Map.getMapInfo() error: " + e;}

		return null;
	};
	
	
	this.addMarker = function(mi,extdata)
	{

		if(!this.checkMaplet()) throw new Error("mapbox.Map.addMarker() error: \u5730\u56fe\u4e0d\u53ef\u7528\u3002");
		if(!mi) throw new Error("mapbox.Map.addMarker() error: mi\u53c2\u6570\u4e0d\u53ef\u7528\u3002");
		
	
		if(mi.strlatlon && mi.icon.url)
		{
			var delegate = function()
			{
				return function(img,state)
				{
					_iconLoaded.apply(_thisObj,[img,state,mi,extdata]);
				};
			};
			mapbox.Tools.getImage(mi.icon.url,delegate());

		}
	};
	
	var _iconLoaded = function(img,state,mi,extdata)
	{

		var idx = -1;
		if(state)
		{
		
			var icon = mi.icon;
			var mPoint = new MPoint(mi.strlatlon);
			if(icon.width==-1) icon.width = img.width;
			if(icon.height==-1) icon.height = img.height;
			var mIcon = new MIcon(icon.url,icon.width,icon.height,(icon.width*icon.left),(icon.height*icon.top));
			
			var mInfoWindow = null;
			if(mi.infoWindow)
				mInfoWindow = new MInfoWindow(mi.infoWindow.title, mi.infoWindow.content);
				
			var mLabel = null;
			if(icon.name) mLabel = new MLabel(icon.name);
			var marker = new MMarker(mPoint, mIcon, mInfoWindow, mLabel);
		
			_maplet.addOverlay(marker);

			//20090514 修改 lihl
			if(mInfoWindow) mInfoWindow.setZMBtnVisible(false);
		
			idx = _markers.push(marker)-1;

			//20090922 添加
			if(icon.url.indexOf("http://www.mapbar.com/images")==-1){
				MEvent.addListener(marker, "mouseover", function(markerv) {
						setKeywordListCss(1+idx);
					}
				);
			}
		}

		if(_generalConfig.onMarked) _generalConfig.onMarked.fire(idx!=-1?true:false, _thisObj, idx, extdata);
    };
	
	
	this.getMarker = function(index)
	{
		if(_markers.length==0 || index>=_markers.length) return null;
		return _markers[index];
	};
	
	
	this.getLine = function(index)
	{
		if(_lines.length==0 || index>=_lines.length) return null;
		return _lines[index];
	};
	
	
	this.addLine = function(mli,extdata)
	{
		var idx = -1;
		
		if(!this.checkMaplet()) throw new Error("mapbox.Map.addLine() error: \u5730\u56fe\u4e0d\u53ef\u7528\u3002");;
		if(typeof mli!="object" || !mli) throw new Error("mapbox.Map.addLine() error: mli\u53c2\u6570\u4e0d\u53ef\u7528\u3002");
		
		var lineBrush = new MBrush();
		lineBrush.color = mli.color;
		lineBrush.stroke = mli.stroke;
		lineBrush.style = mli.style;
		lineBrush.transparency = mli.transparency;
	    lineBrush.arrow= mli.arrow;
		
		var mInfoWindow = null;
		if(mli.infoWindow)
			mInfoWindow = new MInfoWindow(mli.infoWindow.title, mli.infoWindow.content);
		
		var mline = new MPolyline(mli.getPoints(), lineBrush, mInfoWindow);
		
	
		_maplet.addOverlay(mline);
		
	
		idx = _lines.push(mline) - 1;
		
	
        
		
		if(_generalConfig.onLine) _generalConfig.onLine(idx!=-1?true:false, _thisObj, idx, extdata);
    };
	
	
	this.clear = function()
	{
		if(this.checkMaplet())
		{
			_maplet.clearOverlays(true);
			if(_markers.length>0) _markers.length = 0;
		}
	};

	
	this.setCenter = function(center)
	{
		if(this.checkMaplet() && center)
		{
			_maplet.setCenter(new MPoint(center));
		}
	};
	
	
	
	this.setZoom = function(level)
	{
	
		if(this.checkMaplet() && level) _maplet.setZoomLevel(level);

	};

	
	this.setAutoZoom = function()
	{
		if(this.checkMaplet()) _maplet.setAutoZoom();
	};

	
	this.checkMapCenter = function()
	{
		if(this.checkMaplet())
		{
			if(this.getMapInfo().center!="NANRNANZNANRNAN")
				return true;
		}

		return false;
	};
	
	
	this.checkMaplet = function()
	{
		if(_initialized)
		{
			if(!_maplet)
			{
				_error("maplet(id:" + _mapConfig.id + ")\u4e0d\u53ef\u7528\u3002");
				return false;
			}
		}
		else
		{
			return false;
		}
		
		return true;
	};

    this.getGeneralConfig = function()
	{
		return _generalConfig;
	};

	this.setGeneralConfig = function(generalConfig)
	{
		_generalConfig = generalConfig;
	};

	this.getMapConfig = function()
	{
		return _mapConfig;
	};

	this.setConfig = function(mapConfig)
	{
		_mapConfig = mapConfig;
	};

	this.getMaplet = function()
	{
		return _maplet;
	};

};

mapbox.Manager = Class.create();
mapbox.Manager.register("mapbox.Manager");

mapbox.Manager.urlHashListener = null;
mapbox.Manager._globalConfig = null;
mapbox.Manager._maps = [];
mapbox.Manager._dataProvider = null;


mapbox.Manager.load = function(gcf)
{
	try
	{
	
		if(!gcf || gcf.constructor.toString().indexOf("mapbox.GlobalConfig")==-1)
		{
			throw new Error("\u65e0\u6548\u7684\u7ec4\u4ef6\u914d\u7f6e\u3002");
		}

		mapbox.Manager._globalConfig = gcf;

	
		if(gcf.allowDebug) _MAPBOX_DEBUG = true;
		
	
        if(gcf.Communication)
        {
            mapbox.Manager._dataProvider = new mapbox.DataProvider(gcf.Communication);
        }
        else
        {
	        throw new Error("\u6570\u636e\u901a\u4fe1\u914d\u7f6e\u65e0\u6548\u3002");
        }

       
		if(gcf.Map.general.allowAutoInit && typeof Maplet != "undefined")
		{

		
			var generalConfig = gcf.Map.general;
		
			if(!generalConfig.wheelZoom) mw = 0;
		
			if(generalConfig.overview==2) oo = false;
			
		
			if(gcf.Map.items.length>0)
			{
				var mapItems = gcf.Map.items;
				for(var i=0,len=mapItems.length; i<len; i++)
				{
					if(mapItems[i].id && document.getElementById(mapItems[i].id))
					{
                        mapbox.Manager._maps.push(
                            {
                                id:mapItems[i].id,
                                mapObject:new mapbox.Map(generalConfig,mapItems[i])
                            }
                        )
					}
				}
			}
		}
		
	
		var uhl = new mapbox.UrlHashListener(gcf.UrlHashListener);
		mapbox.Manager.urlHashListener = uhl;

	
		if(mapbox.Tools.isArray(gcf.Processors))
		{
			var procs = gcf.Processors;
			for(var i=0,len=procs.length; i<len; i++)
			{
				if(typeof procs[i].conditions == "undefined") procs[i].conditions = ""; 
				if(procs[i].conditions)
				{
					var urlhash = new mapbox.UrlHash(procs[i].conditions);
					if(!procs[i].processor) procs[i].processor = mapbox.StandardProcessor;
					uhl.addHashProcessor(
						new mapbox.HashProcessor(
							urlhash,
							new procs[i].processor(mapbox.Manager.getMap(procs[i].mapid),procs[i],mapbox.Manager._dataProvider)
						)
					);
				}
			}
		}

		_debug("allowAutoStartUrlListener: " + gcf.allowAutoStartUrlListener);
	
		if(gcf.allowAutoStartUrlListener)
			mapbox.Manager.urlHashListener.start();

	
		if(gcf.Map.general.allowAutoInit)
		{
			for(var i=0,len=mapbox.Manager._maps.length; i<len; i++)
			{
				var map = mapbox.Manager._maps[i].mapObject;
				if(!map.checkMapCenter())
				{
					map.centerAndZoom();
					map.setupMapControls();
				}
			}

		
			window.map = null;
			window.maplet = null;
			if(mapbox.Manager._maps.length>0)
			{
				if(typeof mapbox.Manager._maps[0]!="undefined")
					window.map = mapbox.Manager._maps[0].mapObject;
				if(window.map.checkMaplet())
					window.maplet = window.map.getMaplet();
			}

		}


	
		if(gcf.onInitialized) gcf.onInitialized.fire();

		
	}
	catch(e)
	{
		_error("\u7ec4\u4ef6\u7ba1\u7406\u5668\u542f\u52a8\u5931\u8d25\uff1a" + e.message + "\u7cfb\u7edf\u505c\u6b62\u8fd0\u884c\u3002");
	}
};


mapbox.Manager.getMap = function(mapid)
{
	var maps = mapbox.Manager._maps;
	if(maps.length>0)
	{
		for(var i=0,len=maps.length; i<len; i++)
		{
			if(maps[i].id==mapid) return maps[i].mapObject;
		}
	}
	return null;
};


mapbox.Manager.getMaplet = function(mapid)
{
	var map = mapbox.Manager.getMap(mapid);
	if(map) return map.getMaplet();
	return null;
};


mapbox.Manager.getGlobalConfig = function()
{
	return mapbox.Manager._globalConfig;
};


mapbox.Manager.getDataProvider = function()
{
	return mapbox.Manager._dataProvider;
};


var _gcf = new mapbox.GlobalConfig();
_gcf.onInitialized = new mapbox.EventHandler("onInitialized");
_gcf.allowAutoStartUrlListener = false;
_gcf.UrlHashListener.interval = 200;
_gcf.UrlHashListener.onLocationChanged = new mapbox.EventHandler("onLocationChanged");
_gcf.Communication = new mapbox.CommConfig(mapbox.CommConfig.MODE_SCRIPT);

var _gcf_g = _gcf.Map.general;
_gcf_g.overview = 1;
_gcf_g.wheelZoom = true;
_gcf_g.autoZoomToCity = false;

var _mcf = null;
var _gcf_m_s = _gcf.Map.items;

_mcf = new mapbox.MapConfig("mapbar");
_mcf.showLogo = true;
_mcf.showCityHot = true;
_mcf.zoom = 8;
_mcf.center = decodeURIComponent("%E5%8C%97%E4%BA%AC%E5%B8%82");
_gcf_m_s.push(_mcf);


var panel3_templs_0 = new mapbox.TemplateInfo("",true,"");
panel3_templs_0.templateDOMId = "templCityList1";
panel3_templs_0.templateCache = true;
panel3_templs_0.resultSpaceDOMId = "cityList1";

var panel3_templs_1 = new mapbox.TemplateInfo("",true,"");
panel3_templs_1.templateDOMId = "templLocalSearch1";
panel3_templs_1.templateCache = true;
panel3_templs_1.resultSpaceDOMId = "rsContainer";

var panel3_templs_2 = new mapbox.TemplateInfo("",true,"");
panel3_templs_2.templateDOMId = "templPoiList1";
panel3_templs_2.templateCache = true;
panel3_templs_2.resultSpaceDOMId = "rsContainer";

var panel3_templs_3 = new mapbox.TemplateInfo("",true,"");
panel3_templs_3.templateDOMId = "templBusTransfer1";
panel3_templs_3.templateCache = true;
panel3_templs_3.resultSpaceDOMId = "rsContainer";

var panel3_templs_4 = new mapbox.TemplateInfo("",true,"");
panel3_templs_4.templateDOMId = "templBusLineList1";
panel3_templs_4.templateCache = true;
panel3_templs_4.resultSpaceDOMId = "rsContainer";

var panel3_templs_5 = new mapbox.TemplateInfo("",true,"");
panel3_templs_5.templateDOMId = "templBusLineInfo1";
panel3_templs_5.templateCache = true;
panel3_templs_5.resultSpaceDOMId = "rsContainer";

var panel3_templs_6 = new mapbox.TemplateInfo("",true,"");
panel3_templs_6.templateDOMId = "templBusStation1";
panel3_templs_6.templateCache = true;
panel3_templs_6.resultSpaceDOMId = "rsContainer";

var panel3_templs_7 = new mapbox.TemplateInfo("",true,"");
panel3_templs_7.templateDOMId = "templNav1";
panel3_templs_7.templateCache = true;
panel3_templs_7.resultSpaceDOMId = "rsContainer";

var panel3_templs_8 = new mapbox.TemplateInfo("",true,"");
panel3_templs_8.templateDOMId = "templNearPoi1";
panel3_templs_8.templateCache = true;
panel3_templs_8.resultSpaceDOMId = "rsContainer";

var panel3_templs_9 = new mapbox.TemplateInfo("",true,"");
panel3_templs_9.templateDOMId = "tmplSearchPoiIw";
panel3_templs_9.templateCache = true;
panel3_templs_9.resultSpaceDOMId = "poiInfoWindow";

/*09.09.22*/
var panel3_templs_10 = new mapbox.TemplateInfo("",true,"");
panel3_templs_10.templateDOMId = "tmplNearPoiIw";
panel3_templs_10.templateCache = true;
panel3_templs_10.resultSpaceDOMId = "poiInfoWindow";


var panel4_mks_0 = new mapbox.MapMarkerInfo();
panel4_mks_0.strlatlon = "${strlatlon}";
panel4_mks_0.icon.name = decodeURIComponent("");
panel4_mks_0.icon.url = "images/g${num}.png";//"http://img.mapbar.com/web/icon/g${num}.png";
panel4_mks_0.icon.width = "-1";
panel4_mks_0.icon.height = "-1";
panel4_mks_0.icon.left = "0.5";
panel4_mks_0.icon.top = "1";
panel4_mks_0.infoWindow.title = decodeURIComponent("%24%7Bname%7D");
panel4_mks_0.infoWindow.content = decodeURIComponent("");
panel4_mks_0.infoWindow.templateInfo = panel3_templs_9;

var panel4_mks_1 = new mapbox.MapMarkerInfo();
panel4_mks_1.strlatlon = "${strlatlon}";
panel4_mks_1.icon.name = decodeURIComponent("");
panel4_mks_1.icon.url = "http://www.mapbar.com/images/nw/qidian.gif";
panel4_mks_1.icon.width = "-1";
panel4_mks_1.icon.height = "-1";
panel4_mks_1.icon.left = "0.5";
panel4_mks_1.icon.top = "1";
panel4_mks_1.infoWindow.title = decodeURIComponent("%24%7Bname%7D");
panel4_mks_1.infoWindow.content = decodeURIComponent("");
panel4_mks_1.infoWindow.templateInfo = null;

var panel4_mks_2 = new mapbox.MapMarkerInfo();
panel4_mks_2.strlatlon = "${point}";
panel4_mks_2.icon.name = decodeURIComponent("");
panel4_mks_2.icon.url = "http://www.mapbar.com/images/nw/zhuan.gif";
panel4_mks_2.icon.width = "-1";
panel4_mks_2.icon.height = "-1";
panel4_mks_2.icon.left = "0.5";
panel4_mks_2.icon.top = "1";
panel4_mks_2.infoWindow.title = decodeURIComponent("%24%7Bname%7D");
panel4_mks_2.infoWindow.content = decodeURIComponent("");
panel4_mks_2.infoWindow.templateInfo = null;

var panel4_mks_3 = new mapbox.MapMarkerInfo();
panel4_mks_3.strlatlon = "${strlatlon}";
panel4_mks_3.icon.name = decodeURIComponent("");
panel4_mks_3.icon.url = "http://www.mapbar.com/images/nw/zhongdian.gif";
panel4_mks_3.icon.width = "-1";
panel4_mks_3.icon.height = "-1";
panel4_mks_3.icon.left = "0.5";
panel4_mks_3.icon.top = "1";
panel4_mks_3.infoWindow.title = decodeURIComponent("%24%7Bname%7D");
panel4_mks_3.infoWindow.content = decodeURIComponent("");
panel4_mks_3.infoWindow.templateInfo = null;

var panel4_mks_4 = new mapbox.MapMarkerInfo();
panel4_mks_4.strlatlon = "${strlatlon}";
panel4_mks_4.icon.name = decodeURIComponent("");
panel4_mks_4.icon.url = "http://www.mapbar.com/images/icon/maplite/gif1/tb${num}.gif";
panel4_mks_4.icon.width = "-1";
panel4_mks_4.icon.height = "-1";
panel4_mks_4.icon.left = "0.5";
panel4_mks_4.icon.top = "1";
panel4_mks_4.infoWindow.title = decodeURIComponent("%24%7Bname%7D");
panel4_mks_4.infoWindow.content = decodeURIComponent("%24%7Baddress%7D");
panel4_mks_4.infoWindow.templateInfo = null;

var panel4_mks_5 = new mapbox.MapMarkerInfo();
panel4_mks_5.strlatlon = "${strlatlon}";
panel4_mks_5.icon.name = decodeURIComponent("");
panel4_mks_5.icon.url = "http://www.mapbar.com/images/nw/qidian.gif";
panel4_mks_5.icon.width = "-1";
panel4_mks_5.icon.height = "-1";
panel4_mks_5.icon.left = "0.5";
panel4_mks_5.icon.top = "1";
panel4_mks_5.infoWindow.title = decodeURIComponent("%24%7Bname%7D");
panel4_mks_5.infoWindow.content = decodeURIComponent("");
panel4_mks_5.infoWindow.templateInfo = null;

var panel4_mks_6 = new mapbox.MapMarkerInfo();
panel4_mks_6.strlatlon = "${strlatlon}";
panel4_mks_6.icon.name = decodeURIComponent("");
panel4_mks_6.icon.url = "http://www.mapbar.com/images/nw/zhongdian.gif";
panel4_mks_6.icon.width = "-1";
panel4_mks_6.icon.height = "-1";
panel4_mks_6.icon.left = "0.5";
panel4_mks_6.icon.top = "1";
panel4_mks_6.infoWindow.title = decodeURIComponent("%24%7Bname%7D");
panel4_mks_6.infoWindow.content = decodeURIComponent("");
panel4_mks_6.infoWindow.templateInfo = null;

var panel4_mks_7 = new mapbox.MapMarkerInfo();
panel4_mks_7.strlatlon = "${strlatlon}";
panel4_mks_7.icon.name = decodeURIComponent("%24%7BstrName%7D");
panel4_mks_7.icon.url = "http://www.mapbar.com/images/nw/icon-2.gif";
panel4_mks_7.icon.width = "-1";
panel4_mks_7.icon.height = "-1";
panel4_mks_7.icon.left = "0.5";
panel4_mks_7.icon.top = "1";
//20090514 添加 lihl
panel4_mks_7.infoWindow = null;
/*panel4_mks_7.infoWindow.title = decodeURIComponent("%24%7Bname%7D");
panel4_mks_7.infoWindow.content = decodeURIComponent("");
panel4_mks_7.infoWindow.templateInfo = null;//panel3_templs_9;*/

var panel4_mks_8 = new mapbox.MapMarkerInfo();
panel4_mks_8.strlatlon = "${strlatlon}";
panel4_mks_8.icon.name = decodeURIComponent("");
panel4_mks_8.icon.url = "http://www.mapbar.com/images/icon/maplite/gif1/tb${num}.gif";
panel4_mks_8.icon.width = "-1";
panel4_mks_8.icon.height = "-1";
panel4_mks_8.icon.left = "0.5";
panel4_mks_8.icon.top = "1";
panel4_mks_8.infoWindow.title = decodeURIComponent("%24%7Bname%7D");
panel4_mks_8.infoWindow.content = decodeURIComponent("");
panel4_mks_8.infoWindow.templateInfo = panel3_templs_10;


var panel5_lns_0 = new mapbox.MapLineInfo();
panel5_lns_0.strlatlons = "${routelatlons.join(',')}";
panel5_lns_0.style = "0";
panel5_lns_0.color = "green";
panel5_lns_0.stroke = "3";
panel5_lns_0.transparency = "60";
panel5_lns_0.arrow = "false";
panel5_lns_0.infoWindow = null;

var panel5_lns_1 = new mapbox.MapLineInfo();
panel5_lns_1.strlatlons = "${join(',')}";
panel5_lns_1.style = "0";
panel5_lns_1.color = "green";
panel5_lns_1.stroke = "3";
panel5_lns_1.transparency = "60";
panel5_lns_1.arrow = "false";
panel5_lns_1.infoWindow = null;

var panel5_lns_2 = new mapbox.MapLineInfo();
panel5_lns_2.strlatlons = "${linelatlon}";
panel5_lns_2.style = "0";
panel5_lns_2.color = "green";
panel5_lns_2.stroke = "3";
panel5_lns_2.transparency = "60";
panel5_lns_2.arrow = "false";
panel5_lns_2.infoWindow = null;

var panel5_lns_3 = new mapbox.MapLineInfo();
panel5_lns_3.strlatlons = "${routelatlon}";
panel5_lns_3.style = "0";
panel5_lns_3.color = "green";
panel5_lns_3.stroke = "3";
panel5_lns_3.transparency = "60";
panel5_lns_3.arrow = "false";
panel5_lns_3.infoWindow = null;



var panel6 = new mapbox.ProcessorConfig("cityList1");
panel6.dataSource = "cityData";
panel6.conditions = decodeURIComponent("city");
panel6.processor = mapbox.StandardProcessor;
panel6.mapid = "mapbar";
panel6.templateInfo = panel3_templs_0;
_gcf.Processors.push(panel6);

var panel7 = new mapbox.ProcessorConfig("LocalSearch1");
panel7.dataSource = "http://mapx.mapbar.com/json/getPoiByKeyword.jsp";
panel7.conditions = decodeURIComponent("keyword%26city%26width%26height%26type%26nlimit%26pn%26rn%26ac");
panel7.processor = mapbox.StandardProcessor;
panel7.scriptObjectName = "APRS";
panel7.mapid = "mapbar";
panel7.templateInfo = panel3_templs_1;

var panel7_ams_0 = new mapbox.MapAutoMarkerInfo();
panel7_ams_0.map.center = decodeURIComponent("%24%7Bmapinfo.center%7D");
panel7_ams_0.map.zoom = "${mapinfo.scale}";
panel7_ams_0.markerInfo = panel4_mks_0;
panel7_ams_0.miDataObjectName = "result";
panel7.autoMarkerInfo.push(panel7_ams_0);
_gcf.Processors.push(panel7);

var panel8 = new mapbox.ProcessorConfig("PoiList1");
panel8.dataSource = "http://mapx.mapbar.com/json/getPoiNameList.jsp";
panel8.conditions = decodeURIComponent("origCity%26origName%26destCity%26destName%26origLatLon%26destLatLon%26ac%26type");
panel8.processor = mapbox.StandardProcessor;
panel8.scriptObjectName = "station";
panel8.mapid = "mapbar";
panel8.templateInfo = panel3_templs_2;
_gcf.Processors.push(panel8);

var panel9 = new mapbox.ProcessorConfig("BusTransfer1");
panel9.dataSource = "http://mapx.mapbar.com/json/getBusByNid.jsp";
panel9.conditions = decodeURIComponent("origLatLon%26origName%26destLatLon%26destName%26width%26height%26city%26encode%26ac");
panel9.processor = mapbox.StandardProcessor;
panel9.scriptObjectName = "busResult";
panel9.mapid = "mapbar";
panel9.onShown = new mapbox.EventHandler("testShowBusResult");
panel9.templateInfo = panel3_templs_3;
_gcf.Processors.push(panel9);

var panel10 = new mapbox.ProcessorConfig("BusLine1");
panel10.dataSource = "http://mapx.mapbar.com/json/getRouteNamesByKeyword.jsp";
panel10.conditions = decodeURIComponent("keyword%26city%26buslinelist");
panel10.processor = mapbox.StandardProcessor;
panel10.scriptObjectName = "routeNamesByKey";
panel10.mapid = "mapbar";
panel10.templateInfo = panel3_templs_4;
_gcf.Processors.push(panel10);

var panel11 = new mapbox.ProcessorConfig("BusLineInfo1");
panel11.dataSource = "http://mapx.mapbar.com/json/getRouteByRouteName.jsp";
panel11.conditions = decodeURIComponent("keyword%26city%26width%26height%26buslineinfo");
panel11.processor = mapbox.StandardProcessor;
panel11.scriptObjectName = "routeByName";
panel11.mapid = "mapbar";
panel11.onShown = new mapbox.EventHandler("testShowBusLineResult");
panel11.templateInfo = null;
_gcf.Processors.push(panel11);

var panel12 = new mapbox.ProcessorConfig("BusStation1");
panel12.dataSource = "http://mapx.mapbar.com/json/getPoiByKeyword.jsp";
panel12.conditions = decodeURIComponent("keyword%26city%26type%26pn%26rn");
panel12.processor = mapbox.StandardProcessor;
panel12.scriptObjectName = "APRS";
panel12.mapid = "mapbar";
panel12.templateInfo = panel3_templs_6;

var panel12_ams_4 = new mapbox.MapAutoMarkerInfo();
panel12_ams_4.map.center = decodeURIComponent("%24%7Bmapinfo.center%7D");
panel12_ams_4.map.zoom = "${mapinfo.scale}";
panel12_ams_4.markerInfo = panel4_mks_4;
panel12_ams_4.miDataObjectName = "result";
panel12.autoMarkerInfo.push(panel12_ams_4);
_gcf.Processors.push(panel12);

var panel13 = new mapbox.ProcessorConfig("Nav1");
panel13.dataSource = "http://mapx.mapbar.com/json/getDriveByNid.jsp";
panel13.conditions = decodeURIComponent("style%26origCity%26orig%26origName%26origLatLon%26destCity%26dest%26destName%26destLatLon%26mid%26width%26height%26encode%26ac");
panel13.processor = mapbox.StandardProcessor;
panel13.scriptObjectName = "drive";
panel13.mapid = "mapbar";
panel13.onShown = new mapbox.EventHandler("testShowDriveResult");
panel13.templateInfo = panel3_templs_7;
_gcf.Processors.push(panel13);

var panel14 = new mapbox.ProcessorConfig("NearPoi1");
panel14.dataSource = "http://mapx.mapbar.com/json/getNearPoi.jsp";
panel14.conditions = decodeURIComponent("nlimit%26strlatlon%26name%26pid%26city%26poitype%26keytype%26range%26width%26height%26pn");
panel14.processor = mapbox.StandardProcessor;
panel14.scriptObjectName = "APRS";
panel14.mapid = "mapbar";
panel14.templateInfo = panel3_templs_8;

var panel14_ams_7 = new mapbox.MapAutoMarkerInfo();
panel14_ams_7.map.center = decodeURIComponent("%24%7Bmapinfo.center%7D");
panel14_ams_7.map.zoom = "${mapinfo.scale}";
panel14_ams_7.markerInfo = panel4_mks_7;
panel14_ams_7.miDataObjectName = "strCenterObj";
panel14.autoMarkerInfo.push(panel14_ams_7);

var panel14_ams_8 = new mapbox.MapAutoMarkerInfo();
panel14_ams_8.markerInfo = panel4_mks_8;
panel14_ams_8.miDataObjectName = "result";
panel14.autoMarkerInfo.push(panel14_ams_8);
_gcf.Processors.push(panel14);


if (_isie_) {
	window.attachEvent('onload', function(){mapbox.Manager.load(_gcf);});
} else {
	window.addEventListener('load', function(){mapbox.Manager.load(_gcf);}, false);
}
