var xmlHttp;
var onReceive;
var coverage_size=20;
var IsCoverage_loaded=true;
var blocks=[];

var groundfloor_ncol     = null;
var groundfloor_nrow     = null;
var groundfloor_xll      = null;
var groundfloor_yll      = null;
var groundfloor_cellsize = null;

var stfloor_ncol     = null;
var stfloor_nrow     = null;
var stfloor_xll      = null;
var stfloor_yll      = null;
var stfloor_cellsize = null;

var usb_ncol     = null;
var usb_nrow     = null;
var usb_xll      = null;
var usb_yll      = null;
var usb_cellsize = null;

var outdoor_ncol     = null;
var outdoor_nrow     = null;
var outdoor_xll      = null;
var outdoor_yll      = null;
var outdoor_cellsize = null;


function getDPGD(point,bearing,dis)
{
	var ER       = 6371;				//C1 
	var slat     = point.lat() * Math.PI/180; 	//H2
	var slng     = point.lng() * Math.PI/180; 	//H3
	var pbearing = bearing 	   * Math.PI/180;	//C4
	var pdis     = dis;				//C5

	var H7     = Math.asin(Math.sin(slat)*Math.cos(pdis/ER)+Math.cos(slat)*Math.sin(pdis/ER)*Math.cos(pbearing));
	var H8     = slng+Math.atan2(Math.sin(pbearing)*Math.sin(pdis/ER)*Math.cos(slat),Math.cos(pdis/ER)-Math.sin(slat)*Math.sin(H7));

	var elat     = H7 * 180/Math.PI;
	var elng     = H8 * 180/Math.PI;

	return  new GLatLng(parseFloat(elat),parseFloat(elng));
}
/*
function showArea(responseText){
	removeBlocks();
	var row = responseText.split(":");
	//alert(row.length);
	//alert(responseText);
	//check_Block();
	for(r=0;r<row.length-1;r++){
		var col = row[r].split(",");
		var block = createBlock(UTMtoLatLng(col[0],col[1],43),toColor(parseInt(col[2])),0.20);
		blocks.push(block);
		map.addOverlay(block);
	}
	
} 
*/

function showArea(responseText){
	removeBlocks();
	var row = responseText.split(":");
	for(r=0;r<row.length-1;r++){
		var col = row[r].split(",");
		var block = createBlock(UTMtoLatLng(parseFloat(col[0])-2,parseFloat(col[1])-2,43),toColor(parseInt(col[2])),0.20);
		blocks.push(block);
		map.addOverlay(block);
	}
	
}    
    
function removeBlocks(){
	while(blocks.length){
		map.removeOverlay(blocks.pop());
	}
}	
       
function createBlock(point,col,opacity){
	var polygon = new GPolygon([
  		  getDPGD(point,315,0.003),
		  getDPGD(point,45,0.003),
  		  getDPGD(point,90+45,0.003),
		  getDPGD(point,180+45,0.003),
		  getDPGD(point,315,0.003)
		],col,1,opacity,col,opacity);
	return polygon;
}

function toColor(c){
	/*
	switch (c){
		case -9999:
			return "#FFFF00";
		break;
		case 5:
			return "#00ff00";
		break;
		case 0:
			return "#ff0000";
		break;
	};
	*/
	//if(c<40) 		   return "#FF0000";
	if(g_layerButton=="outdoor"){
		if(c==255) 			return "#000000";
		if(c<=30)  			return "#000000";
		if(c>=31 && c<=50)  return "#FF0000";
		if(c>=51 && c<=70)  return "#FFFF00";
		if(c>=71) 			return "#00FF00";
	}else
	{
		if(c==255) 			return "#000000";
		if(c<=8)  			return "#000000";
		
		if(c>=9  && c<=12)  return "#FF0000";
		if(c>=13 && c<=18)  return "#FF4F00";
		if(c>=19 && c<=24)  return "#FFFF00";
		if(c>=25 && c<=100) return "#00FF00";
	}
}	    	

