var womanLock = new Hash();
var argumentStorage = new Hash();

/**
 * Hilfsfunktion, um einen Adressabruf per AJAX abzuwickeln.
 * Argumente in args, optionale in []:
 * 
 * 	outID:				ID des HTML-Elements, in dem die Ausgabe erfolgen soll
 *  closeFunc:			Funktion, die hinter dem Schliessen-Button liegen soll
 *  [onSuccess]: 		Funktion, die bei erfolgreichem Abruf ausgeführt werden soll
 *  [ajaxParams]: 		Parameter, die an die AJAX-URL angefügt werden sollen
 * 	
 * 
 * @param ifCode	IFCode der Frau
 * @param args		siehe oben
 * @return
 */
function ifjs_contactWoman(ifCode, args) {
	elemOut = $(args.outID);
	if ( elemOut == undefined ) {
		alert("ifjs_contactWoman: outID missing/invalid!");
		return;
	}
	
	// Check if this IFCode is locked
	tmp = womanLock.get(ifCode);
	if ( !(tmp == undefined)) return false;
	
	// Lock operations for this ifCode!
	womanLock.set(ifCode, 1);
	
	// Create unique-ID and save arguments
	uid = ifjs_getUniqueID();
	argumentStorage.set(uid, args);
	
	// AJAX-URL
	ajaxURL = "/member/order/"+ifCode+"?ajaxmode=1&uid=" + uid;
	if ( args.ajaxParams != undefined ) ajaxURL += "&"+args.ajaxParams; 
	if ( args.closeFunc != undefined ) ajaxURL += "&closefunc="+encodeURI(args.closeFunc); 
	
	// "Bitte warten" einblenden
	ifjs_wait( args.outID, true );	
	
	new Ajax.Request(ajaxURL, {
		method:'get',
		onSuccess: function(transport) {
			// AJAX-request succeeded
			txt = (transport.responseText || "Unknown error!");
			ifjs_contactWoman_responseHandler(ifCode, args, txt);
		},
		onFailure: function() { 
			// Use non-ajax-URL if AJAX fails
			location.href="/member/order/"+ifCode; 
		}
	});			

	return false;
}

function ifjs_contactWoman_doIt( ifCode, uid, priceConfirmed ) {
	args = argumentStorage.get(uid);
	if ( args == undefined ) {
		alert ( "Es ist ein Fehler aufgetreten!" );
		return;
	}
	elemOut = $(args.outID);
	if ( elemOut == undefined ) {
		alert("womanCard_contactHelper: outID missing/invalid!");
		return;
	}
	
	// Check if this IFCode is locked
	tmp = womanLock.get(ifCode);
	if ( !(tmp == undefined)) return false;
	
	// Lock operations for this ifCode!
	womanLock.set(ifCode, 1);

	// AJAX-URL
	tmp="";
	if ( args.ajaxParams != undefined ) tmp += "&"+args.ajaxParams; 
	if ( args.closeFunc != undefined ) tmp += "&closefunc="+encodeURI(args.closeFunc); 
	ajaxURL = "/member/order/"+ifCode+"?ajaxmode=1&doit=1&uid=" + uid + "&checkchips=" + priceConfirmed + tmp;
	
	// "Bitte warten" einblenden
	ifjs_wait( args.outID, true );
	
	new Ajax.Request(ajaxURL, {
		method:'get',
		onSuccess: function(transport) {
			// AJAX-request succeeded
			txt = (transport.responseText || "Unknown error!");
			ifjs_contactWoman_responseHandler(ifCode, args, txt);
		},
		onFailure: function() { 
			// Use non-ajax-URL if AJAX fails
			location.href="/member/order/"+ifCode
				+"?doit=1&checkchips=" + priceConfirmed; 
		}
	});
	
	return false;
}

function ifjs_contactWoman_responseHandler(ifCode, args, text) {	
	$(args.outID).innerHTML = text;
	initEffects();
	reloadMemberBox();
	
	if ( text.indexOf("RC_SUCCESS") >= 0 ) {
		onSuccessFunc = args.onSuccess;
		favRemoved = (text.indexOf("RC_FAVREMOVED") >= 0);
		if (onSuccessFunc != undefined)	onSuccessFunc( favRemoved );
	}

	// Unlock contact-operations for this ifCode!
	womanLock.unset(ifCode);
}

