var DialogBox = {
		
		FrameWidth:300,
		
		ScreenNameChanged:false,
		
		errorMessage:'',
		
		CommunityUrl:'',
		
		Servername: '', 
		
		// Default value
		Country: 'uk',
		
		St: -1,
		
		Tid: -1,

		init:function(country, communityUrl, serverName) {
			DialogBox.Country = country;
			DialogBox.CommunityUrl = communityUrl;
			DialogBox.Servername = serverName;
						},	
						
		// Returns a transalte object
		getTranslate:function() { 
							// Default value
							var translate = DialogBox.Translate.uk;
							if(DialogBox.Country == 'fr')
								translate = DialogBox.Translate.fr;
							else if(DialogBox.Country == 'de')
								translate = DialogBox.Translate.de;
							return translate;
							
						},
						
		// Update the community url using updated 
		// sessionToken and transactionId  				
		updateCommunityUrl:function() {
							var splitedCommuntUrl;
							if(DialogBox.CommunityUrl != '') {
								splitedCommuntUrl = DialogBox.CommunityUrl.split('&st');
								if(splitedCommuntUrl[0]) {
									DialogBox.CommunityUrl = splitedCommuntUrl[0] + '&st=' + St + '&tid=' + Tid;
								}
							}
							return null;
						},
						
		setKickappsToken: function(tokenString) {
							var tokens = tokenString.split(';');
							St = tokens[0];
							Tid = tokens[1];
						},
							
		
		updateScreenName:function() {
							DialogBox.errorMessage = DialogBox.getTranslate().PleaseWait;
							DialogBox.error.update(DialogBox.errorMessage); 
							// Send ajax request 
							ScreenName.callAjax((DialogBox.txt.value + "::" + DialogBox.birthdayField.value), DialogBox.Servername);
							return DialogBox.ScreenNameChanged;
						},
						
		setError:function(errorIndex) {
							var error;
							switch(errorIndex) {
								case 'NoChange' : 			error = DialogBox.getTranslate().NoChange;break;
								case 'screensort' : 		error = DialogBox.getTranslate().SortScreenName;break;
								case 'screenlong' : 		error = DialogBox.getTranslate().LongScreenName;break;
								case 'screenNameExists' : 	error = DialogBox.getTranslate().ScreenNameAlreadyInUse;break;
								case 'InvalidScreenName' : 	error = DialogBox.getTranslate().InvalidScreenName;break;
								case 'NoValidDate' :		error = DialogBox.getTranslate().NoValidDate;break;
								case 'UserUnter13NotAllowed': error = DialogBox.getTranslate().UserUnter13NotAllowed;break;
								default: error = "";//activate nur for test purpose						
							}
							DialogBox.error.update(error);
						},
						
		changeNamePerformed:function() {
							DialogBox.IsScreenNameChanged = true;
						},
						
		createFrameDiv:function() { delete DialogBox.FrameDiv;
							if(DialogBox.FrameDiv == null) {
							styleAtrb = "width:" + DialogBox.FrameWidth + "px;";
					   		DialogBox.FrameDiv = new Element('div', { 'id': 'dialogBox', 'style' : styleAtrb });
							}
						},
						
		createBackgroundDiv:function() {delete DialogBox.BackgroundDiv;
							if(DialogBox.BackgroundDiv == null) {
							styleAtrb = "position:fixed;left:" + DialogBox.leftBoxPosition() + "px; top:" + DialogBox.topBoxPosition() + "px; ";
							DialogBox.BackgroundDiv = new Element('div', { 'id': 'bgDialogBox', 'style' : styleAtrb });
							}
						},
						
		topBoxPosition:function() {
							var pos = 0;
							var browserHeight = DialogBox.Browser.getHeight();							
							pos = Math.round((browserHeight)/3);							
							return pos;
						},
						
		leftBoxPosition:function() {
							var pos = 0;
							var browserWidth = DialogBox.Browser.getWidth();
							if( browserWidth > DialogBox.FrameWidth ) {
								pos = Math.round((browserWidth - DialogBox.FrameWidth)/2);
							}
							return pos;
						},
						
		close:function() { window.location.href = DialogBox.CommunityUrl;},
		
		createConfirmForm:function(screenname, targetUri, birthday) { 
			// Check if the frame is already open
			if(DialogBox.FrameDiv)
				return;
			DialogBox.createFrameDiv();
			DialogBox.createBackgroundDiv(); 
			var translate = DialogBox.getTranslate();
			var form 	= new Element('form', { 'id':'myForm', 'class': 'form', 'action': '', 'onsubmit':'return DialogBox.updateScreenName()'});
			var label 	= new Element('div', { 'class': 'frameLabel'}).update(translate.Check);
			DialogBox.error = new Element('div', { 'class': 'error'}).update("");
			DialogBox.txt 	= new Element('input', { 'class': 'txt', 'value':screenname, 'type':'text'});
			var labelOfBirthday	= new Element('div', { 'class': 'frameLabel','style':'margin-top:10px'}).update(translate.BirthDateLabel);
			DialogBox.birthdayField 	= new Element('input', { 'id':'birth_date', 'class': 'txt', 'style':'margin-top:0px', 'value':birthday, 'type':'text'});
			var submit 	= new Element('input', { 'class': 'submit', 'type':'submit', 'onclick':'', 'value': translate.Confirm });
			var close	= new Element('div', { 'class': 'close', 'onclick':"DialogBox.close()"}).update(translate.Close);
			var br 		= new Element('br');
			
			form.appendChild(close);
			form.appendChild(br);
			form.appendChild(label);
			form.appendChild(br);
			form.appendChild(DialogBox.txt);
			form.appendChild(br);
			form.appendChild(labelOfBirthday);
			form.appendChild(br);
			form.appendChild(DialogBox.birthdayField);
			form.appendChild(br);
			form.appendChild(DialogBox.error);
			form.appendChild(br);
			form.appendChild(submit);
			
			var el = new Element('div', { 'id': 'indernalFrame'});
			DialogBox.FrameDiv.appendChild(form);
			DialogBox.BackgroundDiv.appendChild(DialogBox.FrameDiv);
			document.body.appendChild(DialogBox.BackgroundDiv);
			
			if(birthday == null || birthday.length == 0) {
				DialogBox.setError('NoValidDate');				
			}
			
		},
		
		createLogoutForm:function() {
			document.body.removeChild(DialogBox.BackgroundDiv);
			DialogBox.createFrameDiv();
			DialogBox.createBackgroundDiv();
			var translate = DialogBox.getTranslate();
			var form 	= new Element('form', { 'class': 'form', 'action': '/buyer/community-redirect/rdrct/goToLogout' });
			
			var label 	= new Element('div', { 'class': 'frameLabel'}).update(translate.Logout);
			var submit 	= new Element('input', { 'class': 'submit', 'type':'submit', 'value': translate.Continue });
			var close	= new Element('div', { 'class': 'close', 'onclick':'DialogBox.close()' }).update(translate.Close);
			var br	 	= new Element('br');
			
			form.appendChild(close);
			form.appendChild(br);
			form.appendChild(label);
			form.appendChild(br);
			form.appendChild(br);
			form.appendChild(submit);
			
			var el = new Element('div', { 'id': 'indernalFrame'});
			DialogBox.FrameDiv.appendChild(form);
			DialogBox.BackgroundDiv.appendChild(DialogBox.FrameDiv);
			document.body.appendChild(DialogBox.BackgroundDiv);
						
		}
		
}


