jQuery.noConflict();

var auth_providers = ['twitter', 'facebook'];
var post_timeout = 0;

// ---SWITCH STATE----------------------------
function switch_info_message(on) {
    var method = (on) ? "show" : "hide";
    jQuery('#info_message')[method]();
}

function switch_wait_control(on) {
    var method = (on) ? "show" : "hide";
    jQuery('#wait_message_control')[method]();
}

function switch_login_control(on) {
    var method = (on) ? "show" : "hide";
    jQuery('#login_control')[method]();
}

function switch_review_control(on) {
    var method = (on) ? "show" : "hide";
    jQuery('#star_control')[method]();
    jQuery('#star_control_label')[method]();
    jQuery('#review_text')[method]();
    jQuery('#review_text_label')[method]();
    jQuery('#review_submit_button')[method]();
    jQuery("#logout_control")[method]();
}

function to_review_control() {
    switch_login_control(false);
    switch_wait_control(false);
    switch_review_control(true);
}

function to_login_control() {
    switch_login_control(true);
    switch_wait_control(false);
    switch_review_control(false);
}

function to_wait_control() {
    switch_login_control(false);
    switch_wait_control(true);
    switch_review_control(false);
}
// ---END SWITCH STATE----------------------------

function set_wait_message(message) {
    jQuery('#wait_message').html(message);
    jQuery('#wait_message_loader').show();
    to_wait_control();
}

function set_info_message(message) {
    jQuery('#wait_message').html(message);
    jQuery('#wait_message_loader').hide();
    to_wait_control();
}

function clear_review_control() {
    jQuery('#review_text').attr('value', "");
    star_control_clear();
}

function update_counter_status() {
    review = jQuery('#review_text').attr('value');
    var counter = 140 - review.length;
    if (counter <= 0) {
        //remove chars from the end of the string
        jQuery('#review_text').attr('value', review.substring(0, 139));
    };
    jQuery("#char_count").html("Characters left: " + counter);
}

function tpauth_authorize(provider_id) {
    var link = ("/tpauth/get_redirect_url/" + provider_id + "?item_type=" + item_type + "&item_id=" + item_id);
    set_wait_message('Getting data from authentication provider...');
    var login_timeout = setTimeout(function(){
                                        setTimeout(function(){to_login_control();}, 5000);
                                        set_info_message("Error happened. Please try again. Thank you!");
                                    }, 60000);
                                    
    jQuery.post(link, function (data){
                        try {
                            clearTimeout(login_timeout);
                            window.location = data.authorization_url; 
                            set_info_message("If your browser doesn't redirect you, <a href='" + data.authorization_url + "'>click here</a> to continue.");
                        } catch (err) {
                            setTimeout(function(){to_login_control();}, 3000);
                            set_info_message("Error happened. Please try again. Thank you!");
                        };
                      },"json");
}

function submit_timeout_problem() {
    setTimeout(function(){to_review_control();}, 5000);
    set_info_message("No response from server. Check connection and try again...");
}

function reviews_load_page(item_type, item_id, page_no) {
    jQuery("#review_loader_top").css("display", "block");
    jQuery("#review_loader_bottom").css("display", "block");
    jQuery("#review_paginator_links_top").css("opacity", "0.4");
    jQuery("#review_paginator_links_top").css("filter", "alpha(opacity=40)"); //for IE
    jQuery("#review_paginator_links_bottom").css("opacity", "0.4");
    jQuery("#review_paginator_links_bottom").css("filter", "alpha(opacity=40)"); //for IE
    var reviews_list_link = "/review/list/" + item_type + "/" + item_id + "/" + page_no;
    jQuery.get(reviews_list_link, function(data) {
                                        jQuery('#reviews_list').html(data);
                                });
}

function reviews_load_entry_form(item_type, item_id) {
    var review_form_link = "/review/new/" + item_type + "/" + item_id;
    jQuery.get(review_form_link, function(data) {
                                        jQuery('#review_form').html(data);
                                        star_control_init(); 
                                });
}

function submit_user_data() {
    review = encodeURIComponent(jQuery('#review_text').attr('value'));
    rating = star_rating;
    if (review == ""){
        setTimeout(function(){to_review_control();}, 2000);
        set_info_message("Please enter a few words - review cannot be empty!");
    } else if (star_rating === 0) {
        setTimeout(function(){to_review_control();}, 2000);
        set_info_message("Please set star rating for this item!");
    } else {
        var submit_url = ("/review/add?item_type=" + item_type + "&item_id=" + item_id + "&rating=" + rating + "&review=" + review);
        post_timeout = setTimeout(function(){submit_timeout_problem();}, 20000);
        set_wait_message("Sending review...");
        jQuery.post(submit_url, function (data) {
            if (data) {
                clearTimeout(post_timeout); 
            };
            try {
                if (data.success === true) {
                    setTimeout(function(){to_review_control();}, 15000);
                    set_info_message("Review added successfully. Thank you!");
                    clear_review_control();
                    // To allow user to see their review added to the page:
                    reviews_load_page(item_type, item_id, 1);
                    update_counter_status();
                } else {
                    try {
                        set_info_message("Error happened while sending your review. " + data.err_msg);
                        setTimeout(function(){to_review_control();}, 5000);
                    } catch (err) {
                        setTimeout(function(){to_review_control();}, 5000);
                        set_info_message("Error happened while sending your review. Try again please!");
                    };
                };
            } catch (err) {
                setTimeout(function(){to_review_control();}, 5000);
                set_info_message("Error happened while sending your review. Try again please!");
            };
        },"json");
    };
}

function lowercase_and_trim(string) {
    string.toLowerCase().replace(/^\s+|\s+$/g,"");
}

function tpauth_logout() { 
    set_wait_message("Logging out ...");
    for (var j = 0; j < auth_providers.length; j++) {
        provider_cookie_name = auth_providers[j] + "_tpauth";
        var cookies = document.cookie.split(";");
        for (var i = 0; i < cookies.length; i++) {
            cookie_name = cookies[i].split("=")[0];
            if (lowercase_and_trim(cookie_name) == lowercase_and_trim(provider_cookie_name)) {
                expired_cookie = provider_cookie_name + "=del|del; expires=Fri, 16 April 2010 18:59:56 GMT; path=/; domain=.entrecard.com";
                document.cookie = expired_cookie;
                expired_cookie = provider_cookie_name + "=del|del; expires=Fri, 16 April 2010 18:59:56 GMT; path=/;";
                document.cookie = expired_cookie;
            };
        };
    };
    reviews_load_entry_form(item_type, item_id);
}

function review_init(_item_type, _item_id) {
    item_type = _item_type;
    item_id = _item_id;
    // load review entry form
    reviews_load_entry_form(item_type, item_id);

    // load previous reviews
    reviews_load_page(item_type, item_id, 1);
}

