/*global  window, self, UFO, deconcept, jQuery, $*/
/**
 * loader.js
 * 
 * @author Martin Ma
 * @version 1.5.1
 */

/**
 * TODO:
 * 	1. Move everything under abcdm.abccom.* namespace - done
 * 	2. Use overlay builder to create overlay instead - done -ywang
 * 	3. Add user session checking js - done
 */
var abcdm = abcdm || {};
abcdm.abccom = abcdm.abccom || {};
abcdm.abccom.Register = abcdm.abccom.Register || {};
abcdm.abccom.Register.logoutRedirect = abcdm.abccom.Register.logoutRedirect || location.href;

(function ($) {
	var url, proxy; 
	// TODO: update to prod url
	url = '[SERVERHTTPS]/service/regapi/user';
	proxy = '[SERVERHTTPS]';
	abcdm.abccom.Register.regtypes = {
		"sdlt": {
			"level" : 20,
			"width" : 380,
			"height" : 466,
			"padding" : 151
		},
		"slt": {
			"level" : 40,
			"width" : 380,
			"height" : 568,
			"padding" : 273
		},
		"lt": {
			"level" : 60,
			"width" : 380,
			"height" : 622,
			"padding" : 195,
			"upgradewidth" : 380,
			"upgradeheight" : 480
		},
		"ht": {
			"level" : 80,
			"width" : 550,
			"height" : 622,
			"padding" : 246,
			"upgradewidth" : 450,
			"upgradeheight" : 666
		},
		"login": {
			"width" : 300,
			"height" : 391,
			"padding" : 42
		}
	};
	abcdm.abccom.Register.specialCircumstances = {
		"dancing-with-the-stars" : 46
	};
	abcdm.abccom.Register.getSwid = function () {
		return abcdm.abccom.Utils.getSwid();
	};
	
	abcdm.abccom.Register.init = function (type, key, options) {
	    var dm, src, func, callbackname, lp, action, height, width, padding, check;
	    options = options || {};
		action = options.action || 'upgrade';
		height =  abcdm.abccom.Register.regtypes.login.height;
		width =  abcdm.abccom.Register.regtypes.login.width;
		padding = abcdm.abccom.Register.regtypes.login.padding || 0;
		if (typeof abcdm.abccom.Register.regtypes[type] === 'undefined') {
//			console.log('invalid reg type' + type);
			return false;
		}
		if (action === "register") {
			height = abcdm.abccom.Register.regtypes[type].height;
			width = abcdm.abccom.Register.regtypes[type].width;
			padding = abcdm.abccom.Register.regtypes[type].padding;
			$.each(abcdm.abccom.Register.specialCircumstances, function (k, v) {
				if (location.pathname.indexOf(k) > 0) {
					height = height + v;
				}
			});
		}
		
		
		src = '/service/register/' + action + '/type/' + type;
		dm =  '?dm=' + location.protocol + '//' + location.host;
		path =  '&amp;path=' + encodeURIComponent(location.pathname);
		if (typeof options.callback === 'function') {
			callbackname = "regcallback" + Math.floor(Math.random() * 10000);
			$('body').bind(callbackname, options.callback);
			func = '&amp;callback=' + callbackname;
		} else {
			func = '';	
		}
		lp = options.loginProvider ? '&amp;loginProvider=' + options.loginProvider : '';
	
		if (type === "login") {
			try {
				$.cookie('LOGIN', null, {path: '/', domain: 'go.com'});
			} catch (e) {
			}
		}
		
		abcdm.abccom.Utils.MessageQueueInit();
		//
		if (action === 'upgrade') {
			check = abcdm.abccom.Utils.userCheck(type);
			if (check === true) {
				if (typeof options.callback === 'function') {
					options.callback();
				}
				return true;
			}
//			abcdm.abccom.Utils.IframeHelper(src.replace('upgrade', 'upgradeCheck'), 'upgradeChecker');
//			if loggedin, override default height and width
			if (check !== 'loggedout') {
//				console.log('upgrade ' +  type + check);
				height = abcdm.abccom.Register.regtypes[type].upgradeheight  || abcdm.abccom.Register.regtypes[type].height;
				width = abcdm.abccom.Register.regtypes[type].upgradewidth || abcdm.abccom.Register.regtypes[type].width;
				padding = abcdm.abccom.Register.regtypes[type].padding * 2;
			} else {
//				console.log('upgrade ' +  type + " logged out" + check);
			}
		} else {
//			console.log('not upgrade ' +  type + check);
		}
		abcdm.abccom.Utils.createOverlay(width, height, '[SERVERHTTPS]' + src + dm + path + func + lp, true, padding);
		
		//
		$('#messageQueue').bind('LoginSuccess', function (e, data) {
			$('#abc-overlay').unbind("closebox");
			$('#abc-overlay').bind("closebox", function () {
				abcdm.abccom.Register.updateSignInArea();
				abcdm.abccom.Utils.closeOverlay();
				abcdm.abccom.Utils.globalCallback();
				if (typeof data !== 'undefined' && typeof data.callback === "string") {
					$('body').trigger(data.callback, data);
				}
			});
			$('#abc-overlay').trigger("closebox");
		});
		$('#messageQueue').bind('RegSuccess', function (e, data) {
			$('#abc-overlay').unbind("closebox");
			$('#abc-overlay').bind("closebox", function () {
				abcdm.abccom.Register.updateSignInArea();
				abcdm.abccom.Utils.closeOverlay();
				abcdm.abccom.Utils.globalCallback();
				if (typeof data !== 'undefined' && typeof data.callback === "string") {
					$('body').trigger(data.callback, data);
				}
			});
		});
		$('#messageQueue').bind('Closebox', function () {
			$('#abc-overlay').trigger("closebox");
		});
		$('#messageQueue').bind('upgradeLogin', function () {
			abcdm.abccom.Utils.createOverlay(width, height, '[SERVERHTTPS]' + src + dm + path + func + lp, true, padding);
		});
		$('#messageQueue').bind('upgradeForm', function () {
			abcdm.abccom.Utils.createOverlay(width, height, '[SERVERHTTPS]' + src + dm + path + func + lp, true, padding);
		});
		$('#messageQueue').bind('upgradeExit', function (e, data) {
			if (typeof data !== 'undefined' && typeof data.callback === "string") {
				$('body').trigger(data.callback, data);
			}
		});
		$('#messageQueue').bind('ParentRefresh', function () {
			window.location.reload();
		});
		$('#messageQueue').bind('Logout', function () {
			$.get("/service/register/logout");
			window.location.reload();
		});
		$('#messageQueue').bind('childFrameQueueReady', function () {
			if (options.user) {
				abcdm.abccom.Register.sendPopulateForm(options.user);
				
				$('#abc-overlay').unbind("closebox");
				$('#abc-overlay').bind("closebox", function () {
					//$('#messageQueue').unbind('childFrameQueueReady');
					if (typeof abcdm.abccom.SocialLink.logout === 'function') {
						abcdm.abccom.SocialLink.logout();
					};
					abcdm.abccom.Utils.closeOverlay();
				});
			}
		});
		$('#messageQueue').bind('childFrameRedirect', function (e, data) {
			data = data || {};
			try {
				var message = {
					'trigger': 'childFrameRedirectGo',
					'MessDest': $('#abc-iframe').attr('name')
				};
				abcdm.abccom.Utils.sendMessage(message, proxy);
			} catch (ex) {
				//alert(ex);
			}
			
			$('#messageQueue').bind('childFrameRedirectGetData', function () {
				abcdm.abccom.Register.sendPopulateForm(data);
				$('#abc-overlay').unbind("closebox");
				$('#abc-overlay').bind("closebox", function () {
					//$('#messageQueue').unbind('childFrameQueueReady');
					if (typeof abcdm.abccom.SocialLink.logout === 'function') {
						abcdm.abccom.SocialLink.logout();
					};
					abcdm.abccom.Utils.closeOverlay();
				});				
			});
		});		
		$('body').bind('upgradeTest', function () {
//			console.log('works');
		});		
	};
	
	/**
	 * Get user name/swid using xdomain.js
	 */
	abcdm.abccom.Register.getUser = function (callback) {
		try {
			// Overwrite call back
			abcdm.abccom.Utils.xdomain.callback = function (json) {
				//console.log(json);
				if (typeof callback === 'function') {
					//console.log('inside callback function');
					callback(json);
				}
			};
			// Fire cross domain script call
			abcdm.abccom.Utils.xdomain(url);
		} catch (ex) {
		}
	};	
	
	/**
	 * Get user name/swid using cookie
	 */
	abcdm.abccom.Register.getUserByCookies = abcdm.abccom.Utils.getUserByCookies;
	

	abcdm.abccom.Register.updateSignInArea = function (options) {
		var username, swid, usernameLink;
		options = options || {};
		username = abcdm.abccom.Register.getUserByCookies();
		//swid = abcdm.abccom.Register.getSwid();
		if (username) {
			usernameLink = 'Welcome, ' + username;
			$('#span-register-id').html(usernameLink);
				
			$('#div-register .out').hide();
			$('#div-register, #div-register .in').show();			
		} 
		else {
			$('#div-register .in').hide();
			$('#div-register, #div-register .out').show();
		}
		
		if (typeof abcdm.abccom.SocialLink === 'object' && typeof abcdm.abccom.SocialLink.authInit === 'function') {
			options.abcUser = username;
			abcdm.abccom.SocialLink.authInit(options);
		}
	};
	
	abcdm.abccom.Register.logout = function () {
		var logoutUrl = '[SERVERHTTPS]/service/regapi/logout?redirect=' + encodeURIComponent(abcdm.abccom.Register.logoutRedirect);
		location.href = logoutUrl;
	};

	abcdm.abccom.Register.sendPopulateForm = function (options) {
		options = options || {};
		
		try {
			var message = {
				'trigger': 'socialLinkPopulateForm',
				'params': options,
				'MessDest': $('#abc-iframe').attr('name')
			};
			abcdm.abccom.Utils.sendMessage(message, proxy);
		} catch (e) {
			//alert(e);
		}
	};

}(jQuery));