function get_Blocks(point,cov)
{
	//var p1 = getDPGD(point,315,0.0023*10);
	//var p2 = getDPGD(point,90+45,0.0023*10);	
	//var p1 = getDPGD(point,315,coverage_size);
	//var p2 = getDPGD(point,90+45,coverage_size);	

	//var val= "action=blocks&lat1=" + p1.lat() + "&lng1=" + p1.lng() + "&lat2=" + p2.lat() + "&lng2=" + p2.lng() + "&cov="+cov; 
	var utmPoints = LLtoUTM(point).split(",");
	var val= "action=blocks&col=" + utmPoints[0] + "&row=" + utmPoints[1] + "&cov="+cov + "&cs="+ coverage_size; 
	
	$('#loader').show();
	removeBlocks();
	jQuery.get("blocksserver.php?"+val,function(data){
		    if(IsCoverage_loaded)$('#loader').hide();
			//alert(data);
			showArea(data);
			//check_Block('usb','#FFFF00');
			//check_Block('indoor','#FFFFF0');
			//check_Block('outdoor','#0000FF');			
			
	});

}
function get_Coverage(point,cov)
{
	//var p1 = getDPGD(point,315,coverage_size);
	//var p2 = getDPGD(point,90+45,coverage_size);	

	//val= "action=coverage&lat1=" + p1.lat() + "&lng1=" + p1.lng() + "&lat2=" + p2.lat() + "&lng2=" + p2.lng(); 
	
	var utmPoints = LLtoUTM(point).split(",");
	var val= "action=coverage&col=" + utmPoints[0] + "&row=" + utmPoints[1] + "&cov="+cov + "&cs="+ coverage_size; 
	
	
	$('#loader').show();
	//removeBlocks();
	$('#dv_coverage').html('&nbsp;');
	IsCoverage_loaded=false;

   $('#s_usb').html('&nbsp;');
   $('#s_indoor_G').html('&nbsp;');
   $('#s_indoor_1F').html('&nbsp;');   
   $('#s_outdoor').html('&nbsp;');
   
   $('#s_indoor_usb').html('&nbsp;');
   $('#s_snd_usb').html('&nbsp;');
   $('#s_snd_ind').html('&nbsp;');
	
   $('#sp_cov_not_available').fadeOut('slow');
   $('#sp_cov_available').fadeOut('slow');

	jQuery.get("blocksserver.php?"+val,function(data){
			//alert(data);								
			IsCoverage_loaded=true;
			$('#loader').hide();
			if(data!=''){
				var l_covare = data.split('#');


				$('#s_usb').html(l_covare[0]);
				$('#s_indoor_G').html(l_covare[1]);
				$('#s_indoor_usb').html(l_covare[2]);
				$('#s_outdoor').html(l_covare[3]);
				$('#s_indoor_1F').html(l_covare[4]);
				$('#s_snd_usb').html(l_covare[5]);
				$('#s_snd_ind').html(l_covare[6]);
				
				$('#s_usb').css('color','#229922');				
				$('#s_indoor_G').css('color','#229922');		
				$('#s_indoor_1F').css('color','#229922');								
				$('#s_outdoor').css('color','#229922');				
				$('#s_indoor_usb').css('color','#229922');				
				$('#s_snd_usb').css('color','#229922');				
				$('#s_snd_ind').css('color','#229922');				
				
				
				
				if(l_covare[0].indexOf('No')>=0)
					$('#s_usb').css('color','#902');
				if(l_covare[1].indexOf('No')>=0)
					$('#s_indoor_G').css('color','#902');
				if(l_covare[2].indexOf('No')>=0)
					$('#s_indoor_usb').css('color','#902');
				if(l_covare[3].indexOf('No')>=0)
					$('#s_outdoor').css('color','#902');
				if(l_covare[4].indexOf('No')>=0)
					$('#s_indoor_1F').css('color','#902');
				if(l_covare[5].indexOf('No')>=0)
					$('#s_snd_usb').css('color','#902');
				if(l_covare[6].indexOf('No')>=0)
					$('#s_snd_ind').css('color','#902');
				
				if(data.indexOf('Yes')>=0){
					 $('#sp_cov_not_available').fadeOut('slow',function (){
						 $('#sp_cov_available').fadeIn();
					  });
				}else
				{
					 $('#sp_cov_available').fadeOut('slow',function (){
						 $('#sp_cov_not_available').fadeIn();
					  });
				}
			}
			//$('#dv_coverage').show();
	});

}

