/**
 * jQuery Blocks v1.2
 */

/**
 * Avoid conflict with Prototype.
 */
jQuery.noConflict();

/**
 * Settings
 */
var BLOCK_WIDTH = 300;
var BLOCK_MARGIN = 20;
var BLOCK_SIZE = BLOCK_WIDTH + BLOCK_MARGIN;
var BLOCK_MINLIMIT = 3;
var BLOCK_ANIMATE_DURATION = 500;
var BLOCK_ANIMATE_TYPE = 'easeInOutCubic';
var FONTSIZE_CHECK_INTERVAL = 300;
var REMIX_INTERVAL = 1500;
var INIT_ANIMATE_DURATION = 1000;

/**
 * Init
 */
var area_offset_x = area_offset_y = 0;
var basic_fontsize = current_fontsize = 0;
var blind_timerid;


jQuery(window).ready(function() {
		area_offset_x = jQuery('#blocks').offset().left;
		area_offset_y = jQuery('#blocks').offset().top;

		jQuery('#blocks > div.block').css('width', BLOCK_WIDTH + 'px');
		jQuery('#blocks div.new').css('width', BLOCK_WIDTH*2 + BLOCK_MARGIN + 'px');

		// \
		remix();

		// Remixing by interval
		setInterval(remix, REMIX_INTERVAL);

		if (jQuery('#blind')) {
			blind_timerid = setTimeout('hide_blind()',1000);
			hide_blind();
		}
});

function hide_blind() {
	jQuery('#blind').fadeOut(1000);
	clearTimeout(blind_timerid);
}

function init_remix(){
		// Size define
		var windowsize_h = jQuery(window).height();
		var windowsize_w = jQuery(window).width();
		var contents_h = jQuery('#container').height();
		var layoutarea_w = windowsize_w;
		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(i=0; i<block_row_max; i++){
				maxpos_y[i] = 0;
		}

		// Each cards calculating layouts.
		jQuery('#blocks > div.block').each(function() {
				var item_width = jQuery(this).outerWidth();
				var item_height = jQuery(this).outerHeight();
				var block_rowsize = Math.floor(item_width / BLOCK_WIDTH);
				if(block_rowsize == 1) {
						// Detect block position.
						// Scan for all rows, detect min height.
						block_row = 0;
						var minpos_y = maxpos_y.min();
						for(i=block_row_max; i>=0; i--) {
								if(minpos_y == maxpos_y[i]) {
										block_row = i;
								}
						}

						startpos_x = block_row * BLOCK_SIZE;
						startpos_y = maxpos_y[block_row];
						
						jQuery(this).css({top:startpos_y, left:startpos_x, borderWidth: BLOCK_MARGIN});

						// Lock field for this block.
						maxpos_y[block_row] = maxpos_y[block_row] + item_height + BLOCK_MARGIN;
				} else if(block_rowsize == 2) {
						// Detect block position.
						// Scan for all rows, detect min height with doublesized block.
						block_row = 0;
						var pos_pair_max = Array();
						for(i=0; i<(block_row_max-1); i++) {
								var pair = new Array(maxpos_y[i],  maxpos_y[i+1]);
								pos_pair_max[i] = pair.max();
						}
						var pos_pair_min = pos_pair_max.min();
						for(i=(block_row_max-1); i>=0; i--) {
								if(pos_pair_min == pos_pair_max[i]) {
										block_row = i;
								}
						}

						startpos_x = block_row * BLOCK_SIZE;
						if(maxpos_y[block_row] >= maxpos_y[block_row+1]) {
								startpos_y = maxpos_y[block_row];
						} else {
								startpos_y = maxpos_y[block_row+1];
						}

						jQuery(this).css({top:startpos_y,left:startpos_x,borderWidth: BLOCK_MARGIN});

						// Lock fields for this blocks.
						maxpos_y[block_row] = startpos_y + item_height + BLOCK_MARGIN;
						maxpos_y[block_row+1] = startpos_y + item_height + BLOCK_MARGIN;
				}
		});

		// Calculating rendering startpoint.
		var renderpos_x = parseInt((layoutarea_w - (BLOCK_SIZE * block_row_max))/2 + 30);
		var headerpos_x = parseInt((layoutarea_w - (BLOCK_SIZE * block_row_max))/2 - 15);

		jQuery('#header').css({top:'0px',left:renderpos_x});
		jQuery('#blocks').css({top:'0px',left:renderpos_x});
	
		// Animate displayareas.
		var footer_h = Math.max(maxpos_y.max(), contents_h);
		var tmp = windowsize_h - 330;
		if(tmp > footer_h) {
			footer_h = tmp;
		}
		jQuery('#footer').css({top:footer_h, left:0});
		jQuery('#foot').css({top:0, left:renderpos_x});
}


