﻿var filter_items = new Array();
var filter_built = false;
var search_LatLng = null;
var geocoder = null;
var showDistance = true;
var my_clinic_id = 0;

String.prototype.trim = function () {
    return this.replace(/^\s*(\S*(\s+\S+)*)\s*$/, "$1");
};

function clinic_list_init() {
    my_clinic_id = getCookie('Location');
    if (bGroupByCity) {
        build_dma_list();
    } else if (sort_field) {
        sort_list(sort_field);
    } else {
        sort_list('distance');
    }
    var content_div = document.getElementById('content');
    var content_noscript_div = document.getElementById('content_noscript');
    if (content_div) {
        setStyle(content_div, 'col1 round'); 
    }
    if (content_noscript_div) {
        setStyle(content_noscript_div, 'hidden');
    }
}

function build_dma_list() {
    if (myJSONObject && myJSONObject.Table.length > 0) {
        showDistance = false;
        build_list();
    }
}

function sort_list(sortType) {
    if (myJSONObject && myJSONObject.Table.length > 0) {
        var clinic_list_tab_1 = document.getElementById('clinic_list_tab_1');
        var clinic_list_tab_2 = document.getElementById('clinic_list_tab_2');
        var showSort = true;

        if (!clinic_list_tab_1 && !clinic_list_tab_2 && !sort_field) {
            sortType = 'city';
            showSort = false;
            showDistance = false;
        } else { showDistance = true; }

        switch (sortType) {
            case 'distance':
                myJSONObject.Table.sort(sort_by('DistanceDouble', false, parseFloat));
                if (showSort) {
                    setStyle(clinic_list_tab_1, 'tab current');
                    setStyle(clinic_list_tab_2, 'tab');
                }
                break;
            case 'city':
                myJSONObject.Table.sort(sort_by('City', false, function (a) { return a.toUpperCase() }));
                if (showSort) {
                    setStyle(clinic_list_tab_1, 'tab');
                    setStyle(clinic_list_tab_2, 'tab current');
                }
                break;
            case 'none':
                // Do nothing
                break;
            default:
                myJSONObject.Table.sort(sort_by('City', false, function (a) { return a.toUpperCase() }));
                if (showSort) {
                    setStyle(clinic_list_tab_1, 'tab');
                    setStyle(clinic_list_tab_2, 'tab current');
                }
        }
        build_list();
    }
}

function sort_by(field, reverse, primer) {

    reverse = (reverse) ? -1 : 1;

    return function (a, b) {

        a = a[field];
        b = b[field];

        if (typeof (primer) != 'undefined') {
            a = primer(a);
            b = primer(b);
        }

        if (a < b) return reverse * -1;
        if (a > b) return reverse * 1;
        return 0;

    }
}

function filter_by(filter) {
    var chk_box = document.getElementById('chk_' + filter);
    filter_items[filter] = chk_box.checked;
    if (myMQMmap)
        myMQMmap.dispose()
    build_list();
}

function build_list() {

    var current_state = '';
    var current_city = '';
    var clinic_list = document.getElementById('clinic_list');
    if (clinic_list.hasChildNodes()) {
        while (clinic_list.childNodes.length >= 1) {
            clinic_list.removeChild(clinic_list.lastChild);
        }
    }

    if (!filter_built) {
        build_filterBar();
    }

    var len = myJSONObject.Table.length;
    var typesLen = myJSONTypes.Types.length;
    for (var i = 0; i < len; i++) {

        var filter_flag = false;
        var servicesArray = myJSONObject.Table[i].ServicesArray;
        var servicesLen = servicesArray.length;

        for (var j = 0; j < typesLen; j++) {

            var found = false;
            for (var k = 0; k < servicesLen; k++) {
                if (servicesArray[k] == myJSONTypes.Types[j].name) {
                    found = true;
                }
            }

            if (found) {
                //Do nothing
            } else if (filter_items[myJSONTypes.Types[j].name] == true) {
                filter_flag = true;
            }
        }

        

        if (!filter_flag) {
            if (bGroupByCity) {
                if (current_state != myJSONObject.Table[i].StateName) {
                    current_state = myJSONObject.Table[i].StateName;
                    clinic_list.appendChild(build_state_header(current_state));
                }
                if (current_city != myJSONObject.Table[i].City) {
                    current_city = myJSONObject.Table[i].City;
                    clinic_list.appendChild(build_city_header(current_city, current_state));
                }
            }

            var item = build_item(myJSONObject.Table[i].ClinicID, myJSONObject.Table[i].StoreName, myJSONObject.Table[i].StoreNumber, myJSONObject.Table[i].AddressLine1, myJSONObject.Table[i].AddressLine2, myJSONObject.Table[i].City, myJSONObject.Table[i].StateProvince, myJSONObject.Table[i].PostalCode, myJSONObject.Table[i].PhoneNumber, myJSONObject.Table[i].LocationDescription, myJSONObject.Table[i].ClinicTypeId, servicesArray, 'javascript:marker_click(' + myJSONObject.Table[i].row_number + ');', 'setClinic(' + myJSONObject.Table[i].ClinicID + ');', myJSONObject.Table[i].ShowAppointmentForm, myJSONObject.Table[i].Latitude, myJSONObject.Table[i].Longitude, myJSONObject.Table[i].DistanceDouble, myJSONObject.Table[i].IsOpen, myJSONObject.Table[i].MicrositeUrl, myJSONObject.Table[i].MicrositeMobileUrl, myJSONObject.Table[i].ClinicDirectionsUrl, i);
            clinic_list.appendChild(item);
        }
    }
}

