/**
 * @param format(png): (png, jpeg, gif) - format="png"
 * @param maptype(roadmap): (roadmap, mobile, satellite, terrain, hybrid) - maptype="roadmap"
 * @param center(null): () - center="lat,long"
 * @param zoom(12): (0-19) - zoom="12"
 * @param size(100x100): () = size="100x100"
 * @param version(1) : (1-2) = map version (2 allows for use of labels on points)
 * @param markers():  () = markers="lat,long,blue|lat2,long2,green"
 * @param markets(): if using v2 format is "lat,long,labelColor,labelName|lat2,long2,labelColor2,labelName2|
 * 		@param color(red): (black,brown,green,purple,yellow,blue,gray,orange,red,white)
 * 		@param label(): v2 only, [A-X0-9] 1 char only
 */
var staticMap = Class.create({
	initialize: function(element,options) {
		this.options = Object.extend({
			lazy: false,
			format: 'png',
			maptype: 'roadmap',
			center: null,
			zoom: '15',
			size: '100x100',
			markers: null,
			path: null,
			version: 1,
			url: 'http://media.turpinrealtors.com/googlestatic.php'
		}, options || {});
		this.img = $(element);
		if(this.img != undefined && this.options.lazy != true) {
			this.run();
		}
	},
	run: function() {
		var _markers = ''; //for v2 of static map api
		var params = {};
		if(this.options.version !== undefined && this.options.version == 2){
			params.version = 2;
			params.sensor = false;
		}
		if(this.options.format !== undefined && this.options.format !== null){
			params.format = this.options.format;
		}
		if(this.options.maptype !== undefined && this.options.maptype !== null){
			params.maptype = this.options.maptype;
		}
		if(this.options.center !== undefined && this.options.center !== null){
			params.center = this.options.center;
		}
		if(this.options.zoom !== undefined && this.options.zoom !== null){
			params.zoom = this.options.zoom;
		}
		if(this.options.size !== undefined && this.options.size !== null){
			params.size = this.options.size;
		}
		if(this.options.version !== undefined && this.options.version == 2){
			var _oldMarkerList = this.options.markers.split('|');
			for(var i=0; i < _oldMarkerList.length; i++){
				var _ma = _oldMarkerList[i].split(',');
				var _clean = '&markers=';
				if(_ma[2] !== undefined && _ma[2] !== ''){
					_clean += 'color:' + _ma[2] + '|';
				}
				if(_ma[3] !== undefined && _ma[3] !== ''){
					_clean += 'label:' + _ma[3].capitalize().truncate(1) + '|'; //labels have to be upper case and only 1 character long.
				}
				if(_ma[0] !== undefined){
					_clean += _ma[0];
				}
				if(_ma[1] !== undefined){
					_clean += ',' + _ma[1];
				}
				if(_clean !== '&markers='){
					_markers += _clean;
				}
			}
		} else {
			if(this.options.markers !== undefined && this.options.markers !== null){
				params.markers = this.options.markers;
			}
		}
		if(this.options.path !== undefined && this.options.path !== null){
			params.path = this.options.path.split('|')[0] + '|' + this.getPathFromWKT( this.options.path.split('|')[1] );
		}
		this.img.src = this.options.url + '?' + $H(params).toQueryString() + _markers;
	},
	getPathFromWKT: function(wkt) {
		var path = '';
		var points = this.RWKT(wkt);
		points.each( function(point) {
			path += point.Latitude + ',' + point.Longitude + '|';
		} );
		return path;
	},
	RWKT: function(wkt){
		var getPattern = '^(POINT|POLYGON)[\(]+([^\)]+)[\)]+$'; //Get Points Pattern
		var reg = new RegExp(getPattern, 'g');
		reg.compile(getPattern, 'g');
		var matches = reg.exec(wkt);
		try{
			if(matches[2]){
				var points = matches[2].split(',');
				var shape = new Array();
				for(var i = 0; i<points.length; i++){
					var temp = points[i].split(' ');
					shape.push({
						Latitude: temp[1],
						Longitude: temp[0]
					});
				}
				return shape;
			} else {
				return false;
			}
		} catch(e){
			return false;
		}
	}	
});
