var processing = false;

function redirect() {
	var redirect = Ext.util.Cookies.get('SignInRedirect');
	var expireRedirect = new Date();
	expireRedirect.setDate(expireRedirect.getDate() - 365);
	Ext.util.Cookies.set('SignInRedirect', '', expireRedirect, '/', '.sharethis.com');
	
	if (redirect !== null) {
		document.location.href = redirect;
	} else if (document.referrer != '') {
		if (document.referrer.indexOf('sharethis.com') != -1) {
			document.location.href = document.referrer;
		} else {
			document.location.href = '/';
		}
	} else {
		document.location.href = '/';
	}
}

function init() {
	Ext.QuickTips.init();
	Ext.form.Field.prototype.msgTarget = 'under';
	
	var uniqueId = Math.floor(Math.random()*1000000000001);
	var publisherRegisterForm = new Ext.FormPanel({
		renderTo: Ext.DomQuery.selectNode('#register_form'),
		labelWidth: 125,
		labelAlign: 'right',
		frame: false,
		border: false,
		monitorValid: true,
		defaults: {
			width: 250
		},
		defaultType: 'textfield',
		items: [{
				fieldLabel: 'Full Name',
				name: 'name',
				allowBlank: false
			},{
				name: 'nickname',
				value: uniqueId,
				xtype: 'hidden'
			},{	
				fieldLabel: 'Email Address',
				name: 'email',
				id: 'register_email',
				vtype: 'email',
				allowBlank: false
			},{
				fieldLabel: 'Username',
				name: 'nickname',
				id: 'register_nickname',
				vtype: 'alphanum',
				minLength: 3,
				maxLength: 25,
				allowBlank: false
			},{
				fieldLabel: 'Create Password',
				name: 'password',
				id: 'changepassword_password',
				inputType: 'password',
				minLength: 6,
				allowBlank: false
			},{
				fieldLabel: 'Confirm Password',
				name: 'signup_password_confirmation',
				id: 'changepassword_password_confirmation',
				inputType: 'password',
				minLength: 6,
				vtype: 'confirmpassword',
				initialPassField: 'changepassword_password',
				allowBlank: false
			},{	
				fieldLabel: 'Domains<br />(comma separated)',
				id: 'domains',
				name: 'domains'
			},{
				name: 'method',
				value: 'createUser',
				xtype: 'hidden'
			}
		],
		buttonAlign: 'left',
		buttons: [{
			text: 'Create Account',
			formBind: true,
			handler: function() {
				if (processing == false) {
					processing = true;
					//1st Ajax request -- createUser
					Ext.get('register_email').dom.value = Ext.get('register_email').dom.value.toLowerCase();
					publisherRegisterForm.form.submit({	
						url: '/ajax.php',
						method: 'post',
						async: false,
						success: function(form, action) {
							pageTracker._trackPageview('/dynamic/register/publisher');
							var expires = new Date();
							expires.setDate(expires.getDate()+3650);
							Ext.util.Cookies.set('ShareUT', action.result.data.token, expires, '/', '.sharethis.com');
							//2nd Ajax Request -- getUserInfo
							Ext.Ajax.request({
								url:'/ajax.php',
								method: 'post',	
								async: false,
								params: {
									method: 'getUserInfo',
									token: action.result.data.token
								},
								success: function(form, action) {
									var stUserObj = Ext.util.JSON.decode(form.responseText);
									function array_key_exists( key, search ) {
										if (!search || (search.constructor !== Array && search.constructor !== Object)){
											return false;
										}
										return key in search;
									}
									
									var domains = document.getElementById('domains').value.toLowerCase().replace(" ", "").split(",");
									var domainsDone = new Array();
									requestsComplete = 0;
									for (var key=0;key<domains.length;key++) {
										domains[key] = domains[key].replace("http://", "");
										domains[key] = domains[key].replace(/\/(.*)/,"");
										if (false === /[^a-zA-Z0-9-\s.]+/.test(domains[key])) {
											if (false === array_key_exists(domains[key], domainsDone)) {
												domainsDone[domains[key]] = 0;
												//3rd Ajax Request -- addPublisherDomain
												Ext.Ajax.request({
													url:'/ajax.php',
													method: 'post',	
													async: false,
													params: {
														method: 'addPublisherDomain',
														publisher: stUserObj.data.pubkey,
														domain: domains[key]
													}
												});
											}
										}
									}
									redirect();
								},
								failure: function(form, action) {
									processing = false;
									redirect();
								}
							});					
						},
						failure: function(form, action) {
							processing = false;
							//var message = !Ext.isEmpty(action.result.statusMessage) ? action.result.statusMessage : 'An unknown error was encountered.';
							var message = !Ext.isEmpty(action.result.errorMessage) ? action.result.errorMessage : 'An unknown error was encountered.';
							/*switch (message) {
							case "USER_ALREADY_EXISTS":
								Ext.MessageBox.alert('Error', "An account has already been registered with this address.");
								break;
							case "CREATE_USER_SERVICE_FAILED":
								switch (action.result.errorMessage) {
								case "Nickname already in use.":
									Ext.MessageBox.alert('Error', "An account has already been registered with this username.");
									break;
								default:
									Ext.MessageBox.alert('Error', action.result.errorMessage);
								}
								break;
							default:
								Ext.MessageBox.alert('Error', message);
							}*/
						}
					});
				}
			}
		}],
		keys: {
			key: Ext.EventObject.ENTER,
			fn: function() { Ext.DomQuery.selectNode('#register_form button:first').click(); }
		}
	});
	
	var signinButton = new Ext.Button({
		renderTo: 'signin-button',
		text: 'Sign In',
		handler: function() {
			top.location.href = '/publishers/signin';
		}
	});

	Ext.get(Ext.DomQuery.selectNode('.x-toolbar-left')).insertHtml('beforeEnd','<a href="/publishers/signin" style="float: left; line-height: 27px; padding-left: 10px">Use an existing account</a>');
}
