/**
 * @author Vlad Yakovlev (scorpix@design.ru)
 * @copyright Art.Lebedev Studio (http://www.artlebedev.ru)
 * @version 0.1 (2009-07-13)
 * @requires jQuery
 * @requires jTweener
 */
$(function(){var
animateClass='drug_animate',isDebug=false,typePrefix='type_',typeContentPrefix='filter_',filterPrefix='type_',filterContentPrefix='drug_',allId='all',animateNs='productsFilter',animateTime=1.5;var
typesBlock=$('#main_content .drug_types'),filtersParentBlock=$('#main_content .drug_filters'),productsParentBlock=$('#main_content .drugs'),types={},products,curTypeId,isAnimate=false,animateProducts=[],productTexts=productsParentBlock.find('.fname, .fsummary');init();function init(){if(!typesBlock.size())return;var userFilterId=location.href.split('#');userFilterId=1<userFilterId.length&&allId!=userFilterId[1]?userFilterId[1]:'';var typeIdsByFilterIds={};typesBlock.find('.type').each(function(typeIndex){var typeBlock=$(this);var typeId=getIds(typeBlock.attr('class'),typePrefix,true);var filters={};var curFilterId;var filtersBlock=filtersParentBlock.find('.'+typeContentPrefix+typeId);if(!typeIndex){curTypeId=typeId;}else{filtersBlock.addClass('hidden');}
filtersBlock.find('.filter').each(function(filterIndex){var filterBlock=$(this);var filterId=getIds(filterBlock.attr('class'),filterPrefix,true);if(!filterIndex){curFilterId=filterId;}
if(userFilterId&&userFilterId==filterId){curFilterId=filterId;}
if(filterId!=allId){typeIdsByFilterIds[filterId]=typeId;}
filters[filterId]={el:filterBlock,productIndexes:[]};filterBlock.find('.pseudo_link').click(function(){changeFilter(typeId,filterId);});});types[typeId]={el:typeBlock,filtersBlock:filtersBlock,filters:filters,curFilterId:curFilterId};types[typeId].filters[types[typeId].curFilterId].el.addClass('selected');typeBlock.find('.pseudo_link').click(function(){changeFilter(typeId);});});products=productsParentBlock.find('.drug');products.each(function(index){var el=$(this);var filterIds=getIds(el.attr('class'),filterContentPrefix,false);for(var i=0;i<filterIds.length;i++){var typeId=typeIdsByFilterIds[filterIds[i]];types[typeId].filters[filterIds[i]].productIndexes.push(index);}});for(var typeId in types){if(undefined!==types[typeId].filters[allId]){for(var i=0;i<products.size();i++){types[typeId].filters[allId].productIndexes.push(i);}}}
if(isDebug){for(var typeId in types){for(var filterId in types[typeId].filters){console.log('type['+typeId+'], filter['+filterId+']: ('+types[typeId].filters[filterId].productIndexes+')');}}}
types[curTypeId].el.addClass('selected');typesBlock.removeClass('hidden');types[curTypeId].filtersBlock.removeClass('hidden');filtersParentBlock.removeClass('hidden');userFilterId&&products.not('.drug_'+types[curTypeId].curFilterId).css('display','none');jTweener.addNSAction({onComplete:finishAnimate},animateNs);}
function changeFilter(typeId,filterId){if(isAnimate)
return;if(!filterId){filterId=types[typeId].curFilterId;}
if(curTypeId==typeId&&types[curTypeId].curFilterId==filterId){return;}
isDebug&&console.log('changeFilter: type['+typeId+'], filter['+filterId+']');if(types[curTypeId].curFilterId==allId&&filterId==allId){changeData(typeId,filterId);}else{initAnimate(typeId,filterId);animate();}}
function changeData(typeId,filterId){if(curTypeId==typeId){types[curTypeId].filters[types[curTypeId].curFilterId].el.removeClass('selected');types[curTypeId].filters[filterId].el.addClass('selected');}else{types[curTypeId].el.removeClass('selected');types[curTypeId].filtersBlock.addClass('hidden');types[typeId].el.addClass('selected');types[typeId].filtersBlock.removeClass('hidden');}
curTypeId=typeId;types[curTypeId].curFilterId=filterId;}
function initAnimate(typeId,filterId){isAnimate=true;typesBlock.addClass(animateClass);filtersParentBlock.addClass(animateClass);var curFilterId=types[curTypeId].curFilterId;var curIndexes=types[curTypeId].filters[curFilterId].productIndexes;var indexes=types[typeId].filters[filterId].productIndexes;var allIndexes={};var containerWidth=productsParentBlock.width();var containerHeight=productsParentBlock.height();var blockWidth=products.eq(0).outerWidth()+parseInt(products.eq(0).css('margin-right'));var blockHeight=products.eq(0).outerHeight();var countInRow=Math.floor(containerWidth/blockWidth);for(var i=0;i<curIndexes.length;i++){var fromLeft=(i%countInRow)*blockWidth;var fromTop=Math.floor(i/countInRow)*blockHeight;var toPos=Math.floor(Math.random()*curIndexes.length);var toLeft=(toPos%countInRow)*blockWidth;var toTop=Math.floor(toPos/countInRow)*blockHeight;allIndexes[curIndexes[i]]={method:'hide',fromLeft:fromLeft,fromTop:fromTop,toLeft:toLeft,toTop:toTop};}
for(var i=0;i<indexes.length;i++){var toLeft=(i%countInRow)*blockWidth;var toTop=Math.floor(i/countInRow)*blockHeight;if(undefined===allIndexes[indexes[i]]){var fromPos=Math.floor(Math.random()*indexes.length);var fromLeft=(fromPos%countInRow)*blockWidth;var fromTop=Math.floor(fromPos/countInRow)*blockHeight;allIndexes[indexes[i]]={method:'show',fromLeft:fromLeft,fromTop:fromTop};}else{allIndexes[indexes[i]].method='move';}
allIndexes[indexes[i]].toLeft=toLeft;allIndexes[indexes[i]].toTop=toTop;}
for(var i=0;i<products.size();i++){if(undefined===allIndexes[i])
continue;animateProducts.push({method:allIndexes[i].method,index:i,fromLeft:allIndexes[i].fromLeft,fromTop:allIndexes[i].fromTop,toLeft:allIndexes[i].toLeft,toTop:allIndexes[i].toTop});var cssParams={position:'absolute',left:allIndexes[i].fromLeft,top:allIndexes[i].fromTop};if('show'==allIndexes[i].method){cssParams.opacity=0;cssParams.display='';}
products.eq(i).css(cssParams);}
changeData(typeId,filterId);var rowCount=Math.ceil(animateProducts.length/countInRow);if($.browser.msie&&6>=$.browser.version){var minHeight=parseInt(productsParentBlock.css('height'));var newHeight=rowCount*blockHeight<minHeight?minHeight:rowCount*blockHeight;productsParentBlock.css('height',containerHeight<newHeight?newHeight:containerHeight);}else{var minHeight=parseInt(productsParentBlock.css('min-height'));var newHeight=rowCount*blockHeight<minHeight?minHeight:rowCount*blockHeight;productsParentBlock.css('min-height',containerHeight<newHeight?newHeight:containerHeight);}}
function animate(){productTexts.addClass('hidden');typesBlock.addClass('drug_animate');filtersParentBlock.addClass('drug_animate');for(var i=0;i<animateProducts.length;i++){var tweenParams={namespace:animateNs,time:animateTime,delay:Math.random()*0.5*animateTime};var advParams;switch(animateProducts[i].method){case'hide':advParams={opacity:0};break;case'show':advParams={opacity:1,left:animateProducts[i].toLeft,top:animateProducts[i].toTop};break;default:advParams={left:animateProducts[i].toLeft,top:animateProducts[i].toTop};break;}
$t(products.eq(animateProducts[i].index),tweenParams).tween(advParams);}}
function finishAnimate(){for(var i=0;i<animateProducts.length;i++){var cssParams={position:'',left:'',top:''};if('hide'==animateProducts[i].method){cssParams.opacity='';cssParams.display='none';}
products.eq(animateProducts[i].index).css(cssParams);}
productsParentBlock.css($.browser.msie&&6>=$.browser.version?'height':'min-height','');animateProducts=[];productTexts.removeClass('hidden');isAnimate=false;typesBlock.removeClass(animateClass);filtersParentBlock.removeClass(animateClass);typesBlock.removeClass(animateClass);}
function getIds(classes,prefix,isOne){var classesPlain=classes.split(' ');var result=[];for(var i=0;i<classesPlain.length;i++){if(prefix==classesPlain[i].substr(0,prefix.length)){result.push(classesPlain[i].substr(prefix.length));}}
if(isOne){return result.length?result[0]:false;}
return result;}});