function AddressSearchBehaviour(addressControl, multipleResultDiv, searchButton) {
	this.m_addressControl = null;
	this.m_multipleResultDiv = null;
	this.m_searchButton = null;
	this.m_search = new CAddressSearch();
	var me = this;

	this.Init = function(addressControl, multipleResultDiv, searchButton) {
		me.m_addressControl = addressControl;
		me.m_multipleResultDiv = multipleResultDiv;
		me.m_searchButton = searchButton;

		//me.m_addressControl.value = g_Babel.GetWord("blurtipaddress");
		me.m_addressControl.observe("keypress", function (event) {if (event.keyCode == 13) me.m_search.Go();});

		me.m_search.SetInput(me.m_addressControl);
		me.m_search.SetDefaultText(g_Babel.GetWord("blurtipaddress"));
		me.m_search.SetAutoSearch(false);
		me.m_search.Show();
		me.m_search.OnAddressFound = function(address) {me.SelectAddress(address);};

		me.m_searchButton.onclick = function () {me.m_search.Go();};
	}

	this.SelectAddress = function (address) {
		var iImageID = 0;
		var strMarkerClass;
		
		SetMarker("Pin" /*+ iAddressID*/, address.dX, address.dY, "Pin"/*strMarkerClass*/);

		if (address.dMinX) {
			g_Srv.ZoomMapRect(iImageID, address.dX, address.dY, address.dMinX, address.dMinY, address.dMaxX, address.dMaxY, "", 1, g_NewReportHandler.NewPinBySearch, true);
		}
		else {
			g_Srv.ZoomMapRect(iImageID, address.dX, address.dY, address.dX, address.dY, address.dX, address.dY, "", 1, g_NewReportHandler.NewPinBySearch, true);
		}
	}

	me.Init(addressControl, multipleResultDiv, searchButton);
}

function CoordSearchBehaviour(latitudeControl, longitudeControl, searchButton) {
	this.m_latitudeControl = null;
	this.m_longitudeControl = null;
	this.m_searchButton = null;
	var me = this;

	this.Init = function(latitudeControl, longitudeControl, searchButton) {
		me.m_latitudeControl = latitudeControl;
		me.m_longitudeControl = longitudeControl;
		me.m_searchButton = searchButton;

		me.m_latitudeControl.value = g_Babel.GetWord("blurtiplatitude");
		me.m_latitudeControl.observe("keypress", function (event) {if (event.keyCode == 13) me.CenterMapWGS();});
		me.m_latitudeControl.onfocus = function () {if (this.value == g_Babel.GetWord("blurtiplatitude")) this.value = "";};
		me.m_latitudeControl.onblur = function () {if (this.value == "") this.value = g_Babel.GetWord("blurtiplatitude");};

		me.m_longitudeControl.value = g_Babel.GetWord("blurtiplongitude");
		me.m_longitudeControl.observe("keypress", function (event) {if (event.keyCode == 13) me.CenterMapWGS();});
		me.m_longitudeControl.onfocus = function () {if (this.value == g_Babel.GetWord("blurtiplongitude")) this.value = "";};
		me.m_longitudeControl.onblur = function () {if (this.value == "") this.value = g_Babel.GetWord("blurtiplongitude");};

		me.m_searchButton.onclick = function () {me.CenterMapWGS();};
	}

	this.CenterMapWGS = function () {
		var iImageID = 0;
		var strMarkerClass;

		lat = me.m_latitudeControl.value == g_Babel.GetWord("blurtiplatitude") ? "" : me.m_latitudeControl.value;
		lon = me.m_longitudeControl.value == g_Babel.GetWord("blurtiplongitude") ? "" : me.m_longitudeControl.value;

		g_MapHandler.arrMarkers = new Array();
		g_Srv.CenterMapWGS(iImageID, lat, lon, CenterMapWGSSetMarker, true);
	}

	this.CenterMapWGSSetMarker = function (serverparams) {
		SetMarker("Pin" /*+ iAddressID*/, serverparams.mapdata.dCenterX, serverparams.mapdata.dCenterY, "Pin"/*strMarkerClass*/);
    g_NewReportHandler.NewPinBySearch(serverparams);
	}

	me.Init(latitudeControl, longitudeControl, searchButton);
}

