﻿$(document).ready(function() {
    var browserVersion = GetBrowserInfo();
    if (browserVersion != -1) {
        if (browserVersion < 8.0) {
            ShowBrowserCompatibilityOverlay();
        }
    }
   
    // esconder fotos não carregadas
    Hide_UnloadedPhotos();

    /*
        $('.limitedWidth').SetupLimitedWidth({
            scrollSpeed: 2
        });
    */  

    //Verificar se o browser suporta "definir como homepage"
    if (!document.all) {
        $(".setAsHomepage").hide();
    }

    //Verificar se o browser suporta "adicionar aos favoritos"
    var is_chrome_or_safari = navigator.userAgent.toLowerCase().indexOf('safari') > -1;
    if (is_chrome_or_safari) {
        $('.addToBookmarks').hide();
    }
    
    //Há casos que o asp.net está a acrescentar o caminho do controlo ao href="#"
    FixEmptyHRefs();

});

function FixEmptyHRefs() {
    $('a[href$="#"]').attr('href', '#');
};

//Banner Clicked..............................
//#region 
function BannerClicked(bannerID, requestTimeout, handlerURL){
   
    var settings={
        requestTimeout:requestTimeout,
        handlerURL:handlerURL
    };
    
    $.ajax({
        type: 'GET',
        dataType: 'json',
        processData: true,
        timeout: settings.requestTimeout,
        url: settings.handlerURL,
        data: {
            bannerID: bannerID
        }
     });
}
//#endregion

//Banner Loaded
//#region
function BannerLoaded(bannerID, requestTimeout, handlerURL){ 
    
    var settings={
        requestTimeout:requestTimeout,
        handlerURL:handlerURL
    };
    
    
    $.ajax({
        type: 'GET',
        dataType: 'json',
        processData: true,
        timeout: settings.requestTimeout,
        url: settings.handlerURL,
        data: {
            bannerID: bannerID
        }

    });
}
//#endregion

/*  SlideShow de Banners
    ================================================================================ */

function LoadBannerSlideshowFlashWrapper(flashHolderWrapper, flashHolder, requestTimeout, bannerClickedHandlerURL, bannerLoadedHandlerURL, countStats, slotInfo){ 

    var $flashObj = $('#' + flashHolderWrapper).width(slotInfo.Width).height(slotInfo.Height); 

    // ?. se houver algum banner atribuido ao slot 
    if (slotInfo.Banners.length > 0) { 
    
        // criação das strings separadas por categoria para enviar por flashVar
        var fv_ID = '', 
            fv_FilePath = '', 
            fv_BackgroundColor = '', 
            fv_Duration = '', 
            fv_Width = '', 
            fv_Height = '', 
            fv_Length = '',
            fv_Hyperlink = '',
            fv_RequestTimeout = 0,
            fv_BannerClickedHandlerURL = '',
            fv_BannerLoadedHandlerURL = '',
            fv_CountStats='',
            fv_Target='';
            
        $.each(slotInfo.Banners, function(index, bannerInfo){
            fv_ID += ',' + bannerInfo.ID;
            fv_FilePath += ',' + bannerInfo.FilePath;
            fv_BackgroundColor += ',' + bannerInfo.BackgroundColor;
            fv_Duration += ',' + bannerInfo.Duration;
            fv_Width += ',' + bannerInfo.Width;
            fv_Height += ',' + bannerInfo.Height;
            fv_Hyperlink += ',' + bannerInfo.Hyperlink;
            fv_Target += ',' + bannerInfo.Target;
            
        });
        fv_Length = slotInfo.Banners.length;
        fv_RequestTimeout=requestTimeout;
        fv_BannerClickedHandlerURL = bannerClickedHandlerURL;
        fv_BannerLoadedHandlerURL = bannerLoadedHandlerURL;
        fv_CountStats = countStats;
        // 1. faço o embed do banner (flash)
        var flashvars = {
            ID: fv_ID.substr(1),
            FilePath: fv_FilePath.substr(1),
            BackgroundColor: fv_BackgroundColor.substr(1),
            Duration: fv_Duration.substr(1),
            Width: fv_Width.substr(1),
            Height: fv_Height.substr(1),
            Length: fv_Length,
            Hyperlink: fv_Hyperlink.substr(1).ReplaceAll("&","%26"),
            RequestTimeout: fv_RequestTimeout,
            BannerClickedHandlerURL: fv_BannerClickedHandlerURL,
            BannerLoadedHandlerURL: fv_BannerLoadedHandlerURL,
            CountStats: fv_CountStats,
            Target: fv_Target.substr(1)
            };
        var params = {
            wmode:"transparent",
            scale: "exactfit"
            };
        var attributes = {};
                
        swfobject.embedSWF(slotInfo.SWFLoader, flashHolder, slotInfo.Width, slotInfo.Height, "8.0.0", "", flashvars, params, attributes);
        
    }

};


