﻿
App.Search.Results = function() {

    /* Private */

    /* Properties */

    //extend the search object
    var cmp = App.Search;

    var templates = {

        filters: '' +

            '{for f in filters}' +
                '<li id="f${f[2]}-${f[0]}" class="clearfix ${f[3]}"><div class="icon"></div>${f[1]}</li>' +
            '{/for}',

        features: '' +

            '<div class="triangle sp"></div>' +
                '<div class="bubble">' +
                    '<div class="top sp"></div>' +
                    '<div class="middle sp">' +
                        '<div class="filters inner dark">' +
                            '<div class="TVI-data">{ "id": ${id}, "type": "${type}" }</div>' +
                            '<ul>' +
                            '{for i in items}' +
                                '<li id="f-${i[1]}" class="filter clearfix {if i[4] === \'on\'} filterOn{/if}{if i[4] === \'off\'} filterOff{/if}">' +
                                    '<div class="buttons clearfix">' +
                                        '<div class="numbers"><span>{if i[5] > 0}${i[5]}{else}--{/if}</span></div>' +
                                        '<div class="tick"></div>' +
                                        '<div class="cross"></div>' +
                                    '</div>' +
                                    '<span>${i[2]}</span>' +
                                '</li>' +
                            '{/for}' +
                            '</ul>' +
                        '</div>' +
                    '</div>' +
                    '<div class="bottom sp"></div>' +
                '</div>' +
            '</div>'

    };

    var poiPopupEl;





    /* Methods */

    var init = function() {

        /* Constructor */

        


        //set sorting
        if (cmp.args.sort !== undefined) {

            $('#sorting-control').val(cmp.args.sort);
            $('#sorting-control').change();

        }


        //handle sorting changed event
        TVI.event('#sorting-control', 'change', function() {

            cmp.searchForm.hiddenData.type = 'sort';

            cmp.searchForm.handler.call();

        });


        //update filters
        $('#searchFilters .currentFilters').html(templates.filters.process({ filters: cmp.filters.rows }));


        //handle paging
        TVI.event('#paging A', 'click', function() {

            if (this.id === 'btn-previous') {

                if (!cmp.searchForm.hiddenData.page) { return; }

                cmp.searchForm.hiddenData.page--;

            }

            if (this.id === 'btn-next') {

                if (!cmp.searchForm.hiddenData.page) { cmp.searchForm.hiddenData.page = 1; }

                cmp.searchForm.hiddenData.page++;

            }

            cmp.searchForm.hiddenData.type = 'paging';

            cmp.searchForm.handler.call();

        });


        //handle save button
        TVI.event('#btn-save', 'click', function() {

            //check user is logged in
            if (!App.user.loggedIn) {

                TVI.Popup.show({

                    title: 'Save Search',
                    template: 'Please <a href="/login">log in</a> or <a href="/registration">create an account</a> to manage your saved searches.'

                });

                return;

            }


            //run query to save search
            TVI.Data.query({

                query: 'Search_save',
                data: cmp.searchForm.val(),
                success: function() {

                    TVI.Popup.show({

                        title: 'Save Search',
                        template: 'Thank you, your search has been saved to your account.<br /><br /><a href="/my/saved-searches">Click here to manage your saved searches</a>.'

                    });
                
                }

            });

        });


        //handle category click event to show filters in category
        TVI.event('#searchFilterFacilities A, #searchFilterAmenities A', 'click', function() {

            //check if clicking facilities or amenities
            var type = $(this).parents('#searchFilterFacilities:first').length > 0 ? 'f' : 'a';

            //get popup element
            var el = $('#searchFiltersPopup');

            //get category
            var id = this.id.replace(type + 'c-', '');

            //process facilities for this category and add LI items
            el.html(templates.features.process({ id: id, type: type, items: getFilters(id, type) }));

            //calculate new popup position
//            el.css({ top: $(this).parent().position().top - (el.height() / 2) + 22 });

            el.css({ top: $(this).parent().offset().top - (el.height() / 2) - 178, left: $(this).parent().offset().left + 224 });

            el.find('.triangle').css({ top: (el.height() / 2) - 14 });

            el.show();

            //handle body click event to hide filters
            $('BODY').unbind('click', hideFilterPopup);
            $('BODY').bind('click', hideFilterPopup);

        });


        //handle filter popup item click to add filter and run search
        TVI.event('#searchFiltersPopup .tick, #searchFiltersPopup .cross', 'click', function() {

            var filterEl = $(this).parents('.filter');
            var meta = TVI.meta($(this).parents('.filters'));

            var id = filterEl.attr('id').replace('f-', '');
            var name = filterEl.find('SPAN:last').text();
            var state = $(this).hasClass('tick') ? 'on' : 'off';

            var categoryID = meta.id;
            var type = meta.type;

            //check filter doesn't already exist
            var count = cmp.filters.rows.length;
            var removed = false;

            for (var i = 0; i < count; i++) {

                if (cmp.filters.rows[i][2] === type && cmp.filters.rows[i][0] == id) {

                    //remove filter if clicked when on
                    if (cmp.filters.rows[i][3] === state) { cmp.filters.rows.remove(i); removed = true; break; }

                    cmp.filters.rows[i][3] = state;

                }

            }

            filterEl.removeClass('filterOn');
            filterEl.removeClass('filterOff');

            if (!removed) {

                cmp.filters.rows.push([id, name, type, state]);

                filterEl.addClass(state === 'on' ? 'filterOn' : 'filterOff');

            }



            //create callback to refresh filter counts
            cmp.searchForm.callbackArgs = meta;

            cmp.searchForm.callback = function(d) {

                //get popup element
                var el = $('#searchFiltersPopup');

                //process facilities for this category and add LI items                
                $('#searchFiltersPopup').html(templates.features.process({

                    id: d.id,
                    type: d.type,
                    items: getFilters(d.id, d.type)

                }));

            };


            //run search
            cmp.searchForm.handler.call();

        });


        TVI.event('#searchFilters .currentFilters .icon', 'click', function() {

            var index = $('#searchFilters .currentFilters .icon').index(this);

            cmp.filters.rows.remove(index);

            //run search
            cmp.searchForm.handler.call();

        });


        //initialise map
        TVI.Mapping.load({

            success: function() {

                cmp.map = new TVI.Mapping.GMap({

                    id: 'campsiteLocationMap',
                    longitude: '-1.505126953125',
                    latitude: '52.37224556866933',
                    zoomLevel: 7,
                    useCustomMarker: true

                });


                //add search markers
//                if (cmp.pointers.rows.length > 0){
//            
//                    for (var i = 0, pointerCount = cmp.pointers.rows.length; i < pointerCount; i++) {

//                        cmp.map.addMarker({

//                            id: 'p' + cmp.pointers.rows[i][0],
//                            longitude: cmp.pointers.rows[i][1],
//                            latitude: cmp.pointers.rows[i][2],
//                            customMarkerURL: '/i/mapPointer.png'

//                        });
//    
//                    }
//            
//                }

////                var mapPointerX = cmp.args.mapPointerX || cmp.args.mapX || 0;
////                var mapPointerY = cmp.args.mapPointerY || cmp.args.mapY || 0;

////                if (mapPointerX != 0){
////                
////                    cmp.map.addMarker({

////                        id: 0,
////                        longitude: mapPointerX,
////                        latitude: mapPointerY,
////                        customMarkerURL: '/i/mapPointer.png'

////                    });
////                
////                }

//                
//                //add markers if necessary
//                var count = cmp.markers.rows.length;

//                if (count > 0) {

//                    for (var i = 0; i < count; i++) {

//                        cmp.map.addMarker({

//                            id: cmp.markers.rows[i][0],
//                            longitude: cmp.markers.rows[i][1],
//                            latitude: cmp.markers.rows[i][2],
//                            customMarkerURL: '/i/mapflag.png',
//                            markerClicked: markerClicked

//                        });
//                        
//                    }

//                    

//                }
////                else{
////                
////                    //center map on search location
////                    if (mapPointerX !== 0){
////                    
////                        cmp.map.setCentre({
////                        
////                            longitude: mapPointerX,
////                            latitude: mapPointerY,
////                            zoomLevel: 7
////                        
////                        });
////                    
////                    }
////                
////                }



                //add poi markers 
                setMapMarkers();



                if (cmp.pointers.rows.length + cmp.markers.rows.length > 0){
                
                    cmp.map.fitMarkers();
                
                }

                //add handler for dragged event to load more markers
                cmp.map.mapDragged({

                    handler: function() {

                        //check if ignoring drag
                        if (cmp.map.ignoreDrag) { return; }

//                        //check more results exist
//                        if (cmp.markers.rows.length >= cmp.meta.rows[0][0]) { return; }

                        //get map bounds
                        var bounds = cmp.map.getBounds();

                        //add bounds to search and get markers
                        cmp.searchForm.hiddenData.type = 'map';
                        cmp.searchForm.hiddenData.minMapX = bounds.longMin;
                        cmp.searchForm.hiddenData.maxMapX = bounds.longMax;
                        cmp.searchForm.hiddenData.minMapY = bounds.latMin;
                        cmp.searchForm.hiddenData.maxMapY = bounds.latMax;
                        
                        cmp.searchForm.handler.call();

                    }

                });

            }

        });

        // Current filter behaviours
        TVI.event('#searchFilters .currentFilters LI', 'mouseenter', function() {
            $(this).addClass('filterHover');
        });
        TVI.event('#searchFilters .currentFilters LI', 'mouseleave', function() {
            $(this).removeClass('filterHover');
        });
        TVI.event('#searchFilters .currentFilters LI .icon', 'mouseenter', function() {
            $(this).addClass('filterIconHover');
        });
        TVI.event('#searchFilters .currentFilters LI .icon', 'mouseleave', function() {
            $(this).removeClass('filterIconHover');
        });


        // Search Filter Popup Behaviours
        TVI.event('#searchFiltersPopup .tick', 'mouseover', function() {
            $(this).parents('.buttons').addClass('tickHover');
        });
        TVI.event('#searchFiltersPopup .tick', 'mouseout', function() {
            $(this).parents('.buttons').removeClass('tickHover');
        });
        TVI.event('#searchFiltersPopup .cross', 'mouseover', function() {
            $(this).parents('.buttons').addClass('crossHover');
        });
        TVI.event('#searchFiltersPopup .cross', 'mouseout', function() {
            $(this).parents('.buttons').removeClass('crossHover');
        });





        //setup poi
        poiPopupEl = $('#poiPopup');

        $('#campsiteLocationMap').parent().mousemove(function(e){
        
            poiPopupEl.css({
                top: (e.pageY - 185) + "px",
                left: (e.pageX + 15) + "px"
            });

       }); 


//        cmp.poiForm = new TVI.Form({
//        
//            ID: 'poiForm'
//        
//        });



//        TVI.event('#btn-poi', 'click', function(){            
//       
//            $('#poiForm').show();

//            setTimeout(function(){
//            
//                $('BODY').click(hidePOIForm);
//            
//            }, 1);
//       
//        });



//        TVI.event('#poiForm INPUT', 'change', function(){

//            setMapMarkers();


//            var ids = '';

//            $('#poiForm INPUT:checked').each(function(){
//            
//                if (ids.length > 0){
//                
//                    ids += ',';
//                
//                }

//                ids += $(this).val();
//            
//            });

//            TVI.ajax({
//            
//                url: '/search/default.aspx/savePOI',
//                data: {
//                    ids: ids
//                }
//            
//            });
//       
//        });

    };





    var setMapMarkers = function(){

        cmp.map.clearMarkers();


        //add search markers
        if (cmp.pointers.rows.length > 0){
            
            for (var i = 0, pointerCount = cmp.pointers.rows.length; i < pointerCount; i++) {

                cmp.map.addMarker({

                    id: 'p' + cmp.pointers.rows[i][0],
                    longitude: cmp.pointers.rows[i][1],
                    latitude: cmp.pointers.rows[i][2],
                    customMarkerURL: '/i/mapPointer.png'

                });
    
            }
            
        }

                
        //add markers if necessary
        if (cmp.markers.rows.length > 0) {

            for (var i = 0, count = cmp.markers.rows.length; i < count; i++) {

                cmp.map.addMarker({

                    id: cmp.markers.rows[i][0],
                    longitude: cmp.markers.rows[i][1],
                    latitude: cmp.markers.rows[i][2],
                    customMarkerURL: '/i/mapflag.png',
                    markerClicked: markerClicked

                });
                        
            }                    

        }


        //add poi mrkers
        if (cmp.poi.rows.length > 0){

            var types = [];

            $('#poiForm INPUT').each(function(){

                if ($(this).is(':checked')){
                
                    types.push($(this).val());
                
                }
            
            });
                
            for (var i = 0, count = cmp.poi.rows.length; i < count; i++) {

                var row = cmp.poi.rows[i];

                for (var ii = 0; ii < types.length; ii++) {
                
                    if (row[0] == types[ii]){
                    
                        cmp.map.addMarker({
                        
                            id: 'poi-' + row[0],
                            longitude: row[1],
                            latitude: row[2],
                            name: row[3],
        //                        customMarkerURL: '/i/' + row[3],
                            customMarkerURL: '/i/mapflag.png',
                            markerClicked: poiClicked,
                            markerHovered: poiHovered,
                            markerUnHovered: poiUnHovered

                        });
                    
                    }
                
                }                
                    
            }

        }
    
    };





    var hidePOIForm = function(e){
        
        if (!$(e.target).closest('#poiForm').length) {

            $('#poiForm').hide();

            $('BODY').unbind('click', hidePOIForm);

        };
    
    };





    var getFilters = function(categoryID, type) {

        /* returns filters under the given category */

        type = type === 'f' ? 'facilities' : 'amenities';

        var result = [];
        var count = cmp[type].rows.length;

        for (var i = 0; i < count; i++) {

            if (cmp[type].rows[i][0] == categoryID) { result.push(cmp[type].rows[i]); }

        }

        return result;

    };





    var hideFilterPopup = function(e) {

        /* handles the body click event to hide filter popup */

        if ($(e.target).parents('#searchFiltersPopup:first').length === 0 && $(e.target).parents('.menu:first').length === 0) {

            $('#searchFiltersPopup').hide();

            $('BODY').unbind('click', hideFilterPopup);

        }

    };





    var markerClicked = function() {

        var marker = this;

        TVI.ajax({

            url: TVI.handlers + 'App.Search.aspx/getSummary',
            data: {
                campsiteID: marker.id,
                header: true
            },
            responseType: 'string',
            success: function(d) {

                var summaryEl = $('<table class="grid listings"><tbody>' + d + '</tbody></table>');

                $('#campsiteLocationMapSummary').html(summaryEl);

                App.CampsiteList.setSummary(summaryEl, marker.id);

            }

        });

    };





    var poiHovered = function(){

        //get poi item
        var item;

        for (var i = 0; i < cmp.poi.rows.length; i++) {
    
            if ('poi-' + cmp.poi.rows[i][0] === this.id){
            
                item = cmp.poi.rows[i];

                break;
            
            }

        }

        if (!item){
        
            return;
        
        }

        var t = '' + 
        
            '<div class="clearfix" style="width: 200px; background:White; border:1px solid Gray; padding:10px;">' +
                '<div class="columnLeft" style="width:55px;"><img src="http://www.campingninja.com/files/${item[4]}" alt="" style="width:50px; border:1px solid Gray;"/></div>' + 
                '<div class="columnRight" style="width:145px;">' +
                    '<p style="margin-bottom:5px;"><strong>${item[3]}</strong></p>' +
                    '<span style="font-size:0.8em;">Click for more information.</span>' +
                '</div>' +
            '</div>';

        var html = t.process({ item: item });
            
        poiPopupEl.html(html);
            
        poiPopupEl.show();
    
    };





    var poiUnHovered = function(){
        
        /* Handles marker onmouseout event */
        
        poiPopupEl.hide();
        
    };





    var poiClicked = function() {

        //get item from array
        var id = this.id.replace('poi-', '');

        var item;

        for (var i = 0; i < cmp.poi.rows.length; i++) {
    
            if (cmp.poi.rows[i][0] == id){
            
                item = cmp.poi.rows[i];

                break;
            
            }

        }

        if (item){

            //remove special chars and redirect
            var name = item[3];
        
            name = name.replace(/[^a-zA-Z 0-9]+/g,'').replace(/ /g,'-');

            var url = '/points-of-interest/' + id + '/' + name;

            window.location.href = url;
        
        }

    };





    var show = function(d) {

        //handle 'form' results
        if (this.hiddenData.type === 'form') {

            //show locations if necessary
            if (d.locations === true) {

                TVI.Popup.show({

                    title: 'Choose Your Location',
                    template: '<div id="locations">{for r in rows}<div><a id="location-${r[0]}" href="#">${r[1]}</a></div>{/for}</div>'.process(d)

                });

                return;

            }


            if (d.geoLocations === true) {

                TVI.Popup.show({

                    title: 'Choose Your Location',
                    template: '<div id="geoLocations">{for r in rows}<div><a id="location-${r[0]}" href="#">${r[1]}</a></div>{/for}<br /><div><a id="location-all" href="#">Show All</a></div></div>'.process(d)

                });

                return;

            }


            //update data
            cmp.meta = d.tables[0];
            cmp.campsites = d.tables[1];
            cmp.filters = d.tables[2];
            cmp.facilities = d.tables[3];
            cmp.amenities = d.tables[4];
            cmp.pointers = d.tables[5];
            cmp.poi = d.tables[6];


            //set titles
            var title = 'Campsites';
            var subtitle = cmp.meta.rows[0][0] + ' Campsite' + (cmp.meta.rows[0][0] > 1 ? 's' : '') + ' found';

            if (this.field('name').val() !== '') { title = 'Campsites matching "' + this.field('name').val() + '"'; }

//            if (this.field('keywords').val() !== '') { title = 'Campsites matching "' + this.field('keywords').val() + '"'; }

            if (this.field('location').val() !== '') { title = 'Campsites within ' + this.field('distance').val() + ' mile' + (this.field('distance').val() != '1' ? 's' : '') + ' of ' + this.field('location').val(); }

            if (this.field('pitches').val() !== '') { subtitle = cmp.meta.rows[0][0] + ' Campsite' + (cmp.meta.rows[0][0] > 1 ? 's' : '') + ' available on your dates'; }

            if (cmp.meta.rows[0][0] === 0) { subtitle = 'Sorry, no campsites found'; }

            $('H1').text(title);
            $('H2').text(subtitle);


            //update filters
            $('#searchFilters .currentFilters').html(templates.filters.process({ filters: cmp.filters.rows }));


            //show list results
            $('#results').html(App.CampsiteList.process(cmp.campsites.rows));
            
            TVI.Components.initialize($('#results'));
            

            //show map results
//            var count = cmp.campsites.rows.length;

            cmp.markers.rows = [];
//            cmp.map.clearMarkers();


//            //add search marker
//            if (cmp.pointers.rows.length > 0){
//            
//                for (var i = 0, pointerCount = cmp.pointers.rows.length; i < pointerCount; i++) {

//                    cmp.map.addMarker({

//                        id: 'p' + cmp.pointers.rows[i][0],
//                        longitude: cmp.pointers.rows[i][1],
//                        latitude: cmp.pointers.rows[i][2],
//                        customMarkerURL: '/i/mapPointer.png'

//                    });
//    
//                }
//            
//            }


//            if (count > 0) {

                for (var i = 0, count = cmp.campsites.rows.length; i < count; i++) {

//                    cmp.map.addMarker({

//                        id: cmp.campsites.rows[i][0],
//                        longitude: cmp.campsites.rows[i][5],
//                        latitude: cmp.campsites.rows[i][6],
//                        customMarkerURL: '/i/mapflag.png',
//                        markerClicked: markerClicked

//                    });

                    cmp.markers.rows.push([cmp.campsites.rows[i][0], cmp.campsites.rows[i][5], cmp.campsites.rows[i][6]]);

                }                

//            }


//            //add poi markers
//            for (var i = 0; i < cmp.poi.rows.length; i++) {

//                cmp.map.addMarker({

//                    id: 'poi-' + cmp.poi.rows[i][0],
//                    longitude: cmp.poi.rows[i][1],
//                    latitude: cmp.poi.rows[i][2],
//                    name: cmp.poi.rows[i][3],
//                    customMarkerURL: '/i/mapflag.png',
//                    markerClicked: poiClicked,
//                    markerHovered: poiHovered,
//                    markerUnHovered: poiUnHovered

//                });
//                
//            }

            setMapMarkers();


            if (cmp.campsites.rows.length + cmp.pointers.rows.length + cmp.poi.rows.length > 0){
            
                //fit markers on map but don't reload results
                cmp.map.ignoreDrag = true;
                cmp.map.fitMarkers();
                cmp.map.ignoreDrag = false;
            
            }


            //store map coordinates
            this.hiddenData.mapX = d.mapX;
            this.hiddenData.mapY = d.mapY;

            //clear selected location
            this.hiddenData.locationID = '';
            
            if (this.hiddenData.geoLocationID !== 'all'){
                    
                this.hiddenData.geoLocationID = '';

            }


            //clear summary
            $('#campsiteLocationMapSummary').empty();


            //set paging
            var url = cmp.getURL({ replacePage: true });

            var btnPrevious = $('#btn-previous');
            var btnNext = $('#btn-next');

            btnPrevious.hide();

            if (cmp.meta.rows[0][0] > 50) {

                var url = cmp.getURL({ replacePage: true });

                btnNext.attr('href', url.replace('[pageNo]', '2'));
                btnNext.show();

            }
            else {
                btnNext.hide();
            }


            //run callback if exists

            if (cmp.searchForm.callback !== undefined) {

                cmp.searchForm.callback.call(cmp, cmp.searchForm.callbackArgs || {});

                cmp.searchForm.callback = undefined;
                cmp.searchForm.callbackArgs = undefined;

            }


            //update share button
            if (window.addthis){

                $('#btn-share').attr('addthis:url', 'http://www.campingninja.com' + App.Search.getURL());

                window.addthis.ost = 0;
                window.addthis.ready();
            
            }

            
            return;

        }


        //handle 'map' results
        if (this.hiddenData.type === 'map') {

            //add campsite markers
            var rows = d.tables ? d.tables[0].rows : d.rows;

            var count = rows.length;

            if (count > 0) {

////                var markerCount = cmp.markers.length;
//                var marker;

                for (var i = 0; i < count; i++) {

//                    marker = cmp.map.addMarker({

//                        id: rows[i][0],
//                        longitude: rows[i][1],
//                        latitude: rows[i][2],
//                        customMarkerURL: '/i/mapflag.png',
//                        markerClicked: markerClicked

//                    });

////                    if (marker !== undefined) { cmp.markers.rows.push(rows[i]); }

                    cmp.markers.rows.push(rows[i]);

                }

            }


//            //add POI markers
            if (d.tables && d.tables[1].rows.length > 0){

                cmp.poi.rows = d.tables[1].rows;
//            
//                count = cmp.poi.rows.length;

//                for (var i = 0; i < count; i++) {

//                    cmp.map.addMarker({

//                        id: 'poi-' + cmp.poi.rows[i][0],
//                        longitude: cmp.poi.rows[i][1],
//                        latitude: cmp.poi.rows[i][2],
//                        name: cmp.poi.rows[i][3],
////                        customMarkerURL: '/i/' + rows[i][3],
//                        customMarkerURL: '/i/mapflag.png',
//                        markerClicked: poiClicked,
//                        markerHovered: poiHovered,
//                        markerUnHovered: poiUnHovered

//                    });
//                    
//                }
//            
            }

            setMapMarkers();

            this.hiddenData.type = '';
            this.hiddenData.mapZoom = 0;
            this.hiddenData.minMapX = 0;
            this.hiddenData.minMapY = 0;
            this.hiddenData.maxMapX = 0;
            this.hiddenData.maxMapY = 0;

            return;

        }


        //handle 'sort' results
        if (this.hiddenData.type === 'sort') {

            //update data
            cmp.meta = d.tables[0];
            cmp.campsites = d.tables[1];


            //show list results
            $('#results').html(App.CampsiteList.process(cmp.campsites.rows));

            TVI.Components.initialize($('#results'));


            //set paging
            var url = cmp.getURL({ replacePage: true });

            var btnPrevious = $('#btn-previous');
            var btnNext = $('#btn-next');

            btnPrevious.hide();

            if (cmp.meta.rows[0][0] > 50) {

                var url = cmp.getURL({ replacePage: true });

                btnNext.attr('href', url.replace('[pageNo]', '2'));
                btnNext.show();

            }
            else {
                btnNext.hide();
            }


            this.hiddenData.type = '';

        }


        //handle 'paging' results
        if (this.hiddenData.type === 'paging') {

            //update data
            cmp.meta = d.tables[0];
            cmp.campsites = d.tables[1];


            //show list results
            $('#results').html(App.CampsiteList.process(cmp.campsites.rows));

            TVI.Components.initialize($('#results'));


            //set paging
            var url = cmp.getURL({ replacePage: true });

            var btnPrevious = $('#btn-previous');
            var btnNext = $('#btn-next');

            if (cmp.meta.rows[0][1] > 1) {

                btnPrevious.attr('href', url.replace('[pageNo]', cmp.meta.rows[0][1] - 1));
                btnPrevious.show();

            }
            else {
                btnPrevious.hide();
            }

            if (cmp.meta.rows[0][1] < cmp.meta.rows[0][2]) {

                btnNext.attr('href', url.replace('[pageNo]', cmp.meta.rows[0][1] + 1));
                btnNext.show();

            }
            else {
                btnNext.hide();
            }

            TVI.Components.layout($('#paging'));


            $.scrollTo('H1', { offset: { top: -20 }, duration: 300 });


            this.hiddenData.type = '';

        }

    };





    /* Public */


    TVI.ready(init);


    return {

        show: function(d) {

            show.call(this, d);

        }

    };


} ();
