// MWNLCReport.js
// сценарий для страницы отправки отчёта о наблюдении серебристых облаков

var MWCreateNLCObserver = 0;
var MWNLCReportFormCreateObserver = 0;
var MWNLCReportFormCreateObserverSlide = 0;
var MWNLCReportFormRegister = 0;
var MWNLCReportFormRegistrationStatus = 0;
var nlcBalls = 0;
var MWNLCReportFormExtended = 0;
var MWNLCReportFormExtendedSlide = 0;
var MWNLCReportFormSubmit = 0;
var MWNLCReportFormSubmitRequest = 0;
var MWNLCReportFormInfo = 0;
var MNNLCReportFormTimezoneRequest = 0;
var MWNLCTimezoneOffest = 0;
var MWNLCReportFormScroller = 0;
var MWNLCReportFormStartDT = 0;
var MWNLCReportFormEndDT = 0;

var geocoder;
  var map;
  var marker;
  
  function geocodePosition(pos) 
  {
	  geocoder.geocode(
	  {
	    latLng: pos
	  },
	  function(responses)
	  {
	    if(responses && responses.length > 0)
	    {
	      updateMarkerAddress(responses[0].formatted_address);
	    } 
	    else 
	    {
	      updateMarkerAddress('Cannot determine address at this location.');
	    }
	  }
	  );
  }
  
	function updateMarkerPosition(latLng)
	{
		document.getElementById('latitude').value = latLng.lat();
		document.getElementById('longitude').value = latLng.lng();
	}
	function updateMarkerAddress(str)
	{
	  //document.getElementById('ad').innerHTML = str;
	}

  function initialize()
  {
    geocoder = new google.maps.Geocoder();
    var latlng = new google.maps.LatLng(55.752694756250214, 37.61213983593751);
    var myOptions = {
      zoom: 8,
      center: latlng,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    }
    map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
    
    marker = new google.maps.Marker(
    {
      position: latlng,
      draggable: true,
      map: map, 
      title:"Ваше текуще местоположение"
	}
	);   
	
	 google.maps.event.addListener(marker, 'dragend', function() 
	 {
	    geocodePosition(marker.getPosition());
	  });
	  
	 google.maps.event.addListener(marker, 'drag', function()
	 {
   		updateMarkerPosition(marker.getPosition());
	  });
  }

  function codeAddress()
  {
    var address = document.getElementById("address").value;
    if (geocoder)
    {
      geocoder.geocode({ 'address': address}, function(results, status)
      {
        if (status == google.maps.GeocoderStatus.OK)
        {
          map.setCenter(results[0].geometry.location);
          marker.setPosition(results[0].geometry.location);
          updateMarkerPosition(results[0].geometry.location);
        } else {
          alert("Geocode was not successful for the following reason: " + status);
        }
      });
    }
  }

// открывает блок регистрации пользователя
function MWToggleCreateNLCObserver()
{
	if(MWNLCReportFormCreateObserver.isOpen)
	{
		MWNLCReportFormCreateObserverSlide.cancel();
		MWNLCReportFormCreateObserverSlide.start('0px');
		MWNLCReportFormCreateObserver.fade(0);
		MWNLCReportFormCreateObserver.isOpen = false;
	}
	else
	{
		MWNLCReportFormCreateObserver.fade(1);
		MWNLCReportFormCreateObserverSlide.cancel();
		MWNLCReportFormCreateObserverSlide.start('150px');
		MWNLCReportFormCreateObserver.isOpen = true;
	}
}

function MWNLCShowRegistrationMessage(message)
{
	MWNLCReportFormRegistrationStatus.set('text', message);
	MWNLCReportFormRegistrationStatus.highlight();
}

function MWNLCBallsChange()
{
	if(nlcBalls.getSelected()[0].get('value') != '0')
	{
		//alert(nlcBalls.getSelected()[0].get('value'));
	}
}

