var SAMPLE_ADVANCED_PAGING_POST = HOST_URL + '/search/v1/page?key=YOUR_KEY_HERE&callback=CALLBACK_HERE';
var SAMPLE_ADVANCED_RADIUS_POST = HOST_URL + '/search/v1/radius?key=YOUR_KEY_HERE&callback=renderPageKeyResults';
var advancedOptions = '';

function showAdvancedPagingURL(){
	advancedOptions = SAMPLE_ADVANCED_PAGING_POST;
	
	var pageKey = document.getElementById("pageKey").value;
	var currentPage = document.getElementById("currentPage").value;
		
	var inFormat = document.getElementById('inFormat');
	inFormat = inFormat.options[inFormat.selectedIndex].value;
	
	switch(inFormat){
		case "kvp":
			advancedOptions += "&pageKey=" + pageKey;
			if(currentPage != ""){
				advancedOptions += "&currentPage=" + currentPage;
			}
			
			break;
		case "json":
			advancedOptions += '&inFormat=json';
			advancedOptions += "&json=";
			
	        var jsonText = '{';
			jsonText += "options:{";
			jsonText += "pageKey: \"" + pageKey + "\"";
			if(currentPage != ""){
				jsonText += ",currentPage:" + currentPage;
			}
			jsonText += "}";
			jsonText += "}";
			advancedOptions += jsonText;
			
			break;
		case "xml":
			advancedOptions += '&inFormat=xml';
			advancedOptions += "&xml=";
			
			var xmlText = '<search>';
			xmlText += "<options>";
			xmlText += "<pageKey>" + pageKey + "</pageKey>";
			if(currentPage != ""){
				xmlText += "<currentPage>" + currentPage + "</currentPage>";
			}
			xmlText += "</options>";
			xmlText += '</search>';
			advancedOptions += xmlText;
			
			break;
	}
	
    var safe = advancedOptions;
    document.getElementById('advancedPagingSampleUrl').innerHTML = safe.replace(/</g, '&lt;').replace(/>/g, '&gt;');
}


function renderAdvancedPagingResults(response) {
    var html = '';
    var i = 0;
    var j = 0;

    if (response.info.statuscode && (response.info.statuscode != 0)) {
        var text = "Whoops!  There was an error during the request";
		text += " [" + response.info.statuscode + "]:\n";
        if (response.info.messages) {
            for (i = 0; i < response.info.messages.length; i++) {
                text += response.info.messages[i] + "\n";
            }
        }
        alert(text);
    }
    
    if (response.collections) { // Location ambiguities!
        html = "<p>Whoops!  Ambiguous addresses found in request:</p><ol>";
        for (i = 0; i < response.collections.length; i++) {
            var collection = response.collections[i];
            for (j = 0; j < collection.length; j++) {
                html += '<li>';
                html += ' ' + (collection[j].adminArea5 || ' ');  
                html += ' ' + (collection[j].adminArea4 || ' ');  
                html += ' ' + (collection[j].adminArea3 || ' ');  
                html += ' ' + (collection[j].adminArea2 || ' ');  
                html += ' ' + (collection[j].adminArea1 || ' ');  
                html += '</li>';
            }
        }
        html += '</ol>';
        document.getElementById('advancedPagingResults').innerHTML = html;
        return;        
    }
	
	if(response.searchResults){
		doPaging(response, "renderAdvancedResults");	
		html += '<table><tr><th colspan="5">Search Results</th></tr>'
		html += '<tr><td><b>#</b></td><td><b>key/name</b></td><td><b>fields</b></td><td><b>distance</b></td><td><b>shapes</b></td></tr>';
		html += '<tbody>'
		for(var i =0; i < response.searchResults.length; i++){
			var result = response.searchResults[i]
			html += "<tr valign=\"top\">";
			html += "<td>" + result.resultNumber + "</td>";
			html += "<td>key: " + result.key + "<br/>";
			html += "name: " + result.name + "<br/>";
			html += "</td>";
			html += "<td>";
			if(result.fields){
				for (var obj in result.fields){
					var f = result.fields[obj];
					html += obj + ": " + f + "<br/>";					
				}
			}
			html += "</td>";
			html += "<td>distance:" + result.distance + " " + result.distanceUnit + "<br/>";
			html += "source:" + result.sourceName + "</td>";
			html += "<td>";
			if(result.shapePoints){
				if(result.shapePoints instanceof Array){
					for(var j=0; j < result.shapePoints.length; j+=2){
						html += result.shapePoints[j];
						html += ", ";
						html += result.shapePoints[j + 1];
						html += "<br/>";
					}
				}
				else{
					html += result.shapePoints
				}
			}
			html += "</td>";
			html += "</tr>";
		}		
		html += '</tbody></table>';
	}
    
    
    document.getElementById('advancedPagingResults').innerHTML = html;
}

