/*
 * SocialEngineMods Voter v1.0
 * http://www.SocialEngineMods.Net
 *
 * Copyright SocialEngineMods.Net
 *
 */

// public
var user_vote_is_by_me = 1;
var user_vote_current_page = 1;
var user_total_votes = 1;
var user_votes_last_visible = 1;
var user_owner_id = 0;
var voter_ajax_template_id = 0;
var voter_ajax_endpoint = "ajax_vote.php";

// private
var vote_elem = "vote_base";
var voter_profile_button_hide_timer = 0;
var voter_profile_box_hide_timer = 0;


function voter_vote_profile_button(votee) {
  SEMods.B.hide("vote_msg");
  clearTimeout(voter_profile_button_hide_timer);
  voter_profile_button_hide_timer = 0;

  SEMods.B.toggle("vote_progress", vote_elem )
  vote_elem = "vote_again";
  voter_submit_vote(votee, voter_profile_button_guicb);
}

function voter_profile_button_guicb(r) {
  SEMods.B.toggle("vote_progress", "vote_again");

  var div = SEMods.B.ge("vote_msg");
  if(!div) {
    div = document.createElement("DIV");
    div.id = "vote_msg";
    document.body.appendChild( div );
  }
  
  // Got error message from ajax
  if(r.status != 0)
    div.className = "vote_msg_error";
    
  var elem = SEMods.B.ge("vote_again");
  
  div.style["top"] = SEMods.B.findY(elem) - 5 - elem.offsetHeight*2 + "px";
  div.style["left"] = SEMods.B.findX(elem) - 1 + "px";
//  div.style["width"] = elem.offsetWidth - 7 + "px";
  div.style["width"] = elem.offsetWidth + 2 + "px";
//  div.style["height"] = elem.offsetHeight - 5 + "px";
  div.style["height"] = elem.offsetHeight*2 + "px";
  div.innerHTML = "<div id='vote_msg_inner'>" + r.msg + "</div>";
  
  SEMods.B.show("vote_msg");

  voter_update_page_elements( r );
    
  voter_profile_button_hide_timer = setTimeout( function() {SEMods.B.hide("vote_msg");voter_profile_button_hide_timer = 0;}, 5000 );

}

function voter_vote_profile_box(votee) {
  clearTimeout(voter_profile_box_hide_timer);
  voter_profile_box_hide_timer = 0;

  SEMods.B.hide("voter_profile_box_msg", "voter_profile_box_default");
  SEMods.B.show("voter_profile_box_progress");

  voter_submit_vote(votee, voter_profile_box_guicb);
}

function voter_profile_box_guicb(r) {
  SEMods.B.toggle("voter_profile_box_progress", "voter_profile_box_default");

  var div = SEMods.B.ge("voter_profile_box_msg");
  if(div) {
    div.innerHTML = r.msg;
    
    // Got error message from ajax
    if(r.status != 0)
      div.className = "vote_msg_error";
  }

  SEMods.B.show("voter_profile_box_msg");

  voter_update_page_elements( r );
    
  voter_profile_box_hide_timer = setTimeout( function() {SEMods.B.hide("voter_profile_box_msg");voter_profile_box_hide_timer = 0;}, 5000 );

}

function voter_submit_vote(votee, guicb) {
  var ajax = new SEMods.Ajax( onVoteSuccess, onVoteFail );
  var params = "task=vote&votee=" + votee;
  ajax.guicb = guicb;
  
  ajax.post( voter_ajax_endpoint,  params );
}

function onVoteSuccess(ajaxObj, respText) {
  var r = [];
  try {
    r = eval('('+respText+')');
  } catch(e) {
    r.status = 1;
    r.msg = "Internal Error";
  }
  
  if(ajaxObj.guicb)
    ajaxObj.guicb(r);
  
}

function onVoteFail(ajaxObj, respText) {
  var r = { status: 1, msg : "HTTP Error" };
  
  if(ajaxObj.guicb)
    ajaxObj.guicb(r);
}

function voter_update_page_elements(r) {

  if(r.status == 0) {

    // update vote counter on page
    div = SEMods.B.ge("voter_vote_count");
    if(div) 
      div.innerHTML = r.voteCount;

    // update points counter on page
    div = SEMods.B.ge("voter_points_count");
    if(div) 
      div.innerHTML = r.pointsCount;

    voter_rollout(r.rollout_html);

  }

}