/*  SlideShow de Banners
    ================================================================================ */

function LoadBannerSlideshowJavaScript(flashHolderWrapper, flashHolder, slotInfo){           

    var bannerTimer;                       
                              
    var $flashObj = $('#' + flashHolderWrapper).width(slotInfo.Width).height(slotInfo.Height);  
    var _currentBannerIndex,
        _nextBannerIndex;
    
    // ?. se houver algum banner atribuido ao slot 
    if (slotInfo.Banners.length > 0) {        
        
        _currentBannerIndex = 0; // primeiro banner a ser apresentado
        
        // 1. faço o embed do banner (flash)
        var flashvars = {};
        var params = {wmode:"transparent"};
        //var params = {};
        var attributes = {};
        swfobject.embedSWF(slotInfo.Banners[_currentBannerIndex].FolderPath + slotInfo.Banners[_currentBannerIndex].FileName, flashHolder, slotInfo.Width, slotInfo.Height, "8.0.0", "", flashvars, params, attributes);
                
        $flashObj.css('background-color', slotInfo.Banners[_currentBannerIndex].Features.BackgroundColor);
               
        // se houver mais do que um banner, crio a animação       
        if (slotInfo.Banners.length > 1) {
            
            _nextBannerIndex = 1; // proximo banner a ser apresentado
                    
            // 2. crio um timer com a duração do banner actual, para no final desse tempo, ser carregado o próximo banner            
            bannerTimer = setTimeout(function(){    
                LoadNextBanner();
            }, slotInfo.Banners[_currentBannerIndex].Features.Duration * 1000);
            
        }
        
    }
          
    function LoadNextBanner() {

        //$('#' + flashHolder).Play();

        // 1. obtenho os caminhos dos banners (actual & proximo)                
        var currentFilePath = slotInfo.Banners[_currentBannerIndex].FolderPath + slotInfo.Banners[_currentBannerIndex].FileName;
        var nextFilePath = slotInfo.Banners[_nextBannerIndex].FolderPath + slotInfo.Banners[_nextBannerIndex].FileName

        //alert($flashObj.html().replace(currentFilePath, nextFilePath).replace(currentFilePath, nextFilePath));

        // 2. faço a troca do SRC do embebed object            
        $flashObj.html($flashObj.html().replace(currentFilePath, nextFilePath).replace(currentFilePath, nextFilePath));
        document.getElementById(flashHolder).Play();
        $flashObj.css('background-color', slotInfo.Banners[_nextBannerIndex].Features.BackgroundColor);
                
        // 3. re-calculo os indices dos banners (actual & proximo)
        _currentBannerIndex = _nextBannerIndex;
        _nextBannerIndex++; if (_nextBannerIndex == slotInfo.Banners.length) _nextBannerIndex = 0;
        
        // 4. crio um timer com a duração do banner actual, para no final desse tempo, ser carregado o próximo banner    
        bannerTimer = setTimeout(function(){
            LoadNextBanner();
        }, slotInfo.Banners[_currentBannerIndex].Features.Duration * 1000);
        
    };
     
};


function GetBrowserInfo() { 
    // Returns the version of Internet Explorer or a -1
    // (indicating the use of another browser).

  var version = -1; // Return value assumes failure.
  if (navigator.appName == 'Microsoft Internet Explorer')
  {
    var userAgent = navigator.userAgent;
    var filter  = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
    if (filter.exec(userAgent) != null)
        version = parseFloat(RegExp.$1);
  }
  return version;
}