function doAdvancedPaging(){
    document.getElementById('advancedPagingResults').innerHTML = 'Pending...';
    
    var script = document.createElement('script');
    script.type = 'text/javascript';
    showAdvancedPagingURL();
    var newURL = advancedOptions.replace('YOUR_KEY_HERE', APP_KEY);
	newURL = newURL.replace("CALLBACK_HERE", "renderAdvancedPagingResults");
    script.src = newURL;
    document.body.appendChild(script);

}

function doPaging(response, callback){
	var div = document.getElementById("divPaging");
	if(div){
		div.style.display = "none";
		var pageKey = response.options.pageKey;
		if(pageKey){
			var pageSize = parseInt(response.options.pageSize);
			var currentPage = parseInt(response.options.currentPage);
			var resultsCount = parseInt(response.resultsCount);
			var html = "";
			if(currentPage > 1){
				html += "<a href=\"javascript:jumpToPage('" + pageKey + "'," + (currentPage - 1) + ", '" + callback + "')\">&lt;&lt;Prev</a>";
			}
			html += "&nbsp;&nbsp;&nbsp;";
			if((currentPage * pageSize) + pageSize < resultsCount){
				html += "<a href=\"javascript:jumpToPage('" + pageKey + "'," + (currentPage +1) + ", '" + callback + "')\">Next&gt;&gt;</a>";			
				html += "&nbsp;&nbsp;&nbsp;";
			}
			
			html += "<a href=\"paging.html\">Paging Description</a>";			
			
			div.style.display = "";
			div.innerHTML = html;
		}	
	}
}

function renderPageKeyResults(response){
	if (response.options && response.options.pageKey) {
		document.getElementById('pageKeyDiv').innerHTML = "<b>Page Key:</b> " + response.options.pageKey;
		document.getElementById('pageKey').value = response.options.pageKey;
	}
	else {
		document.getElementById('pageKeyDiv').innerHTML = "<b>Page Key:</b> No key created yet";
	}
}	

function doSearch() {
	document.getElementById('pageKeyDiv').innerHTML = 'Pending...';
    
    var script = document.createElement('script');
    script.type = 'text/javascript';
	var newURL = SAMPLE_ADVANCED_RADIUS_POST.replace('YOUR_KEY_HERE', APP_KEY) + "&origin=" + document.getElementById('origin').value + "&pageSize=" + document.getElementById('pageSize').value;
    script.src = newURL;
    document.body.appendChild(script);
}

function jumpToPage(key, page, callback){
	var url = SAMPLE_ADVANCED_PAGING_POST;
	
	var inFormat = document.getElementById('inFormat');
	inFormat = inFormat.options[inFormat.selectedIndex].value;
	
	var mapData = document.getElementById("mapData").value.split("\n");
	var hostedData = document.getElementById("hostedData").value.split("\n");
	var remoteData = document.getElementById("remoteData").value.split("\n");
	
    if (inFormat == 'kvp') {
		url += "&pageKey=" + key;
		url += "&currentPage=" + page;
	}
    else if (inFormat == 'json') {
        url += '&inFormat=json';
        url += "&json=";
        var jsonText = '{';
		var spacer = false;
        jsonText += "options:{";
        jsonText += "pageKey:\"" + key + "\",";
		jsonText += ",currentPage=" + page;
        jsonText += '}';
        jsonText += '}';
        url += jsonText;
    } else if (inFormat == 'xml') {
        url += '&inFormat=xml';
        url += "&xml=";
        var xmlText = '<search>';
        xmlText += '<options>';
		xmlText += "<pageKey>" + key + "</pageKey>";
		xmlText += "<currentPage>" + currentPage + "</currentPage>";
        xmlText += '</options>';
        xmlText += '</search>'
        url += xmlText;
    }
	
	var script = document.createElement('script');
    script.type = 'text/javascript';
    var newURL = url.replace('YOUR_KEY_HERE', mqkey).replace('CALLBACK_HERE', callback);
    script.src = newURL;
    document.body.appendChild(script);
}
