/**
 * UI functions
 */

// toggle edit form
$(document).ready(function(){
  // button for edit factfile, about_me data
  $(".button-edit").click(function(){
    toggleEditForm(this);
    return false;
  });

  $(".button-cancel").click(function(){
    toggleEditForm(this);
    return false;
  });

  $("input.submit-cancel").click(function(){
    var btn = $(this).parents(".edit-form").prev(".tabular-info").find(".button-cancel");
    toggleEditForm(btn);
    return false;
  });

  // make listrows clickable
  $(".list-row,.list-row-startpage").click(function() {
    var lnk = $(this).find("a.listrow-globallink");

    // if element exists
    if (lnk.length) {
      document.location.href = lnk.attr("href");
    }

  });

  // suckerfish popup menu (for IE)
  $(".popupmenu li")
  .hover(
    function(){
      $(this).addClass('active');
    },
    function() {
      $(this).removeClass('active');
    }
  );

  // toggle panels
  $('.toggle-trigger').click(function() {
    var panel  = $(this).parents('.toggle-panel');
    var detail = panel.children('.toggle-detail');

    // hide other toggle-details if this is child of a .toggle-panels-exclusive
    var exclusive = $(this).parents('.toggle-panels-exclusive');

    if (exclusive != null)
    {
      exclusive.find('.toggle-detail').not(detail).hide();
    }

    detail.toggle();

    // return false for "a" tags
    if (this.tagName == 'A')
    {
      return false;
    }
  });

  // open links marked with rel="popup" in a popup-window
  $('a[rel=popup]').click(function(e) {
    var t = e ? e.target : null;
    if( t && t.rel && t.rel == "popup" && t.href ) {
      e.preventDefault();
      var popup=window.open(t.href, 'popup', 'width=990,height=500,left=100,top=100,scrollbars=yes,status=no,toolbar=no');
    } else {
      return;
    }
  });
  
  //initialize help tooltips
  $('span[class="sprite-icon help"]').qtip({
  		   content: { text: false },
  		   show: 'mouseover',
  		   hide: 'mouseout',
  		   position: {
  			   corner: {
  			         target: 'bottomMiddle',
  			         tooltip: 'topMiddle'
  		   	   },
  			   adjust: {
  			   		x: 0,
  			   		y: 10
  			   }
  		   },
  		   style: { 
  		      name: 'light',
  		      border: {
  		         width: 1,
  		         color: '#666666'
  		      }
  		   }
  					   

  		});
  	
  $('span[class="sprite-icon partner-favourite"], span[class="sprite-icon partner-not-favourite"]').each(function(){
  		 // No setting of a tooltip if there is no title
  		 if(!$(this).attr('title')){ return; }

  		 $(this).qtip({
  		   content: { text: false },
  		   show: 'mouseover',
  		   hide: 'mouseout',
  		   position: {
  			   corner: {
  			         target: 'bottomMiddle',
  			         tooltip: 'topMiddle'
  		   	   },
  			   adjust: {
  			   		x: 0,
  			   		y: 10
  			   }
  		   },		   
  		
  		   style: { 
  		   	  width: {
  			     min:130
  		   	  },
  		   	  textAlign: 'center',
  		      border: {
  		         width: 1,
  		         color: '#666666'
  		      }		   
  		   }
  		});
  	});
  
  // payment product boxes
  var selectedradio = $("input:radio:checked");
  var gradient = selectedradio.parents(".box-gradient");
  $(".box-gradient").removeClass("box-gradient-selected");
  gradient.addClass("box-gradient-selected");

  $(".product-box").click(function(){
    $(this).find(":radio").attr('checked', 'checked');
    var gradient = $(this).find(".box-gradient");
    handle_payment_product_boxes(gradient);
  });
  
  $(".product-box").mouseover(function(){
    var gradient = $(this).find(".box-gradient");
    handle_payment_product_boxes(gradient);
  });
  
  $(".product-box").mouseout(function(){
	var selectedradio = $("input:radio:checked");
	var gradient = selectedradio.parents(".box-gradient");
	handle_payment_product_boxes(gradient);
  });  
  
  // gender radio button by register form
  $('.radio-gender').click(function() {
	  
	//TODO: Find a better solution (Temporary solution for landing pages)
	if ( $('a[name=landing_page]').length != 0 ) {
		return;
	}
    var radio = $(this);
    if ('man' == radio.val()) {
      $('#detail_wanted_gender_woman').attr('checked', 'checked');
    } else {
      $('#detail_wanted_gender_man').attr('checked', 'checked');
    }
  });
  
  // send login form
  $('#login-form-submit-button').click(function() {
	$('#login_data').submit();
    return false;
  });

  // bind click event to action_ui_dialog link
  $('.action_ui_dialog').live('click', function(){
		startdialog(this.href, this.title);
		return false;
  });
  
  // set language into login form
  var coockie_lang = getCookie("lang");
  if (coockie_lang != null && coockie_lang != "") {
	$('input[name=systemlanguage]').val(coockie_lang);
  }

});

function showSlider(name) {

	if ($("#" + name + "_div .search-module-wrapper .slider-wrapper").is(":hidden")) {
		$("#" + name + "_div .search-module-wrapper .slider-wrapper").show("fast");
	} 
}

function hideSlider(name) {
	if (!$("#" + name + "_div .search-module-wrapper .slider-wrapper").is(":hidden")) {
		$("#" + name + "_div .search-module-wrapper .slider-wrapper").hide("fast");
	}
}

/**
 * Shows/hides the edit form for profile.
 */
function toggleEditForm(btn) {
  var header    = $(btn).parents(".tabular-info");
  var headColL  = header.children(".float-left");
  var headColR  = header.children(".float-right");
  var editFrm   = header.next(".edit-form");
  var isHidden  = editFrm.is(':hidden');
  var btnEdit   = $(btn).parent().children(".button-edit");
  var btnCancel = $(btn).parent().children(".button-cancel");
  var curValue  = header.find(".tabular-info-value");

  if (isHidden) {
    header.addClass("box-bordered edit-form-header");
    headColL.toggleClass("column-40");
    headColR.toggleClass("column-60");
    editFrm.show();
    btnEdit.hide();
    curValue.hide();
  } else {
    headColL.toggleClass("column-40");
    headColR.toggleClass("column-60");
    editFrm.hide();
    btnEdit.show();
    curValue.show();
    header.removeClass("box-bordered edit-form-header");
  }
};

