﻿function WDCAccount(url, processCallback){
    this.loginDialog = null;
    this.registerDialog = null;
    this.changePasswordDialog = null;
    this.saveSearchDialog = null;
    this.saveToWorkBookDialog = null;
    this.workBookSelect = null;
    this.workBookNameInput = null;
    this.SavedPropertyListingIDs = null;
    this.searchString = null;
    this.messageDialog = null;
    this.registerContainer = null;
    this.processCallback = processCallback;
    this.onstatuschange = null;
    this.iframe = null;
    
    this.saveTourToWorkbookDialog = null;
    this.workbookEnterNew = null;
    
    this.afterLoginAction = null;
    
    this.http = new WDCHttp(url);
    
    this.isLoggedIn = false;
    this.user = null;
    this.init();
}

WDCAccount.prototype.init = function(){    
    this.getUser();
};

WDCAccount.prototype.showLogin = function(){
    if(this.registerDialog!=null){this.registerDialog.hide();}
    if(this.loginDialog == null){
       this.createLoginDialog();
    }
    this.loginDialog.show('myWeichert: Sign in', null,true);
    var loginEmail = document.getElementById('loginEmail');
    if(loginEmail!=null){loginEmail.focus();}
};
WDCAccount.prototype.hideLogin = function(){
    this.loginDialog.hide();
};

WDCAccount.prototype.showSaveSearch = function(searchString){
    var context = this;
    this.searchString = searchString;

    if(this.isLoggedIn != true){
        this.afterLoginAction = function(){context.showSaveSearch(searchString);}
        this.showLogin();
    } else {
        if(this.saveSearchDialog == null){
           this.createSaveSearchDialog();
        }
        this.saveSearchDialog.show('myWeichert: Save Search', null,true);
        var name = document.getElementById('searchName');
        if(name!=null){name.focus();name.select();};
    }
};
WDCAccount.prototype.hideSaveSearch = function(){
    this.saveSearchDialog.hide();
};

WDCAccount.prototype.showChangePassword = function(){
    if(this.changePasswordDialog==null){
        this.createChangePasswordDialog();
    }
    this.changePasswordDialog.show('myWeichert: Change Password',null,true);
    var input = document.getElementById('oldPwdReset');
    if(input!=null){input.focus();}
};

WDCAccount.prototype.hideChangePassword = function(){
    this.changePasswordDialog.hide();
};

WDCAccount.prototype.showMessage = function(title,content,reloadParentPage){
    if(this.messageDialog==null){
        this.messageDialog = new WDCDialog('messageDialog',reloadParentPage);
    }
    this.messageDialog.show(title,content,true);
};

WDCAccount.prototype.hideMessage = function(){
    this.messageDialog.hide();
};

WDCAccount.prototype.showRegister = function(){
    if(this.loginDialog!=null){this.loginDialog.hide();}
    if(this.registerDialog == null){
       this.createRegisterDialog();
    }
    this.registerDialog.show('myWeichert: Sign Up', null,true);
    var input = document.getElementById('registerFName');
    if(input!=null){input.focus();}
};
WDCAccount.prototype.hideRegister = function(){
    this.registerDialog.hide();
};


WDCAccount.prototype.createLoginDialog = function() {
    var oThis = this;
    var loginContainer = document.createElement('div');
    var loginForm = document.createElement('form');
    loginForm.id = 'loginForm';
    var elem;
    
    elem = document.createElement('div');
    elem.appendChild(document.createTextNode('Please log in.  Need an account? '));
    var signUpLink = document.createElement('a');
    signUpLink.href=_appPath+'/myweichert/';
    signUpLink.onclick=function(){oThis.showRegister();return false;};
    signUpLink.innerHTML = 'Sign up';
    elem.style.paddingBottom='10px';
    elem.appendChild(signUpLink);
    loginContainer.appendChild(elem);
    
    elem = document.createElement('div');
    elem.className = 'loginFormText';
    elem.appendChild(createLabel('Email:','loginEmail'));
    var emailInput = createInput('loginEmail','text',null);
    emailInput.maxLength='100';
    elem.appendChild(emailInput);
    loginForm.appendChild(elem);

    elem = document.createElement('div');
    elem.className = 'loginFormText';
    elem.appendChild(createLabel('Password:','loginPwd'));
    var passwordInput = createInput('loginPwd','password',null);
    passwordInput.setAttribute('autocomplete','off');
    passwordInput.maxLength='50';
    elem.appendChild(passwordInput);
    loginForm.appendChild(elem);

    elem = document.createElement('div');
    elem.className = 'loginForgotPassword';
    var passwordLink = document.createElement('a');
    passwordLink.id = 'forgotPasswordLink';
    passwordLink.href = _appPath+'/myweichert/ForgotPassword.aspx';
    passwordLink.innerHTML = 'Forgot your password?';
    elem.appendChild(passwordLink);
    loginForm.appendChild(elem);

    elem = document.createElement('div');
    elem.className = 'loginRemember';
    var rememberInput = createInput('loginRemember','checkbox',null);
    elem.appendChild(rememberInput);
    elem.appendChild(createLabel('Remember me','loginRemember'));
    loginForm.appendChild(elem);
    rememberInput.checked = true;

    var submit = createInput('loginSubmit','button','Sign in');
    submit.onclick=function(){oThis.login(emailInput.value,passwordInput.value,rememberInput.checked);return false;};
    elem = document.createElement('div');
    elem.appendChild(submit);
    
    setDefaultButton(emailInput,submit);
    setDefaultButton(passwordInput,submit);

    var message = document.createElement('span');
    message.id = 'loginMessage';
    elem.appendChild(message);
    loginForm.appendChild(elem);
    loginContainer.appendChild(loginForm);

    this.loginDialog = new WDCDialog('loginDialog');
    this.loginDialog.content.appendChild(loginContainer);
    this.loginDialog.oncloseclick=function(){oThis.afterLoginAction=null;};
};

