var _AcomBurrpPluginLoggerInitializer = null;
var _AcomBurrpPluginViewerInitializer = null;
var AcomBurrpPluginLogger = function(){
	var bool = this.interceptSearchRequest();
	if(bool){
		this.interceptSearchFormSwitcher();
	}else{
		setTimeout(this.arbitWait, 5);
	}
};

AcomBurrpPluginLogger.prototype.arbitWait = function(){
	_AcomBurrpPluginLoggerInitializer = new AcomBurrpPluginLogger();
};

AcomBurrpPluginLogger.prototype.interceptSearchRequest = function(){
	var form = document.forms.BurrpLocalSearchForm;
	var formFoundBool = false;
	if(typeof(form) != "undefined"){
		form.currentOnsubmit = form.onsubmit;
		form.onsubmit = function(evt){
			evt = (evt) ? evt : ((window.event) ? window.event : null);
			this.currentOnsubmit(evt);
			_AcomBurrpPluginLoggerInitializer.addInterceptionFunction(this);
			return false;
		};
		formFoundBool = true;
	}
	return formFoundBool;
};

AcomBurrpPluginLogger.prototype.addInterceptionFunction = function(whichForm){
	var searchForm = document.forms.BurrpLocalSearchForm;
	var searchParams = BurrpLocalSearchWidget.properties.searchParams;
	var logRequest = new BurrpJsonAjaxRequest();
	for(var key in searchParams){
		if(searchForm[key]){
			if(searchForm[key].type == "select-multiple"){
				for(var i=0; i<searchForm[key].options.length; i++){
					if(searchForm[key].options[i].selected){
						var elemValueArray = getParamsFromAllOption(searchForm[key].options[i].value);
						for(var j=0; j<elemValueArray.length; j++){
							logRequest.setParam(key + "[]", elemValueArray[j]);
						}
					}
				}
			}else if(searchForm[key].value){
				var elemValueArray = getParamsFromAllOption(searchForm[key].value);
				for(var j=0; j<elemValueArray.length; j++){
					if(searchForm[key].tagName == "SELECT" && key != "fR"){
						logRequest.setParam(key + "[]", elemValueArray[j]);
					}else{
						logRequest.setParam(key, elemValueArray[j]);
					}
				}
			}
		}
	}
	logRequest.setParam("formType",BurrpLocalSearchWidget.properties.defaultSearchForm);
	logRequest.setParam("city",BurrpListingSearchLoader.city);
	logRequest.setParam("pluginKey",AcomBurrpLocalSearchWidgetPluginLoader.pluginKey);
	logRequest.open(AcomBurrpLocalSearchWidgetPluginLoader.baseUrl + AcomBurrpLocalSearchWidgetPluginLoader.logUri +"&");
	return false;
};

AcomBurrpPluginLogger.prototype.interceptSearchFormSwitcher = function(){
	var formHolderChildren = bObject("bSearchFormHolder").childNodes;
	var formSwitcherLinkFound = false;
	for(var i=0; i<formHolderChildren.length; i++){
		var currElem = formHolderChildren[i];
		if("DIV" == currElem.tagName && "bSearchContainer" == currElem.className){
			for(var j=0; j<currElem.childNodes.length; j++){
				var temp = currElem.childNodes[j];
				if("DIV" == temp.tagName && "bSwitch" == temp.className){
					for(var k=0; k<temp.childNodes.length; k++){
						if("A" == temp.childNodes[k].tagName){
							var finderLinkNode = temp.childNodes[k];							
							finderLinkNode.oldOnclick = finderLinkNode.onclick;
							finderLinkNode.onclick = function(){
								this.oldOnclick();											
								_AcomBurrpPluginLoggerInitializer = new AcomBurrpPluginLogger();
							}
							formSwitcherLinkFound = true;
							break;
						}
					}
				}
				if(formSwitcherLinkFound)break;
			}
		}	
		if(formSwitcherLinkFound)break;
	}
	
	var formContainer = bObject(BurrpLocalSearchWidget.properties.paintAreaFormId);
	for(var h=0; h<1; h++){
		var currElem = formContainer.childNodes[h];
		for(var g=0; g<currElem.childNodes.length; g++){
			var tempElem = currElem.childNodes[g];
			if("SELECT"==tempElem.tagName){
				tempElem.id = "acom_cityDropDown";
				break;
			}
		}
	}
};

