/*

                        FACEBOOK  FUNCTIONS,  USE  ONLY  THIS  FUNCTIONAL

*/
var facebookUtils;
FacebookUtils = newClass(null, {
    constructor: function(appId, userId, namespace){
        if (!appId) {
            return;
        }
        var facebookUtilsTmp = this;
        facebookUtilsTmp.fbInterval = null;
        facebookUtilsTmp.appId = appId;
        facebookUtilsTmp.namespace = namespace;
        facebookUtilsTmp.cookieName = 'fbsr_' + facebookUtilsTmp.appId;
        FB.init({
            appId: facebookUtilsTmp.appId,
            status: true,
            cookie: false,
            xfbml:  true,
            oauth : true
        });
        var facepileDiv = $("#facepile-iframe");
        if (facepileDiv.length != 0){
        	facepileDiv.html('<iframe src="http://www.facebook.com/plugins/facepile.php?app_id=' + appId + '&width=500&max_rows=2&height=70" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:500px; height:70px" allowTransparency="true"></iframe>');
        }
        var likeDiv = $("#like-iframe");
        if (likeDiv.length != 0){
        	likeDiv.html('<iframe src="http://www.facebook.com/plugins/like.php?href='+$('link[rel=canonical]').attr("href") + "/fblink"+'&amp;locale=' + likeDiv.attr('class') + '&amp;layout=button_count&amp;show_faces=false&amp;action=like&amp;font=verdana&amp;colorscheme=light&amp;height=50" scrolling="no" frameborder="0" class="fb-like-btn"></iframe>');
        }
        if (userId.length >0) {
        	facebookUtilsTmp.uid = userId;
			$(window).ready(function() {
    			setTimeout(function(){
    	            FB.api("/" + facebookUtilsTmp.uid,{fields : "email"}, function(response) {
    	            	facebookUtilsTmp.email = response.email;
    	            	facebookUtilsTmp.fbInterval = window.setInterval(facebookUtilsTmp.facebookRefresh, 180000);
    	            	facebookUtils = facebookUtilsTmp;
    	            });
            	}, 50);
    		});
        } else {
        	facebookUtilsTmp.uid = null;
        	facebookUtilsTmp.email = null;
            facebookUtils = facebookUtilsTmp;
        }
    },

    facebookRefresh: function(){
		$.ajax({
		    type: "POST",
		    dataType: "json",
		    data: {ajax_get_cache:encodeURIComponent((new Date()).getTime())},
		    url: "/facebookRefresh",
		    success: function(data) {},
		    error: function(XMLHttpRequest, textStatus, errorThrown) {}
		});
    },

    // use ONLY THIS function for facebook connect
    facebookConnect: function(reloadIfSuccess, successFunc, rejectFunc){
        FB.login(function(response) {
            if (!response.authResponse) {
                if (typeof rejectFunc == "function") {
                    rejectFunc();
                }
            } else {
                var authResponse = response.authResponse;
                FB.api("/me", function(response) {
                    enableLoadingBlock(true);
                    var cookieValue = "";
                    for (var key in authResponse) {
                        if (cookieValue.length > 0) {
                            cookieValue += "&";
                        }
                        cookieValue += key + "=" + authResponse[key];
                    }
                    $.cookie(facebookUtils.cookieName, cookieValue, {expires: 365, path: '/'});
                    $.ajax({
                        type: "POST",
                        dataType: "json",
                        data: "",
                        url: '/facebook',
                        success: function(data) {
                            facebookUtils.uid = response.id;
                            facebookUtils.email = response.email;
                            var name=data.name;
                            if (name == undefined || name.length == 0) {
                                name = response.first_name + " " + response.last_name.substr(0,1);
                            }
                            $(".loggedinuser").each(function(index){
                                $(this).html(name);
                                if (this.tagName === "A") {
                                    this.href = this.href.replace(/\/\d*$/, "/" + facebookUtils.uid);
                            }
                            });
                            $(".use-if-notloggin").addClass("invisible");
                            $(".use-if-loggin").removeClass("invisible");
                            $(".click-if-loggin").click();
                            facebookUtils.fbInterval = window.setInterval(facebookUtils.facebookRefresh, 60000);
                            if (typeof successFunc == "function") {
                                successFunc();
                            }
                            if (reloadIfSuccess) {
                                window.location.reload();
                            } else{
                                enableLoadingBlock(false);
                            }
                        },
                        error: function(XMLHttpRequest, textStatus, errorThrown) {
                            enableLoadingBlock(false);
                            $.cookie(facebookUtils.cookieName, null, {path: '/'});
                        }
                    });
                    });
            }
        }, {scope:'email,read_friendlists,offline_access, publish_actions'});
    },

    //use only for facebookLogout and ifUserConnected.
    __logoutFunction: function(reloadIfSuccess){
		window.clearInterval(facebookUtils.fbInterval);
		facebookUtils.uid = null;
		facebookUtils.email = null;
		$(".use-if-loggin").addClass("invisible");
		$(".use-if-notloggin").removeClass("invisible");
		$(".click-if-loggout").click();
		$('.loggedinuser').html("");
		if ($.cookie(facebookUtils.cookieName) != null) {
		    $.cookie(facebookUtils.cookieName, null, {path: '/'});
		}
		if (reloadIfSuccess) {
		    window.location.reload();
		} else {
			enableLoadingBlock(false);
		}
    },

    // use ONLY THIS function for facebook facebookLogout
    facebookLogout: function(reloadIfSuccess) {
        if (reloadIfSuccess) {
            enableLoadingBlock(true);
        }
        FB.getLoginStatus(
                function(getLoginResponse) {
                    if (getLoginResponse.authResponse) {
                        return FB.logout( function(logoutResponse){facebookUtils.__logoutFunction(reloadIfSuccess);});
                    } else {
                        facebookUtils.__logoutFunction(reloadIfSuccess);
                    }
                }, true
        );
    },

    hidenFacebookLogout: function() {
    	FB.getLoginStatus(
                function(getLoginResponse) {
                    if (getLoginResponse.authResponse) {
                        return FB.logout( function(logoutResponse){facebookUtils.__logoutFunction(reloadIfSuccess);});
                    }
                }
    	);
    },


    ifUserConnected: function(userConnectedCallBack, userNotConnectedCallBack, forceLogout){
    	if (typeof forceLogout == "undefined"){
    		forceLogout = true;
    	}
        if (facebookUtils.uid != null && $.cookie(facebookUtils.cookieName) != null) {
            FB.getLoginStatus(
                    function(getLoginResponse) {
                        if (getLoginResponse.authResponse) {
                            if (typeof userNotConnectedCallBack == "function") {
                                userConnectedCallBack();
                            }
                        } else {
                        	if (forceLogout){
                        		facebookUtils.__logoutFunction();
                        	}
                            if (typeof userNotConnectedCallBack == "function") {
                            	userNotConnectedCallBack();
                            }
                        }
                    }, true
            );
        } else {
            if (typeof userNotConnectedCallBack == "function") {
            	userNotConnectedCallBack();
            }
        }
    },


    updateLoginStatusAndReloginIfNeeded: function(statusNotChangedCallBack, userLogoutCallback) {
        var userWasloggined = facebookUtils.getUserId() != null;
        facebookUtils.ifUserConnected(
                function() {
                    statusNotChangedCallBack();
                },
                function() {
                    if (userWasloggined) {
                        facebookUtils.facebookConnect(
                            false,
                            statusNotChangedCallBack,
                            userLogoutCallback
                        );
                    } else {
                        statusNotChangedCallBack();
                    }
                }
        );
    },

    //you should sure that user has right LoginStatus,
    //you should use updateLoginStatusAndReloginIfNeeded in the calling function
    getUserId: function (){
        if (FB.getAuthResponse() != null || $.cookie(facebookUtils.cookieName) != null) {
            return facebookUtils.uid;
        } else {
            return null;
        }
    },

    openIfLogined: function(link, errorTitle, errorMessage){
       facebookUtils.ifUserConnected(function() {
           location.href=link;
       }, function(){
           showMessageParam(errorTitle, errorMessage, false, 10000);
       });
    },

    getEmailForCurrentUser: function(func_enabled, func_notEnabled){
    	if (facebookUtils.email != null){
    		func_enabled(facebookUtils.email);
    	} else {
			FB.api("/" + facebookUtils.uid,{fields : "email"},function(response) {
				facebookUtils.email = response.email;
				if (typeof func_enabled == "function") {
			        func_enabled(response.email);
				}
			});
    	}
    },

	publish: function(attachment, actionLink, question, callBack){
		FB.ui({
		     method: 'stream.publish',
		     message: '',
		     attachment: attachment,
		     action_links: actionLink,
		     user_message_prompt: question
		     },
		     function(post_id, exception) {
		    	 if (typeof callBack == "function") {
		    		 callBack();
		    	 }
		     }
		);
    },

    timelineCompanyRate: function(callback){
    	facebookUtils.timelinePost("rate", callback);
    },

    timelineCompanyRead: function(callback){
    	facebookUtils.timelinePost("read", callback);
    },

    timelinePost: function(action, callback) //posts action to facebook
    {
    	var url = $('link[rel=canonical]').attr("href");
    	FB.api("/me/" + facebookUtils.namespace + ":"+action+"&company_profile="+url,
    			"post",
    			function(response) {
    				if (typeof callback == "function") {
    					callback();
    				}
    			}
    	);
    }
});

