/*
*	Main MAPSACK namespace / def file
*/

var BR_MOZILLA = 0;
var BR_IE = 1;

var MS_FULLSCREEN = 0;
var MS_MINI = 1;
var MS_MIDI = 2;


//Main stats object
var MS = {
	map : null,
	
	version: 1,
	browser: BR_MOZILLA,
	
	started : false,
	mode : null,
	
	source: 'MS',
	show_sources : '',
	
	security : {
		allow_users : true,
		allow_posts : true,
		allow_votes : true,
		allow_comments: true,
		allow_bookmarks : true,
		allow_messages : true,
		allow_photos : true,
		allow_tagging : true
	},
	
	user : null,
	
	init : function(mode){
		//Fullscreen or not?
		MS.mode = mode;
		
		//Check browser type...
		if(navigator.appName == "Microsoft Internet Explorer"){
			MS.browser = BR_IE;
		}
		
		ImagePreload.preloadImages(UIConfig.getPreloadImages(), MapsackStartup);
			
		//Clear up memory issues
		$('body').onunload = GUnload;
		window.onunload = GUnload;
	},
	
	setStatus : function(message, showspinner){
		Status.setStatus(message,showspinner);
	},
	
	login : function(){
		var url = "/interface/user/login.php?mssource="+MS.source;
		
		var username = $('login_uname').value;
		var password = $('login_pass').value;
		
		var data = 
		{
			"username": username, "password": password
		};
		
		MS.setStatus("Loading...", true);
		Conn.doPost(url, data, MS.loginCallback);
	}, 
	
	loginCallback : function(json){
		
		var response = eval('(' + json + ')');
		MS.setStatus("", false);
		
		if (response['result'] == 'fail'){
			var errorblock = $('login_error');
			errorblock.innerHTML = response['message'];
			errorblock.style.display = 'block';
			
			MS.logonWin.recenter();
			
		} else {
			//var url = Explore.getLinkToView()+MS.reloadGets;
			//location.href = url;
			
			MS.doLogin(response['user_id'],response['username'], response['mycon_url']);
			MS.logonWin.hide();
		
			if (State.mode == State.MODE_ADD){
				Explore.beginAdd();	
			}
		}
	},
	
	doLogin : function(user_id, uname, mycon_url){
		MS.user = {};
		MS.user.id = user_id;
		MS.user.username = uname;
		MS.user.mycon_url = mycon_url;
	
		var welcome = $("welcome");
		
		if ($('button_messages')) $('button_messages').style.display = '';
		
		if (welcome){
			var html= 'Hi, welcome back <a href="#" id="own_username" onclick="Explore.showUserProfile(\''+uname+'\'); return false;">'+uname+'</a> ';
			if ((mycon_url != null) && (mycon_url != '')){
				html += '<img src="'+mycon_url+'" align="absmiddle" class="myconL" width="20" height="20" id="own_mycon" /> ';	
			} 
			html += '[<a href="#" onclick="MS.logout();">logout</a>]';
			
			welcome.innerHTML = html;
		}
		
		var welcome_mini = $("welcome-mini");
		if (welcome_mini){
			welcome_mini.innerHTML = '<a href="#" onclick="MS.logout();">Sign out</a>';
		}

		//if (Viewer.showing) Viewer.reload();
		if (SViewer.showing) SViewer.reload();
	},
	
	signup : function(){
		var url = "/interface/user/signup.php?mssource="+MS.source;
		var username 		= $('signup_uname').value;
		var password 		= $('signup_pass').value;
		var password_c 		= $('signup_pass_c').value;
		var email_address 	= $('signup_email').value;
		var profile_country 	= $('profile_country').value;
	
		var data = 
		{
			"username": username, "password": password,"password_c": password_c, "email_address" : email_address, "profile_country" : profile_country
		};
		MS.setStatus("Loading...", true);
		Conn.doPost(url, data, MS.signupCallback);
	},
	
	logout : function(){
		var base = 'explore';
		if (MS.MS_MODE == MS_MIDI){
			base = 'external/'+MS.source.toLowerCase()+'/map.php';
		} 
		window.location.href = '/logout.php?goto='+escape(Explore.getLinkToView(base));
	},
	
	signupCallback : function(json){
		//alert(json);
		var response = eval('(' + json + ')');
		MS.setStatus("", false);
		
		
		if (response['result'] == 'fail'){
			var errorblock = $('signup_error');
			errorblock.innerHTML = response['message'];
			
			$('error_signup_uname').innerHTML = response['errors']['username'];
			$('error_signup_email').innerHTML = response['errors']['email_address'];
			$('error_signup_password').innerHTML = response['errors']['password'];
			errorblock.style.display = 'block';
			
			MS.logonWin.recenter();
		} else {
			MS.doLogin(response['user_id'],response['username'], response['mycon_url']);
			
			//TODO: A nicer welcome screen
			alert("Welcome: "+response['username']);
			MS.logonWin.hide();
			
			if (State.mode == State.MODE_ADD){
				Explore.beginAdd();	
			}
		}
	},
	
	logonWin : null,
	
	loginOrSignup : function(mode){
		
		if (mode == null) gets = 'signup';
		
		//Viewer.show('Login or sign up','/interface/view/login-signup.php');
		if (MS.logonWin == null)
			MS.logonWin = new JsWin('Join or signin.', {width: 500, shadowMode: 'border'});
		
		MS.logonWin.onClose = function(){State.mode = State.MODE_EXPLORE; MS.setStatus('',false); Explore.allowLoading(); }
		
		MS.logonWin.setContentHTML('<h2 style="padding: 30px 10px;">Loading...</h2>');
		MS.logonWin.setContentURL('/interface/view/login-signup.php?type='+mode, false);
		MS.logonWin.show();
		
		//MS.setStatus('loading...',true);
		//Conn.doGet('/interface/view/login-signup.php?type='+mode, null, MS.logonLoadFinished);
	}
};



