function searchAll(radioObject, form1){
    if (radioObject[1].checked){
        document.forms['hiddenform'].elements['keyword'].value = form1.elements['keyword'].value;
        document.forms['hiddenform'].elements['sort'].value = form1.elements['sort'].value;
        document.forms['hiddenform'].submit();
        return false;
        }
    else{
        form1.submit();
        return true;
        }
}

// ref. application.properties:
var POPUP_WINDOW_WIDTH = 1000;
var POPUP_WINDOW_HEIGHT = 740;

var SUBMIT_BUTTON_PROCESSING_TEXT = "Bitte warten";
var SUBMIT_BUTTON_DEFAULT_CLASS = "'button";

// These values are written out on page init (onload)
var NEXT_SUBMIT_BUTTON_VALUE = "weiter";
var BACK_SUBMIT_BUTTON_VALUE = "zur�ck";

var WARNING_TEXT_ILLEGAL_NUMBER_FORMAT = "Bitte achten Sie auf eine korrekte Eingabe der Zahlen";

// ID of form elements to keep in synch when reloading and going back for ad registration
var TERMS_ACCEPTED_CHECKBOX_ID = "attributes.ADV_TERMS_ACCEPTED";
var AD_REGISTRATION_NEXT_SUBMIT_BUTTON_ID = "nextButtonID";
var AD_REGISTRATION_BACK_SUBMIT_BUTTON_ID = "backButtonID";



function swapCurrency( formname, tofield, fromfield, selectedNo) {
	document.forms[formname].elements[tofield].value = document.forms[formname].elements[fromfield].options[selectedNo].text;
}

function expandCollapse() {
	for (var i=0; i<expandCollapse.arguments.length; i++) {
		var element = document.getElementById(expandCollapse.arguments[i]);
		element.style.display = (element.style.display == "none") ? "block" : "none";
	}
}

function expandCollapseInitiallyHidden() {
	for (var i=0; i<expandCollapseInitiallyHidden.arguments.length; i++) {
		var element = document.getElementById(expandCollapseInitiallyHidden.arguments[i]);
        element.style.display = (element.style.display == "block") ? "none" : "block";
	}
}

function hideIfEmpty(emptyTag, hideTag) {
	// if no hide tag i specified, hide the empty tag.
	if (hideTag == null) {
		hideTag = emptyTag;
	}

	// find tag which might be empty
	var e = document.getElementById(emptyTag);
	if (isEmpty(e)) {
		hide(hideTag);
	}
}

function isEmpty(element) {
	if (element != null && element.childNodes != null && element.childNodes.length <= 1) {
		if (element.childNodes.length == 0) {
			// element has no children
			return 1;
		} else if (element.childNodes.length == 1 && element.childNodes[0].data != null && !element.childNodes[0].data.match("[^ \t\n]")) {
			// element has one child, a the child contains only space, tabs and newlines.
			return 1;
		}
	}

	// the tag contains data
	return null;
}

/**
 *  Add an event listener to a DOM element.
 *
 *  @param element    DOM element, ie. "window"
 *  @param eventName  name of the event, ie. "'submit'", which is the onsubmit-event
 *  @param func       a reference to the function that should be called when the event fires
 **/
function _addEventListener(element, eventName, func) {
	if (element.addEventListener) element.addEventListener(eventName, func, false); // W3C
	else if (element.attachEvent) element.attachEvent('on' + eventName, func); // IE
	else element['on' + eventName] = func; // warning! removes existing event handler(s)
}

function show(object, displayMode) {
    if (document.getElementById && document.getElementById(object) !== null) {
         document.getElementById(object).style.visibility='visible';
         document.getElementById(object).style.display=displayMode?displayMode:'block';
    }
    else if (document.layers && document.layers[object] !== null) {
        document.layers[object].visibility = 'visible';
    }
    else if (document.all) {
        document.all[object].style.zIndex = 100;
        document.all[object].style.visibility = 'visible';
    }
}

function hide(object) {
    if (document.getElementById && document.getElementById(object) !== null) {
         document.getElementById(object).style.visibility='hidden';
         document.getElementById(object).style.display='none';
    }
    else if (document.layers && document.layers[object] !== null)
        document.layers[object].visibility = 'hidden';
    else if (document.all)
         document.all[object].style.visibility = 'hidden';
}

if (document.getElementById) { document.write('<style>.contractArticle {position:absolute;visibility:hidden;display:none}</style>'); }

// Prevent double form submits by using this function as an input submit button's onclick handler.
// Example usage: <input:submit functionString="disableButton(this, 'Processing...', 'smallbuttonDisabled')" ... />
function disableButton(button, disabledButtonText, disabledStyle) {
	if (!disabledButtonText) disabledButtonText = SUBMIT_BUTTON_PROCESSING_TEXT;
	button.onclick = preventDefaultAction;
	button.value = disabledButtonText;
	if (disabledStyle) button.className = disabledStyle;
	else if (button.style) button.style.color = '#BBBBBB';
}

// a modified version of 'disableButton'
// Example usage: <input:submit functionString="disableButton(this, 'Processing...')" ... />
function disableAdRegistrationButton(button, disabledButtonText) {
    if (!disabledButtonText) disabledButtonText = SUBMIT_BUTTON_PROCESSING_TEXT;
//	button.onclick = preventDefaultAction;
	button.value = disabledButtonText;
    if (button.style) button.style.color = '#BBBBBB';
}

// Prevents the default action for this event from being performed.
function preventDefaultAction(event) {
	if (!event) event = window.event; // does not work with Mozilla 1.75 and Netscape 4
	if (event) {
		if (event.preventDefault) event.preventDefault(); // W3C
		else event.returnValue = false; // IE
	}
	return false;
}

function submitForm(formName) {
    document[formName].submit()
}

function setFormAction(formName, actionValue) {
    document[formName].action = actionValue;
}

function setUserAction(formName, actionField, actionValue) {
    document[formName].elements[actionField].value = actionValue;
}

function setNextStep(formName, value) {
    document[formName].nextStep.value = value;
}

function changeImage(name, text) {
   document.images["main"].src = name;
   document.all.imagetext.innerText = text;
}

// Submit a form to a new popup window. Send all form elements, except files.
// Side effects: all input elements of type "file" will have the disabled-attribute set to false.
function submitToNewWindow(form, action, width, height) {
	function disableFileUpload(disable) {
		for (elemName in form.elements) {
			var elem = form.elements[elemName];
			if (elem!=null && elem.type=='file') elem.disabled = disable;
		}
	}
	// Default values
	if (!width) width = POPUP_WINDOW_WIDTH;
	if (!height) height = POPUP_WINDOW_HEIGHT;
	if (!action) action = form.action;

	// Remember old values
	var oldTarget = form.target;
	var oldAction = form.action;

	var windowName = "popupwindow";
	openWindow('', width, height, windowName);
	form.target = windowName;
	form.action = action;

	disableFileUpload(true);
	form.submit();
	disableFileUpload(false);

	// Restore original values
	form.target = oldTarget;
	form.action = oldAction;
	return false;
}

function openWindowWithDefaultSize(url, name) {
    openWindow(url,POPUP_WINDOW_WIDTH,POPUP_WINDOW_HEIGHT,name);
}
function openResizeableWindowWithDefaultSize(url, name) {
    openResizeableWindow(url,POPUP_WINDOW_WIDTH,POPUP_WINDOW_HEIGHT,name);
}

function openWindow(url, width, height, name){
	if (!name) name = "";
    var win;
    win = window.open(url, name, "toolbar=no,location=no,directories=no,status=no,menubar=0,resizable=0,copyhistory=no,width=" + width + ",height=" + height + ",scrollbars=1");
    if (((navigator.appName.indexOf("Netscape") != -1) && (parseInt(navigator.appVersion) >=3)) || ((navigator.userAgent.indexOf("MSIE") != -1) && (parseInt(navigator.appVersion) >= 4)))
        win.focus();
}

function openResizeableWindow(url, width, height, name){
	if (!name) name = "";
    var win;
    win = window.open(url, name, "toolbar=no,location=no,directories=no,status=no,menubar=0,resizable=yes,copyhistory=no,width=" + width + ",height=" + height + ",scrollbars=yes");
    if (((navigator.appName.indexOf("Netscape") != -1) && (parseInt(navigator.appVersion) >=3)) || ((navigator.userAgent.indexOf("MSIE") != -1) && (parseInt(navigator.appVersion) >= 4)))
        win.focus();
}

