// CAIVIS(LDS) 2/11/09
// Clean out the hidden fields to reset upon user revist
document.getElementById("postBailOutPoint").value = 1;

// CAIVIS(LDS) 2/19/09
document.getElementById("previousInterest").value = "";
document.getElementById("previousDegree").value = "";


for ( var field in { firstName : 1, lastName : 1 } ){
    Twd.$( field ).Accept( /^[a-z\s]+$/i ).Replace(/^\D/i, function( m ){ return m.toUpperCase(); });
}

Twd.$( 'zip' ).Accept(/^[\w\s-]+$/i);

window.Labels = [
    // { expr : /UST/, out : 'US Territories' },
    // { expr : /USM/, out : 'US Armed Forces' },
    { expr : /.+/,  out : 'State' }
];

// Updates the list of states when the country is changed

window.statesCache = {};


// CAIVIS(LDS) 2/13/09
//  formfocus automatically focuses on the first visible input field on a form
var formfocus = function(formID) {
	
	if(document.getElementById(formID).length > 0) {
		
		var form = document.getElementById(formID)
		var formLength = form.length - 2;		
		var formElements = ["text", "checkbox", "radio", "select-one", "select-multiple", "textarea"];
		
		// loop over all form elements
		for (var j = 0; j < form.elements.length; j++) {
			// save element to a variable
			var field = form.elements[j];
			// loop over list of element types
			for(var x = 0; x < formElements.length; x++) {
				// if the element matches something on the list
				if (field.getAttribute("type") == formElements[x]) {
					// set focus
					field.focus();
					// leave now so we don't loop again and set focus on another element
					return true;
				}
			}
		}
	}

};


// CAIVIS(LDS) 2/11/09
// Store User Data function when user bail outs
//  var myBailoutPlan = function(close) {
//  	
//  	if (close == true) {
//  		
//  		if (document.getElementById("postBailOutPoint").value != FinalFormNumber && document.getElementById("postBailOutPoint").value != 1) {
//  	
//  			var FinalFormStep = "form-step" + FinalFormNumber;
//  	
//  			// Capture all user data so far
//  			document.getElementById("postEmail").value = document.getElementById("email").value;
//  			document.getElementById("postFirstname").value = document.getElementById("firstName").value;
//  			document.getElementById("postLastname").value = document.getElementById("lastName").value;
//  			document.getElementById("postMailing").value = document.getElementById("mailing").value;
//  			document.getElementById("postCountry").value = document.getElementById("country").value;
//  			document.getElementById("postState").value = document.getElementById("state").value;
//  			document.getElementById("postCustomState").value = document.getElementById("customState").value;
//  			document.getElementById("postCity").value = document.getElementById("city").value;
//  			document.getElementById("postZip").value = document.getElementById("zip").value;
//  			document.getElementById("postMajor").value = document.getElementById("interested").value;
//  			document.getElementById("postDegree").value = document.getElementById("degree").value;
//  			
//  			// Gets the fields of the 2 forms, from Step 1 and 2, and given json format
//  			var data  = Twd.collectFields( FinalFormStep );
//  			
//  			// if nothing is stored in name - do nothing
//  			// CAIVIS(LDS) 2/17/09
//  			if(document.getElementById("postFirstname").value == "" && document.getElementById("postLastname").value == "") {
//  			} else {
//  				// Makes a request using the method POST
//  		  	Twd.Ajax.Post( '/learning_wizard/StoreUserData.php', data, function (){} );
//  			}
//  
//  		}
//  	}
//  
//  };

// CAIVIS(LDS) 2/23/09
// BEGIN
window.onbeforeunload = function () {
	var bailout = Twd.captureUserData(true);
	if (bailout) {return false;}
};
// END

var onCountryChange = function()
{
    var handleStates = function( states )
    {
        var select = Twd.$( 'state' ).empty();

        if ( !( states instanceof Array ) ) {
            for ( var stateID in states ) {
                select.append( Twd.Create('option', { value : stateID }, states[ stateID ]) );
            }
        }

        var nextLi = select.parent('li').next();

        if ( select.hasChildren() ) {
            select.parent('li').removeClass('hidden');
            nextLi.addClass('hidden');
            Twd.$( 'customState' ).value('');
        }
        // If there is no rule to that country, shows a textbox to enter a new
        else {
            select.parent('li').addClass('hidden');
            nextLi.removeClass('hidden');

            if ( document.all ) {
                nextLi.addClass( 'IE' );
            }

            Twd.$( 'customState' ).element.focus();
        }
    };

    var onCountryID = function( countryID )
    {
        var label = Twd.$('lbl-state');

        for ( var i = 0; i < Labels.length; i++ ) {
            if ( Labels[ i ].expr.test( countryID ) ) {
                label.element.firstChild.nodeValue = Labels[ i ].out;
                break;
            }
        }

        return countryID;
    };

    var countryID = onCountryID( this.value() );

    if ( countryID in statesCache ) {
        handleStates( statesCache[ countryID ] );
    }
    else {
        Twd.Ajax.Post( '/learning_wizard/selectDinamic.php', { fn:'getCountriesStates', arg:countryID }, function( states )
        {
            handleStates( ( statesCache[ countryID ] = states ) );
        });
    }
};

