﻿// <reference path="jquery-1.2.6-vsdoc.js" />

$(document).ready(function() {
    var account = AjaxManager.Customer.getAccount();
    if (account === undefined || account === null) {
        setRegisterAccountMode();
    } else {
        setUpdateAddressMode(account);
    }
});

function setRegisterAccountMode() {
    $('#edit_profile_message').hide();
    $('#create_account_message').show();

    $("input[id$='RegisterNewUser']").show();
    $("input[id$='UpdateAddress']").hide();
    $("input[id$='CancelAddressUpdate']").hide();
    $("input[id$='RegisterNewUser']").bind('click', registerUser);

    var profileForm = ss.controls.profileForm
    profileForm.setPasswordRequired(true);
    if (common.inSchedule()) {
        SchedulingTool.disableSchedulingTool();

        var territory = AjaxManager.Territory.getTerritory();
        profileForm.addressControls.makeCityStateZipReadonly();
        profileForm.setCity(territory.City);
        profileForm.setState(territory.State);
        profileForm.setZip(territory.Zip);
    }
    else if (common.inStore()) {
        $('#schedule_now').hide();
        $('#create_account_header').text("Registration");
    }
}

function setUpdateAddressMode(account) {
    $('#edit_profile_message').show();
    $('#create_account_message').hide();

    $("input[id$='RegisterNewUser']").hide();
    if (isAddAddressMode()) {
        $("input[id$='AddAddress']").show();
        $("input[id$='AddAddress']").bind('click', updateAccount);
        $('#edit_profile_message h1').text('Add Address');
    } else {

        if (isEditAddressMode()) {
            $('#edit_profile_message h1').text('Edit Address');
        }

        $("input[id$='UpdateAddress']").show();
        $("input[id$='UpdateAddress']").bind('click', updateAccount);
    }

    $("input[id$='CancelAddressUpdate']").show();

    ss.controls.profileForm.setPasswordRequired(false);
    populateControls(account);
}

function registerUser() {
    if (ss.controls.profileForm.validate()) {
        redirectToTarget.subscribe(AjaxManager.Customer.onNewAccountCreated);
        handleInvalidAccount.subscribe(AjaxManager.Customer.onNewAccountCreatedInvalid);
        showManageAccountErrorMessage.subscribe(AjaxManager.Customer.onNewAccountCreatedError);

        $('#savingWaitButton').show();
        var newAccount = buildAccountFromControls();
        AjaxManager.Customer.createNewAccount(newAccount);
    }

    return false;
}

function updateAccount() {
    if (ss.controls.profileForm.validate()) {
        var updatedAccount = buildAccountFromControls();
        redirectToTarget.subscribe(AjaxManager.Customer.onAccountUpdated);
        handleInvalidAccount.subscribe(AjaxManager.Customer.onAccountUpdatedInvalid);
        showManageAccountErrorMessage.subscribe(AjaxManager.Customer.onAccountUpdatedError);

        $('#savingWaitButton').show();

        if (AjaxManager.Customer.hasChanged(updatedAccount)) {
            AjaxManager.Customer.updateAccount(updatedAccount);
        } else {
            redirectToTarget();
        }
    }
    return false;
}

function redirectToTarget() {
    var target = null;
    if ($("input[id$='RegisterNewUser']").css('display') !== 'none') {
        target = $("input[id$='RegisterNewUser']");

        if (common.inSchedule()) {
            common.clearSaleing_CustomerInfo(AjaxManager.Operation.getOperation().OperationID.toString(), true);
        }

    } else if ($("input[id$='UpdateAddress']").css('display') !== 'none') {
        target = $("input[id$='UpdateAddress']");
    } else if ($("input[id$='AddAddress']").css('display') !== 'none') {
        target = $("input[id$='AddAddress']")
    };

    if (target !== null) {
        //allow click to pass to server for redirect
        $(target).unbind('click')
			.bind('click', function() { return true; })
			.click();
    }
}



function handleInvalidAccount(account) {
}