/**
 * Remix blocks. (Re-Layouting)
 */
function remix() {
		// Size define
		var windowsize_h = jQuery(window).height();
		var windowsize_w = jQuery(window).width();
		var contents_h = jQuery('#container').height();
		var layoutarea_w = windowsize_w;
		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(i=0; i<block_row_max; i++){
				maxpos_y[i] = 0;
		}

		// Each cards calculating layouts.
		jQuery('#blocks > div.block').each(function() {
				var item_width = jQuery(this).outerWidth();
				var item_height = jQuery(this).outerHeight();
				var block_rowsize = Math.floor(item_width / BLOCK_WIDTH);
				if(block_rowsize == 1){
						// Detect block position.
						// Scan for all rows, detect min height.
						block_row = 0;
						var minpos_y = maxpos_y.min();
						for(i=block_row_max; i>=0; i--){
								if(minpos_y == maxpos_y[i]){
										block_row = i;
								}
						}
						startpos_x = block_row * BLOCK_SIZE;
						startpos_y = maxpos_y[block_row];

						// 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 field for this block.
						maxpos_y[block_row] = maxpos_y[block_row] + item_height + BLOCK_MARGIN;
				}else if(block_rowsize == 2){
						// Detect block position.
						// Scan for all rows, detect min height with doublesized block.
						block_row = 0;
						var pos_pair_max = Array();
						for(i=0; i<(block_row_max-1); i++){
								var pair = new Array(maxpos_y[i],  maxpos_y[i+1]);
								pos_pair_max[i] = pair.max();
						}
						var pos_pair_min = pos_pair_max.min();
						for(i=(block_row_max-1); i>=0; i--){
								if(pos_pair_min == pos_pair_max[i]){
										block_row = i;
								}
						}

						startpos_x = block_row * BLOCK_SIZE;
						if(maxpos_y[block_row] >= maxpos_y[block_row+1]){
								startpos_y = maxpos_y[block_row];
						}else{
								startpos_y = maxpos_y[block_row+1];
						}

						// 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.
						maxpos_y[block_row] = startpos_y + item_height + BLOCK_MARGIN;
						maxpos_y[block_row+1] = startpos_y + item_height + BLOCK_MARGIN;
				}
		});
		
		
		// Calculating rendering startpoint.
		var renderpos_x = parseInt((layoutarea_w - (BLOCK_SIZE * block_row_max))/2 + 30);
		var headerpos_x = parseInt((layoutarea_w - (BLOCK_SIZE * block_row_max))/2 - 15);

		jQuery('#header').css({top:'0px',left:renderpos_x});
		jQuery('#blocks').css({top:'0px',left:renderpos_x});
	
		// Animate displayareas.
		var footer_h = Math.max(maxpos_y.max(), contents_h);
		var tmp = windowsize_h - 330;
		if(tmp > footer_h) {
			footer_h = tmp;
		}
		jQuery('#footer').css({top:footer_h, left:0});
		jQuery('#foot').css({top:0, left:renderpos_x});
/*		jQuery('#blocks').animate({
				top: '0px',
				},
				INIT_ANIMATE_DURATION,
				BLOCK_ANIMATE_TYPE
		);*/
		
		
/*
		// Calculating rendering startpoint.
		var renderpos_x = parseInt((layoutarea_w - (BLOCK_SIZE * block_row_max))/2 + 30);
		var headerpos_x = parseInt((layoutarea_w - (BLOCK_SIZE * block_row_max))/2 - 15);

		// Animate displayareas.
		var footer_h = Math.max(maxpos_y.max(), contents_h);
		var tmp = windowsize_h - 330;
		if(tmp > footer_h) {
			footer_h = tmp;
		}
		jQuery('#footer').css({top:footer_h, left:0});
		jQuery('#header').animate({
				left: headerpos_x + 'px'
				},
				BLOCK_ANIMATE_DURATION,
				BLOCK_ANIMATE_TYPE
		);
		jQuery('#blocks').animate({
				left: renderpos_x + 'px'
				},
				BLOCK_ANIMATE_DURATION,
				BLOCK_ANIMATE_TYPE
		);
*/		
		
}