$(window).load(function() {

    // ajustar o tamanho das imagens na agency_list.aspx
    $('.AgencyItem .photo img').FixImageSizes({
        max_width: 140,
        max_height: 105
    });

    // ajustar o tamanho das imagens na agency_detail.aspx
    $('#dAgencyBI .logo div img').FixImageSizes({
        max_width: 140,
        max_height: 105
    });

});


/* --------------------------------------------------------------------------- */

(function($) {
    $.fn.SetupLimitedWidth = function(pluginSettings) {

        var defaultSettings = {
            width: 0,
            scrollSpeed: 2,
            initialDelay: 2000
        };
        var settings = $.extend(defaultSettings, pluginSettings);

        return this.each(function() {

            return false;

            var $elem = $(this);
            var _speedPrecision = 100;
            var _scrollInterval;
            var scrollDelay = _speedPrecision / settings.scrollSpeed;
            var padding = $elem.innerWidth() - $elem.width();
            var realWidth = 0;


            //se já foi aplicado o plugin, nao é necessario voltar a criar
            if ($elem.parent('.rollingText').length == 0) {
                //Esconder o elemento para não serem verificadas as alterações
                $elem.hide();

                // definir a largura máxima
                if (settings.width == 0) {
                    settings.width = $elem.parent().outerWidth() - padding;
                }

                // obter a largura real ocupada pela label
                $elem.css('position', 'absolute');
                realWidth = $elem.outerWidth() - padding;
                
                $elem.css('position', 'relative');
                // console.log($elem.text() + " " + realWidth + " " + settings.width);
                if (realWidth >= settings.width) {

                    $elem.removeClass('limitedWidth');

                    var textWidth;
                    var text = $elem.text();

                    //Limpar elemento
                    $elem.text('');
                    $elem.css("width", settings.width + "px");

                    //Criar a estrutura para fazer o scroll
                    $elem.append(
                        $('<div class="rollingTextWrapper">').append($("<div class='rollingText'>").append(
                                                                        $("<div>").text(text).addClass('limitedWidth')
                                                                      )
                                                              .append(
                                                                        $("<div>").text(text).addClass('limitedWidth')
                                                                     ))
                    );

                    //tamanho do texto
                    var textWidth = ('.rollingText div:first', $elem).outerWidth(true);

                    var $ticker = $('.rollingText', $elem);

                    //ticker params
                    var shiftLeftAt = textWidth;
                    $ticker.shiftLeftAt = shiftLeftAt;
                    $ticker.left = 0;

                    //Width Ticker
                    $ticker.width(2 * textWidth);

                    //start
                    function startTicker() {

                        // lopping
                        _scrollInterval = setInterval(function() {
                            ScrollIt();
                        }, scrollDelay);

                       // scroll position
                       function ScrollIt() {

                            var params = $ticker;
                            params.left -= 1;

                            if (params.left <= params.shiftLeftAt * -1) {
                                params.left = 0;

                                var $newNode = $ticker.children().first();
                                $ticker.append($newNode);
                                params.shiftLeftAt = $newNode.outerWidth(true);
                            }

                            $ticker.css('left', params.left + 'px');
                            $ticker = params;
                        };
                    };

                    //stop
                    function stopTicker() {
                        clearInterval(_scrollInterval);
                    }

                    // pause, onHover
                    $ticker.hover(stopTicker, startTicker);

                    // INIT
                    var initialDelay = setTimeout(function() {
                        startTicker();
                    }, settings.initialDelay);
                }

                //Mostrar o elemento
                $elem.show();
            }
        });
    };
})(jQuery);


/* --------------------------------------------------------------------------- */

(function($) {
    $.fn.SetupLimitedWidthLabels = function(pluginSettings) {

        var defaultSettings = {
            width: 0,
            scrollSpeed: 2
        };
        var settings = $.extend(defaultSettings, pluginSettings);

        return this.each(function() {

            var $elem = $(this);

            $elem.hide();

            var padding = $elem.innerWidth() - $elem.width();

            // definir a largura máxima
            if (settings.width == 0) {
                settings.width = $elem.parent().outerWidth() - padding;
            }

            // obter a largura real ocupada pela label
            var realWidth;
            $elem.css('position', 'absolute');
            realWidth = $elem.outerWidth() - padding;
            $elem.css('position', 'relative');

           
          
            if (realWidth > settings.width) {

                // console.log($elem.html());
                // console.log('realWidth: ' + realWidth);
                // console.log('maxWidth: ' + settings.width);
                // console.log('.....................');

                //var $marquee = $('<marquee onstart="this.stop();" onmouseover="this.start();" onmouseout="this.stop();">');
                var $marquee = $('<marquee onmouseover="this.stop();" onmouseout="this.start();">');
                $marquee.addClass('wrapper')
                        .width(settings.width)
                        .attr('scrollamount', defaultSettings.scrollSpeed)
                        .attr('behavior', 'alternate')
                        .html($elem.html());
                $elem.html('');
                $elem.append($marquee);
            }

            $elem.show();

        });

    };
})(jQuery);



