﻿var $tabs = null;
var deferred = null;

$(function () {
  initTabs();
  initFilters();

  if(hasFavorites())
		$('#favoritesTabLi').show();
	
  initRefresh();
  
	if(deferred!=null){
		if(deferred.tabindex==undefined)
			deferred.tabindex = 0;
		if(deferred.page==undefined)
			deferred.page = 0;
		if(deferred.tabindex == 7)
			$('#filterTabLi').show();
		if(deferred.tabindex == 0){
			//$tabs.click(deferred.tabindex);//doesnt work if tabindex==0
			proxy.getTabCams("#onlinecontainer", 0, function (msg) { CamsReceived(msg, "#onlinecontainer"); });
		}
		else
			$tabs.click(deferred.tabindex);
	}
})

function initTabs() {
  $(function () {
    $(".center ul.camtabs li a span").each(function () {
      var x = $(this).attr('rel') + "container";
      $('<div class="pane clearfix"><div id="' + x + '"></div></div>').appendTo('div.panes');
    });

    var totalTabs = $('div.panes > div.pane > div').size();
    $('div.panes > div.pane > div').slice(1, totalTabs).each(function () {
      $(this).data(this.id, 1);
    });

    $(".center ul.camtabs").tabs("div.panes > div.pane", {
      effect: 'fade',
      //fxSlide: true,
      onBeforeClick: function (event, tabindex) {
        var currentTabID = "#" + $('div', this.getPanes().eq(tabindex)).attr('id');
        var currentPageIndex = ($(currentTabID).data(currentTabID) == undefined) ? null : $(currentTabID).data(currentTabID);
        if (tabindex === 0)
					currentPageIndex = 1;
        if(deferred!=null){
					currentPageIndex = deferred.page;
					deferred = null;
				}
				spin('.buttons');
				proxy.getTabCams(currentTabID, currentPageIndex, function (msg) { CamsReceived(msg, currentTabID); });
      }
    }).history();
    $tabs = $(".center ul.camtabs").tabs();
  });
}

function initFilters() {
  $(function () {
    $("#camfilter #dropdowns :input").change(function(e){
			$('#filterTabLi').show();
			$("#usernamesearch").val("");
			if($tabs.getIndex()!=7)
				$tabs.click(7);
			else{
				spin('.buttons');
				proxy.getFilterCams(1, function (msg) { CamsReceived(msg, "#filtercontainer"); });
			}
    });
    $("#usernamesearch").keydown(function(e){
			if(e.keyCode && e.keyCode==13){
				$('#filterTabLi').show();
				if($tabs.getIndex()!=7)
					$tabs.click(7);
				else{
					spin('.buttons');
					proxy.getFilterCams(1, function (msg) { CamsReceived(msg, "#filtercontainer"); });
					return false;
				}
			}
    });
    $("#filterbutton").click(function(e){
			$('#filterTabLi').show();
			if($tabs.getIndex()!=7)
				$tabs.click(7);
			else{
				spin('.buttons');
				proxy.getFilterCams(1, function (msg) { CamsReceived(msg, "#filtercontainer"); });
				return false;
			}
    });
  });
}

function initRefresh(){
  $('.refreshcams').click(function (){
    GotoSpinner($(this).attr('rel'));
  });

  function GotoSpinner(selector){
    spin('.buttons');
    $(selector).stop().animate({ 'opacity': 0.5 }, 300);
    $("span.t, label.t").hide();

    var currentPageIndex = ($(selector).data(selector) == undefined) ? null : $(selector).data(selector);
    proxy.getTabCams(selector, currentPageIndex, function (msg) { CamsReceived(msg, selector); });
  };
  
  $("#view").data("currView", $(this).find("input:radio:checked")[0]);
  $("#view").change(function (event){
    if ($(event.target).is("input:radio") && event.target !== $(this).data("currChecked")){
      $(this).data("currView", event.target);

      var selector = $('.refreshcams').attr('rel');
      var reqview = $(event.target).val();
      CamsReceived(cammerData, selector);
    }
  });
}

