/* ------------------------------------------------------------------

File:		user.js
Abstract:	user account handling (new user, login, logout)
Version:	0.12 (not yet used)
Author:		Pascal Dreer

------------------------------------------------------------------ */


var gUID = 0;
var gUsername = "";
var gUserEmail = "";
var gUser_request = null;


var gWaypoint_request = null;



// -----------------------------------------------------------
// Handle Prefs
// -----------------------------------------------------------


function initPrefs()
{
	document.getElementById('prefsDiv').style.visibility = "hidden";
}



function showPrefs()
{
	if (document.getElementById('prefsDiv').style.visibility == "visible") {
		document.getElementById('prefsDiv').style.visibility = "hidden";
		return;
	}
	
	hideAllUserDiv();
	document.getElementById('prefsDiv').style.visibility = "visible";
	
	var btn = document.getElementById("prefs_btn"); 
	btn.onclick = function(ev) { 
			closePrefs();
		}; 
}


function closePrefs()
{
	var showMetar = document.getElementById("prefs_metar").checked;
	gConfigShowCH1903 = document.getElementById("prefs_ch1903").checked;
	var showAirspace = document.getElementById("prefs_airspace").checked; 
		
	if (showMetar) {
		gConfigShowMetar = true;
		startMetarInterval();
	}
	else {
		gConfigShowMetar = false;
		stopMetarInterval();
	}
	document.getElementById("footer").innerText = "";
	displayMPList();
	
	
	if (!gConfigShowAirspace && showAirspace) {
		displayAirspace();
		gConfigShowAirspace = true;
	}
	else
		if (!showAirspace) {
			gConfigShowAirspace = false;
			hideAirspace();
		}
	
	
	
	document.getElementById('prefsDiv').style.visibility = "hidden";
}




// -----------------------------------------------------------
// Handle User
// -----------------------------------------------------------


function hideAllUserDiv()
{
	document.getElementById('signInDiv').style.visibility = "hidden";
	document.getElementById('newUserDiv').style.visibility = "hidden";
	document.getElementById('editUserDiv').style.visibility = "hidden";
	document.getElementById('prefsDiv').style.visibility = "hidden";
}
	


function initUser()
{
	gUID = 0;
	gUsername = "";
	gUserEmail = "";
	gUser_request = null;
	
	var line0 = "<span class='infoText' style='cursor:pointer; color:#0000FF;'><a href='javascript:void(showPrefs())'>Preferences</a> | <span style='text-decoration:underline'><a onClick='javascript:void(openWinDisclaimer())' target='_blank'>Disclaimer</a></span> | <span style='text-decoration:underline'><a onClick='javascript:void(openWinHelp())' target='_blank'>Help</a></span></span>";
	var line1 = "<span class='infoText'><a href='javascript:void(showSignIn())'>" + "Sign In" + "</a></span>";
	var line2 = "<span class='infoText'><a href='javascript:void(showNewUserAccount())'>" + "New Acccount" + "</a></span>";
	
	document.getElementById("userDisplayDiv").innerHTML = line0; // + "<br><br>" + line1 + " | " + line2;
	
	hideAllUserDiv();
}



function displaySignInOk()
{
	if (gUsername != "") {
//		var userText = gUsername + " (" + gUserEmail + ")";
		var userText = gUserEmail;
}
	else
		var userText = gUserEmail;
		
	if (gUserEmail.length > 24)
		var userText = gUserEmail.substring(0,23) + "...";
	else
		var userText = gUserEmail;
	
	var line0 = "<span class='infoText'><a href='javascript:void(showPrefs())'>Preferences</a> | <a href='javascript:openWinDisclaimer()' target='_blank'>Disclaimer</a> | <a href='javascript:openWinHelp()' target='_blank'>Help</a></span>";
	var line1 = "<span class='infoText'><a href='javascript:void(showEditUserAccount())'>" + userText + "</a></span>";
	var line2 = "<span class='infoText'><a href='javascript:void(showSignOut())'>" + "Sign Out" + "</a></span>";
	
	document.getElementById("userDisplayDiv").innerHTML = line0; // + "<br><br>" + line1 + " | " + line2;
}



