var preview_timer;
function preview_error(caller) {
    caller.onerror = "";
    caller.src = "/images/preview_not_ready.png";
    jQuery(caller).css('width', 100).css('height', 75);
    facebox_top = 0;
    facebox_left = 0;
    if (jQuery('#facebox:visible').length) {
        facebox_top = jQuery('#facebox:visible').offset().top;
        facebox_left = jQuery('#facebox:visible').offset().left;
    }
    if (jQuery(caller).parent().hasClass('preview_under_link')) {
        jQuery(caller).parent().css('width', 100).css('height', 75).css('top', jQuery(caller).parent().offset().top - facebox_top);
    } else {
        jQuery(caller).parent().css('width', 100).css('height', 75).css('top', jQuery(caller).parent().offset().top - facebox_top + 170);
    }
    return true;
}
function oncover_preview_error(caller, caller_id, offset_top, offset_left) {
    caller.onerror = "";
    caller.src = "/images/preview_not_ready.png";
    jQuery(caller).parent().parent().addClass("error-preview");
    jQuery(caller).css('width', 100).css('height', 75);
    jQuery(caller).parent().css('width', 100).css('height', 75).css('left', offset_left + 50).css('top', offset_top - 105);
    jQuery("#preview_caller_" + caller_id).addClass("preview-error");
    return true;
}
function display_item_preview(caller, img_url, img_width, img_height, container_id) {
    remove_all_content_previews(true);
    image = jQuery('<div class="item_preview_container"><div class="item_disable_overlay"></div><img class="content_preview" onerror="preview_error(this)" src="' + img_url + '"/></div>').bind('contextmenu',function(){return false;});
    size_ratio = img_width / img_height;
    if (img_width > 311) {
        img_width = 311;
        img_height = 311 / size_ratio;
        if (img_height > 195) {
            img_width = 195 * size_ratio;
            img_height = 195;
        }
    }
    if (img_height > 195) {
        img_height = 195;
        img_width = 195 * size_ratio;
        if (img_width > 311) {
            img_width = 311;
            img_height = 311 / size_ratio;
        }
    }
    if ((jQuery(caller).offset().top - img_height - 10) > jQuery(window).scrollTop()) {
        image.css('position', 'absolute')
             .css('top', jQuery(caller).offset().top - img_height - 10)
             .css('left', jQuery(caller).offset().left)
             .click(function() { location.href=jQuery(caller).attr('href'); });
    } else {
        image.css('position', 'absolute')
             .css('top', jQuery(caller).offset().top + 20)
             .css('left', jQuery(caller).offset().left)
             .addClass('preview_under_link')
             .click(function() { location.href=jQuery(caller).attr('href'); });
    }
    image.css('width', img_width).css('height', img_height);
    image.find('img').css('height', img_height).css('width', img_width);
    jQuery("#" + container_id).append(image);
    image.addClass('active_preview');
    jQuery(caller).unbind('mouseout').mouseout(function() {
        image.removeClass('active_preview');
        preview_timer = setTimeout('remove_all_content_previews()', 500);
    });
    image.mouseover(function() {
        clearTimeout(preview_timer);
        image.addClass('active_preview');
    }).mouseout(function() {
        image.removeClass('active_preview');
        preview_timer = setTimeout('remove_all_content_previews()', 500);
    });
}
function display_oncover_item_preview(caller, img_url, img_width, img_height, item_link, copyright, type) {
      remove_all_content_previews(true);
      image = jQuery('<div class="item_oncover_preview_container nru"><a href="'+ item_link +'"><img class="content_oncover_preview" onerror="preview_error(this)" src="' + img_url + '"/></a></div>');
      size_ratio = img_width / img_height;
      if (img_width > 300) {
          img_width = 300;
          img_height = 300 / size_ratio;
          if (img_height > 300) {
              img_width = 300 * size_ratio;
              img_height = 300;
          }
      }
      if (img_height > 300) {
          img_height = 300;
          img_width = 300 * size_ratio;
          if (img_width > 300) {
              img_width = 300;
              img_height = 300 / size_ratio;
          }
      }
      scaled_height = 81;
      image.css('position', 'absolute')
           .css('top', jQuery(caller).offset().top - (img_height/2) + (scaled_height/2))
           .css('left', jQuery(caller).offset().left -(img_width/2) + 54)
           .bind('click', function() { location.href=jQuery(caller).attr('href'); });
      image.css('width', img_width).css('height', img_height);
      image.find('img').css('height', img_height).css('width', img_width);
        if (copyright == 'All Rights Reserved'){
            jQuery(image).prepend('<div class="item_disable_overlay"></div>');
            jQuery(image).bind("contextmenu",function(e){
                                                           show_item_copyright_tooltip(e);
                                                           return false;
                                                           });
        }
    if (type.match('Video') != null)
        image.find('.content_oncover_preview').before('<img src="/images/play.png" class="play_over_preview" />');
    
      jQuery('body').append(image);
      
      image.addClass('active_preview');
      image.mouseenter(function() {
          clearTimeout(preview_timer);
          image.addClass('active_preview');
      }).mouseleave(function() {
          hide_item_copyright_tooltip();
          jQuery('.item_oncover_preview_container').unbind("contextmenu");
          image.removeClass('active_preview');
          preview_timer = setTimeout('remove_all_content_previews()', 500);
      });
  }

