/* Minification failed. Returning unminified contents.
(799,17-35): run-time error JS1300: Strict-mode does not allow assignment to undefined variables: TodayAveragePrices
 */

"use strict";

angular.module('fuelApp', ['fuelApp.controllers', 'fuelApp.services', 'pageslide-directive']);

(function (window) {
    window.fuelcheck = {};
    window.fuelcheck.settings = {};
    window.fuelcheck.settings.baseApiUrl = getServiceUrl().baseApiUrl;

    //For UAT
    window.fuelcheck.settings.baseUrl = getServiceUrl().baseUrl;
    window.fuelcheck.settings.baseCDNUrl = getServiceUrl().baseCDNUrl;
    window.fuelcheck.settings.trendUrl = getServiceUrl().baseApiUrl + 'prices/trends/';
    window.fuelcheck.settings.appTrendUrl = getServiceUrl().baseApiUrl + 'prices/apptrends/';
    window.fuelcheck.settings.appExpCheap = getServiceUrl().baseApiUrl + 'prices/topapprices/';
    window.fuelcheck.settings.currentTrendUrl = getServiceUrl().baseApiUrl + 'prices/currenttrend';
    window.fuelcheck.settings.byLocationUrl = getServiceUrl().baseApiUrl + 'prices/bylocation';
    window.fuelcheck.settings.reportIssue = getServiceUrl().baseApiUrl +'reportissue';
    window.fuelcheck.settings.geoJsonUrl = '//api.onegov.nsw.gov.au/SmartmeterDashboardApp/suburbboundary/';//'https://uat.api.onegov.nsw.gov.au/SmartmeterDashboardApp/suburbsboundaries/';
    window.fuelcheck.settings.avgPriceRefreshInterval = 10000;
    //For Local 
    /*
    window.fuelcheck.settings.baseUrl = getServiceUrl().baseUrl;
    window.fuelcheck.settings.trendUrl = getServiceUrl().baseApiUrl + 'fuelprice/TrendJson?fueltypecode=';
    window.fuelcheck.settings.byLocationUrl = getServiceUrl().baseApiUrl + 'fuelprice/bylocationjson';
    */

    function getServiceUrl() {
        //For UAT
        var localUrls = { 'baseUrl': '/', 'baseCDNUrl': '//sit.onegov.nsw.gov.au/CDN/', 'baseApiUrl': 'https://uat.api.onegov.nsw.gov.au/FuelCheckApp/v1/fuel/' },
            sitUrls = { 'baseUrl': '/fuelpublic/', 'baseCDNUrl': '//sit.onegov.nsw.gov.au/CDN/', 'baseApiUrl': '//sit.api.onegov.nsw.gov.au/FuelCheckApp/v1/fuel/' },
            uatUrls = { 'baseUrl': '/fuelpublic/', 'baseCDNUrl': '//uat.onegov.nsw.gov.au/CDN/', 'baseApiUrl': '//uat.api.onegov.nsw.gov.au/FuelCheckApp/v1/fuel/' },
            prodUrls = { 'baseUrl': '/app/', 'baseCDNUrl': '//cdn.onegov.nsw.gov.au/CDN/', 'baseApiUrl': '//api.onegov.nsw.gov.au/FuelCheckApp/v1/fuel/' },
            drUrls = { 'baseUrl': '/app/', 'baseCDNUrl': '//cdn.onegov.nsw.gov.au/CDN/', 'baseApiUrl': 'https://dr.api.onegov.nsw.gov.au/FuelCheckApp/v1/fuel/' };

        //For Local 
        /*var localUrls = { 'baseUrl': '/fuelpublic/', 'baseApiUrl': '//localhost:5000/fuelpublic/' },
            sitUrls = { 'baseUrl': '/fuelpublic/', 'baseApiUrl': '//sit.onegov.nsw.gov.au/fuelpublic/' },
            uatUrls = { 'baseUrl': '/fuelpublic/', 'baseApiUrl': '//uat.onegov.nsw.gov.au/fuelpublic/' },
            prodUrls = { 'baseUrl': '/fuelpublic/', 'baseApiUrl': '//fuelcheck.nsw.gov.au/fuelpublic/' };
            */
        var serviceUrlMappings = {
            'localhost': localUrls,
            'sit.onegov.nsw.gov.au': sitUrls,
            'uat.onegov.nsw.gov.au': uatUrls,
            'fuelcheck.nsw.gov.au': prodUrls,
            'fuelcheck.com.au': prodUrls,
            'www.fuelcheck.nsw.gov.au': prodUrls,
            'www.fuelcheck.com.au': prodUrls,
            'fuelcheck.una.onegov.nsw.gov.au': drUrls
        };

        if (serviceUrlMappings[window.location.hostname]) {
            return serviceUrlMappings[window.location.hostname];
        } else {
            return uatUrls;
        }
    };
})(window);;
angular
.module('pageslide-directive', [])
.directive('pageslide', ['$document', '$timeout',
    function ($document, $timeout) {
        var defaults = {};

        return {
            restrict: 'EAC',
            transclude: false,
            scope: {
                psOpen: '=?',
                psAutoClose: '@',
                psSide: '@',
                psSpeed: '@',
                psClass: '@',
                psSize: '@',
                psZindex: '@',
                psSqueeze: '@',
                psCloak: '@',
                psPush: '@',
                psContainer: '@',
                psKeyListener: '@',
                psBodyClass: '@',
                psClickOutside: '@'
            },
            link: function ($scope, el, attrs) {

                var param = {};

                param.side = $scope.psSide || 'right';
                param.speed = $scope.psSpeed || '0.3';
                param.size = $scope.psSize || '120px';
                param.zindex = $scope.psZindex || 1000;
                param.className = $scope.psClass || 'ng-pageslide';
                param.squeeze = $scope.psSqueeze === 'true';
                param.push = $scope.psPush === 'true';
                param.container = $scope.psContainer || false;
                param.keyListener = $scope.psKeyListener === 'true';
                param.bodyClass = $scope.psBodyClass || false;
                param.clickOutside = $scope.psClickOutside !== 'false';

                el.addClass(param.className);

                /* DOM manipulation */

                var content, slider, body;

                body = param.container ? document.getElementById(param.container) : document.body;
                var isOpen = false;

                function onBodyClick(e) {
                    if(isOpen && !slider.contains(e.target)) {
                        isOpen = false;
                        $scope.psOpen = false;
                        $scope.$apply();
                    }

                    if($scope.psOpen) {
                        isOpen = true;
                    }
                }

                function setBodyClass(value){
                    if (param.bodyClass) {
                        var bodyClass = param.className + '-body';
                        var bodyClassRe = new RegExp(' ' + bodyClass + '-closed| ' + bodyClass + '-open');
                        body.className = body.className.replace(bodyClassRe, '');
                        body.className += ' ' + bodyClass + '-' + value;
                    }
                }

                setBodyClass('closed');

                slider = el[0];

                if (slider.tagName.toLowerCase() !== 'div' &&
                    slider.tagName.toLowerCase() !== 'pageslide')
                    throw new Error('Pageslide can only be applied to <div> or <pageslide> elements');

                if (slider.children.length === 0)
                    throw new Error('You need to have content inside the <pageslide>');

                content = angular.element(slider.children);

                /* Append */
                body.appendChild(slider);

                /* Style setup */
                slider.style.zIndex = param.zindex;
                slider.style.position = param.container !== false ? 'absolute' : 'fixed';
                slider.style.width = 0;
                slider.style.height = 0;
                slider.style.transitionDuration = param.speed + 's';
                slider.style.webkitTransitionDuration = param.speed + 's';
                slider.style.transitionProperty = 'width, height';

                if (param.squeeze || param.push) {
                    body.style.position = 'absolute';
                    body.style.transitionDuration = param.speed + 's';
                    body.style.webkitTransitionDuration = param.speed + 's';
                    body.style.transitionProperty = 'top, bottom, left, right';
                }

                switch (param.side) {
                    case 'right':
                        slider.style.height = attrs.psCustomHeight || '100%';
                        slider.style.top = attrs.psCustomTop || '0px';
                        slider.style.bottom = attrs.psCustomBottom || '0px';
                        slider.style.right = attrs.psCustomRight || '0px';
                        break;
                    case 'left':
                        slider.style.height = attrs.psCustomHeight || '100%';
                        slider.style.top = attrs.psCustomTop || '0px';
                        slider.style.bottom = attrs.psCustomBottom || '0px';
                        slider.style.left = attrs.psCustomLeft || '0px';
                        break;
                    case 'top':
                        slider.style.width = attrs.psCustomWidth || '100%';
                        slider.style.left = attrs.psCustomLeft || '0px';
                        slider.style.top = attrs.psCustomTop || '0px';
                        slider.style.right = attrs.psCustomRight || '0px';
                        break;
                    case 'bottom':
                        slider.style.width = attrs.psCustomWidth || '100%';
                        slider.style.bottom = attrs.psCustomBottom || '0px';
                        slider.style.left = attrs.psCustomLeft || '0px';
                        slider.style.right = attrs.psCustomRight || '0px';
                        break;
                }


                /* Closed */
                function psClose(slider, param) {
                    if (slider && slider.style.width !== 0) {
                        content.css('display', 'none');
                        switch (param.side) {
                            case 'right':
                                slider.style.width = '0px';
                                if (param.squeeze) body.style.right = '0px';
                                if (param.push) {
                                    body.style.right = '0px';
                                    body.style.left = '0px';
                                }
                                break;
                            case 'left':
                                slider.style.width = '0px';
                                if (param.squeeze) body.style.left = '0px';
                                if (param.push) {
                                    body.style.left = '0px';
                                    body.style.right = '0px';
                                }
                                break;
                            case 'top':
                                slider.style.height = '0px';
                                if (param.squeeze) body.style.top = '0px';
                                if (param.push) {
                                    body.style.top = '0px';
                                    body.style.bottom = '0px';
                                }
                                break;
                            case 'bottom':
                                slider.style.height = '0px';
                                if (param.squeeze) body.style.bottom = '0px';
                                if (param.push) {
                                    body.style.bottom = '0px';
                                    body.style.top = '0px';
                                }
                                break;
                        }
                    }
                    if (param.keyListener) {
                        $document.off('keydown', handleKeyDown);
                    }

                    if (param.clickOutside) {
                        $document.off('click', onBodyClick);
                    }
                    isOpen = false;
                    setBodyClass('closed');
                    $scope.psOpen = false;
                }

                /* Open */
                function psOpen(slider, param) {
                    if (slider.style.width !== 0) {
                        switch (param.side) {
                            case 'right':
                                slider.style.width = param.size;
                                if (param.squeeze) body.style.right = param.size;
                                if (param.push) {
                                    body.style.right = param.size;
                                    body.style.left = '-' + param.size;
                                }
                                break;
                            case 'left':
                                slider.style.width = param.size;
                                if (param.squeeze) body.style.left = param.size;
                                if (param.push) {
                                    body.style.left = param.size;
                                    body.style.right = '-' + param.size;
                                }
                                break;
                            case 'top':
                                slider.style.height = param.size;
                                if (param.squeeze) body.style.top = param.size;
                                if (param.push) {
                                    body.style.top = param.size;
                                    body.style.bottom = '-' + param.size;
                                }
                                break;
                            case 'bottom':
                                slider.style.height = param.size;
                                if (param.squeeze) body.style.bottom = param.size;
                                if (param.push) {
                                    body.style.bottom = param.size;
                                    body.style.top = '-' + param.size;
                                }
                                break;
                        }

                        $timeout(function() {
                            content.css('display', 'block');
                        }, (param.speed * 1000));

                        $scope.psOpen = true;

                        if (param.keyListener) {
                            $document.on('keydown', handleKeyDown);
                        }

                        if (param.clickOutside) {
                            $document.on('click', onBodyClick);
                        }
                        setBodyClass('open');
                    }
                }

                function handleKeyDown(e) {
                    var ESC_KEY = 27;
                    var key = e.keyCode || e.which;

                    if (key === ESC_KEY) {
                        psClose(slider, param);
                    }
                }

                /*
                * Watchers
                * */

                $scope.$watch('psOpen', function(value) {
                    if (!!value) {
                        psOpen(slider, param);
                    } else {
                        psClose(slider, param);
                    }
                });

                $scope.$watch('psSize', function(newValue, oldValue) {
                    if (oldValue !== newValue) {
                        param.size = newValue;
                        if ($scope.psOpen) {
                            psOpen(slider, param);
                        }
                    }
                });

                /*
                * Events
                * */

                $scope.$on('$destroy', function () {
                    if (slider.parentNode === body) {
                        if (param.clickOutside) {
                            $document.off('click', onBodyClick);
                        }
                        body.removeChild(slider);
                    }
                });

                if ($scope.psAutoClose) {
                    $scope.$on('$locationChangeStart', function() {
                        psClose(slider, param);
                    });
                    $scope.$on('$stateChangeStart', function() {
                        psClose(slider, param);
                    });
                }

            }
        };
    }
]);
;
(function() {
    'use strict';
    var module = angular.module("fuelApp.services", []);

    module.factory('getRefData', getRefData);
    getRefData.$inject = ['$http', '$q'];

    function getRefData($http, $q) {

        return {
            fuelTypes: function() {
                return $http.get('Home/FuelTypes');
            },
            brands: function() {
                return $http.get('Home/Brands');
            }
        };
    }

    module.factory('getTrendData', getTrendData);
    getTrendData.$inject = ['$http', '$q'];

    function getTrendData($http, $q) {

        return {
            data: function(fuelCode) {
                return $http.get(window.fuelcheck.settings.trendUrl + fuelCode);
            },
            multiData: function (fuelCodeArr) {
                return $http.post(window.fuelcheck.settings.trendUrl, fuelCodeArr);
            }
        };
    }

    module.factory('getCurrentTrendData', getCurrentTrendData);
    getCurrentTrendData.$inject = ['$http', '$q'];

    function getCurrentTrendData($http, $q) {

        return {
            data: function () {
                return $http.get(window.fuelcheck.settings.currentTrendUrl);
            }
        };
    }

    module.factory('getCheapExpensivePrices', getCheapExpensivePrices);
    getCheapExpensivePrices.$inject = ['$http', '$q'];

    function getCheapExpensivePrices($http, $q) {

        return {
            multiData: function (fuelCodeArr) {
                return $http.post(window.fuelcheck.settings.appExpCheap, fuelCodeArr);
            }
        };
    }

    module.factory('getAppTrendData', getAppTrendData);
    getAppTrendData.$inject = ['$http', '$q'];

    function getAppTrendData($http, $q) {

        return {
            data: function (fuelCode) {
                return $http.get(window.fuelcheck.settings.appTrendUrl + fuelCode);
            },
            multiData: function (jsonPostData) {
                return $http.post(window.fuelcheck.settings.appTrendUrl, jsonPostData);
            }
        };
    }

})();;
angular.module('fuelApp').filter('dateFormat', function () {
    return function (input, frequency) {
        var date = new Date(input);
        var weekShort = ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"];
        var weekLong = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
        var monthLong = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
        var monthShort= ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'June', 'July', 'Aug', 'Sept', 'Oct', 'Nov', 'Dec'];

        if (frequency == "week") {
            return weekShort[date.getDay()];
            
            
        } else if(frequency=="month") {
            return date.getDate()+" "+monthShort[date.getMonth()];
        }
        else if (frequency == "year") {
            return date.getYear();
        }
    }
});

