
var show = YAHOO.UIfunctions.show;
var hide = YAHOO.UIfunctions.hide;

var NOTEBOOKCONFIG = {
    viewedSubPanel: {trigger: "RecentCommunitiesTrigger", panel: "notebookSubPanelViewed"},
    savedSubPanel: {trigger: "SavedCommunitiesTrigger", panel: "notebookSubPanelSaved"},
    profileSubPanel: {trigger: "ProfileTrigger", panel: "notebookSubPanelProfile"},
    profileSectionPreference: "profileSearchPreference",
    searchURL: "/find-a-home/search.aspx"
};

// window resize function
// myOverlay.align("tr", "bl");

var openedNotebookSection;

//myNotebookPanel
var myNotebookPanel = {
    overlayPanel: null,
    xPos: 0,
    targets: null,
    eventsInit: false,
    driveDirections: null,
    directionsTrigger: null,
    directionLink: null,
    directionError: null,
    notebookShare: null,
    shareTrigger: null,
    errorMessageArea: null,
    emailFriendError: null,
    compareError: null,
    profileError: null,
    sendLink: null,
    compareLink: null,
    profileLink: null,
    notebookShareThanks: null,
    notebookCompare: null,
    compareTrigger: null,
    closeDialog: null,
    closeLink: null,
    cancelLink: null,
    allSubPanels: null,
    //initVars
    initVars: function(){
        // Build overlay based on markup
        this.overlayPanel = new YAHOO.widget.Overlay('myNotebook', {context:["notebookAnchor","tr","tr"], 'width':432, 'visible':false, 'zIndex':1000 });
        this.overlayPanel.render();
        YAHOO.widget.Overlay.windowResizeEvent.subscribe(NotebookUtils.alignNotebook, this.overlayPanel, true);
        this.targets = YUD.getElementsByClassName('myNotebookTrigger');
        this.eventsInit = false;
        this.driveDirections = document.getElementById('notebookDriveDirections');
        this.directionsTrigger = YUD.getElementsByClassName('directionsTrigger', null,'myNotebook');
        this.directionLink = YUD.getElementsByClassName('directionsLink', null,'myNotebook');
        this.notebookShare = document.getElementById('notebookShare');
        this.shareTrigger = YUD.getElementsByClassName('shareTrigger', null,'myNotebook');
        this.errorMessageArea = YUD.getElementsByClassName('errorMessageArea', null,'myNotebook');
        this.emailFriendError = document.getElementById('emailFriendErrorMessage');
        this.compareError = document.getElementById('compareErrorMessage');
        this.profileError = document.getElementById('profileErrorMessage');
        this.directionError = document.getElementById('profileDriveErrorMessage');
        this.sendLink = YUD.getElementsByClassName('sendLink', null,'myNotebook');
        this.compareLink = YUD.getElementsByClassName('compareLink', null,'myNotebook');
        this.profileLink = YUD.getElementsByClassName('profileLink', null,'myNotebook');
        this.notebookShareThanks = document.getElementById('notebookShareThanks');
        this.notebookCompare = document.getElementById('notebookCompare');
        this.compareTrigger = YUD.getElementsByClassName('compareTrigger', null,'myNotebook');
        this.closeDialog = YUD.getElementsByClassName('myNotebookClose', null,'myNotebook');
        this.closeLink = YUD.getElementsByClassName('closeLink', null,'myNotebook');
        this.cancelLink = YUD.getElementsByClassName('cancelLink', null,'myNotebook');
        this.allSubPanels = [this.notebookShare, this.notebookShareThanks, this.notebookCompare, this.driveDirections];
    },
    // ---------------------------------------- end: initVars ----------------------------------------------------------
    //openPanel
    openPanel: function(){
        hide(this.allSubPanels);
        modalBackdrop.show();
        YUD.setStyle(document.getElementById('modalDialog'),'height', Math.max(YUD.getViewportHeight(), document.body.scrollHeight) + 'px');
        if(openedNotebookSection){
            openedNotebookSection.hide();
        }
        // collapse all the subsections
        var subSections = [NOTEBOOKCONFIG.profileSubPanel, NOTEBOOKCONFIG.viewedSubPanel, NOTEBOOKCONFIG.savedSubPanel];
        for(var i=0; i < subSections.length; i++){
            var trigger = document.getElementById(subSections[i].trigger);
            var panel = document.getElementById(subSections[i].panel);
            NotebookUtils.togglePanel(trigger, panel, false);
        }
        NotebookUtils.displayRegMarketingInfo(false);
        openedNotebookSection = this.overlayPanel;
        this.overlayPanel.show();
    },
    // ---------------------------------------- end: openPanel ---------------------------------------------------------

    // closePanel
    closePanel: function(){
        hide(this.allSubPanels);
        this.overlayPanel.hide();
		modalBackdrop.hide();
    },
    //----------------------------------------- end: closePanel --------------------------------------------------------

    //openSubPanel
    openSubPanel: function(panelObj){
        hide(this.allSubPanels);
        show(panelObj);
    },
    // ---------------------------------------- end: openSubPanel ------------------------------------------------------

    // submitShare
    submitShare: function(){
        var validity = true;
		var error_string = '';
        var shareSendTo =document.getElementById('shareFriendEmail').value;
        var shareSendFrom = document.getElementById('shareEmail').value;
        var checkValues = "";
        var selectedInfo = [];

        if (shareSendTo.trim() == '') {
			validity = false;
			error_string += 'Please enter a valid FRIEND\'s EMAIL ADDRESS<br />';
		} else if(shareSendTo.indexOf(",") > -1){
            var emails = shareSendTo.split(",");
            var isValidEmail = true;
            for(var i=0; i < emails.length; i++){
                if(!check_email(emails[i].trim())){
                    isValidEmail = false;
                    break;
                }
            }
            if(!isValidEmail){
                validity = false;
                error_string += 'Please enter a valid FRIEND\'s EMAIL ADDRESS<br />';
            }
        } else if (!check_email(shareSendTo)) {
            // if it is multiple email address
            validity = false;
			error_string += 'Please enter a valid FRIEND\'s EMAIL ADDRESS<br />';
		}

		if (shareSendFrom == '') {
			validity = false;
			error_string += 'Please enter a valid EMAIL ADDRESS<br />';
		} else if (!check_email(shareSendFrom)) {
			validity = false;
			error_string += 'Please enter a valid EMAIL ADDRESS<br />';
		}

		var itemsCount = 0;
		var inputs = YUD.getElementsByClassName('styleInput','input', 'notebookShare');
		for (var i=0; i < inputs.length; i++) {
			if (inputs[i].getAttribute('type') == 'checkbox' && inputs[i].checked && inputs[i].id != 'shareSendCopy') {
                checkValues += (checkValues == "")?(inputs[i].value):("," +inputs[i].value);
                itemsCount++;
			}
		}

        if(itemsCount > 0){
            // get the UL List
            var ul = YUD.getChildren("shareCheckboxList")[0];
            var comList = YUD.getChildren(ul);
            var cInfo, fld, sLabel;

            for(var i=0; i < comList.length; i++){
                cInfo = new Object;
                cInfo.community = "";
                cInfo.plans = [];
                sLabel = comList[i].getElementsByTagName("label")[0];
                if(sLabel)
                    cInfo.community = sLabel.innerHTML;
                // we got plans
                var planList = comList[i].getElementsByTagName("li");
                if( planList.length > 0){
                    for(var k=0; k < planList.length; k++){
                        fld = planList[k].getElementsByTagName("input")[0];
                        if(fld){
                            if(fld.checked){
                                sLabel = planList[k].getElementsByTagName("label")[0];
                                if(sLabel){
                                    cInfo.plans.push(sLabel.innerHTML);
                                }
                            }
                        }
                    }
                }
                fld = comList[i].getElementsByTagName("input")[0];
                // if community is checked or plan is checked within the community are
                if(fld.checked || cInfo.plans.length > 0){
                    selectedInfo.push(cInfo);
                }
            }

        }

        if (itemsCount == 0) {
			validity = false;
			error_string += 'Please select a COMMUNITY or PLAN<br />';
		}
		// if there is an error_string, display the following.
		if (!validity) {

			myNotebookPanel.emailFriendError.innerHTML = error_string;
			show(myNotebookPanel.emailFriendError.parentNode);

		} else {
			// form validated, goto next step.
            myNotebookPanel.emailFriendError.innerHTML = "";
            var fName = escape(document.getElementById("shareFirstName").value);
            var lName = escape(document.getElementById("shareLastName").value);
            var msg = escape(document.getElementById("shareYourMessage").value);
            // update thank you page info with our data
            document.getElementById("sharedRecipients").innerHTML = shareSendTo;
            var sendCopy = document.getElementById("shareSendCopy").checked;

            var content = "We sent <br />";
            for(var i=0; i < selectedInfo.length; i++){
                content += "<strong>" + selectedInfo[i].community + "</strong> ";
                if(selectedInfo[i].plans.length > 0){
                    content += " including ";
                    for(var k=0; k < selectedInfo[i].plans.length; k++){
                        if(k > 0){
                            if(k == (selectedInfo[i].plans.length - 1)) content += " and ";
                            else content += ", ";
                        }
                        content += "<strong>" + selectedInfo[i].plans[k] + "</strong>";
                    }
                    content += "<br />";
                }
                content += "<br />";
            }
            content += "to your friends &mdash;";
            document.getElementById("sharedCommunitiesAndPlans").innerHTML = content;
            myNotebookPanel.emailFriendError.innerHTML ="";
			hide(myNotebookPanel.emailFriendError.parentNode);
            ajaxLoading('notebookShareSubmitDiv','sendLink','start');
            Pulte08.AjaxWebServices.SavedProductsService.SendSharedEmail(shareSendTo, fName, lName, shareSendFrom, sendCopy, checkValues, msg, myNotebookPanel.callBackShare);
        }
    },
    // ----------------------------------------- end: submitShare ------------------------------------------------------

    //callBackShare
    callBackShare: function(result){
        // is send is success
        if(result){
            hide(myNotebookPanel.allSubPanels);
            // reset the send to field and message
            document.getElementById('shareFriendEmail').value = "";
            document.getElementById("shareYourMessage").value = "";
            var sendCopy = document.getElementById("shareSendCopy");
            sendCopy.checked = false;
            var controlImg = YUD.getPreviousSibling(sendCopy);
            controlImg.src = returnCheckboxImgFalse('regRealtor');
            show(myNotebookPanel.notebookShareThanks);
        } else {
            myNotebookPanel.emailFriendError.innerHTML = "The system cannot send your message. Please try again later";
            show(myNotebookPanel.errorMessageArea);
        }
        ajaxLoading('notebookShareSubmitDiv','sendLink','end');
    },
    // ---------------------------------------- end: callBackShare -----------------------------------------------------
    //loadShareHTML
    loadShareHTML: function(result){

        var div = document.getElementById("shareCheckboxList");
        if(!div) return;
        // remove the current listener
        var checkboxes = YUD.getElementsByClassName("styleInput", "input", div);
        for(var i=0; i < checkboxes.length; i++){
            NotebookUtils.removeCheckboxListeners(checkboxes[i]);
        }
        div.innerHTML = result;
        checkboxes = YUD.getElementsByClassName("styleInput", "input", div);
        for(var i=0; i < checkboxes.length; i++){
            CheckboxRadioStyle.addCheckboxStyle(checkboxes[i], i);
        }

        // add new event listener
        myNotebookPanel.openSubPanel(myNotebookPanel.notebookShare);
        document.getElementById("shareFriendEmail").focus();
    },
    // ----------------------------------------- end: loadShareHTML ----------------------------------------------------

    //loadCompareHTML
    loadCompareHTML: function(result){

        // remove event listener first from styleInput
        var div = document.getElementById("compareCheckboxList");
        if(!div) return;
        var checkboxes = YUD.getElementsByClassName("styleInput", "input", div);
        for(var i=0; i < checkboxes.length; i++){
            NotebookUtils.removeCheckboxListeners(checkboxes[i]);
        }
        div.innerHTML = result;
        checkboxes = YUD.getElementsByClassName("styleInput", "input", div);
        for(var i=0; i < checkboxes.length; i++){
            CheckboxRadioStyle.addCheckboxStyle(checkboxes[i], i, true);
        }
        myNotebookPanel.openSubPanel(myNotebookPanel.notebookCompare);

    },
    // ----------------------------------------- end: loadCompare HTML -------------------------------------------------

    //trackCompareCheckbox
    trackCompareCheckbox: function(){
        var checkboxes = YUD.getElementsByClassName("styleInput", "input", "compareCheckboxList");
        var controlImg;

        var count = myNotebookPanel.countCompareCheckbox(true);

        if (count == 4){
            // disable
            for(var i=0; i < checkboxes.length; i++){
                if(!checkboxes[i].checked){
                    controlImg = YUD.getPreviousSibling(checkboxes[i]);
                    checkboxes[i].disabled = true;
                    controlImg.src = '/images/' + getCurrSite() + '/button-checkboxDisabled.gif';
                }
            }
        } else {

            for(var i=0; i < checkboxes.length; i++){
                if(!checkboxes[i].checked){
                    // if disabled, enable it
                    if(checkboxes[i].disabled){
                        controlImg = YUD.getPreviousSibling(checkboxes[i]);
                        checkboxes[i].disabled = false;
                        controlImg.src = returnCheckboxImgFalse('regRealtor');
                    }
                }
            }
        }
    },
    // ------------------------------------------ end: trackCompareCheckbox --------------------------------------------

    //countCompareCheckbox
    countCompareCheckbox: function(isCount){
        var ul = YUD.getChildren("compareCheckboxList")[0];
        var comList = YUD.getChildren(ul);
        var cInfo, fld;
        var count = 0;
        var vals = "";

        for(var i=0; i < comList.length; i++){
            cInfo = new Object;
            cInfo.community = comList[i].getElementsByTagName("input")[0];
            cInfo.plans = [];
            // we got plans
            var planList = comList[i].getElementsByTagName("li");
            if( planList.length > 0){
                for(var k=0; k < planList.length; k++){
                    fld = planList[k].getElementsByTagName("input")[0];
                    if(fld && fld.checked){
                        cInfo.plans.push(fld); count += 1;
                        vals += (vals != "")?("," + fld.value):fld.value;
                    }
                }
            }
            if(cInfo.plans.length > 0){
                if(!cInfo.community.checked){
                    cInfo.community.checked = true;
                    var controlImg = YUD.getPreviousSibling(cInfo.community);
                    controlImg.src = returnCheckboxImgTrue('regRealtor');
                }
            }else {
                if(cInfo.community.checked){
                    count +=1;
                    vals += (vals != "")?("," + cInfo.community.value):cInfo.community.value;
                }
            }
        }
        if(isCount)
            return count;
        else
            return vals;
    },
    // ----------------------------------------- end: countCompareCheckbox ---------------------------------------------

    // submitCompare
    submitCompare: function(){
        var validity = true;
		var error_string = '';



		var inputs = YUD.getElementsByClassName('styleInput','input');
		var itemsCount = myNotebookPanel.countCompareCheckbox(true);
		if (itemsCount < 2 ) {
			validity = false;
			error_string += 'Please select at least 2 and UP TO 4 COMMUNITIES or PLANS<br />';
		}

		// if there is an error_string, display the following.
		if (!validity) {

			myNotebookPanel.compareError.innerHTML = error_string;
			show(myNotebookPanel.compareError.parentNode);

		} else {
			// form validates, show Compare Pop UP
			//hide(this.allSubPanels);
            myNotebookPanel.compareError.innerHTML = "";
			hide(myNotebookPanel.compareError.parentNode);
            var checkValues = myNotebookPanel.countCompareCheckbox(false);
            var url = urlSiteBase + "/find-a-home/CompareProducts-Pulte.aspx?ids=" + checkValues;
            var ref = popWindow("regular",url,"compare",600,900,"");
            ref.focus();
        }
    },
    // ---------------------------------------- end: submitCompare -----------------------------------------------------

    // openSubPanelMyProfile
    submitMyProfile: function(){
		var error_string = "";
        var isInternational = false;
        var fName = document.profileInfo.profileFirstName.value;
        var lName = document.profileInfo.profileLastName.value;
        var email = document.profileInfo.profileUserEmail.value;
        var username = document.profileInfo.profileUserName.value;
        var newPassword = document.profileInfo.profileNewPassword.value;
        var confirmPassword = document.profileInfo.profileConfirmNewPassword.value;
        var isRealtor = document.profileInfo.profileRealtor.checked;
        var brokerOffice = document.profileInfo.profileBrokerOffice.value;
        var brokerId = document.profileInfo.profileBrokerID.value;
        var address1 = document.profileInfo.profileAddress1.value;
        var address2 = document.profileInfo.profileAddress2.value;
        var city = document.profileInfo.profileCity.value;
        var zip = document.profileInfo.profileZip.value;
        var state = document.profileInfo.profileState.value;
        var province = document.profileInfo.profileProvince.value;
        var postalCode = document.profileInfo.profilePostal.value;
        var country = document.profileInfo.profileCountry.value;
        var intl = YUD.getElementsByClassName("international", "div", "profileDetailInfo")[0];
        var phone1 = document.getElementById("profilePhone1").value;
        var phone2 = document.getElementById("profilePhone2").value;
        if(!YUD.hasClass(intl, "hide")){
            isInternational = true;
        }
        error_string = NotebookUtils.validateProfileInfo(fName, lName, email, username, newPassword, confirmPassword, true);
        error_string += NotebookUtils.validateCountry(state, country, isInternational);
        // validate phone only if in US
        if(!isInternational){
            if(phone1 != "") error_string += NotebookUtils.validatePhoneNumbers(phone1, "PRIMARY PHONE");
            if(phone2 != "") error_string += NotebookUtils.validatePhoneNumbers(phone2, "SECONDARY PHONE");
        }
        // if there is an error_string, display the following.
		if (error_string != "") {
			myNotebookPanel.profileError.innerHTML = error_string;
			show(myNotebookPanel.profileError.parentNode);

		} else {
            myNotebookPanel.profileError.innerHTML = "";
            hide(myNotebookPanel.profileError.parentNode);
            var user = new Pulte08.BusinessServices.User.UserEntity;
            user.FirstName = fName;
            user.LastName = lName;
            user.Email = email;
            user.Username = username;
            user.Address1 = address1;
            user.Address2 = address2;
            user.City = city;
            if(isInternational){
                user.CountryCode = country;
                user.StateAbbreviation = province;
                user.PostalCode = postalCode;
            }else{
                user.CountryCode = "US";
                user.StateAbbreviation = state;
                user.PostalCode = zip;
            }
            user.Phone1 = phone1;
            user.Phone2 = phone2;
            user.IsRealtor = isRealtor;
            user.BrokerOffice = brokerOffice;
            user.BrokerTaxID  = brokerId;
            ajaxLoading('myProfileSubmitDiv','profileLink','start');
            Pulte08.AjaxWebServices.UserService.SaveProfileInfo(user, newPassword, myNotebookPanel.callBackSaveProfile, myNotebookPanel.callBackSaveProfileFailed);
        }
    },
    // ---------------------------------------- end: openSubPanelMyProfile ---------------------------------------------

    // callBackeSaveProfile
    callBackSaveProfile: function(result){
        // TODO:  if success, display a message
        if(result.Retcode ==  Pulte08.BusinessServices.User.enumSaveProfile.PROFILE_SUCCESS){
            myNotebookPanel.profileError.innerHTML = "Data is saved.";
            show(myNotebookPanel.profileError.parentNode);
            setTimeout(function(){hide(myNotebookPanel.profileError.parentNode)}, 5000);
            // update data
            var fName = document.profileInfo.profileFirstName.value;
            if(document.getElementById("shareFirstName")){
                document.getElementById("shareFirstName").value = fName;
                document.getElementById("shareLastName").value = document.profileInfo.profileLastName.value;
                document.getElementById("shareEmail").value = document.profileInfo.profileUserEmail.value;
            }
            // update Directions Area
            if(document.getElementById("driveAddress")){
                document.getElementById("driveAddress").value = document.profileInfo.profileAddress1.value;
                document.getElementById("driveCity").value = document.profileInfo.profileCity.value;
                setSelectBoxValue(document.getElementById("driveState"), document.profileInfo.profileState.value);
                document.getElementById("driveZip").value = document.profileInfo.profileZip.value;
            }
            // update welcome Text
            var userWelcomeText = document.getElementById("userWelcomeText");
            userWelcomeText.innerHTML = "Welcome Home, " + fName;

        } else if(result.Retcode ==  Pulte08.BusinessServices.User.enumSaveProfile.PROFILE_USERNAME_EXISTS){
            myNotebookPanel.profileError.innerHTML = "The USERNAME that you entered is already in use. Please choose a different USERNAME";
            show(myNotebookPanel.profileError.parentNode);
        } else if(result.Retcode ==  Pulte08.BusinessServices.User.enumSaveProfile.PROFILE_FAILURE || result ==  Pulte08.BusinessServices.User.enumSaveProfile.PROFILE_FAILURE_VALIDATION){
            myNotebookPanel.profileError.innerHTML = result.Message;
            show(myNotebookPanel.profileError.parentNode);
        }
        ajaxLoading('myProfileSubmitDiv','profileLink','end');
    },
    // ---------------------------------------- end: callBackSaveProfile ----------------------------------------------
    // callBackSaveProfileFailed
    callBackSaveProfileFailed: function(result){
        myNotebookPanel.profileError.innerHTML = "The website is not responding. Please try again later...";
        show(myNotebookPanel.profileError.parentNode);
        ajaxLoading('myProfileSubmitDiv','profileLink','end');
    },
    // ---------------------------------------- end: callBackSaveProfileFailed -----------------------------------------

    // submitGetDirections
    submitGetDirections: function(){
        var isValid = true;
        var error_string = "";
        var fromAddress = document.getElementById("driveAddress").value;
        var fromCity = document.getElementById("driveCity").value;
        var fromState = document.getElementById("driveState").value;
        var fromZip = document.getElementById("driveZip").value;
        if(fromAddress == ""){
            isValid = false;
            error_string += "Please enter a valid ADDRESS<br />";
        }
        if(fromCity == ""){
            isValid = false;
            error_string += "Please enter a valid CITY<br />";
        }
        if(fromState == "" && fromZip == ""){
            isValid = false;
            error_string += "Please select a valid STATE or Zip Code<br />";
        }
        if(fromZip != "" && !validateZipStructure(fromZip)){
            isValid = false;
            error_string += 'Please enter a valid ZIP <br />';
        }

        if(isValid){
            myNotebookPanel.directionError.innerHTML = "";
            hide(myNotebookPanel.directionError.parentNode);
            var val = fromState;
            if(val == "") val = fromZip;
            else val += " " + fromZip;
            var f = fromAddress + ", " + fromCity + ", " + val.trim();
            //assuming user didn't modify it and not submit the form
            var name = document.getElementById("profileFirstName").value;
            name += (name != "" && document.getElementById("profileLastName").value != "")?" ":"";
            name += document.getElementById("profileLastName").value;
            var email = document.getElementById("profileUserEmail").value;
            var phone = document.getElementById("profilePhone1").value;
            if(phone == "" || phone == null){
                phone = document.getElementById("profilePhone2").value;
            }
            var url = document.getElementById("driveFastPassURL").value + "?f=" + escape(f) + "&name=" + escape(name) + "&email=" + email + "&phone=" + escape(phone);
            var ref = popWindow("regular",url,"compare",700,700,"");
            ref.focus();
        } else {
            myNotebookPanel.directionError.innerHTML = error_string;
            show(myNotebookPanel.directionError.parentNode);
        }
    },
    // -------------------------------------- end: submitGetDirections -------------------------------------------------

    //closeSubPanel
    closeSubPanel: function(){
        hide(this.allSubPanels);
		// reset forms and error strings.
		hide(this.errorMessageArea);
		document.emailFriend.reset();	// share with friend panel
		document.compare.reset();		// compare plans panel
		var checkboxes = YUD.getElementsByClassName('customCheckbox');
		for (var i=0; i < checkboxes.length; i++) {
			checkboxes[i].src = returnCheckboxImgFalse('regRealtor');	// uncheck checkboxes
		}
    },
    // ----------------------------------------- end: closeSubPanel ----------------------------------------------------

    //openBySection
    openBySection: function(panelObj){
        var subSections = [NOTEBOOKCONFIG.profileSubPanel, NOTEBOOKCONFIG.viewedSubPanel, NOTEBOOKCONFIG.savedSubPanel];
        myNotebookPanel.openPanel();
        var trigger = document.getElementById(panelObj.trigger);
        var panel = document.getElementById(panelObj.panel);
        NotebookUtils.togglePanel(trigger, panel, true);
        if(panelObj.trigger == NOTEBOOKCONFIG.viewedSubPanel.trigger){
            if(myNotebookViewedControl.loadingDiv){show(myNotebookViewedControl.loadingDiv);}
            Pulte08.AjaxWebServices.RecentlyViewedService.RenderView(myNotebookViewedControl.callBackRenderResult);
        } else if(panelObj.trigger == NOTEBOOKCONFIG.savedSubPanel.trigger){
            if(myNotebookSavedControl.loadingDiv){show(myNotebookSavedControl.loadingDiv);}
            Pulte08.AjaxWebServices.SavedProductsService.RenderView(myNotebookSavedControl.callBackRenderResult);
        }
    },
    // ------------------------------------- end: openbySectio ---------------------------------------------------------

    //openProfilePreference
    openProfilePreference: function(){
        var toggles = YUD.getElementsByClassName("toggle", "div", "profileDetailInfo");
        var trigger, panel;
        for(var i=0; i < toggles.length; i++){
            trigger = YUD.getElementsByClassName('toggleTrigger','',toggles[i])[0];
            panel = YUD.getElementsByClassName('toggleTarget','',toggles[i])[0];
            if(trigger.id != null && trigger.id == "profileSearchPreference"){
                NotebookUtils.togglePanel(trigger, panel, true);
            } else {
                NotebookUtils.togglePanel(trigger, panel, false);
            }
        }
        trigger = document.getElementById(NOTEBOOKCONFIG.profileSubPanel.trigger);
        panel = document.getElementById(NOTEBOOKCONFIG.profileSubPanel.panel);
        NotebookUtils.togglePanel(trigger, panel, true);
        myNotebookPanel.openPanel();
    },
    // --------------------------------------- end: openProfilePreference ----------------------------------------------
    //addPanelListeners
    addPanelListeners: function(){
        myNotebookPanel.initVars();
        // open notebook panel
        YUE.addListener(myNotebookPanel.targets,'click',function() {
            myNotebookPanel.openPanel();
        });

        // close notebook panel
        YUE.addListener(myNotebookPanel.closeDialog,'click',function() {
            myNotebookPanel.closePanel();
        });

        // open directions sub-panel
        /* use IN Line javascrpt
        YUE.addListener(myNotebookPanel.directionsTrigger,'click',function() {

        });
        */
        // open share sub-panel
        YUE.addListener(myNotebookPanel.shareTrigger,'click',function() {
            if(NotebookUtils.getSignInStatus()){
                Pulte08.AjaxWebServices.SavedProductsService.GetShareListHTML(myNotebookPanel.loadShareHTML);
            }else {
                // display error
                NotebookUtils.displayRegMarketingInfo(true);
            }

        });
        // initialize the char count on share form
        var msgs = YUD.getElementsByClassName('charCount', "div", "notebookShare");
        for (var i=0; i < msgs.length; i++) {charCount(msgs[i])};

        // link send email to friends
        YUE.addListener(myNotebookPanel.sendLink,'click',function() {
            myNotebookPanel.submitShare();
        });

        // open compare form sub-panel
        YUE.addListener(myNotebookPanel.compareTrigger,'click',function() {
            if(NotebookUtils.getSignInStatus()){
                Pulte08.AjaxWebServices.SavedProductsService.GetCompareListHTML(myNotebookPanel.loadCompareHTML);
            }else {
                NotebookUtils.displayRegMarketingInfo(true);
            }
        });

        // submit compare panel, check for MAX of 4 items, goes to popup window.
        YUE.addListener(myNotebookPanel.compareLink,'click',function() {
            myNotebookPanel.submitCompare();
        });

        // update User Profile
        YUE.addListener(myNotebookPanel.profileLink,'click',function() {
            myNotebookPanel.submitMyProfile();
        });

        //getDirectionLink
        YUE.addListener(myNotebookPanel.directionLink,'click',function() {
            myNotebookPanel.submitGetDirections();
        });
        // close/cancel any of the sub-panels
        YUE.addListener([myNotebookPanel.closeLink, myNotebookPanel.cancelLink],'click', function() {
            myNotebookPanel.closeSubPanel();
        });

        // listen to the enter key
        if (window.attachEvent && isIE) {
            var directionsKeyPress = new YAHOO.util.KeyListener(document.directionsForm,{keys:13},myNotebookPanel.submitGetDirections);
            directionsKeyPress.enable(); // getDirections form

            var shareKeyPress = new YAHOO.util.KeyListener(document.emailFriend,{keys:13}, myNotebookPanel.submitShare);
            shareKeyPress.enable(); // Share with Friends Form

            var compareKeyPress = new YAHOO.util.KeyListener(document.compare,{keys:13}, myNotebookPanel.submitCompare);
            compareKeyPress.enable(); // compare

            var profileKeyPress = new YAHOO.util.KeyListener(document.profileInfo,{keys:13}, myNotebookPanel.submitMyProfile);
            profileKeyPress.enable(); // profile form
        }
    }
    // ---------------------------------------- end: addPanelListeners -------------------------------------------------
}
//--------------------------------------------- end: myNotebookPanel ---------------------------------------------------