Twd.$( 'country' ).addEvent( 'change', onCountryChange);

window.degreeCache = {};

var onChange = function()
{
    var handleDegrees = function( degrees )
    {
        var select = Twd.$( 'degree' ).empty();

        if ( !( degrees instanceof Array ) ) {
            for ( var degreeID in degrees ) {
                select.append( Twd.Create('option', { value : degreeID }, degrees[ degreeID ]) );
            }
        }
    };

    var programID = this.value();

    if ( programID in degreeCache ) {
        handleDegrees( degreeCache[ programID ] );
    }
    else {
        Twd.Ajax.Post( '/learning_wizard/selectDinamic.php', { fn:'getProgramsDegree', arg : programID }, function( degrees )
        {
            handleDegrees( ( degreeCache[ programID ] = degrees ) );
        });
    }
};

var interested = Twd.$('interested');
    interested.addEvent( 'change', onChange );

var programID = interested.value();

if ( programID.length > 0 ) {
    onChange.call( interested );
}

var checkStep2 = [];


// "Enter Key" Triggers
// Add keydown event handler to input boxes
// Trigger the step1-submit function when enter key is pressed
// CAIVIS(LDS) 1-29-09

// when degree changes - focus on degree level
Twd.$( 'interested' ).addEvent('change', function( event ) {
	field = document.getElementById("degree");
	field.focus();
});

Twd.$( 'degree' ).addEvent('keydown', function( event ) {
	if (event.keyCode == 13 && Twd.trigger('step1-submit', 'click', event.keyCode)) { return true; };
	return true;
});

Twd.$( 'lastName' ).addEvent('keydown', function( event ) {
	if (event.keyCode == 13 && Twd.trigger('step2-submit', 'click', event.keyCode)) { return true; };
	return true;
});

Twd.$( 'zip' ).addEvent('keydown', function( event ) {
	if (event.keyCode == 13 && Twd.trigger('step3-submit', 'click', event.keyCode)) { return false; };
	return true;
});

Twd.$( 'email' ).addEvent('keydown', function( event ) {
	if (event.keyCode == 13 && Twd.trigger('step4-submit', 'click', event.keyCode)) { return false; };
	return true;
});


Twd.$( 'step1-submit' ).addEvent('click', function( event )
{
		// CAIVIS(LDS) 2/13/09
		var iNextStep = 2;
		var sNextFormStep = "form-step" + iNextStep;
		
		// CAIVIS(LDS) 2/17/09 - swapped var check criteria with degree
		var check   = [ { field : 'interested',  message : 'Program of interest is required' },
   									{ field : 'degree',      message : 'Degree is required' } ];

    var errors = TrueWizard.Validate( check );

    if ( errors.length > 0 ){
        TrueWizard.Errors( errors, 'step1' );
        return false;
    }
    
    // google tracking for clicking to step 2 from the wizard
    // pageTracker._trackPageview("wizardStep1");

    TrueWizard.$( 'step1-errors' ).remove();

    // Gets the form fields with their respective values
    var data = Twd.collectFields( 'form-step1' );

		// Set Bail Out Point CAIVIS(LDS) 2/11/09
		document.getElementById("postBailOutPoint").value = 2;
		
		// CAIVIS(LDS) 2/19/09
		document.getElementById("postMajor").value = document.getElementById("interested").value;
		document.getElementById("postDegree").value = document.getElementById("degree").value;
		
		// CAIVIS(LDS) 2/11/09
		Twd.$( 'line-step' ).width( IncrementWidth * 2, function()
    {
			// Hide step 1
			Twd.$( 'wizard-step1' ).addClass( 'hidden' );

			// Shows Step 2
			Twd.$( 'wizard-step2' ).removeClass( 'hidden' );

			// Shows the button "Submit" if this is hidden
			Twd.$( 'step2-submit' ).removeClass( 'hidden' );

			this.parent().addClass('active');
    });

		// CAIVIS(LDS) 2/13/09
		var delayedFunctionCall = setTimeout("formfocus('" + sNextFormStep + "')", 500);

    // Break the event
    return false;
});

