var isPostingToFbWall = null;
var fbUserName = null;
var isFbReview = null;
var loggedInFB = null;
var fbUserName = null;

jQuery.fn.fadeToggle = function(speed, easing, callback) { 
   return this.animate({opacity: 'toggle'}, speed, easing, callback); 
}; 

$.extend({
  getUrlVars: function(){
      var vars = [], hash;
      var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
      for (var i = 0; i < hashes.length; i++) {
          hash = hashes[i].split('=');
          vars.push(hash[0]);
          vars[hash[0]] = hash[1];
      }
      return vars;
  },
    getUrlVar: function(name){
        return $.getUrlVars()[name];
    }
});



$(document).ready(function(){
    var rules = {
        review: 'required',
        name: {
            required: {
                depends: function(element) {
                    if ( ! loggedInFB &&  $('#first_name_radio').is(':checked') ) {
                        return true;
                    }
                }
            }
        },
        anonymous: {
            required: {
                depends: function(element) {
                    if ( ! loggedInFB ) {
                        return true;
                    }
                }
            }
        },
        email: {
            required: {
                depends: function(element) {
                    if ( ! loggedInFB && $('#first_name_radio').is(':checked') ) {
                                if (! $('.anon_login_fields').is(':visible') ) {
                                    $('.anon_login_fields').slideToggle();
                                }
                                return true;
                            }
                }
            },              
            email: {
                depends: function(element) {
                    if ( ! loggedInFB && $('#first_name_radio').is(':checked') ) {
                        if (! $('.anon_login_fields').is(':visible') ) {
                            $('.anon_login_fields').slideToggle();
                        }
                        return true;
                    }
                }
            }
        },
        email_anon: {
            required: {
                depends: function(element) {
                    if ( ! loggedInFB && $('#anon_login_radio').is(':checked') ) {
                        return true;
                    }
                }
            },
            email: {
                depends: function(element) {
                    if ( ! loggedInFB && $('#anon_login_radio').is(':checked') ) {
                        return true;
                    }
                }
            }
        }
    };
    
    var messages = {
        review: {
            required: '\'What would you like to tell other patients about your experience?\' is required in step 2.'
        },
        email: {
            required: 'You must enter your e-mail in step 3.',
            email: 'Your e-mail is of an invalid format in step 3.'
        },
        email_anon: {
            required: 'You must enter your e-mail in step 3.',
            email: 'Your e-mail is of an invalid format in step 3.'
        },
        name: {
            required: 'You must enter your name in step 3'
        },
        anonymous: {
            required: 'You must choose an identification option in step 3.'
        }
    };
    
    if (! DBGlobals.isAdmin) {
        // set fields required
        rules['overall_experience'] = 'required';
        messages['overall_experience'] = { required: 'Your overall experience rating is required in step 1.' };
        
        rules['staff_listened'] = 'required';
        rules['staff_communicated'] = 'required';
        rules['wait_time'] = 'required';
        
        messages['staff_listened'] = { required: '\'Did the staff take the time to listen to you?\' is required in step 2.' };
        messages['staff_communicated'] = { required: '\'Did the staff take the time to communicate with you?\' is required in step 2.' };
        messages['wait_time'] = { required: '\'How long was your wait time?\' is required in step 2.' };
    }
    
    $("#review_form").validate({
        'rules': rules,
        'messages': messages,
        onclick: false,
        onkeyup: false,
        onfocusout: false,
        showErrors: function(errorMap, errorList) {
            DB.showValidationErrors(errorMap);            
        },
        submitHandler: function(form) {
            if (isFbReview && fbUserName) {
                // save facebook user name in user field
                $("input[name='name']").val(fbUserName);
                
                if (isPostingToFbWall) {
                    var fbCallback = function(postId, exception) {
                        submitFormWithDialog(form);
                    };
                    
                    postToFbWall(fbCallback);
                } else {
                    submitFormWithDialog(form);
                }
            } else {
                submitFormWithDialog(form);
            }
        }
    });
    
    $('#contest_rules_message_dialog').dialog({
        modal: true,
        title: 'DoctorBase Rules for "Most Helpful Review" Contest.',
        width: 960,
        height: 'auto',
        position: 'top',
        autoOpen: false,
        buttons: { "Ok": function() { $(this).dialog("close"); }}
    });
    
    $('#contest_rules_link').click(
        function(){
            $('#contest_rules_message_dialog').dialog('open');
        }
    );
    
    $('#fb_login_radio').click(
        function(){
            $('#fb_login_radio').attr('checked', false);
            $('.fb_button').click();
        }
    );
    
    $('#submit_button').click(function(evt) {
        evt.stopPropagation();
        evt.preventDefault();

        DB.reviewSubmitHandler(function () {
            $('#review_form').submit();
        });
    });
    
    $('#first_name_radio').click(
        function(){
            if ( $('#anonymous_email').is(':visible') ) {
                $('#anonymous_email').slideToggle();
            }
            if (! $('.anon_login_fields').is(':visible') ) {
                $('.anon_login_fields').slideToggle();
            }
            
        }
    );
    
    $('#anon_login_radio').click(
        function(){
            if ( $('.anon_login_fields').is(':visible') ) {
                $('.anon_login_fields').slideToggle();
            }
            if ( ! $('#anonymous_email').is(':visible') ) {
                $('#anonymous_email').slideToggle();
            }
        }
    );    
});