function openMapWindow(url) {
	mapwin = window.open(url, "Kart", "toolbar=no,location=no,directories=no,status=no,menubar=0,resizable=1,copyhistory=no,width=805,height=800,screenX=0,screenY=0,scrollbars=yes");
	if (((navigator.appName.indexOf("Netscape") != -1) && (parseInt(navigator.appVersion) >=3)) || ((navigator.userAgent.indexOf("MSIE") != -1) && (parseInt(navigator.appVersion) >= 4))) {
		mapwin.focus();
	}
}


function checkTextareaMaxLength (textarea, evt, maxLength) {
  if (textarea.selected && evt.shiftKey)
    // ignore shift click for select
    return true;
  var allowKey = false;
  if (textarea.selected && textarea.selectedLength > 0)
    allowKey = true;
  else {
    var keyCode =
      evt.which ? evt.which : evt.keyCode;
    if (keyCode < 48 && keyCode != 13 && keyCode != 32)
      allowKey = true;
    else
      allowKey = textarea.value.length < maxLength;
  }
  textarea.selected = false;
  if (!allowKey) {
    evt.returnValue = false;
    if (evt.preventDefault) evt.preventDefault();
  }
  return allowKey;
}

/**
 * Adds a counter to a textarea and limits its number of charaters to maxLength.
 */
function addTextAreaCounter(textareaName, maxLength, alertMessage) {
	var textarea = document.getElementById(textareaName)
	var textareaCounterName = textareaName + 'Counter';
	function updateCounter() {
		var value = maxLength - textarea.value.length;
		var counter = textarea.form[textareaCounterName];
		counter.value = value;
	}
	function onKeyPressHandler(evt) {
		if (!evt) evt = window.event;
		return checkTextareaMaxLength(textarea, evt, maxLength);
	}
	function onBlurHandler() {
		if (textarea.value.length>maxLength && alertMessage) {
			alert(alertMessage);
			if (textarea.focus) textarea.focus();
		}
	}

	if (!textarea.form[textareaCounterName]) {
		document.writeln('<input disabled="disabled" type="text" name="' + textareaCounterName + '" size="3" maxlength="3" value=""> characters remaining');
		updateCounter();
		textarea.onkeypress = onKeyPressHandler;
		textarea.onkeyup = textarea.onkeydown = updateCounter;
		textarea.onblur = onBlurHandler;
	} else {
		alert('Error in addTextAreaCounter(): Form already contains a child node named "' + textareaCounterName + '".');
	}
}


/* Checks and unchecks an array of checkboxes */
function allChecked(formname, fieldname){
	if (document[formname].elements[fieldname].length == void(0)) {
		var nr = 1;
 	} else {
		var nr = document[formname].elements[fieldname].length;
    }

	if (document[formname].elements["all_"+fieldname].checked == true) {
		var value = true;
	} else {
		var value = false;
    }

	for (var i=0;i<nr;i++) {
		if (nr == 1) {
			document[formname].elements[fieldname].checked = value;
		} else {
		    document[formname].elements[fieldname][i].checked = value;
		}
	}
}

/* Checks or unchecks an array of checkboxes, typically using an onclick method in a link */
function setGroupChecked(formname, fieldname, newstate){
	if (document[formname].elements[fieldname].length == void(0)) {
		var nr = 1;
 	} else {
		var nr = document[formname].elements[fieldname].length;
    }

	for (var i=0;i<nr;i++) {
		if (nr == 1) {
			document[formname].elements[fieldname].checked = newstate;
		} else {
		    document[formname].elements[fieldname][i].checked = newstate;
		}
	}
}

/* Disabled an array of unchecked checkboxes of a group, when a maximum of checked checkboxes is reached.
*  Enables the disabled checkboxes if the number of checked checkboxes is below the maximum level.
* */
function setGroupDisabled(groupSelector, MAX_LENGTH){
    var elems = jQuery(groupSelector).filter(':checked');
    if(elems && elems.length == MAX_LENGTH){
        jQuery(groupSelector).filter(':not(:checked)').attr('disabled', 'disabled');
    }else{
        jQuery(groupSelector).filter(':disabled').removeAttr('disabled');
    }
}

function splitComposite(form,compositefield,field1,field2) {

    var compValue = document.forms[form].elements[compositefield].value;
    var tmpArr = compValue.split("|");
    document.forms[form].elements[field1].value = tmpArr[0];
    document.forms[form].elements[field2].value = tmpArr[1];
}

function setSelected(form, field) {
	if (document.forms[form].elements[field].options) {
		var length = Number(document.forms[form].elements[field].options.length);
		for (var i=0;i<length;i++) {
			document.forms[form][field][i].selected = true;
		}
	}
}


function copyChild(form,parent,from,to,parentfield,insertparenttext) {
   var parentLenght = Number(document.forms[form].elements[parent].options.length);
   var parentText = "";
   var parentValue = "";

   for (var p=0;p<parentLenght;p++) {
        if (document.forms[form].elements[parent].options[p].selected) {
            parentText = document.forms[form].elements[parent].options[p].text;
            parentValue = document.forms[form].elements[parent].options[p].value;
        }
   }
   var length = Number(document.forms[form].elements[from].options.length);
   for (var i=0;i<length;i++) {
     if (document.forms[form][from][i].selected) {

        var valuefrom = document.forms[form][from][i].value;
        var textfrom =  parentText + " " + document.forms[form][from][i].text;
        var all = false;
        if (valuefrom == '0') {
            all = true;
 	}
 	var exists = false;

        var tolength = Number(document.forms[form].elements[to].options.length);
        for (var j=0;j<tolength;j++) {
            var valueto = document.forms[form][to][j].value;
            var textto =  document.forms[form][to][j].text;

            if (valueto == valuefrom && valueto != 0 || (textto == textfrom)) {
                 exists = true;
            }
        }

        if (!exists) {
            if (insertparenttext == false) {
                parentText = "";
            }
            var l = document.forms[form].elements[to].options.length;
            if (all) {
                document.forms[form][to][l] = new Option(parentText + " " + document.forms[form][from][i].text,parentValue);
            } else {
                document.forms[form][to][l] = new Option(parentText + " " + document.forms[form][from][i].text,document.forms[form][from][i].value);
            }
            document.forms[form][to][l].selected = true;
        }
      }
   }
}


function deleteChild(form,from,all,parentfield) {
    var length = Number(document.forms[form].elements[from].options.length);
    if (!all) {
        for (var i=length-1;i>=0;i--) {
            if (document.forms[form][from][i].selected) {
                if (navigator.appName.indexOf("Netscape") != -1) {
                    document.forms[form].elements[from].options[i]=null;
                } else if (navigator.userAgent.indexOf("Opera") != -1) {
                    document.forms[form].elements[from].options.remove(i);
                } else if ((navigator.userAgent.indexOf("MSIE") != -1) && (parseInt(navigator.appVersion) >= 4)) {
                    document.forms[form].elements[from].options.remove(i);
                } else if ((navigator.userAgent.indexOf("MSIE") != -1) && (parseInt(navigator.appVersion) < 4)) {
                    document.forms[form].elements[from].options[i].selected = false;
                } else {
                    document.forms[form].elements[from].options[i].selected = false;
                }
            } else {
                    document.forms[form].elements[from].options[i].selected = true;
            }
        }
   } else {
        if (navigator.appName.indexOf("Netscape") != -1) {
            for (var i=(length); i >= 0; i--) {
                document.forms[form].elements[from].options[i]=null;
            }
        } else if (navigator.userAgent.indexOf("Opera") != -1) {
            for(var i=(length); i >= 0; i--) {
                document.forms[form].elements[from].options.remove(i);
            }
        } else if ((navigator.userAgent.indexOf("MSIE") != -1) && (parseInt(navigator.appVersion) >= 4)) {
            for(var i=(length); i >= 0; i--) {
                document.forms[form].elements[from].options.remove(i);
            }
        } else if ((navigator.userAgent.indexOf("MSIE") != -1) && (parseInt(navigator.appVersion) < 4)) {
            for (var i=(length-1); i >= 0; i--) {
                document.forms[form].elements[from].options[i].selected = false;
            }
        } else {
            for (var i=(length-1); i >= 0; i--) {
                document.forms[form].elements[from].options[i].selected = false;
            }
        }
   }

}

