function czmark (lat, lon) {

}

function CZmarkersNS (max) {
CZmarkers = {
	create : function (max) {
		this.baseIcon = new GIcon();
		//this.baseIcon.image = "http://dichotomize.com/czmap/images/cross.png";
		this.baseIcon.shadow = $('shadowimage').src;
		this.baseIcon.iconSize = new GSize(20, 34);
		this.baseIcon.shadowSize = new GSize(37, 34);
		this.baseIcon.iconAnchor = new GPoint(9, 34);
		this.baseIcon.infoWindowAnchor = new GPoint(9, 2);
		this.baseIcon.infoShadowAnchor = new GPoint(18, 25);
		this.max = max || 20;
		
		this.markers_list = [];

		this.side_bar = document.getElementsByClassName('dyno_list');

		var one =	new GIcon(this.baseIcon);
		one.image = $('countrymode').src;
		var two =	new GIcon(this.baseIcon);
		two.image = $('statemode').src;
		var three =	new GIcon(this.baseIcon);
		three.image = $('countymode').src;
		var four =	new GIcon(this.baseIcon);
		four.image = $('citymode').src;
		var five =	new GIcon(this.baseIcon);
		five.image = $('recordmode').src;
		var hotel = new GIcon(this.baseIcon);
		hotel.image = $('hotelmode').src;
		this.images = new Array( one, two, three, four, five, hotel );

		this.create = function () { 
			alert("An instance of this object is already available.\n" +
			"Reinstantiation could cause problems so I'll just return the object instead.");
			return this;
			}
	},
	_choose_icon : function (mode) {
		var img = 0;
		mode = parseInt(mode);
		switch(mode)
		{
		case 10:
			img = this.images[0];
			break;
		case 20:
			img = this.images[1];
			break;
		case 30:
			img = this.images[2];
			break;
		case 40:
			img = this.images[3];
			break;
		case 50:
			img = this.images[5];
			break;
		case 60:
			img = this.images[4];
			break;
		default:
			img = this.images[0];
			break;
			
		}
		return img;

	},
	_addMarker : function (lat, lon, html, rec) {
		var point;
		var marker;
		var success = false;
		var side_item;
		var color_class = "";
		var new_row;
		if(this.markers_list.length < this.max)
		{
			point = new GLatLng(lat, lon );
			marker = new GMarker(
				point, { icon: this._choose_icon(rec.data.mode)});
			marker.html = html;
			marker.rec = rec;
			map.addOverlay(marker);
			//marker.images[0].title = rec.data.fname;
			marker.title = rec.data.fname;
			this.markers_list.push(marker);
			success = true;
		}
		return success;
	},
	editMarkers : function (list) {
		var rec;
		var x = 0;
		var i = 0;
		var j;
		var length = this.markers_list.length;
		var html;
		var mylat;
		var mylon;
		var lists_length = this.side_bar.length;
		var cur_list;
		var output;
		var cur_record_list;
		var cur_record_list_length;
		var cols_length;
		var used_markers = 0;
		for(i = 0; i < lists_length; i++)
		{
			
			cur_list = this.side_bar[i];
			output = '';
			if(list.lists[cur_list.id]) {
				cur_record_list = list.lists[cur_list.id];
				output += this._start_side_output_html(
					cur_record_list.headers, cur_record_list.meta);
				cur_record_list_length = cur_record_list.records.length;
				for(x = 0; x < cur_record_list_length; x++) {
					rec = cur_record_list.records[x];
					mylat = parseFloat(rec.data.flattitude);
					mylon = parseFloat(rec.data.flongitude);
					html = this._mk_info_html(rec);
					//html = this.mk_info_html(rec, 0);
					output += this._mk_side_row_html(rec, x);
					if(used_markers < length) {
						this._editMarker(used_markers, mylat, mylon, html, rec);
					}
					else {
						this._addMarker(mylat, mylon, html, rec);
					}
					used_markers++;
				}
				output += this._end_side_output_html();
				cur_list.innerHTML = output;
			}
			else {
				cur_list.innerHTML = "";
			}
		}
		this._hide_extra_markers(used_markers);
	},
	_start_side_output_html : function(headers, meta) {
		var output = '';
		var field_length = headers.length;
		var j = 0;
		output += '<h2>' + meta.list_name + '</h2>';
		output += '<table cellpadding="0" cellspacing="0">';
		output += '<tr>';
		for(j = 0; j < field_length; j++)
		{
			output += '<th>' + headers[j] + '</th>';
		}
		output += '</tr>';
		return output;
	},
	_end_side_output_html : function() {
		return "</table>";

	},
	_mk_side_row_html : function(record, num) {
		var field_length = record.fields.length;
		var output = "";
		var classname = num%2 ? "odd" : "even";
		output += '<tr class="' + classname + '">';
		var k = 0;
		for(k = 0; k < field_length; k++)
		{
			output
			+=
			'<td class="col' + parseInt(k+1) + (k == 0 ? ' clickable': '') + '">' + record.fields[k] + '</td>';
		}
		output += '</tr>';
		return output;
	},
	_mk_info_html : function(record) {
		var html = "";
		var tab_list = "";
		var inner_stuff = "";
		var first_item = true;
    for(var i = 0; i < record.tabs.length; i++)
    {
      tab_list += "<li id=\"tab_title_" + i + "\" \"class=\"tab_title" +
      (first_item ? " selected_tab_title" : "") +"\">" +
        record.tabs[i].title + "</li>";
      inner_stuff += "<div id=\"tab_content_" + i + "\" class=\"tab" +
      (first_item ? " selected_tab_content" : "") + "\">" +
        //"<button class=\"edit\" " +
        //"id=\"edit_fid_" + record.data.fid + "\" " +
        //"type=\"button\">" + "Edit" + "</button>" +
        record.tabs[i].content + "</div>";
      first_item = false;
    }
		html = "<div id=\"marker_info\" class=\"info_bubble\"" 
    //+ "<ul id=\"tabs\">" + tab_list + "</ul>" 
      + inner_stuff 
    + "</div>";
		return html;

		
	},
	/*
	mk_info_html : function(record, p) {
		var html = "";
		var tab_list = "";
		var inner_stuff = "";
		var cur_tab;
    for(var i = 0; i < record.tabs.length; i++)
    {
			cur_tab = record.tabs[i];
			html += '<div page="'+i+'" label="'  + cur_tab.title + 
							((p == i ) ? '" class="active">' : '') + cur_tab.content +'</div>';
			
    }
		return html;
	},
	*/
	_editMarker : function(cur, mylat, mylon, html, rec) {
		this.markers_list[cur].setLatLng(new GLatLng(mylat, mylon));
		//this.markers_list[cur].point.x = mylon;
		//this.markers_list[cur].point.y = mylat;
		this.markers_list[cur].html = html;
		this.markers_list[cur].rec = rec;
		var img_src = this._choose_icon(rec.data.mode).image;
		//If IE do this
		if (document.all) {
                        try {
			//this.markers_list[cur].Oc.uf.style.filter =
			//"progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + 
			//img_src + "', sizingMethod='crop');";
			this.markers_list[cur].setImage(img_src);
                        } catch(e) {}
			/*
			this.markers_list[cur].images[0].style.filter =
			"progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + 
			img_src + "', sizingMethod='crop');";
			*/
		}
		// otherwise
		else {
			//this.markers_list[cur].images[0].src = img_src
			//this.markers_list[cur].Oc.uf.src = img_src
			try {
				//this.markers_list[cur].Oc.uf.src = img_src
				this.markers_list[cur].setImage(img_src);
			} catch(e) {}
			//this.markers_list[cur].image = img_src
		} 
		//this.markers_list[cur].images[0].title = rec.data.fname;
		this.markers_list[cur].title = rec.data.fname;
		//this.markers_list[cur].setZIndex(Math.round(mylat*-100000));
		this.markers_list[cur].show();
		this.markers_list[cur].redraw(true);
		//this.markers_list[cur].display(true);

	},
	_hide_extra_markers : function (used_markers) {
		var length = this.getListLength();
		for( ; used_markers < length; used_markers++)
		{
			this.markers_list[used_markers].hide();
		}
	},
	openInfoWindow : function (index, type) {
//		this.markers_list[index].openInfoWindowHtml(this.markers_list[index].html);
		var count = 0;
		var table;
		
		for(var i = 0; i < this.side_bar.length; i++)
		{
			if(this.side_bar[i].id == type) {
				count += index;
				break;
			}
			else {
				count += this.side_bar[i].getElementsByTagName('TR').length - 1;
			}
		}
		handle_map_click(this.markers_list[count]);

	},
	getListLength : function () {
		return this.markers_list.length;
	},
	formatHCard : function(rec) {
			return('<div class="vcard">' +
			'<div class="fn">' + rec.fname + '</div>' +
			'<div class="adr">' +
			'<div class="street-address">' + rec.addressline1 + '</div>' +
			'<div class="locality">' + rec.addresscity + '</div>' +
			'<div class="region">' + rec.addressstate + '</div>' +
			'<div class="postal-code">' + rec.addresspostalcode + '</div>' +
			'</div></div>');


	}

};

}

CZmarkersNS(100);




