var FORM_CHECK_INTERVAL = 500;
var FORM_NAME='immformerImmoSearchForm';
var TABLE_DIV = 'resultWindow';

var lastSentParams = null;
/**
 * 
 */
function divSubmit(comp) {
	var url;
	var form = document.forms[0];
	var div;
	var parameters = Form.serialize(form);
	var formChanged = (lastSentParams != parameters);
	if(comp && comp == 'All') {
		lastSentParams = parameters;
	}
	if(comp) {
		url = ogcore_ajax_getRequestUrl('websearch.updateCount', '', false);
		div = 'top_resultbox';
		//parameters += '&immformerSearchComponent=' + comp;
	}else{
		closeAllHelpers();
		if(!formChanged) {
		// SMA 16.12.2008 tmp disable result caching
		//	parameters += '&formNotChanged=true';
		}
		//formWatcher.killTimers();
		//url = ogcore_ajax_getRequestUrl('websearch.list', '', false);
		//div = TABLE_DIV;
		updateMain(TABLE_DIV, 'websearch.list', parameters);
		return true;
	}
	new Ajax.Updater(div , url, {
		parameters: parameters,
		method: 'get',
		evalScripts: true,
		asynchronous: true}
	);
	return false; // to prevent actual submit
}

/**
 * 
 */
function FormWatcher() {
	var m_lastFormState = null;
	var m_timer = null;
	m_timer = setTimeout(_updateWatcher, FORM_CHECK_INTERVAL);
	
	function getCurrentFormState() {
		if(document.forms.length > 0 && Form) { 
			var form = document.forms[0];
			var state = Form.serialize(form);
			return state; 
		}else{
			return null;
		}
	}
	
	this.hasFormChanged = hasFormChanged;
	function hasFormChanged() {
		if(m_lastFormState == null) {
			m_lastFormState = getCurrentFormState();
			return false;
		}
		var curState = getCurrentFormState();
		var changed;
		if(curState == m_lastFormState) {
			changed = false;
		}else{
			changed = true;
			m_lastFormState = curState;
		}
		return changed;
	}
	
	this.checkForChanges = checkForChanges;
	function checkForChanges(ignoreCheck) {
		if(hasFormChanged() || ignoreCheck) {
			//alert("form changed!");
			divSubmit('All');
		}
		m_timer = setTimeout(function() { _updateWatcher(); }, FORM_CHECK_INTERVAL);
	}
	
	this.killTimers = killTimers;
	function killTimers() {
		if(m_timer) {
			clearTimeout(m_timer);
		}
	}
}
var formWatcher = new FormWatcher();
function _updateWatcher() {
	formWatcher.checkForChanges();
}


function isOpen(divid) {
	var div = $(divid);
	if(div) {
		var classStr = div.className;
		if(classStr.indexOf('active') >= 0) {
			return true;
		}
	}
	return false;
}

function openHelper(divid) {
	var div = $(divid);
	if(div) {
		var customOpenBody = $(divid + '_open');
		if(customOpenBody) {
			var displayBody = $(divid + '_display');
			displayBody.style.display = divid=='top_geo'?'block':'none';
			customOpenBody.style.display = 'block';
		}
		var classStr = div.className;
		classStr += ' active';
		div.className = classStr;
		var openHandle = $(divid + '_pfeil');
		if(openHandle) {
			classStr = openHandle.className;
			classStr += ' arrow_close';
			openHandle.className = classStr;
		}
		customOpenBody.addClassName('body_open_'+divid);
	}
}

function closeHelper(divid) {
	var div = $(divid);
	if(div) {
		if(divid == 'top_verwertung' && isOpen('top_verwertung')) {
			updateVerwertung();
		}
		if(divid == 'top_nutzung' && isOpen('top_nutzung')) {
			updateNutzung();
		}
		if(divid == 'top_geo' && isOpen('top_geo')) {
			updateGeo();
		}
		
		
		var customOpenBody = $(divid + '_open');
		if(customOpenBody) {
			var displayBody = $(divid + '_display');
			displayBody.style.display = 'block';
			customOpenBody.style.display = 'none';
		}
		var classStr = div.className;
		var aClassStr = classStr.split(' ');
		var nClassStr = '';
		for(var i=0;i<aClassStr.length; i++) {
			if(aClassStr[i] != 'active') {
				nClassStr += aClassStr[i] + ' ';
			}
		}
		div.className = nClassStr;
		var openHandle = $(divid + '_pfeil');
		if(openHandle) {
			classStr = openHandle.className;
			aClassStr = classStr.split(' ');
			nClassStr = '';
			for(i=0;i<aClassStr.length; i++) {
				if(aClassStr[i] != 'arrow_close') {
					nClassStr += aClassStr[i] + ' ';
				}
			}
			openHandle.className = nClassStr;
		}
	}
}

function closeAllHelpers() {
	var o = $$('div#topmenu .body_open');
	for(var i=0; i<o.length; i++){
		var id=o[i].id.substring(0, o[i].id.length-'_open'.length);
		closeHelper(id);
	}
}