//NOTEBOOKSIGNIN
var myNotebookSignIn = {
    overlayPanel: null,
    xPos: 0,
    signIn: null,
    signInPane: null,
    forgotPasswordPane: null,
    forgetPasswordSuccess: null,
    passwordConfirm: null,
    changePw: null,
    getPassword: null,
    signInGo: null,
    passwordGo: null,
    changePwGo: null,
    errorMessageArea: null,
    errorMessage: null,
    PWerrorMessageArea: null,
    PWerrorMessage: null,
    newPWMessageArea: null,
    newPWMessage: null,
    cancelDialog: null,
    cancelLink: null,
    closeDialog: null,

    // initVars
    initVars: function(){
        this.overlayPanel = new YAHOO.widget.Overlay('signIn', {context:["notebookAnchor","tr","tr"], 'width':260, 'visible':false, 'zIndex':1000 });
        this.overlayPanel.render();
        this.signIn = document.getElementById('signIn');
        this.signInPane = document.getElementById('signInPane');
        this.forgotPasswordPane = document.getElementById('forgotPasswordPane');
        this.passwordConfirm = document.getElementById('pwConfirmMessage');
        this.changePw = document.getElementById('changePw');
        this.getPassword = YUD.getElementsByClassName('pwLink');
        this.signInGo = YUD.getElementsByClassName('signInGo');
        this.passwordGo = YUD.getElementsByClassName('passwordGo');
        this.changePwGo = YUD.getElementsByClassName('changePwGo');
        this.errorMessageArea = YUD.getElementsByClassName('errorMessageArea')[0];
        this.errorMessage = document.getElementById('signInErrorMessage');
        this.PWerrorMessageArea = YUD.getElementsByClassName('PWerrorMessageArea')[0];
        this.PWerrorMessage = YUD.getElementsByClassName('PasswordErrorMessage','div')[0];
        this.newPWMessageArea = YUD.getElementsByClassName('newPWerrorMessageArea','div')[0];
        this.newPWMessage = document.getElementById('newPWerrorMessage');
        this.cancelDialog = YUD.getElementsByClassName('cancelLink',null,'signInPanel');
        this.cancelLink = YUD.getElementsByClassName('cancelLink');
        this.closeDialog = YUD.getElementsByClassName('myNotebookClose',null,'signIn');
        this.forgetPasswordSuccess = document.getElementById("forgetPasswordSuccess");
    },
    // ------------------------------------- end of initVars -----------------------------------------------------------

    //openPanel
    openPanel: function(){
        modalBackdrop.show();
        YUD.setStyle(document.getElementById('modalDialog'),'height', Math.max(YUD.getViewportHeight(), document.body.scrollHeight) + 'px');
        if(openedNotebookSection){
            openedNotebookSection.hide();
        }
        openedNotebookSection = myNotebookSignIn.overlayPanel;
        this.overlayPanel.show();
        document.getElementById('userIDlogin').focus();

        // make sure forms are reset if switching from Register -> Sign -> MyNotebook and Vis Versa
        this.errorMessage.innerHTML = '';
        this.error_string = '';
        document.signInForm.reset();
        hide(this.errorMessage.parentNode);

        show(myNotebookSignIn.signInPane);
        hide(myNotebookSignIn.changePw);
        hide(myNotebookSignIn.forgotPasswordPane);
        document.getElementById('userIDlogin').focus();
    },
    // ------------------------------------- end: openPanel ---------------------------------------------------

    // closePanel
    closePanel: function(){
        // initSignInPane();
        this.errorMessage.innerHTML = '';
        this.error_string = '';
        document.signInForm.reset();
        hide(this.errorMessageArea);
        hide(this.PWerrorMessageArea);
        hide(this.forgotPasswordPane);
        //hide(this.passwordConfirm);
        show(this.signInPane);
        this.overlayPanel.hide();
        modalBackdrop.hide();
    },
    // ------------------------------------- end: displaySignInPanel ---------------------------------------------------

    //submitSignIn
    submitSignIn: function(){

        var validity = true;
        var error_string = '';
        if (document.getElementById('userIDlogin').value == "") {
            validity = false;
            error_string += 'Please enter a valid USERNAME<br />';
        }
        if (document.getElementById('signInPassword').value == '') {
            validity = false;
            error_string += 'Please enter a valid PASSWORD<br />';
        }

        if (validity) {
            // Web Services Call
            myNotebookSignIn.errorMessage.innerHTML = "";
            hide(myNotebookSignIn.errorMessage.parentNode);
            hide(myNotebookSignIn.forgetPasswordSuccess);
            var un = document.getElementById("userIDlogin").value;
            var pw = document.getElementById("signInPassword").value;
            ajaxLoading('signInSubmitDiv','signInGo','start');
            Pulte08.AjaxWebServices.UserService.SignInAndReturnName(un, pw, myNotebookSignIn.callBackSignInSuccess, myNotebookSignIn.callBackSignInFail);

        } else {
             myNotebookSignIn.errorMessage.innerHTML = error_string;
             show(myNotebookSignIn.errorMessage.parentNode);
        }
    },
    // -------------------------------------end: submitSignIn ----------------------------------------------------------
    // submitForgetPassword
    submitForgetPassword: function(){
        var validity = true;
        var error_string = '';
        var firstName = document.getElementById("forgetFirstName").value;
        var lastName = document.getElementById("forgetLastName").value;
        var email = document.getElementById('forgetEmail').value;

        if(firstName == ""){
            validity = false;
            error_string += "Please enter your FIRST NAME<br />";
        }
        if(lastName == ""){
            validity = false;
            error_string += "Please enter your LAST NAME<br />";
        }
        if (email == "") {
            validity = false;
            error_string += 'Please enter your registered EMAIL ADDRESS<br />';
        }else if (!check_email(email)) {
			validity = false;
			error_string += 'Please enter a valid EMAIL ADDRESS<br />';
		}

        if(!validity){
            myNotebookSignIn.PWerrorMessage.innerHTML = error_string;
            show(myNotebookSignIn.PWerrorMessage.parentNode);
        } else {
            myNotebookSignIn.PWerrorMessage.innerHTML = "";
            hide(myNotebookSignIn.PWerrorMessage.parentNode);
            ajaxLoading('forgetPaswrodSubmitDiv','passwordGo','start');
            var brandName = getCurrSite();
            Pulte08.AjaxWebServices.UserService.RecoverPassword(firstName, lastName, email, brandName, myNotebookSignIn.callBackForgetPassword, myNotebookSignIn.callBackForgetPasswordFailed);
        }
    },
    // ------------------------------------ end: submitForgetPassword --------------------------------------------------

    // callBackForgetPassword
    callBackForgetPassword: function(result){
        if(result == Pulte08.BusinessServices.User.enumPasswordRecovery.EMAIL_SENT){
            hide(myNotebookSignIn.forgotPasswordPane);
            show(myNotebookSignIn.forgetPasswordSuccess);
            myNotebookSignIn.errorMessage.innerHTML = "";
            hide(myNotebookSignIn.errorMessage.parentNode);
            document.forgotPasswordForm.reset();
        }else if(result == Pulte08.BusinessServices.User.enumPasswordRecovery.USER_NOT_REGISTERED){
            myNotebookSignIn.PWerrorMessage.innerHTML = "User is not recognized in the system. Please <a href='javascript:myNotebookRegister.openPanel();' class='errorLink registerPanelTrigger'>Register</a>";
            myNotebookRegister.loadTrigger(myNotebookSignIn.PWerrorMessage);
            show(myNotebookSignIn.PWerrorMessage.parentNode);
        }
        ajaxLoading('forgetPaswrodSubmitDiv','passwordGo','end');
    },
    // ------------------------------------- end: callBackForgetPassword -----------------------------------------------

    // callBackForgetPasswordFailed
    callBackForgetPasswordFailed: function(result){
        myNotebookSignIn.PWerrorMessage.innerHTML = "The website is not responding. Please try again later...";
        myNotebookRegister.loadTrigger(myNotebookSignIn.PWerrorMessage);
        show(myNotebookSignIn.PWerrorMessage.parentNode);
        ajaxLoading('forgetPaswrodSubmitDiv','passwordGo','end');
    },

    // ------------------------------------- end: callBack ForgetPassword Failed ---------------------------------------
    // submitChangePassword
    submitChangePassword: function(){
        //console.log(1);
        var validity = true;
        var error_string = '';

        if ((document.getElementById('newPassword1').value == '') || (document.getElementById('newPassword2').value == '')) {
            validity = false;
            error_string += 'Please enter a valid PASSWORD (must be 5 characters).<br />';
        } else if (document.getElementById('newPassword1').value != document.getElementById('newPassword2').value) {
            validity = false;
            error_string += 'The PASSWORDs do not match!<br />';
        } else if (document.getElementById('newPassword1').value.length < 6){
            validity = false;
            error_string += 'PASSWORD must be at least 5 characters and up to 30 characters<br />';
        }

        if (validity) {
            // reset and hide all panels
            var pw = document.getElementById("newPassword1").value;
            myNotebookSignIn.newPWMessage.innerHTML = '';
            error_string = '';
            document.changePw.reset();
            hide(myNotebookSignIn.newPWMessageArea);
            myNotebookSignIn.overlayPanel.hide();
            modalBackdrop.hide();
            // execute web services call
            Pulte08.AjaxWebServices.UserService.SavePassword(pw, myNotebookSignIn.callBackChangePassword);
        } else {
            myNotebookSignIn.newPWMessage.innerHTML = error_string;
            show(myNotebookSignIn.newPWMessageArea);
        }
    },
    // ------------------------------------ end: submitChangePassword --------------------------------------------------

    // callBackChangePassword
    callBackChangePassword: function(result){
        if(result == Pulte08.BusinessServices.User.enumSaveData.SAVE_SUCCESS){
            myNotebookSignIn.closePanel();
        }
    },
    // ------------------------------------ end: callBackChangePassword ------------------------------------------------

    // openSubPanelForgetPassword
    openSubPanelForgetPassword: function(){
        if (YUD.hasClass(this.forgotPasswordPane,'hide')) {
            show(this.forgotPasswordPane);
            document.getElementById("forgetFirstName").focus();
        } else {
            hide(this.forgotPasswordPane);
            hide(this.PWerrorMessageArea);
        }
    },
    // ------------------------------------ end: openForgetPasswordPanel -----------------------------------------------

    // openSignIn & Password Panel
    openSignInAndPasswordPanel: function(){
        myNotebookSignIn.openPanel();
        myNotebookSignIn.openSubPanelForgetPassword();
    },
    // ----------------------------------- end: openSignInAndPasswordPanel ---------------------------------------------

    // addPanelListener
    addPanelListeners: function(){
        myNotebookSignIn.initVars();
        if (document.getElementById("userIDlogin")) {
            YUE.addListener(YUD.getElementsByClassName('signInTrigger'),'click',function() {
                myNotebookSignIn.openPanel();
            });

            // cancel/close panel - reset form and error messages
            YUE.addListener(myNotebookSignIn.cancelLink,'click',function() {
                myNotebookSignIn.closePanel();
            });

            // close register and open notebook
            YUE.addListener(myNotebookSignIn.closeDialog,'click',function() {
                myNotebookPanel.openPanel();
            });

            // Sign In error checking
            YUE.addListener(myNotebookSignIn.signInGo,'click',function() {
                myNotebookSignIn.submitSignIn();
            });

            // Forgot Password error checking
            YUE.addListener(myNotebookSignIn.passwordGo,'click',function() {
                myNotebookSignIn.submitForgetPassword();
            });

            // open forgot password sub-panel
            YUE.addListener(myNotebookSignIn.getPassword,'click',function() {
                myNotebookSignIn.openSubPanelForgetPassword();
            });

            // change password after user logins from entering reset password from email.
            YUE.addListener(myNotebookSignIn.changePwGo,'click',function() {
                myNotebookSignIn.submitChangePassword();
            });

            // listen to enter key press to submit form
            if (window.attachEvent) {
                var signInKeyPress = new YAHOO.util.KeyListener(document.signInForm,{keys:13}, myNotebookSignIn.submitSignIn);
                signInKeyPress.enable(); // SignIn

                var forgetKeyPress = new YAHOO.util.KeyListener(document.forgotPasswordForm,{keys:13}, myNotebookSignIn.submitForgetPassword);
                forgetKeyPress.enable(); // forget password

                var changeKeyPress = new YAHOO.util.KeyListener(document.changePw,{keys:13}, myNotebookSignIn.submitChangePassword);
                changeKeyPress.enable(); // change password
            }
        }
    },
    // ------------------------------------ end addPanelListener -------------------------------------------------------

    //callBackSignInSuccess
    callBackSignInSuccess: function(result){
        if (result.Retcode == Pulte08.BusinessServices.User.enumAuthCode.AUTH_SUCCESS)
        {
            // show name

            myNotebookSignIn.errorMessage.innerHTML = '';
            document.signInForm.reset();
            hide(myNotebookSignIn.errorMessageArea);
            myNotebookSignIn.overlayPanel.hide();
            modalBackdrop.hide();
            NotebookUtils.SetSignInStatus(true);
            myNotebookPanel.openPanel();
            Pulte08.AjaxWebServices.UserService.GetProfileInfo(myNotebookProfileControl.callBackRenderResult);
        }
        else if (result.Retcode == Pulte08.BusinessServices.User.enumAuthCode.AUTH_SUCCESS_PASSWORD_CHANGE)
        {
            show(myNotebookSignIn.changePw);
            document.getElementById("newPassword1").focus();
            hide(myNotebookSignIn.signInPane);
            hide(myNotebookSignIn.forgotPasswordPane);
            hide(myNotebookSignIn.PWerrorMessageArea);
            hide(myNotebookSignIn.errorMessageArea);
            NotebookUtils.SetSignInStatus(true);
        }

        else
        {
            myNotebookSignIn.errorMessage.innerHTML = result.Message;
            show(myNotebookSignIn.errorMessage.parentNode);

        }
        ajaxLoading('signInSubmitDiv','signInGo','end');
    },
    // ------------------------------------- end: callBackSignInSuccess ------------------------------------------------

    // callBackSignInFail
    callBackSignInFail: function(error){
        myNotebookSignIn.errorMessage.innerHTML = error.Message;
        show(myNotebookSignIn.errorMessageArea);
        ajaxLoading('signInSubmitDiv','signInGo','end');
    }
    //------------------------------------- end: callBackSignInFail ----------------------------------------------------

};
// -------------------------------- end: myNotebookSignIn --------------------------------------------------------------


