﻿function Setup_SellPropertyForm(jsonValues){
    
    var $values=$.parseJSON(jsonValues);
    var $controls = $values.controls;
    var $urls = $values.urls;
    var $booleans = $values.booleans;
  
    BuildPropertyLocationPicker($urls, $controls.locationPicker_Property , $booleans);
    BuildPropertyLocationPicker($urls, $controls.locationPicker_DesiredProperty , $booleans);

    SetupWantToBuy($controls);
}

function Setup_AgenciesForm(jsonValues, locationID ) {
    var $values = $.parseJSON(jsonValues);
    
    BuildAgenciesSelect($values, locationID);
    $('#dPager').hide();
}

/* @ Sell Property Form Setup
================================================*/

function SetupWantToBuy($controls){
    var $rbWant=$('#' + $controls.clientID + "_" + $controls.rbWantToBuy),
        $rbNotWant=$('#' + $controls.clientID + "_" + $controls.rbNotWantToBuy),
        $desiredProperty = $('#' + $controls.desiredProperty);
    
    //After postback...if the rbWant is checked, the desired property will be active    
    if($rbWant.is(':checked')){
       $desiredProperty.slideDown();
    }
    
    //When click in rbWant, show Desired Property
    $rbWant.click(function(){
        if($desiredProperty.css("display")=="none"){
            $desiredProperty.slideDown();
        }
    });
    
    //When click in rbNotWant, hide Desired Property
    $rbNotWant.click(function(){
        if($desiredProperty.css("display")!="none"){
            $desiredProperty.slideUp();
        }
    });
}

function BuildPropertyLocationPicker($urls,controlID, $booleans) {
	var $control=$('#' + controlID);
	// call location picker plugin
	$control.SetupLocationPicker({	    
	    maxResults: 6, 
        databaseHandler_URLs: {
            locationSuggestion: $urls.locationSuggestion,
            locationDetail: $urls.locationDetail,
            mapFlash: $urls.mapFlashFile
        },
        showFlashMap: $booleans.locationPicker_ShowFlashMap,
        showTooltip: $booleans.locationPicker_ShowTooltip
	});
}

/* @ Agencies Form Setup
================================================*/
function BuildAgenciesSelect($values, locationID){
    var $controls = $values.controls,
        $urls = $values.urls,
        $resources = $values.resources,
        $defaultValues = $values.defaultValues,
        $booleans = $values.booleans;
    
    var $agenciesFormID = $('#' + $controls.agenciesFormID);
    
    //Start Agency LocationPicker
    BuildPropertyLocationPicker($urls, $controls.locationPicker_AgencyLocation , $booleans);
      
    //Select Location from sellform 
        $('#' + $controls.locationPicker_AgencyLocation).trigger('TransferLocationFromFlash', locationID );
    
    //Build Agency Name Finder
    $agenciesFormID.SetupAgencyNameFinder({
        maxResults: 6,
        clientID: $controls.clientID,
        databaseHandler_URLs: {
            agencyNames: $urls.namesHandler
        },
        noResultsResource: $resources.agencyFinder_NoResults,
        txtName: $controls.txtAgencyName
    });
    
   
    var $textboxName = $("#" +$controls.clientID + "_" + $controls.txtAgencyName),
        $buttonSearch = $("#" + $controls.clientID + "_" + $controls.btnSearch),
        $buttonSubmit = $("#" + $controls.clientID + "_" + $controls.btnSubmit),
        $lblSendErrorFeedback = $("#" + $controls.clientID + "_" + $controls.lblSendErrorFeedback),
        $hdfSelectedAgencies = $("#" + $controls.clientID + "_" + $controls.hdfAgenciesSelected);
        
    $buttonSubmit.click(function() {
        $lblSendErrorFeedback.html('');
        var selectedAgencies = GetSelectedAgencies();
        
        if (selectedAgencies !== undefined){
               $hdfSelectedAgencies.val(selectedAgencies.ids);
        }else{
            //error
            $lblSendErrorFeedback.html($resources.noAgenciesSelected);
            return false;
        }
    });
   
    $buttonSearch.click(function() {
        $lblSendErrorFeedback.html('');
        
        //var local = $textboxCity.val();
        var name = $textboxName.val();
        
        var $pickedID = $('#dPickedID input', $('#' + $controls.locationPicker_AgencyLocation));
        var locationID = $pickedID.val();
        
       // console.log($textboxCity);
        if (locationID != "" || name != ""){
            SearchAgencies( name, locationID, $urls.searchHandler, $resources, $controls, $defaultValues)
        }
        return false;
    });
    
    if (locationID != '' && locationID != $defaultValues.defaultPropertyLocation){
        SearchAgencies('', locationID, $urls.searchHandler, $resources, $controls, $defaultValues );
    }
   
}