WDCAccount.prototype.createRegisterDialog = function() {
    var oThis = this;
    var container = document.createElement('div');
    var form = document.createElement('form');
    form.id = 'registerForm';
    var elem;
    
    elem = document.createElement('div');
    elem.appendChild(document.createTextNode('Please register.  Already have an account? '));
    var signInLink = document.createElement('a');
    signInLink.href=_appPath+'/myweichert/';
    signInLink.onclick=function(){oThis.showLogin();return false;};
    signInLink.innerHTML = 'Sign in';
    elem.style.paddingBottom='10px';
    elem.appendChild(signInLink);
    container.appendChild(elem);

    elem = document.createElement('div');
    elem.className = 'registerFormText';
    elem.appendChild(createLabel('First Name:','registerFName'));
    var fnameInput = createInput('registerFName','text',null);
    fnameInput.maxLength='50';
    elem.appendChild(fnameInput);
    form.appendChild(elem);

    elem = document.createElement('div');
    elem.className = 'registerFormText';
    elem.appendChild(createLabel('Last Name:','registerLName'));
    var lnameInput = createInput('registerLName','text',null);
    lnameInput.maxLength='50';
    elem.appendChild(lnameInput);
    form.appendChild(elem);
                                        
    elem = document.createElement('div');
    elem.className = 'registerFormTextPhone';
    elem.appendChild(createLabel('Phone:','registerPhone'));
    var phoneInput = createInput('registerPhone','text',null);
    phoneInput.maxLength='10';
    elem.appendChild(phoneInput);
    elem.appendChild(document.createTextNode('Ext:'));
    var extensionInput = createInput('registerExtension','text',null);
    extensionInput.maxLength='6';
    elem.appendChild(extensionInput);
    form.appendChild(elem);
    
    elem = document.createElement('div');
    elem.className = 'registerFormText';
    elem.appendChild(createLabel('Email:','registerEmail'));
    var emailInput = createInput('registerEmail','text',null);
    emailInput.maxLength='100';
    elem.appendChild(emailInput);
    form.appendChild(elem);

    elem = document.createElement('div');
    elem.className = 'registerFormText';
    elem.appendChild(createLabel('Password:','registerPwd'));
    var passwordInput = createInput('registerPwd','password',null);
    passwordInput.setAttribute('autocomplete','off');
    passwordInput.maxLength='12';
    elem.appendChild(passwordInput);
    form.appendChild(elem);

    elem = document.createElement('div');
    elem.className = 'registerFormText';
    elem.appendChild(createLabel('Confirm Password:','registerConfirmPwd'));
    var confirmInput = createInput('registerConfirmPwd','password',null);
    confirmInput.setAttribute('autocomplete','off');
    confirmInput.maxLength='12';
    elem.appendChild(confirmInput);
    form.appendChild(elem);
    
    elem = document.createElement('div');
    elem.className = 'registerFormCheckbox';
    elem.appendChild(createLabel('Contact me:','registerContact'));
    var contactInput = createInput('registerContact','checkbox',null);
    contactInput.checked = false;
    elem.appendChild(contactInput);
    form.appendChild(elem);
    

    var submit = createInput('registerSubmit','button','Sign up');
    elem = document.createElement('div');
    elem.appendChild(submit);
    
    setDefaultButton(fnameInput,submit);
    setDefaultButton(lnameInput,submit);
    setDefaultButton(phoneInput,submit);
    setDefaultButton(extensionInput,submit);
    setDefaultButton(emailInput,submit);
    setDefaultButton(passwordInput,submit);
    setDefaultButton(confirmInput,submit);
    setDefaultButton(contactInput,submit);

    var message = document.createElement('span');
    message.id = 'registerMessage';
    elem.appendChild(message);
    form.appendChild(elem);
    container.appendChild(form);

    submit.onclick=function(){
        if(fnameInput.value==''){message.innerHTML = 'First name required';}
        else if(lnameInput.value==''){message.innerHTML = 'Last name required';}
        else if (phoneInput.value.trim().length>0&&!phoneInput.value.match(/^\d{10}$/)) {message.innerHTML = 'Invalid phone number';}
        else if(emailInput.value==''){message.innerHTML = 'Email required';}
        else if(!emailInput.value.match(/\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*\s*/)){message.innerHTML = 'Invalid email';}
        else if(!passwordInput.value.match(/^\w{6,}$/)){message.innerHTML = 'Password must be alphanumeric with at least 6 characters';}
        else if(passwordInput.value!=confirmInput.value){message.innerHTML = 'Passwords do not match';}
        else {
            //(email,pwd,fname,lname,phone,ext,addr,remember,contact)
            oThis.register(emailInput.value,passwordInput.value,fnameInput.value,lnameInput.value,phoneInput.value,extensionInput.value,'',false,contactInput.checked);
        }
        return false;
    };

    this.registerDialog = new WDCDialog('registerDialog');
    this.registerDialog.content.appendChild(container);
    this.registerDialog.oncloseclick=function(){oThis.afterLoginAction=null;};
};

