﻿


// ---------------------------------------------------------
// 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);

    }      

// ---------------------------------------------------------
// AJAX Discount Service Calls
//----------------------------------------------------------
    
    //Discounts AJAX Call
    var CurrentPage;
    function RetrieveDiscounts(currentLocationId, discountDateRanges, pageNumber) {   
        
        //show progress
        ShowAjaxProgressBar("AjaxProgress", "HomePageContainer");
        
        //get array of discount items from checkboxes
        var DiscountItemInputs = $get("DiscountItemsList").getElementsByTagName("input");
        var DiscountItems = new Array();
        var ItemCount = -1;
        for (var i = 0; i < DiscountItemInputs.length; i++) {
            //add to array if box is checked
            if (DiscountItemInputs[i].checked) {
                ItemCount = ItemCount + 1;
                DiscountItems[ItemCount] = DiscountItemInputs[i].value;
            }
        }

        //get array of venuetypes from checkboxes
        var VenueTypeInputs = $get("VenueTypesList").getElementsByTagName("input");
        var VenueTypes = new Array();
        var VenueTypeCount = -1;
        for (var i = 0; i < VenueTypeInputs.length; i++) {
            //add to array if box is checked
            if (VenueTypeInputs[i].checked) {
                VenueTypeCount = VenueTypeCount + 1;
                VenueTypes[VenueTypeCount] = VenueTypeInputs[i].value;
            }
        }

        //keyword
        var VenueKeyword = "";
        var DiscountKeyword = "";
        var SearchValue = $get("FilterSearchBox").value;
        if (SearchValue != $get("FilterSearchBoxText").value) {
            if ($get("FilterSearchByDiscount").checked) {
                DiscountKeyword = SearchValue;
            }else {
                VenueKeyword = SearchValue;
            }
        } 

        //min value
        var MinValue = 0;   //parseInt($get("DiscountMinValue").innerHTML); 

        //validation - default page #
        if (pageNumber == 0 | isNaN(pageNumber)) {
            pageNumber = 1;
        }

        //page size
        var PageSize = $get("PageSizeOptions").value;

        //sort
        var SortOrder = $get("SortByOptions").value;
        

        //set current page (global var)
        CurrentPage = pageNumber;

        //get new locations
        try {
            INAW.AjaxServices.AjaxDiscountService.FindDiscounts(
                                currentLocationId, null, discountDateRanges,
                                DiscountItems, VenueTypes, DiscountKeyword, VenueKeyword, MinValue, pageNumber,
                                PageSize, SortOrder,
                                onFindDiscountsComplete, onFindDiscountsError)
                                ;
        }
        catch (err) {
            ShowAjaxErrorMessage("AjaxErrorMsg", err.description, "AjaxProgress");            
        }
    }
    
    
    //ajax success
    function onFindDiscountsComplete(results, context, methodName) {

        //hide error
        HideElement("AjaxErrorMsg");    
           
        //display results
        ResultsDiv = $get("VenueList").innerHTML = results;

        //set paging
        SetPagingLinks(CurrentPage);

        //hide progress bar
        HideElement("AjaxProgress");        
    }

    //ajax failure
    function onFindDiscountsError(error, context, methodName) {
        //hide progress bar
        HideElement("AjaxProgress");       

        //show error
        ShowAjaxErrorMessage("AjaxErrorMsg", error.get_message(), "AjaxProgress");                    
    }
    

// --------------------------------------------------
// PAGING FUNCTIONS
// --------------------------------------------------

    //get discounts when a link is clicked
    function ShowPage() {
        //get page number
        var PageNumber = GetPageNumberFromLink(this);

        //set scroll to top
        window.scrollTo(0,0);

        //get discounts
        ShowDiscounts(PageNumber);

        //cancel link
        return false;
    }
    

    // change paging links to javascript calls
    function SetPagingLinks(currentPage) {

        //get paging links collection
        var PageLinks = $get("VenuePagination").getElementsByTagName("a");
        
        //loop collection
        for (var i = 0; i < PageLinks.length; i++) {
            
            //set 'onclick' event
            var ThisLink = PageLinks[i];
            ThisLink.onclick = ShowPage;

            //is this link the current one?
            if (GetPageNumberFromLink(ThisLink) == currentPage) {
                //set to current
                ThisLink.className = "current";
            }
            else {
                //clear
                this.className = "";
            }
        }
    }
    
    //retrieve current page # from link
    function GetPageNumberFromLink(link) {

        var PageNumber;
        var Href = link.href;
        
        //get last instance of '?" and '/'
        var LastSlash = Href.lastIndexOf("/");
        var QueryStart = Href.indexOf("?");

        //use query string if there, else use last slash
        if (QueryStart > 0) {
            PageNumber = Number(Href.substring(LastSlash + 1, QueryStart));
        }
        else {
            //use last '/'
            PageNumber = parseInt(Href.substring(LastSlash + 1, Href.length));
        }
        
        //if 0 or a string, switch to 1
        if (PageNumber==0 | isNaN(PageNumber)) {
            PageNumber = 1;
        }

        //return
        return PageNumber;
    }

