
/***************************************************************
*  Copyright notice
*
*  (c) 2006 WIV GmbH (info@wiv-gmbh.de)
*  All rights reserved
*
*
***************************************************************/
/**
 * loginContainer-functions-javascript for the 'Pferde.de-Relaunch 2006'-project
 *
 * @author	Andreas Richter <richter@wiv-gmbh.de>
 */



function getXMLValue(responseText, valueKey) {
	var regExpValue = '<'+valueKey+'>(.*)<\/'+valueKey+'>';
	var xmlRegExp = new RegExp(regExpValue);
	var xmlValue = xmlRegExp.exec(responseText);
	if (xmlValue && xmlValue.length > 1 && xmlValue[1]) {
		return xmlValue[1];	
	}
	return '';
}

function getXMLAttribute(responseText, attributeKey) {
	var regExpValue = attributeKey+'="([^"]*)"';
	var xmlRegExp = new RegExp(regExpValue);
	var xmlValue = xmlRegExp.exec(responseText);
	if (xmlValue && xmlValue.length > 1 && xmlValue[1]) {
		return xmlValue[1];	
	}
	return '';	
}

function inArray(needle, haystack) {
	for (c=0; c<haystack.length; c++) {
		if (haystack[c]==needle) {
			return true;
		}
	}
	return false;
}