angular.module('fuelApp').filter('dateFormatLong', function () {
    return function (input, frequency) {
        var date = new Date(input);
        var now = new Date();
        var timeGap = date.getDay() - now.getDay();

        var weekShort = ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"];
        var weekLong = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
        var monthLong = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
        var monthShort = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'June', 'July', 'Aug', 'Sept', 'Oct', 'Nov', 'Dec'];

        function nth(d) {
            if (d > 3 && d < 21) return d+'th'; 
            switch (d % 10) {
                case 1: return d+"st";
                case 2: return d+"nd";
                case 3: return d+"rd";
                default: return d+"th";
            }
        }
        
        if (frequency == "week") {
            if (timeGap == 0) {
                return "Today";
            } else {
                return weekLong[date.getDay()];
            }
           


        } else if (frequency == "month") {
            return weekLong[date.getDay()]+" "+nth(date.getDate()) + " " + monthShort[date.getMonth()];
        }
        else if (frequency == "year") {
            return monthLong[date.getMonth()];
        }
    }
});

angular.module('fuelApp').filter('ly', function () {
    return function (input) {
        return input + "ly";
    }
});

angular.module('fuelApp').filter('specifyFrequency', function () {
    return function (input) {
        if (input == "week") {
            return "7 Day";
        } else if (input == "month") {
            return "28 Day"
        } else if (input == "year") {
            return "12 Month"
        }
    }
});