//myNotebookRegister
var myNotebookRegister = {
    overlayPanel: null,
    isHTMLLoaded: false,
    xPos: 0,
    register_step1: null,
    register_step2: null,
    register_step3: null,
    brokerFields: null,
    nextStep2: null,
    completeStep2: null,
    thanksStep3: null,
    errorMessageArea: null,
    errorMessage1: null,
    errorMessage2: null,
    regBrokerInfo: null,
    realtorSel: null,
    cancelLink: null,
    closeDialog: null,
    regStep: 1,
    // initVars
    initVars: function(){
        this.overlayPanel = new YAHOO.widget.Overlay('registerPanel', {context:["notebookAnchor","tr","tr"], 'width':350, 'visible':false, 'zIndex':1000 });
        this.overlayPanel.render();
        this.register_step1 = document.getElementById('register_step1');
        this.register_step2 = document.getElementById('register_step2');
        this.register_step3 = document.getElementById('register_step3');
        this.brokerFields = document.getElementById('regRealtor');
        this.nextStep2 = YUD.getElementsByClassName('nextStep2');
        this.completeStep2 = YUD.getElementsByClassName('completeStep2');
        this.thanksStep3 = YUD.getElementsByClassName('thanksStep3');
        this.errorMessageArea = YUD.getElementsByClassName('errorMessageArea');
        this.errorMessage1 = YUD.getElementsByClassName('registerErrorMessage')[0];
        this.errorMessage2 = YUD.getElementsByClassName('registerErrorMessage')[1];
        this.regBrokerInfo = YUD.getElementsByClassName('regBrokerInfo');
        this.realtorSel = YUD.getElementsByClassName('realtorSelTrigger');
        this.cancelLink = YUD.getElementsByClassName('cancelLink',null,'registerPanel');
        this.closeDialog = YUD.getElementsByClassName('myNotebookClose',null,'registerPanel');
        this.regStep = 1;
    },
    // ---------------------------- end: initVars ----------------------------------------------------------------------

    //openPanel
    openPanel: function(){
        hide(this.errorMessageArea);
        modalBackdrop.show();
        YUD.setStyle(document.getElementById('modalDialog'),'height', Math.max(YUD.getViewportHeight(), document.body.scrollHeight) + 'px');
        if(openedNotebookSection){
            openedNotebookSection.hide();
        }
        openedNotebookSection = this.overlayPanel;
        myNotebookRegister.initRegistrationSteps();
        myNotebookRegister.overlayPanel.show();
        window.setTimeout(function(){document.getElementById('regFirstName').focus();}, 0);
    },
    // ----------------------------- end: openPanel --------------------------------------------------------------------

    //closePanel
    closePanel: function(){
        this.overlayPanel.hide();
    	modalBackdrop.hide();
    },
    // ----------------------------- end: clsoePanel -------------------------------------------------------------------
    // initRegistrationSteps
    initRegistrationSteps: function(){
        var regPanel = document.getElementById("registerPanel");
        if(!regPanel) return;
        // hide error message
        hide(myNotebookRegister.errorMessage1.parentNode);
        hide(myNotebookRegister.errorMessage2.parentNode);

        myNotebookRegister.regStep = 1;

        hide(myNotebookRegister.register_step2);
        hide(myNotebookRegister.register_step3);
        show(myNotebookRegister.register_step1);

        var inputs = regPanel.getElementsByTagName('input');
		for(var i=0;i<inputs.length;i++) {
			inputs[i].value = '';
		}
        var selects = regPanel.getElementsByTagName('select');
        for(var i=0; i < selects.length; i++){
            selects[i].selectedIndex = 0;
        }
        var realtorCheck = document.getElementById('regRealtor');
        document.getElementById('regUserEmail').value = '';
        realtorCheck.checked = false;
        YUD.getPreviousSibling(realtorCheck).src=returnCheckboxImgFalse('regRealtor');
        var realTriggers = YUD.getElementsByClassName('brokerFields','div','registerPanel')[0];
        if(realTriggers){
            YUD.replaceClass(realTriggers,'show','hide');
        }
    },
    // ---------------------------- end: initRegistrationSteps ---------------------------------------------------------

    //submiRegForm
    submitRegForm: function(){
      if(myNotebookRegister.regStep == 1){
          myNotebookRegister.submitRegStep1();
      } else  if(myNotebookRegister.regStep == 2){
          myNotebookRegister.submitRegStep2();
      } else {
          myNotebookRegister.submitRegStep1();
      }
    },
    // ---------------------------- end: submitRegForm -----------------------------------------------------------------

    // submitRegStep1
    submitRegStep1: function(){
		var error_string = "";
        var fName, lName, email, username, password, password2, isRealtor, brokerOffice, brokerId;
        fName = document.getElementById('regFirstName').value;
        lName = document.getElementById('regLastName').value;
        email = document.getElementById('regUserEmail').value;
        username = document.getElementById('regUserName').value;
        password = document.getElementById('regUserPassword').value;
        password2 = document.getElementById('regConfirmPassword').value;
        isRealtor = this.brokerFields.checked;
        brokerOffice = document.getElementById('regBrokerOffice').value;
        brokerId = document.getElementById('regBrokerID').value;


        error_string = NotebookUtils.validateProfileInfo(fName, lName, email, username, password, password2, false);
        //error_string += NotebookUtils.validateRealtor(isRealtor, brokerOffice, brokerId);

        // if there is an error_string, display the following.
		if (error_string != "") {
            myNotebookRegister.errorMessage1.innerHTML = error_string;
			show(myNotebookRegister.errorMessage1.parentNode);
		}
		else
		{
            myNotebookRegister.errorMessage1.innerHTML = "";
            hide(myNotebookRegister.errorMessage1.parentNode);
            var context = {ajaxContainer: "regStep1SubmitDiv", ajaxBtn: "nextStep2", errObj: myNotebookRegister.errorMessage1};
            ajaxLoading('regStep1SubmitDiv','nextStep2','start');
            Pulte08.AjaxWebServices.UserService.ValidateRegistrationStep1(fName, lName, email, username, myNotebookRegister.callBackRegStep1, myNotebookRegister.callBackFailed, context);

		}
    },
    // ---------------------------- end: sumbitRegStep1 ----------------------------------------------------------------

    //callBackRegStep1
    callBackRegStep1: function (result, obj){
        /* REG_SUCCESS, REG_USERNAME_EXISTS, REG_USER_IN_EAI, REG_FAILURE_VALIDATION, REG_FAILURE_UNKNOWN */
        if (result.Retcode == Pulte08.BusinessServices.User.enumRegisterCode.REG_SUCCESS)
        {
            myNotebookRegister.regStep = 2;
            // form validates, goto next step.
            hide(myNotebookRegister.errorMessage1.parentNode);
            hide(myNotebookRegister.register_step1);
            show(myNotebookRegister.register_step2);
            document.getElementById('registerAddress1').focus();
        }
        else
        {
            var err;
            if (result.Retcode == Pulte08.BusinessServices.User.enumRegisterCode.REG_USER_REGISTERED)
                err = "The NAME and EMAIL you entered indicate you are already a registered user, please <a href='javascript:myNotebookSignIn.openPanel();'>Sign In</a>";
            if (result.Retcode == Pulte08.BusinessServices.User.enumRegisterCode.REG_USERNAME_EXISTS)
                err = "The USERNAME that you entered is already in use. Please choose a different USERNAME";
            else if (result.Retcode == Pulte08.BusinessServices.User.enumRegisterCode.REG_FAILURE_VALIDATION || result == Pulte08.BusinessServices.User.enumRegisterCode.REG_FAILURE_UNKNOWN){
                err = result.Message;
            }
            myNotebookRegister.errorMessage1.innerHTML = err;
            show(myNotebookRegister.errorMessage1.parentNode);
        }
        ajaxLoading('regStep1SubmitDiv','nextStep2','end');
    },
    // ---------------------------- end: callBackStep1 -----------------------------------------------------------------

    //submitRegStep2
    submitRegStep2: function(){

        hide(this.errorMessageArea);
		var validity = true;
		var error_string = '';
        var isInternational = false;
        var address1, address2, city, state, zip, province, postalCode, country, phone1, phone2, phone3, hearAboutUs;
        var element1 = document.getElementById('regDomestic');
		var element2 = document.getElementById('regInternational');
        if (!YUD.hasClass(element2,'hide')){
            isInternational = true;
        }

        address1 = document.getElementById('registerAddress1').value;
        address2 = document.getElementById('registerAddress2').value;
        city = document.getElementById("registerCity").value;
        state = document.getElementById('registerState').value;
        zip = document.getElementById('registerZip').value;
        province = document.getElementById('registerProvince').value;
        postalCode = document.getElementById("registerPostal").value;
        country = document.getElementById('registerCountry').value;
        phone1 = document.getElementById("regPrimaryPhone1").value + document.getElementById("regPrimaryPhone2").value + document.getElementById("regPrimaryPhone3").value;
        phone2 = document.getElementById("regSecondPhone1").value + document.getElementById("regSecondPhone2").value + document.getElementById("regSecondPhone3").value;
        error_string = NotebookUtils.validateAddress(address1, address2, city, state, zip, province, postalCode, country, isInternational);
        if(phone1 != "") error_string += NotebookUtils.validatePhoneNumbers(phone1, "PRIMARY PHONE");
        if(phone2 != "") error_string += NotebookUtils.validatePhoneNumbers(phone2, "SECONDARY PHONE");
        hearAboutUs = document.getElementById('registerFindSite').value;

        // if there is an error_string, display the following.
		if (error_string != "") {
			this.errorMessage2.innerHTML = error_string;
			show(this.errorMessage2.parentNode);
		}
		else
		{
            var regFirstname = document.getElementById('regFirstName').value;
            var regLastname = document.getElementById('regLastName').value ;
            var regEmail = document.getElementById('regUserEmail').value;
            var username = document.getElementById('regUserName').value;
            var password = document.getElementById('regUserPassword').value;

            var user = new Pulte08.BusinessServices.User.UserEntity;

            user.FirstName = regFirstname;
            user.LastName = regLastname;
            user.Email = regEmail;
            user.Username = username;
            user.Address1 = address1;
            user.Address2 = address2;
            user.City = city;
            user.HearAboutWebsite = hearAboutUs;
            if(isInternational){
                user.CountryCode = country;
                user.StateAbbreviation = province;
                user.PostalCode = postalCode;
                user.Phone1 = document.getElementById("regIntlPhone1").value;
                user.Phone2 = document.getElementById("regIntlPhone2").value;
            }else{
                user.CountryCode = "US";
                user.StateAbbreviation = state;
                user.PostalCode = zip;
                user.Phone1 = phone1;
                user.Phone2 = phone2;
                //user.Phone1 = (phone1 != "")?("(" + document.getElementById("regPrimaryPhone1").value + ") " + document.getElementById("regPrimaryPhone2").value + "-" + document.getElementById("regPrimaryPhone3").value):phone1;
                //user.Phone2 = (phone2 != "")?("(" + document.getElementById("regSecondPhone1").value + ") " + document.getElementById("regSecondPhone2").value + "-" + document.getElementById("regSecondPhone3").value):phone2;
            }
            user.IsRealtor = this.brokerFields.checked;
            user.BrokerOffice = document.getElementById('regBrokerOffice').value;
            user.BrokerTaxID  = document.getElementById('regBrokerID').value;
            ajaxLoading('regStep2SubmitDiv','completeStep2','start');

            var context = {ajaxContainer: "regStep2SubmitDiv", ajaxBtn: "completeStep2", errObj: myNotebookRegister.errorMessage2};
            Pulte08.AjaxWebServices.UserService.Register(user, password, myNotebookRegister.callBackRegStep2, myNotebookRegister.callBackFailed, context);
		}
    },
    // ---------------------------- end: submitRegStep2 ----------------------------------------------------------------

    //callBackRegStep2
    callBackRegStep2: function (result, obj){
        if (result.Retcode == Pulte08.BusinessServices.User.enumRegisterCode.REG_SUCCESS)
        {
            myNotebookRegister.regStep = 1;
            hide(myNotebookRegister.errorMessage2.parentNode);
            hide(myNotebookRegister.register_step1);
            hide(myNotebookRegister.register_step2);
            show(myNotebookRegister.register_step3);
            // add atlas tag
            var seoImg = atlasTagCONFIG.getAtlasImageTag(atlasTagCONFIG.seoCatNotebook, atlasTagCONFIG.seoCatNotebook);
            if(seoImg != null) myNotebookRegister.register_step3.appendChild(seoImg);
            document.getElementById("preferenceSearchState").focus();
            NotebookUtils.SetSignInStatus(true);
        }
        else
        {
            if (result.Retcode == Pulte08.BusinessServices.User.enumRegisterCode.REG_USER_REGISTERED){
                myNotebookRegister.errorMessage2.innerHTML = "";
                hide(myNotebookRegister.errorMessage2.parentNode);
                hide(myNotebookRegister.register_step2);
                show(myNotebookRegister.register_step1);
                myNotebookRegister.errorMessage1.innerHTML = "The NAME and EMAIL you entered indicate you are already a registered user, please <a href='javascript:myNotebookSignIn.openPanel();'>Sign In</a>";
                show(myNotebookRegister.errorMessage1.parentNode);
            } else if (result.Retcode == Pulte08.BusinessServices.User.enumRegisterCode.REG_USERNAME_EXISTS){
                myNotebookRegister.errorMessage2.innerHTML = "";
                hide(myNotebookRegister.errorMessage2.parentNode);
                hide(myNotebookRegister.register_step2);
                show(myNotebookRegister.register_step1);
                myNotebookRegister.errorMessage1.innerHTML = "The USERNAME that you entered is already in use. Please choose a different USERNAME";
                show(myNotebookRegister.errorMessage1.parentNode);
            } else if (result.Retcode == Pulte08.BusinessServices.User.enumRegisterCode.REG_FAILURE_VALIDATION || result.Retcode == Pulte08.BusinessServices.User.enumRegisterCode.REG_FAILURE_UNKNOWN){
                myNotebookRegister.errorMessage2.innerHTML = result.Message;
                show(myNotebookRegister.errorMessage2.parentNode);
            } else {
                myNotebookRegister.errorMessage2.innerHTML = "The website is not responding. Please try again later...";
                show(myNotebookRegister.errorMessage2.parentNode);
            }
        }
        ajaxLoading('regStep2SubmitDiv','completeStep2','end');
    },
    // ---------------------------- end: callBackRegStep2 --------------------------------------------------------------

    // callBackFailed
    callBackFailed: function(result, obj){
        obj.errObj.innerHTML = "The website is not responding. Please try again later...";
        show(obj.errObj.parentNode);
        ajaxLoading(obj.ajaxContainer,  obj.ajaxBtn, 'end');
    },
    // -------------------------- end: callBackFailed ------------------------------------------------------------------

    // loadHTML
    loadHTML: function(result){

        var regDiv = document.getElementById("registerPanel");
        regDiv.innerHTML = result;
        myNotebookRegister.initVars();

        renderNotebookRegisterCorners();
        /*
        Rounded('registerPanelCorners','div','all','transparent','#F5F9FD'); // my notebook register in
        Rounded('errorMessageArea','div','all','transparent','#B35817'); // my notebook error messages
        Rounded('infoBoxCornersNBReg','div','all','transparent','#FFF','border #9EC7E6'); // content info boxes
        Rounded('infoToolTipCorners','div','all','transparent','#FFF','border #D6BB85');
        */
        myNotebookRegister.isHTMLLoaded = true;
        // add event listen becuase the html is generated in the backend
        // listen to Regiser link click
        myNotebookRegister.addPanelListeners();
        // load styleInput
        var checkboxes = YUD.getElementsByClassName("styleInput", "input", "register_step1");
        for(var i=0; i < checkboxes.length; i++){
            CheckboxRadioStyle.addCheckboxStyle(checkboxes[i], i);
        }
        setbrokerFields("registerPanel");
        switchAddress("registerPanel");
        styleTextInput(regDiv);
        var stateSearchFld = document.getElementById("preferenceSearchState");
        populateStateOptions(stateSearchFld);
        populateHearAboutUsOptions("registerPanel");
        myNotebookRegister.openPanel();

    },
    // --------------------------- end: loadHTML -----------------------------------------------------------------------

    //loadTrigger
    loadTrigger: function(domObj) {
        var triggers;
        if(typeof domObj == "undefined"){
            triggers = YUD.getElementsByClassName('registerPanelTrigger','A');
        } else {
            triggers = YUD.getElementsByClassName('registerPanelTrigger','A', domObj);
        }
        // listen to Regiser link click
        YUE.addListener(triggers,'click',function() {
            // if we already loaded the html to the dom, just open the panel
            if(!myNotebookRegister.isHTMLLoaded){
                Pulte08.AjaxWebServices.UserService.GetRegistrationHTML(myNotebookRegister.loadHTML);
            } else {
                myNotebookRegister.openPanel();
            }
        });
    },
    // ----------------------------- end: loadTrigger ------------------------------------------------------------------
    // addPanelListeners
    addPanelListeners: function(){

        YUE.addListener(YUD.getElementsByClassName('signInTrigger','A', 'registerPanel'),'click',function() {
            myNotebookSignIn.openPanel();
        });

        // listen to sign out link
        YUE.addListener(YUD.getElementsByClassName('signOutTrigger','A', 'registerPanel'),'click',function() {
            Pulte08.AjaxWebServices.UserService.SignOut(NotebookUtils.callBackSignout);
        });

        // cancel / close
        YUE.addListener([myNotebookRegister.cancelLink, myNotebookRegister.thanksStep3],'click',function() {
            myNotebookRegister.closePanel();
        });

        // cancel / close
        YUE.addListener(myNotebookRegister.closeDialog,'click',function() {
            myNotebookPanel.openPanel();
        });

        // form validation for step 1 of registration
        YUE.addListener(myNotebookRegister.nextStep2,'click',function() {
            myNotebookRegister.submitRegStep1();
        });

        // form validation for step 2 of registration
        YUE.addListener(myNotebookRegister.completeStep2,'click',function() {
            myNotebookRegister.submitRegStep2();
        });
        // listen to infoTooltip
        var targets = YUD.getElementsByClassName('infoToolTipContainer', "div", "registerPanel");
	    for (var i=0; i < targets.length; i++) {createInfoToolTips(targets[i])}

        // listen to enter key
        var registerKeyPress = new YAHOO.util.KeyListener(document.NotebookRegisterForm,{keys:13},myNotebookRegister.submitRegForm);
		registerKeyPress.enable();


    }
    // --------------------------- end: addPanelListeners --------------------------------------------------------------
};
// ------------------------------- end: myNotebookRegister -------------------------------------------------------------