function check_Block(cov,col){
	//alert('me call');
	val = 'action=area&cov='+cov;
	jQuery.get("blocksserver.php?"+val,function(data){

		// data = '31.562584862805,74.267684,31.452417937897,74.406207609224';
		var LL = data.split(',');
		//alert( cov + '->'+ LL);
		var lat1 = LL[0];
		var lng1 = LL[1];
		var lat2 = LL[2];
		var lng2 = LL[3];		
		
		//var col = '#FF0000';
		var opacity = 100;
		
		var p1 = new GLatLng(parseFloat(lat1), parseFloat(lng1));
		var p2 = new GLatLng(parseFloat(lat1), parseFloat(lng2));
		var p3 = new GLatLng(parseFloat(lat2), parseFloat(lng2));
		var p4 = new GLatLng(parseFloat(lat2), parseFloat(lng1));		
		var p5 = new GLatLng(parseFloat(lat1), parseFloat(lng1));				
		
		// Naksha corners
		/*
		var n_ll = new GLatLng(31.451837876839,74.26095271);
		var n_tl = new GLatLng(31.567130905959,74.26095271);
		var n_tr = new GLatLng(31.567130872585,74.421073252362);
		var n_lr = new GLatLng(31.451837843465,74.420875854254);
		
		alert('NAKSHA TW:' + cov + ' Top width:' + n_tl.distanceFrom(n_tr));
		alert('NAKSHA BW:' + cov + ' Bottom width:' + n_ll.distanceFrom(n_lr));
		alert('NAKSHA RH:' + cov + ' Right Height:' + n_tl.distanceFrom(n_ll));
		alert('NAKSHA LH:' + cov + ' Left Height:' + n_tr.distanceFrom(n_lr));
		*/

		
		// WiTribe corners
		/*
		var w_ll = new GLatLng(31.451792,74.260952);
		var w_tl = new GLatLng(31.567451,74.260042);
		var w_tr = new GLatLng(31.568277,74.419891);
		var w_lr = new GLatLng(31.452614,74.420605);
		
		alert('Wi-Tribe TW:' + cov + ' Top width:' + w_tl.distanceFrom(w_tr));
		alert('Wi-Tribe BW:' + cov + ' Bottom width:' + w_ll.distanceFrom(w_lr));
		alert('Wi-Tribe RH:' + cov + ' Right Height:' + w_tl.distanceFrom(w_ll));
		alert('Wi-Tribe LH:' + cov + ' Left Height:' + w_tr.distanceFrom(w_lr));
		*/
		//alert('coverage:' + cov + ' with:' + p1.distanceFrom(p2) +", height:" + p2.distanceFrom(p3));
		//alert('coverage:' + cov + ' with:' + p4.distanceFrom(p5) +", height:" + p2.distanceFrom(p3));

		// Wateen corners
		
		var w_ll = new GLatLng(31.41173326,74.22144805);
		var w_tl = new GLatLng(31.654595059,74.22144805);
		var w_tr = new GLatLng(31.654595013,74.4433105);
		

		

		//alert('Wateen LH:' + cov + ' ' + w_ll.distanceFrom(w_tl)/5);
		//alert('Wateen TW:' + cov + ' ' + w_tr.distanceFrom(w_tl)/5);

		
		//alert('coverage:' + cov + ' with:' + p1.distanceFrom(p2) +", height:" + p2.distanceFrom(p3));
		//alert('coverage:' + cov + ' with:' + p4.distanceFrom(p5) +", height:" + p2.distanceFrom(p3));


		var polyline = new GPolyline([p1,p2,p3,p4,p5],col,3,opacity,col,opacity);
		map.addOverlay(polyline);
		
		//var w_polyline = new GPolyline([w_ll,w_tl,w_tr],"#FF0000",3,opacity,"#FF0000",opacity);
		//map.addOverlay(w_polyline);
		
	});

}

