(function($){$.fn.GeniusMenu=function(customOptions){var o={duration:2500,easing:typeof jQuery.easing.easeInOutSine=='function'?'easeInOutSine':'swing',scaling:1.2,selector:' > li',selectorRef:'img',selectorLabel:'div.label',activeClass:'active',orientation:'auto',inactiveMessage:'',minItems:8,alwaysDisplayLabels:true,alwaysDisplayActiveLabel:false,expandTime:600,collapseTime:1200,collapseFalls:true,dataList:[],dataModel:function(datas){var obj=$('<ul class="genius-menu"></ul>');for(var dataI in datas){var li=$('<li></li>').html((datas[dataI].label!=''?'<div class="label"><span>'+datas[dataI].label.split(' ').join(' ')+'</span></div>':'')
+'<img src="'+datas[dataI].img+'">');li.data('data',datas[dataI]).appendTo(obj);}
return obj;},debug:false};$.extend(o,customOptions);var log=o.debug&&typeof console!='undefined'?function(t){console.log(t);}:function(){};$.pAnimeOption.time=o.duration;$.pAnimeOption.easing=o.easing;return this.each(function(i){var $sourceParent=$(this);if(o.dataList.length){$sourceParent.html('').append(o.dataModel(o.dataList));$sourceParent=$sourceParent.find('ul');items=$sourceParent.find(o.selector);o.selector=' > li';}
var items=$sourceParent.find(o.selector);var divs=$sourceParent.find(o.selectorLabel);var isActive=false;var lastOrientation='auto',nowOrientation='',isLocatedLeft,isLocatedTop,isLocatedCenter;if(!items.length){log('No Items Finded...');return false;}
if(!items.filter('.'+o.activeClass).length)$(items[0]).addClass('active');$sourceParent.hover(function(){if(!$sourceParent.is('.'+o.activeClass))divs.stop([]).animate({opacity:0.6},800,o.easing);},function(){if(!$sourceParent.is('.'+o.activeClass)){if(o.alwaysDisplayActiveLabel){divs.stop([]).animate({opacity:1},800,o.easing);}else{divs.stop([]).animate({opacity:null},800,o.easing);}}});var active=$(items.filter('.'+o.activeClass).get(0));var elActive_tpl=active.find(o.selectorRef);var imgOffset=elActive_tpl.offset();var directionH=imgOffset.left>$('body').width()/2?'right':'left';if(directionH=='left'){$sourceParent.addClass('direction-left');var animeOptions_active={width:elActive_tpl.width(),marginTop:elActive_tpl.css('marginTop'),marginLeft:elActive_tpl.css('marginLeft'),opacity:1,top:0,left:0};active.removeClass('hover').css({transform:'rotate(0deg)',opacity:1}).find(o.selectorRef).css(animeOptions_active);var _degrees=(Math.floor(Math.random()*20)-10);active.siblings().css({opacity:0.06,transform:'rotate('+_degrees+'deg)'}).find(o.selectorRef).css({top:0,left:0});}
items.unbind('click').bind('click',function(e,opts){items.unbind('mouseenter mouseleave');var srcTarget=e.originalTarget|| e.srcElement;log($(srcTarget));if(!srcTarget||$(srcTarget).is('.noBind')){log('Abort');e.preventDefault();return false;}
active=items.filter('.'+o.activeClass);var self=$(this);var all=self.parent().children();var others=self.siblings();var imgDOM=self.find(o.selectorRef);var img={dom:imgDOM,offset:imgDOM.offset(),w:imgDOM.width(),h:imgDOM.height()};var numItems=Math.max(o.minItems,others.length);elActive_tpl=$(items.filter('.'+o.activeClass).get(0)).find(o.selectorRef);var animeOptions_active={width:elActive_tpl.width(),marginTop:elActive_tpl.css('marginTop'),marginLeft:elActive_tpl.css('marginLeft')};var elNotActive_tpl=$(items.not('.'+o.activeClass).get(items.length-2)).find(o.selectorRef);var animeOptions_normal={width:elNotActive_tpl.width(),marginTop:elNotActive_tpl.css('marginTop'),marginLeft:elNotActive_tpl.css('marginLeft')};var animeOptions_hover={width:elNotActive_tpl.width()*o.scaling,marginTop:parseInt(elNotActive_tpl.css('marginTop'))-(elNotActive_tpl.width()*(o.scaling-1)/2),marginLeft:parseInt(elNotActive_tpl.css('marginLeft'))-(elNotActive_tpl.width()*(o.scaling-1)/2)};nowOrientation=o.orientation;if(o.orientation=='auto'){var directionH=img.offset.left>$('body').width()/2?'right':'left';var directionV=img.offset.top>($(document).scrollTop()+$(window).height()*2/3)?'bottom':img.offset.top<($(document).scrollTop()+$(window).height()/3)?'top':'center';nowOrientation=directionH+'-'+directionV;}
isLocatedLeft=(nowOrientation.match(/left/)?-1:1);isLocatedTop=(nowOrientation.match(/top/)?-1:1);isLocatedCenter=(nowOrientation.match(/center/)?1:0);if(isLocatedLeft==-1)$sourceParent.addClass('direction-left');else $sourceParent.removeClass('direction-left');if(nowOrientation!=lastOrientation){log('----> Orientation Changed to '+nowOrientation);lastOrientation=nowOrientation;}
var startOffset=elActive_tpl.offset();var deltaX=isLocatedLeft*200;var deltaY=0;if(isLocatedTop==-1){deltaY=($(document).scrollTop()+$(window).height()-2*img.h-startOffset.top);}else if(isLocatedCenter==1){deltaY=$(window).height()/2-img.h*1.5;}else{deltaY=startOffset.top-($(document).scrollTop()+img.h*1.5);}
function getX(i){return(i/(numItems-1));}
function getY(i){i=Math.abs(getX(i));return(i*i+i)/(3*i-6);}
self.css({opacity:1});if(!$sourceParent.is('.'+o.activeClass)&&self.is('.'+o.activeClass)){isActive=true;$sourceParent.addClass(o.activeClass);$sourceParent.trigger('BeginExpand');active.find(o.selectorLabel).stop([]).animate({opacity:0.95});others.each(function(i){var el=$(this);var x=i;var orderID=i+1;if(isLocatedCenter==1){isLocatedTop=i%2>0?-1:1;x=i-i%2;orderID=items.length-(-1+(Math.ceil(items.length/2))+((i+1+(1-i%2))/2)*isLocatedTop);}
var TOP=-1*getX(x)*deltaY-img.h+(isLocatedCenter==1?(x==0?-8:0)+(x==2?-5:0):0);var degrees=Math.round(isLocatedLeft*isLocatedTop*(-10*getX(x+1)-1));var itemZIndex=100+(isLocatedTop*-1)+x;el.pAnime({css:{top:parseInt(img.dom.css('margin-top')),left:15,zIndex:itemZIndex,visibility:'visible',fontSize:12,opacity:0,transform:'rotate('+degrees+'deg)'},animate:{opacity:1,top:Math.round(isLocatedTop*TOP),left:Math.round(getY(i)*deltaX)},time:o.expandTime,postCall:function(){setTimeout(function(){el.hover(function(){log('Mouse Hover : '+orderID);if(!isActive)return;el.css({zIndex:1000}).addClass('hover').stop([]).animate({opacity:1},400);el.find(o.selectorRef).stop([]).animate(animeOptions_hover,600);el.find(o.selectorLabel).stop([]).animate({opacity:1},700);},function(){log('Mouse Out : '+orderID);if(!isActive)return;el.removeClass('hover').css({zIndex:itemZIndex}).find(o.selectorRef).stop([]).pAnime({animate:animeOptions_normal,time:600,waitDelay:0}).pAnime();el.find(o.selectorLabel).stop([]).animate({opacity:(!o.alwaysDisplayLabels?0:0.6)},700);})},20);log('Genius Expand Item');}})
if(o.alwaysDisplayLabels){el.find(o.selectorLabel).stop([]).animate({opacity:0.6},700);}else{el.find(o.selectorLabel).stop([]).animate({opacity:null},700);}});}else if($sourceParent.is('.'+o.activeClass)){$sourceParent.removeClass(o.activeClass);$sourceParent.trigger('BeginCollapse');isActive=false;others.attr('order-id',100).each(function(i){var el=$(this);var degrees='rotate('+(Math.floor(Math.random()*20)-10)+'deg)';el.removeClass(o.activeClass).removeClass('hover').pAnime({css:{zIndex:1},animate:{opacity:0.06,left:null,top:null,transform:degrees},time:o.collapseTime/(o.collapseFalls?2:1.1)+Math.floor(Math.random()*(o.collapseTime*1))*o.collapseFalls,postCall:function(){log('Genius Normal elements Hided');}}).find(o.selectorRef).pAnime({animate:animeOptions_normal,time:200});});self.attr('order-id',0).addClass(o.activeClass).removeClass('hover').pAnime({css:{visibility:'visible',zIndex:100,transform:'rotate(0deg)'},animate:{left:null,top:null,opacity:1},time:o.collapseTime,postCall:function(){log('Genius Element Clicked and setted Active');self.trigger('onClick');}}).find(o.selectorRef).pAnime({animate:animeOptions_active,time:200});}
$.pAnime(function(){log('Finish !!');if(isActive)$sourceParent.trigger('ExpandComplete');else $sourceParent.trigger('CollapseComplete');});});});}})(jQuery);