function parseAjaxError(data) {
	
	$("errors", data).text()
	
}


/**
 * Shows error-/success-message from ajax submit.
 *
 * @param data string Result of ajax submit (response from server on success)
 *
 * @return string Either "ok" or "error"
 */
function toggleAjaxResultMessage(data) {

  var status = $("status", data).text();

  
  $('.form-field-error').each(function() {
	  $(this).removeClass('form-field-error');
  });
  
  if (status == 'ok') {
    // hide previous errors message if any
    $("#box-error").hide();
    $("#box-success").show('fast');
  } else {
    // hide previous success message if any
    $("#box-success").hide();
    
    var errorData = $("errors", data);
    var errorMsg = '';
    
    if ($("error", errorData).length > 0) {
    	$("error", errorData).each(function() {
    		error = $(this);
    		field = $('field', error).text();
    		$('.' + $('field', error).text()).each(function() {
    			$(this).addClass('form-field-error');
    		});
    		if (errorMsg == '') {
    			errorMsg = $('message', error).text();
    		}
    	});
    } else {
    	var errorMsg = errorData.text();
    }    

    $("#link_new_form_errors").html(errorMsg);
    $("#box-error").show('fast');
  }

  return status;
}

/**
 * Shows error-/success-message from ajax submit.
 *
 * @param data string Result of ajax submit (response from server on success)
 *
 * @return string Either "ok" or "error"
 */
function toggleAjaxResultMessageModified(data) {

  var status = $("status", data).text();

  if (status == 'ok') {
    // hide previous errors message if any
    $("#box-error").hide();
	$("#box-success").removeClass('box-msg-warning');
	$("#box-success").addClass('box-msg-success');
    if($("message", data).text()){
    	$("#link_new_form_success").html($("message", data).text());
        $("#box-success").show('fast');
    } else {
    	$("#box-success").hide();
    }
  } else {
    // hide previous success message if any
    $("#box-success").hide();
    $("#link_new_form_errors").html($("errors", data).text());
    $("#box-error").show('fast');
  }

  return status;
}

/**
 * jQuery plugin: count characters / limit length of input and textarea fields
 *
 * Usage:
 * $(document).ready(function(){
 *   $('#field-motto').limitInputLength(120, 'span#counter-motto');
 *   $('#field-job').limitInputLength(50, 'span#counter-job');
 *   $('#field-size').limitInputLength(3, 'span#counter-size');
 * });
 *
 */
$.fn.limitInputLength = function(max, counter) {

  var txtelem = this[0];
  updateCounter();

  function updateCounter() {
    if (counter != null) {
      var rest = max - txtelem.value.length;
      if (rest < 0) {
        rest = 0;
      }
      $(counter).text(rest);
    }
  };

  function updateText() {
    if (txtelem.value.length > max) {
      txtelem.value = txtelem.value.substring(0, max);
    }
  };

  this
  .keypress(function(e) {
    if (this.value.length >= max && e.charCode != '0') {
      e.preventDefault();
    }
  })
  .keyup(function(e) {
    updateCounter();
    updateText();
  })
  ;
};

/**
 * jQuery plugin: limit input to numbers
 *
 * Usage:
 * $(document).ready(function(){
 *   $('#field-motto').limitInputToNumbers();
 * });
 *
 */
$.fn.limitInputToNumbers = function() {

  var txtelem = this[0];
  
  function updateText() {
    if (!IsNumeric(txtelem.value)) {
      txtelem.value = txtelem.value.substring(0, (txtelem.value.length - 1));
    }
  };

  this
  .keypress(function(e) {
	if (e.charCode != '0' && (e.charCode < '48' || e.charCode > '57')) {
		e.preventDefault();
	}
  })
  .keyup(function(e) {
    updateText();
  })
  ;
};

function form_submit(formId){
	
	var form = $('#' + formId);
	if(form){
		form.submit();
	}
	return false;
	
}

/*
 * change background from product box on payment-runtime.html page by click, mouseover, mouseout
 */
function handle_payment_product_boxes(gradient){
	$(".box-gradient").removeClass("box-gradient-selected");
    $(".box-gradient").removeClass("box-gradient-selected-special-wide");
    if(gradient.hasClass("box-gradient-special-wide")){
    	gradient.addClass("box-gradient-selected-special-wide");
    } else {
		gradient.addClass("box-gradient-selected");
    }
}

function initialize_slider(min_val, max_val, step_val){
    $("div.slider-scala").slider({
		min:min_val,
		max:max_val,
		steps:step_val,
		change:function(event,ui){
					//update input field
					$("input[name=search_" + $(this).attr("id") + "]").val(ui.value);
				} 
	});
	
	$("div.slider-scala").each(function(){
	$(this).slider("value", $("input[name=search_" + $(this).attr("id") + "]").val());
	});
	
	$("div.slider-scala").mouseup(function(){
		$(this).addClass("slider-scala-changed");
	});
	
}

