var RB_PIN = 1;
var RB_PINSEARCH = 2;
var RB_USERSEARCH = 3;
var g_first = 1;

//function ResultBoxBehaviour(totalArea, tabArea, resultsArea, nReports) {
function ResultBoxBehaviourBase() {
	this.m_tabArea = null;
	this.m_tabPage = null;
	this.m_resultArea = null;
	this.m_totalArea = null;
	this.m_lastCommandID = null;
	this.m_nReports = null;
	this.m_actPage;
	
	var me = this;
	

	this.Init = function (totalArea, tabArea, resultsArea) {
		me.m_tabArea = tabArea;
		tabArea.update("");
		me.m_tabPage = new TabPage(me.m_tabArea);
		me.m_resultArea = resultsArea;
		me.m_totalArea = totalArea;
		me.AttachHandler();
	}

	
	this.AttachHandler = function () {
		me.ListPins(0, g_pinListPrefs.resultPerPage);
	}
	
	this.Refresh = function () {
		if (me.m_totalArea) {
			me.m_totalArea.update(me.m_nReports);
		}
		if (me.m_tabPage) {
			me.m_tabPage.Refresh();
		}
	}
	

	this.ListPins = function(iFirst, iMax) {
		me.m_actPage = parseInt(iFirst / g_pinListPrefs.resultPerPage);
		me.CustomLister(iFirst, iMax);
	}

	this.CustomLister = function(iFirst, iMax) {
	}

	this.FillSearchResult = function (serverParams, handlerParams, commandID) {
	}


	//me.Init(totalArea, tabArea, resultsArea, nReports);
}

