﻿var initRequest = true;
var deferred = null;
var tabArray = new Array();

function getQuerystring() {
	var queries = null;
	try{
		if(document.location.toString().indexOf("#!")>=0)
			queries = document.location.toString().substring(document.location.toString().indexOf("#!")+2,document.location.toString().length);
	}catch(e){}
	return queries;
}

function readTabs(){
  $(".center ul.camtabs li a").each(function (i) {
    var tab = new Object();
    tab.name = $(this).attr('id');
    tab.key = $(this).attr('href').replace("#!","").replace("=1","").toLowerCase();
    tab.container = "#"+$(this).children("span").attr('rel')+"container";
    tab.index = i;
    tabArray[tabArray.length] = tab;
  });
}

function isTab(key){
	for(var i=0;i<tabArray.length;i++){
		if(tabArray[i].key==key)
			return true;
	}
	return false;
}

function getTabIndex(key){
	for(var i=0;i<tabArray.length;i++){
		if(tabArray[i].key==key)
			return tabArray[i].index;
	}
	return false;
}

/*function getContainerId(key){
	for(var i=0;i<tabArray.length;i++){
		if(tabArray[i].key==key)
			return tabArray[i].container;
	}
	return false;
}

function getTabId(key){
	for(var i=0;i<tabArray.length;i++){
		if(tabArray[i].key==key)
			return tabArray[i].name;
	}
	return false;
}*/

ServiceProxy = function(url) {
  this._baseUrl = url;
};

ServiceProxy.prototype = {
  _defaultErrorHandler: function (xhr, status, error) {
		alert(xhr);
  },
  _doAjax: function (method, data, fnSuccess, fnError, fnComplete) {
    if (!data) data = "{}";
    if (!fnError && ShowError) fnError = ShowError;
    if (!fnComplete) fnComplete = null;
    $.ajax({
      type: "POST",
      url: this._baseUrl + "/" + method,
      data: data,
      contentType: "application/json; charset=utf-8",
      dataType: "json",
      complete: fnComplete,
      success: fnSuccess,
      error: fnError,
      dataFilter: function (data) {
        var response;
        if (typeof (JSON) !== "undefined" && typeof (JSON.parse) === "function")
          response = JSON.parse(data);
        else
          response = eval("(" + data + ")");
        if (response.hasOwnProperty("d"))
          response = response.d;
        return response;
      }
    });
  },
  getTabCams: function (tab, page, success, error, complete) {
    if (!page) page = 1;
    var data = "";
    if(initRequest){//check for extended hash parameters
			initRequest = false;
			var parameters = getQuerystring();
			if(tab=="#onlinecontainer" && parameters!=null && parameters.toLowerCase()!="online=1"){//extended hash parameters
				readTabs();
				parameters = parameters.split("&");
				deferred = new Object();
				for(var i=0;i<parameters.length;i++){
					try{
						var valuepair = parameters[i].split("=");
						if(valuepair.length==2){
							if(isTab(valuepair[0].toLowerCase())){//extended tab hash
								deferred.tabindex = getTabIndex(valuepair[0].toLowerCase());
							}
							else if(valuepair[0]=="page"){//page parameter
								deferred.page = valuepair[1];
							}
							else if($('#camfilter #dropdowns #ddl'+valuepair[0]).length > 0 && $('#camfilter #dropdowns #'+valuepair[1]).length > 0){//try extended filter hash
								$("#camfilter #dropdowns #ddl"+valuepair[0]+" option[id='"+valuepair[1]+"']").attr('selected', 'selected');
								deferred.tabindex = 7;
							}
						}
					}catch(e){
						deferred = null;
						data = "{ 'tabid' : '" + tab + "', 'page' : '" + page + "' }";
						this._doAjax("GetTabCams", data, success, error, complete);
					}
				}
			}
			else{
				data = "{ 'tabid' : '" + tab + "', 'page' : '" + page + "' }";
				this._doAjax("GetTabCams", data, success, error, complete);
			}
		}
		else if(tab=="#filtercontainer")//check pulldowns
			this.getFilterCams(page, success, error, complete);
		else if(tab=="#favoritescontainer")//check cookie
			this.getFavoriteCams(success, error, complete);
		else{
			data = "{ 'tabid' : '" + tab + "', 'page' : '" + page + "' }";
			this._doAjax("GetTabCams", data, success, error, complete);
		}
  },
  getFilterCams: function (page, success, error, complete) {
    if (!page) 
			page = 1;
		var nick = $("#usernamesearch").val();
		var genderid = $("#ddlGender :selected").attr('id');
		var languageid = $("#ddlLanguage :selected").attr('id');
		var ageid = $("#ddlAge :selected").attr('id');
		if(nick!=undefined && nick.replace(" ","")!=""){
			data = "{ 'nick' : '" + nick + "', 'page' : '" + page + "'}";
			this._doAjax("GetNickCams", data, success, error, complete);
		}
		else{
			data = "{ 'genderid' : '" + genderid + "', 'languageid' : '" + languageid + "', 'ageid' : '" + ageid + "', 'page' : '" + page + "' }";
			this._doAjax("GetFilterCams", data, success, error, complete);
    }
  },
  getFavoriteCams: function (success, error, complete) {
		data = "{ 'camids' : '" + readCookie("favorites") + "'}";
    this._doAjax("GetFavoriteCams", data, success, error, complete);
  },
  getCam: function (camid, success, error, complete) {
		data = "{ 'camid' : '" + camid + "'}";
    this._doAjax("GetCam", data, success, error, complete);
  },
  getCamImg: function (camid, imgindex, success, error, complete) {
		data = "{ 'camid' : '" + camid + "', 'index' : '" + imgindex + "' }";
    this._doAjax("GetImage", data, success, error, complete);
  },
  getCamState: function (camid, success, error, complete) {
		data = "{ 'camid' : '" + camid + "' }";
    this._doAjax("GetCamState", data, success, error, complete);
  },
  getCamAndPayState: function (camid, success, error, complete) {
		data = "{ 'camid' : '" + camid + "'}";
    this._doAjax("GetCamAndPayState", data, success, error, complete);
  },
  getPayState: function (success, error, complete) {
    this._doAjax("GetPayState", null, success, error, complete);
  }
};
