var bookASpa;
var requestPage = 'search.aspx';
var hidClub;
var hidDate;
var hidTime;
var hidCategory;
var hidService;
var hidStaff;
var hidInclSubseqResults;

/* gets selected value from radio list */
function $RF(el, radioGroup) {
    if($(el).type && $(el).type.toLowerCase() == 'radio') {
        var radioGroup = $(el).name;
        var el = $(el).form;
    } else if ($(el).tagName.toLowerCase() != 'form') {
        return false;
    }
 
    var checked = $(el).getInputs('radio', radioGroup).find(
        function(re) {return re.checked;}
    );
    return (checked) ? $F(checked) : null;
}


function WaitMsg (divText) {
    this.div = divText;
    this.dotCount = 0;
    this.dotArray = new Array();
    this.dotArray[0] = '';
    this.dotArray[1] = '.';
    this.dotArray[2] = '..';
    this.dotArray[3] = '...';
    this.stop = false;
    this.count = 0;
    this.max = 20;
};

WaitMsg.prototype.Start = function() {
    this.div.show();
    var i = 0;

    this.SetText();
};
WaitMsg.prototype.SetText = function() {
    var This = this;
    if (!this.stop && This.count < This.max) {
        this.div.innerHTML = 'Refreshing' + this.dotArray[this.dotCount];
        
        if (this.dotCount == 3) {
            this.dotCount = 0;
        }
        else {
            this.dotCount++;
        }
    
        setTimeout(function(){ This.SetText(); }, 250);
        this.count++;
    }
};
WaitMsg.prototype.Stop = function() {
    this.stop = true;
};

/* Result Dropdown */
function ResultDropdown(dropdown, resultDiv) {
    this.dropdown = $(dropdown);
    this.resultDiv = $(resultDiv);
    this.waitMsg;
};
ResultDropdown.prototype.ShowWithResults = function(ignore) {
    this.waitMsg.Stop();
    this.dropdown.show();
    this.resultDiv.show();
    var length = this.dropdown.options.length;
    var displayCount = length-ignore < 0 ? 0 : length-ignore;
    this.resultDiv.innerHTML = displayCount + ' items found';
};
ResultDropdown.prototype.ClearResultMsg = function() {
    //this.resultDiv.hide();
    this.resultDiv.innerHTML = '';
};
ResultDropdown.prototype.Hide = function() {
   this.dropdown.hide();
   this.ClearResultMsg();
};
ResultDropdown.prototype.Clear = function() {
   this.dropdown.length = 0;
   this.dropdown.innerHTML = "";
   this.ClearResultMsg();
}
ResultDropdown.prototype.GetValue = function() {
    return this.dropdown.options[this.dropdown.selectedIndex].value;
};
ResultDropdown.prototype.StartWaitMsg = function() {
    this.resultDiv.show();
    this.waitMsg = new WaitMsg(this.resultDiv);
    this.waitMsg.Start();
    
};


