/**
 * friendscout AJAX search - ajax search client for friendscout24
 *
 * @author		Harald Lapp <hlapp@gmx-gmbh.de>
 *				updated in 2008-06 by Matthias Kurte
 * @copyright	copyright (c) 2007 by GMX GmbH
 */

var friendscout = {
	// search session
	session: null,

	// current displayed result page
	page: 1,

	// max number of search results per page
	maxresults: 10,

	// total number of search results
	totalresults: 0,

	// URL of friendscout webservice
	url: '',

	// userinfo to display in search result
	displayinfo: {
//		'Online:': 'online', 
		'Alter:': 'age',
		'Wohnland:': 'country',
		'Wohnort:': 'city',
		'Motto:': 'motto'
//		,'portraiturl': 'portraiturl'
	},

	// error messages
	errorMsg: {
		'noresult': '<li>F&uuml;r Ihre Sucheanfrage wurden keine Treffer gefunden.</li>',
		'err_zip': '<li>Die Postleitzahl enth&auml;lt ung&uuml;ltige Zeichen.</li>'
	},

	// URL for page to link buttons to
	registrationUrl: 'http://friendscout24.gmx.de/registration.html?pId=',

	// target to open registration URL in
	registrationTarget: '',

	// countries
	countries: {
		'17110': 'Deutschland',
		'17220': 'Italien',
		'17360': '&Ouml;sterreich',
		'17420': 'Schweiz',
		'17450': 'Spanien'
	},

	host: null,

	/**
	 * overwrite friendscout service URL
	 */
	setServiceUrl: function(url) {
		this.url = url;
	},

	/**
	 * setter for hostname
	 */
	setHostname: function(host) {
		this.host = host;
	},

	/**
	 * setter for partnerid
	 */
	setPartnerid: function(partnerid) {
		this.partnerid = partnerid;
	},

	/**
	 * setter for registration URL
	 */
	setRegistrationUrl: function(url) {
		this.registrationUrl = url;
	},

	/**
	 * setter for registration Target
	 */
	setRegistrationTarget: function(target) {
		this.registrationTarget = target;
	},

	/**
	 * collect data from webform and exec request
	 */
	startSearch: function() {
		if (!this.checkEntries()) {
			return;
		}

		// count click
		var loc = location.href;
		var derefererUrl, iwwUrl, linkId = "Btn_Jetzt_Losflirten", checksum;
		if(loc.indexOf("gmx") != -1) { // gmx
			derefererUrl = "dereferer.gmx.net";
			checksum = "7kABC";
			iwwUrl = "iww.gmx.net"
			this.countClick(derefererUrl, iwwUrl, linkId, checksum);
		} else if(loc.indexOf("web") != -1) { // web.de
			derefererUrl = "dereferer.web.de";
			checksum = "Tq09s";
			iwwUrl = "iww.web.de"
			this.countClick(derefererUrl, iwwUrl, linkId, checksum);
		} else { // 1und1
			derefererUrl = "dereferer.1und1.de";
			checksum = "Ch7GG";
			iwwUrl = "iww.1und1.de"
			this.countClick(derefererUrl, iwwUrl, linkId, checksum);
		}

		// collect data and build XML
		var xml = '<exec><function>guestSearch</function>\n';

		xml += '<partnerid>' + this.partnerid + '</partnerid>\n';

		xml += '<param><name>pagesize</name><value>' + this.maxresults + '</value></param>\n';
		xml += '<param><name>gender</name><value>' + poma.dom.$id('fs_sgender').value + '</value></param>\n';
		xml += '<param><name>searchgender</name><value>' + poma.dom.$id('fs_gender').value + '</value></param>\n';

		var age = poma.dom.$id('fs_age').value.split(/-/);
		xml += '<param><name>searchminage</name><value>' + age[0] + '</value></param>\n';
		xml += '<param><name>searchmaxage</name><value>' + age[1] + '</value></param>\n';

		xml += '<param><name>country</name><value>' + poma.dom.$id('fs_country').value + '</value></param>\n';
		if (poma.dom.$id('fs_zip').value != '') {
			xml += '<param><name>zip</name><value>' + poma.dom.$id('fs_zip').value + '</value></param>\n';
			xml += '<param><name>distance</name><value>' + poma.dom.$id('fs_distance').value + '</value></param>\n';
		}

		xml += '<param><name>hasphoto</name><value>true</value></param></exec>';


		var me = this;

		var req = poma.ajax.initRequest();
//		req.setOpt('contentType', 'text/xml');
		req.setOpt('response', poma.ajax.response.__XML__);
		req.registerCallback(poma.ajax.state.__COMPLETE__, function(data, req) {
			if (!data) { return; }

			data = me.processData(data);
			me.populatePage(data, req);
		});
//		req.overrideMimeType('text/xml');
		req.sendRequest(this.url, 'xml=' + xml, 'POST');
		
		return false;
	},

	/**
	 * validate entries
	 */
	checkEntries: function() {
		var zip = poma.dom.$id('fs_zip').value;
		zip = zip.replace(/^\s*/, '').replace(/\s*$/, '');

		var msg = '';

		if (zip.replace(/\d+/, '') != '') {
			msg += this.errorMsg['err_zip'];
		}

		if (msg != '') {
			poma.dom.$id('fs_error_msg').innerHTML = msg;
			poma.dom.$id('fs_error').style.display = 'block';
		}

		return (msg == '');
	},

	/**
	 * process friendscout search result data
	 */
	processData: function(data) {
		function getFirst(tagname, data) {
			var tmp = data.getElementsByTagName(tagname);
			var ret = '';

			if (tmp.length > 0) {
				ret = poma.dom.$textContent(tmp[0]);
			}

			return ret;
		}

		var tmp;

//		this.session = ((tmp = getFirst('session', data)) != '' ? tmp : null);
		if (getFirst('session', data) != '') {
			this.session = getFirst('session', data);
		}
		this.page = ((tmp = getFirst('page', data)) != '' ? tmp : 1);
		this.totalresults = ((tmp = getFirst('max_entries', data)) != '' ? tmp : 0);

		var entries = data.getElementsByTagName('searchresultentry');
		var result = [];
		var motto = '';
		var country = '';

		for (var i = 0; i < entries.length; i++) {
			motto = getFirst('motto', entries[i]).replace(/^\s+/, '').substring(0, 20).replace(/\s+$/, '');
			motto = (motto == '' ? motto : motto + ' ...');

			country = getFirst('country', entries[i]);
			country = (typeof this.countries[country] == 'undefined' ? '' : this.countries[country]);

			result[i] = {
				'pseudonym': getFirst('pseudonym', entries[i]),
				'portraiturl': getFirst('portraiturl', entries[i]),
				'gender': getFirst('gender', entries[i]),
				'premium': getFirst('premium', entries[i]),
				'newmember': (getFirst('newmember', entries[i]) == 'true'),
				'age': getFirst('age', entries[i]),
				'city': getFirst('city', entries[i]),
				'country': country,
				'zip': getFirst('zip', entries[i]),
				'pid': getFirst('pid', entries[i]),
				'motto': motto
			}
		}

		return result;
	},

	/**
	 * build navigation pager
	 */
	buildPager: function() {
		var pagecount = Math.ceil(this.totalresults / this.maxresults);
		var list = 11;
		var pages= [];
		var i;

		if (pagecount <= list) {
			for (i = 1; i <= pagecount; i++) {
				pages[i - 1] = '' + i;
			}
		} else {
			for (i = 1; i <= list; i++) {
				if (this.page < Math.ceil(list / 2)) {
					if (i == list - 1) {
						pages[i - 1] = '...';
					} else if (i == list) {
						pages[i - 1] = '' + pagecount;
					} else {
						pages[i - 1] = '' + i;
					}
				} else if (this.page > (pagecount - (list / 2)) + 2) {
					if (i == 1) {
						pages[i - 1] = '1';
					} else if (i == 2) {
						pages[i - 1] = '...';
					} else {
						pages[i - 1] = (pagecount - list + i);
					}
				} else {
					if (i == 1) {
						pages[i - 1] = '1';
					} else if (i == list) {
						pages[i - 1] = '' + pagecount;
					} else if (i == 2 || i == list - 1) {
						pages[i - 1] = '...';
					} else {
						pages[i - 1] = Math.ceil(this.page - list / 2 + i - 1);
					}
				}
			}
		}

		var idx = 0;
		var pager = [];
		var me = this;

		pager[idx++] = {'#text': 'Seite: \n'};
		pager[idx++] =
			{'a': {
				'href': '#fs_result_a', //javascript://',
				'onclick': function() { me.showPrevPage(); },
				'children': [
					{'img': {
						'alt': '',
						'src': this.getStaticResHost(window.location.host) + '/images/common/icon-rwd.gif'
					}}
            	]
			}};

		for (i = 0; i < pages.length; i++) {
			if (pages[i] == this.page) {
				pager[idx++] =
					{'strong': {
						'#text': pages[i],
						'styles': {'margin': '4px'}
					}}
			} else if (pages[i] == '...') {
				pager[idx++] =
					{'span': {
						'#text': pages[i],
						'styles': {'margin': '4px'}
					}}
			} else {
				pager[idx++] =
					{'a': {
						'href': '#fs_result_a', //javascript://',
						'onclick': poma.newClosure(pages[i], function(page) { me.showPage(parseInt(page, 10)); }),
						'#text': pages[i],
						'styles': {'margin': '4px'}
					}}
			}

			if (i < pages.length - 1) {
				pager[idx++] =
					{'span': {
						'#text': '|'
					}}
			}
		}

		pager[idx++] =
			{'a': {
				'href': '#fs_result_a', //javascript://',
				'onclick': function() { me.showNextPage(); },
				'children': [
					{'img': {
						'alt': '',
						'src': this.getStaticResHost(window.location.host) + '/images/common/icon-fwd.gif'
					}}
            	]
			}};

		return pager;
	},

	/**
	 * populate page with search results
	 */
	populatePage: function(data, req) {
		var entries = [];
		var userinfo;
		var i, k;
		var className;

		if (data.length == 0) {
			while (poma.dom.$id('fs_result').firstChild) {
				poma.dom.$id('fs_result').removeChild(poma.dom.$id('fs_result').firstChild);
			}

			while (poma.dom.$id('fs_nav').firstChild) {
				poma.dom.$id('fs_nav').removeChild(poma.dom.$id('fs_nav').firstChild);
			}

			poma.dom.$id('fs_error_msg').innerHTML = this.errorMsg['noresult'];
			poma.dom.$id('fs_error').style.display = 'block';

			return;
		}

		poma.dom.$id('fs_error').style.display = 'none';

		for (i = 0; i < data.length; i++) {
			className = (i % 2 == 0 ? 'alt' : '');

			userinfo = [
				{'tr': {
					'class': className,
					'children': [
						{'th': {
							'width': '100%',
							'colspan': 2,
							'styles': {'lineHeight': '16px', 'paddingTop': '0', 'paddingBottom': '0', 'paddingLeft': '0', 'paddingRight': '0'},
							'children': [
								{'span': {
									'styles': {'cssFloat': 'right', 'styleFloat': 'right'},
									'children': [
/*										{'img': {
											'alt': '',
											'styles': {'paddingRight': '5px'},
											'src': (data[i]['online']
												? '/de/generic/friendscout24/img/nale_fs24_icon_on.gif'
												: '/de/generic/friendscout24/img/nale_fs24_icon_on.gif')
										}}, */
										{'img': {
											'alt': '',
											'src': (data[i]['gender'] == '13000'
													? '/de/generic/friendscout24/img/nale_fs24_icon_m.gif'
													: '/de/generic/friendscout24/img/nale_fs24_icon_f.gif')
										}}
									]
								}},
								{'a': {
									'href': this.registrationUrl + data[i]['pid'],
									'target': this.registrationTarget,
									'html': data[i]['pseudonym']
								}}
							]
						}}
					]
				}}
			];

			for (k in this.displayinfo) {
				userinfo[userinfo.length] =
					{'tr': {
						'class': className,
						'children': [
							{'th': {
								'width': '25%',
								'html': k,
								'styles': {'lineHeight': '16px', 'paddingTop': '0', 'paddingBottom': '0', 'paddingLeft': '0', 'paddingRight': '0'}
							}},
							{'td': {
								'width': '75%',
								'html': data[i][this.displayinfo[k]],
								'styles': {'lineHeight': '16px', 'paddingTop': '0', 'paddingBottom': '0', 'paddingLeft': '0', 'paddingRight': '0'}
							}}
						]
					}}
			}

			entries[i] =
				{'tr': {
					'class': className,
					'children': [
						{'td': {
							'width': '110',
							'valign': 'top',
							'children': [
								{'a': {
									'href': this.registrationUrl + data[i]['pid'],
									'target': this.registrationTarget,
									'children': [
										{'img': {
											/*'src': (data[i]['gender'] == '13000'
													? '/de/generic/friendscout24/img/sw_fs24_platzhalter_alternativ_m.gif'
													: '/de/generic/friendscout24/img/sw_fs24_platzhalter_alternativ_w.gif'),*/
											'src': data[i]['portraiturl'],
											'width': '100',
											'height': '120',
											'alt': '',
											'styles': {'border': '1px solid #e2e2e2'}
										}}
									]
								}}
							]
						}},
						{'td': {
							'valign': 'top',
							'children': [
								{'table': {
									'styles': {'border': '0'},
									'cellspacing': 0, 
									'children': [
										{'tbody': {
											'children': userinfo
										}}
									]
								}},
								{'p': {
									'class': 'decorate',
									'children': [
										{'span': {
											'styles': {'marginRight': '10px'},
											'children': [
												{'a': {
													'href': this.registrationUrl + data[i]['pid'],
													'target': this.registrationTarget,
													'#text': 'Chatten'
												}}
											]
										}},
										{'span': {
											'styles': {'marginRight': '10px'},
											'children': [
												{'a': {
													'href': this.registrationUrl + data[i]['pid'],
													'target': this.registrationTarget,
													'#text': 'Schreiben'
												}}
											]
										}},
										{'span': {
											'styles': {'marginRight': '10px'},
											'children': [
												{'a': {
													'href': this.registrationUrl + data[i]['pid'],
													'target': this.registrationTarget,
													'#text': 'Flirtkontakt'
												}}
											]
										}}
									]
								}}
							]
						}}
					]
				}}
		}

		var from = (this.page - 1) * this.maxresults + 1;
		var to = (from + this.maxresults - 1) > this.totalresults ? to = this.totalresults : to = from + this.maxresults - 1;
		var me = this;

		var content = [
/*			{'div': {
				'class': 'table',
				'children': [ */
					{'div': {
						'class': 'x6',
						'children': [
							{'h2': {
								'#text': 'Treffer ' + from + ' - ' + to + ' von ' + this.totalresults
							}},
							{'div': {
								'children': [
									{'table': {
										'cellspacing': 0,
										'children': [
											{'tbody': {
												'children': entries
											}}
										]
									}}
								]
							}}
						]
					}}
/*				]
			}} */
		];

		while (poma.dom.$id('fs_result').firstChild) {
			poma.dom.$id('fs_result').removeChild(poma.dom.$id('fs_result').firstChild);
		}

		poma.dom.appendTags('fs_result', content);

		while (poma.dom.$id('fs_nav').firstChild) {
			poma.dom.$id('fs_nav').removeChild(poma.dom.$id('fs_nav').firstChild);
		}

		poma.dom.appendTags('fs_nav', this.buildPager());

		// jump to searchresults
		var loc = window.location.href;
		loc = loc.replace(/#fs_search_a/g, '');
		window.location.href = loc + '#fs_search_a';
	},

	/**
	 * show search result page
	 */
	showPage: function(pageno) {
		if (this.session == null ||
			pageno < 1 ||
			pageno > Math.ceil(this.totalresults / this.maxresults)) {
			return;
		}

		var me = this;

		var xml = '<exec>';
		xml += '<function>resultset</function>';
		xml += '<partnerid>' + this.partnerid + '</partnerid>';
		xml += '<session>' + this.session + '</session>';
		xml += '<param><name>page</name><value>' + pageno + '</value></param></exec>';

		var req = poma.ajax.initRequest();
		req.setOpt('response', poma.ajax.response.__XML__);
		req.registerCallback(poma.ajax.state.__COMPLETE__, function(data, req) {
			if (!data) { return; }

			data = me.processData(data);
			me.populatePage(data, req);
		});
//		req.overrideMimeType('text/xml');
		req.sendRequest(this.url, 'xml=' + xml, 'POST');
	},

	/**
	 * go to next page
	 */
	showNextPage: function() {
		this.showPage(parseInt(this.page, 10) + 1);
	},

	/**
	 * go to previous page
	 */
	showPrevPage: function() {
		this.showPage(parseInt(this.page, 10) - 1);
	},

	/*
	 * get Host for Static Resources
	 */
	getStaticResHost: function(host) {
		if(host.lastIndexOf("gmx")!= -1) {
			host = "http://static.gmx.net/current/de";
		}else if(host.lastIndexOf("web")!= -1) {
			host = "http://static.web.de/current/de";
		} else if(host.lastIndexOf("1und1")!= -1) {
			host = "http://static.1und1.de/current/de";
		}
		return host;
	},

	/* **********************
	 * check Pseudonym
	 ********************** */
	checkPseudonym: function() {
		if ($ui("#frs24-pseudonym").val() == "") return;

		// collect data and build XML
		var xml = '<exec><function>checkPseudonym</function>\n';
		xml += '<partnerid>' + this.partnerid + '</partnerid>\n';
		xml += '<param><name>pseudonym</name><value>' + $ui('#frs24-pseudonym').val() + '</value></param>\n';
		xml += '</exec>';

		var me = this;

		var req = poma.ajax.initRequest();
		req.setOpt('response', poma.ajax.response.__XML__);
		req.registerCallback(poma.ajax.state.__COMPLETE__, function(data, req) {
			if (!data) { return; }

			data = me.checkPseudonymProcessData(data);
			me.checkPseudonymPopulatePage(data, req);
		});
		req.sendRequest(this.url, 'xml=' + xml, 'POST');

		return false;
	},

	/*
	 * check Pseudonym - process Data
	 */
	checkPseudonymProcessData: function(data) {
		function getFirst(tagname, data) {
			var tmp = data.getElementsByTagName(tagname);
			var ret = '';

			if (tmp.length > 0) {
				ret = poma.dom.$textContent(tmp[0]);
			}

			return ret;
		}

		if (getFirst('session', data) != '') {
			this.session = getFirst('session', data);
		}
		var result = [];

		this.chPsResult = getFirst('result', data);
		this.chPsError = getFirst('message', data);
		var chPsAlternatives = data.getElementsByTagName('pseudonym');

		if (chPsAlternatives.length > 1) {
			for (var i = 0; i < chPsAlternatives.length; i++) {
				result[i] = {
					'alternatives': poma.dom.$textContent(chPsAlternatives[i])
				}
			}
		}

		return result;
	},

	/*
	 * check Pseudonym - populate Page
	 */
	checkPseudonymPopulatePage: function(data, req) {
		var cnt = '';
		var chPsInput = $ui("#frs24-pseudonym");

		// remove the divs before we insert new ones
		chPsInput.parent("td").children("div").remove();
		chPsInput.removeClass("error");

		if (this.chPsResult == "OK") {
			cnt = '<div style="color: #6C0; margin-top: 3px; margin-bottom: 3px;">Ihr gew&auml;hltes Pseudonym ist noch frei.</div>';
		} else if (this.chPsResult == "FAILED") {
			chPsInput.addClass("error");
			cnt = '<div style="color: #F00; margin-top: 3px; margin-bottom: 3px;">Ihr gew&auml;hltes Pseudonym ist bereits vergeben. Sie k&ouml;nnen aus nachfolgender Liste ein neues w&auml;hlen:</div>';
			for (var i = 1; i < data.length; i++) { // leave the first one out, cause it is the one that the user entered
				cnt += '<div style="margin-bottom: 3px;"><input type="radio" name="pseudonymAlternatives" id="pseudonymAlternatives-' + i + '" value="' + data[i]['alternatives'] + '" onclick="$ui(\'#frs24-pseudonym\').val(\'' + data[i]['alternatives'] + '\');friendscout.checkPseudonym();"> <label for="pseudonymAlternatives-' + i + '">' + data[i]['alternatives'] + '</label></div>';
			}
		}
		if (this.chPsError == "Blacklisted pseudonym") {
			cnt = '<div style="color: #F00; margin-top: 3px; margin-bottom: 3px;">Ihr gew&auml;hltes Pseudonym darf nicht verwendet werden.</div>';
			chPsInput.focus();
		} else if (this.chPsError == "Invalid pseudonym") {
			cnt = '<div style="color: #F00; margin-top: 3px; margin-bottom: 3px;">Ihr gew&auml;hltes Pseudonym ist nicht g&uuml;ltig.</div>';
			chPsInput.focus();
		}

		chPsInput.after(cnt);
	},

	/* **********************
	 * create User / Registration
	 ********************** */
	createUser: function() {

		// count click
		var loc = location.href;
		var derefererUrl, iwwUrl, linkId = "Btn_Kostenlos_Registrieren", checksum;
		if(loc.indexOf("gmx") != -1) { // gmx
			derefererUrl = "dereferer.gmx.net";
			checksum = "xmoL2";
			iwwUrl = "iww.gmx.net"
			this.countClick(derefererUrl, iwwUrl, linkId, checksum);
		} else if(loc.indexOf("web") != -1) { // web.de
			derefererUrl = "dereferer.web.de";
			checksum = "B7aHz";
			iwwUrl = "iww.web.de"
			this.countClick(derefererUrl, iwwUrl, linkId, checksum);
		} else { // 1und1
			derefererUrl = "dereferer.1und1.de";
			checksum = "Cdneq";
			iwwUrl = "iww.1und1.de"
			this.countClick(derefererUrl, iwwUrl, linkId, checksum);
		}

		// initialise all inputs first
		$ui("#frs24register :input").each(function() {
			$ui(this).removeClass("error");
			$ui(this).parent("td").children("div").remove();
		});

		// check the errors, the partner's api can't find out
		var stopReg = false;
		// check if AGB is checked
		if (!document.getElementById("frs24-agb").checked) {
			var chPsAgb = $ui("#frs24-agb");
			var cnt = '<div style="color: #F00; font-weight: 700; margin-top: 3px; margin-bottom: 3px;">Bitte akzeptieren Sie die Allgemeinen Gesch&auml;ftsbedingungen.</div>';
			chPsAgb.before(cnt);
			chPsAgb.focus();
			stopReg = true;
		}
		// check if there are any umlaute in the password-field (check for all non-alphanumeric characters and characters which are not "_")
		if ($ui("#frs24-password").val().search(/\W/) != -1) {
			var chPsInput = $ui("#frs24-password");
			chPsInput.addClass("error");
			cnt = '<div style="color: #F00; margin-top: 3px; margin-bottom: 3px;">Umlaute sind nicht erlaubt.</div>';
			chPsInput.focus();
			chPsInput.after(cnt);
			stopReg = true;
		}
		// check if password-values are identical
		if ($ui("#frs24-password").val() != $ui("#frs24-password2").val()) {
			var chPsInput = $ui("#frs24-password2");
			chPsInput.addClass("error");
			cnt = '<div style="color: #F00; margin-top: 3px; margin-bottom: 3px;">Die Passw&ouml;rter stimmen nicht &uuml;berein.</div>';
			chPsInput.focus();
			chPsInput.after(cnt);
			stopReg = true;
		}
		// if any error occured, stop the process/function
		if (stopReg) return false;

		// collect data and build XML
		var xml = '<exec><function>createUser</function>\n';
		xml += '<partnerid>' + this.partnerid + '</partnerid>\n';
		xml += '<param><name>frs_affil</name><value>' + $ui("#frs_affil").val() + '</value></param>\n';
		xml += '<param><name>gender</name><value>' + $ui("#frs24-sex").val() + '</value></param>\n';
		xml += '<param><name>birthday</name><value>' + $ui("#frs24-birthDay").val() + '.' + $ui("#frs24-birthMonth").val() + '.' + $ui("#frs24-birthYear").val() + '</value></param>\n';
		xml += '<param><name>country</name><value>' + $ui("#frs24-country").val() + '</value></param>\n';
		xml += '<param><name>zip</name><value>' + $ui("#frs24-zip").val() + '</value></param>\n';
		xml += '<param><name>pseudonym</name><value>' + $ui("#frs24-pseudonym").val() + '</value></param>\n';
		xml += '<param><name>password</name><value>' + $ui("#frs24-password").val() + '</value></param>\n';
		xml += '<param><name>mail</name><value>' + $ui("#frs24-email").val() + '</value></param>\n';
		xml += '<param><name>searchgender</name><value>' + $ui("#frs24-searchSex").val() + '</value></param>\n';
		xml += '<param><name>searchminage</name><value>' + $ui("#frs24-searchAgeFrom").val() + '</value></param>\n';
		xml += '<param><name>searchmaxage</name><value>' + $ui("#frs24-searchAgeTo").val() + '</value></param>\n';
		xml += '</exec>';

		var me = this;

		var req = poma.ajax.initRequest();
		req.setOpt('response', poma.ajax.response.__XML__);
		req.registerCallback(poma.ajax.state.__COMPLETE__, function(data, req) {
			if (!data) { return; }

			data = me.createUserProcessData(data);
			me.createUserPopulatePage(data, req);
		});
		req.sendRequest(this.url, 'xml=' + xml, 'POST');

		return false;
	},

	/*
	 * create User - process Data
	 */
	createUserProcessData: function(data) {
		function getFirst(tagname, data) {
			var tmp = data.getElementsByTagName(tagname);
			var ret = '';

			if (tmp.length > 0) {
				ret = poma.dom.$textContent(tmp[0]);
			}

			return ret;
		}

		if (getFirst('session', data) != '') {
			this.session = getFirst('session', data);
		}
		var result = [];

		this.crUsResult = getFirst('result', data);
		this.crUsRedirectUrl = getFirst('redirecturl', data);
		this.crUsTrackingUrl = getFirst('trackingurl', data);
		var crUsErrors = data.getElementsByTagName('code');

		if (crUsErrors.length > 0) {
			for (var i = 0; i < crUsErrors.length; i++) {
				result[i] = {
					'error': poma.dom.$textContent(crUsErrors[i])
				}
			}
		}

		return result;
	},

	/*
	 * create User - populate Page
	 */
	createUserPopulatePage: function(data,req) {
		var cnt = "", chPsInput = "", chPsInput2 = "", chPsInput3 = "";

		// loop through all errors
		if (data[0]) {
			for (var i = 0; i < data.length; i++) {
				switch(data[i]['error']) {
					case "004.001":
						chPsInput = $ui("#frs24-pseudonym");
						chPsInput.addClass("error");

						cnt = '<div style="color: #F00; margin-top: 3px; margin-bottom: 3px;">Bitte geben Sie ein Pseudonym ein.</div>';

						chPsInput.after(cnt);
						break;
					case "004.002":
						chPsInput = $ui("#frs24-pseudonym");
						chPsInput.addClass("error");

						cnt = '<div style="color: #F00; margin-top: 3px; margin-bottom: 3px;">Ihr gew&auml;hltes Pseudonym ist nicht g&uuml;ltig.</div>';

						chPsInput.after(cnt);
						break;
					case "004.003":
						chPsInput = $ui("#frs24-pseudonym");
						chPsInput.addClass("error");

						cnt = '<div style="color: #F00; margin-top: 3px; margin-bottom: 3px;">Ihr gew&auml;hltes Pseudonym darf nicht verwendet werden.</div>';

						chPsInput.after(cnt);
						break;
					case "004.004":
						chPsInput = $ui("#frs24-pseudonym");
						chPsInput.addClass("error");

						cnt = '<div style="color: #F00; margin-top: 3px; margin-bottom: 3px;">Ihr gew&auml;hltes Pseudonym ist bereits vergeben.</div>';

						chPsInput.after(cnt);
						break;
					case "004.032":
						chPsInput = $ui("#frs24-birthDay");
						chPsInput.addClass("error");
						chPsInput2 = $ui("#frs24-birthMonth");
						chPsInput2.addClass("error");
						chPsInput3 = $ui("#frs24-birthYear");
						chPsInput3.addClass("error");

						cnt = '<div style="color: #F00; margin-top: 3px; margin-bottom: 3px;">Bitte geben Sie Ihr Geburtsdatum ein.</div>';

						chPsInput3.after(cnt);
						break;
					case "004.033":
						chPsInput = $ui("#frs24-birthDay");
						chPsInput.addClass("error");
						chPsInput2 = $ui("#frs24-birthMonth");
						chPsInput2.addClass("error");
						chPsInput3 = $ui("#frs24-birthYear");
						chPsInput3.addClass("error");

						cnt = '<div style="color: #F00; margin-top: 3px; margin-bottom: 3px;">Bitte geben Sie Ihr korrektes Geburtsdatum ein.</div>';

						chPsInput3.after(cnt);
						break;
					case "004.043":
						chPsInput = $ui("#frs24-country");
						chPsInput.addClass("error");

						cnt = '<div style="color: #F00; margin-top: 3px; margin-bottom: 3px;">Bitte w&auml;hlen Sie Ihr Wohnland aus.</div>';

						chPsInput.after(cnt);
						break;
					case "004.052":
						chPsInput = $ui("#frs24-zip");
						chPsInput.addClass("error");

						cnt = '<div style="color: #F00; margin-top: 3px; margin-bottom: 3px;">Bitte geben Sie Ihre Postleitzahl ein.</div>';

						chPsInput.after(cnt);
						break;
					case "004.062":
						chPsInput = $ui("#frs24-password");
						chPsInput.addClass("error");

						cnt = '<div style="color: #F00; margin-top: 3px; margin-bottom: 3px;">Bitte geben Sie ein Passwort mit mindestens 6 und maximal 16 Zeichen ein.</div>';

						chPsInput.after(cnt);
						break;
					case "004.071":
						chPsInput = $ui("#frs24-email");
						chPsInput.addClass("error");

						cnt = '<div style="color: #F00; margin-top: 3px; margin-bottom: 3px;">Bitte geben Sie Ihre E-Mail-Adresse ein.</div>';

						chPsInput.after(cnt);
						break;
					case "004.072":
						chPsInput = $ui("#frs24-email");
						chPsInput.addClass("error");

						cnt = '<div style="color: #F00; margin-top: 3px; margin-bottom: 3px;">Bitte geben Sie eine g&uuml;ltige E-Mail-Adresse ein.</div>';

						chPsInput.after(cnt);
						break;
					default:
						chPsInput = $ui("#frs24-agb");

						cnt = '<div style="color: #F00; font-weight: 700; margin-top: 3px; margin-bottom: 10px;">Ein Fehler ist aufgetreten. Bitte versuchen Sie es erneut.</div>';

						chPsInput.before(cnt);
						break;
				}
			}
		}
		// find the first input with class .error and focus it
		$ui("#frs24register .error:first").focus();

		// if we created a user correctly
		if (this.crUsResult == "OK") {
			$ui("#frs24-success span").html($ui("#frs24-email").val());
			counter.countPI();
			$ui("#frs24-success").show();
			$ui("#frs24register").hide();
			$ui("iframe").remove();
			$ui("body").append('<iframe id="frscountiframe" frameborder="0" width="1" height="1"></iframe>');
			$ui('iframe#frscountiframe').attr('src', '//adimg.uimserv.net/conversion/conversion.html?eventtype=conversion_final&amp;KundenID=BB');
			// Frs24 TrackingURL
			$ui("body").append('<iframe id="frscountiframetrackingurl" frameborder="0" width="1" height="1"></iframe>');
			$ui('iframe#frscountiframetrackingurl').attr('src', this.crUsTrackingUrl);
		}
	},

	countClick: function(derefererUrl, iwwUrl, linkId, checksum) {
		var imgSrc = "http://" + iwwUrl + "/de/themen/lifestyle/singles/singletreff/img/null.gif";
		imgSrc = encodeURIComponent(imgSrc);
		var derefererSrc = "http://" + derefererUrl + "?dl=" + linkId + "&dc=383&ds=" + checksum + "&dest=" + imgSrc;
		$ui("body").append('<img src="' + derefererSrc + '" class="off" alt="" />');
	}
}