function setCoverageSize(){
	if($('#coverage_size').val()>10){
		if($('#coverage_size').val()<=150){
			coverage_size=$('#coverage_size').val();	
			get_Blocks(g_hPoint,g_layerButton);
			get_Coverage(g_hPoint,g_layerButton);
		}
		else{
			$('#coverage_size').val(150);
			coverage_size=$('#coverage_size').val();	
			get_Blocks(g_hPoint,g_layerButton);
			get_Coverage(g_hPoint,g_layerButton);
		}
	}
	else{
		
		$('#coverage_size').val(10);
		coverage_size=$('#coverage_size').val();	
		get_Blocks(g_hPoint,g_layerButton);
		get_Coverage(g_hPoint,g_layerButton);
	}
}

function trim(str) {
	return str.replace(/^\s*/, "").replace(/\s*$/, "");
}

function findLocation(){

	var address = $('#q').val();
	//alert(selected_city +','+address);
	if(address==''){
		return;
	}
	
	if(isLLSearch(address)){
		var LL = address.split(",");
		showHouse(LL[0],LL[1],address);
		$('#address').html(address);
		$("#didumean").html("&nbsp;");

		return ; 
	}
	var address = address +' '+ selected_city;
	$('#loader').show();
	jQuery.get("../plottingserver.php",{q:address,reqtype:"ajax",city:selected_city},function(data){
  	    data= trim(data);
		var l_house= data.split('::');		

		if(parseInt(l_house[0])){
			var l_latlng = l_house[1].split(",");
			showHouse(l_latlng[0],l_latlng[1],l_house[2]);
		
			var l_arrAddress = l_house[2].split(',');
			$('#address').html("<strong>"+l_house[2]+"</strong>");
			$('#address').show();
			
			var l_html='';
			l_html += "			<select name='cmb_address' id='cmb_address' onchange='onAddressChange(this);' style='width: 300px;' >";
			l_html += "				<option value=''>Did you mean?</option>";
			l_html += 				l_house[4];
			l_html += "			</select>";
			$("#didumean").html(l_html);
			
		}else
		{
			$('#address').html("NOT FOUND");
			$("#didumean").html("&nbsp;");
			$('#dv_coverage').html("&nbsp;");
			$('#loader').hide();
		}
		
		//$('#loader').hide();
	});
}

function isLLSearch(address){
	if(address.indexOf(".")==2){
		var LL = address.split(",");
		
		if(LL.length!=2)return false;
		
		var Lat = LL[0];
		var Lng = LL[1];
		if(Lat.indexOf(".")==2 && Lng.indexOf(".")==2) return true;
		else
			return false;
	}
	return false;
}

function searchToLL(address){
	var LL = address.split(",");
	return new GLatLng(parseFloat(LL[0]),parseFloat(LL[1]));
}


function initHeader(type,ncol,nrow,xll,yll,cellsize){

	switch (type){
			case "groundfloor":
				groundfloor_ncol     = ncol;
				groundfloor_nrow     = nrow;
				groundfloor_xll      = xll;
				groundfloor_yll      = yll;
				groundfloor_cellsize = cellsize;
			break;
			case "1stfloor":
				stfloor_ncol     = ncol;
				stfloor_nrow     = nrow;
				stfloor_xll      = xll;
				stfloor_yll      = yll;
				stfloor_cellsize = cellsize;
			break;
			case "usb":
				usb_ncol     = ncol;
				usb_nrow     = nrow;
				usb_xll      = xll;
				usb_yll      = yll;
				usb_cellsize = cellsize;
			break;
			case "outdoor":
				 outdoor_ncol = ncol;     
				 outdoor_nrow = nrow;   
				 outdoor_xll  = xll;   
				 outdoor_yll  = yll;   
				 outdoor_cellsize = cellsize;
			break;
	};	
}
