// on load methods
$(window).load( function() {
	
	// remove autocomplete for mizilla
	if($.browser.mozilla) { 
		$("form").attr("autocomplete", "off");
	}
	
	// update profile (step 1)
    $('#apply-for-contributor-step1').livequery( 'click', function( e ){     
		e.preventDefault();

		// validate and submit
    	submitApplyForContributorStep1();

    });
    
    // view requirements (step from 2 to N)
    $('[id^=apply-for-contributor-step-requirements]').livequery( 'click', function( e ){     
		e.preventDefault();

		// get next step
		var next_step = parseInt ( $(this).attr("data-next-step-number") );		
		
		// select next tab
    	selectApplyForContributorTab( next_step );

    });
    
    // make test (step N+1)
    $('#apply-for-contributor-step-test').livequery( 'click', function( e ){     
    	e.preventDefault();
    	
    	// validate and submit
    	submitApplyForContributorStepTest( );
    	
    });
    
	// upload image (step N+2)
    $('#apply-for-contributor-step-upload').livequery( 'click', function( e ){     
		e.preventDefault();

		if( validateTestImageUploadForm() ){
			
			// function and function params 
			var functionToCall = ajaxTestImageUpload;
			var $form = $(this).parents('form');
	    
			// confirmation
	        continueConfirmation( functionToCall, $form, 'Please confirm that you are really the owner of this image!' );
	        
		}

    });
    
});

// select tab
function selectApplyForContributorTab ( tab_number ) {
	
	// get number of all tabs
	var all_tabs_number = $("#applyForContributorTabs ul > li ").length;
	
	// get disabled tabs
	var disabled_tabs = $('#applyForContributorTabs').tabs( "option", "disabled" );
	var disabled_tabs_new = new Array();
	
	// disable tabs (without current)
	for( var i = 0; i < disabled_tabs.length; i++ ) {
	    if ( disabled_tabs[i] != tab_number ) {
	    	disabled_tabs_new.push( disabled_tabs[i] );
	    }
    }
	
	$('#applyForContributorTabs').tabs( "option", "disabled", disabled_tabs_new );
	
	// select tab 	
	$('#applyForContributorTabs').tabs( "select", tab_number );
	
	// disble all
	if ( tab_number == ( all_tabs_number - 1 ) ) {
		disabled_tabs_new = new Array();
		for( var i = 0; i < ( all_tabs_number - 1); i++ ) {
	    	disabled_tabs_new.push( i );
	    }
	}

	// disable tabs 
	$('#applyForContributorTabs').tabs( "option", "disabled", disabled_tabs_new );
}

// step 1 submit (update profile)
function submitApplyForContributorStep1 () {
	
	var options = {
		beforeSubmit: submitApplyForContributorStep1Request,
		success: submitApplyForContributorStep1Response,
		dataType: 'json'	
	};
	
	$('#applyForContributorStep1').validate({
		rules: {
			user_fname:{
				required: true
			},
			user_lname:{
				required: true
			},
			user_phone:{
				required: true
			}
		},
		messages:{
			user_fname:{
				required: "<br />First name is required"
			},
			user_lname:{
				required: "<br />Last name is required"
			},
			user_phone:{
				required: "<br />Phone is required"
			}
		},
		submitHandler: function( form ) {
            $(form).ajaxSubmit( options );
        },
        onfocusout: false,
        onkeyup: false,
        onkeypress: false,
        onsubmit: true,
        success: "",
        errorClass: "error",
        errorPlacement: function( $error, $element ) {
        	$error.addClass('forms-input-error');
        	$element.after( $error );            
        }
	});
	
	// submit 
	$('#applyForContributorStep1').submit();
	
}

// step 1 request
function submitApplyForContributorStep1Request ( data, $form, options ) {

	// get form id
	var formId = $form.attr('id');
	
	// disable submit button
	$('#apply-for-contributor-step1').attr( 'disabled', true );
	
}

// step 1 response
function submitApplyForContributorStep1Response ( json_result, statusText, xhr, $form ) {
	
	// check error
	if ( typeof(json_result.error) == 'undefined' ) {
		return false;
	}
	
	// remove errors
	$(".forms-input-error").remove();
	
	if ( !json_result.error ) {
	
		// select tab
		selectApplyForContributorTab( 1 );
		
		// enable submit button
		$('#apply-for-contributor-step1').attr( 'disabled', false );
		
    }    
    else {

    	// set error
    	$('#apply-for-contributor-step1').parent().append('<span class="forms-input-error"><br />Incorrect data</span>');

    }
}	