function setCheckedRegions(form,name,value) {
	var valueArr = value.split(";");
	for (var i=0;i<document[form][name].length;i++) {
		for (var ii=0;ii<valueArr.length;ii++) {
			if (document[form][name][i].value == valueArr[ii]) document[form][name][i].checked = true;
		}
	}
}

function setCheckedSubRegions(form,name,name2,value,subRegion) {
    var childs = childArr[value];
    var tmpArr = childs.split("|");
    var tmpArr2;
    var id;
    var checked = document[form][name][value].checked;

    if (!subRegion) {
        var exit = false;
        for (var d=0;d<document[form][name2].length;d++) {
            for (var c=0;c<tmpArr.length;c++) {
                tmpArr2 = tmpArr[c].split(";");
                id = tmpArr2[0];
                if (document[form][name2][d].value == id) {
                    document[form][name2][d].checked = checked;
                    exit = true;
                }
            }
        }
    } else {
        checked = true;
        for (var s=0;s<tmpArr.length;s++) {
            if (document[form][name2][s].checked == false) {
                checked = false;
            }
        }

        if (checked) {
            document[form][name][value].checked = true;
        } else {
            document[form][name][value].checked = false;
        }

    }

}


function setCheckedSubRegionsVisible(form,name,value,regions) {
	var subRegionsArr;
	var tempArr;
	var lastChanged;;
	var found = false;
	var valueArr = value.split(";");
	var mainRegionsArr = regions.split("#");
	for (var i=0;i<mainRegionsArr.length;i++) {
		tempArr = mainRegionsArr[i].split("|");
		subRegionsArr = tempArr[1].split(";");
		for (var ii=0;ii<subRegionsArr.length;ii++) {
			for (var iii=0;iii<valueArr.length;iii++) {
				if (subRegionsArr[ii].length > 0 && valueArr[iii].length > 0 && subRegionsArr[ii] == valueArr[iii]) {
					if (lastChanged != tempArr[0]) {
						menu("submenu"+tempArr[0]);
						swapImage(tempArr[0]);
						lastChanged = tempArr[0];
					}
				}
			}
		}
	}
}

function fillChilds(form,name1,name2,allchilds,allparents) {
	emptySelectBox(form, name1, allchilds);
	var childid = 0;
	var start = 1;
	var name2Length = document[form][name2].length;
	if (allchilds == true) {
		childid = 1;
	}
	if (allparents == false) {
		start = 0;
	}
    var selectedvalue = 0;
	for (var i=start;i<name2Length;i++) {
		if (document[form][name2][i].selected) {

            selectedvalue = parentArr[i-start].split(";")[0];
			var tmpArr = childArr[i-start].split("|");
			for (var j=0;j<tmpArr.length;j++) {
				var tmpArr2 = tmpArr[j].split(";");
			    document[form].elements[name1].options[childid] = new Option(tmpArr2[1],tmpArr2[0]);
                childid++;
			}
		}
	}
    if (allchilds) {
        document[form].elements[name1].options[0].value = '0';
    }
}

function fillChildrenAjax(dependant,depending,ajaxUrl,adTypeId,allchilds) {
    var select = jQuery('select[name="'+dependant+'"]');
	select.empty();
    dependant = dependant.replace(/^attributes./,'');
    var parentid = jQuery('select[name="'+depending+'"] option:selected')[0].value;
    if (parentid) {
        jQuery.getJSON(ajaxUrl, {ajax:true,adTypeId:adTypeId,attrib:dependant,parent:parentid,allchilds:allchilds}, fillChildrenAjaxCallback);
    }
}

function fillChildrenAjaxCallback(data) {
    var params=data['parameters'];
    if (params) {
        var select = jQuery('select[name="attributes.'+params['attrib']+'"]');
        var values = data['values'];
        if(values){
            if (params['allchilds']=='true') {
                select.append('<option value="0">Alle</option>');
            }
            for(var i = 0; i < values.length; i++){
                var value = values[i];
                var html = '<option value="' + value['id'] + '" >';
                html += value['name'];
                html += '</option>'
                select.append(html);
            }
            select.removeAttr('disabled');
        } else {
            select.attr('disabled','disabled');
        }
    }
}

function fillChilds_FirstEntryCustomised(form,name1,name2,allparents,value,text,defaultTextIfNoParentSelected) {
	var childid = 0;
	var start = 1;
	var name2Length = document[form][name2].length;

	if (allparents == false) {
		start = 0;
	}
    var selectedvalue = 0;
	for (var i=start;i<name2Length;i++) {
		if (document[form][name2][i].selected) {
            document[form].elements[name1].options.length = 0;
            document[form].elements[name1].options[childid] = new Option(text, value);
            childid++;
            selectedvalue = parentArr[i-start].split(";")[0];
			var tmpArr = childArr[i-start].split("|");
			for (var j=0;j<tmpArr.length;j++) {
				var tmpArr2 = tmpArr[j].split(";");
			    document[form].elements[name1].options[childid] = new Option(tmpArr2[1],tmpArr2[0]);
                childid++;
			}
		}
	}
    // No parent selected. Reset all values in the child.
    if (!childid) {
        document[form].elements[name1].options.length = 0;
        document[form].elements[name1].options[childid] = new Option(defaultTextIfNoParentSelected?defaultTextIfNoParentSelected:text, value);
    }
}

function fillChildsLocation(form,name1,name2,allchilds,allparents) {
	emptySelectBox(form, name1, allchilds);
	var childid = 0;
	var start = 1;
	var name2Length = document[form][name2].length;
	if (allchilds == true) {
		childid = 1;
	}
	if (allparents == false) {
		start = 0;
	}
    var selectedvalue = 0;
	for (var i=start;i<name2Length;i++) {
		if (document[form][name2][i].selected) {

            selectedvalue = parentArrLocation[i-start].split(";")[0];
            var tmpArr = childArrLocation[i-start].split("|");
            for (var j=0;j<tmpArr.length;j++) {
				var tmpArr2 = tmpArr[j].split(";");
			    document[form].elements[name1].options[childid] = new Option(tmpArr2[1],tmpArr2[0]);
                childid++;
			}
		}
	}
    if (allchilds) {
        document[form].elements[name1].options[0].value = '0';
    }
}

// Used by the <input:select> tag to remember options when the user navigates back in history
function rememberoptions_load(inputSelect) {
	if (inputSelect && inputSelect.form && inputSelect.options) {
		var hValues = inputSelect.form[inputSelect.name + '_values'];
		var hText = inputSelect.form[inputSelect.name + '_text'];
		var hSelected = inputSelect.form[inputSelect.name + '_selected'];
		if (hValues && hText && hSelected && hValues.value.length > 0) {
			// deserialize the arrays from the hidden fields
			var optionValues = hValues.value.split(';');
			var optionText = hText.value.split(';');
			var optionSelected = hSelected.value.split(';');

			// Delete all existing options.
			emptySelectBox(inputSelect.form.name, inputSelect.name, true)

			for (var i=0; i<optionValues.length; ++i) {
				// Create a new option
				var option = new Option(optionText[i], optionValues[i]);
				// Add the option to the select tag
				inputSelect.options[i] = option;
				// Mark the option as selected if it should be
				for (var j=0; j<optionSelected.length; ++j) if (option.value == optionSelected[j]) {
					option.selected = true;
				}
			}
		}
	}
}

// Used by the <input:select> tag to remember options when the user navigates back in history
function rememberoptions_save(inputSelect) {
	if (inputSelect && inputSelect.form && inputSelect.options) {
		var options = inputSelect.options;
		var optionValues = new Array(), optionText = new Array(), optionSelected = new Array();

		// Store options to arrays
		for (var i=0; i<options.length; ++i) {
			var option = options[i];
			optionValues.push(option.value);
			optionText.push(option.text);
			if (option.selected) optionSelected.push(option.value);
		}

		// Serialize the arrays to hidden fields
		inputSelect.form[inputSelect.name + '_values'].value = optionValues.join(';');
		inputSelect.form[inputSelect.name + '_text'].value = optionText.join(';');
		inputSelect.form[inputSelect.name + '_selected'].value = optionSelected.join(';');
	}
}

// Used by the <input:select> tag to remember options when the user navigates back in history
function rememberoptions_registerEventHandlers(formName, selectTagName) {
	// Find formName if it's missing.
	if (!formName || formName.length==0) {
		var tags = document.getElementsByName(selectTagName);
		if (tags.length>0 && tags[0] && tags[0].form && tags[0].form.name) formName = tags[0].form.name;
	}
	var form = document.forms[formName];
	if (form) {
		var selectTag = form[selectTagName];
		if (selectTag) {
			_addEventListener(form, 'submit', function() { rememberoptions_save(selectTag); });
			_addEventListener(window, 'load', function() { rememberoptions_load(selectTag); });
		}
	}
}