(function($){$.pAnimeOption={easing:'swing',time:2500,waitDelay:200,debug:false};var queue=[];var timerDoAnimation=false;var uniqID=0;var tranformCSS=(jQuery.browser.webkit?'-webkit-transform':jQuery.browser.mozilla?'-moz-transform':jQuery.browser.opera?'-o-transform':'transform');var log = $.pAnimeOption.debug && typeof console != 'undefined' ? function(t) { console.log(t); } : function() {};$.pAnime=function(data){$.fn.pAnime(data);}
$.fn.pAnime=function(customOptions){var defaults=$.pAnimeOption;var options={};for(i in defaults)options[i]=defaults[i];for(i in customOptions)options[i]=customOptions[i];if(typeof customOptions=='undefined'||typeof customOptions=='function'){if(timerDoAnimation)clearTimeout(timerDoAnimation);timerDoAnimation=setTimeout(function(){var $tmpQueue=queue;var $filtered={};queue=[];log('-----> DO ANIMATION <------');for(var i=0;i<$tmpQueue.length;i++){var element=$tmpQueue[i].element;var key=element.attr('panime_uniqid');if(typeof $filtered[key]!='undefined'){$.extend($filtered[key].css,$tmpQueue[i].css);$.extend($filtered[key].animate,$tmpQueue[i].animate);if($tmpQueue[i].rotateSrc)$filtered[key].rotateSrc=$tmpQueue[i].rotateSrc;if($tmpQueue[i].time)$filtered[key].time=$tmpQueue[i].time;if($tmpQueue[i].postCall)$filtered[key].postCall=$tmpQueue[i].postCall;}else{$filtered[key]=$tmpQueue[i];}}
var generalPostCalled=false;var counter=0;var printed=false;for(var i in $filtered){var item=$filtered[i];if(item.css)item.element.css(item.css);if(item.animate){item.element.removeAttr('panime_uniqid');item.element.data('postCall',item.postCall);item.element.data('panime_index',i);item.element.animate(item.animate,{duration:item.time,easing:item.easing,queue:false,complete:function(){if(!generalPostCalled&&counter>=($tmpQueue.length-1)){if(typeof customOptions=='function')customOptions();generalPostCalled=true;}
if(typeof $(this).data('postCall')=='function'){try{$(this).data('postCall')();}catch(e){log(e);};}
$(this).removeData('postCall').removeData('panime_index');counter++;}});}}},options.waitDelay);return $(this);}
return $(this).each(function(i){if(typeof $(this).attr('panime_uniqid')=='undefined'){$(this).attr('panime_uniqid',++uniqID);}
var queueElement={};queueElement=options;for(var c in queueElement.css){if(c=='transform'){queueElement.css[tranformCSS]=queueElement.css[c];delete queueElement.css[c];}}
for(var c in queueElement.animate){if(c=='transform'){queueElement.animate[tranformCSS]=queueElement.animate[c];delete queueElement.animate[c];}}
queueElement.element=$(this);queueElement.uniqID=uniqID;queue.push(queueElement);});};})(jQuery);
