BFW_COOKIE = 'bf2-b';
BFW_INFO_COOKIE = 'bf2-b_info';
DEFAULT_USER = 'default_user';

var BF_User = function() {
	
	this.isLoggedIn = function() {
		if(BFW_Util.getCookie(BFW_COOKIE)) {
			return true;
		} else {
			return false;
		}
	}

	this.getSessionKey = function() {
		return BFW_Util.getCookie(BFW_COOKIE);
	}
		
	this.logout = function(noreload) {
		BFW_Util.deleteCookie(BFW_COOKIE);
		BFW_Util.deleteCookie(BFW_INFO_COOKIE);
		BFW_Util.deleteCookie(DEFAULT_USER);
		if(! noreload) window.location.reload();			
	}
	
	this.getUserInfo = function() {
		var cv = BFW_Util.getCookie(BFW_INFO_COOKIE);
		var params = BFW_Util.getParameters({str: cv, 'escape': true} );
		var us = BFW_Util.getCookie(DEFAULT_USER);
		if ( params && us ) {
			params.default_user = BFW_Util.getParameters({str:us,'escape':true});
		}
		return params || {};
	}
	
	this.load_user_settings = function() {
		if( this.isLoggedIn() && ( ! this.getUserInfo().username || this.getUserInfo().username != this.getUsernameFromSession() ) ) {
			try {
				var bl = new BF_Login({action: 'userdata'});
				bl.init({action: 'userdata'});
				bl.cookieLogin();
			} catch(e) {
				console.error(e);
			}
		} else if(this.isLoggedIn() && bf_username == this.getUserInfo().username && ! document.location.href.match(/\/submissions\//) ) {

			// load chicklet js
			// var uscript = document.createElement("script");
			// uscript.src = bf_sr + '/js/public/chicklet/chicklet.js?' + BF_STATIC.version;
			// document.getElementsByTagName('body')[0].appendChild(uscript);
			
			// load edit user script
			var uscript = document.createElement("script");
			uscript.src = bf_sr + '/js/public/contribute/user_settings.js?' + BF_STATIC.version;
			document.getElementsByTagName('body')[0].appendChild(uscript);			
			
			// load edit user quickpost
			var uscript = document.createElement("script");
			uscript.src = bf_sr + '/js/public/contribute/user_post.js?' + BF_STATIC.version;
			document.getElementsByTagName('body')[0].appendChild(uscript);			
			
			// also load user messages
			// var uscript = document.createElement("script");
			// uscript.src = bf_sr + '/js/public/messages/user_messages.js?' + BF_STATIC.version;
			// document.getElementsByTagName('body')[0].appendChild(uscript);
		} 
		
		
	}
	
	this.getUsernameFromSession = function() {
		var session_key = BFW_Util.getCookie(BFW_COOKIE);
		username = '';
		if(session_key) {
			var username = session_key.substring(64, session_key.length);
		}
		return username;
	}
}

var BFW_Util = {
	
	getCookie: function(name) {
		var cookie = document.cookie.match(new RegExp('(^|;)\\s*' + encodeURIComponent(name) + '=([^;\\s]*)'));		
    	return (cookie ? decodeURIComponent(cookie[2]) : null);	
	},
	
	deleteCookie: function(name, host) {
    	var d = new Date();
    	d.setTime( d.getTime() - 1000000000 );
    	var expire = '; expires=' + d.toGMTString();	
		var cook = decodeURIComponent(name) + '=' + expire + '; path=/';
    	if(host) {	
    		cook += '; domain=.' + host;
    	} else {
    		cook += '; domain=.buzzfeed.com';
    	}
    	document.cookie = cook;
	},
	
	setCookie: function(args) {
		var seconds = 1000 * 60 * 60 * 24 * 365; // one year
		if(args.seconds || args.seconds == 0) {
			seconds = args.seconds * 1000;
		}
    	var d = new Date();
    	d.setTime( d.getTime() + seconds );
    	var expire = '';
    	if(seconds > 0) {
	    	expire = '; expires=' + d.toGMTString();
    	}
    	var cook = encodeURIComponent(args.name) + '=' + encodeURIComponent(args.value) + expire + '; path=/';
    	if(args.host) {	
    		cook += '; domain=.' + args.host;
    	} else {
    		cook += '; domain=.buzzfeed.com';    		
    	}
		document.cookie = cook;		
	},
	
	setInfoCookie: function(args) {

		var obj = args.value;

		obj.isa = (obj.p_admin) ? 'true' : 'false';
		if ( obj.f_index ) {
			obj.f_index = 'true';
		}
		if ( obj.user_switching && BFW_Util.getCookie(DEFAULT_USER) == null) {
			obj.user_switching = 'true';
			BFW_Util.setCookie({name: DEFAULT_USER, value: $H({display_name:encodeURIComponent(obj.display_name),userid:obj.userid,id:obj.userid,username:encodeURIComponent(obj.username),session_key:obj.session_key,p_alias:obj.p_alias,p_admin:obj.p_admin,image:encodeURIComponent(obj.image)}).toQueryString()});
		}

		BFW_Util.setCookie({name: BFW_INFO_COOKIE, value: $H(obj).toQueryString() });
		
	},
	
	updateInfoCookie: function( obj ) {
		var userInfo = (new BF_User()).getUserInfo();
		for( var key in userInfo ) {
			if ( typeof obj[key] != 'undefined' ) userInfo[key] = obj[key];
		}
		//console.dir({c: userInfo});
		BFW_Util.setCookie({name: BFW_INFO_COOKIE, value: $H(userInfo).toQueryString() });
	},

	getParameters: function(args) {
		var parametersHash = {};
		var str = null;
		if(args && args.str) {
			str = args.str;
		}
		if(! str) {
			str = window.location.toString();
			if(str.indexOf("?") > -1){
				str = (str.split("?"))[1]
			} else {
				str = null;
			}
		}
		if(! str || str == null) {
			return;
		}	
		str = str.replace(/&amp;/g, '&');	
		var parameters = str.split("&");		
		parameters.each(function(pair){
			pair = pair.split("=")
			if(args && args['escape']) {
				pair[1] = unescape(pair[1]);
			}
			if(parametersHash[pair[0]]) {
				if( typeof( parametersHash[pair[0]] ) == 'string') {
					var vals = new Array();
					vals[0] = parametersHash[pair[0]];
					vals[1] = pair[1];
					parametersHash[pair[0]] = vals;	 	
				} else {			
					parametersHash[pair[0]].push( pair[1] );
				}
			} else {
				parametersHash[pair[0]] = pair[1];				
			}			
			
		})		
		return parametersHash;
	}
	
};