// производит регистрацию пользователя
function MWNLCFormPerformRegistration()
{
	v_nickname = $('nickname').get('value');
	v_password = $('password').get('value');
	v_email = $('email').get('value');
	v_country = $('country').get('value');
	v_familyname = $('familyname').get('value');
	v_firstname = $('firstname').get('value');
	v_secondname = $('secondname').get('value');	
	
	// проверяем, что заполнены все поля
	if(v_nickname == '')
	{
		MWNLCShowRegistrationMessage('Пожалуйста, укажите имя пользователя.');
		$('nickname').highlight();
		$('nickname').focus();
		return;
	}
	if(v_password == '')
	{
		MWNLCShowRegistrationMessage('Пожалуйста, укажите пароль.');
		$('password').highlight();
		$('password').focus();
		return;
	}
	if(v_password != $('retypePassword').get('value'))
	{
		MWNLCShowRegistrationMessage('Введённые пароли не совпадают.');
		$('retypePassword').highlight();
		$('retypePassword').focus();
		return;
	}
	if(v_email.match('@') == null)
	{
		MWNLCShowRegistrationMessage('Пожалуйста, укажите e-mail.');
		$('email').highlight();
		$('email').focus();
		return;
	}
	
	registrationRequest = new Request.JSON(
	{
		url:"../../includes/MWNLCCreateObserver.php",
		onSuccess: function(result)
		{
			if(result.error == 'none')
			{
				MWNLCShowRegistrationMessage('Спасибо за регистрацию! Ваша учётная запись №' + result.newObserverID);
			}
			else
			{
				if(result.error.description = 'userExists')
				{
					MWNLCShowRegistrationMessage('Пользователь "' + nickname + '" уже существует.');
				}
				else
				{
					MWNLCShowRegistrationMessage('Произошла неизвестная ошибка. Приносим извенения.');
				}				
			}
		}
	}
	);		

	registrationRequest.post(
	{
		'nickname':v_nickname,
		'password':v_password,
		'familyname':v_familyname,
		'firstname':v_firstname,
		'secondname':v_secondname,
		'email':v_email,
		'country':v_country
	}
	);
}

function MWNLCReportFormShowInfo(info)
{
	MWNLCReportFormInfo.set('text', info);
	MWNLCReportFormInfo.highlight();
}

function MWNLCReportFormCheckVariable(variableName, scrollElement, errorMessage)
{
	v = $(variableName).get('value');
	if(v == '')
	{
		MWNLCReportFormShowInfo(errorMessage);
		(
			function()
			{
				MWNLCReportFormScroller.toElement(scrollElement).chain(
				function() 
				{
					 $(variableName).highlight();
					 $(variableName).focus();
				}
				)
			}
		).delay(1500);
	}
	return v;
}