function updateProvinces(set_to_db_data, update_map) {

	var country = $("#userdetail_country").val();

	$(".form-field-error").removeClass('form-field-error');

	if(country != 'DE'){
	
		set_to_db_data = true;
		
		$('#zipcode_zip_de').val('');

	    if (zipcodeProvinceDefHtml != '') {
	        $("#zipcode_province_select").html(zipcodeProvinceDefHtml);
	    }
	
	    if (zipcodeDistrictDefHtml != '') {
	        $("#zipcode_district_select").html(zipcodeDistrictDefHtml);
	    }
	    
	    if (zipcodeLocationDefHtml != '') {
	        $("#zipcode_location_select").html(zipcodeLocationDefHtml);
	    }
	
	    $.ajax({
	        type: "POST",
	        url: "/personal-ajax_get_provinces.html",
	        data: "country=" + encodeURIComponent($("#userdetail_country").val()),
	        async: true,
	        cache: true,
	        dataType: "xml",
	        success: function(resultMessage) {
	        
	            var status = $("status", resultMessage).text();
	            
	            var available = $("available", resultMessage).text();
	            if(available == 'yes'){
	            	provinces = 'true';
	            } else {
	            	provinces = 'false';
	            }
	            $("#provinces_set").val(provinces);
	
	            if ('ok' == status) {
	            
	                if (zipcodeProvinceDefHtml == '') {
	                    zipcodeProvinceDefHtml = $("#zipcode_province").html();
	                }
	                
	                var options = zipcodeProvinceDefHtml;
	                var selected_province = '';
	
	                if(set_to_db_data && smarty_array['zipcode_province']){
	                	selected_province = smarty_array['zipcode_province'];
	                } 
	                                        
	                $("provinces", resultMessage).children().each(
	                    function(i) {
	                        options += '<option value="' + $(this).find('title').text() + '" ';
	                        if($(this).find('title').text() == selected_province){
	                        	options += 'selected="selected" ';
	                        }
	                        options += '>' + $(this).find('title').text() + '</option>"';
	                    }
	                );
	                options += '</select>';
	                $("#zipcode_province_select").html(options);
	                updateDistricts(set_to_db_data);                 
	
	            }
	            
	            toggle_locations_data(provinces);
	            
	        }
	        
	    });
	    
	} else {
        if(smarty_array['zipcode_zip_de']){
        	$("#zipcode_zip_de").attr("value", smarty_array['zipcode_zip_de']);
        } else {
        	$("#zipcode_zip_de").attr("value", smarty_array['personal_zipcode_zip_de']);
        }
        getLocationsDE(set_to_db_data, update_map);
        toggle_locations_data('false');

	}
	
}

function updateDistricts(set_to_db_data) {

	$(".form-field-error").removeClass('form-field-error');
	
    if (zipcodeDistrictDefHtml != '') {
        $("#zipcode_district_select").html(zipcodeDistrictDefHtml);
    }
    
    if (zipcodeLocationDefHtml != '') {
        $("#zipcode_location_select").html(zipcodeLocationDefHtml);
    }

    $.ajax({
        type: "POST",
        url: "/personal-ajax_get_districts.html",
        data: "province=" + encodeURIComponent($("#zipcode_province").val()) + "&country=" + encodeURIComponent($("#userdetail_country").val()),
        async: true,
        cache: true,
        dataType: "xml",
        success: function(resultMessage) {

            var status = $("status", resultMessage).text();

            if ('ok' == status) {
            
                if (zipcodeDistrictDefHtml == '') {
                    zipcodeDistrictDefHtml = $("#zipcode_district").html();
                }
                
                var options = zipcodeDistrictDefHtml;
                var selected_district = '';
                var districts_not_exists = true;
                if(set_to_db_data && smarty_array['zipcode_district']){
                	selected_district = smarty_array['zipcode_district'];
                }
                $("districts", resultMessage).children().each(
                    function(i) {
                    	if(districts_not_exists){
                    		districts_not_exists = false;
                    	}
                        options += '<option value="' + $(this).find('title').text() + '" ';
                        if($(this).find('title').text() == selected_district){
                        	options += 'selected="selected" ';
                        }
                        options += '>' + $(this).find('title').text() + '</option>"';
                    }
                );
                options += '</select>';
                
                $("#zipcode_district_select").html(options);
                if(districts_not_exists){
                	$("#zipcode_district").attr('disabled', true);
                }
                updateLocations(set_to_db_data);
            }
            
        }
        
    });

}

function updateLocations(set_to_db_data) {

	$(".form-field-error").removeClass('form-field-error');
	
    if (zipcodeLocationDefHtml != '') {
        $("#zipcode_location_select").html(zipcodeLocationDefHtml);
    }
    
    if($("#zipcode_province").val()){
    	var province_val = $("#zipcode_province").val();
    } else {
    	var province_val = null;
    }
    
    $.ajax({
        type: "POST",
        url: "/personal-ajax_get_locations.html",
        data: "country=" + encodeURIComponent($("#userdetail_country").val()) + "&province=" + encodeURIComponent(province_val) + "&district=" + encodeURIComponent($("#zipcode_district").val()),
        async: true,
        cache: true,
        dataType: "xml",
        success: function(resultMessage) {

            var status = $("status", resultMessage).text();

            if ('ok' == status) {
            
                if (zipcodeLocationDefHtml == '') {
                    zipcodeLocationDefHtml = $("#zipcode_location").html();
                }
                
                var options = zipcodeLocationDefHtml;
                var selected_location = '';
                var location_not_exists = true;
                if(set_to_db_data && smarty_array['zipcode_location']){
                	selected_location = smarty_array['zipcode_location'];
                }
                $("locations", resultMessage).children().each(
                    function(i) {
                    	if(location_not_exists){
                    		location_not_exists = false;
                    	}
                        options += '<option value="' + $(this).find('zipcode_id').text() + '" ';
                        if($(this).find('zipcode_id').text() == selected_location){
                        	options += 'selected="selected" ';
                        }
                        options += '>' + $(this).find('title').text() + '</option>"';
                    }
                );
                options += '</select>';
                $("#zipcode_location_select").html(options);
                if(location_not_exists){
                	$("#zipcode_location").attr('disabled', true);
                }
            }
        }
    });
    
}