function showSignOut()
{	
	// remive user waypoints from map
	removeUserWaypoints();
	
	initUser();
}




function showSignIn()
{
	if (document.getElementById('signInDiv').style.visibility == "visible") {
		document.getElementById('signInDiv').style.visibility = "hidden";
		return;
	}
	
	hideAllUserDiv();
	document.getElementById('signInDiv').style.visibility = "visible";
	
	
	var btn = document.getElementById("login_btn"); 
	btn.onclick = function(ev) { 
			closeSignIn(true);
		}; 

	var btn = document.getElementById("cancel_btn"); 
	btn.onclick = function(ev) { 
			closeSignIn(false);
		}; 
	
	if (document.cookie) {
		var a = document.cookie;
		var b = a.indexOf("uid=") + 4;
		if (b >= 4) {
			var c = a.indexOf(";",b-1);
			if (c > 0)
				var cookie_email = a.substring(b,c);
			else
				var cookie_email = a.substring(b,a.length);
			
			if (cookie_email.length <= 1) {
				document.getElementById("signIn_email").value = "";
				document.getElementById("signIn_remember").checked = false;
			}
			else {
 				document.getElementById("signIn_email").value = cookie_email;
				document.getElementById("signIn_remember").checked = true;
			}
		}
	}
	else {
		document.getElementById("signIn_email").value = "";
		document.getElementById("signIn_remember").checked = false;
	}
}


function closeSignIn(signin)
{
	if (signin) {
		var email = document.getElementById("signIn_email").value;
		var passwd = document.getElementById("signIn_passwd").value;
		
		if (email.length <= 0) {
			alert("e-mail field is empty. Enter your e-mail address.");
			return;
		}
		else
			if (passwd.length <= 0)	 {	
				alert("Password field is empty. Enter your password.");
				return;
			}
			else
				userQuery('sig',0,email,"",passwd);
			
		if (document.getElementById("signIn_remember").checked) {
			document.cookie = "uid=" + email + "; expires=Fri Jan 01 2010 00:00:01;";
//			alert("checked:" + document.cookie);
		}
		else
			document.cookie = "uid=0; expires=Wed Jan 01 1970 00:00:01;";
	}
	else
		document.getElementById('signInDiv').style.visibility = "hidden";
		
	document.getElementById("signIn_email").value = "";
	document.getElementById("signIn_passwd").value = "";
}




function showNewUserAccount()
{
	if (document.getElementById('newUserDiv').style.visibility == "visible") {
		document.getElementById('newUserDiv').style.visibility = "hidden";
		return;
	}

	hideAllUserDiv();
	document.getElementById('newUserDiv').style.visibility = "visible";
	

	var submit = document.getElementById("new_btn"); 
	submit.onclick = function(ev) { 
			closeNewUserAccount(true);
		}; 
	var submit = document.getElementById("cancel2_btn"); 
	submit.onclick = function(ev) { 
			closeNewUserAccount(false);
		}; 
}




function closeNewUserAccount(newUser)
{
	if (newUser) {
		var email = document.getElementById("new_email").value;
		var passwd1 = document.getElementById("new_passwd1").value;
		var passwd2 = document.getElementById("new_passwd2").value;
		var uname = "Test";
		
		if ((passwd1 == passwd2) && email.length > 3)
			userQuery('cre',0,email,uname,passwd1);
	}
	else
		document.getElementById('newUserDiv').style.visibility = "hidden";
		
	
	document.getElementById("new_email").value = "";
	document.getElementById("new_passwd1").value = "";
	document.getElementById("new_passwd2").value = "";
}