function emptySelectBox(form, boxname, allchilds){
    if (document[form][boxname].disabled==false) {
        var length = Number(document.forms[form].elements[boxname].options.length);

        if (navigator.appName.indexOf("Netscape") != -1) {
            for (var i=(length); i > 0; i--) {
                document.forms[form].elements[boxname].options[i]=null;
            }
        } else if (navigator.userAgent.indexOf("Opera") != -1) {
            for(var i=(length); i > 0; i--) {
                document.forms[form].elements[boxname].options.remove(i);
            }
        } else if ((navigator.userAgent.indexOf("MSIE") != -1) && (parseInt(navigator.appVersion) >= 4)) {
            for(var i=(length); i > 0; i--) {
                document.forms[form].elements[boxname].options.remove(i);
            }
        } else if ((navigator.userAgent.indexOf("MSIE") != -1) && (parseInt(navigator.appVersion) < 4)) {
            for (var i=(length-1); i > 0; i--) {
                document.forms[form].elements[boxname].options[i].selected = false;
            }
        } else {
            for (var i=(length-1); i > 0; i--) {
                document.forms[form].elements[boxname].options[i].selected = false;
            }
        }
        if ((navigator.appName.indexOf("Netscape") == -1) || ((navigator.appName.indexOf("Netscape") != -1) && (parseInt(navigator.appVersion) > 4))) {
            if (allchilds) {
                document.forms[form].elements[boxname].options[0] = new Option("Alle","0",true,true);
            } else {
                document.forms[form].elements[boxname].options[0] = new Option("","0",true,true);
            }
            document.forms[form].elements[boxname].options[0].selected = true;
        }
    }
}

function removeNonDigits(inputObject) {
	inputObject.value = inputObject.value.replace(/[\.,:]-$/,'');
	inputObject.value = inputObject.value.replace(/[\.,:][0-9][0-9]?$/,'');
	inputObject.value = inputObject.value.replace(/[^0-9]/g,'');
}

function removePrecedingZeros(inputObject) {
	inputObject.value = inputObject.value.replace(/^0+/,'');
}

function removeExceptNumbersAndLetters(inputObject) {
	inputObject.value = inputObject.value.replace(/\W/g,'');
}

function MM_findObj(n, d) {
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}
function menu(objName) {
  var obj = MM_findObj(objName);
  var theProp = "style.display";
  if (obj.style.display == "none"){
    var theValue = "block";
  } else {
    var theValue = "none";
  }
  if (obj && (theProp.indexOf("style.")==-1 || obj.style)){
    if (theValue == true || theValue == false)
      eval("obj."+theProp+"="+theValue);
    else eval("obj."+theProp+"='"+theValue+"'");
  }
}

function swapImage(intImage) {
	var filenamePosition = document.getElementById("image" + intImage).src.indexOf('icon_minus.gif');
	var originalSrc = document.getElementById("image" + intImage).src;
	if (filenamePosition > 0) {
		document.getElementById("image" + intImage).src = originalSrc.substring(0,filenamePosition) + 'icon_plus.gif';
	} else {
		filenamePosition = document.getElementById("image" + intImage).src.indexOf('icon_plus.gif');
		document.getElementById("image" + intImage).src = originalSrc.substring(0,filenamePosition) + 'icon_minus.gif';
	}
    return(false);
}

function swapImage1(intImage) {
	var filenamePosition = document.getElementById("image" + intImage).src.indexOf('collapse1.gif');
	var originalSrc = document.getElementById("image" + intImage).src;
	if (filenamePosition > 0) {
		document.getElementById("image" + intImage).src = originalSrc.substring(0,filenamePosition) + 'expand1.gif';
	} else {
		filenamePosition = document.getElementById("image" + intImage).src.indexOf('expand1.gif');
		document.getElementById("image" + intImage).src = originalSrc.substring(0,filenamePosition) + 'collapse1.gif';
	}
    return(false);
}

// Merge two or more collections.
// Example usage: var result = concat_collections(divTag.getElementsByTagName('input'), divTag.getElementsByTagName('textarea'))
function concat_collections() {
	var result = new Array();
	for (var i=0; i<concat_collections.arguments.length; ++i) {
		var collection = concat_collections.arguments[i];
		for (var j=0; j<collection.length; ++j) result.push(collection[j]);
	}
	return result;
}

// Find all input fields that are children of a given tag and enable or disable them.
function toggle_enable_inputfields(parentTagId, enable, disabledBgColor) {
	if (!disabledBgColor) disabledBgColor = '#DDDDDD';
	var divTag = document.getElementById(parentTagId);
	if (divTag) {
		var inputFields = concat_collections(divTag.getElementsByTagName('input'), divTag.getElementsByTagName('textarea'));
		for (var i=0; i<inputFields.length; ++i) {
			inputFields[i].disabled = !enable;
			// Change the background color. IE only.
			var bgColor = '';
			if (!enable) bgColor = disabledBgColor;
			if (inputFields[i].runtimeStyle) inputFields[i].runtimeStyle.backgroundColor = bgColor;
		}
	}
}

function createCookie(name, value, days) {
    if (days) {
        var date = new Date();
        date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
        var expires = "; expires=" + date.toGMTString();
    }
    else var expires = "";
    document.cookie = name + "=" + value + expires + "; path=/";
}

function readCookie(name) {
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for (var i = 0; i < ca.length; i++) {
        var c = ca[i];
        while (c.charAt(0) == ' ') c = c.substring(1, c.length);
        if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
    }
    return null;
}

function eraseCookie(name) {
    createCookie(name, "", -1);
}

/*
* See the init function
*/



function updateNextButton(tickId, buttonId, buttonText, disabledStyle, enabledStyle) {
    var tick =    document.getElementById(tickId);
    var button = document.getElementById(buttonId);
//alert("tick("+tickId +"): " + tick + " button("+ buttonId +"): " + button);
    if ( null == tick)  {
        // form already submitted with user agreeing to terms. The submit button should already be enabled,
    }
    else {
        if (tick.checked) {
            button.disabled = false;
            if (enabledStyle) {
                button.className = enabledStyle;
            } else {
                button.className = SUBMIT_BUTTON_DEFAULT_CLASS;
            }
        }
        else {
            button.disabled = true;
            if (disabledStyle) {
                button.className = disabledStyle;
            }
        }
    }

    if (button == null) {}
    else {
        // name was changed when submitted:
        if (buttonText != null) {
            button.value = buttonText;
        } else {
            button.value = NEXT_SUBMIT_BUTTON_VALUE;
        }
    }
}

function updateBackButton(tickId, buttonId, buttonText) {
    var tick =    document.getElementById(tickId);
    var button = document.getElementById(buttonId);
//alert("tick("+tickId +"): " + tick + " button("+ buttonId +"): " + button);
    if ( null == tick)  {
        // form already submitted with user agreeing to terms. The submit button should already be enabled,
    }
    else {
        if (tick.checked) { button.disabled = false; }
        else { button.disabled = true; }
    }


 if (button == null) { }
 else {
     // name was changed when submitted:
     if (buttonText != null) {
         button.value = buttonText;
     } else {
         button.value = BACK_SUBMIT_BUTTON_VALUE;
     }
 }
 }

function init() {
    // run as part of body.onload on ad registration page.
    //make next-button synch with check box for agreeing to advertising terms:
//    alert("running init");
    updateNextButton(TERMS_ACCEPTED_CHECKBOX_ID,AD_REGISTRATION_NEXT_SUBMIT_BUTTON_ID);
}

/*
 * Copied from Hebbes as variaPriceFieldCheck
 */
function longPriceFieldCheck(inputObject) {
	var temp = inputObject.value;
	temp = temp.replace(/[,]$/,'');
	temp = temp.replace(/[^0-9,]/g,'');
	if (temp != inputObject.value) {
	    alert(WARNING_TEXT_ILLEGAL_NUMBER_FORMAT);
        inputObject.value = temp;
    }
}

/*
 * Special for Kalaydo:
 * NO_OF_ROOMS: number of rooms can be given as 3.4 or 4.5
 * meaning 3-4 or 4-5 rooms
 * Almost as longPriceFieldCheck() method over,
 * but allowing '.' instead of ','
 */
