var outputYLS = null;

function onLoadYLS() {
	var businessName = document.getElementById('businessName');
	var businessPlace = document.getElementById('businessPlace');
	var businessSelector = document.getElementById('businessSelector');
	
	if (businessName)
		businessName.yls = new MDVYahooLocalSearch(businessName, businessPlace, businessSelector);

	var businessNameDM = document.getElementById('businessNameDM');
	var businessPlaceDM = document.getElementById('businessPlaceDM');
	var businessSelectorDM = document.getElementById('businessSelectorDM');
	
	if (businessNameDM)
		businessNameDM.yls = new MDVYahooLocalSearch(businessNameDM, businessPlaceDM, businessSelectorDM);
	
	// one for output
	outputYLS = new MDVYahooLocalSearch();
}

function MDVYahooLocalSearch(parent, locality, selector) {
	if (parent && locality && selector) {
		this.parent = parent;
		this.locality = locality;
		this.selector = selector;
		attachEventListener(this.parent, 'change', this.trigger.bind(this));
	} else {
		this.toolTip = null;
		this.businesses = null;
		
		if (mdvOAKMapHelper) {
			mdvOAKMapHelper.mdvMap.events.registerEvent(MDVEvent_TOOLTIP, this, this.onToolTip.bind(this));
		}
	}
}

MDVYahooLocalSearch.prototype.trigger = function (e) {
	this.selector.innerHTML = '';
	var o = document.createElement('option');
		o.appendChild(document.createTextNode('Loading...'));
	this.selector.appendChild(o);
	this.selector.disabled = true;
	this.getBusinessByName(this.locality.value, this.parent.value);
};

MDVYahooLocalSearch.prototype.onBusinessNameChange = function (e) {
};

MDVYahooLocalSearch.prototype.getBusinessByName = function (city, name) {
	var callback = this.parent.id + 'Handle';
	
	var req = 'http://local.yahooapis.com/LocalSearchService/V3/localSearch?appid=Z8TPntDV34GI9E7nPmn037aJagZJCNklIZyY_X6etp8fkoC_Z.jVoxM_JVFrM4LmR21jvM2L&query=' + name + '&city=' + city + '&state=CA&results=20&callback=' + callback + '&output=json';

	var jsonsr = new JSONscriptRequest(req);
	if (jsonsr.scriptObj)
		jsonsr.removeScriptTag();
	jsonsr.buildScriptTag(); 
	jsonsr.addScriptTag();
};

MDVYahooLocalSearch.prototype.handleBusinessByNameCallback = function (obj) {
	var selector = '';
	
	if (obj.ResultSet.totalResultsReturned > 0) {
		for (var i=0; i < obj.ResultSet.Result.length; i++) {
			obj.ResultSet.Result[i].toString = function () {
				var ret = '';
					ret += this.Title + ' (' + this.Address + ')';
				return ret;
			};
		}
		
		obj.ResultSet.Result.sort();
	}
	
	

	obj.ResultSet.appendOptions = function (parent) {
		parent.innerHTML = '';
		
		if (this.totalResultsReturned <= 0) {
			var o = document.createElement('option')
				o.appendChild(document.createTextNode('No results. Please refine.'));
				
			parent.appendChild(o);
			parent.disabled = true;
		} else {
			for (var i=0; i < this.Result.length; i++) {
				var item = this.Result[i];
				
				var txt = item.Title;
				
				if (item.Address.length > 0)
					txt += ' (' + item.Address + ')';
				
				var o = document.createElement('option')				
					o.appendChild(document.createTextNode(txt));					
					o.setAttribute('value', txt + '_coord_' +item.Longitude+':'+item.Latitude+ ':WGS84[DD.ddddd]:' +txt);
					
				parent.appendChild(o);
			}

			parent.disabled = false;
		}
	};		
	
	obj.ResultSet.appendOptions(this.selector);
};

MDVYahooLocalSearch.prototype.getBusinessByLocation = function (coords, name, radius) {
	if (!mdvOAKMapHelper)
		return;
		
	var wgs84 = mdvOAKMapHelper.mdvMap.getWGS84(coords);
	wgs84.toString = function () {
		return '&longitude=' + this.x + '&latitude=' + this.y;
	};
	
	var req = 'http://local.yahooapis.com/LocalSearchService/V3/localSearch?appid=Z8TPntDV34GI9E7nPmn037aJagZJCNklIZyY_X6etp8fkoC_Z.jVoxM_JVFrM4LmR21jvM2L&results=10&radius=' + radius + '&query=' + name + '&callback=outputYLS.handleBusinessByLocationCallback&output=json' + wgs84;
	
	var jsonsr = new JSONscriptRequest(req);
	if (jsonsr.scriptObj)
		jsonsr.removeScriptTag();
	jsonsr.buildScriptTag(); 
	jsonsr.addScriptTag();
};