function getXMLObjects(responseText, containerKey, objectKey, valueKeys, debug) {
	responseText = responseText.replace(/>\s+</gim,'><');
	if (debug) {
		alert(responseText);
	}
	var objects = new Array();
	var containerRegExpValue = '<'+containerKey+'>(.*)<\/'+containerKey+'>';
	var containerRegExp = new RegExp(containerRegExpValue, "gim");
	var containerResult = containerRegExp.exec(responseText);
	if (containerResult && containerResult.length > 1 && containerResult[1]) {
		activeKey = '0';
		activeObjectKey = '';
		var object = new Object();
		
		var elements = ('>'+containerResult[1]+'<').split('><');
		if (debug) {		
			alert(elements.length);
		}
		for (var c=0; c<elements.length; c++) {
			
			cElement = elements[c];
			if (cElement) {
				if (cElement==objectKey) {
					var object = new Object();
					activeObjectKey = cElement;
					if (debug) {
						alert('found object'+activeObjectKey);
					}
					continue;
				}
				if (cElement=='/'+objectKey) {
					activeObjectKey = '';
					objects.push(object);
					continue;
				}
				if (activeObjectKey==objectKey) {
					cResult = cElement.match(/^([^>]+)>/);
					if (cResult && cResult.length>1 && inArray(cResult[1],valueKeys)) {
						object[cResult[1]] = cElement.replace(/^[^>]+>/,'').replace(/<\/.+$/,'');
						continue;
					}
					if (inArray(cElement, valueKeys)) {
						activeKey = cElement;
						continue;
					}
					if (inArray(cElement.replace(/\//,''), valueKeys)) {
						continue;
					}
					else {
						object[activeKey] = cElement;
					}
				}
			}
		}

	}
	
	return objects;
}


var forms_standardMessageContainer = false;
var announcementFormPaymentArea = false;
var announcementFormUserContactData = false;
/*
 * the login class
 */

function loginContainer_loginObject() {
	
	this.userId = false;
	this.userGroup = 0;
	this.adminBarId = false;
	this.adminBarUserId = false;
	
}

var mainLogin = new loginContainer_loginObject();


/*
 * the form class 
 *
 */


function loginContainer_Form(id, classNamePrefix, loginCheckId) {
	this.id					= id
	this.ready 				= false;
	this.classNamePrefix	= classNamePrefix;
	this.loginCheckId		= loginCheckId;

	
	this.user				= false;
	
	this.checkLogin = function() {
		if (document.getElementById(this.loginCheckId)) {
			this.user = true;
		}
		else {
			this.user = false;
		}
	}
	
	this.isReady = function() {
		for (area in this.areas) {
			if (!this.areas[area].isReady()) {
				return false;
			}
		}
		return this.user;
	}	
	

}


/*
 * object for form buttons
 *
 */

function loginContainer_Button(id) {
	this.id 			= id;

	this.disabled		= true;	
	
	this.enable = function() {
		this.disabled = false;
		document.getElementById(this.id).src 			= document.getElementById(this.id).src.replace(/Disabled\./,"Inactive.");
	}

	this.disable = function() {
		this.disabled = true;
		document.getElementById(this.id).src 			= document.getElementById(this.id).src.replace(/Inactive\./,"Disabled.");
	}
	
	
}

loginContainerLoginButton = new loginContainer_Button('wivPortalSystem_loginContainer_button');

/*
 * check login form
 *
 */

function loginContainer_checkLoginForm(username, password, loginButton) {
	if (username.value.length>0 && password.value.length>0) {
		if (loginButton.disabled) {
			loginButton.enable();
		}
	}
	else {
		if (!loginButton.disabled) {
			loginButton.disable();
		}
	}
}




/*
 * Button Mouse-Over/Out-functions
 *
 */

function loginContainer_buttonOver(button) {
	document.getElementById(button.id).src 		= document.getElementById(button.id).src.replace(/Inactive\./,"Active.");
}

function loginContainer_buttonOut(button) {
	document.getElementById(button.id).src 		= document.getElementById(button.id).src.replace(/Active\./,"Inactive.");
}




/*
 * object for Ajax Messages
 *
 */

function loginContainer_MessageContainer(load, complete, failure, loggedIn, loggedOut) {
	this.load 			= load;
	this.complete 		= complete;
	this.failure 		= failure;
	
	this.loggedIn		= loggedIn;
	this.loggedOut		= loggedOut;	
}

var loginContainer_standardMessageContainer = new loginContainer_MessageContainer(false,false,false,false,false);




/*
 * Ajax login functions
 *
 */


function loginContainer_login(emailField, passwordField, sendURL, prefixId, loadMessageId, failureMessageId, loggedInAreaId, loggedOutAreaId, userNameId) {
	//var password = MD5(passwordField.value);
	password = passwordField.value;
	passwordField.value = '';

	loginContainer_standardMessageContainer.load 		= loadMessageId;
	loginContainer_standardMessageContainer.failure 	= failureMessageId;
	loginContainer_standardMessageContainer.loggedIn	= loggedInAreaId;
	loginContainer_standardMessageContainer.loggedOut	= loggedOutAreaId;

	var params = prefixId + '[username]=' + URLEncode(emailField.value) + '&' + prefixId + '[password]=' + URLEncode(password) + '&no_cache=1';
	document.getElementById(loginContainer_standardMessageContainer.load).style.display = 'block';
	
	new ajax(sendURL, {postBody:params,onComplete:function() {
		
		document.getElementById(loginContainer_standardMessageContainer.load).style.display = 'none';
		if (this.transport.responseText.search(/failure/)>=0) {
			document.getElementById(loginContainer_standardMessageContainer.failure).style.display = 'block';
		}
		else {
			loginContainer_loginSwitch(this.transport, loggedInAreaId, loggedOutAreaId, userNameId);
		}
	}});

}



function loginContainer_loginSwitch(ajax, loggedInAreaId, loggedOutAreaId, userNameId, noFormloginSwitch) {
	// uid
	mainLogin.userId = getXMLValue(ajax.responseText, 'uid');
	mainLogin.userGroup = getXMLValue(ajax.responseText, 'usergroup');
	
//	if (mainLogin.userId) {
		document.getElementById(loggedOutAreaId).style.visibility = 'hidden';
		document.getElementById(loggedInAreaId).style.visibility = 'visible';	
	
		
		// username
		textNode = document.getElementById(userNameId).firstChild;
		textLength = textNode.nodeValue.length;
		textNode.replaceData(0,textLength,getXMLValue(ajax.responseText, 'username'));	
		
		// ssid
		ssidCookieCode = getXMLValue(ajax.responseText, 'ssid');
		if (ssidCookieCode) {
			var eDate = new Date();
			var expires = eDate.getTime() + (3 * 60 * 60 * 1000);
			eDate.setTime(expires);
			
			document.cookie = '_SSID=; domain=pferde.de; path=/; expires=Thu, 01-Jan-70 00:00:01 GMT;';
			document.cookie = '_SSID=; domain=community.pferde.de; path=/; expires=Thu, 01-Jan-70 00:00:01 GMT;';
			cookiecode = '_SSID='+ssidCookieCode + '; domain=community.pferde.de; path=/; expires=' + eDate.toGMTString();
			document.cookie = cookiecode;
			cookiecode = '_SSID='+ssidCookieCode + '; domain=pferde.de; path=/; expires=' + eDate.toGMTString();
			document.cookie = cookiecode;	

		}
		
		// cookiecode
		cookiecode = getXMLValue(ajax.responseText, 'cookiecode');
		document.cookie = cookiecode;
		if (forms_standardMessageContainer && forms_standardMessageContainer.loggedIn && forms_standardMessageContainer.loggedOut && forms_standardMessageContainer.form) {
			document.getElementById(forms_standardMessageContainer.loggedIn).style.display = 'block';
			document.getElementById(forms_standardMessageContainer.loggedOut).style.display = 'none';
			forms_standardMessageContainer.form.refreshButtons();
			forms_standardMessageContainer.form.user = true;
			if (forms_standardMessageContainer.form.areas['user']) {
				forms_switchPageNumber(document.getElementById(forms_standardMessageContainer.form.areas['user'].pageNumberId),forms_standardMessageContainer.form.areas['user'].pageNumber,forms_standardMessageContainer.form.areas['user'].isReady());	
			}
			forms_standardMessageContainer.form.refreshButtons();
		}				
	
		if (mainLogin.adminBarId) {
			if (mainLogin.userGroup & 1 || mainLogin.adminBarUserId==mainLogin.userId) {
				document.getElementById(mainLogin.adminBarId).style.display = 'block';
			}
		}
		
		
		
		if (!noFormloginSwitch && announcementFormPaymentArea && announcementFormUserContactData) {
			forms_loginSwitch(ajax, announcementFormUserContactData, announcementFormPaymentArea);
		}
	//}
}




function loginContainer_logout(usernameFieldId, loggedInAreaId, loggedOutAreaId, logoutURL, prefixId) {

	document.cookie = 'PferdeDeLogIn=; domain=pferde.de; path=/; expires=Thu, 01-Jan-70 00:00:01 GMT;';
	document.getElementById(loggedOutAreaId).style.visibility = 'visible';
	document.getElementById(loggedInAreaId).style.visibility = 'hidden';	
	document.getElementById(usernameFieldId).value = '';
	document.getElementById(usernameFieldId).focus();

	var communitySession = document.cookie.match(/_SSID=([^;]*)/);
	if (communitySession && communitySession.length > 1 && communitySession[1]) {
		communitySessionId = communitySession[1];

		params = prefixId + '[sessionId]=' + communitySessionId;

		new ajax(logoutURL, {postBody:params,onComplete:function() {
		}});		
			
		document.cookie = '_SSID=; domain=.pferde.de; path=/; expires=Thu, 01-Jan-70 00:00:01 GMT;';
		document.cookie = '_SSID=; domain=community.pferde.de; path=/; expires=Thu, 01-Jan-70 00:00:01 GMT;';
	}
	
	if (forms_standardMessageContainer && forms_standardMessageContainer.loggedIn && forms_standardMessageContainer.loggedOut && forms_standardMessageContainer.form) {
		document.getElementById(forms_standardMessageContainer.loggedIn).style.display = 'none';
		document.getElementById(forms_standardMessageContainer.loggedOut).style.display = 'block';
		forms_standardMessageContainer.form.refreshButtons();
		forms_standardMessageContainer.form.user = false;
		if (forms_standardMessageContainer.form.areas['user']) {
			forms_switchPageNumber(document.getElementById(forms_standardMessageContainer.form.areas['user'].pageNumberId),forms_standardMessageContainer.form.areas['user'].pageNumber,forms_standardMessageContainer.form.areas['user'].isReady());	
		}
		forms_standardMessageContainer.form.refreshButtons();
	}
	mainLogin.userId = false;
	
}


function loginContainer_getSession(sessionId, sendURL, prefixId, loggedInAreaId, loggedOutAreaId, userNameId) {
	var params = prefixId + '[sessionId]=' + sessionId + '&no_cache=1';
	var loginResult = false;


	new ajax(sendURL, {postBody:params,onComplete:function() {

		if (this.transport.responseText.search(/failure/)>=0) {
			document.cookie = '_SSID=; domain=.pferde.de; path=/; expires=Thu, 01-Jan-70 00:00:01 GMT;';
			document.cookie = '_SSID=; domain=community.pferde.de; path=/; expires=Thu, 01-Jan-70 00:00:01 GMT;';	
			document.getElementById(loggedInAreaId).style.visibility = 'hidden';
			document.getElementById(loggedOutAreaId).style.visibility = 'visible';				
			loginResult = false;	

		}
		else {
			loginContainer_loginSwitch(this.transport, loggedInAreaId, loggedOutAreaId, userNameId);
			loginResult = true;
		}		

		if (announcementFormPaymentArea && announcementFormUserContactData) {
			forms_loginSwitch(this.transport, announcementFormUserContactData, announcementFormPaymentArea);
		} 
		else if (announcementFormPaymentArea) {
			forms_loginSwitch(this.transport, false, announcementFormPaymentArea);
		}
		
	}});
	

	return loginResult;
}

function loginContainer_pingSession(sessionId, sendURL, prefixId, loggedInAreaId, loggedOutAreaId, userNameId) {
	var params = 'no_cache=1&' + prefixId + '[sessionId]=' + sessionId;
	var pingResult = false;
	
	new ajax(sendURL, {postBody:params,onComplete:function() {

		if (this.transport.responseText.search(/failure/)>=0) {
			document.cookie = '_SSID=; domain=.pferde.de; path=/; expires=Thu, 01-Jan-70 00:00:01 GMT;';
			document.cookie = '_SSID=; domain=community.pferde.de; path=/; expires=Thu, 01-Jan-70 00:00:01 GMT;';	
			document.getElementById(loggedInAreaId).style.visibility = 'hidden';
			document.getElementById(loggedOutAreaId).style.visibility = 'visible';				
			pingResult = false;	
		}
		else {
			pingResult = true;
		}		
		
	}});
	

	return pingResult;
}