function nmbOfRoomsFieldCheck(inputObject) {
	var temp = inputObject.value;
	temp = temp.replace(/[.]$/,'');
	temp = temp.replace(/[^0-9.]/g,'');
	if (temp != inputObject.value) {
	    alert(WARNING_TEXT_ILLEGAL_NUMBER_FORMAT);
        inputObject.value = temp;
    }
}

/**
 * This function are used to check if a JSON object has more than one element.
 * The JSON object has no length property
 *
 * @param jsonObject
 */
function isSingle(jsonObject) {
    var counter = 0;
    var single = true;
    for (k in jsonObject) {
        counter++;
        if (counter > 1) {
            single = false;
            break;
        }
    }
    return single;
}

/**
 * Refill a select list with options, and add an additional option at top of the list.
 *
 * @param field - jQuery selection string.
 * @param options
 * @param topOptionLabel - An additional first option on the list. i.e. "Select from list ...". If null, then no additional first option.
 */
function jQueryFillList(field, options, topOptionLabel) {
    jQuery(field).removeOption(/./).removeOption(0);
    if (topOptionLabel) {
        jQuery(field).addOption("", topOptionLabel);
    }
    jQuery(field).addOption(options, false);
}

/**
 * Update selected products. Will return html, and insert it to div#order.
 *
 * @param form
 * @param ajaxUrl
 */
function updateOrder(form, ajaxUrl) {
    var parameters = jQuery(form).serialize();
    jQuery.ajax({
        url: ajaxUrl, type: 'POST', dataType: 'html', timeout: 2000,
        data: parameters,
        error:   function(){/* If error then no changes will occur. */},
        success: function(html){
            jQuery("div#order").html(html);
        }
    });
}

function setDescriptionBehavior(selector, defaulttext, markerClass) {

    // Select the field
    var theElement = jQuery(selector);

    // Add event listeners for the field
    jQuery(theElement).bind('focus', function() {
        clickclear(this, defaulttext, markerClass);
    });
    jQuery(theElement).bind('blur', function() {
        clickrecall(this, defaulttext, markerClass);
    });


    jQuery(theElement).each(function() {
        // Fill field with 'descriptive' text if blank
        clickrecall(this, defaulttext, markerClass);

        // Add a onsubmit event on the form to remove descriptive text
        jQuery(this.form).bind('submit', function() {
            clickclear(jQuery(selector).get()[0], defaulttext, markerClass);
        });
    });

}

/**
 * Clears the 'descriptive' value from an input element.
 * Dynamically remove the marker class if specified.
 *
 * @param thisfield
 * @param defaulttext
 * @param markerClass
 */
function clickclear(thisfield, defaulttext, markerClass) {
    if (markerClass) {
        jQuery(thisfield).removeClass(markerClass);
    }
    if (thisfield.value == defaulttext) {
        thisfield.value = "";
    }
}

/**
 * Adds a 'descriptive' value to an input element if empty.
 * Dynamically set a marker class if specified.
 *
 * @param thisfield
 * @param defaulttext
 * @param markerClass
 */
function clickrecall(thisfield, defaulttext, markerClass) {
    if (thisfield.value == "" || thisfield.value == defaulttext) {
        thisfield.value = defaulttext;
        if (markerClass) {
            jQuery(thisfield).addClass(markerClass);
        }
    }
}

/**
 * Unobtrusive windows.onload replacement. Will keep existing onload events.
 **/
function addLoadEvent(func) {
    var oldonload = window.onload;
    if (typeof window.onload != 'function') {
        window.onload = func;
    } else {
        window.onload = function() {
            oldonload();
            func();
        }
    }
}

/**
 * Script that will set image size to myMaxWidth/Height if they are larger in any direction.
 * @param myAnchor  (will work on all images inside this element)
 * @param myMaxWidth max height
 * @param myMaxHeight max witdh
 * Usage: addLoadEvent(function(){adjustImageSize("resultlist",150,100);});
 **/
function adjustImageSize(myAnchor, myMaxWidth, myMaxHeight) {
    var myAnchorElement = document.getElementById(myAnchor);
    if (myAnchorElement) {
        var myImages = myAnchorElement.getElementsByTagName("img");
        if (myImages) {
            for (var x = 0; x < myImages.length; x++) {
                if (myImages[x].width > myMaxWidth) {
                    myImages[x].width = myMaxWidth;
                }
                if (myImages[x].height > myMaxHeight) {
                    myImages[x].height = myMaxHeight;
                }
            }
        }
    }
}



/**
 * Help script for iadinstance
 * Handle the "iadinstace.xx" element in the url if it exists. iadinstance.xx is always the last
 * part in the url, we must add "/result" in the "middle" if iadinstance.xx exists.
 */

function appendPathToUrl(baseUrl, pathToAppend) {
    var iadInstanceRegEx = /\/?iadinstance.[0-9]+\/?/;
    var match = iadInstanceRegEx.exec(baseUrl);
    if (match !== null) {
        var baseUrlWithOneSlash = concatenateWithOneSlash(baseUrl.replace(iadInstanceRegEx, ''), pathToAppend);
        return concatenateWithOneSlash(baseUrlWithOneSlash, match[0]);
    } else {
        return concatenateWithOneSlash(baseUrl, pathToAppend);
    }

    
}
/**
 * Concatenates two element and ensures that only one slash is between the elements, eg. baseurl/pathElements
 * @param elem1, eg baseurl
 * @param elem2, path elements
 */