function getLocationsDE(params, update_map){

	$(".form-field-error").removeClass('form-field-error');
	
	var options = zipcodeFoundLocationDefHtml;

	if(params == true){
		// new data from db
		if($("#zipcode_zip_de").val().length >= 5){
		
		    $.ajax({
		        //type: "GET",
		        type: "POST",
		        url: "/personal-ajax_get_locations.html",
		        async: true,
		        data: "country=" + encodeURIComponent($("#userdetail_country").val()) + "&zip=" + encodeURIComponent($("#zipcode_zip_de").val()) + "&id=" + encodeURIComponent(smarty_array['zipcode_location']),
		        cache: true,
		        dataType: "xml",
		        success: function(resultMessage) {
		        
		            var status = $("status", resultMessage).text();
		
		            if ('ok' == status) {

		                if($("locations", resultMessage).children().length > 1){
	
		                	options = zipcodeNotFoundLocationDefHtml;
		                	
							var selected_location = '';
			                if(smarty_array['zipcode_location']){
			                	selected_location = smarty_array['zipcode_location'];
			                } else {
			                	selected_location = smarty_array['personal_about_me_zipcode_id'];
			                }
			                $("locations", resultMessage).children().each(
			                    function(i) {
			                        options += '<option value="' + $(this).find('zipcode_id').text() + '" ';
			                        if($(this).find('zipcode_id').text() == selected_location){
			                        	options += 'selected="selected" ';
			                        }
			                        options += '>' + $(this).find('title').text() + '</option>"';
			                    }
			                );
			                options += '</select>';
			                options += '<input type="hidden" value="" name="zipcode_location_de">';
		                } else {
	
		                	$("locations", resultMessage).children().each(
			                    function(i) {
			                        options += '<input type="hidden" value="' + $(this).find('zipcode_id').text() + '" name="zipcode_id" id="zipcode_location">';
			                        options += '<input type="hidden" value="' + $(this).find('title').text() + '" name="zipcode_location_de" id="zipcode_location_de">';
			                        options += '<div class="float-left zipcode_location_de_div">' + $(this).find('title').text() + '</div>';
			                    }
			                );
	
		                }
		                $("#zipcode_location_de_select").html(options);

		            } else {
					    // hide previous error and success message if any
					    $("#zipcode_location_de_select").html($("errors", resultMessage).text());
				   	}
		            $("#zipcode_location_de_select").show();
					$("#zipcode_location_de_div").show();
		        }
		    });
	    } else {
	    	$("#zipcode_location").html("");
	    	$("#zipcode_location_de").html("");
	    	$("#zipcode_location_de_select").html("");
	    }
    } else {
  
        //options += '<input type="hidden" value="' + (($("#userdetail_country").val()) ? smarty_array['zipcode_location'] : '') + '" name="zipcode_id" id="zipcode_location">';
    	//options += '<input type="hidden" value="' + (($("#userdetail_country").val()) ? smarty_array['zipcode_location_de'] : '') + '" name="zipcode_location_de" id="zipcode_location_de">';
    	options += '<input type="hidden" value="' + ((smarty_array['zipcode_zip_de']) ? smarty_array['zipcode_location'] : '') + '" name="zipcode_id" id="zipcode_location">';
        options += '<input type="hidden" value="' + ((smarty_array['zipcode_zip_de']) ? smarty_array['zipcode_location_de'] : '') + '" name="zipcode_location_de" id="zipcode_location_de">';
        options += '<div class="float-left zipcode_location_de_div">' + smarty_array['zipcode_location_de'] + '</div>';
	    $("#zipcode_location_de_select").html(options);
	    $("#zipcode_location_de_div").show();
    }
    
}

function toggle_locations_data(param) {

	var country = $("#userdetail_country").val();
	if( country != 'DE' ){
		
		$("#zipcode_zip_de").attr("value", "");
		$("#zipcode_location_de_select").html("");
		$("#zipcode_location_de_div").hide();

		$("#locations_data_de").hide();
	
		if(param == 'true'){
			
			$("#locations_data").show();
			
			updateSearchDistanceElements(true);

			
		} else {
		
			$("#zipcode_province_select").html("");
			$("#zipcode_district_select").html("");
			$("#zipcode_location_select").html("");
			$("#locations_data").hide();
			
			updateSearchDistanceElements(false);

		}
		
	} else {
		
		smarty_array['provinces_set'] = 'false';

		$("#zipcode_province_select").html("");
		$("#zipcode_district_select").html("");
		$("#zipcode_location_select").html("");
		$("#locations_data").hide();
		
		$('#zipcode_zip_de').attr("value", smarty_array['zipcode_zip_de']);
		$("#locations_data_de").show();
		
		updateSearchDistanceElements(true);

	}

}

function IsNumeric(sText){
   var ValidChars = "0123456789";
   var IsNumber=true;
   var Char;

   for (i = 0; i < sText.length && IsNumber == true; i++) { 
      Char = sText.charAt(i); 
      if (ValidChars.indexOf(Char) == -1) {
         IsNumber = false;
      }
   }
   return IsNumber;
   
}

function resetReligionMuslims() {
	 $('#edit_religion_muslim').hide();
	 
	 $('#religion_is_muslim').attr('checked', false);
// commented out at 24.01.2012 after upgrade on jquery 1.7.1
//	 $('input[name=factfile_religion]').each(function() {
//		 if ($(this).attr('value') > 50) {
//			$(this).attr('checked', false);
//		 }
//	 });
	
}

function updateCheckboxes(cbxObj, name) {
    var clickedCbx = $(cbxObj);
    var checked    = cbxObj.checked;
    var cbxes      = $('input[name=' + name + ']:checked');

    if (clickedCbx.val() == 0 && checked == true) {
      cbxes.each(function() {
        if ($(this).val() != clickedCbx.val()) {
          this.checked = false;
        }
      });
      $('#' + getOtherTextFieldname(name)).val('');
    } else {
      $('#field_' + name + '_0').removeAttr('checked');
    }
  }
  
function updateCheckboxesSearch(cbxObj, name) {
	var clickedCbx = $(cbxObj);
	var checked    = cbxObj.checked;
	var cbxes      = $('input:checkbox[name^=' + name + ']');
	
	if (clickedCbx.val() == 0 || clickedCbx.val() == "all") {

		hideSlider(name);
		cbxes.each(function() {
			if ($(this).val() != clickedCbx.val()) {
				this.checked = false;
				if( checked == true ){
					$('label[for=' + $(this).attr('id') + ']').addClass('color-disabled');
				} else {
					$('label[for=' + $(this).attr('id') + ']').removeClass('color-disabled');
				}
			}
		});
	} else {
		showSlider(name);
		if( checked == true ){
			cbxes.each(function() {
				$('label[for=' + $(this).attr('id') + ']').removeClass('color-disabled');
			});
			$('input:checkbox[name=' + name + '_0]').removeAttr('checked');
			$('input:checkbox[name=' + name + '_all]').removeAttr('checked');
		}
		
	}	

	if(name == "search_family" && clickedCbx.val() != "all") {
		var allChecked = true;
		cbxes.each(function() {
			if($(this).val() != "all" && !this.checked) {
				allChecked = false;
			}
		});
		
		if(allChecked) {
			cbxes.each(function() {
				this.checked = false;
				$('label[for=' + $(this).attr('id') + ']').addClass('color-disabled');
			});
			$('input:checkbox[name=search_family_all]').attr('checked', 'checked');
			$('label[for=field_family_all]').removeClass('color-disabled');
		}
	} 
	return true;
}