// myNotebookRecentlyViewed
var myNotebookViewedControl = {
    loadingDiv: null,
    // addPanelListeners
    addPanelListeners: function(){
        myNotebookViewedControl.loadingDiv = document.getElementById("recentlyViewedLoadingDiv");
        var regTrigger = document.getElementById('RecentCommunitiesTrigger');
        if(regTrigger){
           YUE.addListener(regTrigger,'click',function() {
               // check toggle, if show, call ajax
               setTimeout(function(){
                   var target = document.getElementById(NOTEBOOKCONFIG.viewedSubPanel.panel);
                   if(YUD.hasClass(target, "show")){
                       if(myNotebookViewedControl.loadingDiv){show(myNotebookViewedControl.loadingDiv);}
                       Pulte08.AjaxWebServices.RecentlyViewedService.RenderView(myNotebookViewedControl.callBackRenderResult);
                   }
               }, 100);
            });
        }
    },
    // ---------------------------- end: addPanelListeners -------------------------------------------------------------

    // callBackRenderResult
    callBackRenderResult: function(result){
        document.getElementById("vNeighborhoodListings").innerHTML = result;
        NotebookUtils.renderRoundCorner('hdrBarViewed');
        if(myNotebookViewedControl.loadingDiv){hide(myNotebookViewedControl.loadingDiv);}
    },
    // ----------------------------- end: callBackRenderResult ---------------------------------------------------------

    // refreshResult
    refreshResult: function(){
        Pulte08.AjaxWebServices.RecentlyViewedService.RenderView(myNotebookViewedControl.callBackRenderResult);
    }
    // ------------------------------- end: refresh result -------------------------------------------------------------
};
// ------------------------------ end: myNotebookRecentlyViewed --------------------------------------------------------

