/**************************************************************************
 * jquery.themepunch.megafolio.js - jQuery Plugin for megafolio pro gallery
 * @version: 1.2.3 (05.07.2013)
 * @requires jQuery v1.4 or later
 * @author Krisztian Horvath
**************************************************************************/




(function($,undefined){


	////////////////////////////////////////
	// THE REVOLUTION PLUGIN STARTS HERE //
	///////////////////////////////////////

	$.fn.extend({

		///////////////////////////
		// MAIN PLUGIN  FUNCTION //
		///////////////////////////
		megafoliopro: function(options) {

				var defaults = {
					filterChangeAnimation:"rotatescale",			// fade, rotate, scale, rotatescale, pagetop, pagebottom,pagemiddle
					filterChangeSpeed:400,							// Speed of Transition
					filterChangeRotate:99,							// If you ue scalerotate or rotate you can set the rotation (99 = random !!)
					filterChangeScale:0.6,							// Scale Animation Endparameter
					delay:20,
					defaultWidth:980,
					paddingHorizontal:10,
					paddingVertical:10,
					layoutarray:[11],
					lowSize:50,
					startFilter:"*"
				};

				options = $.extend({}, defaults, options);


				return this.each(function() {

						// Delegate .transition() calls to .animate()
						// if the browser can't do CSS transitions.
						if (!$.support.transition)
							$.fn.transition = $.fn.animate;

						var opt=options;
						opt.detaiview="off";
						opt.firststart=1;
						if (opt.filter==undefined) opt.filter="*";

						if (opt.delay==undefined) opt.delay=0;

						//opt.savetrans = opt.filterChangeAnimation;
						//opt.filterChangeAnimation="fade";

						// CHECK IF FIREFOX 13 IS ON WAY.. IT HAS A STRANGE BUG, CSS ANIMATE SHOULD NOT BE USED
						var firefox = opt.firefox13 = false;
						var ie = opt.ie = !$.support.opacity;
						var ie9 = opt.ie9 = !$.support.htmlSerialize


						if (ie) $('body').addClass("ie8");
						if (ie9) $('body').addClass("ie9");

						var container=$(this);
						container.data('defaultwidth',opt.defaultWidth);
						container.data('paddingh',opt.paddingHorizontal);
						container.data('paddingv',opt.paddingVertical);
						container.data('order',opt.layoutarray);
						container.data('ie',ie);
						container.data('ie9',ie9);
						container.data('ff',firefox);
						container.data('opt',opt);


						prepairEntries(container,opt);
						reOrder(container,0);
						addFilter(container,"*");
						preparingLazyLoad(container);
						reOrder(container,0);
						setTimeout(function() {
							rePosition(container);
						},400)


						// START WITH AN ALTERNATIVE FILTER BY BUILDING THE CONTAINERS
						if ( opt.startFilter!="*" && opt.startFilter !=undefined) {
							addFilter(container,opt.startFilter);
							reOrder(container,0);
							rePosition(container);
						}


						$(window).resize(function() {
							clearTimeout(container.data('resized'));

							container.data('resized',setTimeout(function() {
								reOrderOrdered(container,0,container.find('>.mega-entry.tp-ordered').length);

							},150));
						});

					/****************************************************
						-	APPLE IPAD AND IPHONE WORKAROUNDS HERE	-
					******************************************************/

					if((navigator.userAgent.match(/iPhone/i)) || (navigator.userAgent.match(/iPod/i)) || (navigator.userAgent.match(/iPad/i))) {
					    $(".mega-entry").click(function(){
					        //we just need to attach a click event listener to provoke iPhone/iPod/iPad's hover event
					        //strange
					    });
					}
				})
			},

		///////////////////////
		// METHODE RESUME    //
		//////////////////////
		megamethode: function(option) {
				return this.each(function() {
					// CATCH THE CONTAINER
					var container=$(this);
				})
		},

		megagetcurrentorder: function() {

					// CATCH THE CONTAINER
					var container=$(this);
					return container.data('lastorder');

		},

		megaappendentry: function(entry) {

					// CATCH THE CONTAINER
					var container=$(this);
					var newentry=$(entry);
					newentry.addClass("mega-entry-added");
					container.append(newentry);
					var opt=container.data('opt');

					prepairNewEntries(container,opt);

					reOrder(container,0);

					rePosition(container,1);

					setTimeout(function() {
						addFilter(container,opt.filter);
						reOrder(container,0);
						rePosition(container,1);
					},200);


		},

		megaremix: function(order) {
				return this.each(function() {
					// CATCH THE CONTAINER
					var container=$(this);
					if (order!=undefined)
						container.data('order',order);
					notOrdered(container);
					reOrder(container,0);
					rePosition(container);

				})
		},

		megafilter: function(filter) {
				return this.each(function() {
					// CATCH THE CONTAINER
					var container=$(this);

					if (container.data('nofilterinaction')!=1) {
						
						container.data('nofilterinaction',1);
						addFilter(container,filter);
						reOrder(container,0);
						rePosition(container);
						setTimeout(function() {
							container.data('nofilterinaction',0);

						},1200)

					} else {
						clearInterval(container.data('nextfiltertimer'));
						container.data('nextfiltertimer',setInterval(function() {
							if (container.data('nofilterinaction')!=1) {
								clearInterval(container.data('nextfiltertimer'));
								addFilter(container,filter);
								reOrder(container,0);
								rePosition(container);
								container.data('nofilterinaction',1);
								setTimeout(function() {
									container.data('nofilterinaction',0);

								},1200)
							}
						},10));
					}
				})
		},

		megaanimchange: function(anim,speed,rotate,scale) {
				return this.each(function() {
					// CATCH THE CONTAINER
					var container=$(this);
					var opt=container.data('opt');
					var filter=opt.filter;
					opt.filterChangeAnimation=anim;
					opt.filterChangeSpeed=speed;
					opt.filterChangeRotate=rotate;
					opt.filterChangeScale=scale;
					addFilter(container,"");
					addFilter(container,filter);
					setTimeout(function() {

						reOrder(container,0);
						rePosition(container);
					},2*opt.filterChangeSpeed);
					container.data('opt',opt);
				})
		}
	})



	////////////////////////////////////////////////////////
	//	WRAP THE DIVS DEPENDING ON THE AMOUNT OF ENTRIES //
	////////////////////////////////////////////////////////
	function prepairEntries(container,opt) {

		container.find('>.mega-entry').each(function() {
				var ent=$(this);
				ent.removeClass('tp-layout-first-item').removeClass('tp-layout-last-item').removeClass('very-last-item');
				ent.addClass("tp-notordered").addClass("mega-entry-added");
				ent.wrapInner('<div class="mega-entry-innerwrap"></div>');
				//ent.find('.mega-socialbar').appendTo(ent)
				var iw = ent.find('.mega-entry-innerwrap')
				/*if (opt.ie) {
					iw.append('<img class="ieimg" src='+ent.data("src")+'>');
				} else {*/
					iw.css({'background':'url('+ent.data("src")+')','backgroundPosition':'50% 49%', 'backgroundSize':'cover', 'background-repeat':'no-repeat'});
//				}

				// LET ACT ON THE CLICK ON ITEM SOMEWAY
				ent.find('.mega-show-more').each(function() {
					var msm = $(this);

					// SAVE THE ID OF THE mega-entry WHICH IS CORRESPONDING ON THE BUTTON
					msm.data('entid',ent.attr('id'));

					// HANDLING OF THE CLICK
					msm.click(function() {
						var msm=$(this);
						var ent=container.find('#'+msm.data('entid'));
						ent.addClass("mega-in-detailview");
						opt.detailview="on";
					});

				});
		});



	}


	////////////////////////////////////////////////////////
	//	WRAP THE DIVS DEPENDING ON THE AMOUNT OF ENTRIES //
	////////////////////////////////////////////////////////
	function prepairNewEntries(container,opt) {

		container.find('>.mega-entry-added').each(function(i) {
				var ent=$(this);
				if (!ent.hasClass('tp-layout')) {

						ent.removeClass('tp-layout-first-item').removeClass('tp-layout-last-item').removeClass('very-last-item');
						ent.addClass("tp-notordered")
						ent.wrapInner('<div class="mega-entry-innerwrap"></div>');
						//ent.find('.mega-socialbar').appendTo(ent)
						var iw = ent.find('.mega-entry-innerwrap')
						/*if (opt.ie) {
							iw.append('<img class="ieimg" src='+ent.data("src")+'>');
						} else {*/
							iw.css({'background':'url('+ent.data("src")+')','backgroundPosition':'50% 49%', 'backgroundSize':'cover', 'background-repeat':'no-repeat'});
						//}

						// LET ACT ON THE CLICK ON ITEM SOMEWAY
						ent.find('.mega-show-more').each(function() {
							var msm = $(this);

							// SAVE THE ID OF THE mega-entry WHICH IS CORRESPONDING ON THE BUTTON
							msm.data('entid',ent.attr('id'));

							// HANDLING OF THE CLICK
							msm.click(function() {
								var msm=$(this);
								var ent=container.find('#'+msm.data('entid'));
								ent.addClass("mega-in-detailview");
								opt.detailview="on";

							});

						});
				}
		});



	}

	///////////////////////////////////////
	//	ADD NOT ORDERED TO THE ENTRIES   //
	///////////////////////////////////////
	function notOrdered(container) {
		container.find('>.mega-entry.tp-layout').each(function() {
			var ent=$(this);
			ent.removeClass('tp-layout').addClass('tp-notordered');
		});
	}



	///////////////////////////////////////
	//	ADD FILTER FOR THE ENTRIES       //
	///////////////////////////////////////
	function addFilter(container,filter) {


		var ie=container.data('ie');
		var ie9=container.data('ie9');
		var opt = container.data('opt');
		if (opt.filterChangeSpeed == undefined) opt.filterChangeSpeed = Math.round(Math.random()*500+100);
		opt.filter=filter;
		var outi=1;
		var ini=1;
		
		

		container.find('>.mega-entry').each(function(i) {
			var ent=$(this);

			var rot = opt.filterChangeRotate;
			if (rot==undefined) rot=30;

			if (rot==99) rot = Math.round(Math.random()*50-25);

			ent.removeClass('tp-layout-first-item').removeClass('tp-layout-last-item').removeClass('very-last-item');

				var subfilters = filter.split(',');
				var hasfilter =false;

				for (var u=0;u<subfilters.length;u++) {

					if (ent.hasClass(subfilters[u])) {
						hasfilter=true;
						console.log("has class");
					}
				}
				  
				if (hasfilter || filter=="*") {


						ent.removeClass('tp-layout').addClass('tp-notordered');
					} else {

						ent.removeClass('tp-ordered').removeClass('tp-layout');
						  setTimeout(function() {
								if (ie || ie9) {
									ent.animate({'scale':0, 'opacity':0},{queue:false,duration:opt.filterChangeSpeed});
								} else {

									if (opt.filterChangeAnimation=="fade") {
										ent.transition({'scale':1, 'opacity':0,'rotate':0},opt.filterChangeSpeed);
										ent.find('.mega-entry-innerwrap').transition({'scale':1, 'opacity':1,perspective: '10000px',rotateX: '0deg'},opt.filterChangeSpeed);
									}
									else
									if (opt.filterChangeAnimation=="scale") {
										ent.transition({'scale':opt.filterChangeScale, 'opacity':0,'rotate':0},opt.filterChangeSpeed);
										ent.find('.mega-entry-innerwrap').transition({'scale':1, 'opacity':1,perspective: '10000px',rotateX: '0deg'},opt.filterChangeSpeed);
									}
									else
									if (opt.filterChangeAnimation=="rotate") {
										ent.transition({'scale':1, 'opacity':0,'rotate':rot},opt.filterChangeSpeed);
										ent.find('.mega-entry-innerwrap').transition({'scale':1, 'opacity':1,perspective: '10000px',rotateX: '0deg'},opt.filterChangeSpeed);
									}
									else
									if (opt.filterChangeAnimation=="rotatescale") {
										ent.transition({'scale':opt.filterChangeScale, 'opacity':0,'rotate':rot},opt.filterChangeSpeed);
										ent.find('.mega-entry-innerwrap').transition({'scale':1, 'opacity':1,perspective: '10000px',rotateX: '0deg'},opt.filterChangeSpeed);
									} else
									if (opt.filterChangeAnimation=="pagetop" || opt.filterChangeAnimation=="pagebottom" || opt.filterChangeAnimation=="pagemiddle") {

										ent.find('.mega-entry-innerwrap').removeClass("pagemiddle").removeClass("pagetop").removeClass("pagebottom").addClass(opt.filterChangeAnimation);
										ent.transition({'opacity':0},opt.filterChangeSpeed);
										ent.find('.mega-entry-innerwrap').transition({'scale':1, 'opacity':0,perspective: '10000px',rotateX: '90deg'},opt.filterChangeSpeed);
									}

								}
							setTimeout(function() {	ent.css({visibility:'hidden'})},opt.filterChangeSpeed);

						},ini*opt.delay/2);
						ini++;

					}



		});



	}


	///////////////////////////////////////////
	// PREPARE FOR THE FIRST START THE ITEMS //
	//////////////////////////////////////////
	function preparingLazyLoad(container) {

		var ie=container.data('ie');
		var ie9=container.data('ie9');
		var opt = container.data('opt');
		if (opt.filterChangeSpeed == undefined) opt.filterChangeSpeed = Math.round(Math.random()*500+100);
		if (opt.filterChangeScale == undefined) opt.filterChangeScale = 0.8;


		var outi=0;
		var ini=0;

		container.find('>.mega-entry').each(function(i) {
			var ent=$(this);

			var rot = opt.filterChangeRotate;
			if (rot==undefined) rot=30;
			if (rot==99) rot = Math.round(Math.random()*360);

				if (ie || ie9) {
					ent.css({'opacity':0});
				} else {
					if (opt.filterChangeAnimation=="fade")
						ent.transition({'scale':1, 'opacity':0,'rotate':0,duration:1,queue:false});
					else
					if (opt.filterChangeAnimation=="scale") {
						ent.transition({'scale':opt.filterChangeScale, 'opacity':0,'rotate':0,duration:1,queue:false});
					}
					else
					if (opt.filterChangeAnimation=="rotate")
						ent.transition({'scale':1, 'opacity':0,'rotate':rot,duration:1,queue:false});
					else
					if (opt.filterChangeAnimation=="rotatescale") {

						ent.transition({'scale':opt.filterChangeScale, 'opacity':0,'rotate':rot,duration:1,queue:false});
					}
					else
					if (opt.filterChangeAnimation=="pagetop" || opt.filterChangeAnimation=="pagebottom" || opt.filterChangeAnimation=="pagemiddle") {
							ent.find('.mega-entry-innerwrap').addClass(opt.filterChangeAnimation);
							ent.transition({'opacity':0,duration:1,queue:false});
							ent.find('.mega-entry-innerwrap').transition({'scale':1, 'opacity':1,perspective: '10000px',rotateX: '90deg',duration:1,queue:false});
					}

				}
		});
		//opt.filterChangeAnimation = opt.savetrans;



	}


	////////////////////////////////////////////////////////
	//	REORDER THE CONTAINER DEPENDING ON THE SETTINGS   //
	////////////////////////////////////////////////////////
	function reOrder(container,deep) {


		// TO SAVE THE LAST ORDER FOR THE GALLERY, TO BE ABLE TO REPRODUCE IT
		if (deep==0) {
			var lastorder=new Array();
		} else
			var lastorder=container.data('lastorder');


		var cw = container.width();

		// THIS IS THE CURRENT REQUESTED ORDER
		var order=container.data('order');

		// IF ORDER ARRIVED TO THE END, SHOULD START FROM THE BEGINNING
		if (deep>order.length-1) deep=0;


		// SAVE THE ENTRIES IN AN ARRAY
		var entries=container.find('>.mega-entry.tp-notordered');

		// LET SEE HOW MANY LAYOUT ART WE HAVE 2-9 ARE THE PREMIUM GRIDS
		var max_layout_art=12;
		if (entries.length<9) max_layout_art=entries.length;

		//SAVE THE NEXT LAYOUT HERE
		var next_layout  = order[deep];
		


		var firefox =  false;
		var ie = !$.support.opacity;
		var ie9 = !$.support.htmlSerialize

		if (order[deep]==0 || next_layout<2 || next_layout>23)
			if (ie) {
				next_layout=9;
			} else {
				next_layout=Math.round(Math.random()*max_layout_art+1);
			}


		if (next_layout<2) next_layout=2;
		if (next_layout>23) next_layout=23;

		// PUSH THE NEXT LAYOUT INTO THE SAVED ORDER (IN CASE IT NEEDED SOMEWHERE)
		lastorder.push(next_layout);

		var element_amount=next_layout;
		if (next_layout==10 || next_layout==14) element_amount=3;
		if (next_layout==11 || next_layout==15) element_amount=4;
		if (next_layout==12 || next_layout==16) element_amount=5;
		if (next_layout==13 || next_layout==17) element_amount=6;


		if (next_layout==11 || next_layout==12 || next_layout==13 || next_layout==15 || next_layout==16 || next_layout==17)
			if (cw<840  && cw>721) element_amount=4
			  else
			if (cw<720) element_amount=3;

		if (next_layout==18 || next_layout==19 || next_layout==20) element_amount = 1;
		if (next_layout==21 || next_layout==22 || next_layout==23) element_amount = 2;

		// SET THE NEXT ITEM AS THE NEXT LAYOUT INDICATES
		entries.slice(0,element_amount).each(function(i) {

			var ent=$(this);


			ent.removeClass('tp-layout-first-item').removeClass('tp-layout-last-item').removeClass('very-last-item');

			// tp-layout SHOWS THAT THE ITEM HAS ALREADY A LAYOUT
			ent.addClass('tp-ordered tp-layout');
			// SAVE THE LAYOUT TYPE IN EACH mega-entry
			ent.data('layout',next_layout)
			//SAVE THE CHILD INDEX IN THE mega-entry
			ent.data('child',i)
			// MARK FIRST AND LAST ITEMS HERE
			if (i==0) ent.addClass("tp-layout-first-item");

			if (i==element_amount-1) {

					ent.addClass("tp-layout-last-item");
			}

			//ITEM IS ORDERED, SO NOT ORDERED CLASS CAN BE REMOVED
			ent.removeClass('tp-notordered');

		});

		// WE GO ONE FURTHER; DEEPER IN THE REKURSIVE FUNCTION
		deep=deep+1;
		//SAVE THE LAST ORDER !!
		container.data('lastorder',lastorder);

		//IF WE HAVE MORE ITEM TO ORDER, WE CAN CALL THE REKURSIVE FUNCTION AGAIN
		if (container.find('>.mega-entry.tp-notordered').length>0)
			reOrder(container,deep);
		else
			{
				try{
				  findLastOrdered(container).addClass('very-last-item');
				  } catch(e) {}
				return container;
			}
	}


	////////////////////////////////////////////////////////
	//	REORDER THE CONTAINER DEPENDING ON THE SETTINGS   //
	////////////////////////////////////////////////////////
	function reOrderOrdered(container,deep,itemtogo) {



		// TO SAVE THE LAST ORDER FOR THE GALLERY, TO BE ABLE TO REPRODUCE IT
		if (deep==0) {
			var lastorder=new Array();
		} else
			var lastorder=container.data('lastorder');


		var cw = container.width();

		// THIS IS THE CURRENT REQUESTED ORDER
		var order=container.data('order');

		// IF ORDER ARRIVED TO THE END, SHOULD START FROM THE BEGINNING
		if (deep>order.length-1) deep=0;


		// SAVE THE ENTRIES IN AN ARRAY
		var entries=container.find('>.mega-entry.tp-ordered');

		// LET SEE HOW MANY LAYOUT ART WE HAVE 2-9 ARE THE PREMIUM GRIDS
		var max_layout_art=12;
		if (entries.length<9) max_layout_art=entries.length;

		//SAVE THE NEXT LAYOUT HERE
		var next_layout  = order[deep];

		var firefox =  false;
		var ie = !$.support.opacity;
		var ie9 = !$.support.htmlSerialize

		if (order[deep]==0 || next_layout<2 || next_layout>23)
			if (ie) {
				next_layout=9;
			} else {
				next_layout=Math.round(Math.random()*max_layout_art+1);
			}

		if (next_layout<2) next_layout=2;
		if (next_layout>23) next_layout=23;

		// PUSH THE NEXT LAYOUT INTO THE SAVED ORDER (IN CASE IT NEEDED SOMEWHERE)
		lastorder.push(next_layout);

		var element_amount=next_layout;
		if (next_layout==10 || next_layout==14) element_amount=3;
		if (next_layout==11 || next_layout==15) element_amount=4;
		if (next_layout==12 || next_layout==16) element_amount=5;
		if (next_layout==13 || next_layout==17) element_amount=6;


		if (next_layout==11 || next_layout==12 || next_layout==13 || next_layout==15 || next_layout==16 || next_layout==17)
				if (cw<840  && cw>721) element_amount=4
				  else
				if (cw<720) element_amount=3;

		if (next_layout==18 || next_layout==19 || next_layout==20) element_amount = 1;
		if (next_layout==21 || next_layout==22 || next_layout==23) element_amount = 2;		
		
		var firstent = entries.length-itemtogo;

		// SET THE NEXT ITEM AS THE NEXT LAYOUT INDICATES
		entries.slice(firstent,firstent+element_amount).each(function(i) {

			var ent=$(this);

			ent.removeClass('tp-layout-first-item').removeClass('tp-layout-last-item').removeClass('very-last-item');

			// tp-layout SHOWS THAT THE ITEM HAS ALREADY A LAYOUT
			ent.addClass('tp-ordered tp-layout');
			// SAVE THE LAYOUT TYPE IN EACH mega-entry
			ent.data('layout',next_layout)
			//SAVE THE CHILD INDEX IN THE mega-entry
			ent.data('child',i)
			// MARK FIRST AND LAST ITEMS HERE
			if (i==0) ent.addClass("tp-layout-first-item");

			if (i==element_amount-1) {

					ent.addClass("tp-layout-last-item");
			}

			//ITEM IS ORDERED, SO NOT ORDERED CLASS CAN BE REMOVED
			ent.removeClass('tp-notordered');

		});

		// WE GO ONE FURTHER; DEEPER IN THE REKURSIVE FUNCTION
		deep=deep+1;
		//SAVE THE LAST ORDER !!
		container.data('lastorder',lastorder);
		itemtogo=itemtogo-element_amount;

		//IF WE HAVE MORE ITEM TO ORDER, WE CAN CALL THE REKURSIVE FUNCTION AGAIN
		if (itemtogo>0)
			reOrderOrdered(container,deep,itemtogo);
		else
			{
				findLastOrdered(container).addClass('very-last-item');
				rePosition(container);
				return container;
			}
	}



	/////////////////////////////
	// FIND LAST ORDERED ITEM //
	///////////////////////////
	function findLastOrdered(container) {
	   var lastitem;

	   container.find('>.mega-entry.tp-layout.tp-ordered').each(function() {
			lastitem=$(this);
		});


	   return lastitem;
	}


	/////////////////////////////
	// ROUND ME TO RIGHT VALUE //
	////////////////////////////
	function roundme(val) {
		return val;
	}

	//////////////////////////
	//	PUT IT IN POSITION	//
	//////////////////////////
	function rePosition(container,maxdelay) {

		var topp=0;
		var startwidth = container.data('defaultwidth');
		var opt=container.data('opt');
		var optdelay=opt.delay;

		var firststart=0;
		if (opt.firststart==1) {
			firststart=1;
			opt.firststart=0;
		}



		var cw = container.width();
		var prop = cw / startwidth;
		var basicheight = 185;
		var paddingh = container.data('paddingh');
		var paddingv = container.data('paddingv');


		var outi=1;
		var ini=1;

		var ie=container.data('ie');
		var ie9=container.data('ie9');

		// CALCULATE THE BASI PROPORTIONS
		var w5 = 5*prop;

		// THE MAX HEIGHT OF THE ITEM
		var maxhh=0;

		// THE NEW BASIC VALUES
		//w5 = Math.floor(w5)+dec;

		// Calculate the Basic Grid Sizes
		var w980 = cw;
		var w790 = roundme(w5 * 160);
		var w780 = roundme(w5 * 158);
		var w760 = roundme(w5 * 152);
		var w740 = roundme(w5 * 148);
		var w660 = roundme(w5 * 132);
		var w615 = roundme(w5 * 123);
		var w610 = roundme(w5 * 122);
		var w595 = roundme(w5 * 119);
		var w565 = roundme(w5 * 113);
		var w560 = roundme(w5 * 112);
		var w490 = roundme(w5 * 98);
		var w420 = roundme(w5 * 84);
		var w415 = roundme(w5 * 83);
		var w395 = roundme(w5 * 79);
		var w390 = roundme(w5 * 78);
		var w385 = roundme(w5 * 77);
		var w370 = roundme(w5 * 74);
		var w365 = roundme(w5 * 73);
		var w345 = roundme(w5 * 69);
		var w340 = roundme(w5 * 68);
		var w335 = roundme(w5 * 67);
		var w326 = roundme(w5 * 65.3);
		var w245 = roundme(w5 * 49);
		var w240 = roundme(w5 * 48);
		var w225 = roundme(w5 * 45);
		var w220 = roundme(w5 * 44);
		var w196 = roundme(w5 * 39.2);
		var w195 = roundme(w5 * 39);
		var w190 = roundme(w5 * 38);
		var w185 = roundme(w5 * 37);
		var w180 = roundme(w5 * 36);
		var w163 = roundme(w5 * 32.66);

		// The Basic Heights
		var h1110 = roundme(w5 * 222);
		var h740 = w740;
		var h555 = roundme(w5*111);
		var h370 = w370;
		var h365 = w365;
		var h245 = w245;
		var h240 = w240;
		var h185 = w185;
		var h180 = w180;

		var heights = new Array(0,0,0,0,0,0,0,0,0);
		var lastheights = new Array(0,0,0,0,0,0,0,0,0);

		var currentcolumn=0;
		var layout=0;

		var allelements=container.find('>.mega-entry.tp-layout').length;

		// LET CREATE THE GIRDS
		container.find('>.mega-entry.tp-layout').each(function(i) {
			var ent=$(this);
			var iw = ent.find('.mega-entry-innerwrap');
			layout=ent.data('layout');


			if (layout==11 || layout==12 || layout==13 )
				if (cw<840 && cw>721) layout=11
				 else
				if (cw<720) layout=10;

			if (layout==15 || layout==16 || layout==17)
				if (cw<840 && cw>721) layout=15
				 else
				if (cw<720) layout=14;


			// SET THE SPEED
			var dur=500;

			// SET THE BASIC POSITIONS AND SIZES
			var w,h,xp;
			var ph=paddingh;
			var pv=paddingv;
			var yp=topp;
			var lasth=h185;

			if (cw>480) {
						// THE GRID TYPE 3 POSITIONS SHOULD BE CALCULATED HERE
						if (layout==2) {
								if (cw>767) {
										if (ent.data('child')==0) { w=w565; h=h370; xp=0; 	 lasth=h370}
										if (ent.data('child')==1) {	w=w415; h=h370; xp=w565;  ph=0; topp=topp+h370; lasth=h370}

								} else {
									if (cw>480 && cw<768) {
										if (ent.data('child')==0) { w=w420; h=h370; xp=0; 	 lasth=h370}
										if (ent.data('child')==1) {	w=w560; h=h370; xp=w420;  ph=0; topp=topp+h370; lasth=h370}
									}
								}
						}


						// THE GRID TYPE 3 POSITIONS SHOULD BE CALCULATED HERE
						if (layout==3) {
								if (cw>767) {
										if (ent.data('child')==0) { w=w390; h=h370; xp=0; 	 lasth=h370}
										if (ent.data('child')==1) { w=w225; h=h370; xp=w390; lasth=h370}
										if (ent.data('child')==2) {	w=w365; h=h370; xp=w615;  topp=topp+h370; lasth=h370;ph=0;}

								} else {
									if (cw>480 && cw<768) {
										if (ent.data('child')==0) {	w=w370; h=h370; xp=0; 		lasth=h370}
										if (ent.data('child')==1) { w=w390; h=h370; xp=w370;  	lasth=h370}
										if (ent.data('child')==2) { w=w220; h=h370; xp=w760; 	lasth=h370; topp=topp+h370; ph=0;}


									}
								}
						}

						// THE GRID TYPE 4 POSITIONS SHOULD BE CALCULATED HERE
						if (layout==4) {
								if (cw>767) {
										if (ent.data('child')==0) { w=w420; h=h370; xp=0; 	 lasth=370;}
										if (ent.data('child')==1) { w=w195; h=h185; xp=w420; }
										if (ent.data('child')==2) { w=w365; h=h370; xp=w615; ph=0;  topp=topp+h185; lasth=h370}
										if (ent.data('child')==3) {	w=w195; h=h185; xp=w420;  topp=topp+h185;}

								} else {
									if (cw>480 && cw<768) {

										if (ent.data('child')==0) { w=w195; h=h185; xp=w420; }
										if (ent.data('child')==1) { w=w420; h=h370; xp=0; 	 topp=topp+h185; }
										if (ent.data('child')==2) {	w=w195; h=h185; xp=w420; topp=topp-h185;}
										if (ent.data('child')==3) { w=w365; h=h370; xp=w615; ph=0; topp=topp+h370;  lasth=h370}

									}
								}
						}

						// THE GRID TYPE 5 POSITIONS SHOULD BE CALCULATED HERE
						if (layout==5) {
								if (cw>767) {
										if (ent.data('child')==0) { w=w420; h=h185; xp=0; 	 }
										if (ent.data('child')==1) { w=w195; h=h185; xp=w420; }
										if (ent.data('child')==2) { w=w365; h=h370; xp=w615; ph=0;  topp=topp+h185; lasth=h370}
										if (ent.data('child')==3) { w=w220; h=h185; xp=0; 	 }
										if (ent.data('child')==4) {	w=w395; h=h185; xp=w220;  topp=topp+h185;}

								} else {
									if (cw>480 && cw<768) {
										if (ent.data('child')==0) { w=w420; h=h185; xp=0; 	 }
										if (ent.data('child')==1) { w=w195; h=h185; xp=w420; }
										if (ent.data('child')==2) { w=w365; h=h185; xp=w615; 	ph=0;  topp=topp+h185;}
										if (ent.data('child')==3) { w=w490; h=h185; xp=0; 	 }
										if (ent.data('child')==4) {	w=w490; h=h185; xp=w490;  	ph=0; topp=topp+h185;}

									}
								}
						}


						// THE GRID TYPE 5 POSITIONS SHOULD BE CALCULATED HERE
						if (layout==6) {


								if (cw>767) {
										if (ent.data('child')==0) { w=w370; h=h370; xp=0; 	 lasth=h370;}
										if (ent.data('child')==1) { w=w225; h=h185; xp=w370; }
										if (ent.data('child')==2) { w=w385; h=h185; xp=w595; 	ph=0; topp=topp+h185;}
										if (ent.data('child')==3) { w=w225; h=h185; xp=w370; }
										if (ent.data('child')==4) { w=w195; h=h185; xp=w595; }
										if (ent.data('child')==5) {	w=w190; h=h185; xp=w780;  	ph=0; topp=topp+h185;}

								} else {
									if (cw>480 && cw<768) {
										if (ent.data('child')==0) { w=w225; h=h370; xp=0; 	 lasth=h370;}
										if (ent.data('child')==1) { w=w340; h=h370; xp=w225; lasth=h370;}
										if (ent.data('child')==2) { w=w195; h=h185; xp=w565; }
										if (ent.data('child')==3) { w=w220; h=h185; xp=w760; 	ph=0;  topp=topp+h185;}
										if (ent.data('child')==4) { w=w195; h=h185; xp=w565; }
										if (ent.data('child')==5) {	w=w220; h=h185; xp=w760; 	ph=0;  topp=topp+h185;}

									}
								}
						}

						// THE GRID TYPE 7 POSITIONS SHOULD BE CALCULATED HERE
						if (layout==7) {




							if (cw>767) {
										if (ent.data('child')==0) { w=w565; h=h370; xp=0; 	 	lasth=h370;}
										if (ent.data('child')==1) { w=w415; h=h185; xp=w565; 	ph=0;  topp=topp+h185;}
										if (ent.data('child')==2) { w=w195; h=h185; xp=w565; }
										if (ent.data('child')==3) { w=w220; h=h370; xp=w760; 	ph=0;  topp=topp+h185;lasth=h370}
										if (ent.data('child')==4) { w=w225; h=h185; xp=0; 	 }
										if (ent.data('child')==5) { w=w340; h=h185; xp=w225; }
										if (ent.data('child')==6) { w=w195; h=h185; xp=w565;   topp=topp+h185;}

								} else {
									if (cw>480 && cw<768) {
										if (ent.data('child')==0) { w=w565; h=h370; xp=0; 	 lasth=h370;}
										if (ent.data('child')==1) { w=w415; h=h185; xp=w565; 	ph=0; topp=topp+h185;}
										if (ent.data('child')==2) { w=w195; h=h185; xp=w565; }
										if (ent.data('child')==3) { w=w220; h=h185; xp=w760; 	ph=0; topp=topp+h185;}
										if (ent.data('child')==4) { w=w225; h=h185; xp=0; 	 }
										if (ent.data('child')==5) { w=w340; h=h185; xp=w225; }
										if (ent.data('child')==6) { w=w415; h=h185; xp=w565; 	ph=0;  topp=topp+h185;}

									}
								}
						}

						// THE GRID TYPE 8 POSITIONS SHOULD BE CALCULATED HERE
						if (layout==8) {



							if (cw>767) {

										if (ent.data('child')==0) { w=w415; h=h185; xp=0; 	 }
										if (ent.data('child')==1) { w=w345; h=h370; xp=w415; lasth=h370;}
										if (ent.data('child')==2) { w=w220; h=h185; xp=w760; 	ph=0;  topp=topp+h185;}
										if (ent.data('child')==3) { w=w195; h=h185; xp=0; 	 	}
										if (ent.data('child')==4) { w=w220; h=h185; xp=w195; 	}
										if (ent.data('child')==5) { w=w220; h=h370; xp=w760; 	ph=0;  topp=topp+h185; lasth=h185;}
										if (ent.data('child')==6) { w=w415; h=h185; xp=0; 	 	}
										if (ent.data('child')==7) { w=w345; h=h185; xp=w415; 	 topp=topp+h185; }


								} else {
									if (cw>480 && cw<768) {
										if (ent.data('child')==0) { w=w415; h=h185; xp=0; 	 	}
										if (ent.data('child')==1) { w=w195; h=h185; xp=w415; 	}
										if (ent.data('child')==2) { w=w370; h=h185; xp=w610; 	ph=0; topp=topp+h185; lasth=h370;}
										if (ent.data('child')==3) { w=w195; h=h185; xp=0; 	 	}
										if (ent.data('child')==4) { w=w415; h=h185; xp=w195; 	}
										if (ent.data('child')==5) { w=w370; h=h370; xp=w610; 	ph=0;  topp=topp+h185; lasth=h370;}
										if (ent.data('child')==6) { w=w415; h=h185; xp=0; 	 	}
										if (ent.data('child')==7) { w=w195; h=h185; xp=w415; 	 topp=topp+h185; }


									}
								}
						}


						// THE GRID TYPE 9 POSITIONS SHOULD BE CALCULATED HERE
						if (layout==9) {



								if (cw>767) {
										if (ent.data('child')==0) { w=w565; h=h370; xp=0; 	 	lasth=h370;}
										if (ent.data('child')==1) { w=w415; h=h185; xp=w565; 	ph=0;  topp=topp+h185; }
										if (ent.data('child')==2) { w=w195; h=h185; xp=w565; 	}
										if (ent.data('child')==3) { w=w220; h=h370; xp=w760; 	ph=0;  topp=topp+h185; lasth=h370;}
										if (ent.data('child')==4) { w=w225; h=h370; xp=0; 	 	lasth=h370;}
										if (ent.data('child')==5) { w=w340; h=h370; xp=w225; 	lasth=h370;}
										if (ent.data('child')==6) { w=w195; h=h185; xp=w565; 	 topp=topp+h185; }
										if (ent.data('child')==7) { w=w195; h=h185; xp=w565; 	}
										if (ent.data('child')==8) {	w=w220; h=h185; xp=w760; 	ph=0;  topp=topp+h185; }


								} else {
									if (cw>480 && cw<768) {
										if (ent.data('child')==0) { w=w370; h=h370; xp=0; 	 	lasth=h370;}
										if (ent.data('child')==1) { w=w240; h=h370; xp=w370; 	lasth=h370;}
										if (ent.data('child')==2) { w=w370; h=h370; xp=w610; 	ph=0;  topp=topp+h370; lasth=h370;}
										if (ent.data('child')==3) { w=w240; h=h370; xp=0;    	lasth=h370;}
										if (ent.data('child')==4) { w=w370; h=h370; xp=w240; 	lasth=h370;}
										if (ent.data('child')==5) { w=w370; h=h370; xp=w610; 	ph=0;  topp=topp+h370; lasth=h370;}
										if (ent.data('child')==6) { w=w370; h=h370; xp=0;   	lasth=h370;}
										if (ent.data('child')==7) { w=w370; h=h370; xp=w370; 	lasth=h370;}
										if (ent.data('child')==8) {	w=w240; h=h370; xp=w740;  	ph=0;  topp=topp+h370; lasth=h370;}


									}
								}
						}

						/*********************************
							- BASIC GRID OPTIONS -
						**********************************/
						if (layout>9 && layout<14) {
							 if (layout==10) {
								w=Math.round(w326);

								w=w + (ph/3);
							 } else
							 if (layout==11) {
								w=Math.round(w245);

								w=w + (ph/4);
							  } else
							 if (layout==12) {
								w=Math.round(w196);
								w=w  + (ph/5);
							 } else
							 if (layout==13) {
								w=Math.round(w163);
								w=w + (ph/6);
							}

							var h=w;
							var chil=ent.data('child');
							xp=w*chil;
							lasth=h;

							if ( (chil==2 && layout==10) ||
								 (chil==3 && layout==11) ||
								 (chil==4 && layout==12) ||
								 (chil==5 && layout==13) ||
								 (ent.hasClass('tp-layout-last-item'))
								) {		// ph=0;
										topp=topp+h; }
						}
						
						
						/*********************************
							- 1 GRID OPTIONS -
						**********************************/
						
						// 1 COLUMN GRIDS
						if (layout==18) {
								w=Math.round(w980);
								w=w + (ph);

							var h=w;
							var chil=ent.data('child');
							xp=w*chil;
							lasth=h;

							topp=topp+h;
						}
						
						// 1 COLUMN GRIDS
						if (layout==19) {
								w=Math.round(w980);
								w=w + (ph);

							var h=w/ 2;
							var chil=ent.data('child');
							xp=w*chil;
							lasth=h;

							topp=topp+h;
						}
						
						// 1 COLUMN GRIDS
						if (layout==20) {
								w=Math.round(w980);
								w=w + (ph);

							var h=w/ 3;
							var chil=ent.data('child');
							xp=w*chil;
							lasth=h;

							topp=topp+h;
						}
						
						
						/*********************************
							- 2 GRID OPTIONS -
						**********************************/
						
						// 1 COLUMN GRIDS
						if (layout==21) {
							w=Math.round(w490);
							w=w + (ph/2);
							var h=w;
							var chil=ent.data('child');
							xp=w*chil;
							lasth=h;	

							if ( chil==1) topp=topp+h; 
						}
						
						// 1 COLUMN GRIDS
						if (layout==22) {
							w=Math.round(w490);
							w=w + (ph/2);
							var h=w/2;
							var chil=ent.data('child');
							xp=w*chil;
							lasth=h;	
												
							if ( chil==1) topp=topp+h; 
						}
						
						// 1 COLUMN GRIDS
						if (layout==23) {
							w=Math.round(w490);
							w=w + (ph/2);
							var h=w/3;
							var chil=ent.data('child');
							xp=w*chil;
							lasth=h;	
												
							if ( chil==1) topp=topp+h; 
						}
						
						/*********************************
							- DIFFERENT HEIGHT OPTIONS -
						**********************************/
						if (layout>13 && layout<18) {
							 if (layout==14) {
								w=Math.round(w326);

								w=w + (ph/3);
							 } else
							 if (layout==15) {
								w=Math.round(w245);

								w=w + (ph/4);
							  } else
							 if (layout==16) {
								w=Math.round(w196);
								w=w  + (ph/5);
							 } else
							 if (layout==17) {
								w=Math.round(w163);
								w=w + (ph/6);
							}

							var chil = ent.data('child');
							var prop =w/ent.data('width');

							h=ent.data('height') * prop;
							xp=w*ent.data('child');
							yp=heights[chil];
							lasth=h*prop;
							lastheights[chil]=lasth;
							topp=yp+h;
							heights[chil] = topp;
						}


			} else { // IF THE CONTAINER IS TOO SMALL THAN LET

								h=Math.round(ent.data('height')*(cw/ent.data('width')));
								w=cw;
								ph=0;
								xp=0;
								yp=topp;
								topp=topp+h;
			}



			var scal=1;
			var opaa=1;
			var rx = 0;
			var rot = 0;

			var orot = opt.filterChangeRotate;
			if (orot==undefined) rot=30;

			if (orot==99) orot = Math.round(Math.random()*360);



			// FILTER DEPENDEND SETTINGS
			var subfilters = opt.filter.split(',');
			var hasfilter =false;

			for (var u=0;u<subfilters.length;u++) {

				if (ent.hasClass(subfilters[u])) {
					hasfilter=true;
					console.log("has class");
				}
			}
			  

			if (hasfilter || opt.filter=="*") {

								ent.css({visibility:'visible'});
								if (ie || ie9) {
									scal=1;
									opaa=1;


								} else {
									if (opt.filterChangeAnimation=="pagetop" || opt.filterChangeAnimation=="pagebottom" || opt.filterChangeAnimation=="pagemiddle") {
										rot=0;
										rx=0;
										scal=1;
										opaa=1;
										eiscal=1;
										eiopaa=1;
										eirx=0;

										//ent.transition({rotate:0,'opacity':1},opt.filterChangeSpeed);
									} else {
										scal=1;
										rot=0;
										opaa=1;
										eiscal=1;
										eiopaa=1;
										eirx=0;

									}
								}

					}


			if (opt.detailview=="on" && opaa==1) opaa=0.4;
			if (ent.hasClass('mega-in-detailview')) opaa=1;

			ent.removeClass("mega-square").removeClass("mega-portrait").removeClass("mega-landscape");
			var wround=Math.floor(w/100);
			var hround=Math.floor(h/100);
			if (wround>hround) ent.addClass("mega-landscape");
			if (hround>wround) ent.addClass("mega-portrait");
			if (wround==hround) ent.addClass("mega-square");


			var timer_delay=i*opt.delay;
			/*if (maxdelay!=undefined) {
				if (allelements-i<6)
					timer_delay=(allelements-i)*opt.delay;
			}*/

			// PUT THE mega-entry IN THE RIGHT POSITION
			if (ie || ie9) {
				ent.find('.mega-socialbar').animate({'width':w+'px'});
				ent.animate({ 'scale':scal, 'opacity':opaa, width:w+"px", height:h+"px", left:xp+"px", top:yp+"px", 'paddingBottom':pv+"px", 'paddingRight':ph+"px"},{queue:false,duration:400});
				iw.animate({'background-position':'50% 49%', 'background-size':'cover'},{queue:false,duration:400});
				if (ie) {
					var img=iw.find('.ieimg');
					var imgratio=Math.round(ent.data('width')) / Math.round(ent.data('height'));
					var conratio=Math.round(w)/Math.round(h);

					var nw=w;
					var nh=nw/ent.data('width')*ent.data('height');


					if (nh<h) {

						nh=h;
						nw=nh/ent.data('height')*ent.data('width');
					}

					img.css({'width':nw+'px','height':nh+'px'});



				}

			} else {


				var prop = (cw / startwidth)*100 -16;


				if (ent.data('lowsize')!=undefined )
				if (prop<=ent.data('lowsize'))
					ent.addClass("mega-lowsize")
				else
					ent.removeClass("mega-lowsize");

				if (firststart) {
						  timer_delay=timer_delay+100;
						  ent.transition({  'opacity':0, "top":yp+"px","left":xp+"px", width:w, height:h, 'paddingBottom':pv+"px", 'paddingRight':ph+"px",duration:1,queue:false});
					}
				setTimeout(function() {
					ent.transition({ 'scale':scal, 'opacity':opaa,'rotate':rot, 'z-index':1,width:w, height:h, "top":yp+"px","left":xp+"px", 'paddingBottom':pv+"px", 'paddingRight':ph+"px",duration:opt.filterChangeSpeed,queue:false});
					setTimeout(function() {
						ent.find('.mega-entry-innerwrap').transition({'scale':eiscal, 'opacity':eiopaa,perspective: '10000px',rotateX: eirx,duration:opt.filterChangeSpeed,queue:false});
						ent.removeClass('mega-entry-added');
					},50);
					iw.transition({'background-position':'50% 49%', 'background-size':'cover',duration:opt.filterChangeSpeed,queue:false});
				},timer_delay);

			}


			if (ent.hasClass('very-last-item') && !ent.hasClass('tp-layout-last-item')) {

				topp=topp+lasth;

			} else {
					//$('.debug').html($('.debug').html()+"<br>"+topp);
			}

			if (maxhh<yp+h) maxhh=yp+h;

		})

		// IF THE LAST LAYOUT HAD A DIFFERENT HEIGHT ATTRIBUTE, WE NEED TO CALCULATE THE HEIGHETS ROW
		if (layout>13 && layout<18) {

					topp=heights[0];
					for (allh=0;allh<heights.length;allh++) {

						if (topp<heights[allh]) topp=heights[allh];
					 }
				}


		container.css({height:maxhh+"px"})


	}


})(jQuery);




