function dtmTrack(label) {
    if (window._satellite) {
        _satellite.track(label);
    }
}

function dtmStrNormalize(s) {
    if (s)
        return s.toLowerCase().replace(/\s/g,"-").replace(/[^\w\s\|-]/g, "").replace(/-\|-/g, " | ");
    return "";
}

function dtmFollowLink(url, target) {
    if (url){
        if( target == "_blank")
            window.setTimeout(function(){window.open(url);}, 500);
        else 
            window.setTimeout(function(){window.location.href = url;},500);
    }
}

var youtubePlays = []
var youtubeInPause = false;
var youtubeInBuffered = false;
function dispatchYouTubeEvent(event) {
	try {
		var name = event.target.getVideoData().title;
		enel_data.content_title = dtmStrNormalize(name);
		if (event.data == YT.PlayerState.PLAYING && !youtubePlays[name]) {
			youtubePlays[name] = true;
			if (!youtubeInBuffered && youtubeInPause) {
				dtmTrack("video pause");		// Pause if it is restarted so quick
			}
			if (!youtubeInBuffered) {
				dtmTrack("video play");
			}
			youtubeInBuffered = false;
			youtubeInPause = false;
			var targetVideo = event.target;
			if (targetVideo.getCurrentTime() < targetVideo.getDuration() / 2) {
				var halfVideoTimeout = ((targetVideo.getDuration() - targetVideo.getCurrentTime()) / 2) * 1000;
				setTimeout(function() {
					var differenceTime = targetVideo.getCurrentTime() - (targetVideo.getDuration() / 2);
					if (differenceTime >= 0 && differenceTime <= 50) {
						var name = targetVideo.getVideoData().title;
 						enel_data.content_title = dtmStrNormalize(name);
						dtmTrack("video 50");
					}
				}, halfVideoTimeout)
			}
		} else if (event.data == YT.PlayerState.ENDED) {
			dtmTrack("video completed");
			youtubePlays[name] = false;
			youtubeInBuffered = false;
			youtubeInPause = false;
		} else if (event.data == YT.PlayerState.PAUSED) {
			youtubeInPause = true;
			setTimeout(function() {
				if (!youtubeInBuffered && !youtubePlays[name]) {
					dtmTrack("video pause");
				}
				youtubeInBuffered = false;
				youtubeInPause = false;
			}, 1500);
			youtubePlays[name] = false;
		} else if (event.data == YT.PlayerState.BUFFERING) {
			if (youtubeInPause) {
				youtubeInBuffered = true;
			}
		}
	} catch (error) {}
}

function dispatchCarouselEvent(event) {
    //enel.publish("DTMManager.Carousel", event);
}

function resetDtmValues() {
	enel_data.social_name = undefined;
	enel_data.content_title = undefined;
	enel_data.field = undefined;
}

/* Load login values from localstorage. It is updated after login and logout functionalities */
function dtmLoadLoginValues(enel_data) {
	
	try {
		var lsPrefix = window.location.host.replace(/\./g,"");
		var checkUserDtm = localStorage.getItem("userRememberDtm" + lsPrefix);		// User Logged with flag remember me
		if (!checkUserDtm || checkUserDtm == "false") {
			var userTTLDtm = localStorage.getItem("loggedTimeDtm" + lsPrefix);
			if (userTTLDtm) {
				checkUserDtm = new Date().getTime() <= userTTLDtm;	// User Logged without flag but on session ttl
				if (!checkUserDtm) {
					$(document).ready(function() {dtmRemoveLoginValues()});	// Remove login values when ttl is expired
				}
			}
		}
		if (checkUserDtm) {
			var userIdDtm = localStorage.getItem("userIdDtm"  + lsPrefix);
			if (userIdDtm == null || typeof userIdDtm == 'undefined') {
				userIdDtm = '';
			}
			var userTypeDtm = localStorage.getItem("userTypeDtm"  + lsPrefix);
			if (userTypeDtm == null || typeof userTypeDtm == 'undefined') {
				userTypeDtm = '';
			}
			enel_data.user_id = userIdDtm;
			enel_data.user_type = userTypeDtm; // '{user type business or private}' 
		}
	} catch (error) {
		console.log("Error getting values for tracking: " + error);
	}
}

/* Detected layout using screen width, according with viewport functionality on main clientllib (app.js). It is not used because this
 * clientlib is loaded at the and but functionality is used before. */
