YAHOO.namespace('IEDesign');

YAHOO.IEDesign.EasyCalendar = function () {

    var buttonClass = 'calendar_btn',
    buttonPath = '/img/calendar.png';
    var $E, $D;

    var showCalendar = function(){
        //show first - cant set XY on element with display:none
        this.show();

        $D.setStyle(this.oDomContainer, 'opacity', 0);

        //position over cal button
        $D.setXY(this.oDomContainer, this.xy);

        //fade in
        var myAnim = new YAHOO.util.Anim(this.oDomContainer, {
            opacity: {
                to: 1
            }
        }, 0.4, YAHOO.util.Easing.easeOut);
        myAnim.animate();
    }

    var hideCalendar = function(cal){

        //fade out
        var myAnim = new YAHOO.util.Anim(cal.oDomContainer, {
            opacity: {
                to: 0
            }
        }, 0.4, YAHOO.util.Easing.easeOut);

        myAnim.onComplete.subscribe(function(){
            cal.hide();
        });

        myAnim.animate();
    }

    return  {

        init: function () {

            $E = YAHOO.util.Event;
            $D = YAHOO.util.Dom;

            $E.onDOMReady(function(){

                $D.getElementsByClassName('date', 'dd', 'bd', function(el){

                    //show button
                    var btn = document.createElement('img');
                    btn.src = buttonPath;

                    $D.addClass(btn, 'cal-btn');

                    el.appendChild(btn);

                    //add hidden container for calendar pane
                    var body = document.getElementsByTagName('body')[0];
                    var container = document.createElement('div');
                    body.appendChild(container);
                    $D.setStyle(container, 'position', 'absolute');
                    $D.setStyle(container, 'display', 'none');

                    var inputs = el.getElementsByTagName('select');

                    var selYear = inputs[2];
                    var selMonth = inputs[1];
                    var selDay = inputs[0];

                    //instantiate Calendar
                    var id = $D.generateId(container);
                    var cal = new YAHOO.widget.Calendar("cal", id, {
                        title:"Choose a date:",
                        close:true,
                        START_WEEKDAY:1,
                        HIDE_BLANK_WEEKS:true,
                        mindate: "1/1/" + selYear.options[0].value,
                        maxdate: "12/31/" + selYear.options[selYear.options.length-1].value
                    } );

                    var region = $D.getRegion(btn);
                    cal.xy = [region.left, region.top];

                    //on button click, show calendar and position to button
                    $E.on(btn, 'click', showCalendar, cal, true);

                    //date selected on calendar, update select dropdowns
                    function handleSelect(type, args, obj) {

                        var dates = args[0];
                        var date = dates[0];
                        var year = date[0],
                        month = date[1],
                        day = date[2];

                        //first value isnt blank
                        if (1 == selDay.options[0].value) {
                            month--;
                            day--;
                        }

                        selMonth.selectedIndex = month;
                        selDay.selectedIndex = day;

                        for (var y=0;y<selYear.options.length;y++) {
                            if (selYear.options[y].text == year) {
                                selYear.selectedIndex = y;
                                break;
                            }
                        }

                        var formattedDate = day + '/' + month + '/' + year;

                        // dirty hack to get formattedDate field
                        var str = selDay.id + '';
                        str = str.split('-');
                        str = str[0];

                        var formattedBox = $D.get(str);
                        formattedBox.value = formattedDate;


                        hideCalendar(obj);
                    }

                    //date changed on select dropdowns, update calendar
                    function updateCal() {

                        if (selMonth.selectedIndex && selYear.selectedIndex) {

                            var month = parseInt(selMonth.options[selMonth.selectedIndex].value);
                            var day = parseInt(selDay.options[selDay.selectedIndex].value);
                            var year = parseInt(selYear.options[selYear.selectedIndex].value);

                            cal.setMonth(month - 1);
                            cal.setYear(year);

                            if (! isNaN(month) && ! isNaN(day) && ! isNaN(year)) {
                                var date = month + "/" + day + "/" + year;

                                cal.select(date);

                            }

                        }

                        cal.render();
                    }


                    cal.selectEvent.subscribe(handleSelect, cal, true);

                    updateCal();

                    $E.on([selYear, selMonth, selDay], "change", updateCal);

    
                });

            });

        }
    };

}();