var tooltipVisiblePreview = false;
function show_item_copyright_tooltip(e){
    //get crossbrowser pointer position
    if (tooltipVisiblePreview){
        hide_item_copyright_tooltip();
        $(document).unbind('click',hide_item_copyright_tooltip);
        return ;
    }
    tooltipVisiblePreview = true;
    var posx=0;
    var posy=0;
    
    if (e.pageX || e.pageY) {
        posx = e.pageX;
        posy = e.pageY;
    }
    else if (e.clientX || e.clientY) {
        posx = e.clientX + document.body.scrollLeft
        + document.documentElement.scrollLeft;
        posy = e.clientY + document.body.scrollTop
        + document.documentElement.scrollTop;
    }
    
    var tooltip =  jQuery('<span class="copyright_tooltip">This Image is <img src="/images/copyright_icons/all_rights_reserved.png" title="All Rights Reserved"/> All Rights Reserved</span>') ;
    
    tooltip.css({
                left : posx + 2,
                top: posy + 2 ,
                }).appendTo('body').show();
    
    $(document).one('mousedown',hide_item_copyright_tooltip);
}

function hide_item_copyright_tooltip(){
    if (tooltipVisiblePreview){
        tooltipVisiblePreview = false;
        $('.copyright_tooltip:last').remove();
    }
}
function display_oncover_preview(caller, img_url, col_link) {
    remove_all_content_previews(true);
    if (!jQuery(caller).attr("id")) {
        current_time = new Date();
        new_id = current_time.getTime();
        jQuery(caller).attr("id", "preview_caller_" + new_id);
    }
    image = jQuery('<div class="collection_preview_container nru"><a href="'+col_link+'"><img class="content_preview" onerror="oncover_preview_error(this, ' + new_id + ', ' + jQuery(caller).offset().top + ', ' + jQuery(caller).offset().left + ')" src="' + img_url + '"/></a</div>');
    if (!jQuery(caller).hasClass("preview-error")) {
        image.css('position', 'absolute')
             .css('top', jQuery(caller).offset().top - 185)
             .css('left', jQuery(caller).offset().left - 90)
    } else {
        image.css('position', 'absolute')
             .css('top', jQuery(caller).offset().top - 105)
             .css('left', jQuery(caller).offset().left + 50)
    }
    if (jQuery(caller).attr('rel') == 'facebox') {
        image.click(function() { jQuery.facebox({ajax: jQuery(caller).attr('href')}); });
    } else {
        image.click(function() { location.href=jQuery(caller).attr('href'); });
    }
    image.addClass('active_preview');
    image.find('img').css('width', '100%').css('height', '100%');
    jQuery('body').append(image);
    jQuery(caller).unbind('mouseout').mouseout(function() {
        image.removeClass('active_preview');
        preview_timer = setTimeout('remove_all_content_previews()', 500);
    });
    image.mouseover(function() {
        clearTimeout(preview_timer);
        image.addClass('active_preview');
    }).mouseout(function() {
        image.removeClass('active_preview');
        preview_timer = setTimeout('remove_all_content_previews()', 500);
    });
}
function display_collection_preview(caller, img_url, container_id) {
    remove_all_content_previews(true);
    image = jQuery('<div class="collection_preview_container nru"><img class="content_preview" onerror="preview_error(this)" src="' + img_url + '"/></div>');
    facebox_top = 0;
    facebox_left = 0;
    if (jQuery(caller).hasClass('preview-privacy')) {
        preview_w = 220;
        preview_h = 124;
        image.css('width', 220).css('height', 124);
    } else {
        preview_h = 244;
        preview_w = 389;
    }
    if (jQuery('#facebox:visible').length) {
        facebox_top = jQuery('#facebox:visible').offset().top;
        facebox_left = jQuery('#facebox:visible').offset().left;
    }
    if ((jQuery(caller).offset().top - preview_h) > jQuery(window).scrollTop()) {
        image.css('position', 'absolute')
             .css('top', jQuery(caller).offset().top - facebox_top - (preview_h + 10))
             .css('left', jQuery(caller).offset().left - facebox_left)
             .click(function() { location.href=jQuery(caller).attr('href'); });
    } else {
        image.css('position', 'absolute')
             .css('top', jQuery(caller).offset().top - facebox_top + 25)
             .css('left', jQuery(caller).offset().left - facebox_left)
             .addClass('preview_under_link')
             .click(function() { location.href=jQuery(caller).attr('href'); });
    }
    if ((jQuery(caller).offset().left + preview_w) > (jQuery("#external_wrapper").offset().left + jQuery("#external_wrapper").width())) {
        image.css('left', jQuery(caller).offset().left - facebox_left + (jQuery("#external_wrapper").offset().left + jQuery("#external_wrapper").width()) - (jQuery(caller).offset().left + preview_w));
    }
    image.addClass('active_preview');
    image.find('img').css('width', '100%').css('height', '100%');
    jQuery("#" + container_id).append(image);
    jQuery(caller).unbind('mouseout').mouseout(function() {
        image.removeClass('active_preview');
        preview_timer = setTimeout('remove_all_content_previews()', 500);
    });
    image.mouseover(function() {
        clearTimeout(preview_timer);
        image.addClass('active_preview');
    }).mouseout(function() {
        image.removeClass('active_preview');
        preview_timer = setTimeout('remove_all_content_previews()', 500);
    });
}