/**
 * Hilfsfunktion, um Hinzufügen/Entfernen von Favoriten per AJAX abzuwickeln.
 * Argumente in args, optionale in []:
 * 
 * 	outID:				ID des HTML-Elements, in dem die Ausgabe erfolgen soll
 *  [closeFunc]:		Funktion, die hinter dem Schliessen-Button liegen soll
 *  [onAdded]: 			Funktion, die bei erfolgreichem Hinzufügen ausgeführt werden soll
 *  [onDeleted]: 		Funktion, die bei erfolgreichem Löschen ausgeführt werden soll
 *  [ajaxParams]: 		Parameter, die an die AJAX-URL angefügt werden sollen
 * 	
 * 
 * @param ifCode	IFCode der Frau
 * @param delMode	Falls true wird gelöscht, sonst wird hinzugefügt
 * @param args		siehe oben
 * @return
 */
function ifjs_favAddDel(ifCode, delMode, args) {
	elemOut = $(args.outID);
	if ( elemOut == undefined ) {
		alert("ifjs_favAddDel: outID missing/invalid!");
		return;
	}

	// Check if this IFCode is locked
	tmp = womanLock.get(ifCode);
	if ( !(tmp == undefined)) return false;
	
	// Lock operations for this ifCode!
	womanLock.set(ifCode, 1);
	
	// AJAX-URL
	ajaxURL = "/member/addfav/";
	if ( delMode) ajaxURL = "/member/delfav/";
	ajaxURL	+= ifCode+"?ajaxmode=1";
	if ( args.ajaxParams != undefined ) ajaxURL += "&"+args.ajaxParams;
	if ( args.closeFunc != undefined ) ajaxURL += "&closefunc="+encodeURI(args.closeFunc);

	// "Bitte warten" einblenden
	ifjs_wait( args.outID, false );
	
	new Ajax.Request(ajaxURL, {
		method:'get',
		onSuccess: function(transport) {
			// AJAX-request succeeded
			txt = (transport.responseText || "Unknown error!");
			ifjs_favAddDel_responseHandler(ifCode, delMode, args, txt);
		},
		onFailure: function() { 
			// Use non-ajax-URL if AJAX fails
			if ( delMode == true ) location.href="/member/delfav/"+ifCode; 
			else location.href="/member/addfav/"+ifCode; 
		}
	});			

	return false;
}

function ifjs_favAddDel_responseHandler(ifCode, delMode, args, text) {	
	$(args.outID).innerHTML = text;
	initEffects();
	reloadMemberBox();
	
	if ( text.indexOf("RC_FAVREMOVED") >= 0 ) {
		onDeletedFunc = args.onDeleted;
		if (onDeletedFunc != undefined)	onDeletedFunc();
	}

	if ( text.indexOf("RC_FAVADDED") >= 0 ) {
		onAddedFunc = args.onAdded;
		if (onAddedFunc != undefined)	onAddedFunc();
	}
	
	// Unlock operations for this ifCode!
	womanLock.unset(ifCode);
}

/**
 * Hilfsfunktion, um Tell-A-Friend per AJAX abzuwickeln.
 * Argumente in args, optionale in []:
 * 
 * 	outID:				ID des HTML-Elements, in dem die Ausgabe erfolgen soll
 *  closeFunc:			Funktion, die hinter dem Schliessen-Button liegen soll
 *  [ajaxParams]: 		Parameter, die an die AJAX-URL angefügt werden sollen
 * 	
 * 
 * @param ifCode	IFCode der Frau
 * @param args		siehe oben
 * @return
 */
function ifjs_tellAFriend(ifCode, args) {
	elemOut = $(args.outID);
	if ( elemOut == undefined ) {
		alert("ifjs_tellAFriend: outID missing/invalid!");
		return;
	}

	// Check if this IFCode is locked
	tmp = womanLock.get(ifCode);
	if ( !(tmp == undefined)) return false;
	
	// Check if output element is already filled with the correct form
	if ( elemOut.innerHTML.indexOf("TELL-A-FRIEND-" + ifCode.toUpperCase()) >= 0 ) return false;
	
	// Lock operations for this ifCode!
	womanLock.set(ifCode, 1);
	
	// Create unique-ID and save arguments
	uid = ifjs_getUniqueID();
	argumentStorage.set(uid, args);
	
	// AJAX-URL
	ajaxURL = "/member/tellafriend/";
	ajaxURL	+= ifCode+"?ajaxmode=1&uid=" + uid;
	if ( args.ajaxParams != undefined ) ajaxURL += "&"+args.ajaxParams;
	if ( args.closeFunc != undefined ) ajaxURL += "&closefunc="+encodeURI(args.closeFunc);

	// "Bitte warten" einblenden
	ifjs_wait( args.outID, true );
	
	new Ajax.Request(ajaxURL, {
		method:'get',
		onSuccess: function(transport) {
			// AJAX-request succeeded
			txt = (transport.responseText || "Unknown error!");
			ifjs_tellAFriend_responseHandler(ifCode, args, txt);
		},
		onFailure: function() { 
			// Use non-ajax-URL if AJAX fails
			location.href="/member/tellafriend/"+ifCode; 
		}
	});			

	return false;
}

