var _UploadIntervals = new Array();
var _UploadContainer = false;
var _UploadWidgetCounter = 0;
var _UploadFirstLoad = true;
var _UploadCountMax = 1; // max number of upload slots on screen at any given time

$(document).ready(function() { 
	UploadInit( "#UploadContainer", 1 );
	$('#formSubmit').click( function() { 
		UploadFormProcess();
	} );
} );

function UploadInit ( container, count ) {

	_UploadContainer = container;
	_UploadCountMax = count;

	for ( var i = 1; i <= _UploadCountMax; i ++ ) {
		UploadWidgetAdd();
	}

	_UploadFirstLoad = false;

}

function UploadWidgetAdd () {

	i = ++ _UploadWidgetCounter;
 
	// see how many upload slots exist, only add if more are required
	if ( $( _UploadContainer  + ' .UploadFileInputField' ).size() >= _UploadCountMax ) {
		return false;
	}

	var s = '';
	s += "\n";
	s += '<div class="UploadFile" id="UploadFile' + i + '"></div>';

	$(_UploadContainer).append ( s );
	$( '#UploadFile' + i ).hide();

	$( '#UploadFile' + i ).html( UploadWidgetAddInner ( i ) );

	if ( _UploadFirstLoad == true ) {
		$( '#UploadFile' + i ).show();
	} else {
		$( '#UploadFile' + i ).fadeIn();
	}

}

function UploadWidgetAddInner ( i ) {

	var sid = guid();

	var s = '';
	s += "\n";
	s += '<div class="UploadFileInput">';

	s += "\n";
	s += '<form method="post" enctype="multipart/form-data" name="UploadForm' + i + '" id="UploadForm' + i + '" action="upload.cgi?sid=' + sid + '" target="form' + i + '_iframe">';
	s += '<input type="file" class="UploadFileInputField" name="file' + i + '" id="file' + i + '" onchange="UploadFileProcess(' + i + ');" />';
	s += '<input type="hidden" class="UploadFileSID" value="' + sid + '" />';
	s += '</div>';

	s += "\n";
	s += '<div class="UploadFileStatus">';
	s += '<div class="UploadFileProgressMonitor" id="UploadFileProgressMonitor' + i + '" style="display: none;">';
	s += '<a href="javascript:void(0);" class="UploadFileStatus-cancel" onclick="UploadCancel(' + i + '); return false;"><span>Cancel</span></a>';
	s += '<div class="UploadFileProgressMonitor-progress"><div class="UploadFileProgressMonitor-complete"></div></div>';
	s += '<span class="UploadFileProgressMonitor-filename"></span>';
	s += '</div>';
	s += '</div>';
	s += '</form>';

	s += "\n";
	s += '<iframe name="form' + i + '_iframe" id="form' + i + '_iframe" src="about:blank" style="border: 0; height: 0; width: 0; padding: 0; position: absolute;"></iframe> ';

	s += "\n";
	s += '<div class="clear"></div>';

	return s;

}

function UploadFileHTML ( request ) {
	var s = '';
	s += "\n";
	s += '<div class="UploadFileItem">';
	s += '<a href="javascript:void(0);" class="UploadFileStatus-cancel" onclick="UploadRemove(' + request.form_id + '); return false;"><span>Remove</span></a>';
	s += '<input type="hidden" class="UploadFileSID" value="' + request.sid + '" />';
	s += '<span class="UploadFileThumb"><img src="/index.php?m=inspection_edit&view=thumb&sid=' + request.sid + '" /></span>';
	s += '<span class="UploadFileName">' + request.filename + '</span>';
	s += '</div>';
	return s;
}


function UploadCancel ( i ) {
	clearInterval ( _UploadIntervals[i] );
	$('#UploadFile' + i + ' .UploadFileStatus' ).fadeOut ( 250, function() { $('#UploadFile' + i ).remove(); UploadWidgetAdd(); } );
	return false;
}

function UploadRemove ( i ) {
	$('#UploadFile' + i ).fadeOut ( 250, function() { $('#UploadFile' + i ).remove(); UploadWidgetAdd(); } );
	return false;
}

function UploadFileProcess ( form_id ) {

	var theForm = $( '#UploadForm' + form_id );
	var sid = $( '#UploadForm' + form_id + ' .UploadFileSID' ).val();
	var filename = $( '#UploadForm' + form_id + ' .UploadFileInputField' ).val();
	$( '#UploadForm' + form_id + ' .UploadFileName' ).val( filename );

	// The variable request is an object that will contain details of the request.

	if ( filename.indexOf ('/' ) > -1 ) { 
		filename = filename.substring ( filename.lastIndexOf ( '/' ) + 1, filename.length );
	} else {
		filename = filename.substring ( filename.lastIndexOf ( '\\' ) + 1, filename.length );
	}

	if ( filename.replace ( '/\s/', '' ).toString() === '' ) {
		return false;
	}

	theForm.submit();

	$( '#UploadForm' + form_id + ' .UploadFileInputField' ).remove();
	$( '#UploadFileProgressMonitor' + form_id ).show();   
	$( '#UploadFile' + form_id + ' .UploadFileProgressMonitor-filename').html( filename );

	_UploadIntervals[form_id] = setInterval( 'UploadProgressUpdater( { form_id:"' + form_id + '", sid:"' + sid + '", filename:"' + filename + '"});', 1000 );
	
	// add another file input
	UploadWidgetAdd();

}