WDCAccount.prototype.createChangePasswordDialog = function() {
    var oThis = this;
    var container = document.createElement('div');
    var form = document.createElement('form');
    form.id = 'changePasswordForm';
    var elem;
    
    elem = document.createElement('div');
    elem.appendChild(document.createTextNode('If you would like to change your account password, fill in the form below then click the Save button.'));
    container.appendChild(elem);

    elem = document.createElement('div');
    elem.className = 'changePasswordFormText';
    elem.appendChild(createLabel('Old Password:','oldPwdReset'));
    var oldPasswordInput = createInput('oldPwdReset','password',null);
    oldPasswordInput.maxLength='50';
    elem.appendChild(oldPasswordInput);
    form.appendChild(elem);

    elem = document.createElement('div');
    elem.className = 'changePasswordFormText';
    elem.appendChild(createLabel('Password:','newPwdReset'));
    var passwordInput = createInput('newPwdReset','password',null);
    passwordInput.maxLength='12';
    elem.appendChild(passwordInput);
    form.appendChild(elem);

    elem = document.createElement('div');
    elem.className = 'changePasswordFormText';
    elem.appendChild(createLabel('Confirm Password:','confirmPwdReset'));
    var confirmInput = createInput('confirmPwdReset','password',null);
    confirmInput.maxLength='12';
    elem.appendChild(confirmInput);
    form.appendChild(elem);

    var submit = createInput('changePasswordSubmit','button','Save');
    elem = document.createElement('div');
    elem.appendChild(submit);
    
    setDefaultButton(oldPasswordInput,submit);
    setDefaultButton(passwordInput,submit);
    setDefaultButton(confirmInput,submit);

    var message = document.createElement('span');
    message.id = 'changePasswordMessage';
    elem.appendChild(message);
    form.appendChild(elem);
    container.appendChild(form);

    submit.onclick=function(){
        if(!passwordInput.value.match(/^\w{6,}$/)){message.innerHTML = 'Password must be alphanumeric with at least 6 characters';}
        else if(passwordInput.value!=confirmInput.value){message.innerHTML = 'Passwords do not match';}
        else {
            oThis.resetPassword(oldPasswordInput.value,passwordInput.value);
        }
        return false;
    };

    this.changePasswordDialog = new WDCDialog('changePasswordDialog');
    this.changePasswordDialog.content.appendChild(container);
    this.changePasswordDialog.oncloseclick = function(){if(oThis.afterLoginAction){oThis.afterLoginAction();}};
};

WDCAccount.prototype.createSaveSearchDialog = function() {
    var oThis = this;
    var container = document.createElement('div');
    
    var form = document.createElement('form');
    form.id = 'saveSearchForm';
    var elem;
    var label;
      
    elem = document.createElement('div');
    elem.className = 'saveSearchFormText';
    elem.appendChild(createLabel('Search Name:','searchName'));
    var nameInput = createInput('searchName','text','My Search');
    elem.appendChild(nameInput);
    form.appendChild(elem);

    elem = document.createElement('div');
    elem.className = 'saveSearchFormLine';
    elem.appendChild(document.createTextNode('Just listed Email Alert Options'));
    form.appendChild(elem);

    elem = document.createElement('div');
    elem.className = 'saveSearchFormText';
    elem.appendChild(createLabel('Interval:','emailInterval'));
    var intervalSelect = createDropdown('emailInterval',[['Daily','24'],['Every 2 days','48'],['Weekly','168'],['Every 2 weeks','336'],['None','-1']]);
    elem.appendChild(intervalSelect);
    form.appendChild(elem);

    elem = document.createElement('div');
    elem.className = 'saveSearchFormText';
    elem.appendChild(createLabel('End Date:','emailEndDate'));
    var endDateSelect = createDropdown('emailEndDate',[['Next 1 Year','7'],['Next 6 Months','1'],['Next 3 Months','2'],['Next 2 Months','3'],['Next 1 Month','4'],['Next 3 Weeks','5'],['Next 1 Week','6']]);
    elem.appendChild(endDateSelect);
    form.appendChild(elem);
    
    elem = document.createElement('div');
    elem.className = 'saveSearchFormOpenHouse';
    var openHouseCB = createInput('openHouseCB','checkbox',null);
    elem.appendChild(openHouseCB);
    elem.appendChild(createLabel('Please notify me when open houses become available that match my criteria.','openHouseCB'));
    form.appendChild(elem);

    var submit = createInput('saveSearchFormSubmit','button','Save');
    submit.onclick=function(){oThis.saveSearch(oThis.searchString,nameInput.value,intervalSelect.value,endDateSelect.value,openHouseCB.checked);return false;};
    elem = document.createElement('div');
    elem.appendChild(submit);
    
    var message = document.createElement('span');
    message.id = 'saveSearchFormMessage';
    elem.appendChild(message);
    form.appendChild(elem);
    container.appendChild(form);

    setDefaultButton(nameInput,submit);

    this.saveSearchDialog = new WDCDialog('saveSearchDialog');
    this.saveSearchDialog.content.appendChild(container);
};

WDCAccount.prototype.getWaitImage = function(){
    return '<img src="' + _appPath + '/images/loading.gif" />';
}

WDCAccount.prototype.getUser = function(){
    this.http.post(this, 'mode=getuser', function(context, result){
            if(result.status=='success'){
                context.setUser(result.user);
            }
        });
}

WDCAccount.prototype.setUser = function(user){
    this.user = user;
    this.isLoggedIn = (user!=null);
}