// myNotebookSavedControl
var myNotebookSavedControl = {
    // addPanelListeners
    loadingDiv: null,

    addPanelListeners: function(){
        myNotebookSavedControl.loadingDiv = document.getElementById("SavedCommunitiesLoadingDiv");
        var regTrigger = document.getElementById('SavedCommunitiesTrigger');
        if(regTrigger){
            YUE.addListener(regTrigger,'click',function() {
                setTimeout(function(){
                   var target = document.getElementById(NOTEBOOKCONFIG.savedSubPanel.panel);
                   if(YUD.hasClass(target, "show")){
                       if(myNotebookSavedControl.loadingDiv){show(myNotebookSavedControl.loadingDiv);}
                       Pulte08.AjaxWebServices.SavedProductsService.RenderView(myNotebookSavedControl.callBackRenderResult);
                   } else {
                       hide(myNotebookPanel.allSubPanels);
                   }
               }, 100);
            });
        }
    },
    // -------------------------- end: addPanelListeners ---------------------------------------------------------------
    // callBackRenderResult
    callBackRenderResult: function(result){
        // remove listeners
        myNotebookSavedControl.updateToggleListeners(true);
        myNotebookSavedControl.updateNoteCounter(true);
        var actionBar = document.getElementById("SaveCommunitiesActions");
        if(result == ""){
            document.getElementById("SavedCommunities").innerHTML = "<p><br />Please explore communities and plans.</p>";
            hide(actionBar);
        }else {
            document.getElementById("SavedCommunities").innerHTML = result;
            // display actions
            show(actionBar);

            NotebookUtils.renderRoundCorner('hdrBar');
            // add toggle listeners
            myNotebookSavedControl.updateToggleListeners(false);
            myNotebookSavedControl.updateNoteCounter(false);
        }
        if(myNotebookSavedControl.loadingDiv){hide(myNotebookSavedControl.loadingDiv);}
    },
    // ----------------------------- end: callBackRenderResult ---------------------------------------------------------
    // refreshResult
    refreshResult: function(){
        if(myNotebookSavedControl.loadingDiv){show(myNotebookSavedControl.loadingDiv);}
        Pulte08.AjaxWebServices.SavedProductsService.RenderView(myNotebookSavedControl.callBackRenderResult);
    },
    // ------------------------------- end: refresh result -------------------------------------------------------------
    //updateToggleListeners
    updateToggleListeners: function(isRemoved){

        var theObject = YUD.getElementsByClassName('toggle', "div", "SavedCommunities");
        for (var i=0; i < theObject.length; i++) {
            var theTrigger = YUD.getElementsByClassName('toggleTrigger','',theObject[i])[0];
            if(theTrigger){
                if(isRemoved){
                    YUE.purgeElement(theTrigger);
                }else {
                    // if it is a notes link, check if we use has logged in
                    if(theTrigger.className && YUD.hasClass(theTrigger, "notesLink")){
                        if(NotebookUtils.getSignInStatus()){
                            handleDropDown(theObject[i], theTrigger);
                        } else{
                            YUE.addListener(theTrigger, 'click', function(){NotebookUtils.displayRegMarketingInfo(true);})
                        }
                    } else {
                        handleDropDown(theObject[i], theTrigger);
                    }
                }
            }
        }
    },
    // -------------------------------- end: udpateToggleListeners -----------------------------------------------------
    //updateNoteCounter
    updateNoteCounter: function(isRemoved){
        if(isRemoved){
            // remove listeners
            var targets = YUD.getElementsByClassName('charTarget', "textarea", "SavedCommunities");
            for(var i=0; i < targets.length; i++){
                YUE.purgeElement(targets[i]);
            }
        } else {
            // add listener
            var targets = YUD.getElementsByClassName('charCount', "div", "SavedCommunities");
            for (var i=0; i < targets.length; i++) {
                charCount(targets[i], 255);
            }
        }
    }
    // --------------------------------- end: updateNoteCounter --------------------------------------------------------
};
// ------------------------------------- end: myNotebookSavedControl ---------------------------------------------------

