/* WeddingDates.ie widget code 
* @author: Bartosz Ptaszynski
* @email: bart@yazzgoth.com
* (c) 2009 WeddingDates.ie 
*/

(function($){
    var options = {};
    function showModal(obj, title, msg, icon){
        obj.append("<div id='wdModal' class='wd-modal' title='"+title+"'><p><span class='ui-icon "+icon+"' style='float:left; margin:0 7px 50px 0;'></span></p><p>"+msg+"</p></div>")
        $('#wdModal').dialog({
             bgiframe:true, modal:true, 
             buttons: {
                 Ok: function(){ 
                     $(this).dialog('close');
                     $(this).remove();
                 }
             }
        }); 
    };
    

    function checkLength(o,n,min,max) {

        if ( o.val().length > max || o.val().length < min ) {
            o.addClass('ui-state-error');
            o.effect('highlight').select();
            return false;
        } else {
            o.removeClass('ui-state-error');
            return true;
        }

    };

    function checkRegexp(o,regexp,n) {

        if ( !( regexp.test( o.val() ) ) ) {
            o.addClass('ui-state-error');
            o.effect('highlight').select();
            return false;
        } else {
            o.removeClass('ui-state-error');
            return true;
        }

    };
    
    function sendEnquiry(){
        var form = $("#weddingdates_enquiry");
        var name = $("#weddingdates_enquiry [name=name]");
        var email = $("#weddingdates_enquiry [name=email]");
        var phone = $("#weddingdates_enquiry [name=phone]");
        var flexible = $("#weddingdates_enquiry [name=flexible]");
        var address1 = $("#weddingdates_enquiry [name=address1]");
        var additional = $("#weddingdates_enquiry [name=additional]");
        var year = $("#weddingdates_enquiry [name=year]");
        var month = $("#weddingdates_enquiry [name=month]");
        var day = $("#weddingdates_enquiry [name=day]");
        var guests = $("#weddingdates_enquiry [name=guests]");
        /*  if(!checkRegexp(guests, /^\d+$/, "guests")) return; */
        if(!checkLength(name, "name", 2, 64)) return;
        if(!checkRegexp(email, /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i, 'email')) return;
        if(!checkRegexp(phone, /^[\d\-\s]{5,16}$/, "phone")) return;
        /*  if(!checkLength(address1, "address", 4, 128)) return; */
        /* if(!($("#weddingdates_enquiry [value=yes]").attr("checked") || $("#weddingdates_enquiry [value=no]").attr("checked") )) {
            $("#weddingdates_enquiry [for=flexible]").effect("highlight");
            return;
        } */
        var is_flexible = "No";
        if($("#weddingdates_enquiry [value=yes]").attr("checked"))
            is_flexible = "Yes";
        var params = {
            name: escape(name.val()),
            email: escape(email.val()),
            phone: escape(phone.val()),
            flexible: is_flexible,
            address1: escape(address1.val()),
            additional: escape(additional.val()),
            guests: escape(guests.val()),
            year: escape(year.val()),
            month: escape(month.val()),
            day:  escape(day.val()),
            hotel: options.hotel
        };
        $("#weddingdates_pleasewait").dialog('open');
        $.getJSON(options.ENQUIRY, params, function(data, status){
            $("#weddingdates_pleasewait").dialog('close');
            $("#weddingdates_enquiry input").each(function(){this.value=""});
            form.dialog('close'); 
            $("#weddingdates_success").dialog('open');
        });
        
    };
    
    function widgetInit(obj){
        var html = "<div id='weddingdates_datepicker'></div>";
        html += "<div id='weddingdates_enquiry' title='Send enquiry'>";
        html += "<p id='validateTips'>We have provisional availability for that date at present. <br/><br/>Please fill out the enquiry form to request a call back from our team in order to discuss your requirements and to arrange a meeting to discuss availability further.</p>";
        html += "<form class='weddingdates_enquiry_form'>";
        html += "<fieldset>";
        html += "<input style='float: left; width:14px;' type='checkbox' name='flexible' value='yes' checked='yes'/><label style='display:block;' for='flexible'>&nbsp;&nbsp;Yes, My Date is Flexible.</label>";
        html += "<p style='margin:1px'>&nbsp;</p>";
        html += "<label for='name'>Your Name: <span style='color: #FF1122'>*</span></label><input name='name' type='text'/>";
        html += "<label for='email'>Your Email Address: <span style='color: #FF1122'>*</span></label><input name='email' type='text'/>";
        html += "<label for='phone'>Your Telephone Number: <span style='color: #FF1122'>*</span></label><input type='text' name='phone'/><br/>";
        html += "<label for='address1' style='display:none'>Your Address:</label><textarea name='address1' style='display:none'></textarea>";
        html += "<label for='guests' style='display:none'>Approximate Number of Guests:</label><input type='text' name='guests' style='display:none' />"
        html += "<label for='additional'>Anything else?</label><textarea name='additional'></textarea>";
        html += "<input type='hidden' name='year'/><input type='hidden' name='month'/> <input type='hidden' name='day'/>";
        html += "</fieldset>";
        html += "</form>";
        html += "</div>";
        html += "<div id='weddingdates_error' title='Error'>";
        html += "<p>An error occured. Please try again later.</p>";
        html += "</div>";
        html += "<div id='weddingdates_success' title='Enquiry sent'>";
        html += "<p>Thank you for your enquiry!</p>";
        html += "<p>A venue representative will be in touch with you within next 48 hours.</p>";
        html += "</div>";
        html += "<div id='weddingdates_notavailable' title='Sorry...'>";
        html += "</div>";
        html += "<div id='weddingdates_pleasewait' title='Please wait...'>";
        html += "<p>Please wait</p><p style='text-align: center;'><img src='http://static.weddingdates.ie/img/loading.gif' align='center'/></p>";
        html += "</div>";
        obj.html(html);
         
        $("#weddingdates_enquiry").dialog({
            bgiframe: options.bgiframe,
            autoOpen: false,
            modal: options.modal,
            buttons: {
                'Send Enquiry': sendEnquiry
            },
            close: function() {
                //allFields.val('').removeClass('ui-state-error');
            }
        }).parent().wrap("<div id='wdates' />");
        $("#weddingdates_error").dialog({autoOpen: false, modal: options.modal, buttons: {Close: function(){ $(this).dialog('close').parent().wrap("<div id='wdates' />"); $("#weddingdates_enquiry").dialog('close'); $("#weddingdates_pleasewait").dialog('close'); }}});  
        $("#weddingdates_notavailable").dialog({autoOpen: false, modal: options.modal, buttons: {Close: function(){ $(this).dialog('close');}}}).parent().wrap("<div id='wdates' />");
        $("#weddingdates_success").dialog({autoOpen: false, buttons: {Close: function(){ $(this).dialog('close');}}}).parent().wrap("<div id='wdates' />");
        $("#weddingdates_error").bind("ajaxError", function(){ $(this).dialog('open'); }).parent().wrap("<div id='wdates' />");
        $("#weddingdates_pleasewait").dialog({autoOpen: false,modal: options.modal}).parent().wrap("<div id='wdates' />");
        
        // $("#weddingdates_error").dialog({autoOpen: false, buttons: {Close: function(){ $(this).dialog('close');}}});  
        // $("#weddingdates_notavailable").dialog({autoOpen: false, buttons: {Close: function(){ $(this).dialog('close');}}});  
        // $("#weddingdates_success").dialog({autoOpen: false, buttons: {Close: function(){ $(this).dialog('close');}}});  
        // $("#weddingdates_error").bind("ajaxError", function(){ $(this).dialog('open'); });
        // $("#weddingdates_pleasewait").dialog({autoOpen: false});
        //$("#weddingdates_progressbar").progressbar({value: 100})
        
    };
    
    function handleDateSelect(dateText){
        $("#weddingdates_pleasewait").dialog('open');
        var date = new Date(dateText);
        var box = $("#weddingdates_notavailable");
        var today = new Date();
        var toofar = new Date("1/1/"+(today.getFullYear()+3));
        if (date<=today || date>toofar){
            box.dialog('open');
            box.html("");
            box.append("<p>Unfortunately, we do not have availability on that date.</p>");
            return;
        }
        $.getJSON(options.DATECHECK, 
            {
                hotel: options.hotel, 
                day: date.getDate(), 
                month: date.getMonth()+1, 
                year: date.getFullYear()
            }, 
            function(data, status){
                $("#weddingdates_pleasewait").dialog('close');
                if(data['available']==true){
                    $('#weddingdates_enquiry [name=year]').each(function(){ this.value = date.getFullYear()});
                    $('#weddingdates_enquiry [name=month]').each(function(){ this.value = date.getMonth()+1});
                    $('#weddingdates_enquiry [name=day]').each(function(){ this.value = date.getDate() });
                    $("#weddingdates_enquiry").dialog('open');
                }
                else if(data['available']==false){
                    box.dialog('open');
                    var i=0;
                    box.html("");
                    box.append("<p>Unfortunately, we do not have availability on that date. See below for availability near your chosen date</p>");
                    
                    // START OLD TEMP
                    var before = $("<div style='float:left'></div>");
                    box.append(before);
                    before.append("<strong>Before:</strong><br/>");
                    for(i=0;i<data['before'].length;i++){
                        var day = data['before'][i];
                        var dte = new Date(day);
                        var link = $("<a href='javascript:void(0)'>"+dte.toDateString()+"</a><br/>");
                        link.click(function(){
                            $('#weddingdates_enquiry [name=year]').each(function(){ this.value = dte.getFullYear()});
                            $('#weddingdates_enquiry [name=month]').each(function(){ this.value = dte.getMonth()+1});
                            $('#weddingdates_enquiry [name=day]').each(function(){ this.value = dte.getDate() });
                            $("#weddingdates_enquiry").dialog('open');
                            box.dialog('close');
                        });
                        before.append(link);
                    }
                    var after = $("<div style='float:right'></div>");
                    box.append(after);
                    after.append("<strong>After:</strong><br/>");
                    for(i=0;i<data['after'].length;i++){
                        var day = data['after'][i];
                        var dte = new Date(day);
                        var link = $("<a href='javascript:void(0)'>"+dte.toDateString()+"</a><br/>");
                        link.click(function(){
                            $('#weddingdates_enquiry [name=year]').each(function(){ this.value = dte.getFullYear()});
                            $('#weddingdates_enquiry [name=month]').each(function(){ this.value = dte.getMonth()+1});
                            $('#weddingdates_enquiry [name=day]').each(function(){ this.value = dte.getDate() });
                            $("#weddingdates_enquiry").dialog('open');
                            box.dialog('close');
                        });
                        after.append(link);
                    }
                    // END OLD TEMP
                    
                    // START NEW
                    // var chooseDate = function(stuff){
                    //                         var chosenDate = stuff.data;
                    //                         $('#weddingdates_enquiry [name=year]').each(function(){ this.value = chosenDate.getFullYear()});
                    //                         $('#weddingdates_enquiry [name=month]').each(function(){ this.value = chosenDate.getMonth()+1});
                    //                         $('#weddingdates_enquiry [name=day]').each(function(){ this.value = chosenDate.getDate() });
                    //                         $('#weddingdates_enquiry [id=chosen_date]').each(function(){ this.value = days[chosenDate.getDay()] +" "+ chosenDate.getDate()+" "+month[chosenDate.getMonth()]+" "+chosenDate.getFullYear() });
                    //                         $("#weddingdates_enquiry").dialog('open');
                    //                         box.dialog('close');
                    //                     };
                    //                     var before = $("<div style='float:left'></div>");
                    //                     box.append(before);
                    //                     before.append("<strong>Before:</strong><br/>");
                    //                     for(i=0;i<data['before'].length;i++){
                    //                         var day = data['before'][i];
                    //                         var dte = new Date(day);
                    //                      var link = $("<a href='javascript:void(0)';>"+dte.toDateString()+"</a><br/>");
                    //                      link.click(dte, chooseDate);
                    //                         before.append(link);
                    //                     }
                    //                     var after = $("<div style='float:right'></div>");
                    //                     box.append(after);
                    //                     after.append("<strong>After:</strong><br/>");
                    //                     for(i=0;i<data['after'].length;i++){
                    //                         var day = data['after'][i];
                    //                         var dte = new Date(day);
                    //                      var link = $("<a href='javascript:void(0);'>"+dte.toDateString()+"</a><br/>");
                    //                         link.click(dte, chooseDate);
                    //                         after.append(link);
                    //                     }
                    // END NEW
                    
                    
                }
                else{
                    $("#weddingdates_error").dialog('open');
                }
            }
        );
    };
    
    $.fn.extend({
        weddingdates: function(opt){
            
            var defaults = {
                ENQUIRY: "http://www.weddingdates.ie/widget/enquiry/?callback=?",
                DATECHECK: "http://www.weddingdates.ie/widget/check/?callback=?",
                modal: true,
                bgiframe: true,
                hotel: null
            };

            options = $.extend(defaults, opt); 
            
            //var head= document.getElementsByTagName('head')[0];
            //var theme = document.createElement('link');
            //theme.type = 'text/css';
            //theme.href = options.theme;
            //theme.rel = "stylesheet";
            //head.appendChild(theme);
            //var widgetCSS = document.createElement('link');
            //widgetCSS.type = 'text/css';
            //widgetCSS.href = "http://weddingdates.ie/static/css/widget.css";
            //widgetCSS.rel = "stylesheet";
            //head.appendChild(widgetCSS);
            
            return this.each(function(){
                var obj = $(this);
                widgetInit(obj);
                var now = new Date();
                var month = now.getMonth() + 2;
                $("#weddingdates_datepicker").datepicker({
                    defaultDate: new Date(month+"/01/"+(now.getFullYear())),
                    changeMonth: true, 
                    changeYear: true, 
                    dateFormat: 'mm/dd/yy', 
                    firstDay: 1,
                    minDate: '1d',
                    maxDate: new Date("12/31/"+(now.getFullYear()+2)),
                    yearRange: now.getFullYear()+":"+(now.getFullYear()+2),
                    onSelect: handleDateSelect
                 });
            });
        }
    });
})(jQuery)