function updateSearchDistanceElements(activate){
	var search_distance_input = $('input[name="search_distance"]');
	var search_distance_select = $('select[name="search_distance"]');
	var s_html = '';
	if(activate){
		if(search_distance_input){
			$('#div_searchdistance_50').show();
			$('#div_searchdistance_100').show();
			$('#div_searchdistance_200').show();
			$('#div_searchdistance_500').show();
		}
		if(search_distance_select && typeof(search_distance_array) !== 'undefined' && search_distance_array !== null){
			// needed declared search_distance_array
			var select_value = search_distance_select.val();
			for(var prop in search_distance_array){
				s_html += '<option value="' + prop + '" label="' + search_distance_array[prop] + '"';
				if(prop == select_value){
					s_html += ' selected="selected"';
				}
				s_html += '>' + search_distance_array[prop] + '</option>';
			}
			search_distance_select.html(s_html);
		}
	} else {
		if(search_distance_input){
			$('#div_searchdistance_50').hide();
			$('#field_searchdistance_50').attr('checked', false);
			$('#div_searchdistance_100').hide();
			$('#field_searchdistance_100').attr('checked', false);
			$('#div_searchdistance_200').hide();
			$('#field_searchdistance_200').attr('checked', false);
			$('#div_searchdistance_500').hide();
			$('#field_searchdistance_500').attr('checked', false);
			toggleSelectedClass($('#field_searchdistance_500'));
		}
		if(search_distance_select && typeof(search_distance_array) !== 'undefined' && search_distance_array !== null){
			// needed declared search_distance_array
			var select_value = search_distance_select.val();
			for(var prop in search_distance_array){
				if(prop == "yes" || prop == "no"){
					s_html += '<option value="' + prop + '" label="' + search_distance_array[prop] + '"';
					if(prop == select_value){
						s_html += ' selected="selected"';
					}
					s_html += '>' + search_distance_array[prop] + '</option>';
				}
			}
			search_distance_select.html(s_html);
		}
	}
}

function updateCheckboxesTestPersonalData(cbxObj, name, klicked) {
	var clickedCbx = $(cbxObj);
	var checked    = cbxObj.checked;
	var cbxes      = $('input[name^=' + name + ']:checked');

	if (clickedCbx.val() == 0 && checked == true) {
		
		klicked = klicked + 2;
		
		cbxes.each(function() {
			if ($(this).val() != clickedCbx.val()) {
				this.checked = false;
			}
		});
		$('#' + name + '_not_approved').val('');
		$('#' + name + '_not_approved').limitInputLength(100, 'span#counter-' + name + '_not_approved');
		toggleChangedInputClass($('#' + name + '_not_approved'));
		$('#edit-' + name + '_not_approved').addClass('initial-hidden');
		
	} else {
		if (clickedCbx.val() == 99) {
			// Checkbox 'Other' klicked 
			if(checked == true){
				$('#edit-' + name + '_not_approved').removeClass('initial-hidden');
			} else {
				$('#' + name + '_not_approved').val('');
				$('#' + name + '_not_approved').limitInputLength(100, 'span#counter-' + name + '_not_approved');
				toggleChangedInputClass($('#' + name + '_not_approved'));
				$('#edit-' + name + '_not_approved').addClass('initial-hidden');				
			}
		}
		$('#field_' + name + '_0').removeAttr('checked');
		
		cbxes.each(function() {
			if ($(this).val() == '99') {
				klicked++;
			}
		});
	}
	
	if (cbxes.size() > klicked) {
		return false;
	} else {
		toggleClickedInputGroupClass('field_' + name, null, klicked);
		return true;
	}
}

function toggleSelectedClass(cbxObj) {
  	var parent_div = $(cbxObj).parents('div.odd-row');
  	parent_div.removeClass('odd-row');
  	parent_div.addClass('green-row');
  	
  	$('div.green-row').each(function(){
  		var radiobtn = $(this).find('input:radio:first, input:checkbox:first');
  		if(radiobtn[0] && radiobtn[0].checked == false){
  			$(this).removeClass('green-row');
  			$(this).addClass('odd-row');
  		}
  	});
}

function toggleClickedInputGroupClass(group, cbxObj, klicked) {
	if(group == 'field_religion'){
		var cbxes = $('input[id^=' + group + '], input[id="religion_is_muslim"]');
		
	  	if(cbxes.length != 0){
	  		var cbxes_checked = $('input[id^=' + group + ']:checked, input[id="religion_is_muslim"]:checked');
	  		var clicked_value = 0;
	  		if(typeof(cbxObj) !== 'undefined' && cbxObj !== null){
	  			clicked_value = $(cbxObj).val();
	  		}
	  		
	  		cbxes.each(function(){
	  			if(this.checked == true){
	  				$(this).parents('div.odd-row, div.checked-row').removeClass('odd-row checked-row').addClass('green-row');
	  			} else {
	  				if(cbxes_checked.length == 0){
	  					$(this).parents('div.checked-row, div.green-row').removeClass('checked-row green-row').addClass('odd-row');
	  				} else {
	  					if(clicked_value == 1 && $(this).val() > 50){
	  						$(this).parents('div.checked-row, div.green-row').removeClass('checked-row green-row').addClass('odd-row');
	  					} else {
	  						$(this).parents('div.odd-row, div.green-row').removeClass('odd-row green-row').addClass('checked-row');
	  					}
	  				}
	  			}
	  			
	  		});
	  	}
	} else {
		var cbxes = $('input[id^=' + group + ']');
		
		if(typeof(klicked) === 'undefined' || klicked == null) {
			klicked = 1;
		}

		if(cbxes.length != 0){
	  		var cbxes_checked = $('input[id^=' + group + ']:checked');
	  		  	
	  		cbxes.each(function(){
	  			if(this.checked == true){
	  				$(this).parents('div.odd-row, div.checked-row').removeClass('odd-row checked-row').addClass('green-row');
	  			} else {
	  				if(cbxes_checked.length < klicked){
	  					$(this).parents('div.checked-row, div.green-row').removeClass('checked-row green-row').addClass('odd-row');
	  				} else {
	  					$(this).parents('div.odd-row, div.green-row').removeClass('odd-row green-row').addClass('checked-row');
	  				}
	  			}
	  			
	  		});
	  	}
	}
}