function UploadProgressUpdater ( request ) {
	var myDate = new Date();

	// cachebuster for IE
	var buster = myDate.getHours() + '-' + myDate.getMinutes() + '-' + myDate.getSeconds();

	$.getJSON( '/index.php', { m: 'inspection_edit', view: 'progress', sid: request.sid, nocache: buster }, function ( json ) {

		// debug
		var s = '';
		s += 'json.progress: ' + json.progress + '<br />';
		s += 'json.error: ' + json.error + '<br />';
		s += 'json.status: ' + json.status + '<br />';
		s += 'json.mime: ' + json.mime + '<br />';
		s += 'json.extension: ' + json.extension + '<br />';

		// debug
		// $('#log').html( s );
				
		if ( json.error == 'oversize' ) {
			// uploaded file was too big
			clearInterval ( _UploadIntervals[request.form_id] );
			$('#UploadFile' + request.form_id + ' .UploadFileStatus' ).fadeOut ( 250, function() { $('#UploadFile' + request.form_id + ' .UploadFileStatus' ).remove(); $('#UploadFile' + request.form_id ).html ( 'Sorry, that file is too large to upload. Maximum size permitted is 50MB' ); } );		
			// after 5 seconds fade out and remove - use animate opacity from 100% to 100% over 5 seconds to achieve delay
			$('#UploadFile' + request.form_id ).animate({opacity: 1.0}, 5000).fadeOut('slow', function() { $('#UploadFile' + request.form_id ).remove(); });

		} else if ( json.error == 'type_not_permitted' ) {
			// illegal file type ( not in $permitted list )
			clearInterval ( _UploadIntervals[request.form_id] );
			$('#UploadFile' + request.form_id + ' .UploadFileStatus' ).fadeOut ( 250, function() { $('#UploadFile' + request.form_id + ' .UploadFileStatus' ).remove(); $('#UploadFile' + request.form_id ).html ( 'Sorry, that file type is not permitted' ); } );		

			// after 5 seconds fade out and remove - use animate opacity from 100% to 100% over 5 seconds to achieve delay
			$('#UploadFile' + request.form_id ).animate({opacity: 1.0}, 5000).fadeOut('slow', function() { $('#UploadFile' + request.form_id ).remove(); });


		} else if (json.progress >= 100 || json.progress == 'done' ) {
			// upload done - remove progress bar and add another upload slot
			clearInterval ( _UploadIntervals[request.form_id] );
			$('#UploadFile' + request.form_id + ' .UploadFileStatus' ).fadeOut ( 250, function() { $('#UploadFile' + request.form_id + ' .UploadFileStatus' ).remove(); $('#UploadFile' + request.form_id ).html ( UploadFileHTML ( request ) ); } );
			$('#formFiles-error').html('');

		} else {
			// still uploading - show % completed
			$( '#UploadForm' + request.form_id + ' .UploadFileError' ).val( json.error_msg );
			$( '#UploadFileProgressMonitor' + request.form_id + ' .UploadFileProgressMonitor-complete' ).css('width', json.progress + '%' );
			$( '#UploadFileProgressMonitor' + request.form_id + ' .UploadFileProgressMonitor-complete' ).html ( '<span>' + json.progress + '%' + '</span>' );
		}

		$( '#UploadForm' + request.form_id + ' .UploadFileProgress' ).val( json.progress );



	} );
	
}