function badgeSuccessPrepend(ele){
    return function(data){
        ele.action.find(".relationship_btn").remove();
        if (data && data == 'review')
            ele.action.html('<a href="/relationships/incoming_request" class="relationship_btn">Review user request</a>');
        else
            ele.action.prepend(ele.msg);
        ele.loader.hide();
        ele.action.show();
    }
}

function badgeSuccessAppend(ele){
    return function(){
        ele.action.find(".follow_btn").remove();
        ele.action.append(ele.msg);
        ele.loader.hide();
        ele.action.show();
    }
}

function badgeAddContact(e,id,source){
    e.stopPropagation();
    e.preventDefault();
    
    var ele = {
        loader : $(e.target).parents(".user_badge_data").find("#contact_spinner").show(),
        action : $(e.target).parent().hide(),
        msg : '<span class="relationship_btn">Waiting for Acceptance</span>',
    }
    
    jQuery.post("/users/add_contact",{user_id:id},badgeSuccessPrepend(ele));
}

function badgeRemoveContact(e,id){
    e.stopPropagation();
    e.preventDefault();
    var ele = {
        loader : $(e.target).parents(".user_badge_data").find("#contact_spinner").show(),
        action : $(e.target).parent().hide(),
        msg : '<a href="" onclick="badgeAddContact(event,'+id+'); return false;" class="relationship_btn">Add as Contact</a> | <a href="" onclick="follow(event, '+id+'); return false;" class="follow_btn">Follow</a>',
    }
    jQuery.post("/users/remove_contact",{user_id:id},badgeSuccessPrepend(ele));
}

function badgeAddFollow(e,id){
    e.stopPropagation();
    e.preventDefault();
    var ele = {
        
        loader : $(e.target).parents(".user_badge_data").find("#contact_spinner").show(),
        action : $(e.target).parent().hide(),
        msg : '<a href="" onclick="badgeRemoveFollow(event, '+id+'); return false;" class="follow_btn">Unfollow</a>',
    }
    jQuery.post("/users/add_follow",{user_id:id},badgeSuccessAppend(ele));
}

function badgeRemoveFollow(e,id){
    e.stopPropagation();
    e.preventDefault();
    var ele = {
        loader : $(e.target).parents(".user_badge_data").find("#contact_spinner").show(),
        action : $(e.target).parent().hide(),
        msg : '<a href="" onclick="badgeAddFollow(event, '+id+'); return false;" class="follow_btn">Follow</a>',
    }
    
    jQuery.post("/users/remove_follow",{user_id:id},badgeSuccessAppend(ele));
}