angular.module('fuelApp').filter('reorderFuelType', function () {
    return function (items) {

        var sorted = {},
    key, a = ["E10", "U91", "P95", "E85", "P98", "DL", "PDL", "B20", "LPG", "CNG", "LNG"];

     
        for (key = 0; key < a.length; key++) {
            sorted[a[key]] = items[a[key]];
        }
        return sorted;


    }
});;
(function () {
    'use strict';
    angular.module("fuelApp.controllers", ['ngAnimate', 'ui.bootstrap']);

    angular.module('fuelApp.controllers').controller('HomePageController', HomePageController);
    HomePageController.$inject = ['$scope', 'getRefData', 'filterFilter', 'getCurrentTrendData', '$interval'];
    function HomePageController($scope, getRefData, filterFilter, getCurrentTrendData, $interval) {
        var local_radius_suburb = "4";
        var local_radius_nearby = "3";

        var vm = this;
        //var todayAvgPriceObj = findTodayAvgPriceData("E10", TodayAveragePrices);
        var todayAvgPriceObj = {};
        getTrendsData();
        var timer;
        timer = $interval(getTrendsData, window.fuelcheck.settings.avgPriceRefreshInterval);

        $scope.$on('$destroy', function () {
            // Make sure that the interval is destroyed too
            if (angular.isDefined(timer)) {
                $interval.cancel(timer);
                timer = undefined;
            }
        });
        //TodayAveragePrices = getTrendData($('#selectFuels input[type="radio"]:checked').val());

        $scope.brandsDesc = "";
        $scope.rememberSetting = true;
        $scope.todayAvgPrice = todayAvgPriceObj.Price;
        $scope.todayAvgVariance = todayAvgPriceObj.Variance;

        $scope.baseCDNUrl = window.fuelcheck.settings.baseCDNUrl;

        $scope.$on('fuelTypeChanged', function (event, data) {

            //update the today's avergage panel
            $scope.fuelType.selectedType = data[0];
            console.log(data[0]);
            todayAvgPriceObj = findTodayAvgPriceData(data[1], TodayAveragePrices);
            $scope.todayAvgPrice = todayAvgPriceObj.Price;
            $scope.todayAvgVariance = todayAvgPriceObj.Variance;
        });

        $scope.$on('fuelTypeSet', function (event, data) {

            //set today's avergage panel as the first fuel type on the list
            //console.log(data[0]);
            $scope.fuelType = { selectedType: data[1] };
            todayAvgPriceObj = findTodayAvgPriceData(data[0], TodayAveragePrices);
            $scope.todayAvgPrice = todayAvgPriceObj.Price;
            $scope.todayAvgVariance = todayAvgPriceObj.Variance;
        });

        //default lattitude and longitude , in case user does not has Geolocation enabled in browser
        $scope.lat = '-33.8693325';
        $scope.long = '151.2094033';

        //remember my settings
        //$scope.savedSuburb, $scope.savedFuelType, $scope.savedBrand;

        $(window).load(function () {
            var strRemeberSearchData = localStorage.getItem('fuelcheckRemeberSearchData');
            if (strRemeberSearchData !== null) {
                var remeberSearchData = JSON.parse(strRemeberSearchData);

                //for suburb
                var savedSuburb = remeberSearchData.savedSuburb;
                var savedSuburbName = remeberSearchData.savedSuburbName;
                var savedLat = remeberSearchData.savedLat;
                var savedLng = remeberSearchData.savedLng;
                $('#txtbxSuburbPostCode').val(savedSuburb).attr('data-latitude', savedLat).attr('data-longitude', savedLng).attr('data-suburb', savedSuburbName);

                //for checkbox
                $('#SavedSettingsChecked').attr('checked', 'checked');
            }


        });

        $scope.getLocation = function () {

            if (navigator.geolocation) {
                var timeoutVal = 10 * 1000 * 1000;
                navigator.geolocation.getCurrentPosition(function (position) {
                    $scope.$apply(function () {
                        $scope.lat = position.coords.latitude;
                        $scope.long = position.coords.longitude;
                    });


                }, function (error) {
                    var errors = {
                        1: 'Your location services are turned off',
                        2: 'Position unavailable',
                        3: 'Request timeout'
                    };
                    alert(errors[error.code]);
                }, { enableHighAccuracy: true, timeout: timeoutVal, maximumAge: 0 })
            } else {
                alert("Your browser do not support the location services");
            }
        }


        $scope.FuelNearMe = function () {
            var selectedBrands = [];
            var selectedFuelType = '';
            var strFuelBrandParameters = '';
           
            //fuelType
            selectedFuelType = $('#selectFuels input[type="radio"]:checked').attr('id');

            if ($('#selectBrands input[type="checkbox"]#SelectAll').is(":checked") == false) {
                $('#selectBrands input[type="checkbox"]').each(function () {
                    var $chkBrand = $(this);

                    //get only those brands which are selected, we do not need Select All checkbox
                    if ($chkBrand.is(":checked") == true && $chkBrand.val() != 'SelectAll') {
                        selectedBrands.push($chkBrand.val());

                    }

                });

                //concatinate brands for URL
                if (selectedBrands.length > 0) {
                    selectedBrands = $.grep(selectedBrands, Boolean).join("|");
                    strFuelBrandParameters = '&brands=' + selectedBrands;
                }
            }

            //Now we do not need geo location on home page or button click, just take use to next map page
            document.location.href = window.fuelcheck.settings.baseUrl + 'FuelPrice/ByLocation?latitude=' + $scope.lat + '&longitude=' + $scope.long + '&nearbyme=true' + '&radius=' + local_radius_nearby;
            /*
            if (navigator.geolocation) {
                var timeoutVal = 10 * 1000 * 1000;
                navigator.geolocation.getCurrentPosition(function (position) {
                    $scope.$apply(function () {
                        $scope.lat = position.coords.latitude;
                        $scope.long = position.coords.longitude;
                    });
                    document.location.href = window.fuelcheck.settings.baseUrl + 'FuelPrice/ByLocation?latitude=' + $scope.lat + '&longitude=' + $scope.long + '&nearbyme=true' + '&fuelType=' + selectedFuelType + strFuelBrandParameters + '&radius=' + local_radius_nearby;


                }, function (error) {
                    var errors = {
                        1: 'Your location services are turned off',
                        2: 'Position unavailable',
                        3: 'Request timeout'
                    };
                    alert(errors[error.code]);
                    document.location.href = window.fuelcheck.settings.baseUrl + 'FuelPrice/ByLocation?latitude=' + $scope.lat + '&longitude=' + $scope.long + '&nearbyme=true' + '&radius=' + local_radius_nearby;
                }, { enableHighAccuracy: true, timeout: timeoutVal, maximumAge: 0 });
            } else {
                alert("Your browser do not support the location services");

            }*/

        };
        $scope.GetTrend = function () {
            var fuelType = $('#selectFuels input[type="radio"]:checked').val();
            document.location.href = window.fuelcheck.settings.baseUrl + 'FuelPrice/Trend?fuelTypeCode=' + fuelType;
        };
        $scope.searchStations = function () {

            if (!$("#txtbxSuburbPostCode").val()) {

                $("#txtbxSuburbPostCode").addClass("input-error");
            } else {

                $("#txtbxSuburbPostCode").removeClass("input-error");
                //$scope.getLocation();
                var $txtbxSuburbPostCode = $("#txtbxSuburbPostCode");
                var strSuburb = $txtbxSuburbPostCode.val();
                var strLat = $txtbxSuburbPostCode.attr("data-latitude");
                var strLng = $txtbxSuburbPostCode.attr("data-longitude");
                var strSuburbname = $txtbxSuburbPostCode.attr("data-suburb");
                var strSuburbPostCode = $txtbxSuburbPostCode.attr("data-postcode");
                var fuelType = $('#selectFuels input[type="radio"]:checked').val();
                var fuelBrands = '';
                var arrFuelBrands = [];
                var strFuelBrandParameters = '';

                //save the settings on search button click
                //location
                $("#txtbxSuburbPostCode").val();
                $("#txtbxSuburbPostCode").attr("data-longitude");
                $("#txtbxSuburbPostCode").attr("data-latitude");
                //fuelType
                $('#selectFuels input[type="radio"]:checked').attr('id');

                if ($('#selectBrands input[type="checkbox"]#SelectAll').is(":checked") == false) {
                    $('#selectBrands input[type="checkbox"]').each(function () {
                        var $chkBrand = $(this);

                        //get only those brands which are selected, we do not need Select All checkbox
                        if ($chkBrand.is(":checked") == true && $chkBrand.val() != 'SelectAll') {
                            arrFuelBrands.push($chkBrand.val());
                        }

                    });

                    //concatinate brands for URL
                    if (arrFuelBrands.length > 0) {
                        fuelBrands = $.grep(arrFuelBrands, Boolean).join("|");
                        strFuelBrandParameters = '&brands=' + fuelBrands;
                    }
                }

                var strURL = '';
                //save search data to local storage on click search
                var remeberSearchData = {};

                //when user is ready to search with specific Suburb/Postcode
                if (strLat != "" && strLng != "" && strSuburb != "") {
                    strURL = 'FuelPrice/ByLocation?latitude=' + strLat + '&longitude=' + strLng + '&fuelType=' + fuelType + strFuelBrandParameters + '&radius=' + local_radius_suburb + '&suburb=' + strSuburbname +'&postcode='+strSuburbPostCode;
                    remeberSearchData.savedLat = strLat;
                    remeberSearchData.savedLng = strLng;

                }
                    //when user typed something, which is not from Suburbs Selection, we need lng & lat
                    //we will pass current location
                else {
                    strURL = 'FuelPrice/ByLocation?latitude=' + $scope.lat + '&longitude=' + $scope.long + '&fuelType=' + fuelType + strFuelBrandParameters + '&radius=' + local_radius_suburb;
                    remeberSearchData.savedLat = $scope.lat;
                    remeberSearchData.savedLng = $scope.long;
                }

                remeberSearchData.savedSuburb = strSuburb;
                remeberSearchData.savedSuburbName = strSuburbname;
                remeberSearchData.savedfuelBrands = arrFuelBrands;
                remeberSearchData.savedfuleType = fuelType;

                // localStorage feature/availability detection - used for iOS private browsing detection
                var localStorageEnabled = (function () {
                    var uid = new Date;
                    var result;
                    try {
                        localStorage.setItem(uid, uid);
                        result = localStorage.getItem(uid) == uid;
                        localStorage.removeItem(uid);
                        return result && localStorage;
                    } catch (exception) { }
                }());

                if (localStorageEnabled) {
                    if ($('#SavedSettingsChecked').is(':checked')) {
                        localStorage.fuelcheckRemeberSearchData = JSON.stringify(remeberSearchData);
                    }
                    else {
                        localStorage.removeItem('fuelcheckRemeberSearchData');
                    }
                }

                document.location.href = window.fuelcheck.settings.baseUrl + strURL;

            };


        };


        function findTodayAvgPriceData(fuelType, priceArr) {
            if (fuelType == undefined) {
                fuelType = "E10";
            }
            for (var i = 0; i < priceArr.length; i++) {
                if (priceArr[i].Code == fuelType) {
                    return priceArr[i];
                }
            }
        };

        function getTrendsData() {
            // TodayAveragePrices = getTrendData($('#selectFuels input[type="radio"]:checked').val());
            getCurrentTrendData.data().then(function (response) {
                console.log(response.data);
                TodayAveragePrices = response.data;
                todayAvgPriceObj = findTodayAvgPriceData($('#selectFuels input[type="radio"]:checked').val(), TodayAveragePrices);
                $scope.todayAvgPrice = todayAvgPriceObj.Price;
                $scope.todayAvgVariance = todayAvgPriceObj.Variance;

            });

        };

    }

    angular.module("fuelApp.controllers").controller("pageslideCtrl", pageslideCtrl);
    pageslideCtrl.$inject = ['$scope', '$rootScope', '$http', '$location'];
    function pageslideCtrl($scope, $rootScope, $http, $location) {
        
        $scope.checked = false;
        $scope.size = '100px';
        $scope.feedBackValue = null;
        $scope.showFeedBackText = false;
        $scope.baseUrl = window.fuelcheck.settings.baseUrl;
        $scope.inValid = false;
        $scope.positiveSubmitted = false;
        $scope.negativeSubmitted = false;
        $scope.positivePH = "Any suggestions?"
        $scope.negativePH = "How can we improve your experience?"
        $scope.hideNavbar = getParameterByName('hideNavBar');
        $scope.mobiledevice = getParameterByName('device');

        var strRemeberSearchData = JSON.parse(localStorage.getItem('fuelcheckRemeberSearchData'));

        if (strRemeberSearchData != null) {
            $rootScope.fuelTypeSelected = strRemeberSearchData.savedfuleType;

        } else {
            $rootScope.fuelTypeSelected = "E10";
        }

        $scope.toggle = function () {
            $scope.checked = !$scope.checked;
        }

        $scope.mockRouteChange = function () {
            $scope.$broadcast('$locationChangeStart');
        }

        $scope.feedBack = function (f, content) {
            console.log(f);
            $scope.feedBackValue = f;
           

            //avoid users send selected option more than once
            if ((f === 1 && $scope.negativeSubmitted) || (f === 5 && $scope.positiveSubmitted)) {
                console.log('sumitted');
                return;
            }
            
            //valid empty content for negative feedback
            if ((content == undefined || content == "") && $scope.showFeedBackText == true && $scope.feedBackValue === 1) {
                console.log('empty negative feedback')
                $scope.inValid = true;
                return
            }

            if ((content == undefined || content == "") && $scope.positiveSubmitted === false && $scope.negativeSubmitted === false&&f!==5) {
                $scope.inValid = true;
                console.log('no feedback');
                return
            }
          
            if (f === null) {
                f = 0;
            };

            var data = JSON.stringify({ rating: f, comments: content });
            $http.post($scope.baseUrl + "Home/FeedBack", data)
            .success(function () {
                console.log(f + ' ' + content);
                $scope.feedBackContent = "";
                $scope.showFeedBackText = false;
                $scope.inValid = false;
                if (f === 5) {
                    $scope.positiveSubmitted = true;
                    $scope.negativeSubmitted = false;
                    setTimeout(function () {
                        $scope.feedBackValue = 5;
                    }, 0);

                } else if (f === 1) {
                    $scope.negativeSubmitted = true;
                    $scope.positiveSubmitted = false;
                    setTimeout(function () {
                        $scope.feedBackValue = 1;

                    }, 0);

                } else if (f === 0) {
                    $scope.negativeSubmitted = false;
                    $scope.positiveSubmitted = false;
                }

            });
        }

        $scope.toggleFeedbackText = function () {
            //if ($scope.feedBackValue === 1) {
            //    $scope.feedBackTextHolder = "How can we improve your experience?"
            //} else {
            //    $scope.feedBackTextHolder = "Any suggestions?"
            //}
            $scope.negativeSubmitted = false;
            $scope.positiveSubmitted = false;
            $scope.feedBackValue = null;
            
          
            $scope.showFeedBackText = !$scope.showFeedBackText;
        }

        $scope.getSuggestion=function(f){
            $scope.showFeedBackText = true;
            $scope.feedBackValue = 1;
           
            
        }




    }

    angular.module("fuelApp.controllers").controller("aboutCtrl", aboutCtrl);
    aboutCtrl.$inject = ['$scope'];
    function aboutCtrl($scope) {
        $scope.requesteddevice = getParameterByName('device');
        if ($scope.requesteddevice == 'ios')
        {
            $scope.e10fuelDeviceParameter = '?device=ios';
        }
        if ($scope.requesteddevice == 'android') {
            $scope.e10fuelDeviceParameter = '?device=android';
        }
    };

    angular.module("fuelApp.controllers").controller("helpCtrl", helpCtrl);
    helpCtrl.$inject = ['$scope'];
    function helpCtrl($scope) {
        $scope.requesteddevice = getParameterByName('device');
    };

    function getParameterByName(name) {
        name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
        var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
            results = regex.exec(window.location.search);
        return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
    };
})();;

