/*
    rxa
    YUI Calendar

    In order for thsi js to work, you need to include the following (in the template)

    <head>
        <!-- Have to put all these on the top so that It wont overwrite all the other styles -->
        <!-- YUI Calendar -->
        <link rel="stylesheet" type="text/css" href="../js/yui/build/fonts/fonts-min.css" />
        <link rel="stylesheet" type="text/css" href="../js/yui/build/calendar/assets/skins/sam/calendar.css" />
        <script type="text/javascript" src="../js/yui/build/yahoo-dom-event/yahoo-dom-event.js"></script>
        <script type="text/javascript" src="../js/yui/build/calendar/calendar.js"></script>
        <script type="text/javascript" src="../js/yui/build/yahoo/yahoo.js" ></script>
        <script type="text/javascript" src="../js/yui/build/event/event.js" ></script>
    </head>
    <body onload="yui-skin-sam">

        <!-- Calendar div -->
        <div id="calendar"></div>
        <!-- End of Calendar div -->

        <!-- Yui Calendar -->
        <script type="text/javascript" src="../js/yuiCalendar.js" ></script>
        <script type="text/javascript">
            com.csatp.yuiCalendar();
        </script>
    </body>

    Plus you will also need to create a listener for every field id that you want the calendar to pop up on.
    Look at departdate and return date for example.

 */