function CamsReceived(msg, selector){
  cammerData = msg;
  
  pIndex = new Array();
  delayed = null;
  
  if (selector == "#onlinecontainer" || selector == "#femalecontainer"){
		if(cammerData.CurrentPage && cammerData.CurrentPage==1)
			topID = cammerData.Cammers[0].ID;
	}
  
	var view = $('#view :radio:checked').val();
	if (view == "listview")
		$(selector).setTemplateURL('htmltemplates/listoverview.htm');
	else
		$(selector).setTemplateURL('htmltemplates/camoverview.htm');

  $(selector).processTemplate(msg);

	if (selector !== "#top20container" && selector !== "#overlayContent"){
		$("#camcount").attr("count", msg.ItemCount);
		if(msg.PageTotal<=1)
			$("#camcount").attr("page", 0);
		else
			$("#camcount").attr("page", msg.CurrentPage);
		$("span.pagecount").html(msg.CurrentPage + " / " + msg.PageTotal);
		$("#camcount").show();
  }
  else
		$("#camcount").hide();
  
  if (selector !== "#onlinecontainer" && selector !== "#favoritescontainer" && selector !== "#top20container" && selector !== "#filtercontainer" /*&& selector !== "#overlayContent"*/)
    UpdatePaging(selector, msg.CurrentPage, msg.PageTotal);
  else if(selector !== "#filtercontainer")
    $(selector + " div.paging").hide();
  else if(msg.PageTotal<=1)//filter exception
		$(selector + " div.paging").hide();
  else
		UpdatePaging(selector, msg.CurrentPage, msg.PageTotal);

  OnCamsCompleteInfo(selector);
}

function UpdatePaging(selector, currentpage, totalpages) {
  if (currentpage !== 1) {
    $(selector + " a.prevpage")
      .attr('rel', currentpage - 1)
      .click(function () {
        GotoPage(selector, $(this).attr('rel'));
      }).show();

    $(selector + " a.firstpage")
      .click(function () {
        GotoPage(selector, 1);
      }).show();
  }
  else {
    $(selector + " a.prevpage").hide();
    $(selector + " a.firstpage").hide();
  }
  if (currentpage !== totalpages) {
    $(selector + " a.nextpage")
      .attr('rel', currentpage + 1).click(function () {
        GotoPage(selector, $(this).attr('rel'));
      }).show();
    $(selector + " a.lastpage").click(function () {
        GotoPage(selector, totalpages);
      }).show();
  }
  else {
    $(selector + " a.nextpage").hide();
    $(selector + " a.lastpage").hide();
  }
  
  function GotoPage(selector, page) {
    spin('.buttons');
    $(selector).stop().animate({ 'opacity': 0.5 }, 300);

    $(selector).data(selector, page);
    proxy.getTabCams(selector, page, function (msg) { CamsReceived(msg, selector); });
  }
}

function OnCamsCompleteInfo(selector) {
	SetUpPayOverlay(selector + " a.paylink");
	SetUpPayCheck(selector + " a.paylink");
	if(supportsCookie())
		SetupFavorites(selector + " button.modalInput");
	else
		SetupCookieWarning(selector + " button.modalInput");
  SetUpImgPaging(selector);
  unspin('.buttons');
  $(selector).stop().animate({ 'opacity': 1 }, 300);
  $(".refreshcams").attr('rel', selector);
  Translate();
  $("#t"+($tabs.getIndex()+1)).blur();
}

var trigger = null;

function SetUpPayCheck(selector) {
  $(selector).click(function (){
		trigger = $(this);
		var camid = $(this).attr("camid");
    proxy.getCamAndPayState(camid, function (msg) { StateReceived(msg, camid); });
    return false;
  })
}

function StateReceived(msg, camid) {
	if(msg.result == "continue"){
		var camid = trigger.attr("camid");
		window.location = "flash/campage.aspx?userID="+camid;
	}
	else if(msg.online && !msg.paying)//display wallet
		GoPayOverlay();
	else if(!msg.online)//show offline
		ShowOfflineWarning();	
}

function SetUpPayOverlay(){
	$("#overlay").overlay({
		expose: {
			color: '#FFF',
			loadSpeed: "slow",
			closeSpeed: 800,
			opacity: 0.8
		},
    onBeforeLoad: function () {
			$(".overlay").css("width",412);
      var wrap = this.getContent().find(".contentWrap");
      thehref = trigger.attr("href");
      thehref = thehref.replace("info", "overlayinfo");
      var lang = (readCookie("_Midhold") == null) ? "en-US" : readCookie("_Midhold");

      var camid = trigger.attr("camid");
			var infohtml = "<iframe id='walletframe' scrolling='no' frameborder='0' style='border: none; width:412px; height: 350px;' src='wallet/?userid=" + camid + "&lang=" + lang + "' />";
      wrap.html(infohtml);
    },
    onClose: function () {
			$(".overlay").css("width",412);
      var wrap = this.getContent().find(".contentWrap");
      wrap.html("");
    },
    closeOnClick: true,
    top: 'center', 
		left: 'center', 
		absolute: false
		
  });
}