/* BookASpa */
function BookASpa(dataElt, ddlRegion, ddlClub, rdCat, rdSvc, rdStaff, txtDate, chkIncl, btnContinue) {
    this.Data = $(dataElt).innerHTML.evalJSON(true);
    this.ddlRegion = $(ddlRegion);
    this.ddlClub = $(ddlClub);
    this.rdCategory = rdCat;
    this.rdService = rdSvc;
    this.rdStaff = rdStaff;
    this.maxClubsPerCol = 7;
    this.txtDate = $(txtDate);
    this.chkIncl = $(chkIncl);
    this.Init();
};
BookASpa.prototype.Init = function() {
    var This = this;
    this.ddlRegion.selectedIndex = 0;
    this.ddlRegion.onchange = function(e) { This.RegionSelected(e); }
    this.ddlClub.onchange = function(e) { This.ClubSelected(e); }
    this.rdCategory.dropdown.onchange = function(e) { This.CategorySelected(e); }
    this.rdService.dropdown.onchange = function(e) { This.ServiceSelected(e); }
    this.rdStaff.dropdown.onchange = function(e) { This.StaffSelected(e); }
    this.chkIncl.onclick = function(e) { This.InclCheckboxClicked(e); }
    this.EnableDropdowns(0);
    
};
BookASpa.prototype.EnableDropdowns = function(index){
    var ddls = new Array(4);
    ddls[0] = this.ddlClub;
    ddls[1] = this.rdCategory.dropdown;
    ddls[2] = this.rdService.dropdown;
    ddls[3] = this.rdStaff.dropdown;
    
    for (var i=0;i<ddls.length;i++) {
        if (i < index) {
            ddls[i].disabled = '';
        }
        else {
            ddls[i].disabled = 'disabled';
        }
    }
};
BookASpa.prototype.SelectRegionAndClub = function(region, club) {
    var This = this;
    for (var i=0;i<This.ddlRegion.options.length;i++) {
        var rgnOpt = This.ddlRegion.options[i];
        if (rgnOpt.value == region) {
            rgnOpt.selected = true;
            break;
        }
    }
    
    this.RegionSelected();
    
    for (var i=0;i<This.ddlClub.options.length;i++) {
        var clubOpt = This.ddlClub.options[i];
        if (clubOpt.value == club) {
            clubOpt.selected = true;
            break;
        }
    }
    
    this.ClubSelected();  

};
BookASpa.prototype.SelectDropdownValues = function(region,club,cat,svc) {
    this.SelectRegionAndClub(region, club);
    
};
BookASpa.prototype.InclCheckboxClicked = function(e) {
    var This = this;
    if (This.rdStaff.dropdown.options.length > 0)
        This.ServiceSelected(null)
};
BookASpa.prototype.RegionSelected = function(e) {
    var ddl = this.ddlRegion;
    var regionId = ddl.options[ddl.selectedIndex].value;
    this.ClearDropdown(this.rdCategory.dropdown);
    this.ClearDropdown(this.rdService.dropdown);
    
    if (regionId > 0) {
        var clubs = this.Data.clubs;
        this.FillClubDropdown(clubs, regionId);
        this.ddlClub.show();
        this.EnableDropdowns(1);
    }
    else {
        this.ClearDropdown(this.ddlClub);
        this.EnableDropdowns(0);
    }
};
BookASpa.prototype.FillClubList = function(clubs) {

    var maxPerCol = this.maxClubsPerCol;
    var maxClubs = maxPerCol * this.clubColumns.length;
    var numInCol = 0;
    var colIdx = 0;
    
    this.ClearClubs();
    
    for (var c=0;c<clubs.length;c++) {
        
        if (numInCol >= maxPerCol) {
            numInCol = 0;
            colIdx++;
        }
        
        var checkbox = this.CreateCheckbox(clubs[c].acode, clubs[c].name);
        
        this.clubColumns[colIdx].insert(checkbox);
        this.clubColumns[colIdx].insert('<br />');
        numInCol++;
        
    }
    
    return;

};
BookASpa.prototype.ClubSelected = function(e) {

    var ddl = this.ddlClub;
    var clubId = ddl.options[ddl.selectedIndex].value;
    var sessId = this.Data.sessionId;
    this.rdService.Clear();
    this.rdStaff.Clear();
    this.rdCategory.Clear();
    if (clubId > 0) {
        this.LoadCategories(sessId, clubId);
        this.EnableDropdowns(2);
    }
    else {
        this.EnableDropdowns(1);
    }
};
BookASpa.prototype.LoadCategories = function(sessId, clubId) {
    
    var d = 'sessionId=' + sessId
            + '^locations=' + clubId;
                
    var This = this;
    this.rdCategory.StartWaitMsg();
    
    new Ajax.Request(requestPage,
    {
        method: 'get',
        parameters: { ajax:'true', method:'LoadServiceTypes', params:d },
        onSuccess: function(t){
            var d = t.responseText.evalJSON();
            This.FillCategoryDropdown(d);
            This.rdCategory.ShowWithResults(2);
            
            if (This.categoryId != null) {
                SelectFromDropdown(This.rdCategory.dropdown, This.categoryId);
                This.CategorySelected();
             }//if
        }
       
    });

}
BookASpa.prototype.CategorySelected = function(e) {

    var ddl = this.rdCategory.dropdown;
    var catId = this.rdCategory.GetValue();
    var clubId = this.ddlClub.options[this.ddlClub.selectedIndex].value;
    var sessId = this.Data.sessionId;
    this.rdService.Clear();
    this.rdStaff.Clear();

    
    if (clubId > 0 && catId != -1 && sessId != "") {
        this.LoadServices(sessId,clubId,catId);
        this.EnableDropdowns(3);
    }
    else {
        this.ClearDropdown(this.rdService.dropdown);
        this.EnableDropdowns(2);
    }
};
BookASpa.prototype.ServiceSelected = function(e) {

    var ddl = this.rdService.dropdown;
    var svcId = ddl.options[ddl.selectedIndex].value;
    var sessId = this.Data.sessionId;
    var custId = '';    
    var clubId = this.ddlClub.options[this.ddlClub.selectedIndex].value;
    var catId = this.rdCategory.GetValue();
    var date = this.txtDate.value
    var inclNextDay = this.chkIncl.checked;
    
    this.rdStaff.Clear();
    
    if (clubId.length > 2 && catId != -1) {
        this.LoadStaff(sessId,custId,clubId,catId,svcId,date,inclNextDay);
        this.EnableDropdowns(4);
    }
    else {
        this.rdStaff.Clear();
        this.EnableDropdowns(3);
    }
    
    if (this.rdStaff.dropdown.options.length > 0) {
        this.btnContinue.disabled = '';
    }
    
    
};
BookASpa.prototype.StaffSelected = function(e) {
    /***** XF - Commented out for now.  TODO: Update this function. *****/
    /*
    var ddl = e.target
    var staffId = ddl.options[ddl.selectedIndex].value;
    var clubId = this.ddlClub.options[this.ddlClub.selectedIndex].value
    this.btnContinue.hide();
    if (staffId > 0 && this.txtDate.value != '' && clubId > 0) {
        this.btnContinue.show();
    }*/
};
BookASpa.prototype.FillClubDropdown = function (clubs, regionId) {
    
    var d = new Array();
    var i=0;
    //var opt0 = new Option('Choose a Club', -1);
    
    var optList = new Array();
    optList[0] = new Option('Choose a Club', -1);
    
    for (var c=0;c<clubs.length;c++) {
        if (clubs[c].regionId == regionId) {
            d[i] = clubs[c];
            i++;
        }
    }
    this.FillDropdown(this.ddlClub, d, null, optList);
};
BookASpa.prototype.FillCategoryDropdown = function(categories) {

    var d = new Array();
    var i=0;
    for (var c=0;c<categories.length;c++) {
         d[i] = categories[c];
         i++;
    }
    
    var ddl = this.rdCategory.dropdown;
    ddl.options[0] = new Option('Choose a Category', -1);
    ddl.options[1] = new Option('All Categories', 'All');
    var oGroup = document.createElement('optgroup');
    oGroup.label = '-------------------------------';
    ddl.appendChild(oGroup);
    
    var offset = 2;
    var arr = d;

    for (var i=0; i<arr.length; i++) {
        var name = arr[i].name;
        var id = arr[i].id;
        ddl.options[i + offset] = new Option(name, id);
    }
};
BookASpa.prototype.FillServiceDropdown = function(services) {

    var d = new Array();
    var i=0;
    
    var optList = new Array();
    optList[0] = new Option('Choose a Service', -1);
    
    for (var s=0;s<services.length;s++) {
        d[i] = services[s];
        i++;
    }
    this.FillDropdown(this.rdService.dropdown, d, null, optList);
};
BookASpa.prototype.FillStaffDropdown = function(staff) {

    var d = new Array();
    var i=0;
     
    for (var s=0;s<staff.length;s++) {
        d[i] = staff[s];
        i++;
    }
    var ddl = this.rdStaff.dropdown;
    
    ddl.options.length = 0;
        
    if (d.length > 0) { 
    
        ddl.options[0] = new Option('Any Provider', 'all');
        ddl.options[1] = new Option('Any FEMALE Provider', 'F');
        ddl.options[2] = new Option('Any MALE Provider', 'M');

        var oGroup = document.createElement('optgroup');
        oGroup.label = '------------------------------------';
        ddl.appendChild(oGroup);
        
        var offset = 3;
        var arr = d;

        for (var i=0; i<arr.length; i++) {
            var name = arr[i].name;
            var id = arr[i].id;
            ddl.options[i + offset] = new Option(name, id);
        }
    }
};
BookASpa.prototype.CreateCheckbox = function(value, text) {
    return '<input type="checkbox" class="clubCkBox" value="' + value + '">' + text + '</input>';
};
BookASpa.prototype.ClearClubs = function() {

    var numCols = this.clubColumns.length;
    for (var col=0;col<numCols;col++) {
        this.clubColumns[col].innerHTML = '';
    }
};
BookASpa.prototype.FillDropdown = function(ddl, arr, selVal, extraOpts) {

    ddl.options.length = 0;
    var offset = 0;
    
    if (extraOpts != null) {
        for (var p=0;p<extraOpts.length; p++) {
            ddl.options[p] = extraOpts[p];
        }
        offset = extraOpts.length;
    }
    for (var i=0; i<arr.length; i++) {
        var name = arr[i].name;
        var id = arr[i].id;
        ddl.options[i + offset] = new Option(name, id);
        if (id == selVal)
            ddl.options[i + offset].selected = true;
    }
};

