/*jslint browser: true, white: false, plusplus: false, evil: true, undef: false, nomen: false, newcap:false */
var join = {
	formId : 'frmJoin', 
	captchaInit : false,
	usr_init:false,
	infoPanel:new cfkit_InfoPane('login'),
	submit:function(){
		if(!join.captchaInit && join.useCaptcha()){
			join.createCaptcha();
			return false;
		}
		join.infoPanel.busy();
		dojo.xhrPost({
			form: join.formId,
			url : "/cfkit/server/user/api.cfm",
			handleAs : "json",
			load : join.submitOk,
			error : join.submitError,
			content: {'REQUEST_ID':cfkit_util.createGUID(),'METHOD':'USR_NEW'}
		});
		return;
	},
	
	submitOk:function(data,ioArgs){
		if (data.STATUS === 2){
			cfkit_util.display('pnl_login',false);
			cfkit_util.display('pnl_join',false);
			cfkit_util.display('login_done',true);
			join.infoPanel.hide();
		}else{
			join.infoPanel.msg(data.MSG.DISPLAYTXT);
		}
		return;
	},
	
	submitError:function(data,ioArgs){
		console.log(data);
		join.infoPanel.msg('Error contacting the server.');
		return;	
	},
	
	refreshCaptcha:function(){
		if(!join.useCaptcha()){
			return;
		}
		
		var img = dojo.byId('captchaImg');
		img.src = img.src + '&i=' + Math.random();
		return;
	},
	
	createCaptcha:function(){
		if(join.captchaInit || !join.useCaptcha()){/* Only do init once.*/
			 return;
		} 
		
		dojo.xhrGet({
			url : "/cfkit/server/captcha/create.cfm?format=json",
			handleAs : "json",
			load : join.createCaptchaOk,
			error : join.submitError
		});
		return;
	},
	
	createCaptchaOk:function(data,ioArgs){
		var img,captchaField = dojo.byId('captchaGUID');
		img = dojo.byId('captchaImg');
		img.src = data.captchaSrc;
		cfkit_util.display('fld_captchaCode',true);
		
		captchaField.value = data.captchaGUID;
		
		join.captchaInit = true;
	
		return;
	},
	
	initUsername:function(){
		if(join.usr_init){ 
			return;
		}
		var username = dojo.byId('username');
		username.value = '';
		username.style.color = 'black';
		join.usr_init = true;
		return;
	},
	useCaptcha:function(){
		var tmp = false;
		if(dojo.byId('js_captcha').value === 1){
			tmp = true;
		}
		return tmp;
	}
};


var login = {
	formId : 'frmLogin',
	/* To-Do: Use system variables to specify this location. CFKIT_GLOBAL.language */ 
	DEFAULT_URL:'/member/index.cfm',
	successUrl :'',
	
	submit:function(){
		join.infoPanel.busy();
		dojo.xhrPost({
		  url: '/cfkit/server/user/api.cfm',
		  load: login.submitOk,
		  error: login.submitError,
		  form: login.formId,
		  handleAs: 'json',
		  content: {'REQUEST_ID':cfkit_util.createGUID(),'METHOD':'USR_SIGNIN','HASHPASSWORD':1}
		  });
		return;
	},
	
	authenticated:function(sessionID){
		cookie.set('CFKITSESSIONID',sessionID,null,'/');
		return;
	},
	
	submitOk:function(data,ioArgs){
		if (data.STATUS === 2){
			login.authenticated(data.SESSIONID);
			
			if(data.STRACTION.AWARDED){
				cfkit_award.display(data.STRACTION);
				setTimeout("login._redirect();",5000);	
			}else{
				login._redirect();
			}	
		}else{
			join.infoPanel.msg(data.MSG.DISPLAYTXT);
		}
		return;
	},
	
	_redirect:function(){	
		if(login.successUrl === ''){
			if(dojo.byId("request_method").value === 'get'){
				window.location.reload();
			}else{
				document.location = login.DEFAULT_URL;
			}
		}else{
			document.location = login.successUrl;
		}
		
		return;
	},
	
	submitError:function(data,ioArgs){
		console.log(data);
		join.infoPanel.msg('Error contacting the server.');
		return;	
	}
};