WDCAccount.prototype.login = function(email,pwd,remember){
    var params = String.format("mode=login&email={0}&password={1}&remember={2}",encodeURIComponent(email),encodeURIComponent(pwd),encodeURIComponent(remember));
    var message = document.getElementById('loginMessage');
    message.innerHTML = this.getWaitImage();
    this.http.post(this, params, this.loginCallback);
    
};
WDCAccount.prototype.loginCallback = function(context,result){
    var message = document.getElementById('loginMessage');
    if(result.status=='success'){
        context.setUser(result.user);
        
        document.getElementById('loginEmail').value='';
        document.getElementById('loginPwd').value='';
        if(context.processCallback){
            context.processCallback(context,result);
        }
        if(context.onstatuschange){
            context.onstatuschange("loggedin");
        }
        if(result.resetpassword==true){
            context.showChangePassword();
        } else if(context.afterLoginAction){
            context.afterLoginAction();
        }
        //hide login message and div and reset form values
        message.innerHTML='';
        context.hideLogin();
        
    } else {
        message.innerHTML='Login Failed';
    }
};

WDCAccount.prototype.logout = function(){
    var params = 'mode=logout';
    this.http.post(this, params,this.logoutCallback);
};

WDCAccount.prototype.logoutCallback = function(context,result){
    if(result.status=='success'){
        context.setUser(null);
        if(context.processCallback){
            context.processCallback(context,result);
        }
        if(context.onstatuschange){
            context.onstatuschange("loggedout");
        }
    } else {
        alert('Error logging out');
    }
};

WDCAccount.prototype.resetPassword = function(oldPwd,newPwd){
    var params = String.format('mode=password&password={0}&oldpassword={1}',encodeURIComponent(newPwd),encodeURIComponent(oldPwd)); 
    this.http.post(this, params,this.resetPasswordCallback);
};
WDCAccount.prototype.resetPasswordCallback = function(context,result){
    var message = document.getElementById('changePasswordMessage');
    if(result.status=='success'){
        context.hideChangePassword();
        context.showMessage('myWeichert: Change Password', 'Password updated');
        if(context.processCallback){
            context.processCallback(context,result);
        }
        if(context.afterLoginAction){
            context.afterLoginAction();
        }
    } else if(result.status=='not_loggedin') {
        message.innerHTML = 'Please login before changing password';
    } else if(result.status=='invalid') {
        if(result.message){
            message.innerHTML = result.message;
        } else {
            message.innerHTML = 'Invalid Password';
        }
    } else {
        if(result.message){
            message.innerHTML = result.message;
        } else {
            message.innerHTML = 'Change password failed. Please try again later';
        }
    }
};

WDCAccount.prototype.register = function(email,pwd,fname,lname,phone,ext,addr,remember,contact){
    var params = String.format('mode=register&email={0}&password={1}&fname={2}&lname={3}&phone={4}&ext={5}&address={6}&remember={7}&contact={8}',encodeURIComponent(email),encodeURIComponent(pwd),encodeURIComponent(fname),encodeURIComponent(lname),encodeURIComponent(phone),encodeURIComponent(ext),encodeURIComponent(addr),remember,contact);
    var message = document.getElementById('registerMessage');
    message.innerHTML = this.getWaitImage();
    this.http.post(this, params,this.registerCallback);
};
WDCAccount.prototype.registerCallback = function(context,result){
    var message = document.getElementById('registerMessage');
    if(result.status=='success'){
        context.setUser(result.user);
                
        if(context.processCallback){
            context.processCallback(context,result);
        }
        if(context.onstatuschange){
            context.onstatuschange("loggedin");
        }
        if(context.afterLoginAction){
            context.afterLoginAction();
        }
        //hide login message and div and reset form values
        context.hideRegister();
        document.getElementById('registerFName').value='';
        document.getElementById('registerLName').value='';
        document.getElementById('registerPhone').value='';
        document.getElementById('registerExtension').value='';
        document.getElementById('registerEmail').value='';
        document.getElementById('registerPwd').value='';
        document.getElementById('registerConfirmPwd').value='';
        document.getElementById('registerContact').value='';
        message.innerHTML='';
    } else if(result.status=='duplicate'){
        message.innerHTML='Email already exists';
    } else {
        if(result.message){
            message.innerHTML = result.message;
        } else {
            message.innerHTML='Sign up Failed';
        }
    }
};

WDCAccount.prototype.saveListing = function(propertyId, mlsName, mlsNumber, callback){
    var params = String.format('mode=savelisting&propertyId={0}&mlsname={1}&mlsnumber={2}', propertyId.toString(), encodeURIComponent(mlsName), encodeURIComponent(mlsNumber));
    this.http.post(this, params,function(context,result){
        if(result.status=="success"){
            if(callback){callback(context,result);}
            var m = String.format('<div>The listing ({0}) has been saved</div>',htmlEncode(mlsNumber));
            m += String.format('<div>View your <a {0}="{1}/myweichert/SavedListings.aspx">saved listings</a></div>', 'href',_appPath);
            context.showMessage('myWeichert: Save Listing', m);
            context.afterLoginAction=null;
        } else if(result.status=="duplicate"){
            if(callback){callback(context,result);}
            var m = String.format('<div>The listing ({0}), has already been saved</div>',htmlEncode(mlsNumber));
            m += String.format('<div>View your <a {0}="{1}/myweichert/SavedListings.aspx">saved listings</a></div>','href',_appPath);
            context.showMessage('myWeichert: Save Listing', m);
            context.afterLoginAction=null;
        }else if(result.status=='notloggedin'){
            context.afterLoginAction = function(){context.saveListing(propertyId,mlsName,mlsNumber,callback);}
            context.showLogin();
        } else{
            if(result.message){
                context.showMessage('myWeichert: Save Listing', result.message, false);
            } else {
                context.showMessage('myWeichert: Save Listing', 'An error has occured, please try again later', false);
            }
        }    
        
    });
};