BookASpa.prototype.ClearDropdown = function(dropdown) {
    dropdown.options.length = 0;
    dropdown.innerHTML = "";
};
BookASpa.prototype.ContinueClicked = function(btn) {
    var url = 'results.aspx' + this.BuildQueryString();
    location.href = url;
};
BookASpa.prototype.BuildQueryString = function (e) {

    var qs = '?';
    qs += 'dt='
        + $('txtDate').value
        + '&cat='
        + this.rdCategory.GetValue()
        + '&acode='
        + this.ddlClub.options[this.ddlClub.selectedIndex].value
        + '&svc=' + this.rdService.GetValue()
        + '&staff=' + this.rdStaff.GetValue();
        
    return qs;    

};
BookASpa.prototype.LoadServices = function(sessionId, locations, svcTypes) {
    var d = 'sessionId=' + sessionId
            + '^locations=' + locations
            //+ '^locations=999'
            + '^serviceTypes=' + svcTypes;
    
    var This = this;
    this.rdService.StartWaitMsg();
            
    new Ajax.Request(requestPage,
    {
        method: 'get',
        parameters: { ajax:'true', method:'LoadServices', params:d },
        onSuccess: function(t){
            try {
                var d = t.responseText.evalJSON();
                This.FillServiceDropdown(d);
                This.rdService.ShowWithResults(1);
                
                if (This.serviceId != null) {
                    SelectFromDropdown(This.rdService.dropdown, This.serviceId);
                    This.ServiceSelected();
                }
            }
            catch(e) {
                alert(t.responseText);
            }
        }
    });
};
BookASpa.prototype.LoadStaff = function (sessionId,custId,locations,svcTypes,services,date,inclNext) {
    var d = 'sessionId=' + sessionId
            + '^customerId=' + custId
            + '^locations=' + locations
            + '^serviceTypes=' + svcTypes
            + '^services=' + services
            + '^date=' + date
            + '^includeNextDay=' + inclNext;
    
    var This = this;
    
    this.rdStaff.StartWaitMsg();
                
    new Ajax.Request(requestPage,
    {
        method: 'get',
        parameters: { ajax:'true', method:'LoadStaff', params:d },
        onSuccess: function(t){
            try {
                var d = t.responseText.evalJSON();
                This.FillStaffDropdown(d);
                This.rdStaff.ShowWithResults(3);                
            }
            catch(e) {
                alert(t.responseText);
            }
        }
    });
};

function SelectFromDropdown(dropdown, selVal) {
    var ddl = dropdown;
    for (var i=0;i<ddl.options.length;i++) {
        var opt = ddl.options[i];
        if (opt.value == selVal) {
            opt.selected = true;
            break;
        }
    }

}