/**
 * jQuery Blocks v1.0 - http://www.marubeni-sys.com/
 *
 * Load img hover.
 * Relayout blocks.
 * Count clicks.
 *
 */

/**
 * Avoid conflict with Prototype.
 */
jQuery.noConflict();

/**
 * Settings
 */
var BLOCK_WIDTH = 197;
var BLOCK_MARGIN = 4;
var LEFT_MARGIN = 8;
var BLOCK_SIZE = BLOCK_WIDTH + BLOCK_MARGIN;
var BLOCK_MINLIMIT = 2;
var BLOCK_ANIMATE_DURATION = 500;
var BLOCK_ANIMATE_TYPE = 'easeInOutCubic';
var REMIX_INTERVAL = 1200;

/**
 * Process clicked count.
 */
function procStat(form_id, blk_id){
	var form = document.getElementById(form_id);
	var blk = form.proc_blk_id;
	blk.value = blk_id;
	form.submit();
}

/* Add onclick function to a link */
function clickLink(divId, tagName, formId, blockId){
	jQuery(divId + " " + tagName).each(function () { 
		jQuery(this).click(function() {
				procStat(formId, blockId);
		});
    });
}

/**
 * Init
 */
/* Blog link clicked */
jQuery(document).ready(function(){
	setTimeout('clickLink("#feed", "a", "form_stats_id", "blk_id_11")', 1000);
});

/* Auto relayout */
jQuery(window).ready(function(){		
		remix();
		// Remixing by interval
		setInterval(remix, REMIX_INTERVAL);
		/* Blog link clicked */
		//setTimeout('clickLink("#feed", "a", "form_stats_id", "blk_id_11")', 1000);
});

/**
 * Remix blocks. (Re-Layouting)
 */
function remix(){
		// Size define
		var windowsize_h = jQuery(window).height();
		var windowsize_w = jQuery(window).width();
		var layoutarea_w = windowsize_w - 200;
		var block_row_max = Math.max(BLOCK_MINLIMIT, parseInt(layoutarea_w / BLOCK_SIZE));

		// Position define
		var block_row = 0;
		var startpos_x = startpos_y = 0;
		var maxpos_y = Array();
		for(var i=0; i<block_row_max; i++){
				maxpos_y[i] = 213;
		}

		// Each blocks calculating layouts.
		for(var j = 0; j < intArrOder.length; j++){
			jQuery("#blocks > div.block[id = " + intArrOder[j] + "]").each(function() {
					var item_width = jQuery(this).outerWidth();
					var item_height = jQuery(this).outerHeight();
					var block_rowsize = Math.floor(item_width / BLOCK_WIDTH);
					block_rowsize = Math.ceil(item_width / (BLOCK_WIDTH + (block_rowsize-1)*BLOCK_MARGIN));
					
					// Detect block position.
					// Scan for all rows, detect min height with block_rowsize blocks.
					block_row = 0;
					var pos_multi_max = Array();
					for(var i=0; i<(block_row_max-block_rowsize+1); i++){
							var multi = new Array();
							for(var m=i;m<i+block_rowsize;m++){
								multi[m]=maxpos_y[m];
							}
							pos_multi_max[i] = multi.max();
					}
					var pos_multi_min = pos_multi_max.min();
					for(var i=(block_row_max-block_rowsize+1); i>=0; i--){
							if(pos_multi_min == pos_multi_max[i]){
									block_row = i;
							}
					}

					startpos_x = block_row * BLOCK_SIZE + LEFT_MARGIN + 179;
					var max_multi_startpos_y = Array();
					for(var k=block_row;k<block_row+block_rowsize;k++){
						max_multi_startpos_y[k] = maxpos_y[k];
					}
					startpos_y = max_multi_startpos_y.max();

					// Animation.
					jQuery(this).animate({
									left: startpos_x + 'px',
									top: startpos_y + BLOCK_MARGIN + 'px',
									borderWidth: BLOCK_MARGIN + 'px'
							},
							BLOCK_ANIMATE_DURATION,
							BLOCK_ANIMATE_TYPE
					);

					// Lock fields for this blocks.
					for(var l=block_row;l<block_row+block_rowsize;l++){
						maxpos_y[l] = startpos_y + item_height + BLOCK_MARGIN;
					}
						
			});
		}

		// Calculating rendering startpoint.
		var renderpos_x = parseInt((layoutarea_w - (BLOCK_SIZE * block_row_max))/2 );

		// Animate displayareas.
		var menu_h = jQuery('#blk_id_0').height();
		var menu_w = jQuery('#blk_id_0').outerWidth();
		var banner_w = jQuery('#blk_id_1').outerWidth();
		var footer_h = Math.max(maxpos_y.max(), menu_h);
		var footer_w = banner_w + menu_w + 14;
		jQuery('div.ft').animate({
				top: footer_h + 'px',
				left: LEFT_MARGIN + 'px',
                width: footer_w
				},
				BLOCK_ANIMATE_DURATION,
				BLOCK_ANIMATE_TYPE
		);
}