// step N+1 submit (make test)
function submitApplyForContributorStepTest () {
	
	var options = {
		beforeSubmit: submitApplyForContributorStepTestRequest,
		success: submitApplyForContributorStepTestResponse,
		dataType: 'json'	
	};
	
	$('#applyForContributorStepTest').validate({
		rules: {
			contributor_answer_1:{
				required: true
			},
			contributor_answer_2:{
				required: true
			},
			contributor_answer_3:{
				required: true
			},
			contributor_answer_4:{
				required: true
			},
			contributor_answer_5:{
				required: true
			}
		},
		messages:{
			contributor_answer_1:{
				required: "<br />Please, answer the question"
			},
			contributor_answer_2:{
				required: "<br />Please, answer the question"
			},
			contributor_answer_3:{
				required: "<br />Please, answer the question"
			},
			contributor_answer_4:{
				required: "<br />Please, answer the question"
			},
			contributor_answer_5:{
				required: "<br />Please, answer the question"
			}
		},
		submitHandler: function( form ) {
			$(form).ajaxSubmit( options );
		},
		onfocusout: false,
		onkeyup: false,
		onkeypress: false,
		onsubmit: true,
	    success: "",
	    errorClass: "error",
	    errorPlacement: function( $error, $element ) {
			$error.addClass('forms-input-error');
			$element.parent().append( $error );            
		}
	});
	
	// submit 
	$('#applyForContributorStepTest').submit();
	
}

// step N+1 request
function submitApplyForContributorStepTestRequest ( data, $form, options ) {
	
	// get form id
	var formId = $form.attr('id');
	
	// disable submit button
	$('#apply-for-contributor-step-test').attr( 'disabled', true );
	
}

// step N+1 response
function submitApplyForContributorStepTestResponse ( json_result, statusText, xhr, $form ) {
	
	// check error
	if ( typeof(json_result.error) == 'undefined' ) {
		return false;
	}
	
	// remove errors
	$(".forms-input-error").remove();

	// get next step
	var next_step = parseInt ( $('#apply-for-contributor-step-test').attr("data-next-step-number") );
 		
	if ( !json_result.error ) {
	
		// set image id to all steps
		$("input[name='apply_id']").val( json_result.apply_id );
	
		// select tab
		selectApplyForContributorTab( next_step );
		
		// enable submit button
		$('#apply-for-contributor-step-test').attr( 'disabled', false );
		
    }    
    else {

    	// set error
    	$('#apply-for-contributor-step-test').parent().append('<span class="forms-input-error"><br />Incorrect data</span>');

    }
}

// step N+2 validate test image upload form
function validateTestImageUploadForm() {
	
	// remove errors
	$(".forms-input-error").remove();
	
    if( $('#imageToUpload').val() == '' ) {
		// set error
		$('#imageToUpload').after('<span class="forms-input-error"><br />Please provide an image to upload</span>');
    }
    else{
        return true;
    }
    
    return false; 
}

// step N+2 upload a test image
function ajaxTestImageUpload( $form ) {
	
	// ajax request options
	var uploadOptions = {
		beforeSubmit: beforeTestImageUploadRequest, 
    	success: showTestImageUploadResponse,
		dataType: 'json',
		iframe: true
	};
	
	// get form id 
	var formId = $form.attr('id');
	
	$('#applyForContributorStepTestImageUpload').ajaxSubmit( uploadOptions );
}

// step N+2 before upload
function beforeTestImageUploadRequest( data, $form, options ){
	
	// get form id
	var formId = $form.attr('id');

	$("#apply-for-contributor-step-upload").attr( 'disabled', true );
	
	return true;	
}

// step N+2 upload response
function showTestImageUploadResponse( json_result, statusText, xhr, $form ){

	// check error
	if ( typeof(json_result.error) == 'undefined' ) {
		return false;
	}

	// get form id	
	var formId = $form.attr('id');

	// remove errors
	$(".forms-input-error").remove();
	
	// get next step
	var next_step = parseInt ( $('#apply-for-contributor-step-upload').attr("data-next-step-number") );
	
	if ( !json_result.error ) {
			
		// select tab
		selectApplyForContributorTab( next_step );
		
    }
    else {
		
    	// set error
    	$('#imageToUpload').after('<span class="forms-input-error"><br />'+json_result.error+'</span>');
    	
    	// enable submit button
    	$("#apply-for-contributor-step-upload").attr( 'disabled', false );
       
    }
	
}