// --------------------------------------------------
// TELERIK SLIDER FUNCTIONS
// --------------------------------------------------

    //display slider value
    function onMinValue_Change(sender, eventArgs) {
        //display value next to slider
        $get("DiscountMinValue").innerHTML = sender.get_value();
    }

    function onMinValue_SlideEnd(sender, eventArgs) {
        //refresh discounts
        ShowDiscounts();
    }


// --------------------------------------------------
// MAP CALLS
// --------------------------------------------------
    function ShowAddressOnMap(address) {

        //get txt box
        var MapTxtBox = $get("MapSearchBox");

        //show address
        GotoAddress(MapTxtBox.value, 14, false);
    }


// --------------------------------------------------
// LEGEND
// --------------------------------------------------


function ToggleLegend() {
    var PopUpDiv = document.getElementById("LegendPopUp");
    var LegendBtn = document.getElementById("LegendBtn");

    if (PopUpDiv.style.display == "block") {
        //hide
        PopUpDiv.style.display = "none";

        //set image to 'show legend'
        LegendBtn.src = "/images/home/Show-Legend.jpg";
    } else {
        //show
        PopUpDiv.style.display = "block";

        //set image to 'hide legend'
        LegendBtn.src = "/images/home/Hide-Legend.jpg";
        
    }

}







    //        //get array of locations from Neighborhood checkboxes
    //        var NeighborhoodInputs = $get("NeighborhoodChecks").getElementsByTagName("input");
    //        var LocationIds = new Array();
    //        var LocCount = -1;
    //        for (var i = 0; i < NeighborhoodInputs.length; i++) {
    //            //add to array if box is checked
    //            if (NeighborhoodInputs[i].checked) {
    //                LocCount = LocCount + 1;
    //                LocationIds[LocCount] = NeighborhoodInputs[i].value;
    //            }
    //        }        

    //        //validation - default location
    //        if (LocCount == -1) {
    //            LocationIds[0] = currentLocationId;
    //        }

// ---------------------------------------------------------
// MAP HANDLERS
//----------------------------------------------------------

function onMapSearchBtn_Click() {
    ShowAddressOnMap();
}

function onMapSearchBox_KeyPress(e) {
    var key = GetPressedKeyCode(e);
    if (key == 13) {
        ShowAddressOnMap();
        return false;
    }
}

function onMapPageScroll() {
    //get scoll pos
    var ScrollTop = GetPageScrollTop();

    var PositionToScrollTo = 0;
    if (ScrollTop > _InitialMapPos) {
        PositionToScrollTo = ScrollTop + 30;
    } else {
        PositionToScrollTo = _InitialMapPos;
    }

    //scroll map after delay
    setTimeout("ScrollMap(" + PositionToScrollTo + ")", 1000);
}

function ScrollMap(position) {
    MapHolder().style.top = position + "px";
}

// ---------------------------------------------------------
// CALENDAR HANDLERS
//----------------------------------------------------------

function onDateSelected(calendarInstance, renderDay) {
    //get current date
    var SelectedDates = calendarInstance.GetSelectedDates();

    //hide 'this week's discounts'
    HideElement("ThisWeekHeading");

    if (SelectedDates.length == 0) {
        //select date to today(triggers this event again)
        ResetToToday(calendarInstance);
    } else {
        //refresh
        ShowDiscounts();
    }
}


// ---------------------------------------------------------
// SEARCH TEXT BOX HANDLERS
//----------------------------------------------------------


function onFilterSearchBox_KeyPress(e) {
    var key = GetPressedKeyCode(e);
    if (key == 13) {
        ShowDiscounts();
        return false;
    }
}


//function onSearchByAddressClick() {
//    //hide controls
//    HideElement("AddressSearchCtrls");

//    //display new address
//    $get("AddressSearchAddressDisplay").innerHTML = $get("SearchAddressBox").value;
//    $get("AddressSearchZipCodeDisplay").innerHTML = $get("SearchZipCodeBox").value;
//    ShowElement("AddressSearchDisplay");
//}

//function onEditSearchAddressClick() {

//    //hide display
//    HideElement("AddressSearchDisplay");

//    //show controls
//    ShowElement("AddressSearchCtrls");
//}

//function onClearSearchAddressClick() {

//    //hide display
//    HideElement("AddressSearchDisplay");

//    //clear conrtols
//    $get("SearchAddressBox").value = "";
//    $get("SearchZipCodeBox").value = "";

//    //show controls
//    ShowElement("AddressSearchCtrls");

//}

//function onSearchByVenueNameClick() {
//    //hide controls
//    HideElement("VenueSearchCtrls");

//    //display new address
//    $get("VenueSearchNameDisplay").innerHTML = $get("VenueNameBox").value;
//    ShowElement("VenueSearchDisplay");
//}

//function onEditSearchVenueClick() {
//    //hide display
//    HideElement("VenueSearchDisplay");

//    //show controls
//    ShowElement("VenueSearchCtrls");
//}

//function onClearSearchVenueClick() {
//    //hide display
//    HideElement("VenueSearchDisplay");

//    //clear conrtols
//    $get("VenueNameBox").value = "";

//    //show controls
//    ShowElement("VenueSearchCtrls");
//}

if(typeof(Sys)!=='undefined')Sys.Application.notifyScriptLoaded();