/*
//General utility functions
function general_removeAllChildren(node){
	while (node.childNodes.length > 0){
			node.removeChild(node.childNodes[0]);
	}
}
function in_array(the_needle, the_haystack){
		if (!the_needle) return;
	
        var the_hay = the_haystack.toString();
        if(the_hay == ''){
            return false;
        }
		//the_needle = the_needle.replace(/[0-9]+/, '');
        var the_pattern = new RegExp(the_needle, 'g');
        var matched = the_pattern.test(the_haystack);
        return matched;
}
	
function general_removeFromArray(thing, things, firstOnly){
	var new_things = new Array();
	var found = false;
	
	for (var i = things.length-1; i >= 0; i--){
		var itm = things[i];
		if ((itm != thing) || (found && firstOnly)) 
			new_things.push(itm);
		else
			found = true;
	}
	return new_things;
}

function nl2br(str){
	return str.replace(/\n/g,"<br />");
}

function br2nl(str){
	return str.replace(/\n/g,"").replace(/<br>/ig,"\n");
}

function inside(px,py, x1, x2, y1, y2){

	if (x1 < x2)
		return ((px > x1) && (px < x2) && (py > y1) && (py < y2));	
	else
		return (((px > x1) || (px < x2)) && (py > y1) && (py < y2));
	
}

//Sort objects (i.e. tags) on score
function objectScoreCompare(a,b){
		return (b.score - a.score);
}

//StringBuffer class
function StringBuffer() {
	this.strings = new Array();
}

StringBuffer.prototype.append = function(str){
	this.strings.push(str);
}

StringBuffer.prototype.toString = function(){
	return this.strings.join("");
}
//END: StringBuffer class

function nullFunction(text){
	MS.setStatus('', false);
	
	Viewer.reloadIfShown();
}

function nullFunctionNoReload(){
	MS.setStatus('', false);
}

function notready(){
	alert("Coming soon!");
}


function stringsFlattenLinks(string){
	var in_pattern = '(<a[^>]+href="((http:\/\/)?www.[a-zA-Z0-9_-]+.[a-zA-Z]+(\/[^"]*)?)"[^>]*>[^<]*<\/a>)';
	var re = new RegExp(in_pattern,"gi");
	//alert(in_pattern);
	var out_pattern = "$2";
	
	string = string.replace(re,out_pattern);
	return string;
}

function stringSubstring(string,len) {
	string = string.replace(/<[^>]+>/g, '');
	
	if (string.length > len)
		string = string.substring(0,len)+'...';
	
	return string;
}
*/