var _gaq = _gaq || [];

(function () {
    var FACEBOOK_APPID;      
    
    function domainRegExp(dom) {
        return new RegExp('^(https?://)?[^/]*' + dom.replace(/\./g, '\.') + '/.*$');       
    }
    
    function getDomainAppId(da) {
        var d = document.location.href;
        for (var dom in da) if (da.hasOwnProperty(dom)) {            
            if (d.match(domainRegExp(dom))) {                
                return da[dom];
            }
        }
        return null;
    }
    
    function setFacebookLogin(loggedIn, userinfo) {
        var contIn = MVD.get("FacebookLoggedIn"), contOut = MVD.get("FacebookLoggedOut"), btn;
        if ((loggedIn === 1) && userinfo) {            
            contOut.hide();             
            var nombre = contIn.firstWithClass("fbnombre");
            nombre.setHTML(userinfo.name);          
            if (userinfo.id) {
                var img = contIn.firstWithClass("fbimg");
                img.src = "https://graph.facebook.com/"+userinfo.id+"/picture";
                img.onload = function () { img.show() };
            }
            
            btn = contIn.firstWithClass("loginFacebookBtn");
            btn.onclick = loginCMS; 
            btn = contIn.firstWithClass("fbclose");
            if (btn) {
                btn.onclick = function () {
                    FB.logout();
                    setFacebookLogin(0);
                    return false;
                }
            }          
            contIn.show(); 
        } else if ((loggedIn === 0) || (loggedIn === 1)) {
            contIn.hide();            
            btn = contOut.firstWithClass("loginFacebookBtn");
            btn.onclick = !loggedIn ? function () {                 
                FB.login(loginCallback, {perms:'email'});                 
                return false;
            } : loginCMS;                
            contOut.show();
        } else {
            contIn.hide(); contOut.hide(); MVD.get("FacebookLoginError").show();        
        }
    }    
    
    function loginStatusCallback(response) {  
        
        if (response.status === "connected") {
            setFacebookLogin(1);
            FB.api('/me', function(r){
                setFacebookLogin(1, r);                        
            });            
        } else {
            setFacebookLogin(0);
        }                                    
    }
    
    window.fbAsyncInit = function() {
        FB.init({
            appId  : FACEBOOK_APPID,
            status : true, // check login status
            cookie : true, // enable cookies to allow the server to access the session
            xfbml  : true  // parse XFBML
        });
        FB.getLoginStatus(loginStatusCallback);    
        FB.Event.subscribe('edge.create', function(targetUrl) {
          _gaq.push(['_trackSocial', 'facebook', 'like', targetUrl]);
        });
        FB.Event.subscribe('edge.remove', function(targetUrl) {
          _gaq.push(['_trackSocial', 'facebook', 'unlike', targetUrl]);
        });
        FB.Event.subscribe('message.send', function(targetUrl) {
          _gaq.push(['_trackSocial', 'facebook', 'send', targetUrl]);
        });
    };

    var shareButton = MVD.get("comparteFB");
    if (shareButton) {
        var url = shareButton.getAttribute("data-url");
        var title = shareButton.getAttribute("data-title");
        if (url) {
            shareButton.onclick = function () {  
                var fburl = "http://www.facebook.com/sharer.php?" +
                    "u=" + encodeURIComponent(url) + 
                    (title ? "&t=" + encodeURIComponent(title) : "");
                    
                window.open(fburl,
                            "facebook" + Math.floor(Math.random() * 100000),
                            "menubar=no,location=yes,scrollbars=yes,status=yes,resizable=yes,width=800,height=400");
                return false;
            }
        }
    }
    
    MVD.initFacebook = function (AppId) {
        if (typeof AppId === 'string') {
            FACEBOOK_APPID = AppId;
        } else {
            FACEBOOK_APPID = getDomainAppId(AppId);        
        }   
        
        if (!FACEBOOK_APPID) {
            return;
        }       

        // MVD.scriptAsync(document.location.protocol + '//connect.facebook.net/es_LA/all.js');
        
        if (MVD.get("FacebookLoggedOut")) {
            // Cargar solo si esta el boton de iniciar sesion en facebook    
            var e = document.createElement('script');
            e.src = document.location.protocol + '//connect.facebook.net/es_LA/all.js';
            e.async = true;
            document.getElementById('fb-root').appendChild(e);                    
        }                   
    }

    function loginCMS() {
        MVD.Ajax.postGX(
        'annewsessionfacebook', 
        { FacebookAppId: FACEBOOK_APPID }, 
        function (text) { 			
            if (text) {			
                var data = json_parse(text);            
                if (data.error === 0) {
                    if (MVD.Session) {
                        MVD.Session.notifyChange(data.id, data.session);                    
                    }
                } else {
                    setFacebookLogin(null);                    
                }
            } else {
                setFacebookLogin(null);                    
            }
        } );
        return false;
    }

    function loginCallback(response) { 
        if (response.session) {
            var perms = response.perms.split(",");
            if (perms.contains("email")) {
                loginCMS();        
            }
        }  
    }


}) ();