function concatenateWithOneSlash(elem1, elem2) {
    elem1 = elem1.replace(/\/$/, "");
    elem2 = elem2.replace(/^\//, "");
    return elem1+"/"+elem2;
}

/*
 * Prevents that a form will be submitted by pressing the enter-/return-key. The only way to submit it is to click on a submit button.
 * See KLDO-697: after a validation error the bap-input-page will be displayed again but the form action is already set to shoppingcart (the next step).
 *                           while clicking on the submit button the form action is changed to the bap-input-action.
 *                           but if pressing enter the form will be submitted to the shoppingcart without any validation 
 *
 * See KLDO-792: with the previous fix we suppressed the enter key in a textarea field so no newlines would be possible
 *                           because of that we have to check the eventSource and allow enter keys in textareas explicitly
 */

function isEnterKey(e){
    var key;
    if(window.event)
        key = window.event.keyCode;     //IE
    else
        key = e.which;     //firefox

    if(key == 13)
        return true;

    return false;

}

function disableEnterKey(e) {
    var eventTargetNodeName = "";
    if(e.target != null){
        eventTargetNodeName = e.target.nodeName; //FF
    }else{
        eventTargetNodeName = e.srcElement.nodeName; //IE
    }
     if(isEnterKey(e)){
         if(eventTargetNodeName == 'TEXTAREA'){
             return true;
         }
         return false;
     }
     else
          return true;
}

function resultlistHandling(){
    jQuery('.odd, .even').mouseover(function(){
        jQuery(this).addClass('btmlineMouseover');
    });
    jQuery('.odd, .even').mouseout(function(){
        jQuery(this).removeClass('btmlineMouseover');
    });
    jQuery('.result_topads').mouseover(function(){
        jQuery(this).addClass('result_topadsMouseover');
    });
    jQuery('.result_topads').mouseout(function(){
        jQuery(this).removeClass('result_topadsMouseover');
    });
    jQuery('.style1').mouseover(function(){
        jQuery(this).addClass('style1Mouseover');
    });
    jQuery('.style1').mouseout(function(){
        jQuery(this).removeClass('style1Mouseover');
    });

    /* check if the result page is called again (with redirect) after adding an advert to myFindings,
        * this is indicated by the hash '#<adid>#myfindingsaved' in the url  */
    var locHash = window.location.hash;
    if(locHash.match(/#\d+#myfindingsaved/)){
        var adidMatch = locHash.match(/#(\d+)#myfindingsaved/); /*should return an array like this: [ '#<adid>#myfindingsaved' , '<adid>' ] */
        if(adidMatch != undefined && adidMatch.length > 1 ){
            var adId = adidMatch[1];
            if(adId != undefined && adId != ''){
                window.location.hash = '#'+adId;
                showAddToMyFindingsLayer(adId);
            }
        }
    }
}

/**
 * ajax function to add in ad asyncronously to myFindings
 * is triggered from result lists
 * @param adId
 */
function addToMyFindings(adId, callback){
    if(callback == undefined){
        callback = addToMyFindingsCallback;
    }
    jQuery.getJSON(editAdBaseUrl,{ajax:true,kalaydonr:adId,userAction:'addToFindings'},callback)
}
function addToMyFindingsCallback(jsonData){
    jsonListCallback(jsonData, function(adEntry) {
        var adId = adEntry['adId'];
        if (adEntry['addFindingStatus'] == 'success') {

            showAddToMyFindingsLayer(adId);

            jQuery('.finding_adid_'+adId + ' span').text(' Gemerkt ');
            jQuery('.finding_adid_'+adId).addClass('detailsButtonOK');

            //document.getElementById('finding_link_adid_'+adId).setAttribute('onclick','blur(); return false;');
            var buttons =  document.getElementsByClassName('finding_adid_'+adId);
            for(var i = 0; i < buttons.length; i++){
                var btn = buttons[i];
                btn.setAttribute('onclick','return false;');
                btn.setAttribute('style','cursor: default;');
                btn.style.cursor = 'default;';
            }


        }else{

        }
    });
}
function addToMyFindingsOnObjectpageToolboxCallback(jsonData){
    jsonListCallback(jsonData, function(adEntry) {
        var adId = adEntry['adId'];
        if (adEntry['addFindingStatus'] == 'success') {

            showAddToMyFindingsLayer(adId, '#savead', 80);
            markButtonsWhenAdIsInMyFindings();
            /*
            var btn = document.getElementById('#savead');
            btn.setAttribute('onclick','return false;');
            btn.setAttribute('style','cursor: default;');
            btn.style.cursor = 'default;';
            */
        }else{

        }
    });
}
function addToMyFindingsOnObjectpageSmallToolboxCallback(jsonData){
    jsonListCallback(jsonData, function(adEntry) {
        var adId = adEntry['adId'];
        if (adEntry['addFindingStatus'] == 'success') {

            showAddToMyFindingsLayer(adId, '#lowerSaveAdLink', 30);
            markButtonsWhenAdIsInMyFindings();
            /*
            var btn = document.getElementById('#lowerSaveAdLink');
            btn.setAttribute('onclick','return false;');
            btn.setAttribute('style','cursor: default;');
            btn.style.cursor = 'default;';
            */
        }else{

        }
    });
}
function markButtonsWhenAdIsInMyFindings(){
    var btn = jQuery('.small_toolbox .remember_image');
    btn.click(function(){return false;})
    btn.attr('title','Anzeige gemerkt');
    btn.addClass('remembered_image');

    jQuery('#lowerSaveAdLink').click(function(){return false;});
    jQuery('#lowerSaveAdLink').attr('onclick','return false;');
    jQuery('#lowerSaveAdLink').css('cursor','default');
    jQuery('#lowerSaveAdLink').attr('title','Anzeige gemerkt');

    var lnk = document.getElementById('lowerSaveAdLink');
    if(lnk != null && lnk != undefined){
        var text = lnk.innerHTML;
        text = text.replace(/Merken/,'gemerkt');
        lnk.innerHTML = text;
    }

}

function jsonListCallback(jsonData, callback){
    if(jsonData['status'] == 'OK'){
        var list = jsonData['list'];
        for (var i=0, j=list.length; i<j; i++) {
            var adEntry = list[i];
            callback(adEntry);
        }
    }
}

function showAddToMyFindingsLayer(adId, adButtonId, leftOffset){
    var layerHtml = '<div class="layerAdAddedToMyFindings" id="ad_layer_'+adId+'" onclick="return false;"><div>' +
                    '<span style="color: green; font-weight: bold; margin-bottom: 10px;">Dieses Angebot wurde auf Ihrer Merkliste gespeichert</span><br /><br />' +
                    'Ihre Merkliste befindet sich im <span onclick="window.location.href=\'/anzeigen/myprofile\'; return false;" style="color: #2200CC; cursor:pointer;">Mein-Kalaydo Bereich</span>.' +
                    '</div></div>';

    if(adButtonId == undefined){
        adButtonId = '#finding_adid_'+adId;
    }
    if(leftOffset == undefined){
        leftOffset = 2;
    }
    var findingButton = jQuery(adButtonId);
    var findingButtonOffset = findingButton.offset();
    findingButton.parent().append(layerHtml);

    var layerElement = jQuery('#ad_layer_'+adId);
    layerElement.css('top', findingButtonOffset.top - 2 + 'px' );
    layerElement.css('left', findingButtonOffset.left - leftOffset + 'px');
    layerElement.css('display', 'block');

    window.setTimeout(function(){
        layerElement.fadeOut(1000);
    },3000);
}

/*
 * This functions explicitly registers an onclick handler on each IMG-element inside a given set of anchor-tags. If the image is clicked,
 * the handler simulates a click on the owning anchor tag. 
 *
 * Use-Case: Due to a bug in IE6/7, images inside a block inside an anchor-tag are not clickable.
 */
(function(jQuery){
    jQuery.fn.fixChildImageClick = function() {
		return jQuery(this).each(function(){
            var anchor = jQuery(this);
            if(anchor.attr('href') != 'undefined'){
                jQuery('img', anchor).click(function(){
                    if(jQuery(anchor).attr('target') == '_blank'){
                        var newTab = window.open(jQuery(anchor).attr('href'), '_blank');
                        newTab.focus();
                        return false;
                    } else {
                        window.location.href = jQuery(anchor).attr('href');
                    }
                });
            }
		});
	}
})(jQuery);

function fixChildImageClick(anchors) {
		return jQuery(anchors).each(function(){
            var anchor = jQuery(this);
            if(anchor.attr('href') != 'undefined'){
                jQuery('img', anchor).click(function(){
                    if(jQuery(anchor).attr('target') == '_blank'){
                        var newTab = window.open(jQuery(anchor).attr('href'), '_blank');
                        newTab.focus();
                        return false;
                    } else {
                        window.location.href = jQuery(anchor).attr('href');
                    }
                });
            }
		});
	}
var shortUrlSet = false;
function ShortUrl(longUrl){
    

    var defaults = {
        login : 'itkalaydo',
        apiKey : 'R_866e2e48c8c34cdaefc155cc35c53b71',
        longUrl : longUrl
    };

    var bitlyUrl = 'http://api.bitly.com/v3/shorten?'
                    + "&login=" +defaults.login
                    + "&apiKey=" +defaults.apiKey
                    + "&longUrl=" +defaults.longUrl
                    + "&format=json&callback=?";

    if (!shortUrlSet) {
        jQuery.getJSON(bitlyUrl, function(data){
            var resultUrl = data.data.url;
            jQuery('#twitterlink,#twitterlinkBottom').attr('href','http://twitter.com/home?status=gefunden%20auf%20%23kalaydo.de%20'+resultUrl);
        });
        shortUrlSet = true;
    }
}

var IAD = IAD || {};
IAD.iframeResizer = function (){
    //Input the IDs of the IFRAMES you wish to dynamically resize to match its content height:
    //Separate each ID with a comma. Examples: ["myframe1", "myframe2"] or ["myframe"] or [] for none:
    var iframeids = [];

    function initialize(iframes){
        iframeids = iframes;
    }

    //Should script hide iframe from browsers that don't support this script (non IE5+/NS6+ browsers. Recommended):
    var iframehide = "no";

    function resizeCaller() {
        for (i = 0; i < iframeids.length; i++) {
            if (document.getElementById)
                resizeIframe(iframeids);
            //reveal iframe for lower end browsers? (see var above):
            if ((document.all || document.getElementById) && iframehide == "no") {
                var tempobj = document.all ? document.all[iframeids] : document.getElementById(iframeids);
                tempobj.style.display = "block";
            }
        }
    }

    function resizeIframe(frameid) {
        var currentfr = document.getElementById(frameid);
        if (currentfr && !window.opera) {
            currentfr.style.display = "block";
            var mozillaoffset = 10;
            var ieoffset = 40;
            if (currentfr.contentDocument && currentfr.contentDocument.body.offsetHeight) //ns6 syntax
                currentfr.height = currentfr.contentDocument.body.offsetHeight - mozillaoffset;
            else if (currentfr.Document && currentfr.Document.body.scrollHeight) //ie5+ syntax
                currentfr.height = currentfr.Document.body.scrollHeight - ieoffset;
            if (currentfr.addEventListener)
                currentfr.addEventListener("load", readjustIframe, false);
            else if (currentfr.attachEvent) {
                currentfr.detachEvent("onload", readjustIframe); // Bug fix line
                currentfr.attachEvent("onload", readjustIframe);
            }
        }
    }

    function readjustIframe(loadevt) {
        var crossevt = (window.event) ? event : loadevt;
        var iframeroot = (crossevt.currentTarget) ? crossevt.currentTarget : crossevt.srcElement;
        if (iframeroot)
            resizeIframe(iframeroot.id);
    }


    if (window.addEventListener)
        window.addEventListener("load", resizeCaller, false)
    else if (window.attachEvent)
        window.attachEvent("onload", resizeCaller);
    else
        window.onload = resizeCaller;

    return {initialize: function (data) {
        iframeids = data;
        }
    };
}();

/**
 * unchecks the checkbox "heating cost included in extra costs" on realestate adinput pages if the extra-cost-textfield is empty
 * this avoids an unwanted entry in the ad_attribute_value table if the checkbox is checked
 *
 * @param prefix - the price-attribute-xmlname, should be "RENTAL_PRICE" or "ESTATE_PRICE"
 */
function checkExtraHeatingCosts(prefix){
    var extracostTF = document.getElementById('attributes.'+prefix+'.EXTRA_COST').value;
    var heatingCB = document.getElementById('attributes.'+prefix+'.EXTRA_COST_HEATING_INCLUDED');

    if(extracostTF == undefined || jQuery.trim(extracostTF) == ''){
        heatingCB.checked = false;
    }
}

function LoginPanel(eventNode, nodeToExpand, hover, normalCss, expandedCss){

    function onMouseEnterEvent(event) {
        if (hoverActivated) {
            show();
        }
    }

    function onMouseLeaveEvent(event) {
        if (hoverActivated) {
            hide(2000);
        }
    }

    function onClickEvent(event) {
        hoverActivated = false;
        if (expand) {
            hide(500);
        } else {
            show();
        }
    }

    function onBodyClickEvent(event) {

        var found = jQuery(event.target).parents("#loginHover").length;
        if (found == 0) {
            hide(500);
        }
//        jQuery(".loginPanelName").html(event.target.name);
    }

    function show() {
        expandNode.show();
        TextToHide.hide();
        hoverNode.addClass(expandedCss);
        hoverNode.removeClass(normalCss);
        expandNode.fadeIn('fast', function() {
            loginPulldownTriangle.html("&#x25B2;");
            expand = true;
        });
    }

    function hide(duration) {
        expand = false;
        loginPulldownTriangle.html("&#x25BC;");
        expandNode.fadeOut('fast', function() {
            hoverNode.addClass(normalCss);
            hoverNode.removeClass(expandedCss);
            TextToHide.show();
            hoverActivated = true;
        });
    }

    function setLocked(event) {
        hoverActivated = false;
    }

    var expandNode = jQuery(nodeToExpand);
    var node = jQuery(eventNode);
    var hoverNode = jQuery(hover);
    var loginPulldownTriangle = jQuery("#loginPulldownTriangle");
    var TextToHide = jQuery("div.HeaderBackgroundBlueTextVertical, div.HeaderBackgroundBlueText, div.HeaderBackgroundBlueTextVerticalFewo");
    var hoverActivated = true;
    var expand = false;
    hoverNode.hover(onMouseEnterEvent, onMouseLeaveEvent);
    jQuery(expandNode, "input").click(setLocked);
    node.click(onClickEvent);
//    jQuery("body").click(function(event) {hide(500);})
    jQuery("body").click(onBodyClickEvent)
}


/**
 * Script for Image-View in Ad-Detail-Page 
 */
function ImageBrowser(pageSize, loaderUrl, loadFailUrl, displayPagingLinks, postfix){


    function onSmallImageEventHover(event) {
        if (hoverActivated) {
            var target = jQuery(event.target);
            setImageNode(target);
            currentIndex = currentImageNode.attr('id').substring(5 + postfix.length);
        }
    }

    function onSmallImageEventClick(event) {
        // nothing to do currenty
//        var target = jQuery(event.target);
//        setCurrentImage(target);
//        currentIndex = currentImageNode.attr('id').substring(5);
//        hoverActivated = false;
    }

    function setImage() {
        checkPaging();
        setImageNode(jQuery('#thumb' + postfix + currentIndex));
    }

    function setImageNode(newImageNode) {

        var img = new Image();

        if (newImageNode.attr("bigImage" + postfix) == currentImageNode.attr("bigImage" + postfix)) {
            return;
        }

        // remember old image-object
        var oldImage = jQuery('img', imageBrowserBigImage);
        if (!imageArray[oldImage.attr("src") + postfix]) {
//            oldImage.css('opacity', '1');
            imageArray[oldImage.attr("src") + postfix] = oldImage.get(0);
        }

        if (currentImageNode != null) {
            currentImageNode.addClass("notSelectedImage");
            currentImageNode.removeClass("selectedImage");
        }
        currentImageNode = newImageNode;
        var image_src = newImageNode.attr("bigImage" + postfix);
        newImageNode.addClass("selectedImage");
        newImageNode.removeClass("notSelectedImage");

        var savedImage = imageArray[image_src + postfix];
        if (savedImage) {
            jQuery(savedImage).css('opacity', '1');
            fadeInImage(savedImage);
        } else {

            LoadImage(image_src);
        }

        refreshImageDescription();
    }

    function LoadImage(image_src) {
        // hide old image
        jQuery('img', imageBrowserBigImage).hide();

        // instantiate and load new image
        var img = new Image();
        jQuery(img).attr('src', image_src);

        // TODO: onclick-action als contructor-parameter übergeben
        if (postfix == "") {
//            jQuery(img).attr('onclick', 'openImageViewBox()');
            img.onclick = openImageViewBox;            
            jQuery(img).css('cursor', 'pointer');
        }
        jQuery(img).css('display', 'inline');

        if (img.complete) {  // check again if image is already loaded

            fadeInImage(img);
        } else {

            // set loader image as background
            imageBrowserBigImage.css('background', 'url(' + loaderUrl + ') no-repeat center center');

            // load image and fade in
            jQuery(img).load(function () {

                imageBrowserBigImage.css('background', '');
                fadeInImage(this);
            }).error(function () {

                // show error image
                imageBrowserBigImage.css('background', '');
                jQuery(this).attr('src', loadFailUrl);
                imageBrowserBigImage.html(this);
            });
        }
    }

    function fadeInImage(img) {
        jQuery(img).hide();
        imageBrowserBigImage.html(img);
        jQuery(img).fadeIn();
    }

    function rotateForward() {
        currentIndex ++;
        if (currentIndex > imgNumber-1) {
            currentIndex = 0;
        }
        setImage();
    }

    function rotateBackward() {
        currentIndex --;
        if (currentIndex < 0) {
            currentIndex = imgNumber-1;
        }
        setImage();
    }

    function nextPage() {
        // set image-index on first of next page
        currentIndex = (currentPageIndex+1) * pageSize;
        if (currentIndex > imgNumber-1) {
            // should not happen
            currentIndex = imgNumber-1;
        }
        setImage();
    }

    function previousPage() {
        // set image-index on first of previous page
        currentIndex = (currentPageIndex-1) * pageSize;
        if (currentIndex < 0) {
            // should not happen
            currentIndex = 0;
        }
        setImage();
    }

    function checkPaging() {
        var newPage = Math.floor(currentIndex / pageSize);
        if (newPage != currentPageIndex) {
            jQuery("#thumb_page" + postfix + currentPageIndex).hide();
            currentPageIndex = newPage;
            jQuery("#thumb_page" + postfix + currentPageIndex).show();
            refreshPagingInfos();
            if (displayPagingLinks) {
                refreshPagingLinks();
            }
        }
    }

    // called on every page change
    function refreshPagingInfos() {
//        var currentListSize = 0;
//        if ( currentPageIndex+1 < pageNumber) {  // not last page ?
//            currentListSize = pageSize;
//        } else {
//            // last page
//            currentListSize = imgNumber % pageSize;
//            if (currentListSize == 0) {
//                currentListSize = pageSize;
//            }
//        }

//        jQuery(".ImageBrowserInfos" + postfix).html(currentListSize + "/" + imgNumber + " Bilder");
    }

    function refreshPagingLinks() {
        if (currentPageIndex > 0) {
            jQuery("#ImageBrowserPagingPrevButton" + postfix).show();
            jQuery("#ImageBrowserPagingPrevButtonPlaceholder" + postfix).hide();
        } else {
            jQuery("#ImageBrowserPagingPrevButton" + postfix).hide();            
            jQuery("#ImageBrowserPagingPrevButtonPlaceholder" + postfix).show();
        }
        if (currentPageIndex < pageNumber-1) {
            jQuery("#ImageBrowserPagingNextButton" + postfix).show();
//            jQuery("#ImageBrowserPagingNextButtonPlaceholder" + postfix).hide();
        } else {
            jQuery("#ImageBrowserPagingNextButton" + postfix).hide();
//            jQuery("#ImageBrowserPagingNextButtonPlaceholder" + postfix).show();
        }

        var pagelinks = jQuery("#ImageBrowsePagingSinglePages" + postfix);
        pagelinks.children().remove();
        pagelinks.html('<span class="ImageBrowserPagingBold">' + (currentPageIndex+1) + '&nbsp;</span>');
        var counter = 1;
        if (currentPageIndex < pageNumber-1) {
            pagelinks.append(generateSinglePageLink(currentPageIndex+2));
            counter ++;
        }
        if (currentPageIndex < pageNumber-2) {
            pagelinks.append(generateSinglePageLink(currentPageIndex+3));
            counter ++;
        }
        if (currentPageIndex == pageNumber-4) {
            pagelinks.append(generateSinglePageLink(currentPageIndex+4));
            counter ++;
        }
        if (currentPageIndex < pageNumber-4) {
            pagelinks.append("...");
            pagelinks.append(generateSinglePageLink(pageNumber));
            counter ++;
        }
        if (counter < 4 && currentPageIndex > 0) {
            pagelinks.prepend(generateSinglePageLink(currentPageIndex));
            counter ++;
        }
        if (counter < 4 && currentPageIndex > 1) {
            pagelinks.prepend(generateSinglePageLink(currentPageIndex-1));
            counter ++;
        }
        if (counter < 4 && currentPageIndex > 2) {
            pagelinks.prepend(generateSinglePageLink(currentPageIndex-2));
            counter ++;
        }
    }

    function generateSinglePageLink(index) {
        return jQuery('<span page="' + index + '">' + index + '&nbsp;</span>').click(goToPage);
    }

    function goToPage(event) {
        // set image-index on first of new page
        currentIndex = (jQuery(event.target).attr("page")-1) * pageSize;
        setImage();
    }

    function refreshImageDescription() {
        var displayIndex = parseInt(currentImageNode.attr('id').substring(5 + postfix.length)) + 1;
        jQuery(".ImageBrowserInfos" + postfix).html("Bild " + displayIndex + " von " + imgNumber);        
        jQuery(".ImageBrowserDescription" + postfix).html(currentImageNode.attr("imgDescription" + postfix));
    }

    this.setCurrentIndex = function(newIndex) {
        currentIndex = newIndex;
        setImage();
    };

    this.next = function() {
        rotateForward();
    };

    var currentPageIndex = 0;
    var imgNumber = jQuery("div[bigImage" + postfix + "]").length;
    var pageNumber = Math.ceil(imgNumber / pageSize);
    var currentIndex = 0;
    var currentImageNode = jQuery("#thumb" + postfix + "0");
    var imageBrowserBigImage = jQuery(".ImageBrowserBigImage" + postfix);
    var hoverActivated = true;
    var imageArray = Array();
    jQuery(".ImageThumb" + postfix).mouseover(onSmallImageEventHover);
    jQuery(".ImageThumb" + postfix).click(onSmallImageEventClick);
    jQuery(".ImageThumb" + postfix).addClass("notSelectedImage");
    jQuery(".ImageListPage" + postfix).hide();
    jQuery("#thumb_page" + postfix + "0").show();
    currentImageNode.removeClass("notSelectedImage");
    currentImageNode.addClass("selectedImage");
    jQuery("#rotateBackwardButton" + postfix).click(rotateBackward);
    jQuery("#rotateForwardButton" + postfix).click(rotateForward);

    if (displayPagingLinks) {
        jQuery("#ImageBrowserPagingPrevButton" + postfix).click(previousPage);
        jQuery("#ImageBrowserPagingNextButton" + postfix).click(nextPage);
        refreshPagingLinks();
    }

//    refreshPagingInfos();
    refreshImageDescription();
}

//Google Analytics - County tracking
function gaCountyPageView(data){
    _gaq.push(['_setCustomVar',1,data,3]);
    _gaq.push(['_trackPageview',data]);
}

function mcVersicherung(){
    jQuery(document).ready(function() {
        jQuery('#mcVersicherung a').attr('target', '_blank');
    });
}

function hideErrorMessage(inputFieldNode, unbind) {
    jQuery(inputFieldNode).parent().removeClass('field_value_error');
    jQuery(inputFieldNode).removeClass('field_value_error');
    jQuery(inputFieldNode).nextAll('span.error').hide();
    if(unbind){
        jQuery(inputFieldNode).unbind('focusin');
        jQuery(inputFieldNode).unbind('focusout');
    }
}

function hideErrorMessageWithName(inputFieldNode, unbind) {
    var inputField = jQuery(inputFieldNode);
    var id = inputField.attr("name");
    var errorBox = inputField.parents(".field_value_error");
    errorBox.find('span.error[id="'+id+'.errors"]').remove();
    if (errorBox.find('span.error').length == 0) {
        errorBox.removeClass('field_value_error');
    }
    if(unbind){
        inputField.unbind('focusin');
        inputField.unbind('focusout');
    }
}

/**
 * moves the videoLayer (the small triangle over the advert-main-image, that shows that the advert has a video)
 * upward if the image is smaller than the surrounding image-container. the videoLayer usually lies on the bottom
 * of the image-container.
 *
 * @param adId
 */
function checkVideoImageSize(adId){
    var adImage = jQuery('#'+adId);
    var adImageContainer = adImage.parent();
    var videoLayer = jQuery('#'+adId+'_video');

    var containerHeight = adImageContainer.height();
    var imageHeight = jQuery('#'+adId).height();
    var layerHeight = videoLayer.height();

    var heightDiv = containerHeight - imageHeight;
    if(heightDiv <= layerHeight){
        videoLayer.css('margin-bottom',heightDiv + 'px');
    }
}

function initialiseJCarousel(enabled, size, start, selectionId, querystring, suppressfill) {

    var mycarousel_itemList = new Array(size);
    
    function mycarousel_itemLoadCallback(carousel, state) {

        jQuery("#log").append("<div>mycarousel_itemLoadCallback " + carousel.first + " - " + carousel.last + "</div>")
        for (var i = carousel.first; i <= carousel.last; i++) {
            if (state != 'init' && carousel.has(i)) {
                continue;
            }
            addItemHTML(carousel, i)
        }
    };

    function addItemHTML(carousel, index) {
        var i = (index - 1 - start) % size;
        if (i < 0) {
            i += size;
        }
        if (!enabled && index > size) {
            return
        }

        var item = mycarousel_itemList[i];

        if (item == null) {
            jQuery("#log").append("<div>Dont found " + index + " = " + i + "</div>");
            jQuery.get( "/bap/search/carousel/ajax",
            {selectionId: selectionId, querystring: querystring, suppressfill:suppressfill, start: i},
                    function(data) {
                        var html = jQuery(data);
                        var li = jQuery('li', html);
                        parseItems(li);

                        var newitem = mycarousel_itemList[i];
                        if (newitem == null) {
                            jQuery("#log").append("<div>No Ajax response " + index + " = " + i + "</div>");
                        } else {
                            jQuery("#log").append("<div>Ajax response " + index + " = " + i + "</div>");
                            carousel.add(index, newitem);
                        }
                    })
            return;
        }
        jQuery("#log").append("<div>Append " + index + " = " + i + "</div>");
        carousel.add(index, item);
    };

    function parseItems(children) {
        for (var i=0; i< children.size(); i++) {
            var item = children[i];
            var index = jQuery(item).attr("index");
            mycarousel_itemList[index] = item;
        }
    }
    jQuery(document).ready(function() {
        var ul = jQuery('.topadscarousel');

        var children = ul.children();
        parseItems(children);
        children.detach();
        var wrap = enabled ? "circular" : null;
        ul.jcarousel({
            wrap: wrap,
            itemLoadCallback: {onBeforeAnimation: mycarousel_itemLoadCallback},
            size: size,
            animation: 2000,
            scroll: 5
        });
//        jQuery("#log").append("<div>Init jcarousel "+ ul.length +" size: "+size+" start:"+start+"</div>")
    });
};