function ReportSearchBehaviour(intelliSearch, country, userlevel, bugtype, username, status, timefrom, timeto, id, userid, searchButton, resultarea) {
	this.m_resultarea = null;
	this.m_country = null;
	this.m_userlevel = null;
	this.m_bugtype = null;
	this.m_username = null;
	this.m_status = null;
	this.m_timefrom = null;
	this.m_timeto = null;
	this.m_id = null;
	this.m_userid = null;
	this.m_searchButton = null;
	var me = this;

	window.g_intelliSearch = false;

	this.Init = function(intelliSearch, country, userlevel, bugtype, username, status, timefrom, timeto, id, userid, searchButton, resultarea) {
		me.m_resultarea = resultarea;
		me.m_country = country;
		me.m_userlevel = userlevel;
		me.m_bugtype = bugtype;
		me.m_username = username;
		me.m_status = status;
		me.m_timefrom = timefrom;
		me.m_timeto = timeto;
		me.m_id = id;
		me.m_userid = userid;
		me.m_searchButton = searchButton;

		var option = new Element("option");
		me.m_userlevel.insert(option);
		option.babelID = "all";
		option.text = g_Babel.GetWord("all");
		option.value = "-1";
		option = new Element("option");
		me.m_userlevel.insert(option);
		option.babelID = "----------";
		option.text = "----------";
		option.value = "-2";
		
		for (var i = 0; i < g_arrUserLevels.length; i++) {
			var option = new Element("option");
			me.m_userlevel.insert(option);
			option.babelID = g_arrUserLevels[i].m_babelId;
			option.text = g_Babel.GetWord(g_arrUserLevels[i].m_babelId);
			option.value = g_arrUserLevels[i].m_id;
		}

		option = new Element("option");
		me.m_bugtype.insert(option);
		option.babelID = "all";
		option.text = g_Babel.GetWord("all");
		option.value = "-1";
		option = new Element("option");
		me.m_bugtype.insert(option);
		option.babelID = "----------";
		option.text = "----------";
		option.value = "-2";
		
		for (var i = 1; i < g_pinCategories.length; i++) {
			var option = new Element("option");
			me.m_bugtype.insert(option);
			option.babelID = g_pinCategories[i].m_babelID;
			option.text = g_Babel.GetWord(g_pinCategories[i].m_babelID);
			option.value = g_pinCategories[i].m_strID;
		}

		option = new Element("option");
		me.m_bugtype.insert(option);
		option.babelID = g_pinCategories[0].m_babelID;
		option.text = g_Babel.GetWord(g_pinCategories[0].m_babelID);
		option.value = g_pinCategories[0].m_id;

		option = new Element("option");
		me.m_status.insert(option);
		option.babelID = "all";
		option.text = g_Babel.GetWord("all");
		option.value = "";
		option = new Element("option");
		me.m_status.insert(option);
		option.babelID = "----------";
		option.text = "----------";
		option.value = "";
		
		for (var i = 0; i < g_pinStatuses.length; i++) {
			var option = new Element("option");
			me.m_status.insert(option);
			option.babelID = g_pinStatuses[i].babelID;
			option.text = g_Babel.GetWord(g_pinStatuses[i].babelID);
			option.value = g_pinStatuses[i].strId;
		}

		me.m_username.observe("keypress", function (event) {if (event.keyCode == 13) me.SearchPins(true);});

		me.m_timefrom.value = g_Babel.GetWord("blurtipdatetime");
		me.m_timefrom.observe("keypress", function (event) {if (event.keyCode == 13) me.SearchPins(true);});
		me.m_timefrom.onfocus = function () {if (this.value == g_Babel.GetWord("blurtipdatetime")) this.value = "";};
		me.m_timefrom.onblur = function () {if (this.value == "") this.value = g_Babel.GetWord("blurtipdatetime");};

		me.m_timeto.value = g_Babel.GetWord("blurtipdatetime");
		me.m_timeto.observe("keypress", function (event) {if (event.keyCode == 13) me.SearchPins(true);});
		me.m_timeto.onfocus = function () {if (this.value == g_Babel.GetWord("blurtipdatetime")) this.value = "";};
		me.m_timeto.onblur = function () {if (this.value == "") this.value = g_Babel.GetWord("blurtipdatetime");};

		me.m_id.observe("keypress", function (event) {if (event.keyCode == 13) me.SearchPins(true);});

		me.m_searchButton.onclick = function () {me.SearchPins(true);};

		intelliSearch.onclick = function () {
			window.g_intelliSearch = this.checked ? true : false;
			me.SearchPins();
			g_Srv.ShowMap(0);
		}

	}

	this.SearchPins = function (bShowMap) {
		me.m_resultarea.style.display = "block";

		g_pinList = new ResultBoxBehaviour(RB_PINSEARCH);
		g_pinList.SetSearchParams(me.m_bugtype.options[me.m_bugtype.selectedIndex].value,
					(me.m_username.value == g_Babel.GetWord("blurtipusername")) ? "" : me.m_username.value,
					me.m_status.value,
					(me.m_timefrom.value == g_Babel.GetWord("blurtipdatetime")) ? "" : me.m_timefrom.value,
					(me.m_timeto.value == g_Babel.GetWord("blurtipdatetime")) ? "" : me.m_timeto.value,
					(me.m_id.value == g_Babel.GetWord("blurtipid")) ? "" : me.m_id.value,
					(me.m_userid.value == g_Babel.GetWord("blurtipid")) ? "" : me.m_userid.value,
					window.g_intelliSearch ? g_arrMapData[0].dViewMinX : 0,
					window.g_intelliSearch ? g_arrMapData[0].dViewMinY : 0,
					window.g_intelliSearch ? g_arrMapData[0].dViewMaxX : 0,
					window.g_intelliSearch ? g_arrMapData[0].dViewMaxY : 0,
					me.m_userlevel.options[me.m_userlevel.selectedIndex].value
		);

		g_pinList.Init($("idTotal"), $("idTabArea"), $("idResultArea"), 20);
		if (window.g_intelliSearch && window.g_intelliSearch == true) {
			if (bShowMap) {
				g_Srv.ShowMap(0);
			}
		}
	}

	me.Init(intelliSearch, country, userlevel, bugtype, username, status, timefrom, timeto, id, userid, searchButton, resultarea);
}