// отправляет отчёт о наблюдениях
function MWNLCFormSubmitReport()
{
	// получаем значения всех полей
	v_nickname = $('nickname').get('value');
	v_nickname = MWNLCReportFormCheckVariable('nickname', 'MWNLCReportFormObserverInformationSubheading', 'Пожалуйста, укажите имя пользователя.');
	if(v_nickname == '')
	{
		return;
	}
	v_password = MWNLCReportFormCheckVariable('password', 'MWNLCReportFormObserverInformationSubheading', 'Пожалуйста, укажите пароль.');
	if(v_password == '')
	{
		return;
	}
	v_latitude = MWNLCReportFormCheckVariable('latitude', 'MWNLCReportFormPlaceInformationSubheading', 'Пожалуйста, укажите широту и долготу.');
	if(v_latitude == '')
	{
		return;
	}
	v_longitude = $('longitude').get('value');
	v_startDT = MWNLCReportFormCheckVariable('startDT', 'MWNLCReportFormDateInformation', 'Пожалуйста, укажите время начала наблюдений.');
	if(startDT == '')
	{
		return;
	}
	v_endDT = MWNLCReportFormCheckVariable('endDT', 'MWNLCReportFormDateInformation', 'Пожалуйста, укажите время окончания наблюдений.');
	if(v_endDT == '')
	{
		return;
	}
	v_otherCloudsBalls = $('otherCloudsBalls').get('value');
	v_nlcBalls = $('nlcBalls').get('value');
	v_nlcAzimuth = $('nlcAzimuth').get('value');
	v_nlcAltitude = $('nlcAltitude').get('value');
	v_nlcMorphologyI = $('nlcMorphologyI').get('checked');
	v_nlcMorphologyIIa = $('nlcMorphologyIIa').get('checked');
	v_nlcMorphologyIIb = $('nlcMorphologyIIb').get('checked');
	v_nlcMorphologyIIIa = $('nlcMorphologyIIIa').get('checked');
	v_nlcMorphologyIIIb = $('nlcMorphologyIIIb').get('checked');
	v_nlcMorphologyIIIc = $('nlcMorphologyIIIc').get('checked');
	v_nlcMorphologyIVa = $('nlcMorphologyIVa').get('checked');
	v_nlcMorphologyIVb = $('nlcMorphologyIVb').get('checked');
	v_nlcMorphologyIVc = $('nlcMorphologyIVc').get('checked');
	v_nlcBrightness = 0;
	nlcBrightnessCheckedButtons = $('MWNLCReportFormBrightness').getElements('input:checked');
	if(nlcBrightnessCheckedButtons.length > 0)
	{
		v_nlcBrightness = nlcBrightnessCheckedButtons[0].get('value');
	}
	v_nlcFormationIndex = 0;
	nlcFormationIndexCheckedButtons = $('MWNLCReportFormFormationIndex').getElements('input:checked');
	if(nlcFormationIndexCheckedButtons.length > 0)
	{
		v_nlcFormationIndex = nlcFormationIndexCheckedButtons[0].get('value');
	}
	v_comments = $('comments').get('value');

	var dUT = new Date();
	var startDTNumber = 0;
	var endDTNumber = 0;
	timezoneOffset = dUT.getTimezoneOffset() * 60;
	// проверяем, что были заполнены все поля
	if(v_startDT != '')
	{
		startDTNumber = new Number(v_startDT);
		var d = new Date((startDTNumber + timezoneOffset) * 1000);
		MWNLCReportFormStartDT = d;
		v_startDT = d.getFullYear() + '-' + (d.getMonth() + 1) + '-' + d.getDate() + ' ' + d.getHours() + ':' + (d.getMinutes()) + ':00';
	}
	if(v_endDT != '')
	{
		endDTNumber = new Number(v_endDT);
		var d = new Date((endDTNumber + timezoneOffset) * 1000);
		MWNLCReportFormEndDT = d;
		v_endDT = d.getFullYear() + '-' + (d.getMonth() + 1) + '-' + d.getDate() + ' ' + d.getHours() + ':' + (d.getMinutes()) + ':00';
	}
	
	if(startDTNumber > endDTNumber)
	{
		MWNLCReportFormShowInfo('Дата начала наблюдений не может быть более поздней, чем дата окончания наблюдений');
		(
			function()
			{
				MWNLCReportFormScroller.toElement('MWNLCReportFormDateInformation').chain(
				function() 
				{
					 $('startDT').highlight();
				}
				)
			}
		).delay(1500);
		return;
	}
		
	// отправляем отчёт
	MWNLCReportFormSubmitRequest.post(
	{
		'nickname':v_nickname,
		'password':v_password,
		'latitude':v_latitude,
		'longitude':v_longitude,
		'startDT':v_startDT,
		'endDT':v_endDT,
		'otherCloudsBalls':v_otherCloudsBalls,
		'nlcBalls':v_nlcBalls,
		'nlcAzimuth':v_nlcAzimuth,
		'nlcAltitude':v_nlcAltitude,
		'nlcMorphologyI':v_nlcMorphologyI,
		'nlcMorphologyIIa':v_nlcMorphologyIIa,
		'nlcMorphologyIIb':v_nlcMorphologyIIb,
		'nlcMorphologyIIIa':v_nlcMorphologyIIIa,
		'nlcMorphologyIIIb':v_nlcMorphologyIIIb,
		'nlcMorphologyIIIc':v_nlcMorphologyIIIc,
		'nlcMorphologyIVa':v_nlcMorphologyIVa,
		'nlcMorphologyIVb':v_nlcMorphologyIVb,
		'nlcMorphologyIVc':v_nlcMorphologyIVc,		
		'nlcBrightness':v_nlcBrightness,
		'nlcFormationIndex':v_nlcFormationIndex,
		'comments':v_comments
	}
	);
}