com.csatp.yuiCalendar = function ( )
{
    var field = "";     //textField of the calendar    THIS HAS TO BE GLOBAL
    var over_cal = false;

    YAHOO.util.Event.addListener("departdate", "focus", displayCalendar, getDepartureDate() );
    YAHOO.util.Event.addListener("returndate", "focus", displayCalendar, getReturnDate() );
    YAHOO.util.Event.addListener("appdate", "focus", displayCalendar, getAppDate() );
    YAHOO.util.Event.addListener("initdate", "focus", displayCalendar, getInitDate() );
    YAHOO.util.Event.addListener("finalpaymentdate", "focus", displayCalendar, getFinalPaymentDate() );
    YAHOO.util.Event.addListener("cdwStartDate", "focus", displayCalendar, getCdwStartDate() );
    YAHOO.util.Event.addListener("cdwEndDate", "focus", displayCalendar, getCdwEndDate() );

    YAHOO.util.Event.addListener("remind1date", "focus", displayCalendar, getRemind1date() );
    YAHOO.util.Event.addListener("remind2date", "focus", displayCalendar, getRemind2date() );
    YAHOO.util.Event.addListener("remind3date", "focus", displayCalendar, getRemind3date() );
    YAHOO.util.Event.addListener("tsdeparturedate", "focus", displayCalendar, getTsdeparturedate() );
    YAHOO.util.Event.addListener("tsreturndate", "focus", displayCalendar, getTsreturndate() );
    YAHOO.util.Event.addListener("addondate", "focus", displayCalendar, getAddondate() );
    YAHOO.util.Event.addListener("departdateclaim", "focus", displayCalendar, getDepartdateclaim() );
    YAHOO.util.Event.addListener("returndateclaim", "focus", displayCalendar, getReturndateclaim() );


    YAHOO.util.Event.addListener("departdate", "blur", hideCal);
    YAHOO.util.Event.addListener("returndate", "blur", hideCal);
    YAHOO.util.Event.addListener("appdate", "blur", hideCal);
    YAHOO.util.Event.addListener("initdate", "blur", hideCal);
    YAHOO.util.Event.addListener("finalpaymentdate", "blur", hideCal);
    YAHOO.util.Event.addListener("cdwStartDate", "blur", hideCal);
    YAHOO.util.Event.addListener("cdwEndDate", "blur", hideCal);

    YAHOO.util.Event.addListener("remind1date", "blur", hideCal);
    YAHOO.util.Event.addListener("remind2date", "blur", hideCal);
    YAHOO.util.Event.addListener("remind3date", "blur", hideCal);
    YAHOO.util.Event.addListener("tsdeparturedate", "blur", hideCal);
    YAHOO.util.Event.addListener("tsreturndate", "blur", hideCal);
    YAHOO.util.Event.addListener("addondate", "blur", hideCal);
    YAHOO.util.Event.addListener("departdateclaim", "blur", hideCal);
    YAHOO.util.Event.addListener("returndateclaim", "blur", hideCal);
    

    function setupListeners() {
        YAHOO.util.Event.addListener("calendar", "mouseover", overCal);
        YAHOO.util.Event.addListener("calendar", "mouseout", outCal);
    }

    function hideCal() {
        if (!over_cal) {
            YAHOO.util.Dom.setStyle('calendar', 'display', 'none');
        }
    }

    function overCal() {
        over_cal = true;
    }

    function outCal() {
        over_cal = false;
    }

    function getDepartureDate()
    {
        return {    "field" : "departdate"  };
    }

    function getReturnDate()
    {
        return {    "field" : "returndate"  };
    }

    function getAppDate()
    {
        return {    "field" : "appdate"  };
    }

    function getInitDate()
    {
        return {    "field" : "initdate"  };
    }

    function getFinalPaymentDate()
    {
        return {    "field" : "finalpaymentdate"  };
    }

    function getCdwStartDate()
    {
        return {    "field" : "cdwStartDate"  };
    }

    function getCdwEndDate()
    {
        return {    "field" : "cdwEndDate"  };
    }

    function getRemind1date()
    {
        return {    "field" : "remind1date"  };
    }

    function getRemind2date()
    {
        return {    "field" : "remind2date"  };
    }

    function getRemind3date()
    {
        return {    "field" : "remind3date"  };
    }

    function getTsdeparturedate()
    {
        return {    "field" : "tsdeparturedate"  };
    }

    function getTsreturndate()
    {
        return {    "field" : "tsreturndate"  };
    }

    function getAddondate()
    {
        return {    "field" : "addondate"  };
    }

    function getDepartdateclaim()
    {
        return {    "field" : "departdateclaim"  };
    }

    function getReturndateclaim()
    {
        return {    "field" : "returndateclaim"  };
    }



    //handles the select event, when a date is selected
    function handleSelect(type,args,obj) {

                var dates = args[0];
                var date = dates[0];
                var year = date[0], month = date[1], day = date[2];

                var selMonth = document.getElementById("selMonth");
                var selDay = document.getElementById("selDay");
                var selYear = document.getElementById("selYear");

                document.getElementById(field).value = month + "/" + day + "/" + year;
                YAHOO.example.calendar.cal1.hide();

                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;
                    }
                }

            }

    function displayCalendar(type, args)
    {
        field = args.field;					//textField of the calendar
        var defaultPageDate = ""; 		//the month displayed
        var defaultSelectedDate = "";	//the date that is selected
        var defaultMinDate = "";		//the earliest day that we can pick
        var defaultMaxDate = "";		//the latest day that we can pick
        var hasDefaultMinDate = false;  //true only when the date has default min date
        var hasDefaultMaxDate = false;  //true only when the date has default max date
        var departDate = "";
        var returnDate = "";
        var cdwStartDate = "";

        var newX = YAHOO.util.Dom.getX(field);
        var newY = YAHOO.util.Dom.getY(field) + 20;


        if ( ( document.getElementById('departdate') != null ) &&
             ( document.getElementById( 'departdate' ).value != 'mm/dd/yy' ) &&
             ( document.getElementById( 'departdate' ).value != '' ) )
        {
            departDate = document.getElementById( 'departdate' ).value;
            //WEB-1013 if the ending year from departDate is in the form of 01/01/08
            if ( !checkdateformat( departDate) )
            {
                var dateArray = departDate.split(/\//g);
                var dd = dateArray[0];
                var mm = dateArray[1];
                var yy = dateArray[2];

                departDate = dd + "\/" + mm + "\/" + "20" + yy;     //appending "20" for the year
            }
        }

        if ( ( document.getElementById('returndate') != null ) &&
             ( document.getElementById( 'returndate' ).value != 'mm/dd/yy' ) &&
             ( document.getElementById( 'returndate' ).value != '' ) )
        {
            returnDate = document.getElementById( 'returndate' ).value;
            if ( !checkdateformat( returnDate) )
            {
                dateArray = returnDate.split(/\//g);
                dd = dateArray[0];
                mm = dateArray[1];
                yy = dateArray[2];

                returnDate = dd + "\/" + mm + "\/" + "20" + yy;     //appending "20" for the year
            }
        }

        if ( ( document.getElementById('cdwStartDate') != null ) &&
             ( document.getElementById( 'cdwStartDate' ).value != 'mm/dd/yy' ) &&
             ( document.getElementById( 'cdwStartDate' ).value != '' ) )
        {
            cdwStartDate = document.getElementById( 'cdwStartDate' ).value;
            if ( !checkdateformat( cdwStartDate) )
            {
                dateArray = cdwStartDate.split(/\//g);
                dd = dateArray[0];
                mm = dateArray[1];
                yy = dateArray[2];

                cdwStartDate = dd + "\/" + mm + "\/" + "20" + yy;     //appending "20" for the year
            }
        }

        //calculating the beginning date for returndate
        //selects the date
        if (( departDate != "" ) && (field == 'returndate')) {
            defaultMinDate = new Date( departDate );
            defaultSelectedDate = defaultMinDate;
            defaultPageDate = ( defaultSelectedDate.getMonth()+1 ) + "/" + defaultSelectedDate.getFullYear();
            hasDefaultMinDate=true;
        }
        else if (( departDate != "" ) && ( field == 'cdwStartDate' )) {
            defaultMinDate = new Date( departDate );
            defaultSelectedDate = defaultMinDate;
            defaultPageDate = ( defaultSelectedDate.getMonth()+1 ) + "/" + defaultSelectedDate.getFullYear();
            if ( returnDate != "" )
            {
                hasDefaultMaxDate = true;
                defaultMaxDate = new Date( returnDate );
            }
        }
        else if ((returnDate != "") && ( field == 'cdwEndDate' )) {
            hasDefaultMaxDate = true;
            defaultMaxDate = new Date( returnDate );
            var defaultMinDateSeed;
            if ( cdwStartDate != "" )
            {
                defaultMinDateSeed = cdwStartDate;
            }
            else if ( departDate != "" )
            {
                defaultMinDateSeed = departDate;
            }
            else {
                defaultMinDateSeed = new Date();
            }

            if ( !checkdateformat( defaultMinDateSeed ) )
            {
                dateArray = defaultMinDateSeed.split(/\//g);
                dd = dateArray[0];
                mm = dateArray[1];
                yy = dateArray[2];

                defaultMinDateSeed = dd + "\/" + mm + "\/" + "20" + yy;     //appending "20" for the year
            }

            defaultMinDate = new Date( defaultMinDateSeed );
            defaultSelectedDate = defaultMinDate;
            defaultPageDate = ( defaultSelectedDate.getMonth()+1 ) + "/" + defaultSelectedDate.getFullYear();
        }
        else if ( field == 'finalpaymentdate' ){
            hasDefaultMinDate = false;
        }

        else if ( field == 'initdate' ){
            hasDefaultMinDate = false;
        }

       else if ( field == 'returndateclaim' ){
            hasDefaultMinDate = false;
        }

        else if ( field == 'departdateclaim' ){
            hasDefaultMinDate = false;
        }


        else
        {
            hasDefaultMinDate = true;
            defaultMinDate = new Date();
            defaultSelectedDate = defaultMinDate;
            defaultPageDate = ( defaultSelectedDate.getMonth()+1 ) + "/" + defaultSelectedDate.getFullYear();
        }

        YAHOO.util.Dom.setXY("calendar", [newX, newY]);
        YAHOO.namespace("example.calendar");

        //removing the div
        var calendarElement = document.getElementById("calendar");
        calendarElement.parentNode.removeChild( calendarElement );

        //creating a new div
        var newCalendar = document.createElement("div");
        document.body.appendChild( newCalendar );
        newCalendar.setAttribute("id", "calendar");

        if ( hasDefaultMaxDate ) {
            YAHOO.example.calendar.cal1 = new YAHOO.widget.Calendar("calendar", {iframe:true,
                                                                                 selected:defaultSelectedDate,
                                                                                 pagedate:defaultPageDate,
                                                                                 mindate:defaultMinDate,
                                                                                 maxdate:defaultMaxDate } );
        }
        else if ( hasDefaultMinDate ){
            YAHOO.example.calendar.cal1 = new YAHOO.widget.Calendar("calendar", {iframe:true,
                                                                                 selected:defaultSelectedDate,
                                                                                 pagedate:defaultPageDate,
                                                                                 mindate:defaultMinDate } );
        }
        else {
            YAHOO.example.calendar.cal1 = new YAHOO.widget.Calendar("calendar", {iframe:true,
                                                                                 selected:defaultSelectedDate,
                                                                                 pagedate:defaultPageDate} );
        }
        //have to be called before the render()
        YAHOO.example.calendar.cal1.renderEvent.subscribe(setupListeners);

        YAHOO.example.calendar.cal1.render();
        YAHOO.util.Dom.setXY("calendar", [newX, newY]); //hack to reposition the calendar to the right place
        YAHOO.example.calendar.cal1.show();

        YAHOO.example.calendar.cal1.selectEvent.subscribe(handleSelect);


    }

    function checkdateformat(userinput){
        var dateformat = /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{4}$/;
        return dateformat.test(userinput); //returns true or false depending on userinput
    }
};