// myNotebookProfileControl
var myNotebookProfileControl = {
    // addPanelListeners
    addPanelListeners: function(){
        var regTrigger = document.getElementById('ProfileTrigger');
        if(regTrigger){
            YUE.addListener(regTrigger,'click',function() {
                setTimeout(function(){
                   var target = document.getElementById(NOTEBOOKCONFIG.profileSubPanel.panel);
                   if(YUD.hasClass(target, "show")){
                       myNotebookProfileControl.callBackSignInResult(NotebookUtils.getSignInStatus());
                       var regDiv = document.getElementById("profileRegisterInfo");
                       if(regDiv.style.display == "none")
                           document.profileInfo.profileFirstName.focus();
                   }
               }, 100);
            });
        }
    },
    // -------------------------- end: addPanelListeners ---------------------------------------------------------------
    // callBackSignInResult
    callBackSignInResult: function(result){
        var profileDiv = document.getElementById("profileDetailInfo");
        var regDiv = document.getElementById("profileRegisterInfo");
        if(result){
            profileDiv.style.display = "";
            regDiv.style.display = "none";
            Pulte08.AjaxWebServices.UserService.GetProfileInfo(myNotebookProfileControl.callBackRenderResult);
        } else {
            regDiv.style.display = "";
            profileDiv.style.display = "none";
        }
    },
    // ----------------------------- end: callBackSignInResult ---------------------------------------------------------
    // callBackRenderResult
    callBackRenderResult: function(result){
      if (document.getElementById("myNotebookPanel") != null) {
          myNotebookPanel.profileError.innerHTML = "";
          hide(myNotebookPanel.profileError.parentNode);
        }
        if (result != null)
        {
            //updateProfileArea
            if(document.getElementById("profileFirstName")){
                document.getElementById("profileFirstName").value = result.FirstName;
                document.getElementById("profileLastName").value = result.LastName;
                document.getElementById("profileUserEmail").value = result.Email;
                document.getElementById("profileUserName").value = result.Username;
                document.getElementById("profileAddress1").value = (result.Address1 && result.Address1 != "null")?result.Address1:"";
                document.getElementById("profileAddress2").value = (result.Address2 && result.Address2 != "null")?result.Address2:"";
                document.getElementById("profileCity").value = (result.City && result.City != "null")?result.City:"";
                document.getElementById("profileZip").value = (result.PostalCode && result.PostalCode != "null")?result.PostalCode:"";
                document.getElementById("profilePhone1").value = (result.Phone1 && result.Phone1 != "null")?result.Phone1:"";
                document.getElementById("profilePhone2").value = (result.Phone2 && result.Phone2 != "null")?result.Phone2:"";
                if(result.CountryCode && result.CountryCode != "null" && result.CountryCode != "" && result.CountryCode != "US"){
                    document.getElementById("profilePostal").value = (result.PostalCode && result.PostalCode != "null")?result.PostalCode:"";
                    // for international address it can be either one of two values:
                    document.getElementById("profileProvince").value = (result.ProvinceRegion && result.ProvinceRegion != "null")?result.ProvinceRegion:(result.StateAbbreviation && result.StateAbbreviation != "null")?result.StateAbbreviation:"";
                    // display international section
                    var intl = YUD.getElementsByClassName("international", "div","profileDetailInfo")[0];
                    populateCountryOptions(intl);
                    YUD.addClass(intl,'loaded');
                    toggleAddress("profileDetailInfo", "international");
                    setSelectBoxValue(document.getElementById("profileCountry"), result.CountryCode);
                }
                else {
                    setSelectBoxValue(document.getElementById("profileState"), result.StateAbbreviation);
                    setSelectBoxValue(document.getElementById("profileCountry"), result.CountryCode);
                    document.getElementById("profileProvince").value = "";
		    document.getElementById("profilePostal").value = "";
		    document.getElementById("profileZip").value = (result.PostalCode && result.PostalCode != "null")?result.PostalCode:"";
		    toggleAddress("profileInfo", "domestic");
                }

                // update realtor info
                var controlImg = YUD.getPreviousSibling("profileRealtor");
                if(result.IsRealtor){
                    document.getElementById("profileRealtor").checked = true;
                    if(controlImg!=null){
						controlImg.src = returnCheckboxImgTrue('regRealtor');
					}
                    var realtorDiv = YUD.getElementsByClassName("brokerFields", "div", "profileDetailInfo")[0];
                    if(realtorDiv) show(realtorDiv);

                } else {
                    document.getElementById("profileRealtor").checked = false;
					if(controlImg!=null){
						controlImg.src = returnCheckboxImgFalse('regRealtor');
					}
                }
                document.getElementById("profileBrokerOffice").value = (result.BrokerOffice && result.BrokerOffice != "null")?result.BrokerOffice:"";
                document.getElementById("profileBrokerID").value = (result.BrokerTaxID && result.BrokerTaxID != "null")?result.BrokerTaxID:"";
            }
            // Update Share Area
            if(document.getElementById("shareFirstName")){
                document.getElementById("shareFirstName").value = result.FirstName;
                document.getElementById("shareLastName").value = result.LastName;
                document.getElementById("shareEmail").value = result.Email;
            }
            // update Directions Area
            if(document.getElementById("driveAddress")){
                document.getElementById("driveAddress").value = result.Address1;
                document.getElementById("driveCity").value = result.City;
                setSelectBoxValue(document.getElementById("driveState"), result.StateAbbreviation);
                document.getElementById("driveZip").value = result.PostalCode;
            }
            // update welcome Text
            var userWelcomeText = document.getElementById("userWelcomeText");
            userWelcomeText.innerHTML = "Welcome Home, " + result.FirstName;
            myNotebookSignIn.errorMessage.innerHTML = '';
        }
		// populate contact us form
		if (document.contact) populateContactForm("in");
		// populate tell a friend form
		if (document.tell) populateTellForm();
        // populate predefined landing page
        if(document.LandingSignUpForm) SoftJoinControl.populateSignUpForm();
    }
    // ------------------------------ end: callBackRenderResult --------------------------------------------------------

};
// -------------------------------------- end: myNotebookProfileControl ------------------------------------------------


