var days = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"];
var mons = ["January", "Feburary", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
var idxCounter = 0;

function fuzzy_day(d) {
    var suffix = "";
    switch (d) {
    case 1:
    case 21:
    case 31:
        suffix = "st";
        break;
    case 2:
    case 22:
        suffix = "nd";
        break;
    case 3:
        suffix = "rd";
        break;
    default:
        suffix = "th";
        break;
    }
    return suffix;
}

function get_dateObject(str) {
    var dt = new Date();
    dt.setFullYear(str.substring(6, 10), str.substring(3, 5) - 1, str.substring(0, 2));
    return dt;
}

function format_date(obj) {
    return days[obj.getDay()] + ", " + obj.getDate() + fuzzy_day(obj.getDate()) + " " + mons[obj.getMonth()];
}
////////////////////////////////////////////////////////////////////////////////////////////////
var set_slideMenus = function () {
        var content = new YAHOO.util.Element(document);
        var slide_menus = content.getElementsByClassName('slide-menu', 'div');
        for (var i = 0; i < slide_menus.length; i++) {
            var obj = slide_menus[i];
            var cnf = {
                inst: new YAHOO.util.Element(obj)
            };
            new slide_menu(cnf);
        };
    }
    // venue ///////////////////////////////////////////////////////////////////////////////////////////////

function get_row(obj) {
    var row = document.createElement('tr');
    var col = document.createElement('td');
    col.innerHTML = days[obj.dt_obj.getDay()];
    row.appendChild(col);
    col = document.createElement('td');
    col.className = "right";
    col.innerHTML = obj.dt_obj.getDate() + fuzzy_day(obj.dt_obj.getDate());
    // Add book link
    col.innerHTML += " <a href=\"#\" onclick=\"make_booking(" + idxCounter + ");\" rel=\"book\">[Book]</a>";
    row.appendChild(col);
    idxCounter++;
    return row;
}

function get_header(obj) {
    var row = document.createElement('tr');
    var col = document.createElement('th');
    col.setAttribute('colspan', '2');
    col.innerHTML = '' + mons[obj.dt_obj.getMonth()] + ', <span>' + obj.dt_obj.getFullYear() + '</span>';
    row.appendChild(col);
    return row;
}

function rsp(o) {
    //console.debug(o);
    var current_month = 24; //more than it can ever be...
    var table = document.createElement('table');
    for (var i = 0; i < o.fittingdays.length; i++) {
        var obj = o.fittingdays[i];
        var now = new Date();
        obj.dt_obj = get_dateObject(obj.dt);
        if (obj.dt_obj >= now) {
            if (current_month != obj.dt_obj.getMonth()) {
                table.appendChild(get_header(obj));
                table.appendChild(get_row(obj));
                current_month = obj.dt_obj.getMonth();
            } else {
                table.appendChild(get_row(obj));
            }
        }
    }
    //alert(now + " - " + obj.dt_obj);
    if (o.fittingdays.length == 0) {
        var row = document.createElement('tr');
        var col = document.createElement('td');
        col.innerHTML = "There are currently no fitting days for this venue. Please call<br><strong>0800 027 4430</strong> to make an appointment.";
        row.appendChild(col);
        table.appendChild(row);
    }
    var div = document.getElementById('listing');
    div.innerHTML = "";
    div.appendChild(table);
    set_bookingForm(o);
}
////////////////////////////////////////////////////////////////////////////////////////////////
/**
 * DHTML email validation script. Courtesy of SmartWebby.com (http://www.smartwebby.com/dhtml/)
 */

function echeck(str) {
    var at = "@"
    var dot = "."
    var lat = str.indexOf(at)
    var lstr = str.length
    var ldot = str.indexOf(dot)
    if (str.indexOf(at) == -1) {
        // alert("Invalid E-mail ID")
        return false
    }
    if (str.indexOf(at) == -1 || str.indexOf(at) == 0 || str.indexOf(at) == lstr) {
        // alert("Invalid E-mail ID")
        return false
    }
    if (str.indexOf(dot) == -1 || str.indexOf(dot) == 0 || str.indexOf(dot) == lstr) {
        //  alert("Invalid E-mail ID")
        return false
    }
    if (str.indexOf(at, (lat + 1)) != -1) {
        //  alert("Invalid E-mail ID")
        return false
    }
    if (str.substring(lat - 1, lat) == dot || str.substring(lat + 1, lat + 2) == dot) {
        //  alert("Invalid E-mail ID")
        return false
    }
    if (str.indexOf(dot, (lat + 2)) == -1) {
        //  alert("Invalid E-mail ID")
        return false
    }
    if (str.indexOf(" ") != -1) {
        //  alert("Invalid E-mail ID")
        return false
    }
    return true
}
var venues;
var fittingdays;

function validate_bookingForm() {
    var err = false;
    var v = document.getElementById('venue');
    v.disabled = false;
    var bd = new YAHOO.util.Element("c_panel");
    var inputs = bd.getElementsByClassName('validate', 'input');
    for (var i = 0; i < inputs.length; i++) {
        var input = new YAHOO.util.Element(inputs[i]);
        switch (input.get('name')) {
        case "name":
        case "tel":
            if (input.get('element').value == input.get('element').defaultValue) {
                var errorText = new YAHOO.util.Element("error-text");
                errorText.addClass('error-text');
                input.addClass('error');
                err = true;
            }
            break;
        case "email":
            if (!echeck(input.get('element').value)) {
                var errorText = new YAHOO.util.Element("error-text");
                errorText.addClass('error-text');
                input.addClass('error');
                err = true;
            }
            break;
        case "note":
            if (input.get('element').value == "Comment") {
                input.get('element').value = "";
            }
            break;
        }
    }
    if (err) {
        return false;
    } else {
        return true;
    }
}

function get_fittingdaysById(id) {
    //alert(id);
    var o = [];
    for (var i = 0; i < fittingdays.length; i++) {
        var obj = fittingdays[i];
        if (obj.id == id) {
            o.push(obj);
        }
    }
    return o;
}

function v_clicked(obj) {
    var option;
    var objs = get_fittingdaysById(obj[obj.selectedIndex].value);
    //alert(obj[obj.selectedIndex].value);
    var sel = document.getElementById('date');
    sel.innerHTML = "";
    if (obj.value != "0") {
        for (var i = 0; i < objs.length; i++) {
            var obj = objs[i];
            var dt_obj = get_dateObject(obj.dt);
            var now = new Date();
            if (dt_obj > now) {
                option = document.createElement('option');
                option.value = obj.dt;
                option.innerHTML = format_date(dt_obj);
                sel.appendChild(option);
                d_focus();
                sel.disabled = false;
            }
        }
    } else {
        option = document.createElement('option');
        sel.appendChild(option);
        option.innerHTML = "then choose a date";
        option.value = "0";
        //var but = document.getElementById('submit-bookingForm');
        //but.disabled = true;
        sel.disabled = true;
    }
}

function d_focus() {
    //var but = document.getElementById('submit-bookingForm');
    //but.disabled = false;
}

function i_focus(obj) {
    var o = new YAHOO.util.Element(obj);
    o.removeClass('error');
    var errorText = new YAHOO.util.Element("error-text");
    errorText.removeClass('error-text');
    if (obj.value == obj.defaultValue) {
        obj.value = "";
    }
}

function i_blur(obj) {
    if (obj.value == "") {
        obj.value = obj.defaultValue;
    }
}
var get_option = function (obj) {
        var option = new YAHOO.util.Element(document.createElement('option'));
        option.get('element').innerHTML = obj.title + " - <span>" + obj.address + "</span>";
        option.set('value', obj.id);
        return option;
    }
    
var make_booking = function (idx) {
    var dd = document.getElementById('date');
    dd.selectedIndex = idx;
    
    document.getElementById('panel_c').style.visibility = "visible";
}
var set_bookingForm = function (rsp) {
        //console.debug(rsp);
        venues = rsp.venues;
        fittingdays = rsp.fittingdays;
        var option;
        var obj;
        // venue selector //////////////////////////////////////////////////////////////////
        var sel = new YAHOO.util.Element(document.getElementById('venue'));
        for (var i = 0; i < venues.length; i++) {
            obj = venues[i];
            var option = get_option(obj).get('element')
            sel.get('element').appendChild(option);
            if (venue_id == venues[i].id) {
                option.setAttribute("selected", true);
                //alert(venue_id);
            }
        }
        if (venue_id) {
            sel.get('element').disabled = true;
            v_clicked(sel.get('element'));
        }
        //else {
        //	for(var i = 0; i < venues.length; i++)
        //	{
        //		if(venue_id == venues[i].id)
        //		{
        //sel.get('element').innerHTML = "";
        //obj = venues[i];
        //sel.get('element').appendChild(get_option(obj).get('element'));
        //
        //
        //		}
        //	}
        //}
        // build panel /////////////////////////////////////////////////////////////////////////////////////
        var panel_content = document.getElementById("booking-form");
        var cnf = {
            width: "700px",
            fixedcenter: true,
            close: true,
            draggable: false,
            zindex: 4,
            modal: true,
            visible: false
        };
        var panel = new YAHOO.widget.Panel("panel", cnf);
        panel.setHeader("Arrange a fitting");
        panel.setBody(panel_content.innerHTML);
        panel.render(document.body);
        panel_content.innerHTML = "";
        var as = document.getElementsByTagName('a');
        for (var i = 0; i < as.length; i++) {
            var obj = new YAHOO.util.Element(as[i]);
            // Binding to arrange a fitting link
            if (obj.get('rel') == "book") {
                obj.on('click', function (e) {
                    YAHOO.util.Event.preventDefault(e);
                    panel.show();
                });
            }
        }
        //panel.show();
    }
    ///////////////////////////////////////////////////////////////////////////////////////
var mnu = function () {
        this.inst = new YAHOO.util.Element("main-menu");
        this.lis = this.inst.getElementsByTagName('li');
        for (var i = 0; i < this.lis.length; i++) {
            var li = new YAHOO.util.Element(this.lis[i]);
            if (this.lis[i].getElementsByTagName('ul').length > 0) li.addClass('has-children');
            var a = new YAHOO.util.Element(this.lis[i].getElementsByTagName('a')[0]);
            a.set("title", "");
        }
    }

function validate_contactForm() {
    var send = true;
    this.inst = new YAHOO.util.Element("contact");
    var inputs = this.inst.getElementsByTagName('input');
    for (var i = 0; i < inputs.length; i++) {
        var input = new YAHOO.util.Element(inputs[i]);
        if (input.get('element').value == "") {
            input.addClass('error');
            send = false;
            input.on('focus', function () {
                this.removeClass('error');
            });
        }
        if (input.get('name') == "email") {
            if (!echeck(input.get('element').value)) {
                send = false;
                input.addClass('error');
                send = false;
                input.on('focus', function () {
                    this.removeClass('error');
                });
            }
        }
    }
/*

        var note = new YAHOO.util.Element("");

        if(note.get('element').value == "")
        {

            note.addClass('error');

            send = false;

            note.on('focus', function(){


                this.removeClass('error');


            });



        }

        */
    return send;
}
var contact = function () {}
var q = function () {
        this.qs = [
        // 0
        //{ cls: "evening-standard", text: '"An absolute essential in every man\'s wardrobe". <em>Evening Standard</em>' },
        {
            cls: "evening-standard",
            text: '"An absolute essential in every man\'s wardrobe". <img src="/assets/images/update250610/eveningStandard.jpg">'
        },
        // 1
        {
            cls: "the-guardian",
            text: '"Meticulous craftsmanship". <img src="/assets/images/update250610/theguardian.jpg">'
        },
        // 2
        {
            cls: "daily-mirror",
            text: '"Elegant suits for every occasion and price range". <img src="/assets/images/update250610/themirror.jpg">'
        },
        // 3
        {
            cls: "the-wharf",
            text: '"Love to own a hand-tailored suit but don\'t have pockets deep enough for Savile Row? King & Allen could be just for you". <img src="/assets/images/update250610/thewharf.jpg">'
        },
        // 4
        {
            cls: "the-times",
            text: '"King & Allen\'s tailored suits are fantastic!". <img src="/assets/images/update250610/thetime.jpg">'
        },
        // 5
        {
            cls: "daily-mail",
            text: '"The best buy for you with prices to suit all pockets". <img src="/assets/images/update250610/dailymail.jpg">'
        },
        // 6
        {
            cls: "business-citizen",
            text: '"King & Allen are growing at a phenomenal rate". <em>The Business Citizen</em>'
        },
        // 7
        {
            cls: "you-and-your-wedding",
            text: '"I recommend you try King & Allen... best of all is the price tag, which starts at &#163;249 - very reasonable for a perfect bespoke fit".<br><em>You and Your Wedding</em>'
        },
        // 8
        {
            cls: "beautiful-brides",
            text: '"King & Allen make suits from &#163;249, so they are quite affordable and of course you can wear them again and again". <em>Beautiful Brides</em>'
        },
        // 9
        {
            cls: "london-paper",
            text: '"Wedding Essentials - a bespoke suit from King & Allen". <em>The London Paper</em>'
        }];
        this.div = document.getElementById('q');
        //alert("!");
        if (allocated_q != undefined) {
            this.div.innerHTML = this.qs[allocated_q].text;
        } else {
            this.div.innerHTML = this.qs[Math.floor(Math.random() * this.qs.length)].text;
        }
    }
    // Generic output function for listing by dates.

function outputListingByDate(ob) {
    var current_month = 24;
    var output = document.createElement('ul');
    for (var i = 0; i < ob.fittingdays.length; i++) {
        var obj = ob.fittingdays[i];
        var now = new Date();
        obj.dt_obj = get_dateObject(obj.dt);
        if (obj.dt_obj >= now) {
            output.appendChild(list_dates(obj));
        }
    }
    return output;
}
// Added for listing london only dates on booking page.

function lon(ob) {
    var div = document.getElementById('lon');
    div.innerHTML = "";
    div.appendChild(outputListingByDate(ob));
}

function nat(ob) {
    var div = document.getElementById('nat');
    div.innerHTML = "";
    div.appendChild(outputListingByDate(ob));
}

function tai(ob) {
    var div = document.getElementById('tai');
    div.innerHTML = "";
    div.appendChild(outputListingByDate(ob));
}

function list_dates(obj) {
    var regex = new RegExp("st$", "i");
    var li = document.createElement('li');
    var innerul = document.createElement('ul');
    var leftli = document.createElement('li');
    var rightli = document.createElement('li');
    var anchor = document.createElement('a');
    leftli.innerHTML = obj.dt_obj.getDate() + fuzzy_day(obj.dt_obj.getDate()) + " " + mons[obj.dt_obj.getMonth()];
    leftli.setAttribute('style', 'float:left;width:100px;font-size: 12px;');
    anchor.setAttribute('href', '/book/' + obj.venue.toLowerCase().replace(/ /g, "-").replace(regex, 'street'));
    anchor.innerHTML = obj.venue;
    rightli.appendChild(anchor);
    innerul.appendChild(leftli);
    innerul.appendChild(rightli);
    li.appendChild(innerul);
    return li;
}