WDCAccount.prototype.saveSearch = function(searchString, searchName, interval, enddate, openhouseenabled){
    var params = String.format('mode=savesearch&searchName={0}&interval={1}&enddate={2}&openhouseenabled={3}&searchString={4}', encodeURIComponent(searchName), interval, enddate, openhouseenabled,encodeURIComponent(searchString));
    this.http.post(this, params,function(context,result){
        var message = document.getElementById('saveSearchFormMessage');
        if(result.status=='success'){
            message.innerHTML='';
            context.hideSaveSearch();
            var m = String.format('<div>The search ({0}) has been saved</div>',htmlEncode(searchName));
            m += String.format('<div>View your <a {0}="{1}/myweichert/savedsearches.aspx">saved searches</a></div>','href',_appPath);
            context.showMessage('myWeichert: Save Search', m);
            context.afterLoginAction=null;
        } else if(result.status=='notloggedin'){
            context.hideSaveSearch();
            context.afterLoginAction = function(){context.saveSearch(searchString, searchName, interval, enddate, openhouseenabled);}
            context.showLogin();
        } else if(result.status=='uniquename'){
            message.innerHTML='Unique name required';
        } else {
            if(result.message){
                message.innerHTML=result.message;
            } else {
                message.innerHTML='Save Search Failed';
            }
        }
    });
};

WDCAccount.prototype.getSavedListings = function(){
    var params = 'mode=getsavedlistings';
    this.http.post(this, params,function(context,result){
        if(result.status=='success'){
            var html = String.format('<div class="savedListingsPopup"><div><a {0}="{1}/myWeichert/SavedListings.aspx">View all Saved Listings</a></div>','href',_appPath);
            var l;
            html += '<ul>';
            for(var i=0;i<result.listings.length;i++){
                l = result.listings[i];
                html += '<li><a href="' + _appPath + "/" + l.p + '/">' + htmlEncode(l.addr) + ' ' + htmlEncode(l.city) + ', ' + htmlEncode(l.state) + '</a> - $' + addCommas(l.price) + '</li>';
            }
            html += '</ul></div>';
            context.showMessage('myWeichert: Saved Listings', html, true);
        }
    });
};

WDCAccount.prototype.getSavedSearches = function(){
    var params = 'mode=getsavedsearches';
    this.http.post(this, params,function(context,result){
        if(result.status=='success'){
            var html = String.format('<div class="savedSearchesPopup"><div><a {0}="{1}/myWeichert/SavedSearches.aspx">View all Saved Searches</a></div>','href',_appPath);
            var s;
            html += '<ul>';
            for(var i=0;i<result.searches.length;i++){
                s = result.searches[i];
                html += '<li><a href="' + s.href + '">' + htmlEncode(s.name) + '</a></li>';
            }
            html += '</ul></div>';
            context.showMessage('myWeichert: Saved Searches', html, true);
        }
    });
};

WDCAccount.prototype.createAddToWorkBookDialog = function() {
    var context = this;
    var container = document.createElement('div');
    
    var form = document.createElement('form');
    form.id = 'saveToWorkBookForm';
    var elem;
    var label;
      
    elem = document.createElement('div');
    elem.className = 'saveToWorkBookFormText';
   
    elem = document.createElement('div');
    elem.className = 'saveToWorkBookFormLine';
    elem.appendChild(document.createTextNode('Save To Existing Workbook'));
    form.appendChild(elem);

    elem = document.createElement('div');
    elem.className = 'saveToWorkBookFormText';
    elem.appendChild(createLabel('WorkBook:','workBook'));
    this.workBookSelect = createDropdown('workbook',[['Create New','0']]);
    elem.appendChild(this.workBookSelect);
    form.appendChild(elem);
  
    var divNew = document.createElement('div');
    //divNew.className = 'saveToWorkBookFormLine';
    elem = document.createElement('div');
    elem.className = 'saveToWorkBookFormLine'; 
    elem.appendChild(document.createTextNode('Save to New Workbook'));
    divNew.appendChild(elem);
    //divNew.appendChild(document.createTextNode('Save to New Work Book'));
    elem = document.createElement('div');
    elem.className = 'saveToWorkBookFormText';
    elem.appendChild(createLabel('Name:','workBookName'));
    this.workBookNameInput = createInput('workBookName','text','My Workbook');
    elem.appendChild(this.workBookNameInput);
    divNew.appendChild(elem)
    form.appendChild(divNew);

 
    //Set the visibility to nothing so that it inherits the parent settings.  This is done to avoid an error when 
    //setting the focus to workBookNameInput. 
    divNew.style.visibility = "";
     
    //Show or hide name input textbox based on dropdown list selection.
    this.workBookSelect.onchange = (function()
    {
       if(context.workBookSelect.options[context.workBookSelect.selectedIndex].value == 0)
       {
          divNew.style.visibility = "";
       }   
       else
       {
          divNew.style.visibility = "hidden";
       }
       
       message.innerHTML='';
    });//END onchange

    var submit = createInput('saveToWorkBookFormSubmit','button','Save');
    submit.onclick=function(){context.saveToWorkBook(context.SavedPropertyListingIDs);return false;};
    
    elem = document.createElement('div');
    elem.appendChild(submit);

    var message = document.createElement('div'); //was span
    message.id = 'saveToWorkBookFormMessage';
    elem.appendChild(message);
    form.appendChild(elem);
    container.appendChild(form);

    setDefaultButton(this.workBookNameInput,submit);

    this.saveToWorkBookDialog = new WDCDialog('saveToWorkBookDialog', true);
    this.saveToWorkBookDialog.content.appendChild(container);
};  //END createAddToWorkBookDialog