function updateFbContainer() { 
    DB.getFBLoginStatus(function(response) {
        if (! response.authResponse) {
            // not logged in
            $('#FBLogin').fadeOut();
            $('#fb_login').fadeIn();
            $('#first_name_login').fadeIn();
            $('#anon_login').fadeIn();
            return;
        }

        var currentUserId = response.authResponse.userID;
        $('#facebook_uid').val(currentUserId);
        
        FB.api('/me', function(response) {
            fbUserName = response.name;
        });
        
        $('#first_name_login').fadeOut();   
        $('#anon_login').fadeOut();
        
        loggedInFB = true;

        DB.displayFacebookUserInfo($('#fb_user_details'));
        $('#fb_login').fadeOut();
        $('#loginCaveatText').html('<span class="identityVerifiedMessage">Your Facebook Review Identity has been verified.</span>');
    });    
} 

function redirectToCurrentUrl (){
    var currentUrl = window.location.href;
    window.location.reload();
}


function submitFormWithDialog (formToSubmit) {
    $('#submit_message_dialog').dialog({
        modal: true,
        title: 'Processing review'
    });
    formToSubmit.submit();
}

function postToFbWall(callback){    
    // if facebook login active - ask to submit to user fbwall
    DB.getFBLoginStatus(function(response) {
    if (! response.authResponse) return;
    var currentUserId = response.authResponse.userID;
    if (! currentUserId) return;

    var exp = $('input:radio[name=overall_experience]:checked').val();
    var profileName = $("input[name='author']").val();
    var specialty = $("input[name='specialty']").val();
    var profileUrl = $('#blog_url').val();
    var profileMsgUrl = $('#message_url').val();
    var profileImageUrl = $('#image_url').val();
    var profileCity = $('#profile_city').val();
    var profileState = $('#profile_state').val();

    var askQuestionText = 'Ask ' + profileName + ' a Question';
    var message = 'Just left a review of ' + profileName + ' on DoctorBase.com. Check out what I had to say...'; 
    
    // no message url for non customers
    var attachment;
    var postTitle = "Referring " + profileName + " to friends and family";
    var postCaption = 'I rated my overall experience with ' + profileName + ' as ' + exp;
    if (specialty) {
        postCaption = "For anyone needing a " + specialty + ",\nI've rated my experience with " + profileName + ' as \"' + exp + '\"';
    }
    if (profileMsgUrl) {
        attachment = { 
            'name': postTitle, 
            'href': profileUrl, 
            'caption': postCaption,
            'description': profileName,
            'properties':{
                'Located in': profileCity + ', ' + profileState,
                'Message': {'text': askQuestionText, 'href': profileMsgUrl}
            },
            
            'media': [{ 'type': 'image', 'src': profileImageUrl, 
                        'href': profileUrl}] 
        };
    }
    else {
        attachment = { 
            'name': postTitle, 
            'href': profileUrl, 
            'caption': postCaption,
            'description': profileName, 
            'properties':{
                'Located in': profileCity + ', ' + profileState
            },
            'media': [{ 'type': 'image', 'src': profileImageUrl, 
                        'href': profileUrl}] 
        };
    }
     
    var action_links = [ { text: 'Reply on DoctorBase.com', href: profileUrl } ]; 
    var user_message = 'Would you like to share this review on your Facebook wall?';
    
    FB.ui({
        'method': 'stream.publish',
        'attachment': attachment,
        'action_links': action_links
    }, callback);
    });
}