function toggleHelper(divid) {
	if(isOpen(divid)) {
		closeHelper(divid);
	}else{
		closeAllHelpers();
		openHelper(divid);
	}
}

/**
* Page Switching Code
*/
function switchPage(targetPage, extraparams) {
	var state = 'websearch.list';
	var params = 'updateResultList=true&displayPage=' + targetPage;
	if(extraparams) {
		params += '&' + extraparams;
	}
	updateMain(TABLE_DIV, state, params);
}

/**
* Style switching Code
* 
* @param targetStyle
*/
function switchDisplay(targetStyle) {
	var state = 'websearch.list';
	var params = 'updateResultList=true&resultDisplayStyle=' + targetStyle;
	
	updateMain(TABLE_DIV, state, params);
}

/**
* Sorting Code
* 
* @param targetStyle
*/
function switchSorting(sortKey) {
	var state = 'websearch.list';
	var params = 'updateResultList=true&sortKey=' + sortKey;
	
	updateMain(TABLE_DIV, state, params);
}

/**
* 
* @param num
* @return
*/
function showDetails(num) {
	var state = 'websearch.immoDetails';
	var params = 'displayImmo=' + num;
	
	updateMain(TABLE_DIV, state, params);
}


/**
 * 
 * @return
 */
function backToList() {
	var state = 'websearch.list';
	var params = 'updateResultList=true';
	
	updateMain(TABLE_DIV, state, params);
}


function updateVerwertung() {
	var inputFields = $$('div#top_verwertung_open input[type="checkbox"]');
	var htmlString = '<table><tr>';
	for(var i=0;i<inputFields.length;i++) {
		if(inputFields[i].checked) {
			var labelid = 'label_' + inputFields[i].id;
			var label = $(labelid);
			htmlString += '<td><img src="/immformer/images/widgets/checkbox_select.gif" alt="" border="" /></td><td>';
			htmlString += label.innerHTML;
			htmlString += '</td>';
		}
	}
	htmlString += '</tr></table>';
	var verwertungDisplay = $('top_verwertung_display');
	verwertungDisplay.innerHTML = htmlString;
}

function updateNutzung() {
	var inputFields = $$('div#top_nutzung_open input[type="radio"]');
	var htmlString = '<table><tr>';
	var curLabel;
	for(var i=0;i<inputFields.length;i++) {
		if(inputFields[i].checked) {
			var labelid = 'label_' + inputFields[i].id;
			var label = $(labelid);
			htmlString += '<td><img src="/immformer/images/widgets/checkbox_select.gif" alt="" border="" /></td><td>';
			curLabel = label.innerHTML;
			htmlString += curLabel;
			htmlString += '</td>';
		}
	}
	htmlString += '</tr></table>';
	var verwertungDisplay = $('top_nutzung_display');
	verwertungDisplay.innerHTML = htmlString;
}

function updateGeo() {
	var labelid, label, i;
	var htmlString = '<table cellpadding="0" cellspacing="0">';
	var bundeslOrBezirkSelected = false;
	
	htmlString += '<tr>';
	var bundeslandFields = $$('div#searchFormComponentWoBundesland input[type="checkbox"]');
	for(i=0;i<bundeslandFields.length;i++) {
		if(bundeslandFields[i].checked) {
			labelid = 'label_' + bundeslandFields[i].id;
			label = $(labelid);
			htmlString += '<td style=""><img src="/immformer/images/widgets/checkbox_select.gif" alt="" border="" /></td><td>';
			htmlString += label.innerHTML;
			htmlString += '</td>';
			bundeslOrBezirkSelected = true;
		}
	}
	
	var bezirksFields = $$('div#searchFormComponentWoBezirk input[type="checkbox"]');
	for(i=0;i<bezirksFields.length;i++) {
		if(bezirksFields[i].checked) {
			labelid = 'label_' + bezirksFields[i].id;
			label = $(labelid);
			htmlString += '<td><img src="/immformer/images/widgets/checkbox_select.gif" alt="" border="" /></td><td>';
			htmlString += label.innerHTML;
			htmlString += '</td>';			
			bundeslOrBezirkSelected = true;
		}
	}
	
	if(!bundeslOrBezirkSelected) {
		htmlString += '<td><img src="/immformer/images/widgets/checkbox_select.gif" alt="" border="" /></td><td>';
		var searchLand = $('searchLand');
		htmlString += searchLand.options[$('searchLand').selectedIndex].text;
		htmlString += '</td>';			
	}
	
	htmlString += '</tr>';
	
	htmlString += '</table>';
	var geoDisplay = $('top_geo_display');
	geoDisplay.innerHTML = htmlString;
}

function updateAll() {
	updateVerwertung();
	updateNutzung();
	updateGeo();
}

function updateMain(TABLE_DIV, state, params) {
  //ogcore_ajax_divupdate(TABLE_DIV, state, params);
  url = ogcore_ajax_getRequestUrl(state, params, false);
  var iFrame = $(TABLE_DIV);
  if(iFrame) {
	  iFrame.src = url;
  }else{
	  document.location = url;
  }
}