function SearchAgencies(name, locationID, url_searchHandler, $resources, $controls, $defaultValues){
    
    var $errorMsg = $("#dListLoader").children('.errorMsg'); 
    
    var $stage=$('#dAgenciesList');
    var $loader = $("#dListLoader").children('.loader'); 
    var errorMessage ='';
    $stage.children('div.agencyInfo').remove();
    $loader.show();
    $errorMsg.hide();
    $errorMsg.html('');
     

     // 0. faço o pedido assincrono ao handler
    $.ajax({
        type: 'GET',
        timeout: $defaultValues.agenciesFinder_RequestTimeout,
        url: url_searchHandler,
        processData: true,
        data: {
            locationToken: '',
            nameToken: encodeURI(name),
            locationIDs: locationID
        },
        dataType: 'json',
        error: function(request, status, error) {

            // 1.2. escondo o loader
            $loader.hide();
            $('#dPager').hide();
            errorMessage = $resources.NoResultsTimeOut;
            $errorMsg.html(errorMessage);
            $errorMsg.show();
        },
        success: function(data) {
            // 2.1. carrego os dados
            if(data != null){
                BindData(data, $resources);
            }else{
                $('#dPager').hide();

                if(name!='' && locationID!=''){
                    errorMessage = $resources.NoResultsWithNameAndLocation;
                }else{
                    if(name!='' && locationID==''){
                        errorMessage = $resources.NoResultsWithName;
                    }else{
                        errorMessage = $resources.NoResultsWithLocation;
                    }
                }
                $errorMsg.html(errorMessage);
                $errorMsg.show();
            }
            
            // 2.2. escondo o loader
            $loader.hide();
          
           

        }
    });

}

function BindData(data, $resources){
    var $stage=$('#dAgenciesList');
   
    //Clear all items
    $stage.children('div').remove();
    
    if(data.agencies.length > 0){
       
        $.each(data.agencies, function(index, agency) {
            if (agency.Name != '' && agency.Email != '') {
                
                var $agencyItem = $('<div class="agencyInfo"/>');
                var $agencyItem_selector = $('<div class="selector">').append($('<input type="checkbox"/>').attr('id', 'ck' + agency.ID).attr('checked', false));
                var $agencyItem_logo = $('<div class="logo">').append($('<a>').attr('href', agency.Url).attr('target', '_blank').append($('<img>').attr('src', agency.Logo).attr('alt', agency.Name)));
                var $agencyItem_details = $('<div class="details">').append($('<a>').attr("class", "agencyName").attr('title', agency.Name).attr('href', agency.Url).attr('target', '_blank').text(agency.Name))
                                                                    .append($('<a>').attr("class", "agencyEmail").attr('href', 'mailto:' + agency.Email).text(agency.Email))
                                                                    .append($('<cite>').text(agency.ID).hide());
                var $agencyItem_floatClear = $('<div class="fClear"></div>')

                $agencyItem.append($agencyItem_selector)
                           .append($agencyItem_logo)
                           .append($agencyItem_details)
                           .append($agencyItem_floatClear);

                $agencyItem_logo.children('img').error(function() {
                    $(this).hide();
                });

                $stage.prepend($agencyItem);
            }
        });
       
        $('#dPager').BuildPager({resources: $resources, agencyListControl:$stage, itemClass: 'agencyInfo' });
        $('#dPager').show();

    }else{
        $('#dPager').hide();
        
    }
}

