function ResizeController() {
var _self = this;
_self.header = 34;
_self.heightPadding = 10;
_self.bottomHeightPadding = 22;
_self.pagePadding = 20;
_self.subPadding = 10;
_self.leftPadding = 0;
_self.subWidth = 192;
_self.leftWidth = 192;
_self.block = 204;
_self.minBlockSize = 3;
_self.blockSpeed = 400;
_self.speed = 300;
_self.speedWrapp = 10;
_self.windowSizeChanging = false;
_self.targetWidth = 0;
_self.firstResize = function(width) {var _self = this;_self.resizeColumnSize(width, "quick");}
_self.resize = function(width) {var _self = this;_self.resizeColumnSize(width, "animate");}
_self.resizeColumnSize = function(width, type){var _self = this; if(_self.windowSizeChanging==false){_self.windowSizeChanging=true;

var blockCnt = _self.getInnerColumnSize(width);
var nextContainerWidth = _self.block * blockCnt + _self.leftWidth + _self.subWidth + _self.leftPadding + _self.subPadding +"px";

if(type=="quick"){
$('#container').css(new Object({"width":nextContainerWidth}));
$('#head').css(new Object({"width":nextContainerWidth}));
$('#footMenuW').css(new Object({"width":nextContainerWidth}));
$('#copyEm').css(new Object({"width":nextContainerWidth}));
_self.resizeInnerColumns(blockCnt,"first");
_self.windowSizeChanging = false;
}else{
$('#container').animate(
new Object({"width":nextContainerWidth}),_self.speed+_self.speedWrapp,function(){
_self.resizeInnerColumns(blockCnt,"other");
_self.windowSizeChanging = false;
});
$('#head').animate(new Object({"width":nextContainerWidth}));
$('#footMenuW').css(new Object({"width":nextContainerWidth}));
$('#copyEm').css(new Object({"width":nextContainerWidth}));
}
}
}
_self.getInnerColumnSize = function(width){
var _self = this;
var blockArea = (width-_self.pagePadding) - _self.subPadding - _self.leftPadding - _self.subWidth - _self.leftWidth;
var blockCnt = Math.floor(blockArea / _self.block);
if (blockCnt < _self.minBlockSize) {
blockCnt = _self.minBlockSize;
}
return blockCnt;
}

_self.addPointsSortByHeight = function(points){
var working;
var rs = new Array();
for(var i=0 ; i < points.length ; i++){
if(points[i] == "unset"){
}else{
rs.push(points[i]);
}
}
for(i=0 ; i < rs.length - 1 ; i++){
for(var j=rs.length-1;j>i;j--){
if(rs[j].height < rs[j-1].height){
working = rs[j];
rs[j] = rs[j-1];
rs[j-1] = working;
}else if(rs[j].height == rs[j-1].height && rs[j].column < rs[j-1].column){
working = rs[j];
rs[j] = rs[j-1];
rs[j-1] = working;
}
}
}
return rs;
}
_self.getMaxHeightOfAddPoints = function(points){
var max = 0;
for(var i=0 ; i < points.length ; i++){
if(points[i].height > max){
max = points[i].height;
}
}
return max;
}
_self.getMaxPoint = function(points){
var max = 0;
for(var i=0 ; i < points.length ; i++){
if(points[i].height > max){
max = i;
}
}
return max;
}
_self.getMaxRightPoint = function(points){
var max = _self.getMaxPoint(points);
for(var i=0 ; i < points.length ; i++){
if(points[i].column > points[max].column &&
points[i].height > 0){
max = i;
}
}
return max;
}
_self.resizeInnerColumns = function(size,type){
var _self = this;
var addPoints = new Array(new Object({column:1,height:0,size:2}));
var mainBlock = $("#mainBlock");
var blockOrder1 = mainBlock.find(".block.order1");
var blockOrder2 = mainBlock.find(".block.order2");
if(blockOrder1.length > 0){
var order1Card = blockOrder1.get(0);
var myAddPoint = addPoints[0];
var myColumn = myAddPoint.column;
var myHeight = myAddPoint.height;
var nextRight = new Object({
column:myColumn+_self.mySize(order1Card),
height:myHeight,
size:2
});
var nextBottom = new Object({
column : myColumn,
height : myHeight + $(order1Card).height() + _self.heightPadding,
size:2
});
if(blockOrder2.length > 0){
addPoints[0] = nextBottom;
addPoints.push(nextRight);
}else{
addPoints[0] = nextRight;
addPoints.push(nextBottom);
}
}
if(blockOrder2.length > 0){
var order2Card = blockOrder2.get(0);
myAddPoint = addPoints[0];
myColumn = myAddPoint.column;
myHeight = myAddPoint.height;

$(order2Card).animate(new Object({
"left":((myColumn-1)*_self.block)+"px",
"top":myHeight+"px"
}),_self.blockSpeed);

nextRight = new Object({
column:myColumn+_self.mySize(order2Card),
height:myHeight,
size:2
});
nextBottom = new Object({
column : myColumn,
height : myHeight + $(order2Card).height() + _self.heightPadding,
size:2
});
if(blockOrder1.length){
addPoints[0] = "unset";
}else{
addPoints[0] = nextRight;
}
addPoints.push(nextBottom);
}

addPoints = _self.addPointsSortByHeight(addPoints);

var card;
var mySize;
var working;
var compAddPoint;
var compColumn;
var compHeight;


var eachBlocks = mainBlock.find(".block").not(".order1,.order2,.pagenate");

var l = eachBlocks.length;
for(var i=0; i< l; i++){

card = eachBlocks.get(i);
mySize = _self.mySize(card);

for(var pointIndex = 0 ; pointIndex < addPoints.length ; pointIndex++){

myAddPoint=addPoints[pointIndex];
myColumn = myAddPoint.column;
myHeight = myAddPoint.height;

for(var pointIndex2 = pointIndex ; pointIndex2 < addPoints.length ; pointIndex2++){
compAddPoint = addPoints[pointIndex2];
compColumn = compAddPoint.column;
compHeight = compAddPoint.height;

if( compColumn==myColumn+1 && compHeight > myHeight){

addPoints[pointIndex].size=1;
if(mySize >= 2){
working = addPoints[pointIndex];
working.height = compHeight;
working.size=2;

addPoints[pointIndex2] = working;
addPoints[pointIndex] = "unset";
}
}
}


if(addPoints[pointIndex]!="unset" && (myColumn - 1) + mySize <= size    ){

addPoints = _self.moveElement(card, size, addPoints, pointIndex);
break;
}

}
addPoints = _self.addPointsSortByHeight(addPoints);

}

var blockPagenate = mainBlock.find(".pagenate.block");
if(blockPagenate.length > 0){
var pagenateCard = blockPagenate.eq(0);
var pagenateIndex = _self.getMaxRightPoint(addPoints);
var pagenateHeight = _self.getMaxHeightOfAddPoints(addPoints)+2;

pagenateCard.animate(new Object({
"left":((size-1)*_self.block)+"px",
"top": pagenateHeight +"px"
}),_self.blockSpeed);

}


var height = _self.getMaxHeightOfAddPoints(addPoints);
if(height > $("#leftBlockArea").height())
$("#main").height(height);
else
$("#main").height($("#leftBlockArea").height());

}


_self.moveElement = function(card, size, addPoints, pointIndex){
var _self = this;

var myAddPoint=addPoints[pointIndex];
var myColumn = myAddPoint.column;
var myHeight = myAddPoint.height;
var mySize = _self.mySize(card);

$(card).animate(new Object({
"left":((myColumn-1)*_self.block)+"px",
"top":myHeight+"px"
}),_self.blockSpeed);

var nextRight = new Object({
column:myColumn+mySize,
height:myHeight,
size:2
});

var nextBottom = new Object({
column : myColumn,
height : myHeight + $(card).height() + _self.heightPadding,
size:2
});

var nextHeight = myHeight + $(card).height() + _self.heightPadding;
var nextColumn = myColumn + mySize -1;
for(var pointIndex2 = 0 ; pointIndex2 < addPoints.length ; pointIndex2++){

var compAddPoint = addPoints[pointIndex2];
var compColumn = compAddPoint.column;
var compHeight = compAddPoint.height;

if((
pointIndex2 != pointIndex &&
compColumn >= myColumn &&
compColumn <= nextColumn

)&& (( compHeight < myHeight) || (
compHeight >= myHeight &&
compHeight < nextHeight
))
){
addPoints[pointIndex2] = "unset";
}

if( compColumn==nextRight.column && compHeight >= nextRight.height){
nextRight = "unset";
}

if(compColumn == nextBottom.column && compHeight == nextBottom.height){
nextBottom = "unset";
}

}

if(nextRight.column > size){
addPoints[pointIndex] = "unset";
nextBottom.size=1;
}else{
addPoints[pointIndex] = nextRight;
}
addPoints.push(nextBottom);

return addPoints;
}


_self.mySize = function(element){
var _self = this;
return Math.round($(element).width()/_self.block);
}

}

function moveElementFunc(i,left,top,speed){
var mainBlock = $("#mainBlock");
var element = mainBlock.find(".block").not(".order1,.order2").get(i);
$(element).animate({left:left+"px",top:top+"px"},speed);

}

var myResize = new ResizeController();
var oldWidth = 0;

function resize(){
var width = $('html').outerWidth();
var _self = window;

if(_self.oldWidth != width){
_self.oldWidth = width;
_self.myResize.resize(width);
}
}

$(document).ready(function() {
var _self = window;

_self.myResize.firstResize($('html').outerWidth());
setInterval(_self.resize, 1850);

});
;