/**
 * Handles geoinfo updates
 */
function GeoInfo(cc) {
	var m_cc = cc;

	selectLand(m_cc);
	
	/**
	 * 
	 */
	function selectLand(cc) {
		var landSelect = $('searchLand');
		if(cc == '') {
			cc = 'AT';
			/*
			 * Workaround for selection in old IE
			 */
			setTimeout(function () {
				landSelect.selectedIndex = 0;
				geoinfo.updateLand('AT');
			}, 2500);
		}
		if(landSelect && cc) {
			landSelect.value = cc;
			updateLand(landSelect.value);
		}
	}
	
	/**
	 * 
	 */
	this.updateLand = updateLand;
	function updateLand(cc) {
		if(cc) {
			var div = 'searchFormComponentWoBundesland';
			var state = 'websearch.divSearchFormBundesland';
			var params = 'cc=' + cc;
			ogcore_ajax_divupdate(div, state, params, function () {
				updateBundesland();
			});
			
			if (cc=="AT") $("countryimage").style.display="block";
			else $("countryimage").style.display="none";
			
		}
	}
	
	/**
	 * 
	 */
	function loadMakroBereiche(cc) {
		if(cc) {
			var div = 'searchFormComponentWoMakro';
			var state = 'websearch.divSearchFormMakroBereich';
			var params = 'cc=' + cc;
			ogcore_ajax_divupdate(div, state, params);
		}
	}
	
	/**
	 * 
	 */
	this.updateBundesland = updateBundesland;
	function updateBundesland() {
		var div = 'searchFormComponentWoBezirk';
		var state = 'websearch.divSearchFormBezirk';
		var params = getParameterMap('searchBundesland','bc'); 
		ogcore_ajax_divupdate(div, state, params);
	}
	
	/**
	 * 
	 */
	this.updateBezirk = updateBezirk;
	function updateBezirk() {
		var div = 'searchFormComponentWoMakro';
		var state = 'websearch.divSearchFormMakroBereich';
		var params = getParameterMap('searchBezirk','cc'); 
		ogcore_ajax_divupdate(div, state, params);
	}
	
	this.getParameterMap = getParameterMap;
	function getParameterMap(chkName,mapName){
		var params = 'dummy=dummy';
		var a=checkBoxValues(FORM_NAME,chkName,true);
		if (a && a.length>0) {
			a.each(function(s){params+='&'+mapName+'=' + s;});
		}
		return params;
	}
	
	this.checkBoxValues = checkBoxValues;
	function checkBoxValues(formName, chkName, checked) {
		  var allElements = Form.getElements(formName);
		  var a = [];
		  for (i=0; i<allElements.length; i++) {
		    if (allElements[i].name==formName+"."+chkName && allElements[i].checked===checked) {
		      a.push(allElements[i].value);
		    }
		  }
		  return a;
	}
}

/**
 * Performs merkliste ops
 * 
 * @param immoid
 * @param del
 * @return
 */
function merkliste(page, immoid, del) {
	var params = '';
	if(del) {
		params = 'delImmoList=';
	}else{
		params = 'addImmoList=';
	}
	params += immoid;
	switchPage(page, params);
}

/**
 * 
 * @return
 */
function sessionTimeout(win) {
  //alert('Ihre Session ist abgelaufen, die Seite wird neu geladen!');
  sessionTimeoutHandler(win);
}

/**
 * 
 * @param win
 * @return
 */
function sessionTimeoutHandler(win) {
	try {
		sessionTimeoutHandler(win.parent);
	} catch(e) {
		var tmp = win.location;
		if (tmp.indexof('_bad_session_') == -1) {
			win.location = tmp + '&_bad_session_=true';
		} else {
			alert('Ihre Session ist abgelaufen, die Seite wird neu geladen!');
		}
	}
}

function resetSearch() {
//	var curUrl = document.location.href;
//	if (!curUrl.match("resetSearch")) {
//		curUrl += "&resetSearch=true";
//	}
//	document.location.href=curUrl;
	var p = new Hash(self.location.search.toQueryParams());
	p['resetSearch'] = 'true';
	p['at.onlinegroup.core.windowId'] = winid.getId();
	p.remove('ismiete', 'iskauf', 'doSearch', 'immformerObjektNummerWithKanzlei'); // REMOVE FROM HREF ALL EXPLICIT GET-PARAMS!!!
	self.location.href = self.location.protocol + '//' + self.location.host + self.location.pathname + '?' + p.toQueryString();
}

function showMerkliste() {
	var div = TABLE_DIV;
	var state = 'websearch.list';
	var param = '&showMerkliste=true';
	updateMain(div,state,param);
}

function openGalleryPopup(immformerImmoMediaId) {
	popUp2('websearch.showImage', 'immformerImmoMediaId=' + immformerImmoMediaId, 'websearch-Gallery');
}

function showImage(immformerImmoMediaId) {
	var url = ogcore_ajax_getRequestUrl('websearch.showImage', 'immformerImmoMediaId=' + immformerImmoMediaId);
	document.location = url;
}