function GoPayOverlay() {
  var api = $("#overlay").overlay();	
	api.load();
}

function ShowOfflineWarning(){
	var questionhead = $(".questionheadWrap");
	var question = $(".questionWrap");
  if(questionhead && question)
		questionhead.toggleClass("error", true);
	questionhead.html(_locData.Label["offline"]);
	question.html(_locData.Label["error_offline"]);
	var api = $("#prompt").overlay();
	api.load();
	var item = trigger.parents(".camitem");	
	var onlinelink = item.find("li.online");
	var freechatlink = item.find("li.freechat");
	if(freechatlink)
		freechatlink.fadeOut("slow");
	onlinelink.fadeOut("slow");
}

function SetupCookieWarning(selector) {
	$(selector).overlay({
		expose: {
			color: '#FFF',
			loadSpeed: "slow",
			closeSpeed: 800,
			opacity: 0.8
		},
		oneInstance: true,
		onBeforeLoad: function () {
      var questionhead = this.getContent().find(".questionheadWrap");
			var question = this.getContent().find(".questionWrap");
      
      questionhead.toggleClass("error", true);
			//questionhead.addClass("refresh");
      
			questionhead.html(_locData.Label["enable_cookies"]);
			question.html(_locData.Label["enable_cookies_explained"]);
    },
		closeOnClick: true,
		top: 'center', 
		left: 'center', 
		absolute: false
	});
}

function SetupFavorites(selector){
	$(selector).click(function(e){
			var currTrigger = $(this);
			currTrigger.blur();
      var camid = currTrigger.attr("camid");
      var nick = currTrigger.attr("nick");
      if(existsFavorite(camid)&&delFavorite(camid)){
				if($tabs.getIndex()==6)
					currTrigger.parents(".camitem").fadeOut("slow");
				else{
					currTrigger.removeClass("delfav");
					currTrigger.addClass("addfav");
					
					var nick = currTrigger.attr("nick");
					currTrigger.attr("title",String.format(_locData.Label["favorites_add"], nick).toTitleCase());
					currTrigger.html("("+String.format(_locData.Label["favorites_add"], nick).toTitleCase()+")");
					
					var item = currTrigger.parents(".camitem");
					item.removeClass("favorite");
					
					var imgoverlay = item.find(".imgoverlay");
					if(imgoverlay){
						if(item.hasClass("topcam"))
							imgoverlay.html("TopCammer");
						else
							imgoverlay.fadeOut(2000);
					}
				}
      }
			else if(addFavorite(camid)){
				currTrigger.removeClass("addfav");
				currTrigger.addClass("delfav");
				
				var nick = currTrigger.attr("nick");
				currTrigger.attr("title",String.format(_locData.Label["favorites_delete"], nick).toTitleCase());
				currTrigger.html("("+String.format(_locData.Label["favorites_delete"], nick).toTitleCase()+")");
				
				var item = currTrigger.parents(".camitem");
				item.addClass("favorite");
				
				var imgoverlay = item.find(".imgoverlay");
				if(imgoverlay){
					if(item.hasClass("topcam"))
						imgoverlay.html("TopCammer / "+_locData.Label["favorite"]);
					else{
						imgoverlay.html(_locData.Label["favorite"]);
						imgoverlay.fadeIn(1000);
					}
				}
			}
			if(hasFavorites()){
				if($tabs.getIndex()!=6)
					$('#favoritesTabLi').show();
					$('#tabFavorites').html(String.format(_locData.Label["tabFavorites"], getNumFavorites()));;
			}
			else{
				if($tabs.getIndex()==6)
					$tabs.click(0);
				$('#favoritesTabLi').hide();
			}
 	});
}

var imgreq = null;
var delayed = new Object();