// NotebookUtils
var NotebookUtils = {

    //callBackSignout
    callBackSignout: function(){
        NotebookUtils.SetSignInStatus(false);
        if(openedNotebookSection){
            openedNotebookSection.hide();
            modalBackdrop.hide();
        }
        //
        if (document.contact) populateContactForm("out");
        if (document.LandingSignUpForm) SoftJoinControl.resetSignUpForm();
    },
    // -------------------------------------------------- end: callBackSignout -----------------------------------------

    // setSignInStatus
    SetSignInStatus: function(isLogin){
      var loginStatus = document.getElementById("loginStatus");
      loginStatus.value = isLogin;

      var signInDivs = YUD.getElementsByClassName("myNotebookSignIn", "div");
      var signOutDivs = YUD.getElementsByClassName("myNotebookSignOut", "div");
      var profileDiv = document.getElementById("profileDetailInfo");
      var regDiv = document.getElementById("profileRegisterInfo");

      // get user data from Ajax call
      if(isLogin){
          // display sign out link
          for(var i =0; i < signInDivs.length; i++){signInDivs[i].style.display = "none";}
          for(var i =0; i < signOutDivs.length; i++){signOutDivs[i].style.display = "";}
          // display profile detail section
          if(profileDiv) profileDiv.style.display = "";
          if(regDiv) regDiv.style.display = "none";
          // load profile data
          if (window.signedInUser != null) {
            myNotebookProfileControl.callBackRenderResult(signedInUser);
          } else {
            Pulte08.AjaxWebServices.UserService.GetProfileInfo(myNotebookProfileControl.callBackRenderResult);
          }
      } else {
          // display sign in Link
          for(var i =0; i < signInDivs.length; i++){signInDivs[i].style.display = "";}
          for(var i =0; i < signOutDivs.length; i++){signOutDivs[i].style.display = "none";}
          // display please register info
          if(profileDiv)profileDiv.style.display = "none";
          if(regDiv)regDiv.style.display = "";
          // set the welcome text to be blank
          var userWelcomeText = document.getElementById("userWelcomeText");
          userWelcomeText.innerHTML = "";
          myNotebookSignIn.errorMessage.innerHTML = '';
      }

      NotebookUtils.displayRegMarketingInfo(false);
      //myNotebookViewedControl.refreshResult();
      //myNotebookSavedControl.refreshResult();

    },
    // ------------------------- end SetSignInStatus -------------------------------------------------------------------

    // SetSignInException
    SetSignInException: function(result){
    },
    // -------------------------- end: SetSignInException --------------------------------------------------------------

    //getSignInStatus
    getSignInStatus: function(){
        var isLogin = false;
        var loginStatus = document.getElementById("loginStatus").value;
        if(loginStatus == "true") isLogin = true;
        return isLogin;
    },
    // -------------------------- end: getSignInStatus -----------------------------------------------------------------

    //displayRegisterAdv
    displayRegMarketingInfo: function(isTrue){
        var msgDiv = YUD.getElementsByClassName("messageArea", "div", "myNotebook")[0];
        if(msgDiv){
            if(isTrue) show(msgDiv);
            else hide(msgDiv);
        }
    },
    // -----------------------------------------------------------------------------------------------------------------
    //saveCommunityToNotebook
    saveCommunity: function(communityId){
        Pulte08.AjaxWebServices.SavedProductsService.SaveCommunity(communityId, NotebookUtils.callBackSaveAndRemove);
    },
    // ------------------------- end: saveCommunityToNotebook ----------------------------------------------------------

    //savePlanToNotebook
    savePlan: function(planId){
        Pulte08.AjaxWebServices.SavedProductsService.SavePlan(planId, NotebookUtils.callBackSaveAndRemove);
    },
    // -------------------------- end: savePlanToNotebook --------------------------------------------------------------

    //saveInvHomeToNotebook
    saveInventoryHome: function(inventoryHomeId){
        Pulte08.AjaxWebServices.SavedProductsService.SaveInventoryHome(inventoryHomeId, NotebookUtils.callBackSaveAndRemove);
    },
    // -------------------------- end: saveInvHomeToNotebook --------------------------------------------------------------

    //removeCommunityFromNotebook
    removeCommunity: function(communityId, obj){
        // display delete confirmation message
        if(obj){
            var pObj = obj.parentNode;
            var confirmDiv;
            // check if div has been created
            confirmDiv = YUD.getElementsByClassName('NBConfirmDelete', 'div', pObj)[0];
            // if the div is not found, create it
            if(!confirmDiv){
                //var removeLink = pObj.getElementsByTagName('a')[0];
                confirmDiv = document.createElement('div');
                confirmDiv.className = 'NBConfirmDelete';
                confirmDiv.appendChild(document.createTextNode('Remove Neighborhood? '));
                // yes link
                var a = document.createElement('a');
                a.href='javascript:void("");'
                a.onclick = function(){NotebookUtils.removeCommunityConfirm(communityId, obj);};
                a.appendChild(document.createTextNode('Yes'));
                confirmDiv.appendChild(a);
                confirmDiv.appendChild(document.createTextNode(' | '));
                // no link
                a = document.createElement('a');
                a.href='javascript:void("")';
                a.onclick = function(){NotebookUtils.removeCommunityCancel(obj);};
                a.appendChild(document.createTextNode('No'));
                confirmDiv.appendChild(a);
                confirmDiv.appendChild(document.createTextNode(' | '));
                // cancel link
                a = document.createElement('a');
                a.href='javascript:void("")';
                a.onclick = function(){NotebookUtils.removeCommunityCancel(obj);};
                a.appendChild(document.createTextNode('Cancel'));
                confirmDiv.appendChild(a);
                pObj.appendChild(confirmDiv);
            } else {
                show(confirmDiv);
            }
        }
    },
    // ------------------------- end: removeCommunityFromNotebook ------------------------------------------------------

    //removeCommunityFromNotebook
    removeCommunityConfirm: function(communityId, obj){
        // display delete confirmation message
        if(obj){
            var pObj = obj.parentNode;
            var confirmDiv = YUD.getElementsByClassName('NBConfirmDelete', 'div', pObj)[0];
            // if the div is not found, create it
            if(confirmDiv) hide(confirmDiv);
            Pulte08.AjaxWebServices.SavedProductsService.RemoveCommunity(communityId, NotebookUtils.callBackSaveAndRemove, NotebookUtils.callBackSaveAndRemoveFailed, obj);
        }
    },
    // ------------------------------------- end: removeCommunityConfirm -----------------------------------------------

    //removeCommunityFromNotebook
    removeCommunityCancel: function(obj){
        // hide the confirm popup
        if(obj){
            var pObj = obj.parentNode;
            var confirmDiv = YUD.getElementsByClassName('NBConfirmDelete', 'div', pObj)[0];
            if(confirmDiv) hide(confirmDiv);
        }
    },
    // --------------------------------------- remove Community Cancel -------------------------------------------------

    //removePlanFromNotebook
    removePlan: function(planId, obj){
        // display delete confirmation message
        if(obj){
            var pObj = obj.parentNode;
            var confirmDiv;
            // check if div has been created
            confirmDiv = YUD.getElementsByClassName('NBConfirmDeletePlan', 'div', pObj)[0];
            // if the div is not found, create it
            if(!confirmDiv){
                confirmDiv = document.createElement('div');
                confirmDiv.className = 'NBConfirmDeletePlan';
                confirmDiv.appendChild(document.createTextNode('Remove Home Model?'));
                confirmDiv.appendChild(document.createElement('br'));
                // yes link
                var a = document.createElement('a');
                a.href='javascript:void("");'
                a.onclick = function(){NotebookUtils.removePlanConfirm(planId, obj);};
                a.appendChild(document.createTextNode('Yes'));
                confirmDiv.appendChild(a);
                confirmDiv.appendChild(document.createTextNode(' | '));
                // no link
                a = document.createElement('a');
                a.href='javascript:void("")';
                a.onclick = function(){NotebookUtils.removePlanCancel(obj);};
                a.appendChild(document.createTextNode('No'));
                confirmDiv.appendChild(a);
                confirmDiv.appendChild(document.createTextNode(' | '));
                // cancel link
                a = document.createElement('a');
                a.href='javascript:void("")';
                a.onclick = function(){NotebookUtils.removePlanCancel(obj);};
                a.appendChild(document.createTextNode('Cancel'));
                confirmDiv.appendChild(a);
                pObj.appendChild(confirmDiv);

            } else {
                show(confirmDiv);
            }
        }

    },
    // -------------------------- end: removePlanFromNotebook ----------------------------------------------------------

    //removePlanFromNotebook
    removePlanConfirm: function(planId, obj){
        // display delete confirmation message
        if(obj){
            var pObj = obj.parentNode;
            var confirmDiv = YUD.getElementsByClassName('NBConfirmDeletePlan', 'div', pObj)[0];
            // if the div is not found, create it
            if(confirmDiv) hide(confirmDiv);
            Pulte08.AjaxWebServices.SavedProductsService.RemovePlan(planId, NotebookUtils.callBackSaveAndRemove, NotebookUtils.callBackSaveAndRemoveFailed, obj);
        }
    },
    // -------------------------- end: removePlanFromNotebook ----------------------------------------------------------

    //removePlanFromNotebook
    removePlanCancel: function(obj){
        var pObj = obj.parentNode;
        var confirmDiv = YUD.getElementsByClassName('NBConfirmDeletePlan', 'div', pObj)[0];
        if(confirmDiv) hide(confirmDiv);
    },
    // -------------------------- end: removePlanFromNotebook ----------------------------------------------------------


    //removeInvHome
    removeInventoryHome: function(inventoryHomeId, obj){
        // display delete confirmation message
        if(obj){
            var pObj = obj.parentNode;
            var confirmDiv;
            // check if div has been created
            confirmDiv = YUD.getElementsByClassName('NBConfirmDeletePlan', 'div', pObj)[0];
            // if the div is not found, create it
            if(!confirmDiv){
                confirmDiv = document.createElement('div');
                confirmDiv.className = 'NBConfirmDeletePlan';
                confirmDiv.appendChild(document.createTextNode('Remove Home Model?'));
                confirmDiv.appendChild(document.createElement('br'));
                // yes link
                var a = document.createElement('a');
                a.href='javascript:void("");'
                a.onclick = function(){NotebookUtils.removeInventoryHomeConfirm(inventoryHomeId, obj);};
                a.appendChild(document.createTextNode('Yes'));
                confirmDiv.appendChild(a);
                confirmDiv.appendChild(document.createTextNode(' | '));
                // no link
                a = document.createElement('a');
                a.href='javascript:void("")';
                a.onclick = function(){NotebookUtils.removeInventoryHomeCancel(obj);};
                a.appendChild(document.createTextNode('No'));
                confirmDiv.appendChild(a);
                confirmDiv.appendChild(document.createTextNode(' | '));
                // cancel link
                a = document.createElement('a');
                a.href='javascript:void("")';
                a.onclick = function(){NotebookUtils.removeInventoryHomeCancel(obj);};
                a.appendChild(document.createTextNode('Cancel'));
                confirmDiv.appendChild(a);
                pObj.appendChild(confirmDiv);
            } else {
                show(confirmDiv);
            }
        }
    },
    // -------------------------- end: removePlanFromNotebook ----------------------------------------------------------

    //removeInvHomeConfirm
    removeInventoryHomeConfirm: function(inventoryHomeId, obj){
        // display delete confirmation message
        if(obj){
            var pObj = obj.parentNode;
            var confirmDiv = YUD.getElementsByClassName('NBConfirmDeletePlan', 'div', pObj)[0];
            // if the div is not found, create it
            if(confirmDiv) hide(confirmDiv);
            Pulte08.AjaxWebServices.SavedProductsService.RemoveInventoryHome(inventoryHomeId, NotebookUtils.callBackSaveAndRemove, NotebookUtils.callBackSaveAndRemoveFailed, obj);
        }

    },
    // -------------------------- end: removePlanFromNotebook ----------------------------------------------------------

    //removeInvHomeCancel
    removeInventoryHomeCancel: function(obj){
        var pObj = obj.parentNode;
        var confirmDiv = YUD.getElementsByClassName('NBConfirmDeletePlan', 'div', pObj)[0];
        if(confirmDiv) hide(confirmDiv);
    },
    // -------------------------- end: removePlanFromNotebook ----------------------------------------------------------

    // callBackSaveCommunity
    callBackSaveAndRemove: function(result, obj){
        if(result == Pulte08.BusinessServices.User.enumSaveData.SAVE_SUCCESS){
            NotebookUtils.displayRegMarketingInfo(false);
            myNotebookViewedControl.refreshResult();
            myNotebookSavedControl.refreshResult();
        } else if(result == Pulte08.BusinessServices.User.enumSaveData.SAVE_COOKIE_FULL){
            NotebookUtils.displayRegMarketingInfo(true);
        } else {
            if(obj) obj.innerHTML = "Error: Remove";
           NotebookUtils.displayRegMarketingInfo(false);
        }
    },
    // --------------------------- end: callBackSaveCommunity ----------------------------------------------------------

    // callBackSaveCommunity
    callBackSaveAndRemoveFailed: function(result, obj){
        if(obj)obj.innerHTML = "Error: Remove";
    },
    // --------------------------- end: callBackSaveCommunity ----------------------------------------------------------

    //saveNotes
    saveNotes: function(notation, txtBoxId){
        var notes = document.getElementById(txtBoxId);
        if(notes){
            Pulte08.AjaxWebServices.SavedProductsService.SaveNotes(notation, notes.value, NotebookUtils.callBackSaveAndDeleteNotes);
        }

    },
    // --------------------------- end: saveNotes ----------------------------------------------------------------------
    //callBackSaveNotes
    callBackSaveAndDeleteNotes: function(result, obj){
        // display notes save?
    },
    // --------------------------- end: callBackSaveNotes --------------------------------------------------------------

    //callBackSaveNotes
    callBackSaveAndDeleteNotesFailed: function(result, obj){
        // display notes save?
        if(obj) obj.innerHTML = "Error: Delete Notes";
    },
    // --------------------------- end: callBackSaveNotes --------------------------------------------------------------

    //deleteNotes
    deleteNotes: function(notation, txtBoxId, obj){
        // display delete confirmation message
        if(obj){
            var pObj = obj.parentNode;
            var confirmDiv;
            // check if div has been created
            confirmDiv = YUD.getElementsByClassName('NBConfirmDeleteNotes', 'div', pObj)[0];
            // if the div is not found, create it
            if(!confirmDiv){
                //var removeLink = pObj.getElementsByTagName('a')[0];
                confirmDiv = document.createElement('div');
                confirmDiv.className = 'NBConfirmDeleteNotes';
                confirmDiv.appendChild(document.createTextNode('Delete Notes? '));
                // yes link
                var a = document.createElement('a');
                a.href='javascript:void("");'
                a.onclick = function(){NotebookUtils.deleteNotesConfirm(notation, txtBoxId, obj);};
                a.appendChild(document.createTextNode('Yes'));
                confirmDiv.appendChild(a);
                confirmDiv.appendChild(document.createTextNode(' | '));
                // no link
                a = document.createElement('a');
                a.href='javascript:void("")';
                a.onclick = function(){NotebookUtils.deleteNotesCancel(obj);};
                a.appendChild(document.createTextNode('No'));
                confirmDiv.appendChild(a);
                confirmDiv.appendChild(document.createTextNode(' | '));
                // cancel link
                a = document.createElement('a');
                a.href='javascript:void("")';
                a.onclick = function(){NotebookUtils.deleteNotesCancel(obj);};
                a.appendChild(document.createTextNode('Cancel'));
                confirmDiv.appendChild(a);
                pObj.appendChild(confirmDiv);
            } else {
                show(confirmDiv);
            }
        }
    },
    // --------------------------- end: deleteNotes --------------------------------------------------------------------

    //deleteNotesConfirm
    deleteNotesConfirm: function(notation, txtBoxId, obj){
        // display delete confirmation message
        if(obj){
            var pObj = obj.parentNode;
            var confirmDiv = YUD.getElementsByClassName('NBConfirmDeleteNotes', 'div', pObj)[0];
            // if the div is not found, create it
            if(confirmDiv) hide(confirmDiv);
            var notes = document.getElementById(txtBoxId);
            if(notes){
                notes.value = "";
                Pulte08.AjaxWebServices.SavedProductsService.SaveNotes(notation, "", NotebookUtils.callBackSaveAndDeleteNotes, NotebookUtils.callBackSaveAndRemoveFailed, obj);
            }
        }
    },
    // --------------------------- end: deleteNotesConfirm -------------------------------------------------------------

    //deleteNotesCancel
    deleteNotesCancel: function(obj){
        var pObj = obj.parentNode;
        var confirmDiv = YUD.getElementsByClassName('NBConfirmDeleteNotes', 'div', pObj)[0];
        if(confirmDiv) hide(confirmDiv);
    },
    // --------------------------- end: deleteNotesCancel --------------------------------------------------------------

    // renderRoundCorner
    renderRoundCorner: function(className){
        if (getCurrSite()=='Pulte')
            Rounded(className,'div','all','transparent','#E6F0FB'); // my notebook header bars
        else if (getCurrSite()=='DelWebb')
            Rounded(className,'div','all','transparent','#E6F0FB'); // my notebook header bars
        else
            Rounded(className,'div','all','transparent','#CEDEBB'); // my notebook header bars
    },
    // -------------------------- end: renderRoundCorner ---------------------------------------------------------------

    // getDirections
    getDirections: function(dirURL){
        var fastPass = document.getElementById("driveFastPassURL");
        fastPass.value = dirURL;
        document.getElementById('NBDrivingLink').href=dirURL;
        var formDiv = document.getElementById('NBDrivingForm');
        var descDiv = document.getElementById('NBDrivingDesc');
        var loadingDiv = document.getElementById('NBDrivingLoading');
        // hide divs
        hide(formDiv);
        hide(descDiv);
        show(loadingDiv);
        myNotebookPanel.openSubPanel(myNotebookPanel.driveDirections);
        // web service call to check if it is mapable
        Pulte08.AjaxWebServices.SavedProductsService.IsFastPassMappable(dirURL, NotebookUtils.callBackDirections);

    },
    // --------------------------- end: getDirections ------------------------------------------------------------------

    //callBackDirections
    callBackDirections: function(result){
        var formDiv = document.getElementById('NBDrivingForm');
        var descDiv = document.getElementById('NBDrivingDesc');
        var loadingDiv = document.getElementById('NBDrivingLoading');
        if(result){
            show(formDiv);
            hide(descDiv);
            hide(loadingDiv);
            document.getElementById("driveAddress").focus();
        } else {
            hide(formDiv);
            show(descDiv);
            hide(loadingDiv);
        }
    },
    // --------------------------- end: callBackDirections -------------------------------------------------------------

    // remove all of the listener via addListener function
    removeCheckboxListeners: function(obj){
        // remove listeners
        YUE.purgeElement(obj);
        // remove the image listeners
        var img = YUD.getPreviousSibling(obj);
        if(img){
            YUE.purgeElement(img);
        }
        if(isIE){
            var inputLabel = YUD.getNextSibling(obj);
            if(inputLabel){
                YUE.purgeElement(inputLabel);
            }
        }
    },
    // ---------------------------------------- end: removeObjListeners ------------------------------------------------

    // searchByState
    searchByState: function(){
        var state = document.getElementById("preferenceSearchState").value;
        var url;
	if(getCurrSite() != "Pulte"){ 
	    url = "/" + getCurrSite() + NOTEBOOKCONFIG.searchURL;
	}
	else{
	    url = NOTEBOOKCONFIG.searchURL;
        }
        
        if(state != ""){
            url += "?state=" +  state + '&brand=' + productSearchBrandIds[getCurrSite()];
        } else {
            url += '?brand=' + productSearchBrandIds[getCurrSite()];
        }
        window.location = url;
    },
    //----------------------------------------- end: search by State ---------------------------------------------------

    //togglePanel
    togglePanel: function(trigger, panel, isShow){

        if(isShow){
            if(YUD.hasClass(panel,'hide')){
                YUD.replaceClass(panel,'hide','show');
                 if (trigger.getElementsByTagName('img')[0]) {
                    var newTarget = trigger.getElementsByTagName('img')[0];
                    var newSrc = newTarget.src.replace('plus','minus');
                    newTarget.setAttribute('src',newSrc);
                }
            }
        } else {
            if(YUD.hasClass(panel,'show')){
                YUD.replaceClass(panel,'show','hide');
                 if (trigger.getElementsByTagName('img')[0]) {
                    var newTarget = trigger.getElementsByTagName('img')[0];
                    var newSrc = newTarget.src.replace('minus','plus');
                    newTarget.setAttribute('src',newSrc);
                }
            }
        }

    },
    // -------------------------------------- end: togglePanel ---------------------------------------------------------
    //validateAddress
    validateAddress: function(address1, address2, city, state, zip, province, postalCode, country, isInternational){
        var error_string = "";
        if(address1 != "" || address2 != "" || city != "" || zip != "" || province != "" || postalCode != ""){
            if(address1 == "") error_string += "Please enter a valid Address<br />";
            if(city == "") error_string += "Please enter a valid CITY<br />";
            if(!isInternational){
                if(zip == "") {error_string += "Please enter a valid ZIP CODE.<br />";}
                else if(!validateZipStructure(zip)){ error_string += "Please enter a valid ZIP<br />";}
            } else {
                if(province == ""){error_string += "Please enter a valid Province/Region.<br />";}
                if(postalCode == ""){error_string += "Please enter a valid Postal Code.<br />";}
            }
        }
        if(isInternational){
            if(country == "") error_string += "Please select a valid COUNTRY<br />";
        }else {
            if(state == "") error_string += "Please select a valid STATE<br />";
        }

        return error_string;
    },
    // -------------------------------------- end: validateAddress -----------------------------------------------------
    //validateCountry
    validateCountry: function(state, country, isInternational){
        var error_string = "";
        if(isInternational){
            if(country == "") error_string += "Please select a valid COUNTRY<br />";
        }else {
            if(state == "") error_string += "Please select a valid STATE<br />";
        }

        return error_string;
    },
    // -------------------------------------- end: validateCountry -----------------------------------------------------
    validateProfileInfo: function(fName, lName, email, username, password, password2, isProfile){
        fName = fName.trim();
        lName = lName.trim();
        username = username.trim();
        password = password.trim();
        password2 = password2.trim();
        var error_string = "";
        if (fName == "") error_string += 'Please enter a valid FIRST NAME<br />';
		if (lName == "") {error_string += 'Please enter a valid LAST NAME<br />';} else if (lName.length < 2){error_string += "Last Name must be at least 2 characters long.<br />";}
		if (email == "") {
			error_string += 'Please enter a valid EMAIL ADDRESS<br />';
		} else if (!check_email(email)) {
			error_string += 'Please enter a valid EMAIL ADDRESS<br />';
		}
        if (username == "") error_string += 'Please enter a valid USERNAME<br />';

        if ((password == "" || password2 == "") && !isProfile) {
            if(password == "")
                error_string += 'Please enter a valid PASSWORD<br />';
            else
                error_string += 'Please enter a valid CONFIRM PASSWORD<br />';
        } else if (password != "" && password2 != "" && password != password2) {
			error_string += 'The PASSWORDs do not match!<br />';
		} else if(password != "" && (password.length < 5 || password.length > 20)) {
            error_string += 'PASSWORD must be at least 5 characters and up to 20 characters<br />';
        }
        return error_string;
    },
    // --------------------------------------------- end: validateProfileInfo ------------------------------------------
    // validateRealtor
    validateRealtor: function(isRealtor, brokerOffice, brokerId){
        var error_string = "";
        if(isRealtor){
            if (brokerOffice == '') error_string += 'Please enter your BROKER OFFICE<br />';
			if (brokerId == '') error_string += 'Please enter your BROKER ID<br />';
        }
        return error_string;
    },
    // --------------------------------------------- end: validateRealtor ----------------------------------------------

    //validatePhoneNumbers
    validatePhoneNumbers: function(phone, fldName){
        var error_string = "";
        if(!validateUSphoneStructure(phone))
            error_string += "Please enter a valid " + fldName + " Number<br />";
        return error_string;
    },
    // -------------------------------------------- end: validatePhoneNumber -------------------------------------------
    // alignNotebook
    alignNotebook: function(){
        if(myNotebookPanel.overlayPanel){myNotebookPanel.overlayPanel.align("tr", "tr");}
        if(myNotebookRegister.overlayPanel){myNotebookRegister.overlayPanel.align("tr", "tr");}
        if(myNotebookSignIn.overlayPanel){myNotebookSignIn.overlayPanel.align("tr", "tr");}
    },
    // --------------------------------------------- end: alignNotebook ------------------------------------------------
    //createLoadingImg
    createLoadingImg: function(){
        var image = document.createElement('img');
	    image.id = 'ajaxSpinner';
	    image.setAttribute('alt','loading...');
	    image.setAttribute('src','/images/global/spinner.gif');
        return image;
    },
    // --------------------------------------------- end: createLoadingImg ---------------------------------------------

    //saveCommunityToNotebook - from community & plan page
    saveCommunityToNotebook: function(communityId, linkObj, linkCSS){
        var context = {linkRef: linkObj, cssRef: ""};
        if(typeof linkCSS != "undefined"){
            context.cssRef = linkCSS;
        }
        Pulte08.AjaxWebServices.SavedProductsService.SaveCommunity(communityId, NotebookUtils.callBackSaveToNotebookSuccess, NotebookUtils.callBackSaveToNotebookFailed, context);
    },
    // --------------------------------------------- end: saveCommunityToNotebook --------------------------------------

    // savePlanToNotebook - from community & plan page
    savePlanToNotebook: function(planId, linkObj, linkCSS){
        var context = {linkRef: linkObj, cssRef: ""};
        if(typeof linkCSS != "undefined"){
            context.cssRef = linkCSS;
        }
        Pulte08.AjaxWebServices.SavedProductsService.SavePlan(planId, NotebookUtils.callBackSaveToNotebookSuccess, NotebookUtils.callBackSaveToNotebookFailed, context);
    },
    // --------------------------------------------  end: savePlanToNotebook -------------------------------------------

    //saveInventoryHomeToNotebook
    saveInventoryHomeToNotebook: function(homeId, linkObj, linkCSS){
        var context = {linkRef: linkObj, cssRef: ""};
        if(typeof linkCSS != "undefined"){
            context.cssRef = linkCSS;
        }
        Pulte08.AjaxWebServices.SavedProductsService.SaveInventoryHome(homeId, NotebookUtils.callBackSaveToNotebookSuccess, NotebookUtils.callBackSaveToNotebookFailed, context);
    },
    // --------------------------------------------- end: saveInventoryHomeToNotebook ----------------------------------

    // callBackSaveCommunityAndPlan
    callBackSaveToNotebookSuccess: function(result, context){
        if(result == Pulte08.BusinessServices.User.enumSaveData.SAVE_SUCCESS){
            context.linkRef.innerHTML = "Saved";
            var curCSS = context.linkRef.className;
            if(context.cssRef != ""){
                YUD.replaceClass(context.linkRef, curCSS, context.cssRef);
            }
        } else if(result == Pulte08.BusinessServices.User.enumSaveData.SAVE_COOKIE_FULL){
            location.href = "#content";
            myNotebookPanel.openPanel();
            NotebookUtils.displayRegMarketingInfo(true);
        } else {
           context.linkRef.innerHTML = "Error: Save To Notebook";
        }
    },
    // --------------------------------------------- end: callBackSaveCommunityAndPlan ---------------------------------
    // callBackSaveCommunityAndPlan
    callBackSaveToNotebookFailed: function(result, context){
        context.linkRef.innerHTML = "Error: Save To Notebook";
    }
    // --------------------------------------------- end: callBackSaveCommunityAndPlan ---------------------------------

};
//-------------------------------------- end: NotebookUtils ------------------------------------------------------------