function toggleClickedInputGroupPersonalityTestClass(group, klicked) {
	var cbxes = $('input[id*=' + group + ']');

	if(typeof(klicked) === 'undefined' || klicked == null) {
		klicked = 1;
	}

	if(cbxes.length != 0){
  		var cbxes_checked = $('input[id*=' + group + ']:checked');
  		  	
  		cbxes.each(function(){
  			if(this.checked == true){
  				$(this).parents('div.odd-row, div.even-row, div.checked-row').removeClass('odd-row checked-row even-row').addClass('green-row');
  			} else {
  				if(cbxes_checked.length >= klicked) {
  					$(this).parents('div.odd-row, div.even-row, div.green-row').removeClass('odd-row even-row green-row').addClass('checked-row');
  				} else {
  					if($(this).val() % 2 == 0){
  						$(this).parents('div.checked-row, div.green-row').removeClass('checked-row green-row').addClass('even-row');
  					} else {
  						$(this).parents('div.checked-row, div.green-row').removeClass('checked-row green-row').addClass('odd-row');
  					}
  				}
  			}
  			
  		});
  	}
}

function toggleChangedInputClass(inputObj) {
  	var parent_div = $(inputObj).parents('div.box-bordered');
  	var value = $(inputObj).val();
  	if(!value || value == 0 || value == ''){
  		parent_div.removeClass('green-row checked-row').addClass('odd-row');
  	} else {
  		parent_div.removeClass('odd-row checked-row').addClass('green-row');
  	}
}

function toggleChangedChildInhomeInputGroupClass(inputObj) {
	// used only $('#factfile_numb_child')
  	var parent_div = $(inputObj).parents('div.box-bordered');
  	var value = $(inputObj).val();

  	var value_numbchild = $('#factfile_numb_child').val();
  	
  	if(!value || value == 0 || value == ''){
  		if(!value_numbchild || value_numbchild == 0 || value_numbchild == ''){
  			parent_div.removeClass('green-row checked-row').addClass('odd-row');
  		} else {
  			parent_div.removeClass('green-row odd-row').addClass('checked-row');
  		}
  	} else {
  		parent_div.removeClass('odd-row checked-row').addClass('green-row');
  	}
}

function toggleChangedInputGroupClass(inputObj) {
	// used only $('#factfile_numb_child')
  	var parent_div = $(inputObj).parents('div.box-bordered');
  	var value = $(inputObj).val();
  	
  	var parent_div_inhome = $('#factfile_child_inhome').parents('div.box-bordered');
  	var value_inhome = $('#factfile_child_inhome').val();
  	
  	if(!value || value == 0 || value == ''){
  		parent_div.removeClass('green-row checked-row').addClass('odd-row');
  		if(!value_inhome || value_inhome == 0 || value_inhome == ''){
  			parent_div_inhome.removeClass('green-row checked-row').addClass('odd-row');
  		} else {
  			parent_div_inhome.removeClass('odd-row checked-row').addClass('green-row');
  		}
  	} else {
  		parent_div.removeClass('odd-row checked-row').addClass('green-row');
  		if(!value_inhome || value_inhome == 0 || value_inhome == ''){
  			parent_div_inhome.removeClass('green-row odd-row').addClass('checked-row');
  		} else {
  			parent_div_inhome.removeClass('odd-row checked-row').addClass('green-row');
  		}
  	}
}

function toggleChangedSelectClass(selectObj) {
  	var parent_div = $(selectObj).parents('div.register-test-content');
  	var value = $(selectObj).val();
  	if(value && value != 'null' && value != '' && value != 0){
  		parent_div.addClass('green-row');
  	} else {
  	  	parent_div.removeClass('green-row');
  	}
}

function toggleChangedSelectGroupClass(selectObj, group) {
  	var parent_div = $(selectObj).parents('div.register-test-content');
  	var all_selected = true;
  	if (typeof(group) !== 'undefined' && group !== null){
  		$('select[id^=' + group + ']').each(function(){
  			var value = $(this).val();
  			if(!value || value == 'null' || value == '' || value == 0){
  				all_selected = false;
  		  	}
  		});
  	}
  	if(all_selected){
  		parent_div.addClass('green-row');
  	} else {
  	  	parent_div.removeClass('green-row');
  	}
}

function popup_img_link(url, width, height, name, scrollbars, dependent, resizable) {

    var left = (screen.width / 2) - width / 2;
    var top = (screen.height / 2) - height / 2;
    mypopup = window.open(url, name, "left="+left+",top="+top+",width="+width+",height="+height+",dependent=" + ((dependent) ? "yes" : "no") + ",location=no,menubar=no,resizable=" + ((resizable) ? "yes" : "no") + ",scrollbars=" + ((scrollbars) ? "yes" : "no") + ",status=no,toolbar=no");
    mypopup.focus();
    return;

}

/**
 * function for start js popup window, need in DOM div element with id = "action_ui"
 * 
 * @param url
 * @param title
 * @param width
 * @returns {Boolean}
 */