Twd.$( 'step2-submit' ).addEvent('click', function( event )
{
		// CAIVIS(LDS) 2/13/09
		var iNextStep = 3;
		var sNextFormStep = "form-step" + iNextStep;
	
    var check   = [
        { field : 'firstName',   message : 'First Name is required' },
        { field : 'firstName',   message : 'Please enter a valid First Name',    expr: /^[a-z\s]{2,}$/i },
        { field : 'lastName',    message : 'Last Name is required' },
        { field : 'lastName',    message : 'Please enter a valid Last Name',     expr: /^[a-z\s]{2,}$/i }
    ];

    var errors = TrueWizard.Validate( check );

    if ( errors.length > 0 ){
        TrueWizard.Errors( errors, 'step2' );
        return false;
    }
    // google tracking for clicking to step 2 from the wizard
    // pageTracker._trackPageview("wizardStep2");

    TrueWizard.$( 'step2-errors' ).remove();

    // Gets the form fields with their respective values
    var data = Twd.collectFields( 'form-step2' );
		
		// Set Bail Out Point CAIVIS(LDS) 2/11/09
		document.getElementById("postBailOutPoint").value = 3;
		
		// CAIVIS(LDS) 2/11/09
    Twd.$( 'line-step' ).width( IncrementWidth * 3, function()
    {
			// Hide step 2
			Twd.$( 'wizard-step2' ).addClass( 'hidden' );

			// Shows Step 3
			Twd.$( 'wizard-step3' ).removeClass( 'hidden' );

			// Shows the button "Submit" if this is hidden
			Twd.$( 'step3-submit' ).removeClass( 'hidden' );

			this.parent().addClass('active');
    });

		// CAIVIS(LDS) 2/13/09
		var delayedFunctionCall = setTimeout("formfocus('" + sNextFormStep + "')", 500 );

    // Break the event
    return false;
});

Twd.$( 'step3-submit' ).addEvent('click', function( event )
{
		// CAIVIS(LDS) 2/13/09
		var iNextStep = 4;
		var sNextFormStep = "form-step" + iNextStep;
		
    var check   = [
        { field : 'mailing',     message : 'Mailing Address is required' },
        { field : 'state',       message : 'State is required',                  validate : function(){ return !this.parent('li').hasClass('hidden'); } },
        { field : 'customState', message : 'Please enter the name of the state', validate : function(){ return !this.parent('li').hasClass('hidden'); } },
        { field : 'city',        message : 'City is required' },
        { field : 'zip',         message : 'Zip Code is required' },
        { field : 'zip',         message : 'Please use 5 digits or 5 digits ñ 4 digits for United States zip codes', expr : /^(\d{5}|\d{5}-\d{4})$/,  validate: function(){ return Twd.$('country').value() == 'USA'; } },
        { field : 'zip',         message : 'Please use 6 digits or 3 digits (space) 3 digits for Canada zip codes',  expr : /^(\w{6}|\w{3}\s\w{3})$/, validate: function(){ return Twd.$('country').value() == 'CAN'; } }
    ];

    var errors = TrueWizard.Validate( check );

    if ( errors.length > 0 ){
        TrueWizard.Errors( errors, 'step3' );
        return false;
    }
    // google tracking for clicking to step 2 from the wizard
    // pageTracker._trackPageview("wizardStep3");

    TrueWizard.$( 'step3-errors' ).remove();

    // Gets the form fields with their respective values
    var data = Twd.collectFields( 'form-step3' );

		// Set Bail Out Point CAIVIS(LDS) 2/11/09
		document.getElementById("postBailOutPoint").value = 4;
		
		// CAIVIS(LDS) 2/11/09
    Twd.$( 'line-step' ).width( IncrementWidth * 4, function()
    {    		
				// Hide step 2
				Twd.$( 'wizard-step3' ).addClass( 'hidden' );

				// Shows Step 3
				Twd.$( 'wizard-step4' ).removeClass( 'hidden' );

				// Shows the button "Submit" if this is hidden
				Twd.$( 'step4-submit' ).removeClass( 'hidden' );

				this.parent().addClass('active');
    });

		// CAIVIS(LDS) 2/13/09
		var delayedFunctionCall = setTimeout("formfocus('" + sNextFormStep + "')", 500 );

    // Break the event
    return false;
});

// CAIVIS(LDS) 2/23/09
// Loop over creating click events for the submit buttons
// BEGIN
fieldgroup = 1;

for ( var step = GenericGroupCount; step < ErrorFormNumber; step++) {	
	if(step < ( ErrorFormNumber - 1 )) { 
		var action = Twd.LearningWizardNextStep( step, fieldgroup ); if ( action ) {};
	} else {
		var action = Twd.LearningWizardSubmit( step, ErrorFormNumber ); if ( action ) {};
	}
	fieldgroup++;
};
// END

// CAIVIS(LDS) 2/23/09
// Loop over creating click events for the back buttons
// BEGIN
for ( var step = 2; step <= ErrorFormNumber; step++) {
	if(step < ErrorFormNumber) {
		var action = Twd.LearningWizardStepBack(step); if (action) {};
	}	else {
		var action = Twd.LearningWizardStepBackFromError(step); if (action) {};
	}
};
// END