function initUserNotebook (){
    // add signIn listeners
    myNotebookSignIn.addPanelListeners();
    // check user's sign in status
    if (window.signedInStatus != null) { // signedInStatus was declared and set in the master page by user control SignedInStatus
      NotebookUtils.SetSignInStatus(signedInStatus);
    } else { 
      Pulte08.AjaxWebServices.UserService.IsSignedIn(NotebookUtils.SetSignInStatus, NotebookUtils.SetSignInException);
    }
    // myNotebook with sub panels
    myNotebookPanel.addPanelListeners();
    myNotebookViewedControl.addPanelListeners();
    myNotebookSavedControl.addPanelListeners();
    myNotebookProfileControl.addPanelListeners();

    // listen to Regiser link click
    myNotebookRegister.loadTrigger();
    // listen to sign out link
    YUE.addListener(YUD.getElementsByClassName('signOutTrigger','A'),'click',function() {
        Pulte08.AjaxWebServices.UserService.SignOut(NotebookUtils.callBackSignout);
    });
    YAHOO.widget.Overlay.windowResizeEvent.subscribe(NotebookUtils.alignNotebook, myNotebookPanel.overlayPanel, true);
    YAHOO.widget.Overlay.windowResizeEvent.subscribe(NotebookUtils.alignNotebook, myNotebookRegister.overlayPanel, true);
    YAHOO.widget.Overlay.windowResizeEvent.subscribe(NotebookUtils.alignNotebook, myNotebookSignIn.overlayPanel, true);

};

YUE.addListener(window,'load',function(){initUserNotebook()});
