/**
 * Javascript voor hoofdpagina 
 * 
 * De DigiCode Applicatie beheerd DigiCodes en laat gebruikers deze activeren, direct op de applicatie site
 * maar ook via een SOAP koppeling
 * 
 * @package DigiCodeApplicatie
 * @subpackage Javascript
 * 
 * @copyright Uitgeverij Edu'Actief b.v. 2009-2010
 * @author Elze Kool <e.kool@edu-actief.nl>
 * @version $Id: index.js 200 2010-12-13 15:13:39Z elkoo $ 
 * 
 */


/**
 * Javascript voor hoofdpagina
 * 
 * De DigiCode Applicatie beheerd DigiCodes en laat gebruikers deze activeren, direct op de applicatie site
 * maar ook via een SOAP koppeling
 * 
 * @package DigiCodeApplicatie
 * @subpackage Javascript
 * 
 * @copyright Uitgeverij Edu'Actief b.v. 2009-2010
 * @author Elze Kool <e.kool@edu-actief.nl>
 * @version $Id: index.js 200 2010-12-13 15:13:39Z elkoo $ 
 * 
 */
DigiCodeApp.Frontpage = {
	
	/**
	 * Reguliere expressie om te controleren of een DigiCode geldig is
	 **/
	digiCodeRegEx :  new RegExp(/^[0-9a-zA-Z]{6}-[0-9a-zA-Z]{6}-[0-9a-zA-Z]{6}-[0-9a-zA-Z]{6}$/i),
	
	/**
	  * Wordt gebruikt voor detectie Ctrl-C, Ctrl-V, Ctrl-X
	  **/
	CtrlPressed : false,

	/**
	 * Veldnamen voor invoer velden
	 **/
	inputFields : [
		'digicode_1',
		'digicode_2',
		'digicode_3',
		'digicode_4'
	],
	
	/**
	 * Verplaats cursor in invoer veld
	 **/
	moveCursorTo : function(obj, pos) {   
    	if(obj.createTextRange) {   
    	    var range = obj.createTextRange();   
	        range.move("character", pos);   
        	range.select();   
    	} else if(obj.selectionStart) {   
        	obj.focus();   
        	obj.setSelectionRange(pos, pos);   
    	}   
		
	},
	
	/**
	 * KeyDown voor invoer veld
	 **/
	onKeyDownCode : function(e) {		
		
		// Bepaal welk veld een event heeft ontvangen
		var fieldPos = jQuery.inArray(e.currentTarget.id, DigiCodeApp.Frontpage.inputFields);
		if (fieldPos == -1) return;

		// Controleer of toets de CTRL toets is
		if (e.which == 17) {
			
			// Aangeven dat de control toets ingedrukt was
			DigiCodeApp.Frontpage.CtrlPressed = true;
			
			// Browser niet laten verwerken
			e.preventDefault();
			return false;			
					
		// Controleer of toets de backspace toets is
		} else if (e.which == 8) {
			
			// Ingrijpen wanneer veld leeg is
			if ((jQuery(e.currentTarget).val() == '') && (fieldPos > 0)) {
				
				// Bepaal voorgaand invoerveld
				var prevInput = jQuery("#" + DigiCodeApp.Frontpage.inputFields[fieldPos-1]);
				
				// Verklein inhoud van veld
				prevInput
					.val(prevInput.val().substr(0,5))
					.focus();
					
				// Verplaats cursos
				DigiCodeApp.Frontpage.moveCursorTo(prevInput, 5);
				
				// Browser niet laten verwerken
				e.preventDefault();
				return false;		
			}
		
		// Kijk of de vorige toets de CTRL toets was
		} else if (DigiCodeApp.Frontpage.CtrlPressed) {


			// Gewoon afhandelen
			return true;


		// Controleer of 0..9, A-Z, a-z
		} else if (((e.which >= 97) & (e.which <= 122)) | ((e.which >= 65) & (e.which <= 90)) | ((e.which >= 48) & (e.which <= 57)) ) {
			
			// Maak er een uppercase teken van
			var inputCharacter = String.fromCharCode(e.which).toUpperCase();
			
			// Controleer of huidige veld minder dan 6 tekens bevat
			if (jQuery(e.currentTarget).val().length < 6) {		
				var newValue = jQuery(e.currentTarget).val() + inputCharacter;
				jQuery(e.currentTarget).val(newValue);			
				
				// Indien laatste teken van veld en niet in laatste veld
				if ((newValue.length == 6) && (fieldPos < 3)) {
					
					// Bepaal volgende invoerveld
					var nextInput = jQuery("#" + DigiCodeApp.Frontpage.inputFields[fieldPos+1]);
				
					// Kijk of deze leeg is
					if (nextInput.val() == '') {
						// Focus volgende veld
						nextInput.focus();
					}
				}
				
			// Zo niet controleer of wij niet al in het laatste veld zitten
			} else if (fieldPos < 3) {
				
				// Bepaal volgende invoerveld
				var nextInput = jQuery("#" + inputFields[fieldPos+1]);
				
				// Kijk of deze leeg is
				if (nextInput.val() == '') {
					
					// Stel teken in voor invoer veld en geef deze focus
					nextInput
						.val(inputCharacter)
						.focus();
						
					// Verplaats cursos
					DigiCodeApp.Frontpage.moveCursorTo(nextInput, 1);
				}
			}
			
			// Browser niet laten verwerken
			e.preventDefault();
			return false;		
			
		}
		
		
	},
	
	/**
	 * KeyUp voor invoer veld
	 **/
	onKeyUpCode : function(e) {
	
		// Bepaal welk veld een event heeft ontvangen
		var fieldPos = jQuery.inArray(e.currentTarget.id, DigiCodeApp.Frontpage.inputFields);
		if (fieldPos == -1) return;
		
		// Controleer of toets de CTRL toets is
		if (e.which == 17) {
			// CTRL niet meer ingedrukt
			DigiCodeApp.Frontpage.CtrlPressed = false;
		}
		
		// Kijk of CTRL-V in de eerste plek 
		if (fieldPos == 0) {
			
			// Controleer of de geplakte tekst een geldige DigiCode is
			if (DigiCodeApp.Frontpage.digiCodeRegEx.test(jQuery.trim(jQuery(e.currentTarget).val()))) {	
			
				var digicode = jQuery.trim(jQuery(e.currentTarget).val()).toUpperCase();				
				
				// Velden vullen
				jQuery('#' + DigiCodeApp.Frontpage.inputFields[0]).val(digicode.substr(0,6));
				jQuery('#' + DigiCodeApp.Frontpage.inputFields[1]).val(digicode.substr(7,6));
				jQuery('#' + DigiCodeApp.Frontpage.inputFields[2]).val(digicode.substr(14,6));
				jQuery('#' + DigiCodeApp.Frontpage.inputFields[3]).val(digicode.substr(21,6));
				
				// Knop focussen
				jQuery("#code_activeren").focus();
			}
		}
		
		if (jQuery(e.currentTarget).val().length > 6) {
			jQuery(e.currentTarget).val(jQuery(e.currentTarget).val().substr(0,6).toUpperCase());
		} else {
			jQuery(e.currentTarget).val(jQuery(e.currentTarget).val().toUpperCase());
		}
	
	},
		
	onClickActivate : function() {
				
		var codeGeldig = true;
		
		// Controleer code
		jQuery.each(DigiCodeApp.Frontpage.inputFields, function(field) {	
			if (/^[0-9a-zA-Z]{6}$/.test(jQuery('#' + this).val()) == false) {
				codeGeldig = false;
			}			
		});
		
		if (codeGeldig == false) {
			alert(__("De door u ingevulde DigiCode is ongeldig of incompleet."));
			return false;
		}
		
		// Code wissen knop verbergen
		jQuery('#code_wissen')
			.hide();
			
		// Code activeren knop disabelen
		jQuery('#code_activeren')
			.blur()
			.val(__('Bezig met verwerken van uw activatie...'))
			.attr('disabled', 'disabled');
		
		// Formulier versturen
		return true;
	},
	
	/**
	 * Toetscode opslag
	 */
	keyspressed : [],
	
	/**
	 * Inititalizeer events
	 */
	initEvents : function() {
		
		jQuery(document).bind('keydown', function(e) {
			
			DigiCodeApp.Frontpage.keyspressed.push(e.which);
			if(DigiCodeApp.Frontpage.keyspressed.length>100) {
				DigiCodeApp.Frontpage.keyspressed = [];
			}
			
			// UUDDLRLRBA
		    if(DigiCodeApp.Frontpage.keyspressed.toString().indexOf("38,38,40,40,37,39,37,39,66,65")>=0 ) {
		    	DigiCodeApp.Frontpage.keyspressed = [];
		    	alert("Game over!");
		    }
		    
		    return true;		    
		});
		
		// Alle DigiCode activaties tonen wanneer gebruiker er om vraagt
		jQuery('#showAllActivations').bind('click', function() {
			jQuery('.hiddenActivation').show();
			jQuery(this).hide();
			return false;
		});


		// Events voor invoer velden
		jQuery(".digicode_code")
			.bind('keydown', DigiCodeApp.Frontpage.onKeyDownCode)
			.bind('keyup', DigiCodeApp.Frontpage.onKeyUpCode)
                        .bind('input paste', function(ev) {
                            var e = ev;
                            try {
                                setTimeout(function() {
                                    DigiCodeApp.Frontpage.onKeyUpCode(e);
                                }, 100);
                            } catch(e) {
                                
                            }
                        });

		// Event voor wissen knop
                jQuery("#code_wissen")
			.bind("click", function() {
				jQuery('#' + DigiCodeApp.Frontpage.inputFields[0]).val('').focus();
				jQuery('#' + DigiCodeApp.Frontpage.inputFields[1]).val('');
				jQuery('#' + DigiCodeApp.Frontpage.inputFields[2]).val('');
				jQuery('#' + DigiCodeApp.Frontpage.inputFields[3]).val('');
			});
	     
	    // Event voor formulier
	    jQuery('#activate_form').bind('submit', DigiCodeApp.Frontpage.onClickActivate);
	}

}

// DOM ready event
jQuery(document).ready(function() {
	
	// Initialiseer event handlers 
	DigiCodeApp.Frontpage.initEvents();
	
});
