
// show image thumbnail
function showThumb( filename ) {
	$(".generated_thumb").empty().append('<img class="thumb" src="/gallery/watermarked/'+filename+'" alt="Image preview" title="Image preview" />');
}

// select upload tab
function selectUploadTab ( tab_number ) {

	// get currently disabled tabs
	var disabled_tabs = $('#uploadSteps').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] );
	    }
    }
	$('#uploadSteps').tabs( "option", "disabled", disabled_tabs_new );
	
	// select tab 	
	$('#uploadSteps').tabs( "select", tab_number );
	
	// disable prevous selected
	if ( tab_number > 0 ) {
		disabled_tabs_new.push( 0 );
	}
	
	// disble all
	if ( tab_number == 4 ) {
		disabled_tabs_new = new Array( 0, 1, 2, 3 );
	}
	
	// disable tabs (with previous)
	$('#uploadSteps').tabs( "option", "disabled", disabled_tabs_new );
	
}

// update progress
function updateUploadProgress( step_id, image_id ){
    var filename = '/'+labels.lang+'/uploads.html';
    
    var params = {
		ajax: 2,
		action: "upload-progess",
		step_id: step_id,
		image_id: image_id    		
    };
    
    var result = false;
    
    $.ajax({
		"url": filename, 
		"data": params,
		"type": "POST",
		"dataType": "json",
		"async": false,
		"success": function( json_response ) {
		
	    	if( typeof json_response.error != 'undefined' && !json_response.error ) {
	    		result = true;
	    	}
	    	   	
   		 }
    });

    return result;
}

// restart upload
function restartUpload( $element ){
	
	var $form = $element.parents('form');
	var image_id = $( "input[name='image_id']", $form ).val();
	
	var filename = '/'+labels.lang+'/uploads.html';

	var data = {
		action: "delete-image",
		ajax: 2,
		image_id: image_id    		
	};
	
	$.ajax({
		"url": filename, 
		"data": data,
		"dataType": "json",
		"type": "POST",
		"async": false,
		"success": function( json_response ){

			// check error
			if ( typeof(json_response.error) == 'undefined' ) {
				return false;
			}

			if( !json_response.error ) {
				
				// select tabs
				$('#uploadSteps').tabs( "option", "disabled", [1,2,3,4] );
				$('#uploadSteps').tabs( "select", 0 );					
				
				$("#step1form").clearForm();
				$("#step2form").clearForm();
				$("#step3form").clearForm();
				$("#step4form").clearForm();

				document.location.href = '/'+labels.lang+'/upload-image.html';
			}
			else {
				$element.parent().append( json_response.error );			
			}
			
			return false;
		}
	});
}