function ifjs_tellAFriend_responseHandler(ifCode, args, text) {	
	$(args.outID).innerHTML = text;
	initEffects();
	
	// Unlock operations for this ifCode!
	womanLock.unset(ifCode);
}

function ifjs_tellAFriend_submit( ifCode, uid ) {
	args = argumentStorage.get(uid);
	if ( args == undefined ) {
		alert ( "Es ist ein Fehler aufgetreten!" );
		return;
	}
	
	elemOut = $(args.outID);
	if ( elemOut == undefined ) {
		alert("ifjs_tellAFriend_submit: outID missing/invalid!");
		return;
	}
	
	// Check if this IFCode is locked
	tmp = womanLock.get(ifCode);
	if ( !(tmp == undefined)) return false;
	
	// Lock operations for this ifCode!
	womanLock.set(ifCode, 1);

	// Store parameters
	postParameters = $('taf_form_' + uid).serialize(true);

	// "Bitte warten" einblenden
	ifjs_wait( args.outID, true );
	
	ajaxURL = "/member/tellafriend/";
	ajaxURL	+= ifCode+"?ajaxmode=1&uid=" + uid;
	if ( args.ajaxParams != undefined ) ajaxURL += "&"+args.ajaxParams;
	if ( args.closeFunc != undefined ) ajaxURL += "&closefunc="+encodeURI(args.closeFunc);
	
	new Ajax.Request(ajaxURL, {
		parameters: postParameters,
		onSuccess: function(transport) {
			// AJAX-request succeeded
			txt = (transport.responseText || "Unknown error!");
			ifjs_tellAFriend_responseHandler(ifCode, args, txt);
		},
		onFailure: function() { 
			// Use non-ajax-URL if AJAX fails
			alert("Es gibt leider Probleme beim AJAX-Aufruf!"); 
		}
	});
	
	return false;
}

function ifjs_init() {
	// Hover-Effekte
	initEffects();
	
	// Trim-Funktionen für Strings definieren
	String.prototype.ltrim = function () { return (this.replace(/^\s+/,"")); };
	String.prototype.rtrim = function () { return (this.replace(/\s+$/,"")); };
	String.prototype.trim = function () { return (this.replace(/\s+$/,"").replace(/^\s+/,"")); };
	
	//Maybe this could be done shorter, but I hope checking IE too makes it more reliable
	Prototype.Browser.IE6 = Prototype.Browser.IE && parseInt(navigator.userAgent.substring(navigator.userAgent.indexOf("MSIE")+5)) == 6; 
	Prototype.Browser.IE7 = Prototype.Browser.IE && parseInt(navigator.userAgent.substring(navigator.userAgent.indexOf("MSIE")+5)) == 7; 
	Prototype.Browser.IE8 = Prototype.Browser.IE && !Prototype.Browser.IE6 && !Prototype.Browser.IE7; 
	
	// Resize des Nachrichtenbereichs
	if ( ($("showMSGContentArea") != undefined) && (Prototype.Browser.IE6) ) {
		
		ifjs_resizeElementHeightWithWindow( $("showMSGContentArea"), -50 );
		
		Event.observe(document.onresize ? document : window, 'resize', function(event){
			ifjs_resizeElementHeightWithWindow( $("showMSGContentArea"), -50 );
		});		
	}

	// JS Detection
	ifjs_jsDetection();
	
	// Bestellte Funktionen (DOM-Ready-Simulation) ausführen
	for (i=0; i< onDOMReady.length; i++) {
		func = onDOMReady[i];
		func();
	}
	
	// Google-Analytics Cross-Domain-Events registrieren
	try {
		var domainName = location.href.substr(0, 
			location.href.indexOf("/", location.href.indexOf(".")) 
		);
		$$('a').each(function(elem) {
			if (! elem.href) return;
			if (elem.href.substr(0,domainName.length) == domainName) return; // Nix falls Domain gleich
			if (elem.href.substr(elem.href.length-4) == '.jpg') return; // Keine Links zu Bildern
			if (elem.rel && elem.rel != "") return; // Lightbox ausnehmen
			if (elem.href.substr(0,10) == "http://pix") return; // Bildserver ausnehmen
			if (elem.href.indexOf('interfriendship.') == -1) return; // Nur IF-Domains!
			
			// Link mit Domainwechsel!
			var theURL = elem.href;
			elem.observe('click', function(e) {
				try {
					pageTracker._link(theURL);
				} catch(err) {}
			});
		});
		$$('form').each(function(elem) {
			if (! elem.action) return;
			if (elem.action.substr(0,domainName.length) == domainName) return;
			if (elem.action.substr(0,10) == "http://pix") return; // Bildserver ausnehmen
			if (elem.action.indexOf('interfriendship.') == -1) return; // Nur IF-Domains!
			
			// Formular mit Domainwechsel!
			var myFunc = function(e) {
				try {
					pageTracker._linkByPost(this);
				} catch(err) {}
			};
			elem.observe('submit', myFunc.bindAsEventListener(elem));
		});
	} catch(err) {}
}

