//
//
RegistrationPageWidget.prototype.displayName = null;
RegistrationPageWidget.prototype.profileId = null;
RegistrationPageWidget.prototype.registeredEmailAddressProvider = null;
RegistrationPageWidget.prototype.importedInviteeSerializationTemplate = null;
RegistrationPageWidget.prototype.importedInviteesHolderElementId = null;
RegistrationPageWidget.prototype.currentStep = -1;
RegistrationPageWidget.prototype.addImportedContactsByDefault = true;
//
//
function RegistrationPageWidget(id, domContainer, parentWidget) {
    //
    //
    RegistrationPageWidget.prototype.superClass.constructor.call(this, id, domContainer, parentWidget);
    //
    //
    this.childWidgets[this.id + "_registrationWidget"] = new RegistrationWidget(this.id+"_registrationWidget", this.id+"_registrationWidget_Holder", this);
    this.childWidgets[this.id + "_registrationWidget"].isOpen=true;
    this.childWidgets[this.id + "_registrationWidget"].showContactUsInAccountActivationMessage=false;
    this.childWidgets[this.id + "_registrationWidget"].events.registrationComplete.addListener(this, this.registrationCompleteEventHandler);
    //
    //
    this.currentStep = 1;
}
//
//
copyPrototype(RegistrationPageWidget, ContainerWidget);
//
//
RegistrationPageWidget.prototype.superClass=ContainerWidget.prototype;
//
//
RegistrationPageWidget.prototype.registrationCompleteEventHandler = function(sourceObjectInstance, eventObjectInstance) {
    if(eventObjectInstance && 0==eventObjectInstance.code) {
        if(eventObjectInstance.type && eventObjectInstance.type=="registrationComplete") {
            //eventObjectInstance.login;
            //eventObjectInstance.password;
			var err_field=document.getElementById(this.id+"_registrationWidget_DONT_SEND_ERROR_INFO");
			if(err_field){
				
				err_field.className+=" hidden";
				err_field.innerHTML="";
			}
            this.showStep(2);
        }
    }
	else{
		if(eventObjectInstance && eventObjectInstance.message){
			var message=eventObjectInstance.message;
			if(message.indexOf("Sign Up failed due to following error(s): \r\n")!=-1){
				message=message.replace("Sign Up failed due to following error(s): \r\n","");
			}
			if(message.toLowerCase().indexOf("email")!=-1){
				var field=document.getElementById(this.id + "_registrationWidget_EMAIL");
				if(field){
					field.className+=" error";
				}
			}
			if(message.toLowerCase().indexOf("account with the name")!=-1){
				var field=document.getElementById(this.id + "_registrationWidget_primaryPrincipal");
				if(field){
					field.className+=" error";
				}
				 this.showStep(1);
			}
			var err_field=document.getElementById(this.id+"_registrationWidget_DONT_SEND_ERROR_INFO");
			if(err_field){
				var s=err_field.className;
				s=s.replace(/hidden/g,"");
				err_field.className=s;
				err_field.innerHTML=eventObjectInstance.message;
			}
			else{
				showAlert(eventObjectInstance.message);
			}
		}
		else{
			var err_field=document.getElementById(this.id+"_registrationWidget_DONT_SEND_ERROR_INFO");
			if(err_field){
				var s=err_field.className;
				s=s.replace(/hidden/g,"");
				err_field.className=s;
				err_field.innerHTML="We are sorry but something went wrong and we could not create your account.\n\rPlease check that your input is correct an try again.";
			}
			else{
				showAlert("We are sorry but something went wrong and we could not create your account.\n\rPlease check that your input is correct an try again.");	
			}
		}
	}
}
//
//
RegistrationPageWidget.prototype.showStep = function(stepNumber, displayAllProviders) {
    var d1 = document.getElementById(this.id+'_registrationWidget_step1');
    var d2 = document.getElementById(this.id+'_registrationWidget_step2');
    var dt = document.getElementById(this.id+'_stepTitle');
	
    this.currentStep = stepNumber;
    if(!displayAllProviders) {
        displayAllProviders = false;
    }

    if(d1 && d2){
        if(stepNumber==1) {
            hideElement(d2);
            showElement(d1);
        }
        else if(stepNumber==2) {
            //
            //
            var stepOneParameters = getAccountParamsToSubmit( document.getElementById(this.id + "_registrationWidget" + "_registrationFields") , this.id + "_registrationWidget" + "_");
            var password = stepOneParameters.accountParamsHashtable.getEntry("PASSWORD");
            var passwordConfirmed = stepOneParameters.accountParamsHashtable.getEntry("PASSWORD_CONFIRMED");
            if(!password || password!=passwordConfirmed) {
                var errMsg = "Sorry, the given passwords do not match!\r\nPlease retype passwords before continuing.";
				var vd=document.getElementById(this.id+"_registrationWidget_DONT_SEND_ERROR_INFO");
				var vd1=document.getElementById(this.id+"_registrationWidget_PASSWORD");
				var vd2=document.getElementById(this.id+"_registrationWidget_PASSWORD_CONFIRMED");
				if(vd1){
					vd1.className+=" error";
				}
				if(vd2){
					vd2.className+=" error";
				}
				if(vd){
					var s=vd.className;
					s=s.replace(/hidden/g,"");
					vd.className=s;
					vd.innerHTML=errMsg;
				}
				else{
                	showAlert(errMsg)
				}
            }
            else {
				var vd=document.getElementById(this.id+"_registrationWidget_DONT_SEND_ERROR_INFO");
				if(vd){
					vd.className+=" hidden";
					vd.innerHTML="";
				}
				var vd1=document.getElementById(this.id+"_registrationWidget_PASSWORD");
				var vd2=document.getElementById(this.id+"_registrationWidget_PASSWORD_CONFIRMED");
				if(vd1){
					var s=vd1.className;
					s=s.replace(/error/g,"");
					vd1.className=s;
				}
				if(vd2){
					var s=vd2.className;
					s=s.replace(/error/g,"");
					vd2.className=s;
				}
                //
                //
                hideElement(document.getElementById(this.id + "_introText"));
            }
            var firstNameElement = document.getElementById(this.id + "_registrationWidget_FIRST_NAME");
            var lastNameElement = document.getElementById(this.id + "_registrationWidget_LAST_NAME");
            var emailElement = document.getElementById(this.id + "_registrationWidget_EMAIL");
            var firstName = null;
            var lastName = null;
            var email = null;
            if(firstNameElement)
                firstName = firstNameElement.value;
            if(lastNameElement)
                lastName = lastNameElement.value;
            if(emailElement)
                email = emailElement.value;
            var displayName = "";
            if(firstName != null || lastName != null) {
                if(firstName != null)
                    displayName += firstName + " ";
                if(lastName != null)
                    displayName += lastName;
            }
            else if(email != null) {
                displayName = email;
            }
            else {
                displayName = "New Masher member";
            }

            var displayNameInsertElement = document.getElementById(this.id + "_registrationWidget_displayNameInsert");
            if(displayNameInsertElement) {
                displayNameInsertElement.innerHTML = displayName;
            }
            var emailInsertElement = document.getElementById(this.id + "_registrationWidget_emailInsert");
            if(emailInsertElement) {
                emailInsertElement.innerHTML = email;
            }
            //
            //
            hideElement(d1);
            showElement(d2);
        }
        if(dt){
            dt.innerHTML="Step " + stepNumber + " of 2";
        }
    }
}

