$(document).ready(function(){
  var theHost = $('#CLIENT_URL').val();
  
  var ycoord;
  var xcoord;
  var datum;
  //initialise these values for the first time round 
  var currentTabId ="NZMG";
  var current_ycoord = '';
  var current_xcoord = '';
  var ajax_request = false;
  var service_error = false;
  var service_error_message ="";
 
  
  //pressing 'return'
  $('#addressForm').keyup(function(event){ 
	 if (event.which==13) {
		$('#SubmitForm').click(); 
	 }
  })
  $('#hirdsForm').keyup(function(event){ 
	 if (event.which==13) {
		$('#create').click(); 
	 }
  })
  
  //clicking on tabs....
  $('.tab').bind("click", function(event){
	  readDatums();	 
   
      if ((xcoord!='')&&(ycoord!='')) {	
    	$status = convertAndPopulateDatumFields();
      } 
       
          $idSlelector = '#'+this.id+'_field';
          currentTabId = this.id;
	      $('.inputfield').css('display','none');
	      $($idSlelector).css('display','block');
  
   
  })
  //clicking on the 'Generate Tables' button
   $("#create").bind("click", function(e){
   //validate and submit
	 var sitename = urlEncode($('#id_siteName').val());
		  //temperature changefields to comma seperated lists
		  $temp_change1 = urlEncode($('#id_tempChange1').val());
		  $temp_change2 = urlEncode($('#id_tempChange2').val());
	 	  $temp_change3 = urlEncode($('#id_tempChange3').val());
	 	  var tempchange = createCommaSeparatedString($temp_change1,$temp_change2,$temp_change3);
	    
	      var default_coord = readDefaultDatum(currentTabId);
          $.getJSON(theHost+"/validate.php", { 
            x: default_coord[0], 
            y: default_coord[1],
            tempchange:tempchange,
            calculation:$('#idformat').val(),
            sitename:$('#id_siteName').val(),    		
            type:currentTabId},
            function(json){
       	      if (currentTabId=='NZMG') {
    		    getData(json,tempchange,default_coord,sitename,'','');
              } else {
          	    getData(json,tempchange,default_coord,sitename,true);
              }
       	    }
          )   // end of JSON Request
   })
  
   function getData (json,tempchange,default_coord,sitename,convert) {
    if (json.stat=='ok') { 
	  if (convert==false) {
	    window.location.href = $('#CLIENT_URL').val()+"/hirds_data/"+
  	 	sitename+'/'+
	 	currentTabId+'/'+
	 	default_coord[1]+'/'+
	 	default_coord[0]+'/'+
	 	tempchange+'/'+
 	 	$('#idformat').val();	  
		
	  } else {
	    ajax_request = $.getJSON(
          theHost+"/convert.php", {
		    x: default_coord[0], 
			y: default_coord[1],
			type:currentTabId
	      },
		  function  (json){	
	       
	    	  logString ('url',$('#CLIENT_URL').val()+"/hirds_data/"+
	    		  	 	sitename+'/'+
	    			 	'NZMG/'+
	    			 	json.NZMG.Northing+'/'+
	    			 	json.NZMG.Easting+'/'+
	    			 	tempchange+'/'+
	    			 	currentTabId+'/'+
	    			 	default_coord[0]+'/'+
	    			 	default_coord[1]+'/'+
	    		 	 	+$('#idformat').val());
	    	  
	    	  window.location.href = $('#CLIENT_URL').val()+"/hirds_data/"+
	  	 				sitename+'/'+
	  	 				'NZMG/'+
	  	 				json.NZMG.Northing+'/'+
	  	 				json.NZMG.Easting+'/'+
	  	 				tempchange+'/'+
	  	 				currentTabId+'/'+
	  	 				default_coord[0]+'/'+
	  	 				default_coord[1]+'/'+
	  	 				$('#idformat').val();
	  	 				               
	  	 				               
	      }
	     )
	    }
     } else { //json.stat is not 'ok' so we need to print errors
        $('.error').remove();
        $i=0;
        $.each(
        json.errors,
        function(intIndex, objValue) {
          $i++;	
          $field = $('#'+objValue.field);
          $('<div id="er_'+objValue.field+$i+'" class="error">'+objValue.message+'</div>').appendTo($field.parent());
         }
         )
        }
      }
   
   //redraw MAp
   $(".redraw").bind("click", function(e){
	$reDrawDatum = this.id.substr(3); 
	switch ($reDrawDatum) {
	  case "NZTM2000":
	    $ygoogle = $('#id_NZTM_northing').val();
	   	$xgoogle = $('#id_NZTM_easting').val();
	  break;
	  case "WGS84":
	  	$ygoogle = $('#id_WGS84_latitude').val();
	  	$xgoogle = $('#id_WGS84_longitude').val();
	  break;
	  case "NZMG":
	  	$xgoogle= $('#id_NZMG_easting').val();
	    $ygoogle= $('#id_NZMG_northing').val();
	  break;
	  case "NZGD1949":
		$ygoogle = $('#id_NZGD1949_latitude').val();
    	$xgoogle = $('#id_NZGD1949_longitude').val();
      break;
	  default:
		$ygoogle= $('#id_WGS84_latitude').val();
		$xgoogle= $('#id_WGS84_longitude').val();
	  break;
   }
    ajax_request = $.getJSON(
      theHost+"/convert.php", {
      x: $xgoogle, 
      y: $ygoogle,
     type:$reDrawDatum
   },
   function  (json){	
     if (GBrowserIsCompatible()) {
    	
       $latlng= new GLatLng(json.WGS84.Latitude,json.WGS84.Longitude);
       map.setCenter($latlng, 13);
	   setMarkerToPoint($latlng);
	}	   
	})
  
   })
   
   function urlEncode ($stringToEncode) {
     $encoded=escape($stringToEncode.replace(/\//g,'%2F'));
   return $encoded;	 
   }
  
  

  var convertAndPopulateDatumFields = function (){  
	  $('.error').remove();
      $('.error_message').remove();
	  ajax_request = $.getJSON(
      theHost+"/convert.php", {
	    x: xcoord, 
	    y: ycoord,
	    type:datum
	   },
	   function  (json){
	
		 if (json.status==200) {
			 if (json.NZMG.Easting!="null") {  
				 $('.error').remove();
				 //NZMG
				 $('#id_NZMG_easting').val(json.NZMG.Easting);
				 } else {
				   displayError ('NZMG_field','Location is out of range for NZMG','NZMG_field');
				   $('#id_NZMG_easting').val('');
				   $('#id_NZMG_northing').val('');
				 }
				 if (json.NZMG.Northing!="null") { 
		           $('#id_NZMG_northing').val(json.NZMG.Northing);
				 }
				 //NZGD1949				 
				 if (json.NZGD1949.Latitude!="null") { 
		           $('#id_NZGD1949_latitude').val(json.NZGD1949.Latitude);
				 } else {
				   displayError ('NZGD1949_field','Location is out of range for NZGD1949','NZGD1949_field');
				   $('#id_NZGD1949_latitude').val('');
				   $('#id_NZGD1949_longitude').val('');
				 }
				 if (json.NZGD1949.Longitude!="null") { 
		           $('#id_NZGD1949_longitude').val(json.NZGD1949.Longitude);
				 } 
				 //NZTM2000
				 if (json.NZTM2000.Easting!="null") { 
		           $('#id_NZTM_easting').val(json.NZTM2000.Easting);
			     } else {
				   displayError ('NZTM2000_field','Location is out of range for NZTM2000','NZTM2000_field');
				   $('#id_NZTM_easting').val('')
				   $('#id_NZTM_northing').val('')
				 }
			     if (json.NZTM2000.Northing!="null") { 
		           $('#id_NZTM_northing').val(json.NZTM2000.Northing);
			     }
			     //WGS84
			     if (json.WGS84.Latitude!="null") { 
			       $('#id_WGS84_latitude').val(json.WGS84.Latitude);
			     } else {
				   displayError ('WGS84_field','Location is out of range for WGS84','WGS84_field')
				 }
			     if (json.WGS84.Longitude!="null") { 
			       $('#id_WGS84_longitude').val(json.WGS84.Longitude);
			     }
           return 'noError';
		 } else {
		   $('<div class="error">'+json.message+'</div>').appendTo('#Coordinates');
		       $idSlelector = '#'+datum+'_field';
	           currentTabId = datum;
		       $('.inputfield').css('display','none');
		       $($idSlelector).css('display','block');
		   return 'error';
		 }	 
			 
	   }
    )
  }
  function readDatums (){
	  switch (currentTabId) {
	    case "NZTM2000":
  	      ycoord = $('#id_NZTM_northing').val();
	      xcoord = $('#id_NZTM_easting').val();
	      datum  = 'NZTM2000';
	    break;
	    
	    case "WGS84":
	      ycoord = $('#id_WGS84_latitude').val();
		  xcoord = $('#id_WGS84_longitude').val();
	      datum = 'WGS84';
      break;
	      
	    case "NZMG":
	 	 	
	      xcoord= $('#id_NZMG_easting').val();
	      ycoord= $('#id_NZMG_northing').val();
	      datum ='NZMG';
		break;
	    case "NZGD1949":
	  
	      ycoord = $('#id_NZGD1949_latitude').val();
		  xcoord = $('#id_NZGD1949_longitude').val();
	      datum='NZGD1949';
		break;
		
		default:
				
		  ycoord= $('#id_WGS84_latitude').val();
		  xcoord= $('#id_WGS84_longitude').val();
		  datum = 'WGS84';
		break;
		
	  }
  }
  
  function readDefaultDatum ($datum) {
	  $defaultDatumValues = Array(); 
	  switch ($datum) {
	    case "NZTM2000":
	      $defaultDatumValues[0]=$('#id_NZTM_easting').val();
	      $defaultDatumValues[1]=$('#id_NZTM_northing').val(); 
	    break;
	    
	    case "WGS84":
	      $defaultDatumValues[1] = $('#id_WGS84_latitude').val();
	      $defaultDatumValues[0] = $('#id_WGS84_longitude').val();
	 	  
       break;
	      
	    case "NZMG":
	 	  $defaultDatumValues[0]= $('#id_NZMG_easting').val();
	 	  $defaultDatumValues[1]= $('#id_NZMG_northing').val();
		break;
	    case "NZGD1949":
          $defaultDatumValues[0] = $('#id_NZGD1949_longitude').val();
  	      $defaultDatumValues[1] = $('#id_NZGD1949_latitude').val(); 
		break;
	  }	  
	return 	 $defaultDatumValues;
  }
 
  function setMarkerToPoint(point){	
	  map.clearOverlays();
	  var marker = new GMarker(point);
	  map.addOverlay(marker);

  }
  
  function logString($name,$string) {
	  ajax_request = $.getJSON(
        theHost+"/logit.php", {
			    name: $name, 
			    string:$string
   },function  (json){
	
   })  
  }
  function createCommaSeparatedString ($temp_change1,$temp_change2,$temp_change3) {
 	  if ($temp_change1==''){$temp_change1='0'};
 	  if ($temp_change2==''){$temp_change2='0'};
 	  if ($temp_change3==''){$temp_change3='0'};
  return $temp_change1+','+$temp_change2+','+$temp_change3;
  }	  
  function displayError ($errorFieldId,$errorMessage,$fieldToAppendTo) {
    $('<div id="er_'+$errorFieldId+'" class="error">'+$errorMessage+'</div>').appendTo($('#'+$fieldToAppendTo));
  }	 
  
  
})