function badgeContactInfo(ele){
    return function(data){
        var badge = '';
        if (data.relationship == "active")
        badge = badge + '<a href="" onclick="badgeRemoveContact(event, '+ele.user_id+'); return false;" class="relationship_btn">Remove Contact</a>';
        else if (data.relationship == "waiting"){
            badge = badge + '<span class="relationship_btn">Waiting for Acceptance</span>';
            badge = badge + ' |';
            if (data.follow == true)
                badge = badge + ' <a href="" onclick="badgeRemoveFollow(event, '+ele.user_id+'); return false;" class="follow_btn">Unfollow</a>';
            else   
                badge = badge + ' <a href="" onclick="badgeAddFollow(event, '+ele.user_id+'); return false;" class="follow_btn">Follow</a>';
        }
        else if (data.relationship == "inactive"){
            badge = badge + '<a onclick="badgeAddContact(event, '+ele.user_id+'); return false;" class="relationship_btn">Add as Contact</a>';
            
            badge = badge + ' |';
            if (data.follow == true)
                badge = badge + ' <a href="" onclick="badgeRemoveFollow(event, '+ele.user_id+'); return false;" class="follow_btn">Unfollow</a>';
            else   
                badge = badge + ' <a href="" onclick="badgeAddFollow(event, '+ele.user_id+'); return false;" class="follow_btn">Follow</a>';
        } else if (data.relationship == "review"){
            badge = badge + '<a href="/relationships/incoming_request" class="relationship_btn">Review user request</a>';
        }
        ele.loader.hide();
        ele.action.append(badge);
    }
}

function display_user_preview(caller, user_avatar, user_name, user_profession, user_country, container_id, user_id) {
    remove_all_content_previews(true);
    badge = '<div class="user_badge_preview_container">' +
                '<div class="person_text_fader">&nbsp;</div>';
    if (user_avatar != null) {
        badge = badge + '<div class="user_badge_user_avatar"><img src="' + user_avatar + '"/></div>';
    }
    badge = badge + '<div class="user_badge_data">' +
        '<p class="user_badge_user_name">' + user_name + '</p>' +
        '<p class="user_badge_user_profession">' + user_profession + '</p>' +
        '<p class="user_badge_user_country">' + user_country + '</p>' +
    
        '<img id="contact_spinner" src="/images/spinner_small.gif" style="display:none;"/>' + 
        '<div class="action">'+
        '</div>'+
        '</div>' +
        '<div class="clear"></div>' +
    '</div>';
    
    user_badge = jQuery(badge);
    if (user_id != ''){
        //download contact info
        var ele = {
            action: user_badge.find(".action"),
            loader: user_badge.find("#contact_spinner").show(),
            user_id: user_id
        };
        jQuery.get("/users/contact_info",{user_id:user_id,_time:Math.round(+new Date()/1000)},badgeContactInfo(ele));
    }
    
    facebox_top = 0;
    facebox_left = 0;
    if (jQuery('#facebox:visible').length) {
        facebox_top = jQuery('#facebox:visible').offset().top;
        facebox_left = jQuery('#facebox:visible').offset().left;
    }
    if ((jQuery(caller).offset().top - 80) > jQuery(window).scrollTop()) {
        user_badge.css('position', 'absolute')
                  .css('top', jQuery(caller).offset().top - facebox_top - 80)
        .css('left', jQuery(caller).offset().left - facebox_left)
                  .click(function() { location.href=jQuery(caller).attr('href'); });
    } else {
        user_badge.css('position', 'absolute')
                  .css('top', jQuery(caller).offset().top - facebox_top + 20)
        .css('left', jQuery(caller).offset().left - facebox_left)
                  .click(function() { location.href=jQuery(caller).attr('href'); });
    }
    user_badge.addClass('active_preview');
    jQuery("body").append(user_badge);
    jQuery(caller).unbind('mouseout').mouseout(function() {
        user_badge.removeClass('active_preview');
        preview_timer = setTimeout('remove_all_content_previews()', 500);
    });
    user_badge.mouseover(function() {
        clearTimeout(preview_timer);
        user_badge.addClass('active_preview');
    }).mouseout(function() {
        user_badge.removeClass('active_preview');
        preview_timer = setTimeout('remove_all_content_previews()', 500);
    });
}
function remove_all_content_previews(also_active) {
    if (!also_active) {
        jQuery('.collection_preview_container').not('.active_preview').remove();
        jQuery('.item_preview_container').not('.active_preview').remove();
        jQuery('.item_oncover_preview_container').not('.active_preview').remove();
        jQuery('.user_badge_preview_container').not('.active_preview').remove();
    } else {
        jQuery('.collection_preview_container').remove();
        jQuery('.item_preview_container').remove();
        jQuery('.item_oncover_preview_container').remove();
        jQuery('.user_badge_preview_container').remove();
    }
}