/**
 *  Computes the height and width of the browser window
 */
DialogBox.Browser = {
		getHeight:function() {
			  var myHeight = 0;
			  if( typeof( window.innerHeight ) == 'number' ) {
			    //Non-IE
			    myHeight = window.innerHeight;
			  } else if( document.documentElement && ( document.documentElement.clientHeight ) ) {
			    //IE 6+ in 'standards compliant mode'
			    myWidth = document.documentElement.clientWidth;
			    myHeight = document.documentElement.clientHeight;
			  } else if( document.body && ( document.body.clientHeight ) ) {
			    //IE 4 compatible
			    myHeight = document.body.clientHeight;
			  }			  
			  return myHeight;
			},
		getWidth:function() {
				  var myWidth = 0;
				  if( typeof( window.innerWidth ) == 'number' ) {
				    //Non-IE
				    myWidth = window.innerWidth;
				  } else if( document.documentElement && ( document.documentElement.clientWidth ) ) {
				    //IE 6+ in 'standards compliant mode'
				    myWidth = document.documentElement.clientWidth;
				  } else if( document.body && ( document.body.clientWidth ) ) {
				    //IE 4 compatible
				    myWidth = document.body.clientWidth;
				  }
				  return myWidth;
				}

}

DialogBox.Translate = {
		uk: {
				Check:					'Please Provide Screen Name Information',
				Logout:					'Your screen name has been changed. <br/>Press continue to login again.',
				ScreenNameChanged:		'Screen name has been changed', 
				PleaseWait:				'Please wait',
				NoChange:				'Screen name hasn&rsquo;t been changed',
				InvalidScreenName:		'Invalid screen name',
				SortScreenName:			'Your username must be at least <br/>three characters long',
				LongScreenName:			'Your username must be less <br/>than twenty three characters long',
				ScreenNameAlreadyInUse:	'Screen name already exists',
				Confirm:				'Confirm',
				Continue:				'Continue',
				Close:					'Close x',
				NoValidDAate:			'Your date of birth is invalid',
				UserUnter13NotAllowed:  'You must be at least 13 years old',
				BirthDateLabel:			'Birthday (DD/MM/YYYY)'
			},
			
		fr: {
				Check:					'Merci d&rsquo;indiquer votre Nom d&rsquo;utilisateur <br/>(par exemple : Prénom Nom)',
				Logout:					'Votre nom d&rsquo;utilisateur a été modifié',
				ScreenNameChanged:		'Votre nom d&rsquo;utilisateur a été modifié', 
				PleaseWait:				'Merci de patienter',
				NoChange:				'Votre nom d&rsquo;utilisateur n a été modifié',
				InvalidScreenName:		'Nom d&rsquo;utilisateur incorrect',
				SortScreenName:			'Votre nom d&rsquo;utilisateur doit contenir au moins <br/>3 caractères',
				LongScreenName:			'Votre nom d&rsquo;utilisateur doit contenir <br/>moins de 23 caractères',
				ScreenNameAlreadyInUse:	'Ce nom d&rsquo;utilisateur est déjà pris',
				Confirm:				'Confirmez',
				Continue:				'Continuez',
				Close:					'Fermer x',
				NoValidDate:			'Date de naissance incorrecte',
				UserUnter13NotAllowed:  'Vous devez avoir plus de 13 ans',
				BirthDateLabel:			'Date de naissance (DD/MM/YYYY)'
			},
			
		de: {
				Check:					'',
				Logout:					'',
				ScreenNameChanged:		'', 
				PleaseWait:				'',
				NoChange:				'',
				InvalidScreenName:		'',
				SortScreenName:			'',
				LongScreenName:			'',
				ScreenNameAlreadyInUse:	'',
				Confirm:				'',
				Close:					''
			}
}