function showEditUserAccount()
{
	if (gUID > 0) {
		if (document.getElementById('editUserDiv').style.visibility == "visible") {
			document.getElementById('editUserDiv').style.visibility = "hidden";
			return;
		}
		
		hideAllUserDiv();
		document.getElementById('editUserDiv').style.visibility = "visible";
		
		var btn = document.getElementById("edit_btn"); 
		btn.onclick = function(ev) { 
			closeEditUserAccount(true);
		}; 

		var btn = document.getElementById("cancel3_btn"); 
		btn.onclick = function(ev) { 
			closeEditUserAccount(false);
		}; 
		
		document.getElementById("edit_delete").checked = false;
		document.getElementById("edit_email").value = gUserEmail;
		document.getElementById("edit_passwd").value = "";

	}
}


function closeEditUserAccount(editUser)
{
	if (editUser) {
		var email = document.getElementById("edit_email").value;
		var passwd = document.getElementById("edit_passwd").value;
		
		if (document.getElementById("edit_delete").checked && passwd.length > 3) {
			userQuery('del',gUID,email,"",passwd);
		}
		else
			if (passwd.length > 3 && email.length > 3)
				userQuery('mod',gUID,email,"",passwd);
	}
	else
		document.getElementById('editUserDiv').style.visibility = "hidden";
		
	
	document.getElementById("edit_email").value = "";
	document.getElementById("edit_passwd").value = "";
}





// -----------------------------------------------------------
// User AJAX routines
// -----------------------------------------------------------

function processUserReqSig()
{
	var err = 0;
	
    if (gUser_request.readyState == 4) {
        // only if "OK"
        if (gUser_request.status == 200) {
//			alert(gUser_request.responseText);
			if (gUser_request.responseText != "false") {
				
				var sep = gUser_request.responseText.indexOf('\t');
				
				gUID = parseInt(gUser_request.responseText.substring(0,sep),10);
				gUsername = gUser_request.responseText.substring(sep+1,gUser_request.responseText.length);
				displaySignInOk();
				// load waypoints
				waypointQuery(gUID);
				document.getElementById('signInDiv').style.visibility = "hidden";
			}
			else {
				alert("Sign-in failed. Please enter your correct e-mail-address and password!");
			}
			
			
		}
		else {
			alert("Failed to retrieve data (" + gUser_request.status + "/" + err + ")");
		}
	}
	else {
	}
}


function processUserReqCre()
{
	var err = 0;
	
    if (gUser_request.readyState == 4) {
        // only if "OK"
        if (gUser_request.status == 200) {
//			alert(gUser_request.responseText);
			if (gUser_request.responseText != "false") {
				
				gUID = parseInt(gUser_request.responseText,10);
				if (gUID > 0) {
					gUsername = "";
					displaySignInOk();
				}
				else
					alert("Failed to create account");
			}
			document.getElementById('newUserDiv').style.visibility = "hidden";
			
		}
		else {
			alert("Failed to retrieve data (" + gUser_request.status + "/" + err + ")");
		}
	}
	else {
	}
}


function processUserReqDel()
{
	var err = 0;
	
    if (gUser_request.readyState == 4) {
        // only if "OK"
        if (gUser_request.status == 200) {
//			alert(gUser_request.responseText);
			if (gUser_request.responseText == "true") {
				alert("Account deleted");
				initUser();
				// remove waypoints too
			}
			else
				alert("Failed to delete account");
			document.getElementById('editUserDiv').style.visibility = "hidden";
			
		}
		else {
			alert("Failed to retrieve data (" + gUser_request.status + "/" + err + ")");
		}
	}
	else {
	}
}


function processUserReqMod()
{
	var err = 0;
	
    if (gUser_request.readyState == 4) {
        // only if "OK"
        if (gUser_request.status == 200) {
//			alert(gUser_request.responseText);
			if (gUser_request.responseText.indexOf("true")) {
				alert("Account modified");
				displaySignInOk();
			}
			else
				alert("Failed to delete account");
			document.getElementById('editUserDiv').style.visibility = "hidden";
			
		}
		else {
			alert("Failed to retrieve data (" + gUser_request.status + "/" + err + ")");
		}
	}
	else {
	}
}