WDCAccount.prototype.showAddToWorkBook = function(SavedPropertyListingIDs){
    var context = this;
    this.SavedPropertyListingIDs = SavedPropertyListingIDs;
        
    if(this.SavedPropertyListingIDs.length > 0) 
    {
        if(this.isLoggedIn != true)
        {
            this.afterLoginAction = function(){context.showAddToWorkBook(SavedPropertyListingIDs);}
            this.showLogin();
        } else {
            if(this.saveSearchDialog == null)
            {
                this.createAddToWorkBookDialog();
            }
            this.getWorkBooks(function(context, result){
                if(result.status=='success' && result.workbooks.length > 0)
                {
                    for(var i=0;i<result.workbooks.length;i++)
                    {
                        wb = result.workbooks[i];
                        addOption(context.workBookSelect, wb.Name, wb.ID);
                    }//END for
                }
            });
            this.saveToWorkBookDialog.show('myWeichert: Add to Workbook', null,true);
        }//END if(this.isLoggedIn != true)
    }//END if(this.IDs.length > 0)
    try {
        var name = document.getElementById('workBookName');
        if(name){name.focus();name.select();};
    }
    catch(e)
        {
        }
};

WDCAccount.prototype.hideAddToWorkBook = function(){
    this.saveToWorkBookDialog.hide();
};

// Get work books for a user
WDCAccount.prototype.getWorkBooks = function(callback){
    var params = 'mode=getWorkBooks';
    this.http.post(this, params, callback)
}//END getWorkBooks   


WDCAccount.prototype.saveToWorkBook = function(SavedPropertyListingIDs)
{
    var context = this;
    var workBookID = 0;
    var workBookName = '';
    var params = '';
    var message = document.getElementById('saveToWorkBookFormMessage');
    
    if(context.workBookSelect.options[context.workBookSelect.selectedIndex].value == 0 &&
       context.workBookNameInput.value == '')
    {
       message.innerHTML='You must enter a workbook name.';
       return;
    }
    else if(context.workBookSelect.options[context.workBookSelect.selectedIndex].value == 0 &&
            context.workBookNameInput.value != '')
    {
       workBookName = context.workBookNameInput.value
       //message.innerHTML='';
    }
    else
    {
       workBookID = context.workBookSelect.options[context.workBookSelect.selectedIndex].value;
       workBookName = context.workBookSelect.options[context.workBookSelect.selectedIndex].text;
       //message.innerHTML='';
    }

     params = String.format('mode=savetoworkbook&workBookID={0}&workBookName={1}&IDs={2}',workBookID, workBookName, SavedPropertyListingIDs);
   
    this.http.post(this, params,function(context,result){
       if(result.status=='success' || result.status=='duplicates')
       {
            message.innerHTML='';
            context.hideAddToWorkBook();
            var m;
            if(result.status=='success')
            {
                if (SavedPropertyListingIDs.length == 1) {
                    m = String.format('<div>The property has been saved.<br><br>Workbook name: {0}</div>',workBookName);
                } else {
                    m = String.format('<div>The properties have been saved.<br><br>Workbook name: {0}</div>',workBookName);
                }
            }
            else
            {
                if (SavedPropertyListingIDs.length == 1) {
                    m = String.format('<div class="successMessage" style="text-align:left;padding:0 5px;">The selected listing is already in workbook' +
                                    ' "{0}".',workBookName);
                } else {
                    m = String.format('<div class="successMessage" style="text-align:left;padding:0 5px;">Listings Added<br><br>One or more of the listings selected are already in workbook' +
                                    ' "{0}".  Any other listings have been added.<div>',workBookName);
                }                
            }
            context.showMessage('myWeichert: Add to Workbook', m, true);
            context.afterLoginAction = null;
       }
       else if(result.status=='notloggedin')
       {
          context.hideAddToWorkBook();
          context.afterLoginAction = function(){context.saveToWorkBook(SavedPropertyListingIDs);}
          context.showLogin();
       } 
       else if(result.status=='uniquename')
       {
          message.innerHTML='<div style="text-align:left;">A workbook with this name already exists.  Please select the existing workbook or choose a unique name.</div>';
       } 
       else
       {
            if(result.message){
                message.innerHTML=result.message;
            } else {
                message.innerHTML='Save to workbook failed.';
            }
       }//END if
       
   });//END post
};//END saveToWorkBook

function CreateWDCAccount(url){
    var account = new WDCAccount(url,loginCallback);
    var loginAnchor = document.getElementById('loginAnchor');
    var registerAnchor = document.getElementById('registerAnchor');
    
    loginAnchor.onclick=function(){account.showLogin();return false;}
    registerAnchor.onclick=function(){account.showRegister();return false;}
    
    var logoutAnchor = document.getElementById('logoutAnchor');
    logoutAnchor.onclick=function(){account.logout();return false;}
    
    //var getListingsAnchor = document.getElementById('getListingsAnchor');
    //getListingsAnchor.onclick=function(){account.getSavedListings();return false;}

    //var getSearchesAnchor = document.getElementById('getSearchesAnchor');
    //getSearchesAnchor.onclick=function(){account.getSavedSearches();return false;}

    return account;
}

function setVowLoginLinks(){
    var fn = function(){_account.showLogin(); return false; }
    var elems = getElementsByClassName('vowLogin', 'a');
    for(var i = 0; i < elems.length; i++){
        elems[i].onclick = fn;
    }
}

function loginCallback( context, result ){
    var loginRegisterDiv = document.getElementById('loginDiv');
    var logoutDiv = document.getElementById('logoutDiv');
    var logoutName = document.getElementById('logoutName');

    if(result.status=='success'){
        if(result.mode == 'login' || result.mode == 'register'){
            loginRegisterDiv.style.display='none';
            logoutDiv.style.display='';
            if(result.user!=null&&result.user.fname!=''){
                logoutName.innerHTML=', ' + htmlEncode(result.user.fname);
            }else{
                logoutName.innerHTML='';
            }
        } else if(result.mode == 'logout'){
            loginRegisterDiv.style.display='';
            logoutDiv.style.display='none';
            logoutName.innerHTML='';
        }
    }
}