function dtmDetectLayout() {
	
	var dimensions = {
            tablet: 768,
            desktop: 1024,
            xl: 1280
        };
	
	var layoutDtm = "desktop";
	var screenWidth = $(window).innerWidth();
	if (screenWidth < dimensions.tablet) {
		layoutDtm = "mobile";
	} else if (screenWidth >= dimensions.tablet && screenWidth < dimensions.desktop) {
		layoutDtm = "tablet";
	}
	return layoutDtm;
}

/* Banner dtm tracking. Get value from localstorage, which is stored just before the page loaded clicking on a link */
function getDtmProvValue() {

	var prov = undefined;
	var dtmBannerProv = localStorage.getItem("dtmBannerProv");
	var dtmBannerDate = localStorage.getItem("dtmBannerDate");
	var dtmBannerHost = localStorage.getItem("dtmBannerHost");
	if (dtmBannerProv != null && typeof dtmBannerProv != 'undefined' && dtmBannerDate != null && typeof dtmBannerDate != 'undefined' && dtmBannerHost != null && typeof dtmBannerHost != 'undefined') {
		var dateNow = new Date().getTime();
		if ((dateNow - dtmBannerDate <= 20000) && window.location.hostname == dtmBannerHost) {	// 20 seg. max 
			prov = dtmBannerProv;
		}
	}
	localStorage.removeItem("dtmBannerProv");
	localStorage.removeItem("dtmBannerDate");
	localStorage.removeItem("dtmBannerHost");
	return dtmStrNormalize(prov);
}

function dtmStoreLoginValues(userId, loginType) {
	var lsPrefix = window.location.host.replace(/\./g,"");
	localStorage.setItem("userIdDtm", userId);
	if (loginType == 'empresas') {
		localStorage.setItem("userTypeDtm", "business");
	} else {
		localStorage.setItem("userTypeDtm", "private");
	}
	var timeLogged = new Date().getTime() + 60 * 60 * 1000;
	localStorage.setItem("loggedTimeDtm" + lsPrefix, timeLogged);
	var timeActivity = new Date().getTime() + ACTIVITY_SESION_TIME;
	localStorage.setItem(ACTIVITY_SESION_NAME + lsPrefix, timeActivity);
}

function dtmRemoveLoginValues() {
	
	var lsPrefix = window.location.host.replace(/\./g,"");
	localStorage.removeItem("userIdDtm" + lsPrefix);
	localStorage.removeItem("userTypeDtm" + lsPrefix);
	localStorage.removeItem("userRememberDtm" + lsPrefix);
	localStorage.removeItem("loggedTimeDtm" + lsPrefix);
    localStorage.removeItem("socialDtm");
	localStorage.removeItem(ACTIVITY_SESION_NAME + lsPrefix);
}

function getDtmCountryState(countryDTM){
	var countryStateDTM = "";
	switch(countryDTM){
		case "CL":
			countryStateDTM = "Chile";
			break;
		case "CO":
			countryStateDTM = "Colombia";
			break;
		case "PE":
			countryStateDTM = "Peru";
			break;
		case "BR":
			countryStateDTM = getDtmRegionBr();
			break;
	}
	return countryStateDTM;
}

function getDtmRegionBr(){
	var regexBr = /\/(pt.*)/;
	var regionBr = window.location.pathname.match(regexBr)[1];
	var arr = regionBr.split("/");
	var regionDTM = arr[0];
	var regionTag = "";
	switch(regionDTM){
		case "pt":
			regionTag = "rio de janeiro";
			break;
		case "pt-ceara":
			regionTag = "ceara";
			break;
		case "pt-goias":
			regionTag = "goias"
			break;
		case "pt-saopaulo":
			regionTag = "sao paulo";
			break;
		case "pt.html":
			regionTag = "rio de janeiro";
			break;
		case "pt-ceara.html":
			regionTag = "ceara";
			break;
		case "pt-goias.html":
			regionTag = "goias"
			break;
		case "pt-saopaulo.html":
			regionTag = "sao paulo";
			break;
        default:
			regionTag = "rio de janeiro";
	}
	return regionTag;
}
var currentPlayer;
var $ytApiReady = 0;