function userQuery(cmd,uid,email,username,passwd)
{	
	gUser_request = false;
    if (typeof XMLHttpRequest != 'undefined') {
    	try {
			gUser_request = new XMLHttpRequest();
        } catch(e) {
			gUser_request = false;
        }
    } else if(window.ActiveXObject) {
       	try {
        	gUser_request = new ActiveXObject("Msxml2.XMLHTTP");
      	} catch(e) {
        	try {
          		gUser_request = new ActiveXObject("Microsoft.XMLHTTP");
        	} catch(e) {
          		gUser_request = false;
        	}
		}
    }
	
	if (gUser_request) {
//		gUser_request.setRequestHeader("Cache-Control", "no-cache");
//		gUser_request.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
		var localfile = document.URL.indexOf("file:",0);
		if (localfile < 0)
			var url = document.URL.substring(0,(document.URL.indexOf(".ch/") + 4)) + "cgi-local/";
		else
			var url = "http://flightmap.ch/cgi-local/";
					

		switch (cmd) {
			case 'cre': 	url += "User.pl?cmd=Create&email=" + email + "&pword=" + passwd + "&name=" + username;
							gUser_request.onreadystatechange = processUserReqCre;
							gUserEmail = email;
							break;
			case 'mod':		url += "User.pl?cmd=Modify&email=" + email + "&pword=" + passwd + "&uid=" + uid;
							gUser_request.onreadystatechange = processUserReqMod;
							break;	
			case 'sig': 	url += "User.pl?cmd=SignIn&email=" + email + "&pword=" + passwd;
							gUser_request.onreadystatechange = processUserReqSig;
							gUserEmail = email;
							break;
			case 'del':		url += "User.pl?cmd=Delete&pword=" + passwd + "&uid=" + uid;
							gUser_request.onreadystatechange = processUserReqDel;
							break;
			default: ;
		}
		gUser_request.open("GET",url,true);
		gUser_request.send(null);
	}
	
}






function processWaypointReqLoad()
{
	var err = 0;
	
    if (gWaypoint_request.readyState == 4) {
        // only if "OK"
        if (gWaypoint_request.status == 200) {
			if (gWaypoint_request.responseText.length > 0) {
//				alert(gWaypoint_request.responseText);
				loadUserMappoints(gWaypoint_request.responseText);
			}
			else
				alert("Failed to load waypoints");
			
		}
		else {
			alert("Failed to retrieve data (" + gWaypoint_request.status + "/" + err + ")");
		}
	}
	else {
	}
}





// -----------------------------------------------------------
// Waypoint AJAX routines
// -----------------------------------------------------------

function waypointQuery(uid)
{	
	gWaypoint_request = false;
    if (typeof XMLHttpRequest != 'undefined') {
    	try {
			gWaypoint_request = new XMLHttpRequest();
        } catch(e) {
			gWaypoint_request = false;
        }
    } else if(window.ActiveXObject) {
       	try {
        	gWaypoint_request = new ActiveXObject("Msxml2.XMLHTTP");
      	} catch(e) {
        	try {
          		gWaypoint_request = new ActiveXObject("Microsoft.XMLHTTP");
        	} catch(e) {
          		gWaypoint_request = false;
        	}
		}
    }
	
	if (gWaypoint_request) {
		var localfile = document.URL.indexOf("file:",0);
		if (localfile < 0)
			var url = document.URL.substring(0,(document.URL.indexOf(".ch/") + 4)) + "cgi-local/";
		else
			var url = "http://flightmap.ch/cgi-local/";

		url += "WaypointLoadList.pl?uid=" + uid;
		gWaypoint_request.onreadystatechange = processWaypointReqLoad;

		gWaypoint_request.open("GET",url,true);
		gWaypoint_request.send(null);
	}
	
}