function GetSelectedAgencies() {
    var $stage = $('#dAgenciesList');
    var selectedAgencies;

    // obtenho todas as checkboxs seleccionadas
    var $selectedCheckboxs = $('input', $stage.children('div')).filter(':checked');
    if ($selectedCheckboxs.size()) {

        // obtenho os nomes das respectivas
        var selectedAgencyNames = '';
        $selectedCheckboxs.parent().siblings('.details').children('.agencyName').each(function() {
            selectedAgencyNames += ',' + $(this).text();
        });

        // obtenho os emails das respectivas
        var selectedAgencyEmails = '';
        $selectedCheckboxs.parent().siblings('.details').children('.agencyEmail').each(function() {
            selectedAgencyEmails += ',' + $(this).text();
        });

        // obtenho os ids das respectivas
        var selectedAgencyIDs = '';
        $selectedCheckboxs.parent().siblings('.details').children('cite').each(function() {
            selectedAgencyIDs += ',' + $(this).text();
        });

        // se colecionei algum valor, preencho a variavel de retorno
        if (selectedAgencyNames.length > 0 && selectedAgencyEmails.length > 0) {
            selectedAgencies = {
                names: selectedAgencyNames.substr(1),
                emails: selectedAgencyEmails.substr(1),
                ids: selectedAgencyIDs.substr(1)
            };
        }
    }

    return selectedAgencies;
};


(function($) {
    $.fn.BuildPager = function(pluginSettings) {

        var defaultSettings = {
            itemsPerPage: 10,
            resources: null,
            itemClass:'',
            agencyListControl: null
        };
        var $settings = $.extend(defaultSettings, pluginSettings);
 
        return this.each(function() {
            var $control = $(this),
                $items = $settings.agencyListControl.children('.' + $settings.itemClass),
                numberOfItems = $items.size(),
                numberOfPages = Math.ceil(numberOfItems/$settings.itemsPerPage),
                $btnNext =$('#btnNextPage',$control),
                $btnPrevious =$('#btnPrevPage',$control),
                $currentPage=$('#hdfCurrentPage',$control),
                $lblCurrentPage=$('#lblCurrentPage',$control);
            
            $btnNext.css('visibility','visible');
            $btnPrevious.css('visibility','visible');
            
            /*Setup Pager Titles*/
            $btnNext.html($settings.resources.agencyList_NextPage);
            $btnPrevious.html($settings.resources.agencyList_PreviousPage);
            var currentPageText= $settings.resources.agencyList_PageNumber + " 1 " + $settings.resources.agencyList_TotalPages + " " + numberOfPages;
            $lblCurrentPage.html(currentPageText);
            $lblCurrentPage.show();
            
            /*Current Page = 0*/ 
            $currentPage.val(0);
            $btnPrevious.css('visibility','hidden');
            
            /*Hide all items in list*/
            $items.css('display', 'none');
            
            /*Show the first item in list*/
            $items.slice(0, $settings.itemsPerPage).css('display', 'block');
            
            if(numberOfPages==1){
                $btnNext.css('visibility','hidden');
                $btnPrevious.css('visibility','hidden');
            }else{
                $btnNext.css('visibility','visible');
            }
            
            $btnNext.unbind('click');
            $btnPrevious.unbind('click');
            
            $btnNext.click(function(){
               $btnNext.css('visibility','visible');
               $btnPrevious.css('visibility','visible');
               var newPage = parseInt($currentPage.val()) + 1;
               if (newPage < numberOfPages ){
                    GoToPage(newPage);
               }
               if(newPage == numberOfPages-1){
                    $(this).css('visibility','hidden');
               }else{
                    $(this).css('visibility','visible');
               }
               return false;
            });
             
            $btnPrevious.click(function(){
                $btnNext.css('visibility','visible');
                $btnPrevious.css('visibility','visible');
               var newPage = parseInt($currentPage.val()) - 1;
               if (newPage > -1){
                    GoToPage(newPage);
               }
               if(newPage == 0){
                    $(this).css('visibility','hidden');
               }else{
                    $(this).css('visibility','visible');
               }
                return false;
            }); 
             
            function GoToPage(pageNumberIndex){
	            //get the element number where to start 
	            var startsFrom = pageNumberIndex * $settings.itemsPerPage;

	            //get the element number where to end
	            var endsOn = startsFrom + $settings.itemsPerPage;

	            //hide all items, get specific items and show them
	            $items.css('display', 'none').slice(startsFrom, endsOn).css('display', 'block');
                
                var pageNumber = pageNumberIndex + 1;
                var currentPageText= $settings.resources.agencyList_PageNumber + " " + pageNumber + " " + $settings.resources.agencyList_TotalPages + " " + numberOfPages;
                $lblCurrentPage.html(currentPageText);
                
	            //update the current page input field and label
	            $currentPage.val(pageNumberIndex);

            }
            
        });
    };
})(jQuery);

/*When Form was sent, an overlay screen appear*/
function Setup_SellPropertyFeeback() {
    ShowOperationFeedback(operationFeedback.status.success, 0, operationFeedback.types.sell_property);
}