function Hide_UnloadedPhotos() {
    $('img').error(function() {
        $(this).remove();
    });
}

function IsValidEmail(email) {
    var filter = /^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/;
    if (!filter.test(email)) {
        return false;
    }
    else { 
        return true;
    }
};

function IsValidPhone(phone){
    var regExp=/^(\+){0,1}\d{0,}\s{0,1}(\s{0,1}\d{0,}\s{0,1}){0,}$/;
    return regExp.test(phone);
}


(function($){  
	$.fn.FixImageSizes = function(pluginSettings) {
	
		var defaultSettings = {
			max_width:0,
			max_height:0,
			fake_width: false,
			force_full_height: false
		};
		var $settings = $.extend(defaultSettings, pluginSettings);
	
		return this.each(function(){

			var originalPhoto = {
				width:$(this).width(),
				height:$(this).height()
				};
			
			var isLandscape;
		
			//console.log('original dimensions: ' + originalPhoto.width + 'x' + originalPhoto.height);
			
			var maxDimensions = {
				width:$settings.max_width,
				height:$settings.max_height
				};

			if (maxDimensions.width == 0 && maxDimensions.height == 0) { 
				maxDimensions.width = $(this).parent().width();
				maxDimensions.height = $(this).parent().height();
			}
			
			//console.log('max dimensions: ' + maxDimensions.width + 'x' + maxDimensions.height);
		
			var newDimensions = {
			    width:originalPhoto.width,
			    height:originalPhoto.height
			    };
			    
			// calculate new dimensions (if needded);
			if (originalPhoto.width >= originalPhoto.height) {
			    //landscape
			    isLandscape = true;
			    if (originalPhoto.width > maxDimensions.width) {
			        //needs to be resized (based on maxDimensions.width)
			        resized = true;
			        newDimensions.width = maxDimensions.width;
			        newDimensions.height = (originalPhoto.height * maxDimensions.width / originalPhoto.width);
			        if (newDimensions.height > maxDimensions.height) {
			            //needs to be resized (based on maxDimensions.height)
			            var wrongHeight = newDimensions.height;
			            newDimensions.height = maxDimensions.height;
			            newDimensions.width = (maxDimensions.height * newDimensions.width / wrongHeight);
			        }
			    }
			}
			else {
			    if (originalPhoto.width < originalPhoto.height) {
			        //portrait
			        isLandscape = false;
			        if (originalPhoto.height > maxDimensions.height) {
			            //needs to be resized (based on maxDimensions.height)
			            resized = true;
			            newDimensions.height = maxDimensions.height;
			            newDimensions.width = (originalPhoto.width * maxDimensions.height / originalPhoto.height);
			            if (newDimensions.width > maxDimensions.width) {
			                //needs to be resized (based on maxDimensions.width)
			                var wrongWidth = newDimensions.width;
			                newDimensions.width = maxDimensions.width;
			                newDimensions.height = (maxDimensions.width * newDimensions.height / wrongWidth);
			            }
			        }
			    }
			}
			
			newDimensions.width = parseInt(newDimensions.width);
			newDimensions.height = parseInt(newDimensions.height);
		
			//console.log('new dimensions: ' + newDimensions.width + 'x' + newDimensions.height);
			//console.log('  ');
			
			// object image resize
            $(this).width(newDimensions.width);
            $(this).height(newDimensions.height);
            
            
            // vertical align to middle if photo is smaller then the containers
            $(this).css('vertical-align', 'inherit');
            $(this).parent().css('vertical-align', 'inherit');
            if (newDimensions.height < maxDimensions.height) {
                $(this).css('vertical-align', 'middle');
                $(this).parent().css('vertical-align', 'middle');
                $(this).parent().css('line-height', maxDimensions.height + 'px');
            }
            
            if (newDimensions.width < maxDimensions.width) {
                $(this).parent().css('text-align', 'center');
            }    
            
            // force width
            if (newDimensions.width < maxDimensions.width) {
            	if ($settings.fake_width) {
            		if ($settings.max_width > 0 && $settings.max_height > 0) {
            			var margins = {
            				left:0,
            				right:0
            			};
            			var freeSpace = maxDimensions.width - newDimensions.width;
            			margins.left = parseInt(freeSpace/2);
            			margins.right = parseInt(freeSpace - margins.left);
            			$(this).css('margin-left', margins.left)
            				   .css('margin-right', margins.left);
            		}
            	}
            }
            
            // force full height
            if ($settings.force_full_height && isLandscape) { 
                $(this).height(maxDimensions.height);
            }
            
            if($(this).is(':hidden'))
                $(this).fadeIn();
		});
	};
})(jQuery);