function waypointSave(num, wpid, uid, code, lat, lng, name, area, desc, type, elev, urlRef, urlData, country, shared)
{	
	gWaypoint_request = false;
    if (typeof XMLHttpRequest != 'undefined') {
    	try {
			gWaypoint_request = new XMLHttpRequest();
        } catch(e) {
			gWaypoint_request = false;
        }
    } else if(window.ActiveXObject) {
       	try {
        	gWaypoint_request = new ActiveXObject("Msxml2.XMLHTTP");
      	} catch(e) {
        	try {
          		gWaypoint_request = new ActiveXObject("Microsoft.XMLHTTP");
        	} catch(e) {
          		gWaypoint_request = false;
        	}
		}
    }
	
	if (gWaypoint_request) {
		var localfile = document.URL.indexOf("file:",0);
		if (localfile < 0)
			var url = document.URL.substring(0,(document.URL.indexOf(".ch/") + 4)) + "cgi-local/";
		else
			var url = "http://flightmap.ch/cgi-local/";
		
		if (wpid == null)
			url += "WaypointSave.pl?uid=" + uid + "&name=" + name + "&lat=" + lat + "&lng=" + lng + "&type=" + type + "&icao=" + code + "&country=" + country +
					"&area=" + area + "&elev=" + elev + "&desc=" + desc + "&urlDesc=" + urlRef + "&urlData=" + urlData + "&public=" + convertBooleanToInt(shared);
		else
			url += "WaypointSave.pl?wpid=" + wpid + "&uid=" + uid + "&name=" + name + "&lat=" + lat + "&lng=" + lng + "&type=" + type + "&icao=" + code + "&country=" + country +
					"&area=" + area + "&elev=" + elev + "&desc=" + desc + "&urlDesc=" + urlRef + "&urlData=" + urlData + "&public=" + convertBooleanToInt(shared);
		
		gWaypoint_request.onreadystatechange = processWaypointReqSave;

		gWaypoint_request.open("GET",url,true);
		gWaypoint_request.send(null);
	}
	
	function processWaypointReqSave()
	{
	var err = 0;
	
    if (gWaypoint_request.readyState == 4) {
        // only if "OK"
        if (gWaypoint_request.status == 200) {
//			alert(gUser_request.responseText);
			if (gWaypoint_request.responseText.length > 0) {
				alert(gWaypoint_request.responseText);
				var wpid = parseInt(gWaypoint_request.responseText);
				if (wpid >= 10000)
					gMappoints[num].id = wpid;
				// save wpid in mappoint
			}
			else
				alert("Failed to save waypoint");
			
		}
		else {
			alert("Failed to retrieve data (" + gWaypoint_request.status + "/" + err + ")");
		}
	}
	else {
	}
	}
}




function processWaypointReqDelete()
{
	var err = 0;
	
    if (gWaypoint_request.readyState == 4) {
        // only if "OK"
        if (gWaypoint_request.status == 200) {
//			alert(gUser_request.responseText);
			if (gUser_request.responseText.indexOf("true")) {
				// that's it....
			}
			else
				alert("Failed to delete waypoint");
			
		}
		else {
			alert("Failed to retrieve data (" + gWaypoint_request.status + "/" + err + ")");
		}
	}
	else {
	}
}

function waypointDelete(wpid, uid)
{	
	gWaypoint_request = false;
    if (typeof XMLHttpRequest != 'undefined') {
    	try {
			gWaypoint_request = new XMLHttpRequest();
        } catch(e) {
			gWaypoint_request = false;
        }
    } else if(window.ActiveXObject) {
       	try {
        	gWaypoint_request = new ActiveXObject("Msxml2.XMLHTTP");
      	} catch(e) {
        	try {
          		gWaypoint_request = new ActiveXObject("Microsoft.XMLHTTP");
        	} catch(e) {
          		gWaypoint_request = false;
        	}
		}
    }
	
	if (gWaypoint_request) {
		var localfile = document.URL.indexOf("file:",0);
		if (localfile < 0)
			var url = document.URL.substring(0,(document.URL.indexOf(".ch/") + 4)) + "cgi-local/";
		else
			var url = "http://flightmap.ch/cgi-local/";
		
		if (wpid == null)
			url += "WaypointDelete.pl?uid=" + uid;
		else
			url += "WaypointDelete.pl?wpid=" + wpid + "&uid=" + uid;
		
		gWaypoint_request.onreadystatechange = processWaypointReqDelete;

		gWaypoint_request.open("GET",url,true);
		gWaypoint_request.send(null);
	}
}