YAHOO.IEDesign.AjaxSearch = function(){

    var $E, $D, $C, $U;

    var results;

    function search(form)
    {
        // get form data
         var data = '';

         var fields = new Array(
        	'Location',
            'StartDate',
            'EndDate',
            'age_8',
            'age_9',
            'age_10',
            'age_11',
            'age_12',
            'age_13',
            'age_14',
            'age_15',
            'age_16',
            'age_17',
            'EventName',
            'EventStyle',
            'EventAccommodation',
            'EventAvailability'
         );

         for (var i = 0; i < fields.length; i++)
         {
            if (0 != i)
            {
                data = data + '&';
            }

            // get input
            var element = $D.get(fields[i]);
            var value = '';

            // If we are dealing with a checkbox
            if ('age'==element.name.substring(0,3)) {

                if (element.checked) {
                    value = 1;
                } else {
                    value = 0;
                }

            } else {

                value = element.value;

            }

            // get value
            data = data + fields[i] + '=' + value;

         }

        // display loading screen
        var leftColumn = $D.getElementsByClassName('left_column')[0];

        var callback =
        {
          success: function(o)
          {

              var results = YAHOO.lang.JSON.parse(o.responseText);

              markers = [];

              for (var i in results)
              {
                if (i != 'html')
                {
                    markers.push(results[i]);
                }
              }

              linkMarkerMapping = [];
              
              linkMarkerMapping = YAHOO.IEDesign.map.mapMarkerLinks();
              
              leftColumn.innerHTML = results['html'];

              YAHOO.IEDesign.map.init(markers);
          },
          failure: function(o)
          {
              results = 'Failure';
          },
          argument: ['foo','bar']
        };

        // send request
        var request = $C.asyncRequest('POST', '/venture-holidays/search', callback, data);

        // start loading screen
        leftColumn.innerHTML = '<div class="loading-bar"><img src="/img/ajax-loader.gif" alt="Loading..." width="128" height="15" /></div>';

    }

    function init() {

        $U = YAHOO.util;
        $E = YAHOO.util.Event,
        $D = YAHOO.util.Dom,
        $C = YAHOO.util.Connect,
        $ = YAHOO.util.Dom.get;

        // hi-jack on click action on search button
        $E.on('ajax_search_form', 'submit', function(e)
        {
            // prevent default of submit
            $E.preventDefault(e);

            var form = e.currentTarget;

            search(form); 
        });



    }

    return {
        init: init, search: search
    }

}();

var loader = new YAHOO.util.YUILoader({
    require: ["utilities", "calendar", "animation", "container", "dragdrop"],

    onSuccess: function(o) {

        $U = YAHOO.util;
        $E = YAHOO.util.Event;
        $D = YAHOO.util.Dom;
        $C = YAHOO.util.Connect;
        
        $ = $D.get;

        $E.onDOMReady(function() {

            if($D.getElementsByClassName('date').length > 0) {

                $D.addClass($D.get('StartDate-day'), 'hide');
                $D.addClass($D.get('StartDate-month'), 'hide');
                $D.addClass($D.get('StartDate-year'), 'hide');

                $D.addClass($D.get('EndDate-day'), 'hide');
                $D.addClass($D.get('EndDate-month'), 'hide');
                $D.addClass($D.get('EndDate-year'), 'hide');

                var enhancedStartDate = document.createElement('input');

                enhancedStartDate.id = 'StartDate';
                enhancedStartDate.name = 'StartDate';

                $D.get('StartDate-element').appendChild(enhancedStartDate);

                var enhancedEndDate = document.createElement('input');

                enhancedEndDate.id = 'EndDate';
                enhancedEndDate.name = 'EndDate';

                $D.get('EndDate-element').appendChild(enhancedEndDate);

                YAHOO.IEDesign.EasyCalendar.init();
            }

            if($D.getElementsByClassName('ventures-ajax-search').length > 0){
                YAHOO.IEDesign.AjaxSearch.init();
            }

        });

    }
});

loader.insert();