function SetUpImgPaging(selector) {
  $(selector+" .previousimg").click(function () {
		if(!imgreq){
			imgreq = true;
			var obj = new Object();
			obj.camid = $(this).attr('camid');
			obj.nextImgIndex = getImgIndex(obj.camid, "down");
			$("#piclink_"+obj.camid+"_"+$tabs.getIndex()+" .refresh").fadeIn("slow");
			delayed = obj;
			delayed.timeoutID = setTimeout('delayedGetCamImg()',1000);
		}
  });
  $(selector+" .nextimg").click(function () {
		if(!imgreq){
			imgreq = true;
			var obj = new Object();
			obj.camid = $(this).attr('camid');
			obj.nextImgIndex = getImgIndex(obj.camid, "up");
			$("#piclink_"+obj.camid+"_"+$tabs.getIndex()+" .refresh").fadeIn("slow");
			delayed = obj;
			delayed.timeoutID = setTimeout('delayedGetCamImg()',1000);
		}
  });
}

function delayedGetCamImg()
{
	if(imgreq)
		proxy.getCamImg(delayed.camid, delayed.nextImgIndex, function (msg) { ImgReceived(msg, delayed.camid); });
}

var pIndex = new Array();
function getImgIndex(camid, dir){
	if(pIndex.length>0){
		for(var i=0;i<pIndex.length;i++){
			if(camid==pIndex[i].camid){
				if(dir=="up")
					pIndex[i].index++;
				else
					pIndex[i].index--;
				return pIndex[i].index;
			}
		}
	}
	pic = new Object();
	pic.camid = camid;
	if(dir=="up")
		pic.index = 1;
	else
		pic.index = -1;
	pIndex[pIndex.length] = pic;
	
	return pic.index;
}

function ImgReceived(msg, camid) {
	msg.online=(msg.online==1?true:false);
	var photos = $("#piclink_"+camid+"_"+$tabs.getIndex()+" .photos");
	var wasonline = true;
	if(photos.length>0)
		wasonline = photos.attr("online")==1?true:false;
	var picholder = $("#piclink_"+camid+"_"+$tabs.getIndex()+" .picholder");
  if(msg.index==0)
		picholder.html("<img src=\""+msg.result+"\" alt=\"\" /><span class=\"livescreen\" ><span class=\""+(msg.online?"online":"offline")+"\" >"+(msg.online?"online":"offline")+"</span>live screenshot</span>");
	else
		picholder.html("<img src=\""+msg.result+"\" alt=\"\" /><span class=\"photos\" index=\""+msg.index+"\" photos=\""+msg.images+"\" online=\""+(msg.online?"1":"0")+"\"><span class=\""+(msg.online?"online":"offline")+"\" >"+(msg.online?"online":"offline")+"</span>"+String.format(_locData.Label["photoseries"], msg.index, msg.images)+"</span>");
	$("#piclink_"+camid+"_"+$tabs.getIndex()+" .refresh").fadeOut("slow");
	if(wasonline!=msg.online){
		var item = picholder.parents(".camitem");
		var onlinelink = item.find("li.online");
		var freechatlink = item.find("li.freechat");
		if(msg.online)
			onlinelink.fadeIn("slow");
		else
			onlinelink.fadeOut("slow");
		if(freechatlink){
			if(msg.online)
				freechatlink.fadeIn("slow");
			else
				freechatlink.fadeOut("slow");
		}
	}
	imgreq = false;
}

// create custom animation algorithm for jQuery called "drop"  
$.easing.drop = function (x, t, b, c, d) {
  return -c * (Math.sqrt(1 - (t /= d) * t) - 1) + b;
};

// create custom overlay effect for jQuery Overlay 
$.tools.overlay.addEffect("drop",
  function (done) {// loading animation 
    var animateProps = {
      top: '+=55',
      opacity: 1,
      width: '+=20'
    };
    this.getOverlay().stop().animate(animateProps, "medium", 'drop', done).show();
  },
  function (done) {// closing animation 
    var animateProps = {
      top: '-=55',
      opacity: 0,
      width: '-=20'
    };
    this.getOverlay().stop().animate(animateProps, "fast", 'drop', function () {
      $(this).hide();
      done.call();
    });
  }
);

function spin(selector) {
  $(selector + ' .spinny').css({
    'display': 'block',
    'opacity': 0
  }).stop().animate({
    'opacity': 1
  },
  300);
}

function unspin(selector) {
  $(selector + ' .spinny').stop().animate({
    'opacity': 0
  },
  300);
}