(define (script-fu-re-order-layers image layer num-of-blocks)

	(let* (
		(test-script-crash 1)
		(outer-loop (/ (car (gimp-image-get-layers image)) num-of-blocks))
		(blocks-to-process 0)
		(adjust -1)
		(increment -1)
		(offset 0)
		(inner-loop 0)
		(num-layers-in-block (/ (car (gimp-image-get-layers image)) num-of-blocks))
		(target-layer 0)
	         )

		(if (= (modulo (car (gimp-image-get-layers image)) num-of-blocks) 0) (set! test-script-crash 0))

			(case test-script-crash ((0)

	    (gimp-image-undo-group-start image)

		(while (> outer-loop 1)

		        (set! blocks-to-process (- num-of-blocks 1))
		        (set! adjust (+ adjust 1))
		        (set! increment (+ increment 1))
		        (set! offset 1)

			(while (> blocks-to-process 0)

			        (set! inner-loop (* (- (- num-layers-in-block 1) increment) offset))
			        (set! target-layer (- (* blocks-to-process (- num-layers-in-block adjust)) 1))

				(while (> inner-loop 0)
				        (gimp-image-lower-layer image (vector-ref (cadr (gimp-image-get-layers image)) target-layer))
				        (set! target-layer (+ target-layer 1))
				(set! inner-loop (- inner-loop 1)))

			        (set! offset (+ offset 1))

			(set! blocks-to-process (- blocks-to-process 1)))

		(set! outer-loop (- outer-loop 1)))

	    (gimp-image-undo-group-end image)); end of case 0

				((1)	(gimp-context-set-foreground "red"))); end of case

	)

        (gimp-displays-flush)

)


(script-fu-register
	"script-fu-re-order-layers"
	"<Image>/Layer/Stack/Re-order layers"
	"Test"
	"SteveMi"
	"Unrestricted"
	"2015"
	"*"
	SF-IMAGE	"Image" 0
	SF-DRAWABLE	"Layer" 0
	SF-ADJUSTMENT	"Number of blocks"	'(3 2 99 1 10 0 0)
)