var onDOMReady = new Array();
function addOnDOMReady(f) {
	onDOMReady[onDOMReady.length] = f;
}

function ifjs_resizeElementHeightWithWindow( elem, offset ) {
	
	h = 0;
	if  ( window.innerHeight ) h = window.innerHeight;
	else {
		if ( document.documentElement.clientHeight ) h = document.documentElement.clientHeight;
		if ( (h > 0) && (document.body.clientHeight) ) h = document.body.clientHeight;
	}	
	
	h -= $(elem).cumulativeOffset().top;
	h += offset;

	$(elem).setStyle( { "height" : h + "px" } );		
}

function initEffects() {
	
	// Form-Buttons per Javascript skinnen (notwendig für IE 6 [alles] und IE 7 [active])
	myArray = $$('input.button-1', 'input.button-2', 'input.button-3'
			, 'input.button-4', 'input.button-5', 'input.button-6'
			, 'input.button-7', 'input.button-pay'
			, 'button.button-1', 'button.button-2', 'button.button-3'
			, 'button.button-4', 'button.button-5', 'button.button-6'
			, 'button.button-7', 'button.button-pay');
	
	for (var index = 0, len = myArray.length; index < len; ++index) {
		var item = myArray[index];
		
		if ($(item).ifButtonHoverEffectRegistered) continue;
		$(item).ifButtonHoverEffectRegistered = true;
		
		$(item).observe('mouseover', function(event){
			tmp = this.getStyle('backgroundImage');
			pos0 = tmp.lastIndexOf('/');
			pos1 = tmp.indexOf('_', pos0);
			pos2 = tmp.lastIndexOf('.');

			l = (tmp.indexOf('pay') >= 0) ? 4 : 2;
			tmp2 = tmp.substring(0, pos1+l) + "_hover" + tmp.substring(pos2);
			this.setStyle({
				'backgroundImage' : tmp2 
			});
 
		}); 
		$(item).observe('mousedown', function(event){
			tmp = this.getStyle('backgroundImage');
			pos0 = tmp.lastIndexOf('/');
			pos1 = tmp.indexOf('_', pos0);
			pos2 = tmp.lastIndexOf('.');
			
			l = (tmp.indexOf('pay') >= 0) ? 4 : 2;
			tmp2 = tmp.substring(0, pos1+l) + "_down" + tmp.substring(pos2);
			this.setStyle({
				'backgroundImage' : tmp2 
			});
		}); 
		$(item).observe('mouseup', function(event){
			tmp = this.getStyle('backgroundImage');
			pos0 = tmp.lastIndexOf('/');
			pos1 = tmp.indexOf('_', pos0);
			pos2 = tmp.lastIndexOf('.');
			
			l = (tmp.indexOf('pay') >= 0) ? 4 : 2;
			tmp2 = tmp.substring(0, pos1+l) + tmp.substring(pos2);
			this.setStyle({
				'backgroundImage' : tmp2 
			});
		}); 
		$(item).observe('mouseout', function(event){
			tmp = this.getStyle('backgroundImage');
			pos0 = tmp.lastIndexOf('/');
			pos1 = tmp.indexOf('_', pos0);
			pos2 = tmp.lastIndexOf('.');
			
			l = (tmp.indexOf('pay') >= 0) ? 4 : 2;
			tmp2 = tmp.substring(0, pos1+l) + tmp.substring(pos2);
			this.setStyle({
				'backgroundImage' : tmp2 
			});
		});
	}
	
	// Hover-Effekt für Bilder (Tausch von _normal und _hover-Bildern)
	myArray = $$('img.imgHoverEffect', 'input.imgHoverEffect');
	for (var index = 0, len = myArray.length; index < len; ++index) {
		var item = myArray[index];
		
		if ($(item).ifImgHoverEffectRegistered) continue;
		$(item).ifImgHoverEffectRegistered = true;
		
		$(item).observe('mouseover', function(event) {
			this.src=this.src.replace(/_normal/, '_hover');
		}); 
		$(item).observe('mouseout', function(event){
			this.src=this.src.replace(/_hover/, '_normal');
		});
	}
	
	// Hover-Effekt für Tabellenzeilen definieren
	myArray = $$('tr.hoverTR');
	for (var index = 0, len = myArray.length; index < len; ++index) {
		var item = myArray[index];
		if ($(item).ifTableHoverEffectRegistered) continue;
		$(item).ifTableHoverEffectRegistered = true;
		
		$(item).observe('mouseover', function(event) {
			if ( $(this).ifIsHovered ) return;
			$(this).ifIsHovered = true;
			$(this).addClassName('hoveredTR');
		}); 
		$(item).observe('mouseout', function(event){
			$(this).ifIsHovered = false;
			$(this).removeClassName('hoveredTR');
		});		
	}
	
	// Tooltips registrieren: title im img-Tag ist ID des ToolTip-DIVs! 
	myArray = $$('.tooltip');
	for (var index = 0, len = myArray.length; index < len; ++index) {
		var item = myArray[index];
		
		if ($(item).ifToolTipRegistered) continue;
		$(item).ifToolTipRegistered = true;
		
		if ( item.readAttribute("id") == null ) continue;
		if ( item.readAttribute("id") == "" ) continue;
		
		var useAutoID = false;
		var theID = "";
		
		if ( item.readAttribute("title") == null ) useAutoID=true;
		else if ( item.readAttribute("title") == "" ) useAutoID=true;
		else {
			parts = item.readAttribute("title").split(" ");
			var tmpID = parts[parts.length-1];		
			if ($(tmpID) == undefined) useAutoID=true;
			else theID = tmpID;
		}
		
		if ( useAutoID ) {
			var tmpID = item.readAttribute("id").replace(/i_/, "tt_");
			if ($(tmpID) == undefined) continue;
			theID = tmpID;
		}
		
		new Tooltip(item.readAttribute("id"), theID);
		item.writeAttribute("title", "");
	}
}