function onYouTubeIframeAPIReady() {
    var videoIDYT = $($('.album-photos__photo[rel=0] img')[0]).data('video-id');
    if(videoIDYT){
        var idName = $('.module.lightbox').find('.video-player .video >div').attr('id');
        createPlayer(idName,videoIDYT);
    }

    var players = $('.youtube-player .video>div');
    var playersLightbox = $('.lightbox .video-player>div');
    
    if(players.length){
        players.each(function(){
            var $this = $(this);
            var id = $this.attr("id");
            var youtubeId = $this.parent().data("video");
            if(youtubeId){
            	//get width and height
            	var ytWidth  = $this.parent().data("yt-width") ? $this.parent().data("yt-width") : "400";
            	var ytHeight = $this.parent().data("yt-height") ? $this.parent().data("yt-height") : "300";
            	var ytwReplaced = ytWidth.toString().replace("px","").replace("%","");
            	var ythReplaced = ytHeight.toString().replace("px","").replace("%","");
            	
                player = new YT.Player(id, {
                    width: ytwReplaced, 
                    height:ythReplaced,
                    videoId: youtubeId,
                    events: {
                        'onStateChange': dispatchYouTubeEvent,
                    }
                });
            }
            
        });

    }

    if( playersLightbox.length){
        var $album = $('.module.album');

        $album.each(function() {
            var myAlbum = $(this);
            var $lightbox = myAlbum.find('.module.lightbox');

            var $closeButton = $lightbox.find('.lightbox-slider_close');
            var $allPhotos = myAlbum.find('.album-photos__photo');

            var changeCurrentElement = enel.subscribe('album.selectPhoto', function (topic, data) {
                var $lightboxVideoPlayer = $lightbox.find(".video-player");
                var currRel = parseInt(data.imgRel);
                var $newImg = myAlbum.find('.album-photos__photo[rel=' + data.imgRel + '] img');
                var isVideo = $newImg[0].hasAttribute('data-video-src');
                var isVideoYoutube = false;
                if(isVideo){
                    isVideoYoutube  = $($newImg[0]).data('video-src').indexOf('youtube') != -1;
                }
                var youtubeId = $newImg.data('video-id');

                $lightboxVideoPlayer.css("display", "block");

                if (isVideo) {
                    if(youtubeId && isVideoYoutube){
                        
                        if($lightbox.find('.video-player .video iframe').attr('src') &&
                            typeof currentPlayer != 'undefined'){
                                if(currentPlayer != null && typeof currentPlayer.loadVideoById != 'undefined'){
                                    currentPlayer.loadVideoById(youtubeId);
                                }else{
                                    if(typeof globalPlayer.loadVideoById != 'undefined'){
                                        globalPlayer.loadVideoById(youtubeId);
                                    }
                                }
                        }else{
                            enel.publish('reloadVideoID', {youtubeId: youtubeId});
                            var ytPlayerDivId = $lightbox.find('.video-player .video >iframe').attr('id');
                            currentPlayer = new YT.Player(ytPlayerDivId, {
                                videoId: youtubeId,
                                events: {
                                    'onStateChange': dispatchYouTubeEvent,
                                }
                            });
                        }
                    }
                }


            });

            $closeButton.on('click', function () {
                currentPlayer = null;
                if(currentPlayer){
                    currentPlayer.stopVideo();
                }
                if(globalPlayer){
                    globalPlayer.stopVideo();
                }
            });

        });
    }

    var promoPlayers = $(".rwd-video[data-videoid]");
    if (promoPlayers.length) {
    	$(promoPlayers).each(function() {
    		console.log("video id for promo offert " + $(this).data("videoid"));
    		var youtubeId = $(this).data("videoid");
            if(youtubeId){
            	var id = "youtubePromo-" + youtubeId; 
            	var promoPlayer = new YT.Player(id, {
                    videoId: youtubeId,
                    width: 560, 
                    height: 315,
                    playerVars: {
                        controls: 0,
                    },
                    events: {
                        'onStateChange': dispatchYouTubeEvent,
                    }
                });
            }
    	});
    }
    
    enel.publish('album.subscribed');

}

function createPlayer(divId, videoId){
    if(typeof YT != 'undefined' && globalPlayer == null){
        //FIXME consider to remove currentPlayer and use only globalPlayer
        globalPlayer = new YT.Player(divId, {
                videoId: videoId,
                events: {
                    'onStateChange': dispatchYouTubeEvent,
                }
            });
    }
}
