# Source: map-object.js

    /**
     * @namespace WPGMZA
     * @module MapObject
     * @requires WPGMZA.EventDispatcher
     */
    (function($) {

    	WPGMZA.MapObject = function(row)
    	{
    		var self = this;

    		WPGMZA.assertInstanceOf(this, "MapObject");

    		WPGMZA.EventDispatcher.call(this);

    		this.id = -1;
    		this.guid = WPGMZA.guid();
    		this.modified = true;
    		this.settings = {};

    		if(row)
    		{
    			for(var name in row)
    			{
    				if(name == "settings")
    				{
    					if(row["settings"] == null)
    						this["settings"] = {};
    					else switch(typeof row["settings"]) {
    						case "string":
    							this["settings"] = JSON.parse(row[name]);
    							break;
    						case "object":
    							this["settings"] = row[name];
    							break;
    						default:
    							throw new Error("Don't know how to interpret settings")
    							break;
    					}

    					for(var name in this.settings)
    					{
    						var value = this.settings[name];
    						if(String(value).match(/^-?\d+$/))
    							this.settings[name] = parseInt(value);
    					}
    				}
    				else
    					this[name] = row[name];
    			}
    		}
    	}

    	WPGMZA.MapObject.prototype = Object.create(WPGMZA.EventDispatcher.prototype);
    	WPGMZA.MapObject.prototype.constructor = WPGMZA.MapObject;

    	WPGMZA.MapObject.prototype.parseGeometry = function(string)
    	{
    		var stripped, pairs, coords, results = [];
    		stripped = string.replace(/[^ ,\d\.\-+e]/g, "");
    		pairs = stripped.split(",");

    		for(var i = 0; i < pairs.length; i++)
    		{
    			coords = pairs[i].split(" ");
    			results.push({
    				lat: parseFloat(coords[1]),
    				lng: parseFloat(coords[0])
    			});
    		}

    		return results;
    	}

    	WPGMZA.MapObject.prototype.toJSON = function()
    	{
    		return {
    			id: this.id,
    			guid: this.guid,
    			settings: this.settings
    		};
    	}

    })(jQuery);