var AcomBurrpPluginViewer = function(){
	var bool = this.isDomReady();
	if(!bool){
		setTimeout(this.arbitWait, 5);
	}else{
		this.area = bObject(AcomBurrpLocalSearchWidgetPluginLoader.areaId);
		if(!this.area)return;
		if(AcomBurrpLocalSearchWidgetPluginLoader.showLatestSearches){
			this.showLatestSearches();
		}				
		if(AcomBurrpLocalSearchWidgetPluginLoader.showMostSearched){
			this.showMostSearched();
		}				
	}
};

AcomBurrpPluginViewer.prototype.isDomReady = function(){
	return typeof(document.forms.BurrpLocalSearchForm) != "undefined";
};

AcomBurrpPluginViewer.prototype.arbitWait = function(){
	_AcomBurrpPluginViewerInitializer = new AcomBurrpPluginViewer();
};

AcomBurrpPluginViewer.prototype.showLatestSearches = function(){
	var newDiv = document.createElement("div");
	this.area.appendChild(newDiv);
	newDiv.innerHTML = this.getLatestSearchesMarkup();
	updateLatestSearches();
};

var updateLatestSearches = function(){
	var updateLatestSearchesReq = new BurrpJsonAjaxRequest();
	updateLatestSearchesReq.setParam("pluginKey",AcomBurrpLocalSearchWidgetPluginLoader.pluginKey);
	updateLatestSearchesReq.setParam("cacheDefeater", new Date().getTime());
	updateLatestSearchesReq.setParam("callBack", "displayLatestSearches");
	updateLatestSearchesReq.setParam("numberOfResults",AcomBurrpLocalSearchWidgetPluginLoader.numberOfResults);
	updateLatestSearchesReq.setLoadingIndicator("acomLatestLoading");	
	updateLatestSearchesReq.open(AcomBurrpLocalSearchWidgetPluginLoader.baseUrl + AcomBurrpLocalSearchWidgetPluginLoader.latestSearchesUri +"&");
	if(AcomBurrpLocalSearchWidgetPluginLoader.autoReloadAsync){
		setTimeout("updateLatestSearches()", AcomBurrpLocalSearchWidgetPluginLoader.autoReloadFrequency*1000);
	}
};

AcomBurrpPluginViewer.prototype.showMostSearched = function(){
	var newDiv = document.createElement("div");
	this.area.appendChild(newDiv);
	newDiv.innerHTML = this.getMostSearchedMarkup();
	updateMostSearched();
};

var updateMostSearched = function(){
	var updateMostSearchedReq = new BurrpJsonAjaxRequest();
	updateMostSearchedReq.setParam("pluginKey",AcomBurrpLocalSearchWidgetPluginLoader.pluginKey);
	updateMostSearchedReq.setParam("cacheDefeater", new Date().getTime());
	updateMostSearchedReq.setParam("callBack", "displayMostSearched");
	updateMostSearchedReq.setParam("numberOfResults",AcomBurrpLocalSearchWidgetPluginLoader.numberOfResults);
	updateMostSearchedReq.setLoadingIndicator("acomMostLoading");
	updateMostSearchedReq.open(AcomBurrpLocalSearchWidgetPluginLoader.baseUrl + AcomBurrpLocalSearchWidgetPluginLoader.mostSearchedUri +"&");
	if(AcomBurrpLocalSearchWidgetPluginLoader.autoReloadAsync){
		setTimeout("updateMostSearched()", AcomBurrpLocalSearchWidgetPluginLoader.autoReloadFrequency*1000);
	}
};