var fb_connect = {
	SEMAPHOR:false,
	autologin:true,
	infoPanel:new cfkit_InfoPane('login'),
	onConnected:function(){
		FB.Connect.requireSession(fb_connect._after_getSession);
		return;
	},
	_after_getSession:function(){
		if(!fb_connect.autologin) {
			return;
		}
		fb_connect.login();
		return;
	},
	onNotConnected:function(){
		if(CFKIT_GLOBAL.authenticated) {
			return;
		}
		return;
	},
	join:function(){
		if(CFKIT_GLOBAL.authenticated){
			 return;
		}
		fb_connect.infoPanel.busy();
		dojo.xhrPost({
		  url: '/cfkit/server/user/api.cfm',
		  load: fb_connect.joinOk,
		  error: fb_connect.submitError,
		  form: 'frmFBJoin',
		  handleAs: 'json',
		  content: {'REQUEST_ID':cfkit_util.createGUID(),'METHOD':'FB_CONNECT_NEW'}
		  });
		return;
	},
	joinOk:function(data,ioArgs){
		if (data.STATUS === '2'){
			fb_connect.infoPanel.msg(data.MSG.DISPLAYTXT);
			fb_connect.login();
		}else{
			fb_connect.infoPanel.msg(data.MSG.DISPLAYTXT);
		}
		return;
	},
	login:function(){
		if(CFKIT_GLOBAL.authenticated) {
			return;
		}
		if(fb_connect.SEMAPHOR) {
			return;
		}
		fb_connect.SEMAPHOR = true;
		dojo.xhrPost({
		  url: '/cfkit/server/user/api.cfm',
		  load: fb_connect.loginOk,
		  error: fb_connect.submitError,
		  handleAs: 'json',
		  content: {'REQUEST_ID':cfkit_util.createGUID(),'METHOD':'FB_CONNECT_SIGNIN'}
	  });
	  return;
	},
	loginOk:function(data,ioArgs){
		fb_connect.SEMAPHOR = false;
		if (data.STATUS === 2){
			login.authenticated(data.SESSIONID);
			if(data.STRACTION.AWARDED){
				cfkit_award.display(data.STRACTION);
				setTimeout("login._redirect();",5000);	
			}else{
				login._redirect();
			}	
		}else{
			if(window.location.href.indexOf('/usr/fb_join.cfm') !== -1){
				fb_connect.infoPanel.msg(data.MSG.DISPLAYTXT);
				return;
			}
			document.location = '/usr/fb_join.cfm';
		}
		return;
	},
	link:function(){
		if(!CFKIT_GLOBAL.authenticated){
			fb_connect._cfkit_login();
			if(!fb_connect._cfkit_login_state) {
				return;
			}
		}
		
		dojo.xhrPost({
		  url: '/cfkit/server/user/api.cfm',
		  load: fb_connect.linkOk,
		  error: fb_connect.submitError,
		  handleAs: 'json',
		  content: {'REQUEST_ID':cfkit_util.createGUID(),'METHOD':'FB_CONNECT_LINK'}
		});
		
	},
	linkOk:function(data,ioArgs){
		if (data.STATUS === 2){
			fb_connect.login();	
		}else{
			fb_connect.infoPanel.msg(data.MSG.DISPLAYTXT);
		}
		return;
	},
	_cfkit_login_state:false,
	_cfkit_login:function(){
		dojo.xhrPost({
			  url: '/cfkit/server/user/api.cfm',
			  load: fb_connect._cfkit_loginOk,
			  error: fb_connect.submitError,
			  form: 'frmFBlink',
			  handleAs: 'json',
			  content: {'REQUEST_ID':cfkit_util.createGUID(),'METHOD':'USR_SIGNIN','HASHPASSWORD':1},
			  sync: true
		});
		return;
	},
	_cfkit_loginOk:function(data,ioArgs){
		if (data.STATUS === 2){
			login.authenticated(data.SESSIONID);
			fb_connect._cfkit_login_state = true;
		}else{
			fb_connect.infoPanel.msg(data.MSG.DISPLAYTXT);
			fb_connect._cfkit_login_state = false;
		}
		return;
	},
	submitError:function(data,ioArgs){
		console.log(data);
		fb_connect.SEMAPHOR = false;
		fb_connect.infoPanel.msg('Error contacting the server.');
		return;	
	}
};