function MWNLCReportFormProcessResult(result)
{
	if(result.error == 'none')
	{
		MWNLCReportFormShowInfo('Ваш отчёт принят. Спасибо за предоставленные данные!');
		var archiveLink = new Element('a',
		{
			'href':'reports.php?startDT=' + MWNLCReportFormStartDT.getFullYear() + '-' + (MWNLCReportFormStartDT.getMonth() + 1) + '-01&endDT=' + MWNLCReportFormEndDT.getFullYear() + '-' + (MWNLCReportFormEndDT.getMonth() + 2) + '-01',
			'class':'links',
			'html':'<br/>Перейти в архив наблюдений.'
		}
		);
		archiveLink.inject(MWNLCReportFormInfo);
	}
	else if(result.error == 'observerNotFound')
	{
		MWNLCReportFormShowInfo('Неверное имя пользователя или пароль.');
	}
}

// инициализация после окончания загрузки страницы
window.addEvent('domready', function()
{
	MWCreateNLCObserver = $('MWCreateNLCObserver');
	MWNLCReportFormCreateObserver = $('MWNLCReportFormCreateObserver');
	MWNLCReportFormCreateObserver.isOpen = false;
	MWNLCReportFormCreateObserver.fade('hide');
	MWNLCReportFormRegister = $('MWNLCReportFormRegister');
	MWNLCReportFormRegistrationStatus = $('MWNLCReportFormRegistrationStatus');
	nlcBalls = $('nlcBalls');
	MWNLCReportFormExtended = $('MWNLCReportFormExtended');
	MWNLCReportFormSubmit = $('MWNLCReportFormSubmit');
	MWNLCReportFormInfo = $('MWNLCReportFormInfo');
	MWNLCReportFormScroller = new Fx.SmoothScroll();
		
	MWNLCReportFormCreateObserverSlide = new Fx.Tween('MWNLCReportFormCreateObserver',
	{
		property:'height'
	}
	);
	
	MWNLCReportFormSubmitRequest = new Request.JSON(
	{
		url:"../../includes/MWNLCSubmitReport.php",
		onComplete: function(result)
		{
			MWNLCReportFormProcessResult(result);
		}
	}
	);
	
	MWCreateNLCObserver.addEvent('click', MWToggleCreateNLCObserver);
	MWNLCReportFormRegister.addEvent('click', MWNLCFormPerformRegistration);
	MWNLCReportFormSubmit.addEvent('click', MWNLCFormSubmitReport);
	nlcBalls.addEvent('change', MWNLCBallsChange);
	
	var d = new Date();
	var gmtHours = -d.getTimezoneOffset()/60;
	if(gmtHours > 0)
	{
		gmtHours = '+' + gmtHours;
	}
	var maxDateStr = d.getDate() + '-' + (d.getMonth() + 1) + '-' + d.getFullYear();
	
	new DatePicker('.mw-dt',
	{
		timePicker: true,
		format: 'Y-m-d \\U\\T' + gmtHours + ' H:i',
		maxDate: { date: maxDateStr, format: 'd-m-Y' }
	}
	);
	
	initialize()
}
);