function build_filterBar() {
    var results_filter = document.getElementById('results_filter');

    for (var i = 0; i < myJSONTypes.Types.length; i++) {

        var input = document.createElement('input');
        input.setAttribute('id', 'chk_' + myJSONTypes.Types[i].name);
        input.setAttribute('type', 'checkbox');
        input.setAttribute('onclick', 'filter_by(\'' + myJSONTypes.Types[i].name + '\'); initialize(\'customMap\');');

        var label = document.createElement('label');
        label.setAttribute('for', 'chk_' + myJSONTypes.Types[i].name);
        label.appendChild(document.createTextNode(myJSONTypes.Types[i].name));

        results_filter.appendChild(input);
        results_filter.appendChild(label);

    }

    filter_built = true;
}

function build_state_header(state) {
    var state_header = document.createElement('div');
    setStyle(state_header, 'city_name');
    state_header.appendChild(document.createTextNode(state));
    return state_header;
}

function build_city_header(city, state) {
    var city_header = document.createElement('div');
    setStyle(city_header, 'city_name');
    city_header.appendChild(document.createTextNode(city + ', ' + state));
    return city_header;
}

function build_item(clinic_id, clinic_name_text, clinic_number_text, clinic_addy1_text, clinic_addy2_text, clinic_city, clinic_state, clinic_zip, clinic_phone_text, clinic_dir_text, is_spa, clinic_services, view_map, my_clinic, show_appointment, clinic_latitude, clinic_longitude, clinic_distance, is_open, clinic_microsite_url, clinic_mobile_microsite_url, clinic_directions_url, i) {
    
    var location_listing = document.createElement('div');
    setStyle(location_listing, 'clinic_result');

    var clinic_link = build_clinic_microsite_link(clinic_microsite_url, clinic_mobile_microsite_url);

    var div_sur = document.createElement('div');
    setStyle(div_sur, 'sur');
    location_listing.appendChild(div_sur);

    var clinic_area = build_clinic_area(clinic_name_text, clinic_number_text, clinic_addy1_text, clinic_addy2_text, clinic_city, clinic_state, clinic_zip, clinic_phone_text, clinic_dir_text, is_spa, clinic_services, clinic_link, is_open);
    location_listing.appendChild(clinic_area);

    var clinic_address = clinic_addy1_text + ', ' + clinic_city + ', ' + clinic_state + '  ' + clinic_zip;

    var directions = build_directions_link(clinic_directions_url);

    var request_appointment = clinic_link + '#Request_Appt';
    if (show_appointment == 'False') {
        request_appointment = '';
    }

    var clinic_links = build_clinic_links(clinic_id, clinic_address, clinic_latitude, clinic_longitude, clinic_distance, directions, view_map, show_appointment, request_appointment, my_clinic, is_open, i);
    location_listing.appendChild(clinic_links);

    var div_clear = document.createElement('div');
    setStyle(div_clear, 'clear');

    var div_sub = document.createElement('div');
    setStyle(div_sub, 'sub');

    location_listing.appendChild(div_clear);
    location_listing.appendChild(div_sub);

    return location_listing;
}

