/*
:: phyp.project :::::::::::::::::::
:: apps.bymutation.script :::::: :|
:: 20100119 ::::::::::::::::: @greg
*/

var BYM_TIME  = 250;
var BYM_SPACE = 290;
var BYM_FADE  = 800;

var bym = {

    /// Init
    'pic': 0,
    'env': false,
    'ovl': false,

    /// Collection
    'collection': {
	'toggle': function(e, n) {
	    e.blur();
	    var i, b, box, bs, on;
	    b = 'box-' + n;
	    box = h.id(b);
	    if (!box.css().inArray('none'))
		return true;
	    bs = h.classNodes('collections');
	    for (i = 0; i < bs.length; i++) {
		if (!bs[i].e.id) continue;
		bs[i].css('none', bs[i].e.id != b);
	    }
	    return false;
	}
    },

    /// Scroll
    'scroll': {
	'start': function(inc, id, auto) {
	    var i;
	    if (bym.env && bym.env.busy)
		return false;
	    bym.env = { 'div':  h.id('slide-' + id),
			'off':  1600,
			'inc':  inc,
			'auto': auto,
			'n':    30,
			'busy': true };
	    for (i = 0; i < bym.env.div.length(); i++)
		if (bym.env.div.node(i).name())
		    bym.env.off -= (5 + bym.env.div.node(i).e.offsetWidth);
	    bym.env.left = parseInt(bym.env.div.getStyle('left')) || 0;
	    bym.env.itv = setInterval('bym.scroll.slide()', 40);
	},
	'stop': function() {
	    if (!bym.env || !bym.env.busy)
		return false;
	    bym.env.busy = false;
	    clearInterval(bym.env.itv);
	},
	'slide': function() {
	    var delta = bym.env.inc * (bym.env.auto? bym.env.n--: 5);
	    bym.env.old = bym.env.left;
	    bym.env.left = between(bym.env.off, bym.env.left + delta, 800);
	    bym.env.div.setStyle('left', bym.env.left + 'px');
	    if ((bym.env.old == bym.env.left) ||
		(bym.env.auto && !bym.env.n))
		this.stop();
	},
	'jump': function(inc, id) {
	    this.start(inc, id, true);
	}
    },

    /// Item
    'item': {
	'show': function(e, n) {
	    var sx, lx, i, offs, ph;
	    bym.env = { };
	    bym.env.a = dom(e);
	    bym.env.a.blur();
	    bym.env.li = bym.env.a.parent();
	    bym.env.ul = bym.env.li.parent();
	    bym.env.dl = h.id('details');
	    bym.env.nx = false;
	    bym.env.di = bym.env.dl.classNode('on');
	    offs = bym.env.dl.attNodes('item');
	    for (i = 0; i < offs.length; i++)
		if (parseInt(offs[i].getAtt('item')) == n)
		    break;
	    bym.env.df = offs[i];
	    bym.env.dx = bym.env.di;
	    bym.env.pi = h.id('photo' + bym.pic);
	    bym.env.pf = h.id('photo' + (1 - bym.pic));
	    if (bym.env.pf.e) {
		ph = bym.env.df.tag('img');
		if (ph) bym.env.pf.e.src = ph.e.src;
		else bym.env.pf.e.src = '';
		bym.env.pf.setAlpha(0);
		bym.env.pf.css('none', false);
	    }
	    bym.env.on = bym.env.li.parent().classNode('on');
	    if (bym.env.li.e == bym.env.on.e)
		return false;
	    bym.env.up = h.id('sp-up');
	    bym.env.down = h.id('sp-down');
	    if (bym.env.up.e)
		bym.env.up.moveAfter(bym.env.li);
	    bym.env.li.css('on', true);
	    bym.env.on.css('on', false);
	    lx = bym.env.li.index();
	    if (bym.env.up.e) {
		sx = bym.env.up.index();
		if (lx > sx) lx -= 2;
	    }
	    if (!ie) lx = floor((lx - 1) / 2);
	    bym.env.mi = parseInt(bym.env.ul.getStyle('margin-top'));
	    bym.env.ml = 144 - lx * 16 - bym.env.mi;
	    if (!bym.env.pf.e) bym.env.ml += 90;
	    bym.env.now = now();
	    bym.env.itv = setInterval('bym.item.slide()', 20);
	    return false;
	},
	'slide': function() {
	    var f, a, s1, s2, o, m, t;
	    t = now() - bym.env.now;
	    f  = between(0, t / BYM_TIME, 1);
	    a  = abs(1 - 2 * f);
	    s1 = round(f * BYM_SPACE);
	    s2 = round((1 - f) * BYM_SPACE);
	    m  = round(bym.env.mi + bym.env.ml * f);
	    if (f > .5 && !bym.env.nx) {
		bym.env.nx = true;
		bym.env.di.toggle('on', 'off');
		bym.env.df.toggle('off', 'on');
		bym.env.dx = bym.env.df;
	    }
	    bym.env.dx.setAlpha(a);
	    if (bym.env.pf.e) {
		bym.env.pi.setAlpha(1 - f);
		bym.env.pf.setAlpha(f);
	    }
	    if (bym.env.up.e) {
		bym.env.up.setStyle('height', s1 + 'px');
		bym.env.down.setStyle('height', s2 + 'px');
	    }
	    bym.env.ul.setStyle('margin-top', m + 'px');
	    bym.env.ul.parent().css('truncated', m < 0);
	    if (f < 1)
		return true;
	    bym.pic = 1 - bym.pic;
	    if (bym.env.pi.e)
		bym.env.pi.css('none', true);
	    if (bym.env.up.e) {
		bym.env.down.moveAfter(bym.env.up);
		bym.env.down.setStyle('height', s1 + 'px');
		bym.env.up.setStyle('height', s2 + 'px');
	    }
	    clearInterval(bym.env.itv);
	}
    },

    /// Detail
    'detail': {
	'show': function(e, n) {
	    var i, offs;
	    bym.env = { };
	    bym.env.a = dom(e);
	    bym.env.a.blur();
	    bym.env.li = bym.env.a.parent();
	    bym.env.ul = bym.env.li.parent();
	    bym.env.dl = h.id('zoom');
	    bym.env.nx = false;
	    bym.env.di = bym.env.dl.classNode('on');
	    bym.env.dl.css('none', false);
	    if (!bym.ovl) {
		bym.ovl = dom('div.overlay');
		bym.ovl.e.onclick = function() { return bym.detail.hide(this); }
		bym.ovl.setAlpha(0);
		if (!ie) dom(d.body).append(bym.ovl);
	    }
	    bym.ovl.css('none', false);
	    offs = bym.env.dl.attNodes('item');
	    for (i = 0; i < offs.length; i++)
		if (parseInt(offs[i].getAtt('item')) == n)
		    break;
	    bym.env.df = offs[i];
	    bym.env.dx = bym.env.di;
	    bym.env.now = now();
	    bym.env.itv = setInterval('bym.detail.fade()', 20);
	    return false;
	},
	'hide': function(e) {
	    return this.show(e, -1);
	},
	'fade': function() {
	    var f, g, a, s1, s2, o, m, t;
	    t = now() - bym.env.now;
	    c = bym.env.df? 1: 4;
	    f = between(0, t / BYM_FADE * c, 1);
	    g = between(0, t / BYM_FADE * 5, 1);
	    a = abs(1 - 2 * f);
	    if (f > .5 && !bym.env.nx) {
		bym.env.nx = true;
		if (bym.env.di)
		    bym.env.di.toggle('on', 'off');
		if (bym.env.df)
		    bym.env.df.toggle('off', 'on');
		bym.env.dx = bym.env.df;
	    }
	    if (bym.env.dx)
		bym.env.dx.setAlpha(a);
	    if (!bym.env.df)
		bym.ovl.setAlpha((1 - g) * .4);
	    else if (!bym.env.di)
		bym.ovl.setAlpha(g * .4);
	    if (f < 1)
		return true;
	    if (!bym.env.dx) {
		bym.env.dl.css('none', true);
		bym.ovl.css('none', true);
	    }
	    clearInterval(bym.env.itv);
	}
    }

};

