/**
 * jQuery VGrid v0.1.6 - variable grid layout plugin
 *
 * Terms of Use - jQuery VGrid
 * under the MIT (http://www.opensource.org/licenses/mit-license.php) License.
 *
 * Copyright 2009-2010 xlune.com All rights reserved.
 * (http://blog.xlune.com/2009/09/jqueryvgrid.html)
 */
(function($){function makePos(a){var b=a.data("_vgchild");var c=a.width();var d=[[0,c,0]];var e=0,_c,_size,_point;b.each(function(i){_c=$(this);_size=getSize(_c);_point=getAttachPoint(d,_size[0]);d=updateAttachArea(d,_point,_size);e=Math.max(e,_point[1]+_size[1]);_c.data("_vgleft",_point[0]);_c.data("_vgtop",_point[1])});a.data("_vgwrapheight",e);heightTo(a)};function getAttachPoint(a,b){var c=a.concat().sort(matrixSortDepth);var d=c[c.length-1][2];for(var i=0,imax=c.length;i<imax;i++){if(c[i][2]>=d)break;if(c[i][1]-c[i][0]>=b){return[c[i][0],c[i][2]]}}return[0,d]};function updateAttachArea(a,b,c){var d=a.concat().sort(matrixSortDepth);var e=[b[0],b[0]+c[0],b[1]+c[1]];for(var i=0,imax=d.length;i<imax;i++){if(e[0]<=d[i][0]&&d[i][1]<=e[1]){delete d[i]}else{d[i]=matrixTrimWidth(d[i],e)}}return matrixJoin(d,e)};function matrixSortDepth(a,b){if(!a||!b)return 0;return((a[2]==b[2]&&a[0]>b[0])||a[2]>b[2])?1:-1};function matrixSortX(a,b){if(!a||!b)return 0;return(a[0]>b[0])?1:-1};function matrixJoin(a,b){var c=a.concat([b]).sort(matrixSortX);var d=[];for(var i=0,imax=c.length;i<imax;i++){if(!c[i])continue;if(d.length>0&&d[d.length-1][1]==c[i][0]&&d[d.length-1][2]==c[i][2]){d[d.length-1][1]=c[i][1]}else{d.push(c[i])}}return d};function matrixTrimWidth(a,b){if(a[0]>=b[0]&&a[0]<b[1]||a[1]>=b[0]&&a[1]<b[1]){if(a[0]>=b[0]&&a[0]<b[1]){a[0]=b[1]}else{a[1]=b[0]}}return a};function getSize(a){var b=a.outerWidth(true);var c=a.outerHeight(true);return[b,c]};function heightTo(a){var b=a;var c=b.data("_vgchild").length*(b.data("_vgopt").delay||0)+b.data("_vgopt").time||500;b.stop();if(b.height()<b.data("_vgwrapheight")){if($.browser.msie){b.height(b.data("_vgwrapheight"))}else{b.animate({height:b.data("_vgwrapheight")+"px"},(b.data("_vgopt").time||500),"easeOutQuart")}}else{clearTimeout(b.data("_vgwraptimeout"));b.data("_vgwraptimeout",setTimeout(function(){if($.browser.msie){b.height(b.data("_vgwrapheight"))}else{b.animate({height:b.data("_vgwrapheight")+"px"},(b.data("_vgopt").time||500),"easeOutQuart")}},c))}};function moveTo(a){var b;a.each(function(i){b=$(this);b.css("left",~~b.data("_vgleft")+"px");b.css("top",~~b.data("_vgtop")+"px")})};function animateTo(c,d,e,f){var g=$(c).parent();var h=false;var j=c.length;var i,_c,_pos;for(i=0;i<j;i++){_c=$(c[i]);_pos=_c.position();if(_pos.left!=_c.data("_vgleft")&&_pos.top!=_c.data("_vgtop")){h=true}}if(h){if(typeof(g.data("_vgopt").onStart)=="function")g.data("_vgopt").onStart();c.each(function(i){var a=$(this);var b={duration:e,easing:d};if(c.size()-1==i){b.complete=g.data("_vgopt").onFinish||null}clearTimeout(a.data("_vgtimeout"));a.data("_vgtimeout",setTimeout(function(){a.animate({left:a.data("_vgleft")+"px",top:a.data("_vgtop")+"px"},b)},i*f))})}};function refleshHandler(a){var b=a;clearTimeout(b.data("_vgtimeout"));makePos(b);b.data("_vgtimeout",setTimeout(function(){animateTo(b.data("_vgchild"),b.data("_vgopt").easeing||"linear",b.data("_vgopt").time||500,b.data("_vgopt").delay||0)},500))};function setFontSizeListener(a,b){var s=$("<span />").text(" ").attr("id","_vgridspan").hide().appendTo("body");s.data("size",s.css("font-size"));s.data("timer",setInterval(function(){if(s.css("font-size")!=s.data("size")){s.data("size",s.css("font-size"));b(a)}},1000))};function setImgLoadEvent(a,b){a.bind("vgrid-added",function(){a.find("img").bind("load",function(){b(a)})});a.trigger("vgrid-added");var c=a.append;var d=a.prepend;a.append=function(){c.apply(a,arguments);a.trigger("vgrid-added")};a.prepend=function(){d.apply(a,arguments);a.trigger("vgrid-added")}};$.fn.extend({vgrid:function(b){var c=$(this);var d=b||{};c.data("_vgopt",d);c.data("_vgchild",c.find("> *"));c.data("_vgdefchild",c.data("_vgchild"));c.css({"position":"relative","width":"auto"});c.data("_vgchild").css("position","absolute");makePos(c);moveTo(c.data("_vgchild"));if(c.data("_vgopt").fadeIn){var f=(typeof(c.data("_vgopt").fadeIn)=='object')?c.data("_vgopt").fadeIn:{time:c.data("_vgopt").fadeIn};c.data("_vgchild").each(function(i){var a=$(this);a.css('display','none');setTimeout(function(){a.fadeIn(f.time||250)},i*(f.delay||0))})}$(window).resize(function(e){refleshHandler(c)});if(d.useLoadImageEvent)setImgLoadEvent(c,refleshHandler);if(d.useFontSizeListener)setFontSizeListener(c,refleshHandler);return c},vgrefresh:function(a,b,c,d){var e=$(this);if(e.data("_vgchild")){e.data("_vgchild",e.find("> *"));e.data("_vgchild").css("position","absolute");makePos(e);b=typeof(b)=="number"?b:e.data("_vgopt").time||500;c=typeof(c)=="number"?c:e.data("_vgopt").delay||0;animateTo(e.data("_vgchild"),a||e.data("_vgopt").easeing||"linear",b,c);if(typeof(d)=='function'){setTimeout(d,e.data("_vgchild").length*c+b)}}return e},vgsort:function(b,c,d,e){var f=$(this);if(f.data("_vgchild")){f.data("_vgchild",f.data("_vgchild").sort(b));f.data("_vgchild").each(function(a){$(this).appendTo(f)});makePos(f);animateTo(f.data("_vgchild"),c||f.data("_vgopt").easeing||"linear",typeof(d)=="number"?d:f.data("_vgopt").time||500,typeof(e)=="number"?e:f.data("_vgopt").delay||0)}return f}})})(jQuery);