function UserSearchBehaviour(username, realname, email, id, searchButton, resultarea) {
	this.m_resultarea = null;
	this.m_username = null;
	this.m_realname = null;
	this.m_email = null;
	this.m_id = null;
	this.m_searchButton = null;
	var me = this;

	this.Init = function(username, realname, email, id, searchButton, resultarea) {
		me.m_resultarea = resultarea;
		me.m_username = username;
		me.m_realname = realname;
		me.m_email = email;
		me.m_id = id;
		me.m_searchButton = searchButton;


		me.m_username.observe("keypress", function (event) {if (event.keyCode == 13) me.SearchUsers();});
		me.m_realname.observe("keypress", function (event) {if (event.keyCode == 13) me.SearchUsers();});
		me.m_email.observe("keypress", function (event) {if (event.keyCode == 13) me.SearchUsers();});
		me.m_id.observe("keypress", function (event) {if (event.keyCode == 13) me.SearchUsers();});


		me.m_searchButton.onclick = function () {me.SearchUsers();};
	}

	this.SearchUsers = function () {
		me.m_resultarea.style.display = "block";

		g_userList = new ResultBoxBehaviour(RB_USERSEARCH);
		g_userList.SetSearchParams(me.m_username.value, me.m_realname.value, me.m_email.value, me.m_id.value);

		g_userList.Init($("idTotal"), $("idTabArea"), $("idResultArea"), 20);
	}

	me.Init(username, realname, email, id, searchButton, resultarea);
}