function redirectOnLoginChange( url ){
    _account.onstatuschange = function(status){
        window.location=url;
    };
}

function setReloadOnLoginChange(){
    _account.onstatuschange = function(status){
        window.location.reload(true);
    };
}

function WDCDialog(id, reloadParentPage){
    //reloadParentPage, optional boolean - if true, reload the page(on close of dialog) that opened the Dialog
    this.id = id;
    this.dialog = null;
    this.header = null;
    this.title = null;
    this.body = null;
    this.content = null;
    this.oncloseclick = null;
    this.init(reloadParentPage);
}
WDCDialog.prototype.init = function(reloadParentPage){
    var context = this;
    this.dialog = document.createElement('div');
    this.dialog.id = this.id;
    this.dialog.style.visibility='hidden';
    this.dialog.className = 'WDCDialog';
    
    this.header = document.createElement('div');
    this.header.id = this.id + '_header';
    this.header.className = 'WDCDialog_header';
    
    this.title = document.createElement('span');
    this.title.id = this.id + '_title';
    this.header.appendChild(this.title);
    
    this.close = document.createElement('span');
    this.close.id = this.id + '_close';
    this.close.className = 'WDCDialog_close';
    this.close.innerHTML = '<img src="'+_appPath+'/images/close_red.gif" />'
    
    if(reloadParentPage==true){
       this.close.onclick = function(){context.hide(); window.location.reload(true);if(context.oncloseclick!=null){context.oncloseclick();}};
    }
    else{
       this.close.onclick = function(){context.hide();if(context.oncloseclick!=null){context.oncloseclick();}};
    }
       
    this.header.appendChild(this.close);
    
    this.body = document.createElement('div');
    this.body.id = this.id + '_body';
    this.body.className = 'WDCDialog_body';
    
    this.content = document.createElement('div');
    this.content.id = this.id + '_content';
    this.content.className = 'WDCDialog_content';
    
    this.body.appendChild(this.content);
    
    this.dialog.appendChild(this.header);
    this.dialog.appendChild(this.body);
    document.body.appendChild(context.dialog);    
    
    
    //ie6 zindex bug workaround
    if (/MSIE (\d+\.\d+);/.test(navigator.userAgent) && new Number(RegExp.$1) <= 6) {
        this.iframe = document.createElement('iframe');
        //this.iframe.src='javascript:false;';
        this.iframe.frameBorder='0';
        this.iframe.tabIndex='-1';
        this.iframe.style.display='block';
        this.iframe.style.position='absolute';
        this.iframe.style.zIndex='-1';
        this.iframe.style.top=((parseInt(this.dialog.currentStyle.borderTopWidth)||0)*-1)+'px';
        this.iframe.style.left=((parseInt(this.dialog.currentStyle.borderLeftWidth)||0)*-1)+'px';
        this.iframe.style.width=this.dialog.offsetWidth+'px';
        this.iframe.style.height=this.dialog.offsetHeight+'px';
        this.dialog.appendChild(this.iframe);
    }
};

WDCDialog.prototype.clearContent = function(){
    while( this.content.firstChild ){
        this.content.removeChild( this.content.firstChild );
    }
};

WDCDialog.prototype.show = function(title, content, showCloseButton){
    if(title!=null){
        this.title.innerHTML = title;
    }
    
    if(content!=null){
        this.content.innerHTML = content;
    }

    if(showCloseButton==true){
        this.close.style.display = '';
    } else {
        this.close.style.display = 'none';
    }
    
    this.dialog.style.marginTop = '-' + this.dialog.offsetHeight/2 + 'px';
    
    if(this.iframe!=null){
        this.iframe.style.width=this.dialog.offsetWidth+'px';
        this.iframe.style.height=this.dialog.offsetHeight+'px';
    }
    this.dialog.style.visibility='visible';
};
WDCDialog.prototype.hide = function(){
    this.dialog.style.visibility='hidden';
};

function createInput(id,type,value){
    var input = document.createElement('input');
    input.id=id;
    input.type=type;
    if(value!=null){input.value=value;}
    return input;
}
function createLabel(innerHTML, htmlFor){
    var label = document.createElement('label');
    label.innerHTML = innerHTML;
    label.htmlFor = htmlFor;
    return label;
}
function createDropdown(id,optionList){
    var select = document.createElement('select');
    select.id=id;
    if(optionList!=null&&optionList.length>0){
        for(var i=0;i<optionList.length;i++){
            addOption(select,optionList[i][0],optionList[i][1]);
        }
    }
    return select;
}
function addOption(selectbox,text,value ){
    var optn = document.createElement("OPTION");
    optn.text = text;
    optn.value = value;
    selectbox.options.add(optn);
}

