/* * Javascript Document
/* * Copyright 2008 Liberty Studio (http://liberty2k.com/), Spenser Lee (http://resume.liberty2k.com/). */
Element.implement({
show: function() {
this.removeClass("not-shown");
return this;
},
hide: function() {
this.addClass("not-shown");
return this;
}
});
var page = {
status: {
isIE: Browser.Engines.trident()
},
els: null,
start: function() {
animatedNav.preload();
if(page.status.isIE) {
$$("#main-nav .nav-item a").each(function(a){
a.onfocus = function() {this.blur();};
});
}
$("preload").hide();
animatedNav.start();
}
};
var creativeDesignIntro = {
loaded: false,
start: function() {
if(!this.loaded) {
$("content-1-4").getElements(".en .feature-icons a").each(function(a,i){
a.addEvent('mouseover',this.showDesc.bind(this,[a,i]));
}.bind(this));
$("content-1-4").getElements(".zh .feature-icons a").each(function(a,i){
a.addEvent('mouseover',this.showDesc.bind(this,[a,i]));
}.bind(this));
this.allLis = $("content-1-4").getElements(".feature-icons li");
this.allDescs = $("content-1-4").getElements(".feature-descriptions li");
this.loaded = true;
}
},
showDesc: function(alink, at) {
this.allLis.each(function(el){ el.removeClass("current"); });
this.allDescs.each(function(el){ el.hide(); });
$("content-1-4").getElements(".feature-icon-" + at).each(function(el){ el.addClass("current"); });
$("content-1-4").getElements(".feature-" + at).each(function(el){ el.show(); });
var featureShadow = $("textshadow").getElement(".features");
if(featureShadow) {
featureShadow.getElements(".feature-icons li").each(function(el){ el.removeClass("current"); });
featureShadow.getElement(".feature-icon-" + at).addClass("current");
featureShadow.getElements(".feature-descriptions li").each(function(el){ el.hide(); });
featureShadow.getElement(".feature-" + at).show();
}
}
};
var artPortfolio = {
loaded: false,
thumbBase: "",
fullBase: "",
curAt: 0,
imageData: [
["http://brownkuma.liberty2k.com/images/thumbs/He_s_not_a_badass_I_suppose.jpg","http://brownkuma.liberty2k.com/images/gallery/decent/He_s_not_a_badass_I_suppose_by_brownkuma.jpg"],
["http://brownkuma.liberty2k.com/images/thumbs/And_he_s_shy_by_brownkuma.jpg","http://brownkuma.liberty2k.com/images/gallery/decent/And_he_s_shy_by_brownkuma.jpg"],
["http://brownkuma.liberty2k.com/images/thumbs/Ma_Liberte_Contre.jpg","http://brownkuma.liberty2k.com/images/gallery/decent/Ma_Liberte.jpg"],
["http://brownkuma.liberty2k.com/images/thumbs/Charlie-full.jpg","http://brownkuma.liberty2k.com/images/gallery/decent/Charlie.jpg"],
["http://brownkuma.liberty2k.com/images/thumbs/noirtheater_reillymccoy.jpg","http://brownkuma.liberty2k.com/images/gallery/decent/noirtheater_reillymccoy.jpg"],
["http://brownkuma.liberty2k.com/images/thumbs/MM_Character_Sheet.jpg","http://brownkuma.liberty2k.com/images/gallery/decent/MM_Character_Sheet.jpg"],
["http://brownkuma.liberty2k.com/images/thumbs/Stand-Your-Guard.jpg","http://brownkuma.liberty2k.com/images/gallery/decent/Stand-Your-Guard.jpg"],
["http://brownkuma.liberty2k.com/images/thumbs/Quad-the-hyena-captain.jpg","http://brownkuma.liberty2k.com/images/gallery/decent/Quad-the-hyena-captain.jpg"],
["http://brownkuma.liberty2k.com/images/thumbs/Mark-Wulfgar-Reading.jpg","http://brownkuma.liberty2k.com/images/gallery/scrap/Mark-Wulfgar-Reading.jpg"],
["http://brownkuma.liberty2k.com/images/thumbs/Tora.jpg","http://brownkuma.liberty2k.com/images/gallery/scrap/Tora.jpg"],
["http://brownkuma.liberty2k.com/images/thumbs/Metropolis-Hat.jpg","http://brownkuma.liberty2k.com/images/gallery/scrap/Metropolis-Hat.jpg"],
["http://brownkuma.liberty2k.com/images/thumbs/Rolling-Blades.jpg","http://brownkuma.liberty2k.com/images/gallery/scrap/Rolling-Blades.jpg"]
],
animationProtect: false,
template: "
",
start: function() {
if(!this.loaded) {
this.containers = [$("content-3-1").getElement(".en .browse-works").empty().addClass("inload"), $("content-3-1").getElement(".zh .browse-works").empty().addClass("inload")];
this.containers[0].removeClass("inload").set('html',this.template);
this.containers[1].removeClass("inload").set('html',this.template);
this.paging.start.apply(this);
this.masking.start.apply(this);
this.thumbH = [this.containers[0].getElement(".thumbh"),this.containers[1].getElement(".thumbh")];
this.midH = [this.containers[0].getElement(".small-img"),this.containers[1].getElement(".small-img")];
var images = [];
this.thumbs = [];
for(var i=0; i img.width) {
if(img.height > 340) {
img.setStyles({ width: img.width * (340 / img.height), height: 340 });
}
} else {
if(img.width > 340) {
img.setStyles({ width: 360, height: img.height * (360 / img.width) });
}
}
var a = new Element("a").addClass("mid-a-"+i).setProperties({
href: "#Art-Portfolio",
onclick: "artPortfolio.loadLarge();return false"
}).inject(this.midH[0].removeClass("inload"));
var aClone = a.clone().inject(this.midH[1].removeClass("inload"));
img.inject(a);
img.clone().inject(aClone);
},
loadLarge: function() {
var size = animatedNav.size;
var heightLimit = size.y - 34;
var img = this.loadingImg.clone().setProperties({
onclick: "artPortfolio.closePopup();return false",
alt: "Close (x)",
title: "Close (x)"
}).setStyles({width: "", height: "", display: "block"}).inject(this.popup.empty());
img.setStyles( heightLimit < this.loadingImgSize.height ? { width: this.loadingImgSize.width * (heightLimit / this.loadingImgSize.height), height: heightLimit } : { width: this.loadingImgSize.width, height: this.loadingImgSize.height } );
this.mask.setStyles({ width: size.x, height: size.y });
var h = this.loadingImgSize.height;
var w = this.loadingImgSize.width;
this.popup.setStyles({ width: w, height: h.toInt() + 24, top: ( size.y - h.toInt() - 34 ) / 2, left: ( size.x - w.toInt() - 20 ) / 2 }).setStyles({display: '', opacity: 0}).fade('in');
this.mask.setStyles({display: '', opacity: 0}).fade(0.8);
this.popupClose = new Element("a").set('text', animatedNav.status.curLang == 'en' ? '[ CLOSE ]' : '[ 关闭 ]').setProperties({
href: "#Art-Portfolio",
onclick: "artPortfolio.closePopup();return false"
}).inject(this.popup);
},
masking: {
start: function() {
this.mask = new Element("div").addClass('mask').setStyle('display','none').inject(document.body);
this.popup = new Element("div").addClass('popup').setStyle('display','none').inject(document.body);
}
},
paging: {
start: function() {
this.pageCount = ( this.imageData.length % 2 == 0 ? this.imageData.length / 2 : ( this.imageData.length + 1 ) / 2 ) - 1;
this.ups = [this.containers[0].getElement(".up"),this.containers[1].getElement(".up")];
this.downs = [this.containers[0].getElement(".down"),this.containers[1].getElement(".down")];
this.ups[0].removeClass("up").addClass("up-disabled").addEvents({
mouseover: function() {
if(!this.hasClass("up-disabled")) {
this.removeClass("up").addClass("up-hover");
}
},
mouseout: function() {
if(!this.hasClass("up-disabled")) {
this.removeClass("up-hover").addClass("up");
}
},
click: function() {
if(!this.hasClass("up-disabled")) {
artPortfolio.paging.prevPage.apply(artPortfolio);
}
}
});
this.ups[1].removeClass("up").addClass("up-disabled").addEvents({
mouseover: function() {
if(!this.hasClass("up-disabled")) {
this.removeClass("up").addClass("up-hover");
}
},
mouseout: function() {
if(!this.hasClass("up-disabled")) {
this.removeClass("up-hover").addClass("up");
}
},
click: function() {
if(!this.hasClass("up-disabled")) {
artPortfolio.paging.prevPage.apply(artPortfolio);
}
}
});
this.downs[0].addEvents({
mouseover: function() {
if(!this.hasClass("down-disabled")) {
this.removeClass("down").addClass("down-hover");
}
},
mouseout: function() {
if(!this.hasClass("down-disabled")) {
this.removeClass("down-hover").addClass("down");
}
},
click: function() {
if(!this.hasClass("down-disabled")) {
artPortfolio.paging.nextPage.apply(artPortfolio);
}
}
});
this.downs[1].addEvents({
mouseover: function() {
if(!this.hasClass("down-disabled")) {
this.removeClass("down").addClass("down-hover");
}
},
mouseout: function() {
if(!this.hasClass("down-disabled")) {
this.removeClass("down-hover").addClass("down");
}
},
click: function() {
if(!this.hasClass("down-disabled")) {
artPortfolio.paging.nextPage.apply(artPortfolio);
}
}
});
},
nextPage: function() {
if(!this.animationProtect) {
this.animationProtect = true;
if(this.ups[0].hasClass("up-disabled") || this.ups[1].hasClass("up-disabled")) {
this.ups[0].removeClass("up-disabled").addClass("up");
this.ups[1].removeClass("up-disabled").addClass("up");
}
this.curAt++;
if(this.curAt >= this.pageCount) {
this.downs[0].removeClass("down").removeClass("down-hover").addClass("down-disabled");
this.downs[1].removeClass("down").removeClass("down-hover").addClass("down-disabled");
}
this.thumbH[0].get('tween', {duration: 500, property: 'margin-top'}).start(-this.curAt * 300);
this.thumbH[1].get('tween', {duration: 500, property: 'margin-top'}).start(-this.curAt * 300);
this.deProtect.delay(500,this);
}
},
prevPage: function() {
if(!this.animationProtect) {
this.animationProtect = true;
if(this.downs[0].hasClass("down-disabled") || this.downs[1].hasClass("down-disabled")) {
this.downs[0].removeClass("down-disabled").addClass("down");
this.downs[1].removeClass("down-disabled").addClass("down");
}
this.curAt--;
if(this.curAt <= 0) {
this.ups[0].removeClass("up").removeClass("up-hover").addClass("up-disabled");
this.ups[1].removeClass("up").removeClass("up-hover").addClass("up-disabled");
}
this.thumbH[0].get('tween', {duration: 500, property: 'margin-top'}).start(-this.curAt * 300);
this.thumbH[1].get('tween', {duration: 500, property: 'margin-top'}).start(-this.curAt * 300);
this.deProtect.delay(500,this);
}
}
},
closePopup: function() {
this.mask.fade('out');
this.popup.fade('out');
},
deProtect: function() {
this.animationProtect = false;
}
};
var animatedNav = {
consts: {
width: 950,
height: 520,
navSubOffset: 38,
navSubFarOffset: 170,
contentOffset: 240,
contentOffsetOpend: 374,
mainNavOffset: [12,48,108,144,180],
anime: {
menuDropSpeed: 300,
menuHighLightSpeed: 300,
submenuShowSpeed: 500,
submenuMoveSpeed: 1000,
submenuPuffSpeed: 500,
menuLiStartColor: '#777',
menuLiStopColor: '#fff'
}
},
status: {
curShown: 0,
curTab: 0,
curSubTab: 0,
curLang: 'en'
},
size: window.getSize(),
els: null,
menuPos: null,
mousePos: {
isInMain: false,
isInSub: false
},
preload: function() {
textShadow.start();
this.els = {
navMain: $("main-nav"),
navMainLis: $("main-nav").getElements("li"),
navSub: $("sub-nav"),
navSubLis: $("sub-nav").getElements(".nav-item"),
contentHolder: $("contents"),
navSubLiTabs: []
};
this.els.navSubLiTabs = this.els.navSubLis.map(function(li){ return li.getElements(".sub-nav li"); });
$$('a[rel="navLink"]').each(function(a){
a.addEvent('click',animatedNav.navTo.bind(animatedNav,a.getProperty("rev").split("-").map(function(argu){return eval(argu);})));
});
$('switchLang-en').addEvent('click',this.showLang.bindWithEvent(this,['en']));
$('switchLang-zh').addEvent('click',this.showLang.bindWithEvent(this,['zh']));
$('switchLang-'+this.status.curLang).setStyle("text-decoration",'underline');
$$('a[rel="external"]').each(function(a){a.setProperty('target','_blank');});
this.menuPos = this.setMenuPos();
this.prepareAnimation(this.menuPos);
},
showLang: function(e,lang) {
e.stop();
if(lang != this.status.curLang) {
var prevLang = this.status.curLang;
$('switchLang-'+prevLang).setStyle("text-decoration",'none');
this.status.curLang = lang;
$('switchLang-'+lang).setStyle("text-decoration",'underline');
textShadow.clean();
$$("." + prevLang).each(function(el){el.hide();});
$$("." + lang).each(function(el){
el.show();
});
textShadow.add(this.status.curTab,this.status.curSubTab,$("content-" + this.status.curTab + "-" + this.status.curSubTab).getElement("."+this.status.curLang).get('html'));
}
},
start: function() {
this.startAnimation();
},
resize: function() {
this.size = window.getSize();
this.menuPos = this.setMenuPos();
if(this.status.curShown) {
this.setMainLisPos(this.menuPos);
} else {
this.menuPos = this.setMenuPos();
this.prepareAnimation(this.menuPos);
this.startAnimation();
}
},
setMenuPos: function() {
var trueLeft;
if(page.status.isIE) {
trueLeft = $("m").getCoordinates().left;
} else {
trueLeft = (this.size.x-this.consts.width)/2;
}
this.els.navMain.setStyle('left',trueLeft);
var navsub = this.els.navSub;
navsub.setStyle('left',trueLeft+this.consts.navSubOffset);
var trueTop = (this.size.y-this.consts.height)/2;
if(page.status.isIE && trueTop < 0) {
trueTop = 0;
}
navsub.getElement('ul.sub-nav-h').setStyle('padding-top',trueTop);
return {
t: trueTop,
l: trueLeft
};
},
setMainLisPos: function(menuPos) {
var offsets = this.consts.mainNavOffset;
this.els.navMainLis.each(function(li,at){
li.setStyle('top',menuPos.t + offsets[at]);
});
},
prepareAnimation: function(menuPos) {
var offsets = this.consts.mainNavOffset;
this.els.navMainLis.each(function(li,at){
li.setStyle('top',-50).set('tween',{duration:animatedNav.consts.anime.menuDropSpeed,property:'top'}).addEvents({
mouseenter: animatedNav.highlightNav.bind(animatedNav,[li,animatedNav.consts.anime.menuLiStopColor]),
mouseleave: animatedNav.highlightNav.bind(animatedNav,[li,animatedNav.consts.anime.menuLiStartColor])
});
li.getElement(".marker").set('tween',{duration:animatedNav.consts.anime.menuHighLightSpeed,property:'color'});
li.getElement(".nav-item a").set('tween',{duration:animatedNav.consts.anime.menuHighLightSpeed,property:'color'});
});
this.els.navSub.set({
opacity: 0,
styles: {left: animatedNav.consts.navSubFarOffset+menuPos.l},
tween: {
duration: animatedNav.consts.anime.submenuShowSpeed,
property: 'opacity'
}
}).removeClass("hide-when-loading");
},
startAnimation: function(prevTab,curTab) {
if(this.status.curShown == 0) {
this.els.navMain.removeClass("hide-when-loading");
var offsets = this.consts.mainNavOffset;
var menuTop = (this.size.y-this.consts.height)/2;
var l = this.els.navMainLis.length;
this.els.navMainLis.each(function(li,at){
var tw = li.get('tween');
var delayTime = animatedNav.consts.anime.menuDropSpeed*(l-at);
tw.start.delay(delayTime,tw,[offsets[at]+menuTop]);
if(animatedNav.status.curTab == at) {
li.addClass('current');
animatedNav.highlightNav.delay(animatedNav.consts.anime.menuDropSpeed*(l+2),animatedNav,[li,animatedNav.consts.anime.menuLiStopColor,true]);
animatedNav.els.navSubLis[at].show();
}
});
var subNavTween = this.els.navSub.get('tween');
subNavTween.start.delay(animatedNav.consts.anime.menuDropSpeed*l+1000,subNavTween,[1]);
animatedNav.firstCloseNav.delay(animatedNav.consts.anime.menuDropSpeed*l+2000,animatedNav);
} else {
this.highlightNav(this.els.navMainLis[prevTab].removeClass('current'),this.consts.anime.menuLiStartColor);
this.els.navSubLis[prevTab].hide();
this.highlightNav(this.els.navMainLis[curTab].addClass('current'),this.consts.anime.menuLiStopColor,true);
this.showSubTabAnimation(this.els.navSubLis[curTab]);
}
},
firstCloseNav: function() {
var duration = animatedNav.consts.anime.submenuMoveSpeed;
this.moveSubMenu(false);
this.setStatus.delay(duration,this,2);
this.els.navMain.addEvents({
mouseenter: this.setMouseStatus.bind(this,["isInMain",true]),
mouseleave: this.setMouseStatus.bind(this,["isInMain",false])
});
this.els.navSub.addEvents({
mouseenter: this.setMouseStatus.bind(this,["isInSub",true]),
mouseleave: this.setMouseStatus.bind(this,["isInSub",false])
});
this.showContent.delay(duration+200,this);
$("f").show.delay(duration+200,$("f"));
this.setStatus(1);
},
setStatus: function(status) {
this.status.curShown = status;
},
setMouseStatus: function(menu,isIn) {
this.mousePos[menu] = isIn;
if(this.status.curShown != 0) {
this.checkMemuMove.delay(10,this);
}
},
checkMemuMove: function() {
if(this.mousePos.isInMain) {
this.moveSubMenu(true);
this.setStatus(2);
} else if(!this.mousePos.isInSub) {
this.moveSubMenu(false);
this.setStatus(1);
}
},
highlightNav: function(nav,color,isInit) {
if(isInit || !nav.hasClass('current')) {
nav.getElement(".marker").get('tween').start(color);
nav.getElement(".nav-item a").get('tween').start(color);
}
},
moveSubMenu: function(isOpening) {
var duration = animatedNav.consts.anime.submenuMoveSpeed;
this.els.navSub.get('tween',{duration: duration, property: 'left', link: 'cancel'}).start((isOpening ? this.consts.navSubFarOffset : this.consts.navSubOffset) + this.menuPos.l);
this.els.contentHolder.get('tween',{duration: duration, property: "left"}).start(isOpening ? this.consts.contentOffsetOpend : this.consts.contentOffset);
textShadow.move(isOpening);
return duration;
},
navTo: function(tab,subtab,showAnimation) {
if(this.status.curShown) {
var changed = false;
var prevTabs;
if(this.status.curTab != tab) {
var previousTab = this.status.curTab;
if(showAnimation) {
var delay = this.moveSubMenu(true);
this.startAnimation.delay(delay,this,[previousTab,tab]);
delay += animatedNav.consts.anime.menuHighLightSpeed * 2 + 300;
this.moveSubMenu.delay(delay,this);
} else {
this.startAnimation(previousTab,tab);
}
prevTabs = this.processSubTab(tab,subtab,previousTab);
this.status.curTab = tab;
changed = true;
} else {
if(this.status.curSubTab != subtab) {
prevTabs = this.processSubTab(tab,subtab,tab);
changed = true;
}
}
if(changed) {
if(showAnimation) {
this.loadTab.delay(delay,this,[prevTabs[0],prevTabs[1]]);
} else {
this.loadTab(prevTabs[0],prevTabs[1]);
}
if(tab == 1 && subtab == 4) {
creativeDesignIntro.start();
} else if (tab == 3 && subtab == 1) {
artPortfolio.start();
}
}
}
},
showSubTabAnimation: function(subtab) {
subtab.show().getElement(".sub-nav").get("tween",{duration: this.consts.anime.submenuPuffSpeed, property: "padding-top", transition: Fx.Transitions.Sine.easeOut}).set(this.size.y).start(0);
},
processSubTab: function(tab,subtab,previousTab) {
var prevSubTab = this.status.curSubTab;
var prevTabEl = this.els.navSubLiTabs[previousTab][prevSubTab];
prevTabEl.removeClass("current");
this.status.curSubTab = subtab;
this.els.navSubLiTabs[tab][subtab].addClass("current");
return [previousTab,prevSubTab]
},
showContent: function() {
var contentTab = $("content-" + this.status.curTab + "-" + this.status.curSubTab).show();
textShadow.clean().add(this.status.curTab,this.status.curSubTab,contentTab.getElement("."+this.status.curLang).get('html'));
},
loadTab: function(prevTab,prevSubTab) {
$("content-" + prevTab + "-" + prevSubTab).hide();
this.showContent();
}
};
var textShadow = {
consts: {
contentOffset: animatedNav.consts.contentOffset + 3,
contentOffsetOpend: animatedNav.consts.contentOffsetOpend + 3,
animeDuration: animatedNav.consts.anime.submenuMoveSpeed
},
start: function() {
this.el = $("textshadow").set('tweeen');
return this;
},
clean: function() {
this.el.empty();
return this;
},
add: function(curTab,curSubTab,content) {
this.el.set('html',content);
return this;
},
move: function(isOpening) {
this.el.get('tween',{duration: this.consts.animeDuration, property: 'left', link: 'cancel'}).start(isOpening ? this.consts.contentOffsetOpend : this.consts.contentOffset);
return this;
}
};
window.addEvents({
domready: page.start.bind(page),
resize: animatedNav.resize.bind(animatedNav)
});