function displayLatestSearches(jsonData, fromMostSearched){
	if(jsonData){
		var loading = "acomLatestLoading";
		if(typeof(fromMostSearched) != "undefined"){
			loading = "acomMostLoading";
		}
		var container = document.createElement("table");
		container.setAttribute("width","100%");
		container.setAttribute("cellspacing","0");
		container.setAttribute("cellpadding","0");
		container.setAttribute("border","0");
		
		var tbody = document.createElement("tbody");
		container.appendChild(tbody);
		
		var headerTr = document.createElement("tr");
		tbody.appendChild(headerTr);
		var headerTd = document.createElement("td");
		headerTd.setAttribute("width","100%");
		headerTr.appendChild(headerTd);
		headerTd.className = "acomLatestTitle";
		
		if(typeof(fromMostSearched) != "undefined"){
			headerTd.innerHTML = 'Most searched <div id="acomMostLoading" class="acomLoading" style="display:none"><img width="10" height="10" src="'+AcomBurrpLocalSearchWidgetPluginLoader .baseUrl+"/images/loading-plugin.gif" +'"/></div>';
		}else{
			headerTd.innerHTML = 'Latest searches <div id="acomLatestLoading" class="acomLoading" style="display:none"><img width="10" height="10" src="'+AcomBurrpLocalSearchWidgetPluginLoader .baseUrl+"/images/loading-plugin.gif" +'"/></div>';
		}
		
		for(var i=0;i<jsonData.length;i++){
			var newTr = document.createElement("tr");
			tbody.appendChild(newTr);
			var newTd = document.createElement("td");
			newTr.appendChild(newTd);
			if(i%2 == 0){
				//newTd.className = "acomLatest acomEven";
			}else{
				//newTd.className = "acomLatest acomOdd";
			}
			var searchLink = document.createElement("a");
			searchLink.jsonData = jsonData[i];
			var fCTObj = getSearchObject(jsonData[i].fCT,"cuisineTypes");
			var fPTObj = getSearchObject(jsonData[i].fPT,"listingTypes");
			searchLink.fCTObj = fCTObj;
			searchLink.fPTObj = fPTObj;
			searchLink.className = "acomSearchLink";
			searchLink.onclick = function(){
				BurrpLocalSearchWidgetCreator.clearSearchResults();
				var initSearch = new BurrpLocalSearchWidget();
				initSearch.setDefaultSearchForm(this.jsonData.formType);
				initSearch.setCity(this.jsonData.city.toLowerCase());
				initSearch.setExecuteDefaultQuery(true);
				if(this.jsonData.n){
					this.jsonData.n = unescapeForUrl(this.jsonData.n);
				}				
				if(this.jsonData.q){
					this.jsonData.q = unescapeForUrl(this.jsonData.q);
				}				
				if("simple"==this.jsonData.formType){
					BurrpLocalSearchWidget.properties.searchParams.q = this.jsonData.q ? this.jsonData.q : "";
					BurrpLocalSearchWidget.properties.searchParams.n = this.jsonData.n ? this.jsonData.n : "";
				}else{
					initSearch.setSearchParams({n:this.jsonData.n,fR:this.jsonData.fR,fCT:this.fCTObj,fPT:this.fPTObj});
				}
				initSearch.paint();
				var cityDropDown = bObject("acom_cityDropDown");
				if(cityDropDown){
					for(var k=0;k<cityDropDown.options.length;k++){
						if(cityDropDown.options[k].value == this.jsonData.city.toLowerCase()){
							cityDropDown.options[k].setAttribute("selected","selected");
							cityDropDown.value = cityDropDown.options[k].value;
							break;
						}
					}
				}
				_AcomBurrpPluginLoggerInitializer = new AcomBurrpPluginLogger();
			}
			if(typeof(fromMostSearched) != "undefined"){
				var titleStr = jsonData[i].c + (jsonData[i].c > 1 ? " searches" : " search") + " so far";
				searchLink.setAttribute("title",titleStr);
			}

			newTd.appendChild(searchLink);
			if("simple" == jsonData[i].formType){
				searchLink.innerHTML = jsonData[i].search_text;
			}else{
				searchLink.innerHTML = finderQueryStringBuilder(fCTObj,fPTObj,jsonData[i].fR,jsonData[i].n);
			}			
			if(typeof(fromMostSearched) == "undefined" && AcomBurrpLocalSearchWidgetPluginLoader.showDate){
				var miniDiv = document.createElement("div");
				miniDiv.innerHTML = jsonData[i].search_timestamp;
				miniDiv.className = "acomMini";
				newTd.appendChild(miniDiv);
			}
		}
	}
	
	var area = "AcomLatestSearches";
	if(typeof(fromMostSearched) != "undefined"){
		area = "AcomMostSearched";
	}
	bObject(area).innerHTML = "";
	bObject(area).appendChild(container);
};