angular.module('fuelApp.controllers').controller('TypeaheadCtrl',TypeaheadCtrl );
TypeaheadCtrl.$inject = ["$scope", "$http"];
function TypeaheadCtrl($scope, $http) {

    var _selected;

    if (localStorage.getItem('selectedSuburb')) {
        var selectedSuburb = localStorage.getItem('selectedSuburb');
        $scope.asyncSelected = JSON.parse(selectedSuburb);
    }
    

    $scope.selected = undefined;
    $scope.keypresssuburb = function ($event) {
        var strLat = $('#txtbxSuburbPostCode').attr('data-latitude');

        $("#txtbxSuburbPostCode").removeClass("input-error");
        //if (($event.keyCode != 8 && $event.keyCode != 46) && strLat != "") {
        //    $('.search .search-button').removeAttr('disabled');
        //}
        //else {
        //    $('.search .search-button').attr('disabled', 'disabled'); 
        //}
       
    };
    $scope.scrollUp = function ($event) {
        var scrollDistance = $(".search").offset().top - $('.dg-sticky-top').height();
        $("html, body").animate({ scrollTop: scrollDistance}, 600);
       
      
    }

  
    // Any function returning a promise object can be used to load values asynchronously
    $scope.getLocation = function (val) {
        
        return $http.post('home/SuburbPostcodeCompletion', {
            fragment: val
        }).then(function (response) {
            return response.data.map(function (item) {
                return item;
            });
        });
    };

    $scope.selecteditem = function () {
        $('.search .search-button').removeAttr('disabled');
        $('#txtbxSuburbPostCode').attr('data-suburb', $scope.asyncSelected.Suburb);
        $('#txtbxSuburbPostCode').attr('data-postcode', $scope.asyncSelected.Postcode);
        //console.log($scope.asyncSelected);
        //Sapan Commented to undo RememberSettings
        //localStorage.setItem('selectedSuburb', JSON.stringify($scope.asyncSelected));
    };
    /*Do not need this*/
    /*$scope.ngModelOptionsSelected = function (value) {
        if (arguments.length) {
            _selected = value;
        } else {
            return _selected;
        }
    };

    $scope.modelOptions = {
        debounce: {
            default: 500,
            blur: 250
        },
        getterSetter: true
    };
    */
};
(function () {
    'use strict';
    
    angular.module('fuelApp.controllers').controller('fuelFilterController', ['$scope', '$rootScope','getRefData', 'filterFilter', '$location', function ($scope,$rootScope,getRefData, filterFilter, $location) {
        
        //Javascript Start - Common Functions
        function getUrlParameters(name, url) {
            if (!url) url = window.location.href;
            name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
            var regexS = "[\\?&]" + name + "=([^&#]*)";
            var regex = new RegExp(regexS);
            var results = regex.exec(url);
            return results == null ? null : results[1];
        }
        Array.prototype.contains = function (obj) {
            var i = this.length;
            while (i--) {
                if (this[i] == obj) {
                    return true;
                }
            }
            return false;
        }
        //Javascript End - Common Functions


        //Angular Stuff - Start

        var vm = this;
        

        getRefData.fuelTypes().then(function (response) {

            //Javascript Start - Only to select the FUEL TYPE which are in url on page load
            //or for home page load fuel type if settings are saved
            var allFuelTypes = response.data;
            var strRemeberSearchData = localStorage.getItem('fuelcheckRemeberSearchData');
            var strFuelType;

            if (strRemeberSearchData !== null) {
                var remeberSearchData = JSON.parse(strRemeberSearchData);
                var strFuelTypeName;
               
                //This will load Saved Fuel Type from Saved Settings
                strFuelType = remeberSearchData.savedfuleType;
                console.log(strFuelType);
                for (var i = 0; i < allFuelTypes.length; i++) {
                    if (allFuelTypes[i].code == strFuelType) {
                        strFuelTypeName = allFuelTypes[i].name;                        
                    }               

                }

                $scope.$emit('fuelTypeSet', [strFuelType, strFuelTypeName]);
                $rootScope.fuelTypeSelected = strFuelType;

                
            } else {
                strFuelType = getUrlParameters('fuelType');
                strFuelType = (strFuelType == null) ? allFuelTypes[0].code : strFuelType;
                $scope.$emit('fuelTypeSet', [allFuelTypes[0].code, allFuelTypes[0].name]);
                $rootScope.fuelTypeSelected = strFuelType;
            }
            //Javascript End - Only to select the FUEL TYPE which are in url on page load

            
            vm.fuelTypeFilter = {
                show: false,
                allFuelTypes: allFuelTypes,
                selected: strFuelType,
                newSelected: strFuelType,
                cancel: function () {
                    vm.fuelTypeFilter.newSelected = vm.fuelTypeFilter.selected;
                    vm.fuelTypeFilter.show = false;
                },
                apply: function (filtermap) {
                    vm.fuelTypeFilter.selected = vm.fuelTypeFilter.newSelected;
                    for (var i=0; i < allFuelTypes.length;i++) {
                        if (allFuelTypes[i].code == vm.fuelTypeFilter.newSelected) {
                            //$scope.fuelType.selectedType = allFuelTypes[i].name;
                            $scope.$emit('fuelTypeChanged', [allFuelTypes[i].name, allFuelTypes[i].code]);
                            $rootScope.fuelTypeSelected = allFuelTypes[i].code;
                        }
                    }
                    vm.fuelTypeFilter.show = false;
                    if (filtermap == true) {
                        namespaceMap.MapPage.updatefilteredMap(vm.fuelTypeFilter.selected, vm.brandFilter.selected);
                    }
                },
                selectedText: function () {
                    for (var i = 0; i < allFuelTypes.length; i++) {
                        if (allFuelTypes[i].code == vm.fuelTypeFilter.selected)
                            return allFuelTypes[i].name;
                           
                    }
                }
            };
        });

        getRefData.brands().then(function (response) {
            var allBrands = response.data;
            var selected = {};
            var arrSearchBrands = [];
          
            allBrands.splice(0, 0, { 'name': 'SelectAll' });

            //Javascript Start - Only to select the FUEL Brand which are in url on page load
            //or for home page load fuel type if settings are saved
            var strRemeberSearchData = localStorage.getItem('fuelcheckRemeberSearchData');
            var strFuelBrands = getUrlParameters('brands');

            //we need to decode url paraamater in case of 'Coles%20Express' to 'Coles Express'
            if (strFuelBrands !== null) {
                strFuelBrands = decodeURIComponent(getUrlParameters('brands'));
            }
       
            if (strRemeberSearchData !== null ) {
                var remeberSearchData = JSON.parse(strRemeberSearchData);

                //This will load Saved Fule Brand from Saved Settings
                var arrSavedfuelBrands = remeberSearchData.savedfuelBrands;
                arrSearchBrands =  remeberSearchData.savedfuelBrands;

            } else {
                //Javascript Start - Only to select the brands which are in url on page load
                if (strFuelBrands !== null) {
                    arrSearchBrands = strFuelBrands.split('|')
                }

                //Javascript End - Only to select the brands which are in url on page load
            }
            //Javascript End - Only to select the FUEL TYPE which are in url on page load
          
            selected = JSON.parse(JSON.stringify(allBrands));

            for (var i = 0; i < selected.length; i++) {

                //select specific brands if url has those, otherwise select all brands
                if (arrSearchBrands.length > 0) {
                    selected[i].selected = arrSearchBrands.contains(selected[i].name);
                }
                else {
                    selected[i].selected = true;

                }

            }
            
           
           
            vm.brandFilter = {
                show: false,
                allBrands: allBrands,
                selected: selected,
                newSelected: JSON.parse(JSON.stringify(selected)),
                selectAll: function (checked) {
                   
                    if (checked) {
                        for (var i = 0; i < vm.brandFilter.newSelected.length; i++) {
                            vm.brandFilter.newSelected[i].selected = true;
                        }
                    } else {
                        for (var i = 0; i < vm.brandFilter.newSelected.length; i++) {
                            vm.brandFilter.newSelected[i].selected = false;
                        }
                    }
                },
                check: function (item) {
                    if (item.name === 'SelectAll') {
                        vm.brandFilter.selectAll(item.selected);
                    } else {
                        vm.brandFilter.newSelected[0].selected = false;
                    }
                },
                cancel: function () {
                    vm.brandFilter.newSelected = JSON.parse(JSON.stringify(vm.brandFilter.selected));
                    vm.brandFilter.show = false;
                },
                apply: function (filtermap) {
                    vm.brandFilter.selected = JSON.parse(JSON.stringify(vm.brandFilter.newSelected));
                    vm.brandFilter.show = false;
                   
                    if (filtermap == true) {
                        namespaceMap.MapPage.updatefilteredMap(vm.fuelTypeFilter.selected, vm.brandFilter.selected);
                    }
                },
                selectedText: function () {
                    if (vm.brandFilter.selected[0].selected) {
                        return 'All Brands';
                    } else {
                       //console.log(vm.brandFilter.selected);
                        return vm.brandFilter.selected.filter(function (item) {
                            return item.selected;
                        }).map(function (obj) { return " " + obj.name; }).toString();
                    }

                    
                }
            };
        });
    }]);
})();