// step 1 validate image upload form
function validateImageUploadForm() {
	// 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 1 upload an image
function ajaxImageUpload( $form ) {
	
	// ajax request options
	var uploadOptions = {
		beforeSubmit: beforeUploadRequest, 
    	success: showUploadResponse,
		dataType: 'json',
		iframe: true
	};
	
	// get form id 
	var formId = $form.attr('id');
	
	$('#step1form').ajaxSubmit( uploadOptions );
	
}

// step 1 before upload
function beforeUploadRequest( data, $form, options ){
	
	// get form id
	var formId = $form.attr('id');

	$("#step1").attr( 'disabled', true );
	
	return true;	
}

// step 1 upload response
function showUploadResponse( 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();
	
	if ( !json_result.error ) {

		// update process
		if ( updateUploadProgress( 1, json_result.image_id ) ) {
		
			// set title from meta data
			$("#image_title").val( json_result.metadescr.title );
			
			// set description from meta data
			$("#image_descr").val( json_result.metadescr.descr );
			
			// set artist from meta data
			$("#image_artist").val( json_result.metadescr.artist );
			
			// set keywords from meta data
			if ( $.isArray( json_result.metadescr.keywords ) ) {
				$("#image_keywords").val( json_result.metadescr.keywords.join(", ") );
			}
	
			// set image id to all steps
			$("input[name='image_id']").val( json_result.image_id );
	
			// show image preview
			showThumb( json_result.filename, json_result.image_id );
					
			// select tab
			selectUploadTab( 1 );
		
		}
		else {
	    
	    	// update process error
	    	$('#imageToUpload').after('<span class="forms-input-error"><br />Update process error</span>');
	    	
	    }
		
    }
    else {
		
    	// set error
    	$('#imageToUpload').after('<span class="forms-input-error"><br />'+json_result.error+'</span>');
    	
    	// enable submit button
    	$("#step1").attr( 'disabled', false );
       
    }
	
}

// step 2 submit
function submitStep2 () {
	
	var options = {
		beforeSubmit: submitStep2Request,
		success: submitStep2Response,
		dataType: 'json'	
	};
	
	$('#step2form').validate({
		rules: {
			image_title:{
				required: true
			},
			image_descr:{
				required: true
			},
			image_keywords:{
				required: true
			}
		},
		messages:{
			image_title:{
				required: "<br />Image title is required"
			},
			image_descr:{
				required: "<br />Image description is required"
			},
			image_keywords:{
				required: "<br />Image keywords are 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 
	$('#step2form').submit();
	
}

// step 2 request
function submitStep2Request ( data, $form, options ) {

	// get form id
	var formId = $form.attr('id');
	
	// disable submit button
	$('#step2').attr( 'disabled', true );
	
}

// step 2 response
function submitStep2Response ( 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 ) {
		
		// update process
		if ( updateUploadProgress( 2, json_result.data.image_id ) ) {
			
			// select tab
			selectUploadTab( 2 );
			
			// enable submit button
			$('#step2').attr( 'disabled', false );
			
		}
		else {
		
			// update process error
	    	$('#imageToUpload').after('<span class="forms-input-error"><br />Update process error</span>');
		
		}
		
    }    
    else {

    	// set error
    	$('#step2').parent().append('<span class="forms-input-error"><br />Incorrect data</span>');

    }
}	

// step 3 clicks
function step3RadioClick( $element ){
	
	// get question
	var name = $element.attr('name');
	var checked = $element.is(':checked');
	var value = $element.val();
	
	switch ( name ) {
		
		case 'face_release_radio':
			if( checked ){
                if( value == 1 ){
                    $('#question2').show();
                    if ( $('input#face_file_release_1').is(':checked') ) {
                    	$('#question2-upload').show();
                    }
                    $('input[name=face_file_release_radio]').attr( 'disabled', false );
                }
                else {
                	$('#question2').hide();
                    if ( $('input#face_file_release_1').is(':checked') ) {
                    	$('#question2-upload').hide();
                    }
                	$('input[name=face_file_release_radio]').attr( 'disabled', true );                	
                }
           }
           break;
           
		case 'face_file_release_radio':
			if( checked ){
				if( value == 1 ){
					$('#question2-upload').show();					
				}
				else {
					$('#question2-upload').hide();
				}
			}
			break;
	
		case 'trade_release_radio':
			if( checked ){
				if( value == 1 ){
					$('#question4').show();
                    if ( $('input#trade_file_release_1').is(':checked') ) {
                    	$('#question4-upload').show();
                    }					
					$('input[name=trade_file_release_radio]').attr( 'disabled', false );
				}
				else {
					$('#question4').hide();                	
                    if ( $('input#trade_file_release_1').is(':checked') ) {
                    	$('#question4-upload').hide();
                    }
					$('input[name=trade_file_release_radio]').attr( 'disabled', true );                	
				}
			}
			break;
			
		case 'trade_file_release_radio':
			if( checked ){
				if( value == 1 ){
					$('#question4-upload').show();					
				}
				else {
					$('#question4-upload').hide();
				}
			}
			break;
			
		case 'regnum_release_radio':
			break;
			
		case 'license_type_radio':
			break;
			
		case 'license_usage_radio':
			break;
			
	}
	
	// enable licenses
	if ( 
		( $('input#face_release_1').is(':checked') && ( $('input#face_file_release_2').is(':checked') || !$('input#face_file_release_1').is(':checked') ) )
		|| 
		( $('input#trade_release_1').is(':checked') && ( $('input#trade_file_release_2').is(':checked') || !$('input#trade_file_release_1').is(':checked') ) )
		|| 
		$('input#regnum_release_1').is(':checked')		 
	) {
		// disable and unchecked commercial+editorial
		$('input#license_type_radio_1').attr( 'disabled', true );
		$('input#license_type_radio_1').attr( 'checked', false ); 
		// disable and unchecked rf
		$('input#license_usage_radio_2').attr( 'disabled', true );
		$('input#license_usage_radio_2').attr( 'checked', false ); 
		// enable and checked editorial only
		$('input#license_type_radio_2').attr( 'disabled', false );
		$('input#license_type_radio_2').attr( 'checked', true ); 
		// enable and checked rm
		$('input#license_usage_radio_1').attr( 'disabled', false );
		$('input#license_usage_radio_1').attr( 'checked', true ); 
	}
	else {
		// enable license type
		$('input[name=license_type_radio]').attr( 'disabled', false );
		// enable license usage
		$('input[name=license_usage_radio]').attr( 'disabled', false );
	}

	if (
		$('input#license_type_radio_2').is(':checked')		 
	) {
		// disable and unchecked rf
		$('input#license_usage_radio_2').attr( 'disabled', true );
		$('input#license_usage_radio_2').attr( 'checked', false ); 	
		// enable and checked rm
		$('input#license_usage_radio_1').attr( 'disabled', false );
		$('input#license_usage_radio_1').attr( 'checked', true ); 
	}
	
}

// step 3 submit
function submitStep3 () {

	var options = {
		beforeSubmit: submitStep3Request,
		success: submitStep3Response,
		dataType: 'json'	
	};

	$("#step3form").validate({
		rules: {
			face_release_radio: {
				required: true
			},
			face_file_release_radio: {
				required: function( $element ){
					return ( $("input#face_release_1").is(':checked') );
				}
			},
			faceToUpload: {
				required: function( $element ){
					return ( $("input#face_release_1").is(':checked') && $("input#face_file_release_1").is(':checked') );
				}
			},
			trade_release_radio: {
				required: true
			},
			trade_file_release_1: {
				required: function( $element ){
					return ( $("input#trade_release_1").is(':checked') );
				}
			},
			tradeToUpload: {
				required: function( $element ){
					return ( $("input#trade_release_1").is(':checked') && $("input#trade_file_release_1").is(':checked') );
				}
			},
			regnum_release_radio: {
				required: true
			},
			license_type_radio: {
				required: true
			},
			license_usage_radio: {
				required: true
			}
		},
		messages: {
			face_release_radio: {
				required: "<br />Please answer the question"
			},
			face_file_release_radio: {
				required: "<br />Please answer the question"
			},
			faceToUpload: {
				required: "<br />Please select file"
			},
			trade_release_radio: {
				required: "<br />Please answer the question"
			},
			trade_file_release_radio: {
				required: "<br />Please answer the question"
			},
			tradeToUpload: {
				required: "<br />Please select file"
			},
			regnum_release_radio: {
				required: "<br />Please answer the question"
			},
			license_type_radio: {
				required: "<br />Please select license type"
			},
			license_usage_radio: {
				required: "<br />Please select license usage"
			}			
		},
		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 
	$('#step3form').submit();

}

// step 3 request
function submitStep3Request ( data, $form, options ) {

	// get form id
	var formId = $form.attr('id');
	
	// disable submit button
	$('#step3').attr( 'disabled', true );
	
}

// step 3 response
function submitStep3Response ( 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 ) {
        
        // update proces
        if ( updateUploadProgress( 3, json_result.data.image_id ) ) {
        	
        	// select tab
        	selectUploadTab( 3 );
        	
        	// enable submit button
        	$('#step3').attr( 'disabled', false );
        	
        }
        else {
        
	        // update process error
	    	$('#imageToUpload').after('<span class="forms-input-error"><br />Update process error</span>');
        
        }
        
    }
    else {

    	// set error
    	$('#step3').parent().append('<span class="forms-input-error"><br />Incorrect data</span>');
    	
    }
}	

// step 4 submit
function submitStep4 () {

	var options = {
		beforeSubmit: submitStep4Request,
		success: submitStep4Response,
		dataType: 'json'	
	};

	$("#step4form").validate({
		rules: {
			image_quality: {
				required: true
			}
		},
		messages: {
			image_quality: {
				required: "<br />Please select quality"
			}		
		},
		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 
	$('#step4form').submit();
	
}

// step 4 request
function submitStep4Request ( data, $form, options ) {

	// get form id
	var formId = $form.attr('id');
	
	// disable submit button
	$('#step4').attr( 'disabled', true );
	
}

// step 4 response
function submitStep4Response ( 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 ) {
        
         // update proces
        if ( updateUploadProgress( 4, json_result.data.image_id ) ) {
        
        	$("#summary_image_title").html( json_result.data.image_title );
        	$("#summary_image_description").html( json_result.data.image_descr );
        	$("#summary_image_keywords").html( json_result.data.image_keywords );
        	$("#summary_image_artist").html( json_result.data.image_artist );
        	$("#summary_image_creditline").html( json_result.data.image_creditline );
        	$("#summary_image_time").html( json_result.data.image_time );
        	$("#summary_image_location").html( json_result.data.image_location );
        	$("#summary_image_dimensions").html( json_result.data.image_dimw+"px x "+json_result.data.image_dimh+"px" );
        	$("#summary_image_size").html( json_result.data.image_mbsize+" MB" );
        	$("#summary_faces").html( ( json_result.data.il_faces == 1 ? 'Yes' : 'No' ) );
        	$("#summary_faces_release").html( ( json_result.data.il_faces_hasfile == 1 ? 'Yes' : 'No' ) );
        	$("#summary_trademarks").html( ( json_result.data.il_trademarks == 1 ? 'Yes' : 'No' ) );
        	$("#summary_trademarks_release").html( ( json_result.data.il_trademarks_hasfile == 1 ? 'Yes' : 'No' ) );
        	$("#summary_registrations").html( ( json_result.data.il_regnums == 1 ? 'Yes' : 'No' ) );
        	$("#summary_license_type").html( ( json_result.data.il_license_type == 1 ? 'Commersial + Editorial' : 'Editorial Only' ) );
        	$("#summary_license_usage").html( ( json_result.data.il_license_usage == 1 ? 'RM License Usages' : 'RF License Usages' ) );
        
			// select tab
			selectUploadTab( 4 );
			
			// enable submit button
			$('#step4').attr( 'disabled', false );
			
		}
		else {
		
			// update process error
	    	$('#imageToUpload').after('<span class="forms-input-error"><br />Update process error</span>');
			
		}	
		
    }
    else {

    	// set error
    	$('#step4').parent().append('<span class="forms-input-error"><br />Incorrect data</span>');
    	
    }
}	


// TODO
function deletePreset(obj){
    var id_to_delete = obj.metadata({type: 'attr', name: 'jdata'}).id;
    var send = {};
    send.ajax = "2";
    send.showhtml = "2";
    send.action = "delete_preset";
    send.delid = id_to_delete;
    var encoded = $.toJSON(send);
    var params = $.evalJSON(encoded);
    $.post( "/en/uploads.html", params, function(res){
        var data = $.evalJSON(res);
        var system_message = '';
        if( data.msg==='true' ){
            system_message = 'Preset deleted';
            obj.fadeOut(300, function(){ obj.remove(); });
        }
        else{
            system_message = "Preset wasn't deleted";
        }
		show_stack_bottomleft(false,system_message);
    });
	}

function savePreset(obj){
	var filename = '/'+labels.lang+'/uploads.html';
	var send = {};
	send.ajax = "2";
    send.showhtml = "2";
    send.action = obj.attr('id');
    send.image_time = $('#image_time').val();
    send.image_title = $('#image_title').val();
    send.image_descr = $('#image_descr').val();
    send.image_keywords = $('#image_keywords').val();
    send.image_location = $('#image_location').val();

    var encoded = $.toJSON(send);
    var params = $.evalJSON(encoded);
    //alert(encoded);
    $.post(filename,
       params,
       function(r){
       var data = $.evalJSON(r);
       if(typeof data.msg != 'undefined' && data.msg.length!==0){
            var system_message = '';

            $.each(data.msg, function(x,value){
                system_message += '<p>'+value+'</p>';
            });
			show_stack_bottomleft(false,system_message);
       }
       if( typeof data.err != 'undefined' && data.err.length!==0){
            system_message = '';

            $.each(data.err, function(x,value){
                system_message += '<p>'+value+'</p>';
            });
			show_stack_bottomleft(true,system_message);
       }
   });
}

function loadPreset(obj){
	var filename = '/'+labels.lang+'/uploads.html';

    var send = {};
    send.ajax = "2";
    send.showhtml = "2";
    send.action = obj.attr('id');
    var encoded = $.toJSON(send);
    var params = $.evalJSON(encoded);
    //debuglog(params);
    $.post(filename,
           params,
           function(r){
               var data = $.evalJSON(r);
               var message = '';
			   var list = $('<ul id="presetsList"></ul>');
               if(data.presets.length !== 0){
                   $.each(data.presets, function(x,value){
                        //var temp = $.evalJSON(value);
                        message += '<li class="preset-link" jdata="{id:\''+value.preset_id+'\', title:\''+value.preset_title+'\', descr: \''+value.preset_descr+'\', keywords:\''+value.preset_keywords+'\', location:\''+value.preset_location+'\', time:\''+value.preset_time+'\'}"><a href="#" title="select this preset" class="select-preset left">'+value.preset_title.replace(/&quot;/g,'"').replace(/&#039;/g,"'")+'</a><a href="#" title="delete this preset" class="delete-preset ui-icon ui-icon-trash right"></a></li>';
                   });
               }
                //debuglog(message);
                if( $('#presets_dialog').dialog("isOpen") ){
                    $('#presets_dialog').dialog('close');
                }

                var $dialog = $('<div id="presets_dialog"></div>')
                .dialog({
                        autoOpen: false,
                        title: 'Presets',
                        height:'380px',
                        width:'200px',
                        modal:false,
                        resizable:true,
                        position:{
                                of:"#load_preset",
                                my: 'right top',
                                at: 'left top',
                                offset: '207 1'
                            },
                        open: function(){
							list.append(message);
                            $('#presets_dialog').append(list);
                            //$('div.ui-dialog').css('position', 'relative');
                            $('#presets_dialog').parent().draggable( 'option', 'snap', '#load_preset,#leftContainer');

                                                   
                        }
                });

                $("#presets_dialog").bind("dialogclose", function(){
                        $("#presets_dialog").dialog('destroy');
                        $("#presets_dialog").remove();
                });
                $dialog.dialog('open');
               });
}


// on load methods
$(window).load( function() {
	
	// remove autocomplete for mizilla
	if($.browser.mozilla) { 
		$("form").attr("autocomplete", "off");
	}	
  	
	// restart upload trigger
	$(".restartUpload").livequery( 'click', function( e ) {
		e.preventDefault();
		
		// function and function params
		var functionToCall = restartUpload;
		deleteConfirmation( functionToCall, $(this) );
	});
	
	// upload image (step 1)
    $('#step1').livequery( 'click', function( e ){     
		e.preventDefault();

		if( validateImageUploadForm() ){
			
			// function and function params 
			var functionToCall = ajaxImageUpload;
			var $form = $(this).parents('form');
	    
			// confirmation
	        continueConfirmation( functionToCall, $form, 'Please confirm that you are really the owner of this image!' );
	        
		}

    });

    // add image information (step 2)
    $('#step2').livequery( 'click', function( e ) {
    	e.preventDefault();

    	// validate and submit
    	submitStep2();
    	
	});
    
    // select details (step 3)
    $("input[type='radio']", "#step3form").livequery( 'click', function( e ) {
		step3RadioClick( $(this) );
	});
    
    // add details (step 3)
	$('#step3').livequery('click', function( e ){
		e.preventDefault();
		
		// validate and submit
		submitStep3();
			
	});
	
	// save image (step 4)
	$('#step4').livequery( 'click', function( e ) {
		e.preventDefault();
		
		// validate and submit
		submitStep4();

    });
	
});