function UploadFormValidate () {

	var valid = true;
	var files = '';

	$('.UploadFile').each ( function () {
		if ( $( '#' + this.id + ' .UploadFileItem .UploadFileSID' ).val() != undefined ) {
			files += $( '#' + this.id + ' .UploadFileItem .UploadFileSID' ).val() + ':' + $( '#' + this.id + ' .UploadFileItem .UploadFileName' ).text() + '|';
		}
	});
	
// 	if ( files == '' ) {
// 		$('#formFiles-error').html('Please upload at least one file');
// 		valid = false;
// 	} else {
// 		$('#formFiles-error').html('');
// 	}

	// these are in reverse order so top-most invalid field is
	// focussed

// 	if ( ! $('#formDescription').val() ) {
// 		$('#formDescription-error').html('Please describe the damage');
// 		$('#formDescription').focus();
// 		valid = false;
// 	} else {
// 		$('#formDescription-error').html('');
// 	}

 	if ( $('#formDay').val() == '' || $('#formMonth').val() == '' || $('#formYear').val() == '' || $('#formTime').val() == '' ) {
 		$('#formDate-error').html('Please select the date and time');
 		$('#formDay').focus();
 		valid = false;
 	} else {
 		$('#formDate-error').html('');
 	}

	if ( $('#formLocationuser:checked').val() ) {
		if ( ! $('#formLocationusertext').val() ) {
			$('#formLocationuser-error').html('Please enter your location');
			$('#formLocationusertext').focus();
			valid = false;
		} else {
			$('#formLocationuser-error').html('');
		}

	} else {
		$('#formLocationuser-error').html('');
		$('#formLocationusertext').val('');
	}

 	if ( ! $('#formRegistration').val() ) {
 		$('#formRegistration-error').html('Please enter your Registration Number');
 		$('#formRegistration').focus();
 		valid = false;
 	} else {
 		$('#formRegistration-error').html('');
 	}

// 	if ( ! $('#formVin').val() ) {
// 		$('#formVin-error').html('Please enter your VIN');
// 		$('#formVin').focus();
// 		valid = false;
// 	} else {
// 		$('#formVin-error').html('');
// 	}

	if ( ! $('#formVehicle').val() ) {
		$('#formVehicle-error').html('Please enter the Make and Model');
		$('#formVehicle').focus();
		valid = false;
	} else {
		$('#formVehicle-error').html('');
	}


	if ( ! $('#formPhone').val() ) {
		$('#formPhone-error').html('Please enter your phone number');
		$('#formPhone').focus();
		valid = false;
	} else {
		$('#formPhone-error').html('');
	}

	if ( ! $('#formEmail').val() || ! validateEmail ( $('#formEmail').val() ) ) {
		$('#formEmail-error').html('Please enter your email address');
		$('#formEmail').focus();
		valid = false;
	} else {
		$('#formEmail-error').html('');
	}

	if ( ! $('#formZip').val() ) {
		$('#formZip-error').html('Please enter your ZIP');
		$('#formZip').focus();
		valid = false;
	} else {
		$('#formZip-error').html('');
	}

	if ( ! $('#formState').val() ) {
		$('#formState-error').html('Please select your state');
		$('#formState').focus();
		valid = false;
	} else {
		$('#formState-error').html('');
	}

	if ( ! $('#formCity').val() ) {
		$('#formCity-error').html('Please enter your city');
		$('#formCity').focus();
		valid = false;
	} else {
		$('#formCity-error').html('');
	}

	if ( ! $('#formAddress').val() ) {
		$('#formAddress-error').html('Please enter your address');
		$('#formAddress').focus();
		valid = false;
	} else {
		$('#formAddress-error').html('');
	}

	if ( ! $('#formCompany').val() ) {
		$('#formCompany-error').html('Please enter your company');
		$('#formCompany').focus();
		valid = false;
	} else {
		$('#formCompany-error').html('');
	}

// 	if ( ! $('#formName_family').val() ) {
// 		$('#formName_family-error').html('Please enter your name family');
// 		$('#formName_family').focus();
// 		valid = false;
// 	} else {
// 		$('#formName_family-error').html('');
// 	}

	if ( ! $('#formName_given').val() ) {
		$('#formName_given-error').html('Please enter your name');
		$('#formName_given').focus();
		valid = false;
	} else {
		$('#formName_given-error').html('');
	}

	return valid;

}

function UploadFormProcess () {

	if ( ! UploadFormValidate() ) {
		return false;
	}

	// generate and append uploaded file details html to form

	var files = '';

	$('.UploadFile').each ( function () {
			if ( $( '#' + this.id + ' .UploadFileItem .UploadFileSID' ).val() != undefined ) {
				var sid = $( '#' + this.id + ' .UploadFileItem .UploadFileSID' ).val();
				files += '<input type="hidden" name="formUploadU' + sid + '" value="' + sid + '" />' + "\n";
			}
		});
	
	
	//  $( '#' + this.id + ' .UploadFileItem .UploadFileSID' ).val() + ':' + $( '#' + this.id + ' .UploadFileItem .UploadFileName' ).text() + '|';

	$('#inspectionForm').append( files );
	$('#inspectionForm').submit();
	
}

function validateEmail(str) {

	var at="@";
	var dot=".";
	var lat=str.indexOf(at);
	var lstr=str.length;
	var ldot=str.indexOf(dot);
	if (str.indexOf(at)==-1) {
		return false; 
	}

	if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr) {
		return false;
	}

	if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr) {
		return false;
	}

	if (str.indexOf(at,(lat+1))!=-1) {
		return false;
	}

	if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot) {
		return false;
	}

	if (str.indexOf(dot,(lat+2))==-1) {
		return false;
	}
		
	if (str.indexOf(" ") != -1) {
		return false;
	}

	return true;
}



function guid() {
	return (S4()+S4()+S4()+S4()+S4()+S4()+S4()+S4());
}

function S4() {
	return (((1+Math.random())*0x10000)|0).toString(16).substring(1);
}