function showManageAccountErrorMessage() {
    $('#savingWaitButton').fadeOut()

    $('#error_message').append('<div class="warning" id="web_service_warning">' +
				'<div class="warning_text">' +
				'Sorry for the inconvenience, but we\'re experiencing technical issues at this moment. Please try again in a few minutes. If the problem persists please contact us at 1-800-STEEMER.' +
				'<span style="cursor:pointer;" id="web_service_warning_ok" class="warning_dismiss"><u>OK</u></span>' +
				'</div></div>');

    $('#web_service_warning').css({
        'top': ($('.section').eq(0).height()) + 'px'
    });

    $('#error_message').show();

    $('#web_service_warning_ok').click(function() {
        $('#web_service_warning').remove();
        $('#error_message').hide();
        $('#error_message').empty();
    });
}

function isEditAddressMode() {
    var mode = $.query.get('mode');
    if (mode.toLowerCase() === 'editaddress') {
        return true;
    }

    return false;
}

function isAddAddressMode() {
    var mode = $.query.get('mode');
    if (mode.toLowerCase() === 'addaddress') {
        return true;
    }

    return false;
}

function populateControls(account) {
    if (account === null) {
        return;
    }

    var targetAddressID = $.query.get('aid');
    var profileForm = ss.controls.profileForm;

    profileForm.setEmailAddress(account.EmailAddress);
    profileForm.setAccountName(account.Name);
    profileForm.setOptInEmail(account.SendSpecials);

    if (targetAddressID !== '' || isAddAddressMode()) {
        profileForm.addressControls.setVisible(true);
        profileForm.accountControls.setVisible(false);

    } else {
        profileForm.accountControls.setVisible(true);
        profileForm.addressControls.setVisible(false);
    }

    if (targetAddressID !== '') {
        address = account.getAddressByID(targetAddressID);
        if (address === null) {
            return;
        }

        account.setSelectedAddressID(address.AddressID);

        profileForm.setFirstName(address.FirstName);
        profileForm.setLastName(address.LastName);
        profileForm.setPhoneNumberOne(address.PhoneNumberOne);
        profileForm.setPhoneNumberTwo(address.PhoneNumberTwo);
        profileForm.setAddressLineOne(address.AddressLineOne);
        profileForm.setAddressLineTwo(address.AddressLineTwo);
        profileForm.setCity(address.City);
        profileForm.setState(address.State);
        profileForm.setZip(address.Zip);
    }
}

function buildAccountFromControls() {
    var account = AjaxManager.Customer.getAccount();
    var updateAddressInfo = true;
    var targetAddressID = $.query.get('aid');
    var isNewAccount = false;
    var address = {};
    var index = 0;
    address.OperationID = 0;
    address.AddressID = 0;

    if (account != null) {
	    for (var i in account.AddressBook) {
	        if (account.AddressBook[i].AddressID == targetAddressID) {
	            index = i;
	        }
	    }
	}
	
	if(account === null){
		account = {};
		account.AccountID = 0;
		account.Profile = {};
		
		account.AddressBook = [];
		account.AddressBook[0] = address;
		isNewAccount = true;
	} else if(isAddAddressMode()){
	    account.AddressBook.push(address);
	    index = account.AddressBook.length - 1;
	} else if (isEditAddressMode()){
		address = account.getSelectedAddress();
	} else {
		updateAddressInfo = false;
	}
	
	var profileForm = ss.controls.profileForm;
	if (updateAddressInfo) {
		account.AddressBook[index].FirstName = profileForm.getFirstName();
		account.AddressBook[index].LastName = profileForm.getLastName();
		account.AddressBook[index].PhoneNumberOne = profileForm.getPhoneNumberOne();
		account.AddressBook[index].PhoneNumberTwo = profileForm.getPhoneNumberTwo();

		account.AddressBook[index].AddressLineOne = profileForm.getAddressLineOne();
		account.AddressBook[index].AddressLineTwo = profileForm.getAddressLineTwo();
		account.AddressBook[index].City = profileForm.getCity();
		account.AddressBook[index].State = profileForm.getState();
		account.AddressBook[index].Zip = profileForm.getZip();
	}
	
	account.EmailAddress = profileForm.getEmailAddress();
    account.Password = profileForm.getPassword();
    account.Name = profileForm.getAccountName();
    account.SendSpecials = profileForm.getOptInEmail();
  	
	if(isNewAccount){
		account.Name = address.FirstName + ' ' + address.LastName
	}

    return account;
}


