// Data plug-in

(function(){
	var dataSet = new mo.gov.DataSet();
	dataSet.dataSetID = "dorLicenseOffices";
	dataSet.name = "Motor Vehicles and Driver Licensing Offices";
	
	var hostname = window.location.hostname;

	var wfsFilter = '&FILTER=<Filter><Or><PropertyIsEqualTo><PropertyName>type</PropertyName><Literal>2MV</Literal></PropertyIsEqualTo><PropertyIsEqualTo><PropertyName>type</PropertyName><Literal>1MV</Literal></PropertyIsEqualTo></Or></Filter>';
	var wfsProperties = '';
	
	if (hostname != "dor.mo.gov.distlr") {
		dataSet.dataURL = "http://" + hostname + "/offloc/" + dataSet.dataSetID + ".json";
	} else {
		dataSet.dataURL = "http://" + hostname + "/geoserver/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=dor.mo.gov:dorlicenseoffices" + wfsFilter + wfsProperties + "&SRSNAME=EPSG:4326&outputFormat=json";
	}
	
	
	
	
	// Create a map layer object based on this dataset. First create a map layer config object used to configure your layer object.
	var mapLayerConfig = new mo.gov.MapLayerConfig();
	mapLayerConfig.layerID = dataSet.dataSetID;
	mapLayerConfig.mapServiceType = 'WFS';
	
	mapLayerConfig.infoWindowOptions = {};
	mapLayerConfig.infoWindowOptions.width = 350;
	mapLayerConfig.infoWindowOptions.height = 225;
	mapLayerConfig.infoWindowOptions.maxWidth = 100;
	
	mapLayerConfig.markerOptions = {};
	mapLayerConfig.markerOptions.titleProperty = 'name';
	mapLayerConfig.markerOptions.icon = "http://chart.apis.google.com/chart?chst=d_map_pin_letter_withshadow&chld=|7DFE00|0000FF";
	mapLayerConfig.markerOptions.color = '7DFE00';
	
	mapLayerConfig.buildInfoWindow = function(marker) {
		html = '<div class="infoWindowContent" style = "width:' + this.infoWindowOptions.width + 'px; height:' + this.infoWindowOptions.height + 'px;">';

		html += '<p>' + marker.data.properties.name + '</p>';

		if (marker.data.properties.agent && marker.data.properties.agent.length > 0) {
			html += '<p><div>' + marker.data.properties.agent + '</div>';
		}
		html += '<div>' + marker.data.properties.street;
		if (marker.data.properties.address2 != undefined && marker.data.properties.address2.length > 0) {
			html += " " + marker.data.properties.address2;
		}
		html += '</div>';
		html += '<div>' + marker.data.properties.city + ', ' + marker.data.properties.state + ' ' + marker.data.properties.zip + '</div></p>';

		if (marker.data.properties.office_manager && marker.data.properties.office_manager.length > 0) {
			html += '<p><div><span class="label">Office Manager:</span> ' + marker.data.properties.office_manager + '</div>';
		} else {
			html += '<p><div><span class="label">Office Manager:</span> Not available</div>';
		}
		html += '<div><span class="label">Phone:</span>  (' + marker.data.properties.ph_area_cd + ') ' + marker.data.properties.ph_prefix + '-' + marker.data.properties.ph_no + '</div>';

		if (marker.data.properties.fax_area_cd && marker.data.properties.fax_area_cd && marker.data.properties.fax_no) {
			html += '<div><span class="label">Fax:</span>  (' + marker.data.properties.fax_area_cd + ') ' + marker.data.properties.fax_prefix + '-' + marker.data.properties.fax_no + '</div></p>';
		}

		html += '<p><div><span class="label">Days Open:</span></div>';
		if (marker.data.properties.days_op1) {
			html += '<div>' + marker.data.properties.days_op1 + '  ' + marker.data.properties.op_beg_hrs1 + ':' + marker.data.properties.op_beg_min1 + ' to ' + marker.data.properties.op_end_hrs1 + ':' + marker.data.properties.op_end_min1 + '</div>';
		}

		if (marker.data.properties.days_op2) {
			html += '<div>' + marker.data.properties.days_op2 + '  ' + marker.data.properties.op_beg_hrs2 + ':' + marker.data.properties.op_beg_min2 + ' to ' + marker.data.properties.op_end_hrs2 + ':' + marker.data.properties.op_end_min2 + '</div>';
		}

		if (marker.data.properties.days_op3) {
			html += '<div>' + marker.data.properties.days_op3 + '  ' + marker.data.properties.op_beg_hrs3 + ':' + marker.data.properties.op_beg_min3 + ' to ' + marker.data.properties.op_end_hrs3 + ':' + marker.data.properties.op_end_min3 + '</div>';
		}

		if (marker.data.properties.days_op4) {
			html += '<div>' + marker.data.properties.days_op4 + '  ' + marker.data.properties.op_beg_hrs4 + ':' + marker.data.properties.op_beg_min4 + ' to ' + marker.data.properties.op_end_hrs4 + ':' + marker.data.properties.op_end_min4 + '</div>';
		}
		html += '</p>';
		
		if (marker.data.properties.days_clsd) {
			html += '<p><div><span class="label">Days Closed:</span></div>';
			html += '<div>' + marker.data.properties.days_clsd + ' ' +  marker.data.properties.clsd_beg_hrs + ':' + marker.data.properties.clsd_beg_min + ' to ' + marker.data.properties.clsd_end_hrs + ':' + marker.data.properties.clsd_end_min + '</div>';
		}

		html += '</p>';
		
		
		html += '<p><div><span class="label">Holidays:</span><br/> ';
		var holidayStr = marker.data.properties.clsd_holidays;
		if (holidayStr && holidayStr.length > 0) {
			var holidays = holidayStr.split(',');
			for ( var holiday in holidays) {
				html += holidays[holiday] + '<br/>';
			}
		}

		html += '</div></p>';
		html += '<p><div><span class="label">Additional Holidays:</span> <br/>';
		var additionalholidayStr = marker.data.properties.clsd_additional;
		if (additionalholidayStr && additionalholidayStr.length > 0) {
			var additionalholidays = additionalholidayStr.split(',');
			for ( var additionalholiday in additionalholidays) {
				html += additionalholidays[additionalholiday] + '<br/>';
			}
		}

		html += '</div></p>';

		if(marker.data.properties.remarks.length > 0) {
			html += '<p><div><span class="label">Additional Remarks:</span> ' + marker.data.properties.remarks + '</p>';
		}
		
		html += '<p><div>You may be able to renew your license plates online at <a href="http://plates.mo.gov" target="_blank">http://plates.mo.gov</a></div></p>'
		html += '</div>';


		return html;
		
	}
	
	mapLayerConfig.sidebarFn = function(layerID) {
		if (mo.gov.fbconsole) {
			mo.gov.fbconsole.log("executing sideBarFn for " + layerID);
		}
//		mo.gov.GeoDataMap.sideBarData[layerID] = this;		
//		mo.gov.GeoDataMap.displaySideBar();
		var sideBarArray = [];
		for(var arrayIndex in this) {
			var officeDisplayString = this[arrayIndex].data.properties.name + ' LICENSE OFFICE ';
			if(this[arrayIndex].data.properties.number != null) {
				officeDisplayString += ' (' + this[arrayIndex].data.properties.number + ')';
			}
			sideBarArray.push({marker: this[arrayIndex], displayString: officeDisplayString});
		}
		mo.gov.GeoDataMap.sideBarData[layerID] = sideBarArray;		
		mo.gov.GeoDataMap.displaySideBar();
	}
	
	var mapLayer = new mo.gov.MapLayer(mapLayerConfig);
	//Associate this map layer object with the dataset
	dataSet.mapLayer = mapLayer;
	dataSet.mapLayer.layerData = dataSet;
	
	
	/*
	 * Create grid layer
	 */
	
	var gridLayerConfig = new mo.gov.GridLayerConfig();
	
	gridLayerConfig.createRecordText = function(feature){
		var record = {};
		record.id = feature.id;
		var officeDisplayString = feature.properties.name;
		if(feature.properties.number != null) {
			officeDisplayString += ' (' + feature.properties.number + ')';
		}
		record.name = officeDisplayString;
		record.address = feature.properties.street;
		record.city = feature.properties.city;
		record.phone = '(' + feature.properties.ph_area_cd + ') ' + feature.properties.ph_prefix + '-' + feature.properties.ph_no;		
		return record
	};
	
	gridLayerConfig.createDetailsText = function(feature){
		var properties = feature.properties;
		var detailText = new mo.gov.StringBuffer();
		detailText.append('<div class="grid_4 alpha">');
		detailText.append('<h4>Agent:</h4><p>');
		
		if(properties.agent && properties.agent.length > 0) {
			detailText.append(properties.agent);
		}
		else {
			detailText.append('Information not available');
		}
		detailText.append('</p>');
		
		
		detailText.append('<h4>Office Manager:</h4><p>');
		if(properties.office_manager && properties.office_manager.length > 0) {
			detailText.append(properties.office_manager);
		}
		else {
			detailText.append('Information not available');
		}
		detailText.append('</p>');
		
		detailText.append('<h4>Address:</h4>' );
		detailText.append('<address>' +properties.street + '<br />');
		detailText.append(properties.city + ', ' +properties.state + ' ' + properties.zip + '<br/>');
		if (properties.fax_area_cd && properties.fax_area_cd && properties.fax_no) {
			detailText.append('Fax:  (' + properties.fax_area_cd + ') ' + properties.fax_prefix + '-' + properties.fax_no);
		}
		detailText.append('</address>');
		
		detailText.append('<h4>Office Hours:</h4>');
		detailText.append('<ul>');
		if (properties.days_op1) {
			detailText.append('<li>' + properties.days_op1 + '  ' + properties.op_beg_hrs1 + ':' + properties.op_beg_min1 + ' to ' + properties.op_end_hrs1 + ':' + properties.op_end_min1 + '</li>');
		}

		if (properties.days_op2) {
			detailText.append('<li>' + properties.days_op2 + '  ' + properties.op_beg_hrs2 + ':' + properties.op_beg_min2 + ' to ' + properties.op_end_hrs2 + ':' + properties.op_end_min2 + '</li>');
		}

		if (properties.days_op3) {
			detailText.append('<li>' + properties.days_op3 + '  ' + properties.op_beg_hrs3 + ':' + properties.op_beg_min3 + ' to ' + properties.op_end_hrs3 + ':' + properties.op_end_min3 + '</li>');
		}

		if (properties.days_op4) {
			detailText.append('<li>' + properties.days_op4 + '  ' + properties.op_beg_hrs4 + ':' + properties.op_beg_min4 + ' to ' + properties.op_end_hrs4 + ':' + properties.op_end_min4 + '</li>');
		}
		detailText.append('</ul>');
		
		if (properties.days_clsd) {
			detailText.append('<h4>Closed:</h4>');
			detailText.append('<ul>');
			detailText.append('<li>' + properties.days_clsd + '  ' +  properties.clsd_beg_hrs + ':' + properties.clsd_beg_min + ' to ' + properties.clsd_end_hrs + ':' + properties.clsd_end_min + '</li>');
			detailText.append('</ul>');
		}
		
		
		detailText.append('</div>');
		detailText.append('<div class="grid_4">');
		detailText.append('<h4>Closed on the following holidays:</h4>');
		detailText.append('<ul>');
		var holidayStr = properties.clsd_holidays;
		if (holidayStr && holidayStr.length > 0) {
			var holidays = holidayStr.split(',');
			for ( var holiday in holidays) {
				detailText.append('<li>' + holidays[holiday] + '</li>');
			}
		}
		else{
			detailText.append('<li>Information not available</li>');
		}
		detailText.append('</ul></div>');
		
		detailText.append('<div class="grid_4 omega">');
		detailText.append('<h4>Closed on the following days:</h4>');
		detailText.append('<ul>');
		var additionalholidayStr = properties.clsd_additional;
		if (additionalholidayStr && additionalholidayStr.length > 0) {
			var additionalholidays = additionalholidayStr.split(',');
			for ( var additionalholiday in additionalholidays) {
				detailText.append('<li>' + additionalholidays[additionalholiday] + '</li>');
			}
		}
		else{
			detailText.append('<li>Information not available</li>');
		}
		detailText.append('</ul>');
		
		if(properties.remarks.length > 0) {
			detailText.append('<p><div><h4>Additional Remarks:</h4> ' + properties.remarks + '</p>');
		}
		
		
		detailText.append('</div><div class="clear"></div>');
		
		

		return detailText.toString();
	}
	
	var gridLayer = new mo.gov.GridLayer(gridLayerConfig);
	dataSet.gridLayer = gridLayer;
	dataSet.gridLayer.gridLayerData = dataSet;
	
	// Register dataset object with repository
	dataSet.registerWithRepository();
	//var dorLicenseOfficeGrid = new mo.gov.GridConfig();
	
})();