/**
 * Event handler that gets called from ImportContacts.js method handleContactsImportedFrom3rdPartyServiceResult,
 * that in turn is called from contact import result page. For genericity, this method passes the event to the
 * child InviteFriendsWidget without doing anything else in this handler.
 */
RegistrationPageWidget.prototype.contactsImportedEventHandler = function(sourceObjectInstance, eventObjectInstance) {
    this.childWidgets[this.id + "_inviteFriendsWidget"].contactsImportedEventHandler(sourceObjectInstance, eventObjectInstance);
}

RegistrationPageWidget.prototype.friendsInvitedEventHandler = function(sourceObjectInstance, eventObjectInstance) {
    this.showStep(4);
    //
    // google analytics
    try {
        pageTracker._trackPageview("/friendsInvited");
    }
    catch(gatException) {
    }
}

RegistrationPageWidget.prototype.friendsInvitationSkippedEventHandler = function(sourceObjectInstance, eventObjectInstance) {
    this.showStep(4);
    //
    // google analytics
    try {
        pageTracker._trackPageview("/friendsInvitationSkipped");
    }
    catch(gatException) {
    }
}

/**
 * Open the invitation page without preselected provider
 */
RegistrationPageWidget.prototype.inviteMoreFriends = function() {
    this.showStep(3, true);
}

/**
 * Initiating importing contacts to which send invitations
 */
RegistrationPageWidget.prototype.importInviteeAddresses = function(provider) {
    if(!provider) {
        provider = registeredEmailAddressProvider;
    }
    if(provider) {
        this.childWidgets[this.id + "_inviteFriendsWidget"].importContacts(provider, this.id);
    }
}

/**
 * Event handler that receives imported addresses after process started by calling importInviteeAddresses is completed
 */
RegistrationPageWidget.prototype.inviteeAddressesImportedEventHandler = function(sourceObjectInstance, eventObjectInstance) {
    //
    //
    if(this.importedInviteesHolderElementId && this.importedInviteeSerializationTemplate) {
        //
        //
        var importedInviteesHolderElement = document.getElementById(this.importedInviteesHolderElementId);
        if(importedInviteesHolderElement) {
            //
            //
            var importedInviteesHtml = "";
            //
            //
            var invitees = eventObjectInstance.contactsArray;
            for(var i = 0; i < invitees.length; i++) {
                var invitee = invitees[i];
                if(invitee) {
                    var inviteeEmail = invitee.email;
                    var inviteeName = invitee.name;
                    if(inviteeEmail) {
                        if(!inviteeName) {
                            inviteeName = "";
                        }
                        var serializedInvitee = this.importedInviteeSerializationTemplate;
                        serializedInvitee = serializedInvitee.replace(/{contactEmail}/g, inviteeEmail);
                        serializedInvitee = serializedInvitee.replace(/{contactName}/g, inviteeName);
                        serializedInvitee = serializedInvitee.replace(/{index}/g, i);
                        //
                        //
                        importedInviteesHtml += serializedInvitee;
                        //
                        //
                        if(this.addImportedContactsByDefault) {
                            this.addInvitee(inviteeEmail);
                        }
                    }
                }
            }
            //
            //
            importedInviteesHolderElement.innerHTML = importedInviteesHtml;
        }
    }
}

/**
 * 
 */
RegistrationPageWidget.prototype.addInvitee = function(email) {
    this.childWidgets[this.id + "_inviteFriendsWidget"].addInvitee(email);
}

/**
 *
 */
RegistrationPageWidget.prototype.removeInvitee = function(email) {
    this.childWidgets[this.id + "_inviteFriendsWidget"].removeInvitee(email);
}