;
'use strict';

angular.module('fuelApp.controllers').controller('trendsController', ['$scope', 'getTrendData', '$filter', 'getRefData', function ($scope, getTrendData, $filter, getRefData) {
    $scope.test = "test new trends";
    fillDropDownFuelTypes();

    function fillDropDownFuelTypes() {
        getRefData.fuelTypes().then(function (response) {
            $scope.fuelTypes = response.data;
            $scope.selectedFuelTypeText = convertCodeToType($scope.selectedFuelType, $scope.fuelTypes);
            //set the default values for the fueltype multi selector on multi trend chart

            for (var i = 0; i < $scope.fuelTypes.length; i++) {
                var fuelTypeCode = $scope.fuelTypes[i].code;
                if (i == 0) {
                    $scope.selectedFuels[fuelTypeCode] = true;
                } else {
                    $scope.selectedFuels[fuelTypeCode] = false;
                }

            }


        });
    }
    //convert fueltype code to name
    function convertCodeToType(code, types) {
        for (var i = 0; i < types.length; i++) {

            if (code == types[i].code) {
                return types[i].name;
            }
        }
    };
}]);

//(function () {
    'use strict';
    angular.module('fuelApp.controllers').controller('priceTrendController', ['$scope', 'getTrendData', 'getAppTrendData', 'getCheapExpensivePrices', '$filter', 'getRefData', function ($scope, getTrendData, getAppTrendData, getCheapExpensivePrices, $filter, getRefData) {
        $scope.local_currentLocationLattitude = getUrlParameters('latitude');
        $scope.local_currentLocationLongitude = getUrlParameters('longitude');

        $scope.frequency = "week";
        $scope.locationType = 'nearme';
        $scope.trendData;
        $scope.trendDataComparison;
        $scope.avgPriceToday = 0;
        $scope.isVariationUp = true;
        google.charts.load('current', { 'packages': ['corechart'] });
        google.charts.setOnLoadCallback(function () {
            //if lat long is not provided in url, then we will ask to get location, otherwise directly load page
            if ($scope.local_currentLocationLattitude == null || $scope.local_currentLocationLongitude == null) {
                getGeoLocation();
            }
            else {
                initializeChart();
            }
        });
        $scope.frequencyM = 'Week';
        $scope.topExpensiveStations = [];
        $scope.topCheapestStations = [];
        
        $scope.hideNavbar = getUrlParameters('hideNavBar');

        var strFuelType = getUrlParameters('fuelTypeCode');
        if (strFuelType != null) {
            $scope.selectedFuelType = strFuelType;
        }
        else {
            $scope.selectedFuelType = "E10";
        }
        $scope.preSelectedFuelType = $scope.selectedFuelType;

        //set display type
        var strDisplay = getUrlParameters('display');
        

        if (strDisplay != null) {
            $scope.chartType = strDisplay;
        }
        else {
            $scope.chartType = "dashboard";
        }
        
        var strFrequency = getUrlParameters('frequency');
        if (strFrequency != null) {
            $scope.frequencyM = strFrequency;
        }

        //selectedFuels for multi-trend chart
        $scope.selectedFuels = {
            "E10": true,
            "U91": false,
            "E85": false,
            "P95": false,
            "P98": false,
            "DL": false,
            "PDL": false,
            "B20": false,
            "LPG": false,
            "CNG": false,
            "LNG": false
        };

        $scope.lattitude;
        $scope.longititude;
        
        
        loadFuelTypeDropDown();
        

        $scope.changeViewMode = function (mode) {
            $scope.chartType = mode;

            if (mode == 'compare') {

                //update multichart as well
                if ($scope.frequency == "week") {
                    $scope.frequencyM = "Week";
                } else if ($scope.frequency == "month") {
                    $scope.frequencyM = "Month";
                } else if ($scope.frequency == "year") {
                    $scope.frequencyM = "Year"
                }
                findSelectedFuels();
                $scope.updateMultiChart();
            }
        };
        $scope.updateLineChart = function () {
            drawChart($scope.frequency);
            updateAveragePrice();
        };

        function initializeChart() {
            //var chart = new google.visualization.LineChart(document.getElementById('chart')); console.log('Chart Loaded');
            //chart.draw(data, options);
            getAppTrendsdata();

            //comparison
            $scope.updateMultiChart();
        }
        function findSelectedFuels() {
            for (var key in $scope.selectedFuels) {

                if ($scope.selectedFuels.hasOwnProperty(key)) {
                    if (key == $scope.selectedFuelType) {
                        $scope.selectedFuels[key] = true;
                        //console.log(key + $scope.selectedFuels[key]);

                    } else {
                        $scope.selectedFuels[key] = false;
                        //console.log(key + $scope.selectedFuels[key]);
                    }
                }

            };
        }
        function getAppTrendsdata() {
            var postDataAppTrends;

            if ($scope.local_currentLocationLattitude != null && $scope.local_currentLocationLongitude != null) {
                postDataAppTrends = {
                    "fueltype": $scope.selectedFuelType,
                    "latitude": $scope.local_currentLocationLattitude,
                    "longitude": $scope.local_currentLocationLongitude
                };
            }
            else {
                postDataAppTrends = {
                    "fueltype": $scope.selectedFuelType
                };
            }
            
            fetchTopExpensiveCheapestStations(postDataAppTrends);
            
            getAppTrendData.multiData(postDataAppTrends).then(function (response) {
                $scope.trendData = response.data;
                //single chart start
                for (var i = 0; i < $scope.trendData.Variances.length; i++) {
                    if ($scope.trendData.Variances[i].Period == "Day") {


                        $scope.highestPrice = $scope.trendData.Variances[i].MaximumPrice;
                        $scope.highestPriceWhen = $scope.trendData.Variances[i].MaximumWhenString;
                        $scope.lowestPrice = $scope.trendData.Variances[i].MinimumPrice;
                        $scope.lowestPriceWhen = $scope.trendData.Variances[i].MinimumWhenString;
                        $scope.variance = $scope.trendData.Variances[i].Variance;
                        $scope.avgPriceToday = $scope.trendData.Variances[i].Price;

                        if (parseFloat($scope.variance)>=0) {
                            $scope.isVariationUp = true;
                        }
                        else{
                            $scope.isVariationUp = false;
                        }
                    };

                    if ($scope.trendData.Variances[i].Period == "Week") {
                        $scope.MinDay = $scope.trendData.Variances[i].MinDay;
                    }
                };
                getAveragePrices();
                updateAveragePrice();
                drawChart($scope.frequency);
            });
        }
        $scope.changeLocationMode = function (mode) {
            var postDataAppTrends;

            if (mode=='nearme') {
                postDataAppTrends = {
                    "fueltype": $scope.selectedFuelType,
                    "latitude": $scope.local_currentLocationLattitude,
                    "longitude": $scope.local_currentLocationLongitude
                };
            }
            else {
                postDataAppTrends = {
                    "fueltype": $scope.selectedFuelType
                };
            }

            fetchTopExpensiveCheapestStations(postDataAppTrends);
        }
        function fetchTopExpensiveCheapestStations(jsonPost) {
            getCheapExpensivePrices.multiData(jsonPost).then(function (response) {
                var stationsData = response.data;
                if (stationsData != undefined && stationsData.mostExpensive.length > 0) {
                    $scope.topExpensiveStations = stationsData.mostExpensive;
                }
                if (stationsData != undefined && stationsData.leastExpensive.length > 0) {
                    $scope.topCheapestStations = stationsData.leastExpensive;
                }
            });
        }

        $scope.updateFuelType = function () {
            $scope.selectedFuelType = $scope.preSelectedFuelType;
            $scope.selectedFuelTypeText = convertCodeToType($scope.selectedFuelType, $scope.fuelTypes);
            getAppTrendsdata();
            
            $scope.toggleFuelSelector();
        };
        //show/hide FuelSelector
        $scope.showFuelSelector = false;
        $scope.toggleFuelSelector = function () {
            $scope.showFuelSelector = !$scope.showFuelSelector;

        };
        $scope.updateMultiChart = function () {
            $scope.showFuelSelector = false;
            getDataForComparison($scope.selectedFuels);
            //drawMultiLineChart($scope.frequencyM, $scope.selectedFuels);
            //getDataForComparison
            
        };
        
        window.addEventListener("orientationchange", function () {
            initializeChart();
        }, false);
        window.addEventListener("resize", function () {
            initializeChart();
        }, false);

        //cancle fuel selection
        $scope.cancelSelection = function () {
            $scope.showFuelSelector = false;
            $scope.preSelectedFuelType = $scope.selectedFuelType;
        }

        function getUrlParameters(name, url) {
            if (!url) url = window.location.href;
            name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
            var regexS = "[\\?&]" + name + "=([^&#]*)";
            var regex = new RegExp(regexS);
            var results = regex.exec(url);
            return results == null ? null : results[1];
        }

        //get the avarage prices for google charts;
        function getAveragePrices() {
            $scope.weeklyAvg = [];
            $scope.monthlyAvg = [];
            $scope.yearlyAvg = [];
            $scope.averageData = $scope.trendData.AveragePrices;

            for (var i = 0; i < $scope.averageData.length; i++) {
                if ($scope.averageData[i].Period == "Week") {
                    $scope.weeklyAvg.push([$scope.averageData[i].DisplayCaptured, +((parseFloat($scope.averageData[i].Price)).toFixed(1))]);
                    //$scope.weeklyAvg.push([$filter('dateFormat')($scope.averageData[i].DisplayCaptured, 'week'), +((parseFloat($scope.averageData[i].Price)).toFixed(1))]);
                    //$scope.weeklyAvg.push([new Date($scope.averageData[i].DisplayCaptured), +((parseFloat($scope.averageData[i].Price)).toFixed(1))]);
                } else if ($scope.averageData[i].Period == "Month") {
                    $scope.monthlyAvg.push([$scope.averageData[i].DisplayCaptured, +((parseFloat($scope.averageData[i].Price)).toFixed(1))]);

                } else if ($scope.averageData[i].Period == "Year") {
                    $scope.yearlyAvg.push([$scope.averageData[i].DisplayCaptured, +((parseFloat($scope.averageData[i].Price)).toFixed(1))]);

                }
            };
           
        };
        function updateAveragePrice() {
            for (var i = 0; i < $scope.trendData.Variances.length; i++) {
                if ($scope.trendData.Variances[i].Period.toLowerCase() == $scope.frequency) {
                    $scope.avgPrice = $scope.trendData.Variances[i].Price;
                }
            }
        }
        function drawChart(param) {

            var data;
            var options = {
                //title: 'none',
                //curveType: 'function',
                backgroundColor: '#004477',
                chartArea: {
                    left: 50,
                    right: 30,
                    top: 10,
                    bottom: 40
                },
                hAxis: {
                    textStyle: { color: '#fff' },
                    gridlines: "#fff",
                    baselineColor: '#fff',
                    slantedText: false,
                    format: 'EEE',
                },
                pointSize: 2.5,
                vAxis: {
                    gridlines: { count: 6 },
                    textStyle: { color: '#fff' },
                    baselineColor: '#fff',
                    gridlineColor: '#bbb',
                    format: '0.0'
                },
                series: {
                    0: { color: '#fff', pointShape: 'circle' }
                },
                legend: 'none'
            };


            if (param == 'month') {
                var dataObj = chartData("Monthly", $scope.monthlyAvg, options);
                data = dataObj[0];
                options = dataObj[1];

            }
            else if (param == 'year') {
                var dataObj = chartData("Yearly", $scope.yearlyAvg, options);
                data = dataObj[0];
                options = dataObj[1];

            }
            else {

                var dataObj = chartData("Weekly", $scope.weeklyAvg, options);
                data = dataObj[0];
                options = dataObj[1];

            };
            
            var chart = new google.visualization.LineChart(document.getElementById('chart'));
            chart.draw(data, options);
        };

        function chartData(frequency, priceArr, options) {
            var dataObj = google.visualization.arrayToDataTable([
            [{
                f: frequency,
                type: 'string'
            }, {
                f: 'Prices',
                type: 'number'
            }], ]);
            for (var i = 0; i < priceArr.length; i++) {
                console.log(priceArr[i]);
                dataObj.addRow(priceArr[i]);
            }
            if (dataObj.getNumberOfRows() == 0) {
                dataObj.addRow(['No data available', 0]);

                options.series = {
                    0: {
                        color: 'transparent'
                    }
                }
            }
            return [dataObj, options];

        };

        function loadFuelTypeDropDown() {
            getRefData.fuelTypes().then(function (response) {
                $scope.fuelTypes = response.data;
                $scope.selectedFuelTypeText = convertCodeToType($scope.selectedFuelType, $scope.fuelTypes);
                //set the default values for the fueltype multi selector on multi trend chart
                findSelectedFuels();
                //for (var i = 0; i < $scope.fuelTypes.length; i++) {
                //    var fuelTypeCode = $scope.fuelTypes[i].code;
                //    if (i == 0) {
                //        $scope.selectedFuels[fuelTypeCode] = true;
                //    } else {
                //        $scope.selectedFuels[fuelTypeCode] = false;
                //    }

                //}


            });
        }
        function convertCodeToType(code, types) {
            for (var i = 0; i < types.length; i++) {

                if (code == types[i].code) {
                    return types[i].name;
                }
            }
        };

        
        function getDataForComparison(fuelTypesObj) {
            var fuelTypesObjs = [];
            var selectedFuelTypes = [];
            
            for (var fuelCode in fuelTypesObj) {
                
                if (fuelTypesObj.hasOwnProperty(fuelCode) && fuelTypesObj[fuelCode] == true) {
                    selectedFuelTypes.push(fuelCode);
                    //object array for API call
                    var fuelType = {};
                    fuelType.code = fuelCode;
                    fuelTypesObjs.push(fuelType);

                }
            }

            var selectedFuelTypesParametters;
            if ($scope.local_currentLocationLattitude != null && $scope.local_currentLocationLongitude != null) {
                selectedFuelTypesParametters = {
                    "location": {
                        "latitude": $scope.local_currentLocationLattitude,
                        "longitude": $scope.local_currentLocationLongitude

                    },
                    "fueltypes": fuelTypesObjs
                };
            }
            else {
                selectedFuelTypesParametters = {
                    "fueltypes": fuelTypesObjs
                };
            }


            var jsonFuels = JSON.stringify(selectedFuelTypesParametters);

            getTrendData.multiData(jsonFuels).then(function (response) {
                $scope.trendDataComparison = response.data;
                //google.charts.setOnLoadCallback(drawMultiLineChart);
                if (selectedFuelTypes.length > 0) {
                    drawMultiLineChart($scope.frequencyM, $scope.selectedFuels, selectedFuelTypes);
                }
                else{
                    drawEmptyMultiLineChart();
                }
                
            });
        }
        //
        function drawEmptyMultiLineChart() {
            var dataObj = google.visualization.arrayToDataTable([
                      [{
                          f: $scope.frequencyM,
                          type: 'string'
                      }, {
                          f: 'Prices',
                          type: 'number'
                      }], ]);


            dataObj.addRow(['Please select at least one fuel type', 0]);


            var optionsEmptyChart = {
                //title: 'none',
                //curveType: 'function',
                backgroundColor: '#004477',
                chartArea: {
                    left: 50,
                    right: 30,
                    top: 10,
                    bottom: 40
                },
                hAxis: {
                    textStyle: { color: '#fff' },
                    gridlines: "#fff",
                    baselineColor: '#fff',
                    slantedText: false,
                    format: 'EEE',
                },
                pointSize: 2.5,
                vAxis: {
                    gridlines: { count: 6 },
                    textStyle: { color: '#fff' },
                    baselineColor: '#fff',
                    gridlineColor: '#bbb',
                    format: '0.0'
                },
                series: {
                    0: { color: 'transparent' }
                },
                legend: 'none'
            };


            var emptyChart = new google.visualization.LineChart(document.getElementById('multi-line-chart'));

            emptyChart.draw(dataObj, optionsEmptyChart);
        }
        //GeoLocation Related
        function getGeoLocation () {
            if (navigator.geolocation) {
                var positionOptions = {
                    enableHighAccuracy: true,
                    timeout: 10 * 1000 // 10 seconds
                };

                navigator.geolocation.getCurrentPosition(geolocationSuccess, geolocationError, positionOptions);
            } else {
                console.warn("Your browser doesn't support the Geolocation API");
                initializeChart();
            }
        }
        function geolocationError(err) {
            
            console.warn('ERROR(' + err.code + '): ' + err.message);
            initializeChart();
            if (err.code == 1) {
                
            }
        }

        function geolocationSuccess(position) {
            $scope.$apply(function () {
                var initialLat = $scope.local_currentLocationLattitude;
                $scope.local_currentLocationLattitude = position.coords.latitude;
                $scope.local_currentLocationLongitude = position.coords.longitude;

                //reload data for trends(all views), if it location is shared first time.
                if (initialLat == null) {
                    console.log('first time loc');
                    initializeChart();
                }
            });
            console.log($scope.local_currentLocationLattitude, $scope.local_currentLocationLongitude);
            //location.reload();
        }

        function drawMultiLineChart(frequency, fuelTypesObj, selectedFuelTypes) {
           
            var trendData = [[frequency]];
            var TrendDataAPI = $scope.trendDataComparison;
            
            //create the data table head
            trendData[0] = trendData[0].concat(selectedFuelTypes);

            //datatable to be plotted
            //get the relevant dates
            var Dates = [];

            for (var i = 0; i < TrendDataAPI.AveragePrices.length; i++) {
                if (TrendDataAPI.AveragePrices[i].Period == frequency && (Dates.indexOf(TrendDataAPI.AveragePrices[i].Captured) < 0)) {
                    Dates.push(TrendDataAPI.AveragePrices[i].Captured)
                }
            }
            //create the empty data table
            var DataTable = [];
            for (var j = 0; j < Dates.length; j++) {
                DataTable[j] = [];
                for (var i = 0; i < selectedFuelTypes.length + 1; i++) {
                    DataTable[j][i] = "";
                };
            }
            
            //plot the average prices in. 
            for (var i = 0; i < TrendDataAPI.AveragePrices.length; i++) {
                
                if (TrendDataAPI.AveragePrices[i].Period == frequency
                    && Dates.indexOf(TrendDataAPI.AveragePrices[i].Captured) >= 0
                    && selectedFuelTypes.indexOf(TrendDataAPI.AveragePrices[i].Code) >= 0) {
                    var xPos = Dates.indexOf(TrendDataAPI.AveragePrices[i].Captured);
                    var yPos = selectedFuelTypes.indexOf(TrendDataAPI.AveragePrices[i].Code);
                    
                    if (frequency == "Week") {
                        DataTable[xPos][0] = $filter('dateFormat')(TrendDataAPI.AveragePrices[i].Captured, 'week')
                    } else if (frequency == "Month") {
                        DataTable[xPos][0] = $filter('dateFormat')(TrendDataAPI.AveragePrices[i].Captured, 'month')
                    }
                    else {
                        DataTable[xPos][0] = TrendDataAPI.AveragePrices[i].Captured;
                    }


                    DataTable[xPos][yPos + 1] = TrendDataAPI.AveragePrices[i].Price;
                }
            }



            trendData = trendData.concat(DataTable);

            var data = google.visualization.arrayToDataTable(trendData);

            var options = {

                backgroundColor: '#004477',
                chartArea: {
                    left: 50,
                    right: 30,
                    top: 10,
                    bottom: 40
                },
                hAxis: {
                    textStyle: { color: '#fff' },
                    gridlines: "#fff",
                    baselineColor: '#fff',
                    slantedText: false,
                    format: 'EEE',
                },
                pointSize: 2.5,
                vAxis: {
                    gridlines: { count: 6 },
                    textStyle: { color: '#fff' },
                    baselineColor: '#fff',
                    gridlineColor: '#bbb',
                    format:'0.0'
                },

                legend: "none",
                //animation: {
                //    duration: 1000,
                //    easing: 'in',
                //    startup: true
                //}

            };

            var legendColors = {
                E10: "#fff",
                E85: "#72fc72",
                U91: "#00e1ff",
                P95: "#ff6b8f",
                P98: "#ffff7d",
                DL: "#ff8736",
                PDL: "#e67dff",
                B20: "#feba2d",
                LPG: "#00bf7a",
                CNG: "#7bffd3",
                LNG: "#03b9f6"
            };

            //var pointShapes = {
            //    E10: "circle",
            //    E85: "triangle",
            //    U91: "square",
            //    P95: "diamond",
            //    P98: "star",
            //    DL: "polygon",
            //    PDL: "circle",
            //    B20: "triangle",
            //    LPG: "square",
            //    CNG: "diamond",
            //    LNG: "star"
            //};

            options.series = {};
            for (var i = 0; i < selectedFuelTypes.length; i++) {

                options.series[i] = {};
                options.series[i].color = legendColors[selectedFuelTypes[i]];
                //options.series[i].pointShape = pointShapes[selectedFuelTypes[i]];
            }
            var container = document.getElementById('multi-line-chart');
            container.style.display = 'block';

            var chart = new google.visualization.LineChart(container);
            google.visualization.events.addListener(chart, 'ready', function () {
                container.style.display = 'block';
                container.style.width = "100%";
            });
            chart.draw(data, options);

            if (frequency == undefined) {
                frequency = "Week"
            }
            if (frequency == "Week") {
                $scope.multiChartTitle = "7-Day Avg Price";
            } else if (frequency == "Month") {
                $scope.multiChartTitle = "28-Day Avg Price";
            } else if (frequency == "Year") {
                $scope.multiChartTitle = "12 Month Avg Price";
            }
            /*

            if (fuelTypesObj == undefined) {
                fuelTypesObj = {
                    "E10": true,
                    "U91": false,
                    "E85": false,
                    "P95": false,
                    "P98": false,
                    "DL": false,
                    "PDL": false,
                    "B20": false,
                    "LPG": false,
                    "CNG": false,
                    "LNG": false
                }

            }
            if (frequency == undefined) {
                frequency = "Week"
            }
            if (frequency == "Week") {
                $scope.multiChartTitle = "7-Day Average Price";
            } else if (frequency == "Month") {
                $scope.multiChartTitle = "28-Day Average Price";
            } else if (frequency == "Year") {
                $scope.multiChartTitle = "12 Month Average Price";
            }
            var selectedFuelTypes = [];
            var trendData = [[frequency]];
            

            //draw an empty chart if no fuel or H2 or EV was selected.
            if (selectedFuelTypes.length == 0) {
                return;
                var dataObj = google.visualization.arrayToDataTable([
                      [{
                          f: frequency,
                          type: 'string'
                      }, {
                          f: 'Prices',
                          type: 'number'
                      }], ]);


                dataObj.addRow(['Please select at least one fuel type', 0]);


                var optionsEmptyChart = {
                    //title: 'none',
                    //curveType: 'function',
                    backgroundColor: '#004477',
                    chartArea: {
                        left: 50,
                        right: 30,
                        top: 10,
                        bottom: 40
                    },
                    hAxis: {
                        textStyle: { color: '#fff' },
                        gridlines: "#fff",
                        baselineColor: '#fff',
                        slantedText: false,
                        format: 'EEE',
                    },
                    pointSize: 2.5,
                    vAxis: {
                        gridlines: { count: 6 },
                        textStyle: { color: '#fff' },
                        baselineColor: '#fff',
                        gridlineColor: '#bbb'

                    },
                    series: {
                        0: { color: 'transparent' }
                    },
                    legend: 'none'
                };


                var emptyChart = new google.visualization.LineChart(document.getElementById('multi-line-chart'));

                emptyChart.draw(dataObj, optionsEmptyChart);
                selectedFuelTypes = [];
                return;
                
            }*/
        }

        /*
        function getCurrentPosition(callback) {
            var a, b;
            navigator.geolocation.getCurrentPosition(function (data) {
                var locationObj = { "latitude": data.coords.latitude, "longitude": data.coords.longitude };
                callback(locationObj,a,b);
            }, function (error) {
                var locationObj = { "latitude": -33.8693325, "longitude": 151.2094033 };
                callback(locationObj,a,b);
            })
        }

       
       

        


        getRefData.fuelTypes().then(function (response) {
            $scope.fuelTypes = response.data;
            $scope.selectedFuelTypeText = convertCodeToType($scope.selectedFuelType, $scope.fuelTypes);
            //set the default values for the fueltype multi selector on multi trend chart
        
            for (var i = 0; i < $scope.fuelTypes.length; i++) {
                var fuelTypeCode = $scope.fuelTypes[i].code;
                if (i == 0) {
                    $scope.selectedFuels[fuelTypeCode] = true;
                } else {
                    $scope.selectedFuels[fuelTypeCode] = false;
                }
                
            }
            
           
        });
     
        //convert fueltype code to name
        function convertCodeToType(code, types) {
            for (var i=0; i < types.length; i++) {
           
                if (code == types[i].code) {
                    return types[i].name;
                }
            }
        };

      
        
        
       
        //single chart update
        $scope.update = function () {
            //turn off the fuel selector
            $scope.showFuelSelector = false;
            
            //set the selected fuel type as the selected button value
            $scope.selectedFuelType = $scope.preSelectedFuelType;
            $scope.selectedFuelTypeText = convertCodeToType($scope.selectedFuelType, $scope.fuelTypes);
            
            //reset the selected Fuel for multi-trend chart, keep the selection made on single chart pass on to multi chart
            //if ($scope.selectedFuels.length > 0) {
                for (var key in $scope.selectedFuels) {
                    if (key == $scope.selectedFuelType) {
                        $scope.selectedFuels[key] = true;
                    } else {
                        $scope.selectedFuels[key] = false;
                    }
                }
                if ($scope.frequency == "week") {
                    $scope.frequencyM = "Week";
                } else if ($scope.frequency == "month") {
                    $scope.frequencyM = "Month";
                } else if ($scope.frequency == "year") {
                    $scope.frequencyM = "Year"
                }
                drawMultiLineChart($scope.frequencyM, $scope.selectedFuels);
               
                
            // }
                
            //get data based on the fuel type
                getTrendData.data($scope.selectedFuelType).then(function (response) {

                $scope.trendData = response.data;
             
                getAveragePrices();
                
                
                
                //update the interface
                
                switch ($scope.frequency) { 
                    case 'week':
                        for (var i = 0; i < $scope.trendData.Variances.length; i++) {
                            if ($scope.trendData.Variances[i].Period == "Week") {
                                $scope.highestPrice = $scope.trendData.Variances[i].MaximumPrice;
                                $scope.highestPriceWhen = $scope.trendData.Variances[i].MaximumWhenString;
                                $scope.lowestPrice = $scope.trendData.Variances[i].MinimumPrice;
                                $scope.lowestPriceWhen = $scope.trendData.Variances[i].MinimumWhenString;
                                
                                $scope.variance = $scope.trendData.Variances[i].Variance;
                                $scope.avgPrice = $scope.trendData.Variances[i].Price;
                            };
                        };
                       
                       
                        drawChart('week');
                        break;
                    case 'month': 
                        for (var i = 0; i < $scope.trendData.Variances.length; i++) {
                            if ($scope.trendData.Variances[i].Period == "Month") {
                                $scope.highestPrice = $scope.trendData.Variances[i].MaximumPrice;
                                $scope.highestPriceWhen = $scope.trendData.Variances[i].MaximumWhenString;

                                $scope.lowestPrice = $scope.trendData.Variances[i].MinimumPrice;
                                $scope.lowestPriceWhen = $scope.trendData.Variances[i].MinimumWhenString;
                               
                                $scope.variance = $scope.trendData.Variances[i].Variance;
                                $scope.avgPrice = $scope.trendData.Variances[i].Price;
                            };
                        };
                        drawChart('month');
                        break;
                    case 'year':
                        for (var i = 0; i < $scope.trendData.Variances.length; i++) {
                            if ($scope.trendData.Variances[i].Period == "Year") {
                                $scope.highestPrice = $scope.trendData.Variances[i].MaximumPrice;
                                $scope.highestPriceWhen = $scope.trendData.Variances[i].MaximumWhenString;

                                $scope.lowestPrice = $scope.trendData.Variances[i].MinimumPrice;
                                $scope.lowestPriceWhen = $scope.trendData.Variances[i].MinimumWhenString;
                                
                                $scope.variance = $scope.trendData.Variances[i].Variance;
                                $scope.avgPrice = $scope.trendData.Variances[i].Price;
                            };
                        };
                        drawChart('year');
                        break;

                    default:
                        $scope.highestPrice = "not available";
                        $scope.lowestPrice = "not available";
                        $scope.variance = "not available";
                }


            });
        };
     

        
        //google chart
        google.charts.load('current', { 'packages': ['corechart'] });
        google.charts.setOnLoadCallback(drawChart);

        window.addEventListener("orientationchange", function () {
            drawChart($scope.frequency);
           
        }, false);
        window.addEventListener("resize", function () {
            drawChart($scope.frequency);
          
        }, false);

        
        //single chart end

        //multiple chart start

        $scope.frequencyM = 'Week';

        google.charts.setOnLoadCallback(drawMultiLineChart);

        function drawMultiLineChart(frequency, fuelTypesObj) {
         
            if (fuelTypesObj == undefined) {
                fuelTypesObj = {
                    "E10": true,
                    "U91": false,
                    "E85": false,
                    "P95": false,
                    "P98": false,
                    "DL": false,
                    "PDL": false,
                    "B20": false,
                    "LPG": false,
                    "CNG": false,
                    "LNG": false
                }

            }
            if (frequency == undefined) {
                frequency="Week"
            }
            if (frequency == "Week") {
                $scope.multiChartTitle = "7-Day Average Price";
            } else if (frequency == "Month") {
                $scope.multiChartTitle = "28-Day Average Price";
            } else if (frequency == "Year") {
                $scope.multiChartTitle = "12 Month Average Price";
            }
            var selectedFuelTypes = [];
            var fuelTypesObjs = [];
            var trendData = [[frequency]];

            for (var fuelCode in fuelTypesObj) {
                if (fuelTypesObj.hasOwnProperty(fuelCode)&&fuelTypesObj[fuelCode] == true) {
                    
                    selectedFuelTypes.push(fuelCode);
                    //object array for API call
                    var fuelType = {};
                    fuelType.code = fuelCode;
                    fuelTypesObjs.push(fuelType);
                    
                }
            }
            
            
            //draw an empty chart if no fuel or H2 or EV was selected.
            if (selectedFuelTypes.length == 0
                ||selectedFuelTypes.indexOf("H2")>=0
                ||selectedFuelTypes.indexOf("EV") >=0) {
               
                var dataObj = google.visualization.arrayToDataTable([
                      [{
                          f: frequency,
                          type: 'string'
                      }, {
                          f: 'Prices',
                          type: 'number'
                      }], ]);
               
                
                dataObj.addRow(['Please select at least one fuel type', 0]);

                  
                var optionsEmptyChart = {
                    //title: 'none',
                    //curveType: 'function',
                    backgroundColor: '#004477',
                    chartArea: {
                        left: 50,
                        right: 30,
                        top: 10,
                        bottom: 40
                    },
                    hAxis: {
                        textStyle: { color: '#fff' },
                        gridlines: "#fff",
                        baselineColor: '#fff',
                        slantedText: false,
                        format: 'EEE',
                    },
                    pointSize: 2.5,
                    vAxis: {
                        gridlines: { count: 6 },
                        textStyle: { color: '#fff' },
                        baselineColor: '#fff',
                        gridlineColor: '#bbb'

                    },
                    series: {
                        0: { color: 'transparent' }
                    },
                    legend: 'none'
                };

                    
                var emptyChart = new google.visualization.LineChart(document.getElementById('multi-line-chart'));

                emptyChart.draw(dataObj, optionsEmptyChart);
                selectedFuelTypes = [];
                return;
                
            }

            //if at lease one fuel type is selected,call the trend API before getting the user's location
            getCurrentLocation(drawChartWithLocation);

            function getCurrentLocation(callback) {
                if (navigator.geolocation) {
                    navigator.geolocation.getCurrentPosition(function (position) {
                        callback(position);
                    });
                }
                else {
                    throw new Error("Your browser does not support geolocation.");
                }
            }

            function drawChartWithLocation(location) {
                
                var selectedFuelTypesParametters = {
                    "location": {
                        "latitude": location.coords.latitude,
                        "longitude": location.coords.longitude

                    },
                    "fueltypes": fuelTypesObjs
                };
               

                var jsonFuels = JSON.stringify(selectedFuelTypesParametters);

                getTrendData.multiData(jsonFuels).then(function (response) {

                    var TrendDataAPI = response.data;
                   
                    //create the data table head
                    trendData[0] = trendData[0].concat(selectedFuelTypes);

                    //datatable to be plotted
                    //get the relevant dates
                    var Dates = [];

                    for (var i = 0; i < TrendDataAPI.AveragePrices.length; i++) {
                        if (TrendDataAPI.AveragePrices[i].Period == frequency && (Dates.indexOf(TrendDataAPI.AveragePrices[i].Captured) < 0)) {
                            Dates.push(TrendDataAPI.AveragePrices[i].Captured)
                        }
                    }
                    //create the empty data table
                    var DataTable = [];
                    for (var j = 0; j < Dates.length; j++) {
                        DataTable[j] = [];
                        for (var i = 0; i < selectedFuelTypes.length + 1; i++) {
                            DataTable[j][i] = "";
                        };
                    }
                    //plot the average prices in. 
                    for (var i = 0; i < TrendDataAPI.AveragePrices.length; i++) {
                        if (TrendDataAPI.AveragePrices[i].Period == frequency
                            && Dates.indexOf(TrendDataAPI.AveragePrices[i].Captured) >= 0
                            && selectedFuelTypes.indexOf(TrendDataAPI.AveragePrices[i].Code) >= 0) {
                            var xPos = Dates.indexOf(TrendDataAPI.AveragePrices[i].Captured);
                            var yPos = selectedFuelTypes.indexOf(TrendDataAPI.AveragePrices[i].Code);

                            if (frequency == "Week") {
                                DataTable[xPos][0] = $filter('dateFormat')(TrendDataAPI.AveragePrices[i].Captured, 'week')
                            } else if (frequency == "Month") {
                                DataTable[xPos][0] = $filter('dateFormat')(TrendDataAPI.AveragePrices[i].Captured, 'month')
                            }
                            else {
                                DataTable[xPos][0] = TrendDataAPI.AveragePrices[i].Captured;
                            }


                            DataTable[xPos][yPos + 1] = TrendDataAPI.AveragePrices[i].Price;
                        }
                    }



                    trendData = trendData.concat(DataTable);


                    var data = google.visualization.arrayToDataTable(trendData);

                    var options = {

                        backgroundColor: '#004477',
                        chartArea: {
                            left: 50,
                            right: 30,
                            top: 10,
                            bottom: 40
                        },
                        hAxis: {
                            textStyle: { color: '#fff' },
                            gridlines: "#fff",
                            baselineColor: '#fff',
                            slantedText: false,
                            format: 'EEE',
                        },
                        pointSize: 2.5,
                        vAxis: {
                            gridlines: { count: 6 },
                            textStyle: { color: '#fff' },
                            baselineColor: '#fff',
                            gridlineColor: '#bbb'

                        },

                        legend: "none",
                        //animation: {
                        //    duration: 1000,
                        //    easing: 'in',
                        //    startup: true
                        //}

                    };

                    var legendColors = {
                        E10: "#fff",
                        E85: "#72fc72",
                        U91: "#00e1ff",
                        P95: "#ff6b8f",
                        P98: "#ffff7d",
                        DL: "#ff8736",
                        PDL: "#e67dff",
                        B20: "#feba2d",
                        LPG: "#00bf7a",
                        CNG: "#7bffd3",
                        LNG: "#03b9f6"
                    };

                    //var pointShapes = {
                    //    E10: "circle",
                    //    E85: "triangle",
                    //    U91: "square",
                    //    P95: "diamond",
                    //    P98: "star",
                    //    DL: "polygon",
                    //    PDL: "circle",
                    //    B20: "triangle",
                    //    LPG: "square",
                    //    CNG: "diamond",
                    //    LNG: "star"
                    //};

                    options.series = {};
                    for (var i = 0; i < selectedFuelTypes.length; i++) {

                        options.series[i] = {};
                        options.series[i].color = legendColors[selectedFuelTypes[i]];
                        //options.series[i].pointShape = pointShapes[selectedFuelTypes[i]];
                    }
                    var container = document.getElementById('multi-line-chart');
                    container.style.display = 'block';

                    var chart = new google.visualization.LineChart(container);
                    google.visualization.events.addListener(chart, 'ready', function () {
                        container.style.display = 'block';
                        container.style.width = "100%";
                    });
                    chart.draw(data, options);
                });
            }

           
          
            
       
        };
        
       
        $scope.updateMultiChart = function () {
            $scope.showFuelSelector = false;
            console.log($scope.selectedFuels);
           drawMultiLineChart($scope.frequencyM, $scope.selectedFuels);
            
        };
        
        window.addEventListener("orientationchange", function () {
            $scope.updateMultiChart();

        }, false);
        window.addEventListener("resize", function () {
            $scope.updateMultiChart();

        }, false);
        */
        }]);;