function build_directions_link(clinic_directions_url) {

    return clinic_directions_url;
}

function build_clinic_microsite_link(clinic_microsite_url, clinic_mobile_microsite_url) {
    var dma_string = '';
    if (dmaID != 0)
        dma_string = '?dmaid=' + dmaID;

    if (bMobile)
        return clinic_mobile_microsite_url + dma_string;
    else
        return clinic_microsite_url + dma_string;
}

function build_clinic_area(clinic_name_text, clinic_number_text, clinic_addy1_text, clinic_addy2_text, clinic_city, clinic_state, clinic_zip, clinic_phone_text, clinic_dir_text, is_spa, clinic_services, clinic_link, is_open) {
    var clinic_area = document.createElement('div');
    setStyle(clinic_area, 'info col1');

    var clinic_name = build_clinic_name(clinic_name_text, clinic_number_text, is_spa, clinic_link, is_open);
    clinic_area.appendChild(clinic_name);

    var clinic_addy = document.createElement('div');
    setStyle(clinic_addy, 'addy');
    if (clinic_addy1_text) {
        clinic_addy.appendChild(document.createTextNode(clinic_addy1_text));
        if (clinic_addy2_text) {
            clinic_addy.appendChild(document.createTextNode(' ' + clinic_addy2_text));
        }
        clinic_addy.appendChild(document.createElement('br'));
    }

    var clinic_city_state_zip = '';
    if (clinic_city)
        clinic_city_state_zip = clinic_city + ', ';
    if (clinic_state)
        clinic_city_state_zip += clinic_state + '  ';
    if (clinic_zip)
        clinic_city_state_zip += clinic_zip;

    clinic_city_state_zip.trim();
    clinic_city_state_zip.replace(/(^,)|(,$)/g, "")

    if (clinic_city_state_zip) {
        clinic_addy.appendChild(document.createTextNode(clinic_city_state_zip));
        clinic_addy.appendChild(document.createElement('br'));
    }
    clinic_addy.appendChild(document.createTextNode(clinic_phone_text));

    var clinic_dir = document.createElement('div');
    setStyle(clinic_dir, 'notes');
    clinic_dir.appendChild(document.createTextNode(clinic_dir_text));

    clinic_area.appendChild(clinic_addy);
    clinic_area.appendChild(clinic_dir);

    if (clinic_services.length > 0 && clinic_services[0] != '') {
        var clinic_services = build_clinic_services(clinic_services);
        clinic_area.appendChild(clinic_services);
    }

    return clinic_area;
}

function build_clinic_name(clinic_name_text, clinic_number_text, is_spa, link, is_open) {
    var clinic_name_div = document.createElement('div');

    var clinic_name_link = document.createElement('a');
    clinic_name_link.setAttribute('href', link);

    var clinic_name = document.createElement('span');
    setStyle(clinic_name, 'clinic_name');

    var massage_title = "Massage Envy";
    if (is_spa == 2) {
        massage_title += " Spa";
    }

    if (is_open) {
        setStyle(clinic_name_link, 'clinic_name');

        clinic_name_link.appendChild(document.createTextNode(massage_title));
        clinic_name_link.appendChild(document.createElement('br'));
        clinic_name_link.appendChild(document.createTextNode(clinic_name_text));
        clinic_name.appendChild(clinic_name_link);
    } else {
        clinic_name.appendChild(document.createTextNode(massage_title));
        clinic_name.appendChild(document.createElement('br'));
        clinic_name.appendChild(document.createTextNode(clinic_name_text));
    }

    var clinic_number = document.createElement('span');
    setStyle(clinic_number, 'clinic_number');
    clinic_number.appendChild(document.createTextNode('#' + clinic_number_text));

    clinic_name_div.appendChild(clinic_name);
    clinic_name_div.appendChild(clinic_number);

    if (is_spa == 2)
        setStyle(clinic_name_div, 'name spa');
    else
        setStyle(clinic_name_div, 'name');

    if (!is_open)
        clinic_name_div.appendChild(document.createTextNode(' (Coming Soon)'));

    return clinic_name_div;
}