function displayMostSearched(jsonData){
	if(jsonData){
		displayLatestSearches(jsonData, true);
	}
};

function getSearchObject(csvString, dbKey){
	var retVal = [];
	if(csvString){
		var dbVals = csvString.split(",");
		if(dbVals.length > 1 && !BurrpLocalSearchWidget.properties.allowMultipleSelect){
			retVal[0] = "all_";
			for(var k=0; k<dbVals.length; k++){
				retVal[0] += dbVals[k] + "^";		
			}
		}else{
			for(var m=0; m<dbVals.length;m++){
				for(var key in BurrpListingSearchLoader[dbKey]){
					var found = false;
					for(var which in BurrpListingSearchLoader[dbKey][key]){
						if(BurrpListingSearchLoader[dbKey][key][which].id == dbVals[m]){
							retVal[retVal.length] = BurrpListingSearchLoader[dbKey][key][which].name;
							found = true;
							break;
						}
					}
					if(found)break;
				}
			}
		}
	}
	return retVal;
}

function iterateOverObject(dbKey, compareWith){
	var retVal = new String();
	for(var key in BurrpListingSearchLoader[dbKey]){
		var found = false;
		for(var which in BurrpListingSearchLoader[dbKey][key]){
			if(BurrpListingSearchLoader[dbKey][key][which].id == compareWith){
				retVal = key;
				found = true;
				break;
			}
		}
		if(found)break;
	}
	return retVal;
}

function finderQueryStringBuilder(cT,pT,r,n){
	var str = "";
	if(pT && pT.length == 1 && pT[0].substring(0,3)=="all"){
		var values = pT[0].split("^");
		var firstId = values[1];
		var pTGroup = iterateOverObject("listingTypes",firstId);
		str += "Place type: &raquo; " + pTGroup + " (All)";
	}else if(pT){
		str += "Place type: " + pT;
	}

	if(cT && cT.length == 1 && cT[0].substring(0,3)=="all"){
		var values = cT[0].split("^");
		var firstId = values[1];
		var cTGroup = iterateOverObject("cuisineTypes",firstId);
		var preceede = "";
		if(str.length > 1){
			preceede = " + ";
		}
		str += preceede + "Cuisine type: &raquo; " + cTGroup + " (All)";
	}else if(cT){
		str += " + Cuisine type: " + cT;
	}

	if(r){
		var preceede = "";
		if(str.length > 1){
			preceede = " + ";
		}
		str += preceede + "Rating: " + r;
	}
	if(n){
		var preceede = "";
		if(str.length > 1){
			preceede = " + ";
		}
		str += preceede + "Locality: " + n;
	}
	return str;
}

function unescapeForUrl(str){
	str = str.replace(/&lt;/g,"<");
	str = str.replace(/&gt;/g,">");
	str = str.replace(/&amp;/g,"&");
	str = str.replace(/&#039;/g,"'");
	str = str.replace(/&quot;/g,'"');
	return str;
}

AcomBurrpPluginViewer.prototype.getLatestSearchesMarkup = function(){
	return '<div id="AcomLatestSearches" class="AcomLatestSearches"></div>';
};

AcomBurrpPluginViewer.prototype.getMostSearchedMarkup = function(){
	return '<div id="AcomMostSearched" class="AcomLatestSearches"></div>';
};

_AcomBurrpPluginLoggerInitializer = new AcomBurrpPluginLogger();
_AcomBurrpPluginViewerInitializer = new AcomBurrpPluginViewer();