$(document).ready(function () {

    //solve the problem of home page not refreshing when already on itself
    $('.menu-home').click(function () {
        //console.log($(this).attr('href'));
        window.location.href = $(this).attr('href');
    });

    var boolIsFirstTime = getCookie("fuelcheckIsFirstTimeOpen");

    if ($('#page-home').length <= 0 || (boolIsFirstTime!=='' && boolIsFirstTime!==null)) {
        return;
    }

    //showAddToHomeInfo();
    $('#close-modal-homescreen').bind('click', function (e) {
        $('.modal-add-to-homescreen').fadeOut();
        e.preventDefault();
    });

    function showAddToHomeInfo() {
        var md = new MobileDetect(window.navigator.userAgent);
        /*$('.modals').append("Mobile : " + md.mobile());          // 'Sony'
        $('.modals').append("<br>Phone : " + md.phone());           // 'Sony'
        $('.modals').append("<br>tablet : " + md.tablet());          // null
        $('.modals').append("<br>Browser : " + md.userAgent());       // 'Safari'
        $('.modals').append("<br>OS : " + md.os());              // 'AndroidOS'
        $('.modals').append("<br> isiPhone : " + md.is('iPhone'));      // false
        $('.modals').append("<br> Bot : " + md.is('bot'));         // false
        $('.modals').append("<br> Webkit : " + md.version('Webkit'));         // 534.3
        $('.modals').append("<br> Build : " + md.versionStr('Build'));       // '4.1.A.0.562'
        $('.modals').append("<br> is Playstation : " + md.match('playstation|xbox')); // false
        */
        setCookie("fuelcheckIsFirstTimeOpen", "false", 365);

        var strOS = md.os();
        var strBrowser = md.userAgent();
        var pathImages = window.fuelcheck.settings.baseCDNUrl + '/img/';
        var imageName;
        var boolShowModal = false;
      
        if (strOS === "AndroidOS" && strBrowser === "Chrome") {
            imageName = "homescreen_popup_android.jpg";
            boolShowModal = true;
        }

        if (strOS === "iOS" && strBrowser === "Safari") {
            imageName = "homescreen_popup_iOS.jpg"; 
            boolShowModal = true;
        }

        if (strOS === "WindowsPhoneOS" && strBrowser === "IE") {
            imageName = "homescreen_popup_windows.jpg";
            boolShowModal = true;
        }

        if (boolShowModal === true) {
            $('#img-homescreen-modal').attr('src', pathImages + imageName);
            $('.modal-add-to-homescreen').fadeIn();
        }
        
    }

    function setCookie(cname, cvalue, exdays) {
        var d = new Date();
        d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));
        var expires = "expires=" + d.toUTCString();
        document.cookie = cname + "=" + cvalue + "; " + expires;
    }

    function getCookie(cname) {
        var name = cname + "=";
        var ca = document.cookie.split(';');
        for (var i = 0; i < ca.length; i++) {
            var c = ca[i];
            while (c.charAt(0) == ' ') {
                c = c.substring(1);
            }
            if (c.indexOf(name) == 0) {
                return c.substring(name.length, c.length);
            }
        }
        return "";
    }
});;
