jQuery.noConflict();

var BLOCK_WIDTH = 190;
var BLOCK_MARGIN = 10;
var BLOCK_SIZE = BLOCK_WIDTH + BLOCK_MARGIN;
var BLOCK_MINLIMIT = 4;
var BLOCK_ANIMATE_DURATION = 500;
var BLOCK_ANIMATE_TYPE = 'easeInOutCubic';
var RELAYOUT_INTERVAL = 1500;
var MASK_ANIMATE_DURATION = 1700;

var window_width;

jQuery(window).ready(function(){
	window_width = jQuery(window).width();

	jQuery('#blocks > div.block').css('width', BLOCK_WIDTH + 'px');
	jQuery('#blocks div.doublesize').css('width', BLOCK_WIDTH*2 + BLOCK_MARGIN + 'px');
	jQuery('#blocks div.triplesize').css('width', BLOCK_WIDTH*3 + BLOCK_MARGIN*2 + 'px');

	jQuery('div#mask').fadeOut(MASK_ANIMATE_DURATION, function(){
		jQuery('div#mask').css({display:"none"});
	});

	reLayout();
	headerReLayout();

	setInterval(reLayout, RELAYOUT_INTERVAL);
});

function reLayout() {
	var layoutarea_w = jQuery(window).width();
	var block_row_max = Math.max(BLOCK_MINLIMIT, parseInt(layoutarea_w / BLOCK_SIZE));
	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] = jQuery('#header').height();
	}

	var stopFlag = 1;

	jQuery('#blocks > div.block').each(function() {
		var item_width = jQuery(this).outerWidth();
		var item_height = jQuery(this).outerHeight();
		var item_x = jQuery(this).css('left');
		var item_y = jQuery(this).css('top');

		var block_rowsize = Math.round(item_width / BLOCK_WIDTH);
		if(block_rowsize == 1){
			block_row = 0;
			var minpos_y = maxpos_y[0];
			for (i=1; i<maxpos_y.length; i++) if (maxpos_y[i] < minpos_y) minpos_y = maxpos_y[i];
			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];

			maxpos_y[block_row] = maxpos_y[block_row] + item_height + BLOCK_MARGIN;
		} else if(block_rowsize == 2){
			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[0];
				for (j=1; j<pair.length; j++) if (pair[j] > pos_pair_max[i]) pos_pair_max[i] = pair[j];
			}
			var pos_pair_min = pos_pair_max[0];
			for (i=1; i<pos_pair_max.length; i++) if (pos_pair_max[i] < pos_pair_min) pos_pair_min = pos_pair_max[i];
			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];
			}

			maxpos_y[block_row] = startpos_y + item_height + BLOCK_MARGIN;
			maxpos_y[block_row+1] = startpos_y + item_height + BLOCK_MARGIN;
		}else if(block_rowsize == 3){
			block_row = 0;
			var pos_pair_max = Array();
			for(i=0; i<(block_row_max-2); i++){
				var pair = new Array(maxpos_y[i],  maxpos_y[i+1]);
				pos_pair_max[i] = pair[0];
				for (j=1; j<pair.length; j++) if (pair[j] > pos_pair_max[i]) pos_pair_max[i] = pair[j];
			}
			var pos_pair_min = pos_pair_max[0];
			for (i=1; i<pos_pair_max.length; i++) if (pos_pair_max[i] < pos_pair_min) pos_pair_min = pos_pair_max[i];
			for(i=(block_row_max-2); 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];
			}

			maxpos_y[block_row] = startpos_y + item_height + BLOCK_MARGIN;
			maxpos_y[block_row+1] = startpos_y + item_height + BLOCK_MARGIN;
			maxpos_y[block_row+2] = startpos_y + item_height + BLOCK_MARGIN;
		}
		if((startpos_x+'px' != item_x) || ((startpos_y + BLOCK_MARGIN)+'px' != item_y)) {
			jQuery(this).animate({
				left: startpos_x + 'px',
				top: startpos_y + BLOCK_MARGIN + 'px'
			}, BLOCK_ANIMATE_DURATION, BLOCK_ANIMATE_TYPE);
			stopFlag = 0;
		}
	});

	var renderpos_x = parseInt((layoutarea_w - (BLOCK_SIZE * block_row_max))/2 );

	var maxpos_y_max = maxpos_y[0];
	for (i=1; i<maxpos_y.length; i++) if (maxpos_y[i] > maxpos_y_max) maxpos_y_max = maxpos_y[i];
	var footer_h = maxpos_y_max;
	var footer_w = BLOCK_SIZE * block_row_max;
	if(footer_w <= 790) footer_w = 790;
//	if(!stopFlag) {
		jQuery('#footer').animate({
			top: footer_h + 'px',
			left: renderpos_x + 'px',
			width: footer_w
		}, BLOCK_ANIMATE_DURATION, BLOCK_ANIMATE_TYPE);

		jQuery('#blocks').animate({
			left: renderpos_x + 'px'
		}, BLOCK_ANIMATE_DURATION, BLOCK_ANIMATE_TYPE);
//	}

	if (window_width != jQuery(window).width()) {
		headerReLayout();
		window_width = jQuery(window).width();
	}

jQuery('#pagebody').css('height',jQuery('#footer').position().top + jQuery('#footer').outerHeight() + 'px');
}

function headerReLayout(){
	var block_row_max = Math.max(BLOCK_MINLIMIT, parseInt(jQuery(window).width() / BLOCK_SIZE));
	var renderpos_x = parseInt((jQuery(window).width() - (BLOCK_SIZE * Math.max(BLOCK_MINLIMIT, parseInt(jQuery(window).width() / BLOCK_SIZE))))/2 );

	jQuery('#header-inner').animate({
		width: BLOCK_SIZE * (block_row_max-1) - BLOCK_MARGIN - 3 + 'px'
	}, BLOCK_ANIMATE_DURATION, BLOCK_ANIMATE_TYPE);

	jQuery('#header').animate({
		left: renderpos_x + 'px', 
		width: BLOCK_SIZE * (block_row_max) - BLOCK_MARGIN + 'px'
	}, BLOCK_ANIMATE_DURATION, BLOCK_ANIMATE_TYPE);
}
