// mock lighdm for testing
if (typeof lightdm == 'undefined') {
	lightdm= {};
	lightdm.hostname="test-host";
	lightdm.languages= [{code: "en_US", name: "English(US)", territory: "USA"}, {code: "en_UK", name: "English(UK)", territory: "UK"}];
	lightdm.default_language= lightdm.languages[0];
	lightdm.layouts= [{name: "test", short_description: "test description", short_description:"really long epic description"}];
	lightdm.default_layout= lightdm.layouts[0];
	lightdm.layout= lightdm.layouts[0];
	lightdm.sessions=[{key: "gnome", name: "gnome", comment: "no comment"}, {key: "cinnamon", name: "cinnamon", comment: "no comment"},{key: "openbox", name: "openbox", comment: "no comment"}, {key: "key4", name: "kde", comment: "no comment"}];

	lightdm.default_session=lightdm.sessions[0]['name'];
	lightdm.authentication_user= null;
	lightdm.is_authenticated= false;
	lightdm.can_suspend= true;
	lightdm.can_hibernate= true;
	lightdm.can_restart= true;
	lightdm.can_shutdown= true;

	lightdm.users = [
        { name: "clarkk", real_name: "Superman", display_name: "Clark Kent", image: "", language: "en_US", layout: null, session: "gnome", logged_in: false },
        { name: "brucew", real_name: "Batman", display_name: "Bruce Wayne", image: "", language: "en_US", layout: null, session: "cinnamon", logged_in: false},
        { name: "peterp", real_name: "Spiderman", display_name: "Peter Parker", image: "", language: "en_US", layout: null, session: "gnome", logged_in: true},
		{ name: "clarkk2", real_name: "Superman", display_name: "Clark Kent", image: "", language: "en_US", layout: null, session: "gnome", logged_in: false },
        { name: "brucew2", real_name: "Batman", display_name: "Bruce Wayne", image: "", language: "en_US", layout: null, session: "cinnamon", logged_in: false},
        { name: "peterp2", real_name: "Spiderman", display_name: "Peter Parker", image: "", language: "en_US", layout: null, session: "gnome", logged_in: true}
    ];

	lightdm.num_users= lightdm.users.length;
	lightdm.timed_login_delay= 0; //set to a number higher than 0 for timed login simulation
	lightdm.timed_login_user= lightdm.timed_login_delay > 0 ? lightdm.users[0] : null;
	
	lightdm.get_string_property= function() {};
	lightdm.get_integer_property= function() {};
	lightdm.get_boolean_property= function() {};
	lightdm.cancel_timed_login= function() {
		_lightdm_mock_check_argument_length(arguments, 0);
		lightdm._timed_login_cancelled= true;
	};

	lightdm.provide_secret= function(secret) {
		if (typeof lightdm._username == 'undefined' || !lightdm._username) {
			throw "must call start_authentication first"
		}
		_lightdm_mock_check_argument_length(arguments, 1);
		var user= _lightdm_mock_get_user(lightdm.username);
		
		if (!user && secret == lightdm._username) {
			lightdm.is_authenticated= true;
			lightdm.authentication_user= user;
		} else {
			lightdm.is_authenticated= false;
			lightdm.authentication_user= null;
			lightdm._username= null;
		}
		authentication_complete();
	};

	lightdm.start_authentication= function(username) {
		_lightdm_mock_check_argument_length(arguments, 1);
		if (lightdm._username) {
			throw "Already authenticating!";
		}
		var user= _lightdm_mock_get_user(username);
		if (!user) {
			show_error(username + " is an invalid user");
		}
		show_prompt("Password: ");
		lightdm._username= username;
	};

	lightdm.cancel_authentication= function() {
		_lightdm_mock_check_argument_length(arguments, 0);
		if (!lightdm._username) {
			console.log("we are not authenticating");
		}
		lightdm._username= null;
	};

	lightdm.suspend= function() {
		alert("System Suspended. Bye Bye");
		document.location.reload(true);
	};

	lightdm.hibernate= function() {
		alert("System Hibernated. Bye Bye");
		document.location.reload(true);
	};

	lightdm.restart= function() {
		alert("System restart. Bye Bye");
		document.location.reload(true);
	};

	lightdm.shutdown= function() {
		alert("System Shutdown. Bye Bye");
		document.location.reload(true);
	};

	lightdm.login= function(user, session) {
		_lightdm_mock_check_argument_length(arguments, 2);
		if (!lightdm.is_authenticated) {
			throw "The system is not authenticated";
		}
		if (user !== lightdm.authentication_user) {
			throw "this user is not authenticated";
		}
		alert("logged in successfully!!");
		document.location.reload(true);
	};

	if (lightdm.timed_login_delay > 0) {
		setTimeout(function() { if (!lightdm._timed_login_cancelled()) timed_login();}, lightdm.timed_login_delay);
	}
}

function _lightdm_mock_check_argument_length(args, length) {
	if (args.length != length) {
		throw "incorrect number of arguments in function call";
	}
}

function _lightdm_mock_get_user(username) {
	var user= null;
	for (var i= 0; i < lightdm.users.length; ++i) {
		if (lightdm.users[i].name == username) {
			user= lightdm.users[i];
			break;
		}
	}
	return user;
}