function ResultBoxBehaviour(resultBehaviour) {
	this.m_rbbb = new ResultBoxBehaviourBase();

	var me = this;

	this.Init = function (totalArea, tabArea, resultsArea) {
		me.m_rbbb.Init(totalArea, tabArea, resultsArea);
	}

	this.Refresh = function () {
		me.m_rbbb.Refresh();
	}

	if (resultBehaviour == RB_PIN) {
		me.m_rbbb.CustomLister = function(iFirst, iMax) {
			var params = "first=" + iFirst + "&max=" + iMax;
			me.m_rbbb.m_lastCommandID = g_Srv.CallFunction("FillPoiList", params, 0, me.m_rbbb.FillSearchResult);
		}

		me.m_rbbb.FillSearchResult = function (serverParams, handlerParams, commandID) {
			me.m_rbbb.m_nReports = serverParams.nTotal;
			me.m_rbbb.m_totalArea.update(serverParams.nTotal);
			me.m_rbbb.m_tabPage.Init(me.m_rbbb.ListPins, 0, serverParams.nTotal, g_pinListPrefs.resultPerPage, g_pinListPrefs.numVisibleSelectors, me.m_rbbb.m_actPage);
			// ignore all commands except the last one
			if (commandID != me.m_rbbb.m_lastCommandID) {
				return;
			}

			me.m_rbbb.m_resultArea.update("");

			var SetOnClick = function(a, address, key, index)
			{
				a.onclick = function() {
					g_ReportSelector.SelectReportByAddress(address, key);
				};
			};
		
			for (var i = 0; i < serverParams.records.length; i++) {
				var div = new Element("div");
				div.className = "pinListElement";
				me.m_rbbb.m_resultArea.insert(div);
			
				var time = new Element("div").update(serverParams.records[i].arrValues[1]);
				div.insert(time);

				var report = new Element("div");
				if (serverParams.records[i].nTypeId == 1) {
					report.addClassName("blueArrow");
				}
				else if (serverParams.records[i].nTypeId == 2) {
					report.addClassName("greenArrow");
				}
				else if (serverParams.records[i].nTypeId == 3) {
					report.addClassName("grayArrow");
				}
				else if (serverParams.records[i].nTypeId == 4) {
					report.addClassName("redArrow");
				}
				else if (serverParams.records[i].nTypeId == 5) {
					report.addClassName("blackArrow");
				}
				report.addClassName("pinListElementDesc");
			
				var a = new Element("a");
				a.setAttribute("href", "javascript:void(0);");
				var address = new Address("", "", "", "", null, null, serverParams.records[i].dX, serverParams.records[i].dY, 0, 0, 0, 0, 0, 0);
				SetOnClick(a, address, serverParams.records[i].iKey, i);
				a.className = "white";
				a.update(serverParams.records[i].arrValues[0]);

				report.insert(a);
				div.insert(report);
			}
			if (g_first == 1 && QueryString.get("id") && QueryString.get("id") != "") {
				g_first = 0;
				g_ReportSelector.SelectReportByIDWithZoom(QueryString.get("id"));
			}

		}
	}
	else if (resultBehaviour == RB_PINSEARCH) {

		me.SetSearchParams = function(bugtype, username, status, timefrom, timeto, id, userid, minx, miny, maxx, maxy, userLevel) {
			me.m_rbbb.m_searchBugType = bugtype;
			me.m_rbbb.m_searchUserName = username;
			me.m_rbbb.m_searchStatus = status;
			me.m_rbbb.m_searchTimeIntervalFrom = timefrom;
			me.m_rbbb.m_searchTimeIntervalTo = timeto;
			me.m_rbbb.m_searchId = id;
			me.m_rbbb.m_searchUserId = userid;
			me.m_rbbb.m_minx = minx;
			me.m_rbbb.m_miny = miny;
			me.m_rbbb.m_maxx = maxx;
			me.m_rbbb.m_maxy = maxy;
			me.m_rbbb.m_userLevel = userLevel;
		}

		me.m_rbbb.CustomLister = function (iFirst, iMax) {
			var params = "first=" + iFirst + "&max=" + iMax + "&country=" + g_strAppID + "&bugtype=" + me.m_rbbb.m_searchBugType + "&username=" + me.m_rbbb.m_searchUserName + "&status=" + me.m_rbbb.m_searchStatus + "&timeintervalfrom=" + me.m_rbbb.m_searchTimeIntervalFrom + "&timeintervalto=" + me.m_rbbb.m_searchTimeIntervalTo + "&pinId=" + me.m_rbbb.m_searchId + "&userId=" + me.m_rbbb.m_searchUserId + "&minx=" + me.m_rbbb.m_minx + "&miny=" + me.m_rbbb.m_miny + "&maxx=" + me.m_rbbb.m_maxx + "&maxy=" + me.m_rbbb.m_maxy + "&userLevel=" + me.m_rbbb.m_userLevel;
			me.m_rbbb.m_lastCommandID = g_Srv.CallFunction("FillReportsList", params, 0, me.m_rbbb.FillSearchResult, null);
		}

		me.m_rbbb.FillSearchResult = function (serverParams, handlerParams, commandID) {
			me.m_rbbb.m_nReports = serverParams.nTotal;
			me.m_rbbb.m_totalArea.update(serverParams.nTotal);
			me.m_rbbb.m_tabPage.Init(me.m_rbbb.ListPins, 0, serverParams.nTotal, g_pinListPrefs.resultPerPage, g_pinListPrefs.numVisibleSelectors, me.m_rbbb.m_actPage);
			// ignore all commands except the last one
			if (commandID != me.m_rbbb.m_lastCommandID) {
				return;
			}

			me.m_rbbb.m_resultArea.update("");

			var SetOnClick = function(a, address, key, index)
			{
				a.onclick = function() {
					g_ReportSelector.SelectReportByAddress(address, key);
				};
			};
		
			for (var i = 0; i < serverParams.records.length; i++) {
				var div = new Element("div");
				div.className = "pinListElement";
				me.m_rbbb.m_resultArea.insert(div);
			
				var time = new Element("div").update(serverParams.records[i].arrValues[1]);
				div.insert(time);

				var username = new Element("div").update(serverParams.records[i].arrValues[2]);
				div.insert(username);

				var report = new Element("div");
				if (serverParams.records[i].nTypeId == 1) {
					report.addClassName("blueArrow");
				}
				else if (serverParams.records[i].nTypeId == 2) {
					report.addClassName("greenArrow");
				}
				else if (serverParams.records[i].nTypeId == 3) {
					report.addClassName("grayArrow");
				}
				else if (serverParams.records[i].nTypeId == 4) {
					report.addClassName("redArrow");
				}
				else if (serverParams.records[i].nTypeId == 5) {
					report.addClassName("blackArrow");
				}
				report.addClassName("pinListElementDesc");
			
				var a = new Element("a");
				a.setAttribute("href", "javascript:void(0);");
				var address = new Address("", "", "", "", null, null, serverParams.records[i].dX, serverParams.records[i].dY, 0, 0, 0, 0, 0, 0);
				SetOnClick(a, address, serverParams.records[i].iKey, i);
				a.className = "white";
				a.update(serverParams.records[i].arrValues[0]);

				report.insert(a);
				div.insert(report);
			}
		}
	}
	else if (resultBehaviour == RB_USERSEARCH) {

		me.SetSearchParams = function(username, realname, email, id) {
			me.m_rbbb.m_searchUserName = username;
			me.m_rbbb.m_searchRealName = realname;
			me.m_rbbb.m_searchEmail = email;
			me.m_rbbb.m_searchID = id;
		}

		me.m_rbbb.CustomLister = function (iFirst, iMax) {
			var params = "first=" + iFirst + "&max=" + iMax + "&username=" + me.m_rbbb.m_searchUserName + "&fullname=" + me.m_rbbb.m_searchRealName + "&email=" + me.m_rbbb.m_searchEmail + "&id=" + me.m_rbbb.m_searchID;
			me.m_rbbb.m_lastCommandID = g_Srv.CallFunction("FillUsersList", params, 0, me.m_rbbb.FillSearchResult, null);
		}

		me.m_rbbb.FillSearchResult = function (serverParams, handlerParams, commandID) {
			me.m_rbbb.m_nReports = serverParams.nTotal;
			me.m_rbbb.m_totalArea.update(serverParams.nTotal);
			me.m_rbbb.m_tabPage.Init(me.m_rbbb.ListPins, 0, serverParams.nTotal, g_pinListPrefs.resultPerPage, g_pinListPrefs.numVisibleSelectors, me.m_rbbb.m_actPage);
			// ignore all commands except the last one
			if (commandID != me.m_rbbb.m_lastCommandID) {
				return;
			}

			me.m_rbbb.m_resultArea.update("");

			var SetOnClick = function(a, userdata, index)
			{
				a.onclick = function() {
					g_UserSelector.SelectUser(userdata);
				};
			};
		
			for (var i = 0; i < serverParams.arrUserData.length; i++) {
				var div = new Element("div");
				div.className = "pinListElement";
				me.m_rbbb.m_resultArea.insert(div);
			

				var a = new Element("a");
				a.setAttribute("href", "javascript:void(0);");
				SetOnClick(a, serverParams.arrUserData[i], i);
				if (serverParams.arrUserData[i].isDeleted) {
					a.className = "redLink";
				}
				a.update(serverParams.arrUserData[i].username);

				div.insert(a);

				var username = new Element("div").update(serverParams.arrUserData[i].realname);
				div.insert(username);

				var email = new Element("div").update(serverParams.arrUserData[i].email);
				div.insert(email);

			}
		}
	}


}