var ScreenName = {
	
		ResponseText: '',
		
		confirmScreenName:function(screenName, targetUri, country, birthday, serverName){
	
				ScreenName.TargetUrl = targetUri;
				backgroundElem = new Element('div', { 'id': 'globalDiv'});
				
				//var elem = document.getElementById(id);
				backgroundElem.style.width 	= '100%';
				backgroundElem.style.height 	= '100%';
				backgroundElem.style.display 	= 'block';
				document.body.appendChild(backgroundElem);
				
				if (window.addEventListener)
					window.addEventListener("DOMMouseScroll", function(event) {
				        event.preventDefault();
				    }, false);
				else
					window.attachEvent("mousewheel", function() {
				        return false;
				    })
				
				DialogBox.init(country, targetUri, serverName);    
				DialogBox.createConfirmForm(screenName, targetUri, birthday);
			
			},
			
		// Handle the Ajax response
		handleResponse: function(response) { 
			if(response.responseText == 'noChange') {
				DialogBox.ScreenNameChanged = false;
				window.location.href = ScreenName.TargetUrl;
			}
			else if(response.responseText == 'birth_date_error') { 
				DialogBox.setError('NoValidDate');
				DialogBox.ScreenNameChanged = false;
			}
			else if(response.responseText == 'user_to_young') { 
				DialogBox.setError('UserUnter13NotAllowed');
				DialogBox.ScreenNameChanged = false;
			}
			else if(response.responseText.indexOf('success') != -1) {
				DialogBox.ScreenNameChanged = true;
				DialogBox.setError(DialogBox.Translate.ScreenNameChanged);
				// Extract the string with the sesion token and trans id 
				var splitedResponse = response.responseText.split('::');
				if(splitedResponse[1]) {
					var tokens = splitedResponse[1];
					DialogBox.setKickappsToken(tokens);
					DialogBox.updateCommunityUrl();
				}
				
				DialogBox.createLogoutForm();
			}
			else {
				DialogBox.setError(response.responseText);
				DialogBox.ScreenNameChanged = false;
			}
		},
	
		// Creates a prototype Ajax object, sends a request, and registers the callback function 'handleResponse'
		callAjax: function(screenName, serverName){
			var pfad = ("http://" + serverName + "/buyer/check-screen-name");
			var myAjax = new Ajax.Request(pfad,
					{method: 'post', parameters: {newScreenName: screenName},
				onComplete: ScreenName.handleResponse});
			//return ScreenName.ResponseText;
		}
		
}