function startdialog(url, title, width){
	var newWidth = typeof(width) != 'undefined' ? width : 580;		
	var	newLeft = 0;
	var newTop = 20;
	var newHeight = "auto"; 
	var newLeft = Math.floor(parseInt($(window).width() / 2) - parseInt(newWidth) / 2);
	if($('#action_ui').dialog( "isOpen" )){
		$('#action_ui').dialog("close");
	}
	
	var localPleaseWaitString = 'Please wait...';
	
	if(typeof(pleaseWaitString) != 'undefined' && pleaseWaitString != null) {
		localPleaseWaitString = pleaseWaitString;
	}
	
	$('#action_ui').dialog({modal: true, 
						minHeight: 100, 
						height: newHeight, 
						width: newWidth, 
						title: title, 
						resizable:false, 
						draggable:false, 
						position:[newLeft,newTop],
						open: function () { 
							if ($("#ajax-loader-dialog").length <= 0){
								$('#action_ui').html("");
								$('#action_ui').append('<div id="ajax-loader-dialog" class="box-padding initial-hidden">');
								$('#ajax-loader-dialog').append('<div class="form-row">');
								$('#ajax-loader-dialog .form-row').append('<div class="float-left box-margin"><img src="/images/ajax-loader.gif"></img></div><div class="float-left box-margin column-80">' + localPleaseWaitString + '</div>');

							}
							$('#ajax-loader-dialog').show();
							$('#action_ui').load(url, function() {});
							$('#action_ui').css('height', '100%');
						}
	});


    return false;
}


function closeDialog(dialogType){
	switch(dialogType) {
		case "smile":case "runtime":case "remove_partner":case "report_message":case "comment":case "delete_message":case "photo_samples":case "terms":case "photo_gallery":case "please_wait":case "photo_request_runtime":case "photo_request_upload_photo":
			$('.ui-widget-overlay').click(function() {
				$("#action_ui").dialog("close");
				return false;
		 	});
			break;
		case "flood":
			break;
	}
}

function get_occupations_list(){
	if(!isSetOccupationsList) {
		$.ajax({ 
	    type: "POST", 
	    url: "/personal-ajax_get_occupations_list.html", 
	    async: true,
	    cache: false,
	    dataType: "xml", 
	    success: function(resultMessage) {
	
	    	var status = $("status", resultMessage).text();
		      
		      if(status == 'ok') {
		    	  isSetOccupationsList = true;
		    	  var data = $("occupations_list", resultMessage).text().split(",");
		    	  $("#factfile_other_occupation").autocomplete({
		    		  source:data,
		    		  minLength:3,
		    		  delay:0
		    		});
		    	  $(".ui-widget-content").css({"background-color":"#ffffff","border":"1px solid #CCCCCC","width":"210px"});
		    	  $.ui.autocomplete.prototype._renderItem = function (ul, item) {
		    	      item.label = item.label.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + $.ui.autocomplete.escapeRegex(this.term) + ")(?![^<>]*>)(?![^&;]+;)", "gi"), "<strong>$1</strong>");
		    	      return $("<li></li>")
		    	              .data("item.autocomplete", item)
		    	              .append("<a style='color:#333333'>" + item.label + "</a>")
		    	              .appendTo(ul);
		    	  };
		      }
		
		   	}
		});
	}
	return false;

}

function setCookie(c_name, value, exdays, cookie_domain, path)
{
	var exdate = new Date();
	exdate.setDate(exdate.getDate() + exdays);
	var c_value = escape(value) + 
								((exdays==null) ? "" : "; expires="+exdate.toUTCString()) +
								((path == null) ? "; path=/" : "; path=" + path) +
								((cookie_domain == null) ? "" : "; domain=" + cookie_domain);
	document.cookie = c_name + "=" + c_value;
}

function getCookie(c_name)
{
	var i,x,y,ARRcookies=document.cookie.split(";");
	for (i=0;i<ARRcookies.length;i++)
	{
		x=ARRcookies[i].substr(0,ARRcookies[i].indexOf("="));
		y=ARRcookies[i].substr(ARRcookies[i].indexOf("=")+1);
		x=x.replace(/^\s+|\s+$/g,"");
		if (x==c_name)
		{
		return unescape(y);
		}
	}
}

function getOtherTextFieldname (field) {
	switch (field) {
		case "factfile_lang":
			return "factfile_other_lang";
		case "leisure_interested":
			return "leisure_other_interested";
		case "leisure_sportparticipate":
			return "leisure_other_sportparticipate";
		case "leisure_pet":
			return "leisure_other_pet";
		case "leisure_instruments":
			return "leisure_other_instruments";
		case "leisure_music":
			return "leisure_other_music";
		case "leisure_movies":
			return "leisure_other_movies";
		case "leisure_books":
			return "leisure_other_books";
		default:
			return field;
	}
}

function getListDelimiter (field) {
	switch (field) {
		case "factfile_relationship":
			return " ";
		default:
			return ", ";
	}
}

/**
 * Post factfile, about_me, leisure data form field per ajax
 *
 * @param param         string Name of the parameter to post per ajax
 * @param type          string Type of the field that is posted (radio, checkbox, text)
 * @param button        object The submit-button that was clicked
 * @param updateSpan    string The id of the span that has to be updated with the new values.
 *
 * @return false
 */