WDCAccount.prototype.showSaveTourToWorkbook = function(propertyIDs){
    var context = this;
    propertyIDs = '<PropertyInfoList>' + propertyIDs + '</PropertyInfoList>'
    
    if(this.isLoggedIn != true){
        this.afterLoginAction = function(){context.showSaveTourToWorkbook(propertyIds, workbookName);}
        this.showLogin();
    } else {
        if(this.saveTourToWorkbookDialog == null){
            this.createSaveTourToWorkbookDialog(propertyIDs);
        }
        this.getWorkBooks(function(context, result){
            var message = document.getElementById('saveTourToWorkbookFormMessage');
            if(result.status=='success' && result.workbooks.length > 0) {
                for(var i=0;i<result.workbooks.length;i++)
                    {
                        wb = result.workbooks[i];
                        addOption(context.workbookSelectExisting, wb.Name, wb.ID);
                    }//END for
                message.innerHTML='';
                
                } else if(result.status=='success' && result.workbooks.length == 0) {
                message.innerHTML='You have no saved workbooks.';
            
                
            } else {
                message.innerHTML='Get Worbooks Failed.  Please try again later.';            
            }//END if result.status=='success'
        });
        this.saveTourToWorkbookDialog.show('myWeichert: Save Tour to Workbook', null,true);
        var name = document.getElementById('workbookName');
        if(name!=null){name.focus();name.select();}
    }
};
WDCAccount.prototype.hideSaveTourToWorkbook = function(){
    this.saveTourToWorkbookDialog.hide();
};
WDCAccount.prototype.saveTourToWorkbook = function(propertyIDs){
    var context = this;
    var workbookID = 0;
    var workbookName = '';
    var params = '';
    var message = document.getElementById('saveTourToWorkBookFormMessage');
    
    if(context.workbookSelectExisting.options[context.workbookSelectExisting.selectedIndex].value == 0 &&
            context.workbookEnterNew.value == ''){
       message.innerHTML='You must enter a workbook name.';
       return;
    }else if(context.workbookSelectExisting.options[context.workbookSelectExisting.selectedIndex].value == 0 &&
            context.workbookEnterNew.value != ''){
       workbookName = context.workbookEnterNew.value;
    }else{
       workbookID = context.workbookSelectExisting.options[context.workbookSelectExisting.selectedIndex].value;
       workbookName = context.workbookSelectExisting.options[context.workbookSelectExisting.selectedIndex].text;
    }

    params = String.format('mode=savetourtoworkbook&workbookID={0}&workbookName={1}&IDs={2}',workbookID, workbookName, propertyIDs);
    this.http.post(this, params,function(context,result){
        var message = document.getElementById('saveTourToWorkbookFormMessage');
        if(result.status=='success'){
            message.innerHTML='';
            context.hideSaveTourToWorkbook();
            var m = String.format('<div>The workbook ({0}) has been saved.</div>',htmlEncode(workbookName));
            m += String.format('<div>View your <a {0}="{1}/myweichert/myworkbooks.aspx?view=workbooks">saved workbooks</a></div>','href',_appPath);
            context.showMessage('myWeichert: Save Tour to Workbook', m);
            context.afterLoginAction=null;
        } else if(result.status=='notloggedin'){
            context.hideSaveTourToWorkbook();
            context.afterLoginAction = function(){context.saveTourToWorkbook(propertyIds, workbookName);}
            context.showLogin();
        } else if(result.status=='uniquename'){
            message.innerHTML='Error: Workbook Name Already Exists';
        } else {
            message.innerHTML='Error: Save Tour to Workbook Failed';
        }
    });
};

WDCAccount.prototype.createSaveTourToWorkbookDialog = function(propertyIDs) {
    var context = this;
    var container = document.createElement('div');
    
    var form = document.createElement('form');
    form.id = 'saveTourToWorkbookForm';
    var elem;
    var label
      
    elem = document.createElement('div');
    elem.className = 'saveTourToWorkbookFormLine';
    elem.appendChild(document.createTextNode('Add listings to a Workbook:'));
    form.appendChild(elem);

    elem = document.createElement('div');
    elem.className = 'saveTourToWorkbookFormText';
    this.workbookSelectExisting = createDropdown('workbooks',[['Create New','0']]);
    elem.appendChild(this.workbookSelectExisting);
    form.appendChild(elem);
    
    var divNew = document.createElement('div');
    //divNew.className = 'saveToWorkBookFormLine';
    elem = document.createElement('div');
    elem.className = 'saveTourToWorkbookFormLine'; 
    elem.appendChild(document.createTextNode('Enter New Workbook Name:'));
    divNew.appendChild(elem);
    //divNew.appendChild(document.createTextNode('Save to New Work Book'));
    elem = document.createElement('div');
    elem.className = 'saveTourToWorkbookFormText';
    elem.appendChild(createLabel('Name:','workbookName'));
    this.workbookEnterNew = createInput('workbookName','text','My Workbook');
    elem.appendChild(this.workbookEnterNew);
    divNew.appendChild(elem)
    form.appendChild(divNew);

     //Set the visibility to nothing so that it inherits the parent settings.  This is done to avoid an error when 
    //setting the focus to workbookEnterNew. 
    divNew.style.visibility = "";
     
    //Show or hide name input textbox based on dropdown list selection.
    this.workbookSelectExisting.onchange = (function()
    {
        if(context.workbookSelectExisting.options[context.workbookSelectExisting.selectedIndex].value == 0)
       {
          divNew.style.visibility = "";
       }   
       else
       {
          divNew.style.visibility = "hidden";
       }
       
       message.innerHTML='';
    });//END onchange
        
    var submit = createInput('saveTourToWorkbookFormSubmit','button','Save');
    submit.onclick=function(){context.saveTourToWorkbook(propertyIDs);return false;};

    elem = document.createElement('div');
    elem.className = 'saveTourToWorkbookFormButton';
    elem.appendChild(submit);
    
    var message = document.createElement('div');
    message.id = 'saveTourToWorkbookFormMessage';
    elem.appendChild(message);
    form.appendChild(elem);
    container.appendChild(form);

    setDefaultButton(this.workbookEnterNew,submit);

    this.saveTourToWorkbookDialog = new WDCDialog('saveTourToWorkbookDialog');
    this.saveTourToWorkbookDialog.content.appendChild(container);
};