function build_clinic_services(clinic_services) {
    var clinic_services_div = document.createElement('div');
    setStyle(clinic_services_div, 'services');

    var clinic_services_lbl = document.createElement('span');
    setStyle(clinic_services_lbl, 'title');
    clinic_services_lbl.appendChild(document.createTextNode('Signature Services:  '));

    clinic_services_div.appendChild(clinic_services_lbl);

    var len = clinic_services.length;
    for (var i = 0; i < len; i++) {
        if (i > 0) {
            clinic_services_div.appendChild(document.createTextNode(', '));
        }

        var clinic_service = document.createElement('span');
        setStyle(clinic_service, 'clinic_services');
        clinic_service.appendChild(document.createTextNode(clinic_services[i]));
        clinic_services_div.appendChild(clinic_service);
    }

    return clinic_services_div;
}

function build_clinic_links(clinic_id, clinic_address, clinic_latitude, clinic_longitude, clinic_distance, directions, view_map, show_appointment, request_appointment, my_clinic, is_open, i) {
    var clinic_links = document.createElement('div');
    setStyle(clinic_links, 'quick_util col2');

    clinic_links.appendChild(build_clinic_distance_row(clinic_address, clinic_latitude, clinic_longitude, clinic_distance));

    clinic_links.appendChild(build_clinic_link_row(directions, 'directions', 'Directions', '_blank'));

    if (clinic_latitude && clinic_longitude && clinic_latitude > 0 && clinic_longitude > 0)
        clinic_links.appendChild(build_clinic_link_row(view_map, 'map', 'View Map', ''));


    if (is_open && show_appointment)
        clinic_links.appendChild(build_clinic_link_row(request_appointment, 'appt', 'Request Appointment', ''));

    var my_clinic_link_button = document.createElement('a');
    //my_clinic_id = getCookie('Location');
    if (my_clinic_id != clinic_id)
        setStyle(my_clinic_link_button, 'default');
    else
        setStyle(my_clinic_link_button, 'hidden');
    my_clinic_link_button.setAttribute('onclick', my_clinic);
    my_clinic_link_button.setAttribute('id', clinic_id);

    var my_clinic_link_button_img = document.createElement('img');
    my_clinic_link_button_img.setAttribute('src', '/common/refresh/img/button/make_default_clinic.png');
    my_clinic_link_button_img.setAttribute('alt', 'Make This My Clinic');

    my_clinic_link_button.appendChild(my_clinic_link_button_img);

    if (is_open)
        clinic_links.appendChild(my_clinic_link_button);

    return clinic_links;
}

function build_clinic_distance_row(clinic_address, clinic_latitude, clinic_longitude, clinic_distance) {

    var distance_row = document.createElement('div');
    setStyle(distance_row, 'distance_row');

    var distance_row_span = document.createElement('span');

    if (clinic_distance) {
        if (showDistance) {
            distance_row_span.appendChild(document.createTextNode('~Distance: ' + round(clinic_distance) + ' miles'));
        }
    }

    distance_row.appendChild(distance_row_span);

    return distance_row;
}

function round(n) {
    return Math.round(n * 100 + ((n * 1000) % 10 > 4 ? 1 : 0)) / 100;
}

function build_clinic_link_row(link, style, text, target) {
    var row_link_text = document.createElement('a');
    setStyle(row_link_text, style);
    row_link_text.setAttribute('href', link);
    row_link_text.setAttribute('target', target);

    row_link_text.appendChild(document.createTextNode(text));

    return row_link_text;
}

function setStyle(ctl, className) {
    ctl.className = className;
}

function marker_click(i) {
    if (GEvent != null && gmarkers != null) {
        GEvent.trigger(gmarkers[i], 'click');
		goToByScroll("#txtExpand", 35);
    }
}

function goToByScroll(id, extra){
	$('html,body').animate({scrollTop: $(id).offset().top - extra},'slow');
}

function setClinic(clinic_id) {
    setCookieRequest("Location", clinic_id);
    var my_clinic_link_button = document.getElementById(clinic_id);
    setStyle(my_clinic_link_button, 'hidden');
    var my_clinic_link_button_old = document.getElementById(my_clinic_id);
    setStyle(my_clinic_link_button_old, 'default');
    my_clinic_id = clinic_id;
}
function setCookieRequest(key, value) {
    requestInfo("?key=" + key + "&value=" + value, "/process/setcookiekeyvalue.aspx");
}