function paginate_left(page) {
  SEMods.B.ge("left_paginator").blur();
  
  if(user_vote_current_page == 1)
    return false;
  
  voter_paginate(user_vote_current_page-1);
}

function paginate_right(page) {
  SEMods.B.ge("right_paginator").blur();
  
  if(user_total_votes == user_votes_last_visible)
    return false;
  
  voter_paginate(user_vote_current_page+1);
}

function voter_paginate(page) {
  SEMods.B.toggle("ajax_progress", "ajax_content")

  var ajax = new SEMods.Ajax( onPaginateSuccess, onPaginateFail );
  
  var params = "task=getvotes&u=" + user_owner_id + "&p=" + page + "&my=" + user_vote_is_by_me + "&t=" + voter_ajax_template_id;
  
  ajax.post( voter_ajax_endpoint,  params );

}

function onPaginateSuccess(ajaxObj, responseText) {
  var r = [];
  try {
    r = eval('('+responseText+')');
    
  } catch(e) {
    r.status = 1;
    r.html = '';
  };

  if(r.status == 0) {
    user_vote_current_page = r.page;
    user_total_votes = r.total;
    user_votes_last_visible = r.to;
    
    SEMods.B.ge("page_from").innerHTML = r.from;
    SEMods.B.ge("page_to").innerHTML = r.to;
    SEMods.B.ge("total_votes").innerHTML = r.total;
    
    if(user_total_votes == 0) {
      SEMods.B.hide("voter_votes");
      SEMods.B.show("voter_no_votes");
    } else {

      SEMods.B.show("voter_votes");
      SEMods.B.hide("voter_no_votes");

      if((user_vote_current_page == 1) && (user_votes_last_visible == user_total_votes))
        SEMods.B.hide("voter_paginator");
      else
        SEMods.B.show("voter_paginator");
      
    }
    
    if(user_vote_current_page == 1) {
      SEMods.B.ge("left_paginator").className = "paginator_disabled";
    }
    else {
      SEMods.B.ge("left_paginator").className = "";
    }

    if(r.total == r.to) {
      SEMods.B.ge("right_paginator").className = "paginator_disabled";
    }
    else {
      SEMods.B.ge("right_paginator").className = "";
    }
  }
  
  SEMods.B.ge("ajax_content").innerHTML = r.html;
  SEMods.B.toggle("ajax_progress", "ajax_content")
}

function onPaginateFail(ajaxObj, respText) {
  SEMods.B.ge("ajax_content").innerHTML = "Error";
  SEMods.B.toggle("ajax_progress", "ajax_content")
}

function voter_rollout(html) {
  var voters = SEMods.B.ge("voters_wrap");
  
  if(!voters)
    return;
  
  var div= document.createElement("DIV");
  div.id = "voter";
  div.innerHTML = html;
  
  voters.insertBefore( div, voters.firstChild );
  voters.style["marginLeft"] = -72 + "px";

  setTimeout(voter_slide, 50);
}

function voter_slide() {
  if(!voter_slide.marginLeft) voter_slide.marginLeft = SEMods.Browser.getStyleName("marginLeft");
  
  var voters = SEMods.B.ge("voters_wrap");
  
  var m = parseInt(SEMods.Browser.getStyle( voters, voter_slide.marginLeft ));
  if(m >= 0)
    return;
    
  var delta = Math.round(Math.max(2, Math.min(12, Math.abs(m)/3))) ;
  voters.style["marginLeft"] = m + delta + "px";
  
  setTimeout(voter_slide, 50);
}

    
function voter_switch_tab(tab_id) {
  document.getElementById("votetab" + tab_id).className = 'tab1';
  document.getElementById("votetab" + tab_id).blur();
  document.getElementById("votetab" + (tab_id+1)%2 ).className = 'tab2';
  document.getElementById("votetab" + (tab_id+1)%2 ).blur();
  user_vote_is_by_me = 1*(tab_id == 1);
  voter_paginate(0);
}

function voter_growtable() {
  SEMods.B.toggle("voter_basic_table", "voter_full_table");
}
