﻿function TwoWebsiteManager(windowElement)
{
    this.inheritFrom = TWOControl;
    this.inheritFrom(windowElement);
    this.inAnimation = false;
    this.ObjectPurchase = null;
    this.TotalPrice = 0.0;
    this.DisplayContent = function(url) {
        var myself = this;
        if(myself.inAnimation) return false;
        myself.inAnimation = true;
               

        if (url.indexOf('#') != -1 && url.substring(url.lastIndexOf('#') + 1).length>0) {                        
            var arrTemp = url.substring(url.lastIndexOf('#') + 1).split('_');
            var subSection = arrTemp[0];
            var subSectionItem = arrTemp[1];
            var container = $('#' + subSection);
            var active = myself._findjcontrol('sectionContainer').find('.default');                           
            if (subSection != null &&  (subSection == "virtual-tour" || subSection == "gallery")) 
            {
                    var subMenulist = $(".rightMenu li a");
                    subMenulist.each(function() 
                    {
                        var $this = $(this);
                        
                        if (subSection == "virtual-tour" && $this.text().indexOf("Virtual") != -1) {
                            $this.attr('rel', '#virtualTourOverlay');
                            myself.overlayVirtualTour();
                            myself.inAnimation = false;                                                        
                                                        
                        } else if (subSection == "gallery" && $this.text().indexOf("Gallery") != -1) {
                            $this.attr('rel', '#GalleryHolder');
                            myself.OverlayTWOGallery();
                            myself.inAnimation = false;
                        }                                                      
                    });
                    active = $("#reserve-now");
                    container = null;  
            } 
            if(container== null || container == "" || container.length==0) {
                    myself.inAnimation = false;
                    var prevActiveId;
                    if(active.attr('id').length>0){
                    var prevActiveId ='#' + active.attr("id"); // go to back to prev Active Option.
                    }
                    myself.DisplayContent(prevActiveId);
            }        
            else if (container.length>0 && subSection != null) {
                // check if subSection is active.                                 
                myself.hightLight(subSection, $('.rightMenu li a')); // make it selected.
                if ("1" == "1")
                {
                    active.fadeOut("fast", function() {
                        active.attr('class', 'hidden'); 
                        active = container.attr('class', 'default');

                        if (container.attr('id') == "reserve-now") {
                            //open Table Overlay
                            myself.OverlayOpenTable(container);
                        } 
                                                    
                        // display subsectionItem.
                        var InnerItem = myself.DisplaySubSectionItem(subSectionItem, container);

                        active.fadeIn("fast",function(){
                            myself.inAnimation = false;
                        });
                        if (subSectionItem != null) // Do Again, when the element property is set to block.
                            InnerItem.find('.ScrollText').jScrollPane({ scrollbarWidth: 5 });
                        else {
                            active.find('.ScrollText').css({ 'height': '210px' }); // to use the full height;
                            active.find('.ScrollText').jScrollPane({ scrollbarWidth: 5 });
                        }

                    });
                }                

            } //end if subSection
        } else {
            var active = myself._findjcontrol('sectionContainer').find(".hidden").filter('.default');
            if(active.length>0){
                active.removeClass('hidden');
                active.find('.ScrollText').css({ 'height': '200px' }); // to use the full height;
                active.find('.ScrollText').jScrollPane({ scrollbarWidth: 5 });
                myself.inAnimation = false;
            }
        }
    }


    this.DisplaySubSectionItem = function(subSectionItem,container)
    {
        var myself = this;
        var InnerItem = "";
        if(subSectionItem !=null)
        {           
            InnerItem = container.find('#' + subSectionItem); // only start looking from container not from the window.            
            InnerItem.parents(".subSectionItemContent").find(".subDefault").removeClass().addClass('hidden'); 
            myself.hightLight(subSectionItem, myself._findjcontrol('submenuItems').find('li a'));
            InnerItem.attr('class','subDefault');                                                    
        }              
        return InnerItem;
    }


    this.hightLight = function(strItem,LookIn)
    {    
        LookIn.closest('ul').find('li[class !=""]').filter('.selected').removeClass('selected'); // remove default
        LookIn.each(function(index, element){
            var $this = $(element);
            if($this.attr('href').indexOf(strItem) != -1)
            {                          
                $this.parent().addClass("selected");
                return false; // break from loop
            }
        });
    }
    
    this.SlideInMenu = function($this)
    {
        var myself = this;        
        var listContainer = $(".slideInMenus");  
        if(myself.inAnimation) return false;
        myself.inAnimation = true;
        if(!listContainer.hasClass("active")) 
        {
            $this.addClass("active"); 
            listContainer.animate({
                right: '+=380px'        
            },function(){
                listContainer.addClass("active");
                listContainer.find('li:even').addClass('redbullet');
                listContainer.find('li:odd').addClass('yellowbullet');
                myself.inAnimation = false;                
            });      
        } 
        else 
        {
            $this.removeClass("active"); 
            listContainer.animate({
                right: '-=380px'        
            },function(){
                listContainer.removeClass("active");
                listContainer.find('li:even').removeClass('redbullet');
                listContainer.find('li:odd').removeClass('yellowbullet');
                myself.inAnimation = false;
            });         
        } 
    }
    

    this.OverlayOpenTable = function(container)
    {
        var myself = this;
        container.find('a[rel=#OpenTable]').overlay({
        fixed: false,
        top: '5%',      	                  
        onBeforeLoad: 
            function() 
            {			    
                myself.Lock();                   
		        var wrap = this.getOverlay().find(".contentWrap");
		        wrap.load(this.getTrigger().attr("href"));
	        },
        onLoad: 
            function() 
            {
                myself.UnLock();
            }	        
        });            
    }

    this.overlayVirtualTour = function() {
        var myself = this;
        var player = $f("VTourPlayer", "/videos/flowplayer-3.2.4.swf");

        $('*[rel=#virtualTourOverlay]').overlay({
            effect: 'apple',
            expose: '#000000',//'#789'
            top: '0%',
            fixed: false,            
            load: true,
            closeOnClick: false,           
            onLoad: function(content) {                
                player.load();
            },
            onClose: function(content) {                
                player.unload();
            }
        });
    }

    this.OverlayTWOGallery = function() {
        var myself = this;
        var page = $("#TWOGalleryLink");
        var temp = $("*[rel=#GalleryHolder]");

        temp.overlay({
            load: true,
            fixed: false,            
            top: '0%',
            closeOnClick: false,
            mask: {
                color: '#000',                
                opacity: 0.9
            },
            onBeforeLoad:
                function() {

                    var wrap = this.getOverlay().find(".contentWrap");
                    myself.Lock();
                    wrap.load(page.attr("href"));
                },
            onLoad:
                function() {                    
                    myself.UnLock();
                }
        });


    }

    this.MarshallNameSeperator = function(Subscriber,txtName)
    {
        var arrName =  txtName.trim().split(' ');
        if(arrName.length>=1)
        {
            Subscriber.customer.FirstName = arrName[0];
            if(arrName.length == 2){
                Subscriber.customer.LastName = arrName[1];                
            }else if(arrName.length>2) {
                Subscriber.customer.LastName = txtName.replace(arrName[0],"");                
            }
        }
    }

    this.MarshallContactFormItem = function(Subscriber)
    {
        var myself = this;
        var txtName = myself.GetElementValue("txtName");       
        myself.MarshallNameSeperator(Subscriber,txtName);        
        Subscriber.customer.Name = txtName;
        Subscriber.customer.Email = myself.GetElementValue("txtEmail");
        Subscriber.customer.Phone = myself.GetElementValue("txtPhone");
        Subscriber.Comment = myself.GetElementValue("txtComments"); 
    }

    

    this.MarshallSubscriberItem = function(Subscriber)
    {
        var myself = this;
        var txtName = myself.GetElementValue("MailingName");       
        myself.MarshallNameSeperator(Subscriber,txtName);
        Subscriber.customer.Name = txtName;
        Subscriber.customer.Email = myself.GetElementValue("MailingEmail");
        Subscriber.customer.Phone = myself.GetElementValue("MailingPhone");        
    }

    this.ValidateNumber = function($this)
    {   
        var objRegExp  = /(^-?\d\d*$)/;
        return $this.val().match(objRegExp);        
    }

    this.ValidateEmail = function($this)
    {        
        var objRegExp  = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;
        return $this.val().match(objRegExp);        
    }


    this.validate = function(jform)
    {
        var myself = this;
        var inputFields = jform.find('.required');
        var errorFlag = false;        
        for( var i=0; i<inputFields.length;i++)
        {
             var input = $(inputFields[i]);             
             if(!input.val().length>0 || input.val() == "0")
             {                
                errorFlag =true;
             } else if(input.attr('name') == 'Email' && !myself.ValidateEmail(input)){
                errorFlag = true;
            }               
        }
        if(errorFlag){
             myself.Alert('Error!',"All field marked(*) are required.");
            return false;
        }
        return true;
    }
    
    this.showLabelError = function(Label)
    {
        var myself = this;
        if(!Label.hasClass('Error')) {
            Label.addClass('Error');
        }
    }

    this.ValidateGiftCard = function(jform)
    {
        //[a-zA-Z ]{3,}
        var myself = this;
        var errorFlag =  new Array();
        var inputFields = jform.find('.required');
        var numRe = /^-?[0-9]*(\.[0-9]+)?$/; 
              
        for( var i=0; i<inputFields.length;i++)
        {
            var input = $(inputFields[i]);
            var Label = jform.find("label[for="+ input.attr('id') + "]");  
            if(!input.val().length>0 || input.val() == "0") {
                myself.showLabelError(Label);
                errorFlag[i] = true;        
            } else if(input.is(".required") && input.hasClass("Number") && ! numRe.test(input.val())){ // Test only if number are entered.
                    myself.showLabelError(Label);                        
                    errorFlag[i] = true;
            } else if (input.hasClass("Email") && ! myself.ValidateEmail(input)) {
                    myself.showLabelError(Label);                        
                    errorFlag[i] = true;
            }else {                        
                    errorFlag[i] = false;
                    Label.removeClass("Error");
            }                       
        }                    
        if(jQuery.inArray(true,errorFlag)!= -1) 
        {           
           return false;
        }       
        return true;         
    }

    this.Reset = function(jControl)
    {
        var myself = this;
        myself._ResetEditor(jControl);
    }
    
    this.MarshallCustomerAddress = function(Address)
    {
        var myself = this;
        Address.Address1 = myself.GetElementValue("BAddress1");
        Address.Address2 = myself.GetElementValue("BAddress2");
        Address.City = myself.GetElementValue("BCity");
        Address.State = myself.GetElementValue("BState");
        Address.ZIP = myself.GetElementValue("BZipPostal");
        Address.Type  = "Billing"; //"Home";
        return Address;       
    }
    
    this.MarshallCreditCardItem = function(CreditCard)
    {
        var myself = this;
        CreditCard.Type = myself.GetElementValue("BCCType");
        CreditCard.Number = myself.GetElementValue("BCCNumber");
        CreditCard.ExpMonth = myself.GetElementValue("BExpMonth");
        CreditCard.ExpYear = myself.GetElementValue("BExpYear");
        CreditCard.Amount = myself.GetElementValue("CAmount");   
        //CreditCard.CCV = myself.GetElementValue("CCV");        
    }

    this.MarshallCustomerShipping = function(Address)
    {
        var myself = this;
        Address.Address1 = myself.GetElementValue("SAddress1");
        Address.Address2 = myself.GetElementValue("SAddress2");
        Address.City = myself.GetElementValue("BCity");
        Address.State = myself.GetElementValue("BState");
        Address.ZIP = myself.GetElementValue("BZipPostal");
        Address.Type  = "Shipping";
        return Address;
    }

    this.MarshallCustomerGiftCard = function(GiftCard)
    {
        var myself = this;
        GiftCard.Quantity = myself.GetElementValue("GQuantity");
        GiftCard.Amount = myself.GetElementValue("CAmount");
    }
    
    this.MarshallCustomerItem = function(Customer)
    {        
        var myself = this; 
        Customer.FirstName = myself.GetElementValue("BFirstName");
        Customer.LastName = myself.GetElementValue("BLastName");
        Customer.Email = myself.GetElementValue("BEmail");                                              
    }

    this.BillingShippingChecked = function(form)
    {
        var myself = this;
        myself._findjcontrol("BillingShipping").click(
        function()
        {
            var $this = $(this);
            if($this.is(":checked"))
            {
                myself._findjcontrol("SAddress1").val(myself.GetElementValue("BAddress1")); 
                myself._findjcontrol("SAddress2").val(myself.GetElementValue("BAddress2")); 
                myself._findjcontrol("SCity").val(myself.GetElementValue("BCity")); 
                myself._findjcontrol("SState").val(myself.GetElementValue("BState")); 
                myself._findjcontrol("SZipPostal").val(myself.GetElementValue("BZipPostal")); 
            } else {
                myself._findjcontrol("SAddress1").val("");
                myself._findjcontrol("SAddress2").val("");
                myself._findjcontrol("SCity").val("");
                myself._findjcontrol("SState").val("");
                myself._findjcontrol("SZipPostal").val("");
            }
                
        });
    }
    
    this.MarshallBanquetCustomer = function(BanquetCustomer)
    {
        var myself = this;
        BanquetCustomer.Name = myself.GetElementValue("CName");
        BanquetCustomer.Company = myself.GetElementValue("CCompany");
        BanquetCustomer.Email= myself.GetElementValue("CEmail");
        BanquetCustomer.Phone = myself.GetElementValue("CPhone");       
    } 
    
    this.MarshallBanquetCordinatorItem = function(BanquetCordinator)
    {
        var myself = this;        
        myself.MarshallBanquetCustomer(BanquetCordinator.Customer)
        BanquetCordinator.TypeOfFunction = myself.GetElementValue("CFunctionType");
        BanquetCordinator.NosOfGuest = myself.GetElementValue("CGuestNumber");
        BanquetCordinator.Comment = myself.GetElementValue("CComment");
        if (myself._findjcontrol("CSignUp").is(":checked")) {
             BanquetCordinator.BeInTheknow =$("label[for*='" + myself._findjcontrol("CSignUp").attr("id") + "']").html();
        }        
    }

    this.AddPurchaseItem = function(objPurchase,ItemDetail)
    {
        var myself = this;      
        var OrderCartTable = myself._findjcontrol("OrderCartTable");
        var CartRow = OrderCartTable.find(".OrderRow");                  
        var Amount = 0;
        for(var i=0; i<CartRow.length;i++)
        {
            var objItemDetail = $.extend({},true,ItemDetail);            
            var $this = $(CartRow[i]);
            objItemDetail.Item = "GiftCard";
            objItemDetail.Price = Number($this.find(".OrderSubTotal").html()).toFixed(2);
            objItemDetail.Tax = Number("0").toFixed(2);  
            objItemDetail.Quantity = Number($this.find(".OrderQty").html());       
            objPurchase.ItemDetails[objPurchase.ItemDetails.length] =  objItemDetail;
            Amount+= Number(objItemDetail.Price);
        }
        objPurchase.CreditCard.Amount = Amount.toFixed(2);
    }

    this.ShowItemDetailsSummary = function()
    {
        var myself = this;
        var ItemDetails = myself.ObjectPurchase.ItemDetails;
        var table = $("<table></table>");
        myself.TotalPrice =0.0;
        for(var i=0; i<ItemDetails.length;i++)
        {
           table.append("<tr><td>&#8226; &nbsp;</td><td>Gift Card (Card Amount: "+ ItemDetails[i].Price +", Card Quantity: "+ ItemDetails[i].Quantity + ")</td></tr>");  
           myself.TotalPrice +=   Number(ItemDetails[i].Price);  
        }
        return table;
    }


   this.ShowShippingSummary = function()
   {
        var myself = this;
        var objPurchase = myself.ObjectPurchase;
        var table = $("<table></table>");
        table.append("<tr><td>"+ objPurchase.Customer.FirstName + " " + objPurchase.Customer.LastName +  "</td></tr>");
        table.append("<tr><td>"+ objPurchase.Customer.Addresses[1].Address1 + " " + objPurchase.Customer.Addresses[1].Address2 +  "</td></tr>");
        table.append("<tr><td>"+ objPurchase.Customer.Addresses[1].City + " " +  objPurchase.Customer.Addresses[1].State + " " + objPurchase.Customer.Addresses[1].ZIP + "</td></tr>");
        return table;
   }


    this.ShowBillingSummary = function()
    {
        var myself = this;
        var objPurchase = myself.ObjectPurchase;
        var table = $("<table></table>");
        table.append("<tr><td>"+ objPurchase.Customer.FirstName + " " +  objPurchase.Customer.LastName +  "</td></tr>");
        table.append("<tr><td>"+ objPurchase.Customer.Addresses[0].Address1 + " " + objPurchase.Customer.Addresses[0].Address2 +  "</td></tr>");
        table.append("<tr><td>"+ objPurchase.Customer.Addresses[0].City + " " +  objPurchase.Customer.Addresses[0].State + " " +objPurchase.Customer.Addresses[0].ZIP + "</td></tr>");
        return table;   
    }

    this.getObjectPurchase = function(api)
    {
       var myself = this;
       if(myself.ObjectPurchase!=null){
            clearInterval(TimeInterval);
            api.next();
        }        
    }

    this.ShowLoadingCircle = function(objToLoad)
    {              
        objToLoad.hide();                
        objToLoad.after($("#loading_circle").clone().show());     
    }
    
    this.HideLoadingCircle = function(objToShow)
    {
        objToShow.next().remove();
        objToShow.show();                
    }

    this.TimeInterval = null;
    this.GiftCartWizard = function ()
    {
          var myself = this;
          var wizard  = myself._findjcontrol("wizard");
          var root = wizard.scrollable({          
            onBeforeSeek: function(event,i)
            {
                 //i is the page being scroll too.
                var api = this; 
                if(api.getIndex()<i) 
                 {     
                     var index = api.getIndex();
                     var page = root.find(".page").eq(index); // get current page.
                     var NextButton = page.find(".next");
                     if(index==0) {
                        var form = page.find(".giftform");
                        if(! myself.ValidateGiftCard(form)) {
                            return false;
                        }
                        if(myself.ObjectPurchase!=null){
                            window.clearInterval(myself.TimeInterval);
                            myself.HideLoadingCircle(NextButton);
                            return;
                        } else { 
                            myself.ShowLoadingCircle(NextButton);
                            myself.MarshallFields(); // Get all the fields value and construct request object.                            
                            myself.TimeInterval = self.setInterval(function(){
                                    if(myself.ObjectPurchase!=null){                                                           
                                        api.next();                                                    
                                    }        
                            },5000);                                    
                        }   
                        return false;
                     } 
                     if(index == 1)
                     {                    
                       if(! myself.ObjectPurchase.Success) {
                            myself.ShowLoadingCircle(NextButton);  
                            myself.get_Service().Add(myself.ObjectPurchase,
                                function(SaveResult) 
                                {
                                    if (!SaveResult.Success) {
                                        page.find(".ErrorMsg").html(SaveResult.Message).show();                                                                                                           
                                    } else {
                                        page.find(".ErrorMsg").hide();
                                        $.extend(myself.ObjectPurchase,SaveResult);
                                        api.next();
                                    }                                                                                                                                        
                                });
                            return false;
                        }
                        myself.HideLoadingCircle(NextButton);
                        return;
                     }
                 } 
             },
            onSeek: function(event,i)
                 {
                     var index = this.getIndex();
                     if(index == i) {
                         if(index==1) { // order Summary
                            var page = root.find(".page").eq(index); // get current page.    
                            page.find(".SummaryBillingInfo").find(".Summarytext").html(myself.ShowBillingSummary());
                            page.find(".SummaryShippingInfo").find(".Summarytext").html(myself.ShowShippingSummary());           
                            page.find("#OrderDescription").find(".Summarytext").html(myself.ShowItemDetailsSummary()); 
                            page.find("#total").html(myself.TotalPrice);                   
                         }               
                    }  
                }

         });
         
         wizard.find(".next").keydown(function(e) {  // if tab is pressed on the next button seek to next page
	        if (e.keyCode == 9) {
		        // seeks to next tab by executing our validation routine
		        api.next();
		        e.preventDefault();
	        };               
         
         
        });

               
    }

    this.GetCustomerBilling = function(OrderContainer)
    {
        var myself = this;      
        myself._findjcontrol("orderGiftCard").click(
        function() {
            if(!myself._findjcontrol("OrderCartTable").find(".OrderQty").length >0)
                return false;
            
            var $this = $(this);                                  
            myself._findjcontrol("orderGiftCard").overlay
            ({
                mask: '#000',
                effect: 'apple',
                api: true,
                closeOnClick: false,
                onBeforeLoad: function(e) {
                       // call the scrollbar.                        
                       myself.GiftCartWizard();
                },
                onClose: function() {
                      if(myself.ObjectPurchase!=null && myself.ObjectPurchase.Success) {
                         var OrderDetail = myself._findjcontrol("OrderDetail");
                         var OrderCartTable = myself._findjcontrol("OrderCartTable");
                         OrderCartTable.find(".OrderRow").remove(); // remove Cart Summary
                         myself.Reset(OrderDetail);                 // Remove Billing Information
                         var api = myself._findjcontrol("wizard").scrollable();
                         api.seekTo(0);
                         myself.ObjectPurchase = null;
                      }
                },
                onLoad: function() {
                    myself.BillingShippingChecked(OrderContainer);                    
                }
            }).load();        
        });
    }

    this.AddGiftOrder = function($this)
    {
        var myself = this;        
        var OrderContainer = $this.closest("#AddOrderContainer");           
        var OrderCartTable = myself._findjcontrol("OrderCartTable");    
        if (myself.validate(OrderContainer)) {                
            var thisQuantity = Number(OrderContainer.find("#GQuantity").val());
            var thisAmount = Number(OrderContainer.find("#CAmount").val()).toFixed(2);
            var TotalQuantityInCart = 0;                        
            var OrderQtyCell = OrderCartTable.find(".OrderQty");                        
            for(var i=0;i<OrderQtyCell.length;i++) { // Add all order qunatity
                TotalQuantityInCart += Number(OrderQtyCell[i].innerHTML);                       
            }                                     
            if((TotalQuantityInCart + thisQuantity)>0) {
                var blankRow = OrderCartTable.find("#blankRow").clone();
                var blankRowCols = blankRow.find('td');
                var subTotal = (thisQuantity*thisAmount).toFixed(2);
                blankRow.addClass("OrderRow");
                blankRowCols.eq(0).addClass("OrderPrice").html(thisAmount);
                blankRowCols.eq(1).addClass("OrderQty").html(thisQuantity);
                blankRowCols.eq(2).addClass("OrderSubTotal").html(subTotal);
                blankRowCols.eq(3).html("X").click(
                function()
                {
                    var $this =$(this);
                    $this.closest("tr").remove();
                    return false;
                });                
                blankRow.prependTo(OrderCartTable.find("tbody")).removeAttr("id");                             
                myself.GetCustomerBilling(OrderContainer); // Gift Card Overlay
            } else {
                myself.Alert('Error', "A total four gift cards can be ordered in a single checkout. Thank you.")
            }            
        } else {
            return false;
        }
        $(".ScrollText").jScrollPane({scrollbarWidth:5});
        myself.Reset(OrderContainer);
    }

    this.SendCustomerEmail = function($this)
    {
        var myself = this;
        var form = $this.closest('.generalForm'); // could be mailing list or contact form.
        if (myself.validate(form)) {
            myself.Lock();
            myself.get_Service().getSubscriber(
            function(Subscriber) 
            {
                var formType = form.attr('class');
                if (form.hasClass('ContactForm')) {
                    myself.MarshallContactFormItem(Subscriber);
                    Subscriber.Type = "Contact Form";                    
                }
                else if (form.hasClass('MailingList')) {
                myself.MarshallSubscriberItem(Subscriber);
                    Subscriber.Type = "Mailing List";                    
                }
                // send Mail
                myself.get_Service().SendCustomerMail(Subscriber,
                function(SaveResult) 
                {
                    if (!SaveResult.Success) {
                        myself.Alert('Error!', "One or more field is missing!"); //SaveResult.Message                                   
                    } else {
                        myself.Reset(form);
                        myself.Alert('Successful', "Your message has been sent! Thank You!");                        
                    }
                    myself.UnLock();                    
                }); //SendCustomerMail                                                
            }); // getSubscriber
        }
    }

    this.SendBanquetRequest = function($this)
    {
        var myself = this;
        var form = $this.closest(".banquetForm");
        if (myself.validate(form)) 
        {
            myself.Lock();
            myself.get_Service().getBanquetCordinator(
            function(BanquetCordinator) 
            {
                myself.MarshallBanquetCordinatorItem(BanquetCordinator);
                myself.get_Service().EmailBanquetCordinator(BanquetCordinator,
                function(SaveResult) 
                {
                    if (!SaveResult.Success) {
                        myself.Alert('Error!', SaveResult.Message);
                    } else {
                        myself.Alert('Successful!', SaveResult.Message);
                        myself.Reset(form);
                    }
                    myself.UnLock();
                });

            });
        }
    }
    

    // SubmitGiftOrder
    this.MarshallFields = function(page) {
        var myself = this;
        //var form = $this.closest(".giftform");
        
        //if (myself.ValidateGiftCard(form)) {
            myself.get_Service().getPurchase(
            function(Purchase) {
                myself.get_Service().getAddress(
                function(Address) {
                    myself.get_Service().getItemDetail(
                    function(ItemDetail) {
                        //myself.LockjControl(form);
                        myself.MarshallCustomerItem(Purchase.Customer); // Customer
                        myself.MarshallCreditCardItem(Purchase.CreditCard); // CreditCard
                        var AddressesList = Purchase.Customer.Addresses; // Addresses

                        //Home Address
                        Address = myself.MarshallCustomerAddress($.extend({}, true, Address));
                        AddressesList[AddressesList.length] = Address;

                        //shipping Address
                        Address = myself.MarshallCustomerShipping($.extend({}, true, Address));
                        AddressesList[AddressesList.length] = Address;

                        // List of PurchaseItem.
                        myself.AddPurchaseItem(Purchase, ItemDetail);

                        //IpAddress
                        var ipAddress = myself._findASPNETjcontrol("remoteAdd").val();
                        Purchase.Customer.IpAddress = ipAddress;
                        myself.ObjectPurchase = Purchase;                        
                                               
                    }); // ItemDetail                     
                }); //Address Service                                                                                       
            }); // Purchase Service
        //}
    }


    this.BindEventCustomer = function()
    {
        var myself = this;
        var customer = new Entities.Customer();
        customer.Name = myself._findjcontrol("REName").val();
        customer.Email = myself._findjcontrol("REEmail").val();
        customer.Phone = myself._findjcontrol("REPhone").val();
        return customer;
    }
    
    this.SendRegisterEventRequest = function($this){
        var myself = this;
        var form = $this.closest(".banquetForm");
        if (myself.validate(form)) 
        {
            myself.Lock();            
            var objCustomer = myself.BindEventCustomer();
            var NumAttending = myself._findjcontrol("RENumAttending").val();
            var EventCode = myself._findjcontrol("REEventCode").val();
            
            myself.get_Service().RegisterTWOEvent(objCustomer,NumAttending,EventCode,
            function(SaveResult){            
                if (!SaveResult.Success) {
                        myself.Alert('Error!', SaveResult.Message);
                } else {
                    myself.Alert('Successful!', SaveResult.Message);
                    myself.Reset(form);
                }
                myself.UnLock();
            
            });
        }
    }



    this.Init = function() {
        var myself = this;
        var url = new String(window.location); 
        myself.DisplayContent(url);

        $(window).bind('hashchange', function(e) {
                var url = new String(window.location); 
                myself.DisplayContent(url);
        });

        // slideIn and slideOut Restaurant Menus List
        myself._findASPNETjcontrol("lblTopMenus").find("span.AspNet-Menu-NonLink").click(
        function() {
            var $this = $(this);
            myself.SlideInMenu($this);
        });


        // need to write something for overlayVirtualTour.
        //        $(myself.get_element()).find(".rightMenu li a").click(function() {
        //            var $this = $(this);
        //            //if this is a virtual tour then open lightbox.
        //            if ($this.text().indexOf("Virtual") != -1) {
        //                $this.attr('rel', '#virtualTourOverlay');
        //                myself.overlayVirtualTour();
        //            } /*else {
        //                
        //                myself.DisplayContent($this.attr('href'));
        //            }*/
        //        });

        myself._findjcontrol("virtual-tour").click(function() {
            myself.overlayVirtualTour();
        });


        myself._findjcontrol("galleryLink").click(function() {
            myself.OverlayTWOGallery();
        });

        //submit forms.
        $("#submitContactForm , #submitMailingList").click(
        function() {
            var $this = $(this);
            myself.SendCustomerEmail($this);
            return false;
        });

        //Add order in the list of orders.
        myself._findjcontrol("AddOrder").click(
        function() {
            var $this = $(this);
            myself.AddGiftOrder($this);
        });

        //submit banquet request.
        myself._findjcontrol("BanquetRequest").click(
        function() {
            var $this = $(this);
            myself.SendBanquetRequest($this);
        });

        // register event
        myself._findjcontrol("RESubmit").click(
        function(){
            var $this = $(this);
            myself.SendRegisterEventRequest($this);
        });

//        // preload all Gallery images.
//        myself.get_Service().GetImagesListFromDirectory(
//        function(listOfImgName) {
//            if (listOfImgName.length > 0) {
//                for (var i = 0; i < listOfImgName.length; i++) {
//                    new Image().src = "/images/Gallery-panel/" + listOfImgName[i];
//                    new Image().src = "/images/Gallery-small/" + listOfImgName[i];
//                }
//            }
//        });
    }               // Init
}//TwoWebsiteManager