function ajaxPostFieldFormPersonalData(param, type, button, updateSpan) {

	var approve_value = "";
	var updateValue = "";
	var dataString;
	var empty = false;
	updateSpan = $("#" + updateSpan);

	switch (type) {

    	// factfile_qualification, factfile_title, factfile_children, factfile_smoker, 
    	// factfile_alcohol, factfile_religion, factfile_jobposition, factfile_ethnicity,
		// about_me_body
		// leisure_sport
    	case 'radio':
      		var elem = $("input[name=" + param + "]:checked");
      		var elemlbl = $("label[for=" + elem.attr("id") + "]");

      		if (elem.length == 0) {
      			dataString = param + "=";
      		} else {
		    	dataString = param + "=" + elem.val();
		    	updateValue = elemlbl.html();
      		}
			// special handling for radio-button "factfile_children"
			if (param == "factfile_children") {
		        if (elem.val() == "no") {
		          dataString += "&factfile_numb_child=0&factfile_child_inhome=0";
		        } else {
		          if ($("#factfile_child_inhome").val() == "") {
		        	  $("#factfile_child_inhome").val(0);
		          }
		          dataString += "&factfile_numb_child=" + $("#factfile_numb_child").val() + 
		          				"&factfile_child_inhome=" + $("#factfile_child_inhome").val();
		          updateValue = $("#factfile_numb_child").val() + " " + $("label[for=factfile_numb_child]").html() + "; " + 
		          				$("label[for=factfile_child_inhome]").html() + ": " + $("#factfile_child_inhome").val();
		        }
			} else if(param == "factfile_religion") {
				if (elem.val() > 50) {
					updateValue = muslimString + " (" + elemlbl.html() + ")";
				}
			}
			break;

		// factfile_lang, factfile_relationship
		// about_me_myself
		// leisure_freetime, leisure_interested, leisure_sportparticipate, leisure_ideaholiday, leisure_pet,
		// leisure_instruments, leisure_music, leisure_movies, leisure_books
		case 'checkbox':
			var result = "";
		    // get checked checkboxes
		    var checkboxes = $("input[name=" + param + "]:checked");
		    var num_cbx    = checkboxes.size();
		    var fieldOtherTextName = getOtherTextFieldname(param);
		    var othertext  = $("#" + fieldOtherTextName);
		
		    listDelimiter = getListDelimiter(param);
		    // traverse checkboxes
		    checkboxes.each(function(i){
				var cbx = $(this);

				result += cbx.val()
		        // special handling if othertext exists
		        if (i < (num_cbx - 1)) {
	            	result += ", ";
		        }
		        // get label for checkbox
		        var cbxlbl = $("label[for=" + cbx.attr("id") + "]");

				// append the label's html to updateValue
		        updateValue += cbxlbl.html();
		        // append listDelimiter if this is not the last item in array
		        if (updateValue != "" && i < (num_cbx - 1)) {
		        	updateValue += listDelimiter;
		        }
			});
		    // set delimiter to '' if no updateValue until now
		    listDelimiter = (updateValue == "") ? "" : listDelimiter;
		    
		    dataString  = param + "=" + result;
		    // append othertext if set
		    approve_value = othertext.val();
		    if (othertext.length != 0 && approve_value != '') {
		        updateValue = updateValue + listDelimiter + approve_value;
		        dataString  += "&" + fieldOtherTextName + "=" + approve_value;
		    } else {
		        updateSpan.nextAll("div[class=box-msg-urgent]").hide();
		    }
			if ((	param == "about_me_myself" || 
					param == "leisure_ideaholiday") && result == '') {
				updateValue = nothingEnteredString;   
	            updateSpan.nextAll("div.rejected-msg").hide();
				empty = true;	
	  	  	}
		    break;
		    
	    // factfile_height, userdetail_income      
	    case 'select':
			var elem = $("#" + param);
	
			if (elem.length == 0) {
				dataString = param + "="
	  		} else {
				dataString = param + "=" + elem.val();
	  		}
	    	updateValue = $("#" + param + " option:selected").text();
	    	if (param == "factfile_height") {
	    		updateValue += " cm";
		    }
		    break;
	    // other elements, text fields
		// factfile_on_my_mind, factfile_other_occupation, factfile_appearance, factfile_question_1, factfile_question_2,
	    // about_me_question1, about_me_question2, about_me_question3, about_me_question4, about_me_question5, about_me_question6,
		// leisure_holiday    
	    default:
	        var elem = $('#' + param);
	
	    	if (elem.length == 0) {
	    		approve_value = "";
			} else {
				approve_value = elem.val();
			}
	    	if(param == "factfile_other_occupation") {
	    		approve_value = approve_value.replace(/\"/g, "'");
	    		updateSpan.nextAll('div.rejected-msg').hide();
	    	}
	    	dataString  = param + "=" + approve_value;
	
	    	updateValue = approve_value;
			if (	(param == "factfile_on_my_mind" || 
					param == "factfile_appearance" || 
					param == "factfile_question_1" || 
					param == "factfile_question_2" ||
					param == "about_me_question1" ||
					param == "about_me_question2" ||
					param == "about_me_question3" ||
					param == "about_me_question4" ||
					param == "about_me_question5" ||
					param == "about_me_question6" || 
					param == "leisure_holiday") &&
					approve_value == "") {
				updateValue = nothingEnteredString;   
	            updateSpan.nextAll("div.rejected-msg").hide();
				empty = true;	
	  	  	}
	  		break;
	  	}
		// call ajax request
	    $.ajax({
	      type: "POST",
	      url: "/personal-ajax_factfile.html",
	      data: dataString,
	      dataType: "xml",
	      success: function(resultMessage) {
	        // show error/success-message
	        var status = toggleAjaxResultMessage(resultMessage);
			var approve_info = $("approved", resultMessage).text();
	        // update text
	        if (typeof(updateSpan) !== "undefined" && updateSpan !== null && status == "ok") {
	          	setTimeout(function(){$("#box-success").hide("slow");},3000);
	          	updateSpan.html(updateValue);
	          	if (empty) {
	        		updateSpan.addClass("empty");
	          	} else {
	        	  	updateSpan.removeClass("empty");
	          	}
	          	// hide any previous "not yet approved" infos
	          	updateSpan.nextAll("div[class=box-msg-urgent]").hide();
	          
	          	// hide any previous "not yet approved" infos
	          	updateSpan.nextAll("div.not-approved-info").hide();
	
	          	// show "not yet approved" info
	          	if (approve_info == '1' && approve_value != ""){
	          		updateSpan.nextAll("div.rejected-msg").hide();
					updateSpan.nextAll("div.not-approved-info").show();
	        	}
	        }
	        // close edit-form on success
	        if (status == "ok") {
	        	if (param == "userdetail_photo_release_all") {
	        		toggleAllPhotoReleaseForm();
	        	} else {
	        		toggleEditForm($(button).parents(".edit-form").prev(".tabular-info").find(".button-cancel"));
	        	}
	        }
	      }
	    });
	return false;
}

/**
 * Toggle all photo release form
 *
 * @author Dmitri Zvezdine <dmitri.zvezdine@k2interactive.de>
 */
function toggleAllPhotoReleaseForm() {
	$("#photo-release-link").toggle();
	$("#photo-release-form").toggle();
	
}

function stopRKey(evt) {
	var evt = (evt) ? evt : ((event) ? event : null);
	var node = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
	if ((evt.keyCode == 13) && (node.type=="text"))  {return false;}
}