// * * * * * * * * * * * * * * * * * * * * * *
// * * * * * * * * * * * * * * * * * * * * * *
// HELPER FUNCTIONS
//* * * * * * * * * * * * * * * * * * * * * *
//* * * * * * * * * * * * * * * * * * * * * *

function ifjs_getUniqueID() {
	a = Math.random();
	a = 10000*a;
	a = Math.round(a);
	
	zeit = new Date();
	secs = zeit.getTime();
	ms = zeit.getMilliseconds();

	uid = secs + "s" + ms + "a" + a;
	
	return uid;
}

function ifjs_wait( elemID, fullSize ) {
	elemOut = $(elemID);
	if ( elemOut == undefined ) return;
	
	t  = "";
	if (fullSize) t += '<div class="wcard_fullsizeajax_inner">';
	t += '<div align="center">';
	t += '<br /><br /><br />';
	t += 'Bitte warten...';
	t += '</div>';
	if (fullSize) t += '</div>';
		
	elemOut.innerHTML = t;
}

function getCookie( varName ) {
	myArray = document.cookie.toString().split(";");
	for (var index = 0, len = myArray.length; index < len; ++index) {
		tmps = myArray[index].split("=", 2);
		var cKey = tmps[0].ltrim();
		var cValue =  tmps[1];
		if (cKey == varName) return cValue;
	}
	return undefined;
}

var lastJSDetection = 0;
function ifjs_jsDetection() {
	var jsEnabledCookie = getCookie('jsEnabled');
	var tmpDate = Math.floor( new Date().getTime() / 1000 );
	
	var reSet = false;	
	if ( jsEnabledCookie == undefined ) reSet=true;
	if (! reSet) {		
		if ( jsEnabledCookie < tmpDate - 600 ) reSet=true;
	}

	if ( reSet ) {
		if ( tmpDate - lastJSDetection >= 600 ) {
			lastJSDetection = tmpDate;
			new Ajax.Request("/jsdetection.php?dummy="+tmpDate, { method:'get' });
		}		
	}
	
	window.setTimeout( 'ifjs_jsDetection()', 10000 );
}

function setCaretPosition(elemId, caretPos) {
    var elem = document.getElementById(elemId);

    if(elem != null) {
        if(elem.createTextRange) {
            var range = elem.createTextRange();
            range.move('character', caretPos);
            range.select();
        }
        else {
            if(elem.selectionStart) {
                elem.focus();
                elem.setSelectionRange(caretPos, caretPos);
            }
            else
                elem.focus();
        }
    }
}