MDVYahooLocalSearch.prototype.submitBusinessByLocation = function (e) {
	var coords = null;
	if (!this.toolTip || !this.toolTip.getParent())
		return;
		
	var businessSearchNames = document.getElementsByName('businessSearchName');
	var businessSearchRadius = document.getElementsByName('businessSearchRadius');
		
	coords = this.toolTip.getParent().getCoords();
	var wgs = this.toolTip.mdvMap.getWGS84(coords);	
	
	if (!wgs)
		return;
		
	this.getBusinessByLocation(wgs, businessSearchNames[1].value, businessSearchRadius[1][businessSearchRadius[1].selectedIndex].value);
};

MDVYahooLocalSearch.prototype.onToolTip = function (id, msg, obj) {
	if (obj && obj.isVisible())
		this.toolTip = obj;
}

MDVYahooLocalSearch.prototype.handleBusinessByLocationCallback = function (obj) {
	if (!this.businesses)
		this.businesses = mdvOAKMapHelper.mdvMap.getLayer('efa_pois');
	
	if (!this.businesses) {
		this.businesses = mdvOAKMapHelper.mdvMap.createLayer('efa_pois');
		this.businesses.setZIndex(2);
		mdvOAKMapHelper.mdvMap.addLayer(this.businesses);
	}
	
	if (parseInt(obj.ResultSet.totalResultsAvailable) <= 0)
		return;		
	
	this.businesses.removeAllMarkers();
	var insertTableText = '';
	
	var i = 0;
	var item = obj.ResultSet.Result[i] || obj.ResultSet.Result;
	var insertTableText = '<table class="underMapLegend" id="tbl_underMapLegend" cellpadding="0" cellspacing="0">';
	
	while (item) {		
		var coord = new MDVCoordinates('WGS84', parseFloat(item.Longitude), parseFloat(item.Latitude));
		
		var marker = mdvOAKMapHelper.mdvMap.createMarker(coord, 0.5, 'fw/mdv/poi.gif');
		this.businesses.addMarker(marker, obj.ResultSet.Result[i+1] == null);		

		var text  = '<div class="smallHeader">';
			text += item.Title;
			text += item.Address.length > 0 ? ' (' + item.Address + ')' : '';
			text += '</div>'
			text += '<div class="content" id="business_' + item.id + '">';
			text += '<br/>';
			text += '<a href="javascript:mdvOAKMapHelper.zoomIn(new MDVCoordinates(\'MTCV\', ' + marker.getCoords().x + ', ' + marker.getCoords().y + '));">Zoom in</a>';
			text += '<br/>';
			text += '<br/>';

			/* table below the map */
			if(i % 2 == 0 && i < 10){
				insertTableText += '<tr id="tr_dest_page_' + i/2 +'" class="active">';
			}
			else if (i % 2 == 0){
				insertTableText += '<tr id="tr_dest_page_' + i/2 +'" class="inActive">';
			}
			insertTableText += '<td class="itemAll" valign="top">';
			insertTableText += '<a href="javascript:void(0);" style="text-decoration: none;">';
			insertTableText += '<strong>'
			insertTableText += item.Title;
			insertTableText += item.Address.length > 0 ? ' (' + item.Address + ')' : '';
			insertTableText += '</strong>';
			insertTableText += '</a>';			
			insertTableText += '</td>';

			if(i % 2 != 0){
				insertTableText += '</tr>';
			}			

		marker.setToolTip(mdvOAKMapHelper.mdvMap.createToolTip(new MDVPoint(320, 202), text));
		
		i++;
		item = obj.ResultSet.Result[i];
	}
	
	insertTableText += '</table>';

	if (i >= 0 && document.getElementById('tbl_underMapBox')) {
		document.getElementById('tbl_underMapBox').style.display='';
		document.getElementById('div_dest_page').innerHTML = insertTableText;
	} else if (document.getElementById('tbl_underMapBox')) {
		document.getElementById('tbl_underMapBox').style.display='none';
		document.getElementById('div_dest_page').innerHTML = '';
	}
};

function businessNameHandle(obj) {
	var businessName = document.getElementById('businessName');
	
	if (businessName && businessName.yls)
		businessName.yls.handleBusinessByNameCallback(obj);
}

function businessNameDMHandle(obj) {
	var businessNameDM = document.getElementById('businessNameDM');

	if (businessNameDM && businessNameDM.yls)
		businessNameDM.yls.handleBusinessByNameCallback(obj);
}

attachEventListener(window, 'load', onLoadYLS, false);