/**
 * Applikasjonskode for ComLogin
 * 
 * @author Tommy Valand 
 */

window.addEvent('domready',  function(){
	if( document.location.href.search( /login\?openform/i ) > -1 ){ return; }
	
	switch( ComLogin.pageType ){
		case 'login': new ComLogin.LoginPage(); break;
		case 'User': new ComLogin.UserPage(); break;
		case 'Profile': new ComLogin.ProfilePage(); break;
		default: new ComLogin.Page(); break;
	}
});

/**
 * Generell funksjonalitet for alle sider
 */
ComLogin.Page = new Class({
	initialize: function(){	
		this.form = $(document.forms[0]);
		
		if( ComLogin.editMode ){ 
			// Fjerner domino-generert submit-knapp
			var submitButton = document.getElement('input[value=Submit]')
			if( submitButton ){ submitButton.dispose(); }
			
			// Legger på validering
			this.validator = new FormValidator.Inline( $(document.forms[0]),{ errorPrefix: 'Feil: ' });
		}
	}
});

/**
 * Funksjonalitet for loginside
 */
ComLogin.LoginPage = new Class({
	Extends: ComLogin.Page,
	initialize: function(){
		this.parent();
	
		// Legger på event-lyttere		
		this.form.addEvent( 'submit', this.rememberLogin.bindWithEvent( this ) );
		$('remember_me').addEvent( 'click', this.rememberLogin.bindWithEvent( this ) );	
		
		this.form.addEvent( 'submit', this.rememberLogin.bindWithEvent( this ) );
		
		// Sjekker logincookie		
		var loginCookie = Cookie.read( 'login' );
		if( !loginCookie || !this.username() ){ return; }
		
		var loginValues = loginCookie.split( '|' );
		this.form.username.value = loginValues[0];
		this.form.password.value = loginValues[1];
		this.form.remember_me.checked = loginValues[2];
	},	
	rememberLogin: function(){		
		if( this.rememberUser() ){			
			Cookie.write( 'login', [ this.username(), this.password(), this.rememberUser()].join('|'), {duration: 365} );			
		}
		else{
			Cookie.dispose( 'login' );
		}
	},
	username: function(){ return this.form.username.value; },
	password: function(){ return this.form.password.value; },
	rememberUser: function(){ return this.form.remember_me.checked; }
});

/**
 * Funksjonalitet for Profile-skjema
 */
ComLogin.ProfilePage = new Class({
	Extends: ComLogin.Page,
	initialize: function(){
		this.parent();
		
		if( ComLogin.editMode && !ComLogin.isNewDoc ){
			$( 'delete' ).addEvent( 'click', function( event ){ 
				if( confirm( 'Er du sikker på at du vil slette profil' ) ){
					// Setter at dokument ikke skal lagres -> dokument kan slettes i WQS
					document.forms[0].SaveOptions.value = '0';					
				} else { 
					event.stop(); 
				}
			});		
		}
	}
});

/**
 * Funksjonalitet for User-skjema
 * 
 */ 
ComLogin.UserPage = new Class({ 
	Extends: ComLogin.Page,
	initialize: function(){
		this.parent();
		
		this.addValidation();
		
		if( ComLogin.editMode ){
			if( !ComLogin.isNewDoc ){
				$( 'delete' ).addEvent( 'click', function( event ){ 
					if( confirm( 'Er du sikker på at du vil slette bruker' ) ){
						// Setter at dokument ikke skal lagres -> dokument kan slettes i WQS
						document.forms[0].SaveOptions.value = '0';					
					} else { 
						event.stop(); 
					}
				});
			}
		}
	},
	addValidation: function(){
		this.validator.add( 'unique-username', {			
			errorMsg: function( field ){ if(!field.value){ return; } return 'Brukernavnet er allerede i bruk.'; },
			test: function( field ){				
				var username = field.value;
				if( !username ){ return; }
				
				var validationRequest = new Request({
					method: 'get',
					url: ComLogin.appPath + '/validation?OpenAgent&type=unique-username&username=' + username,
					async: false 
				});
				validationRequest.send();
				
				// Gyldig brukernavn dersom respons er tom/samme unid som dokumentet man står på
				var userUnid = validationRequest.response.text.replace( /\s/g, '' );				
				return ( userUnid === ComLogin.unid || userUnid === '' );
			}
		} );		
	}
});

/**
 * Generelle valideringer
 */
FormValidator.addAllThese([
	[ 'required', { errorMsg: 'Dette feltet kan ikke være tomt.', test: function( field ){ return field.value !== ''; } }]
]);

/* Sender mail til konsulent ved JavaScript-feil */
function reportError(message, url, lineNumber){	
	if( message == 'Error loading script' ){ return; }
	var isFrameset = (parent !== self);
	var framesetUrl = '';
	if (isFrameset) {
		try {
			framesetUrl = top.location.href;
		} catch (e) { framesetUrl = 'external'; }
	}	
	new Request({
		url: ComLogin.appPath + '/reporterror?OpenAgent',
		method: 'post',
		data: 'error=' + [message, url, lineNumber].join(',')
			+ '&location=' + document.location.href
			+ '&referrer=' + (document.referrer || ''),
		headers: {			
			frameset_url: framesetUrl
		}
	}).send();
}

ComLogin.Error = {
	postError: function( data ){
		var isFrameset = (parent !== self);
		var framesetUrl = '';
		if (isFrameset) {
			try {
				framesetUrl = top.location.href;
			} catch (e) { framesetUrl = 'external'; }
		}
		
		new Request({
			url: '/' + db + '/reporterror?OpenAgent',
			method: 'post',
			data: data,
			headers: {			
				frameset_url: framesetUrl
			}
		}).send();
	},
	
	// Sender mail til konsulent ved uhåndterte JavaScript-feil
	reportUnhandled: function (message, url, lineNumber){
		if( window.console ){ console.dir( arguments ); }
		
		// Dersom JS tryner -> vis innhold
		var contentEl = document.getElementById( 'content' );
		if( contentEl ){ contentEl.className = 'loaded'; }
		
		if( message == 'Error loading script' ){ return; }
		
		var errorObj = {
			message: message,
			url: url,
			lineNumber: lineNumber,
			location: document.location.href,
			referrer: ( document.referrer || '' )
		}
		
		var htmlItems = [];
		for( propertyName in errorObj ){
			htmlItems.push( '<div><strong>' + propertyName + ': </strong>' + errorObj[ propertyName ]  + '</div>' );					
		}
					
		ComPublish.Error.postError( htmlItems.join('') );
	}
};

window.onerror = ComLogin.Error.reportUnhandled;
