﻿


// ---------------------------------------------------------
// AJAX EXCEPTION HANDLING
//----------------------------------------------------------

    function GetErrorMsg(error) {
        //get type
        var ErrorType = error.get_exceptionType()

        var Msg = "";
        switch (ErrorType) {
//            case "System.ArgumentNullException":
//                Msg = error.get_message();
//                break;

//            case "System.ArgumentOutOfRangeException":
//                Msg = error.get_message();
//                break;

//            case "System.UnauthorizedAccessException":
//                Msg = error.get_message();
//                break;

            case "INAW.Core.Exceptions.EntityNotValidException":
                Msg = error.get_message();
                break;

            case "INAW.Core.Exceptions.EntityNotFoundException":
                Msg = error.get_message();
                break;

            default:
                Msg =  "There was an error processing your request.";
                break;
        
        }
        return Msg;
    }

// ---------------------------------------------------------
// AJAX ERROR MSG AND PROGRESS BARS
//----------------------------------------------------------


    //Show progress bar
    function ShowAjaxProgressBar(progressDiv, divToMatch) {
        //get progress div
        var Progress = $get(progressDiv);

        //set height  
        Progress.style.height = $get(divToMatch).offsetHeight + "px";
        
        //display
        ShowElement(progressDiv);
    }


    //Show error
    function ShowAjaxErrorMessage(errorDiv, message, divToHide) {
        //get error div
        var Msg = $get(errorDiv);

        //set text and display
        ShowElement(errorDiv);
        Msg.innerHTML = message;

        //hide progress
        HideElement(divToHide);
    }


    //date
    function FormatDateTime(dateTime) {
        return dateTime.format("M/d/yy h:mm"); 
    }


    function ClearTableRows(tableName) {
        //get table
        var TableToClear = $get(tableName);
        
        var TotalRows = TableToClear.rows.length;
        for (i=0; i < (TotalRows -1); i++){
            //delete
            TableToClear.deleteRow(TableToClear.rows.length-1);
        }
    }


// ---------------------------------------------------------
// DATE AND TIME FUNCTIONS
//----------------------------------------------------------


    function SplitDateTriplet(triplet, delim) {
        //split date triplet - ie "YYYY,MM,DD"
        
        var DateElements = new Array();
        DateElements = triplet.toString().split(delim);

        //build date
        return DateElements[1] + "/" + DateElements[2] + "/" + DateElements[0];
    }

    function SerializeDateForJson(dateString, locationOffset) {
        //put date into UTC time of  location

        var DateNow = new Date(dateString);

        //time zone offset in minutes (this computer's time zone on the date)
        var TimeZoneMinutes = DateNow.getTimezoneOffset();
        
        //location offset in minutes (location's time zone)
        var LocationMinutes = locationOffset * 60;

        //calc new date (time user entered in location transferred to utc)
        var OffsetDate = Date.parse(dateString) - ((LocationMinutes + TimeZoneMinutes) * 60000);

        //escape and return
        return "\/Date(" + OffsetDate + ")\/";
    }

    function GetJsonDateRangeArray(selectedDates, dayStart, locationOffset) {
        var DateList = new Array();

        for (var i = 0; i < selectedDates.length; i++) {

            //split date triplet in array
            var DateElements = new Array();
            DateElements = selectedDates[i].toString().split(",");   
                 
            //get dates in utc for this LOCATION (month is 0-based)
            var ThisDate = new Date(DateElements[0], DateElements[1] - 1, DateElements[2], dayStart);
            var NextDate = new Date(DateElements[0], DateElements[1] - 1, DateElements[2], dayStart);
            NextDate.setDate(NextDate.getDate() + 1);
            NextDate.setSeconds(NextDate.getSeconds()-1);            

            //create to date range
            var DateRange = new INAW.Core.DTOs.DateRange;
            DateRange.StartDate = SerializeDateForJson(ThisDate.toLocaleString(), locationOffset);
            DateRange.EndDate = SerializeDateForJson(NextDate.toLocaleString(), locationOffset);
            
            //add to list
            DateList[i] = DateRange;
        }

        return DateList;
    }

    function SerializeTimeForJson(timeString) {
        return "PT" + timeString.getHours() + "H" + timeString.getMinutes() + "M"; // example:  PT17H23M
    }

    function DeserializeTimeFromJson(timeString) 
    {
        // example:  PT17H23M midnight returns different: PT32M
        
        var initPos = 2; //for "PT" prefix
        
        //get hours
        var hours = 0;
        var hourPos = timeString.indexOf("H");
        if (hourPos > -1){
             hours = timeString.substring(initPos, hourPos);
        }
        
        //get minutes
        var minPos = timeString.indexOf("M");
        var minutes = 0;
        if (minPos > -1) {
            if (hourPos > -1) 
            {
                minutes = timeString.substring(hourPos + 1, minPos);
            }
            else
            { 
                minutes = timeString.substring(initPos, minPos);
            }
        }
        
        //create time
        var finishedTime = new Date();
        finishedTime.setHours(hours);
        finishedTime.setMinutes(minutes);
        
        //return time
        return finishedTime;
    }



    //    function GetJsonDateArray(selectedDates) {
    //        var DateList = new Array();
    //        
    //        for (var i = 0; i < selectedDates.length; i++) {
    //            //get date
    //            var ThisDate = SplitDateTriplet(selectedDates[i], ",");

    //            //convert and add date
    //            DateList[i] = SerializeDateForJson(ThisDate);
    //        }

    //        return DateList;
    //    }

// ---------------------------------------------------------
// DISCOUNT FORMATTING
//----------------------------------------------------------

    function GetDiscountHtml(headline, dateAndTime) {
        var DiscountHtml = "<h5>" + headline + "</h5>";
        DiscountHtml = DiscountHtml + dateAndTime;

        return DiscountHtml;
    }




//// ---------------------------------------------------------
//// FORMATTING
////----------------------------------------------------------

    function FormatCurrency(amount) {
        return "$" + amount.toFixed(2);
    }

    function FormatDateForLocal(datetoFormat) {

        //get date
        var Month = datetoFormat.getMonth();
        Month++;
        var DatePart = Month + "/" + datetoFormat.getDate();

        //return date + time
        return DatePart;
    }

    function FormatDateWithYear(datetoFormat) {

        //get date
        var Month = datetoFormat.getMonth();
        Month++;
        var DatePart = Month + "/" + datetoFormat.getDate() + "/" + datetoFormat.getFullYear(); 

        //return date + time + year
        return DatePart;
    }

    function FormatTimeForLocal(datetoFormat) {

        //get time
        var a_p = "";
        var curr_hour = datetoFormat.getHours();
        if (curr_hour < 12) {
            a_p = "AM";
        }
        else {
            a_p = "PM";
        }
        if (curr_hour == 0) {
            curr_hour = 12;
        }
        if (curr_hour > 12) {
            curr_hour = curr_hour - 12;
        }

        var curr_min = datetoFormat.getMinutes();
        curr_min = curr_min + "";
        if (curr_min.length == 1) {
            curr_min = "0" + curr_min;
        }

        var TimePart = curr_hour + ":" + curr_min + a_p;

        return TimePart;

    }


    function FormatDateAndTimeForLocal(datetoFormat) {
        
        //return date + time
        return  FormatDateForLocal(datetoFormat) + " " + FormatTimeForLocal(datetoFormat);

    }      