/* AUXILIAR FUNCTIONS */
String.prototype.startsWith = function(str) {
    return (this.match("^" + str) == str)
};
String.prototype.endsWith = function(str) {
    return (this.match(str + "$") == str)
};
String.prototype.ReplaceAll = function(de, para){
    var str = this;
    try{
        var pos = str.indexOf(de);
        while (pos > -1){
		    str = str.replace(de, para);
		    pos = str.indexOf(de);
	    }
    }
    catch(ex){
    //Provavelmente a string nao tem os caracteres a serem subtituidos
    }
    
    return (str);
}
String.prototype.replaceAt=function(index, char) {
  return this.substr(0, index) + char + this.substr(index+1);
}


/* Load a flash object*/
function LoadSwfObject(flashHolder,embedURL,flashWidth,flashHeight,backgroundColor,flashMinVersion,flashVars) {
    var myFlashVars = {};

    if (flashVars!= "") {
        myFlashVars.var1 = flashVars;
    }
    
 
    swfobject.embedSWF(
				embedURL,
				flashHolder,
				flashWidth,
				flashHeight,
				flashMinVersion,
				'',
				myFlashVars,
				{
				    quality: 'high',
                    wmode: 'transparent',
                    bgcolor: backgroundColor
				},
				false	
    );
}

function AddToBookmarks() {
    var urlAddress = window.location.href;
    var pageName = document.title;

    if (window.sidebar) { // Mozilla Firefox
      
        window.sidebar.addPanel(pageName, urlAddress, "");
    }
    else if (window.external) { // IE
        try {
            window.external.AddFavorite(urlAddress, pageName);
        }
        //Catch is because chrome        
        catch (ex) {
                
        }
    }
    else if (window.opera && window.print) {
        window.external.AddFavorite(urlAddress, pageName);
    }

    return false;
}


function SetAsHomepage(doc) {
    var urlAddress = window.location.href;
    
    //ONLY IE
    if (document.all) {
        doc.style.behavior = 'url(#default#homepage)';
        doc.setHomePage(urlAddress);
    }

    return false;
}



function ShowBrowserCompatibilityOverlay() {

    var $overlayDiv = $('#overlayBrowserCompatibility');
    var $overlayDivChildren = $('> div', $overlayDiv);
    

    SetupOverlayDivPositioning();

    $overlayDiv.fadeIn(function() {
   
        // ao clicar na area preta, escondo o controlo (F1)
        $overlayDiv.one('click', function() {
            $overlayDiv.hide();
        });
    });

    $(window).scroll(function() {
        SetupOverlayDivPositioning();
    });


    // anulo o (F1)
    $overlayDivChildren.click(function(e) {
        e.stopPropagation();
    });

    $(document).keydown(function(e) {
        if (e.keyCode == _keyboard.escape) {
            $overlayDiv.hide();
        }
    });

   
    // ao fazer resize tenho que ajustar as dimensões do overlay
    $(window).bind('resize', function() {
        SetupOverlayDivPositioning();
    });

    function SetupOverlayDivPositioning() {
        $overlayDiv.css('top', $(window).scrollTop());
        $overlayDiv.css('height', $(window).height());
    };


};
