var min_heights = {};

function $(obj_id){ return document.getElementById(obj_id); }

function log()
{
    if(typeof(console) != 'undefined')
    {
        console.log(arguments);
    }
}

function on_dom_load(template)
{
	switch(template)
	{
		case 'home':
			min_height('content_bg', 650);
			break;
	}
}

function min_height(obj_id, height)
{
    var obj = $(obj_id);
    if(!obj) return;
    obj.style.height = '';
    min_heights[obj_id] = height;
    if(obj.offsetHeight < height)
    {
        obj.style.height = height + 'px';
    }
}

function check_min_heights()
{
    if(min_heights)
    {
        for(i in min_heights)
        {
            min_height(i, min_heights[i]);
        }
    }
}

function get_viewport_dimensions()
{
	return {
		width: self.innerWidth || (document.body.offsetWidth || document.documentElement.offsetWidth),
		height: self.innerHeight || (document.body.offsetHeight || document.documentElement.offsetHeight)
	};
}

var Accordion = function(elems)
{
    if(!elems) return;

    var t = this;
    t.elements = elems;

    var sliding = [];
    var intervals = [];
    var sliding_interval = 0;

    for(var ele in t.elements)
    {
        $(t.elements[ele] + '_toggle').onmouseover = function()
        {
            t.toggle(this);
        }
        $(t.elements[ele] + '_toggle').onclick = function()
        {
            t.toggle();
        }
    }

    t.toggle = function(element)
    {
        var toggle, container;
        for(var ele in t.elements)
        {
            toggle = $(t.elements[ele] + '_toggle');
            container = $(t.elements[ele] + '_content');
            if (toggle != element)
            {
                slide(container, (browser.client == 'FireFox' ? -80 : -40));
                toggle.className = 'toggle';
            }
            else
            {
                slide(container, (browser.client == 'FireFox' ? 80 : 40));
                toggle.className = 'toggle toggle_act';
            }
        }
    }



    function slide(obj, amount)
    {
        if (sliding[obj.id]) clearInterval(sliding[obj.id].interval);
        sliding[obj.id] = {};
        sliding[obj.id].obj = obj;
        var inner = obj.getElementsByTagName('DIV');
        sliding[obj.id].desired_height = inner[0].offsetHeight;
        if (amount) sliding[obj.id].change = amount;

        if (browser.client == 'Internet Explorer' && browser.version < 7)
        {
            if (amount > 0) obj.style.height = sliding[obj.id].desired_height + 'px';
            else obj.style.height = '0px';
            on_complete();
            return;
        }

        if (!sliding_interval) intervals[intervals.length] = sliding_interval = setInterval(do_slide, (browser.client == 'FireFox' ? 60 : 30));
    }

    function do_slide()
    {
        var stop_sliding = true;
        for(var ele in t.elements)
        {
            if (sliding[t.elements[ele]+'_content']) stop_sliding = false;
        }

        if (stop_sliding)
        {
            clearInterval(sliding_interval);
            sliding_interval = 0;
            return;
        }

        var obj;

        for(var ele in t.elements)
        {
            obj = $(t.elements[ele] + '_content');
            if (sliding[obj.id])
            {
                var slider_height = obj.offsetHeight;

                var percent_moved = slider_height / sliding[obj.id].desired_height;
                var ease = (Math.sin(percent_moved * 3.14159265));
                var change = Math.round(sliding[obj.id].change * ease);

                if (change > -1 && change <= 0 && sliding[obj.id].change < 0) change = -5;
                else if (change >= 0 && change < 1 && sliding[obj.id].change > 0) change = 5;

                slider_height += change;
                if (slider_height >= sliding[obj.id].desired_height)
                {
                    sliding[obj.id].obj.style.height = sliding[obj.id].desired_height + 'px';
                    sliding[obj.id] = false;
                }
                else if (slider_height <= 0)
                {
                    obj.style.height = '0px';
                    sliding[obj.id] = false;
                }
                else
                {
                    obj.style.height = slider_height + 'px';
                }

                if(sliding[obj.id])
                {
                    on_complete();
                }
            }
        }
    }

    function on_complete()
    {
        check_min_heights();
    }
}

var Gallery = function(items)
{
    if(!items) return;

    var t = this;
    t.items = items;

    for(var i in t.items)
    {
        $('gallery_control_' + t.items[i].id).onclick = function()
        {
            select((+this.id.replace('gallery_control_', '')));
            return false;
        }
    }

    $('gallery_enlarge_control').onclick = function()
    {
        enlarge();
        return false;
    }

    function select(id)
    {
        var item = t.items[id];
        var rev_src = $('gallery_main_img').src.split('/').reverse();
        rev_src[0] = item.image;
        $('gallery_main_img').src = rev_src.reverse().join('/');

        $('gallery_enlarge').style.display = item['enlarge'] ? 'block' : 'none';
        var _gallery_text = $('gallery_text');
        if(item['text'])
        {
            _gallery_text.innerHTML = item['text'];
            _gallery_text.style.display = 'block';
        }
        else
        {
            _gallery_text.innerHTML = '';
            _gallery_text.style.display = 'none';
        }

        on_complete();
    }

    function enlarge()
    {
        var _gallery_overlay = $('gallery_enlarge_overlay');
        var _gallery_enlarge_loading = $('gallery_enlarge_loading');
		var unlarge_fctn = function()
        {
            unlarge();
            return false;
        }
        _gallery_overlay.onclick = unlarge_fctn;
        var _gallery_enlarge_img = $('gallery_enlarge_img');
        var _wrap = $('wrap');
        var vp = get_viewport_dimensions();
        var resize_height = vp.height > _wrap.offsetHeight ? vp.height : _wrap.offsetHeight;

        _gallery_overlay.style.width = _gallery_overlay.offsetWidth + 'px';
        _gallery_overlay.style.height = resize_height + 'px';

        var scroll_top = document.body.scrollTop ? document.body.scrollTop : (window.pageYOffset ? window.pageYOffset : (document.body.parentElement ? document.body.parentElement.scrollTop : 0));


        _gallery_enlarge_loading.style.display = 'block';
        var top  = Math.ceil(((vp.height - _gallery_enlarge_loading.offsetHeight) * 0.5) + scroll_top);
        _gallery_enlarge_loading.style.top = top +  'px';
        _gallery_enlarge_loading.style.left = ((_gallery_overlay.offsetWidth - _gallery_enlarge_loading.offsetWidth) * 0.5) + 'px';

        _gallery_enlarge_img.onload = function()
        {
            _gallery_enlarge_img.style.display = 'block';
            _gallery_enlarge_loading.style.display = 'none';

            top  = Math.ceil(((vp.height - _gallery_enlarge_img.offsetHeight) * 0.5) + scroll_top);
            _gallery_enlarge_img.style.top = top +  'px';
            _gallery_enlarge_img.style.left = ((_gallery_overlay.offsetWidth - _gallery_enlarge_img.offsetWidth) * 0.5) + 'px';
        };

		_gallery_enlarge_img.onclick = unlarge_fctn;

        _gallery_enlarge_img.src = $('gallery_main_img').src.replace('/main/', '/large/');
    }

    function unlarge()
    {
        $('gallery_enlarge_overlay').style.height = '0px';
        var _gallery_enlarge_img = $('gallery_enlarge_img');
        _gallery_enlarge_img.style.display = 'none';
        _gallery_enlarge_img.src = '';
        $('gallery_enlarge_loading').style.display = 'none';
    }

    function on_complete()
    {
        check_min_heights();
    }
}

function display_all_navs()
{
    var lis = document.getElementsByTagName('LI');
    for(var i = 0; i < lis.length; i++)
    {
        if(lis[i].style.display == 'none')
        {
            lis[i].style.display = 'block';
        }
    }
    $('full_list_control').style.display = 'none';

    var h3s = document.getElementsByTagName('H3');
    for(i = 0; i < h3s.length; i++)
    {
        if(h3s[i].style.display == 'none')
        {
            h3s[i].style.display = 'block';
        }
    }
    //$('full_list_control').style.display = 'none';
}

function toggle(id)
{
	if (!id) return false;
	var obj = $(id);
	if (!obj) return false;
	if (obj.style.display == 'none') obj.style.display = '';
	else obj.style.display = 'none';
	return false;
}

function focus_blur(obj, focus)
{
	var val = obj.name.replace('_', ' ');
	if (focus)
	{
		if(obj.value == val) obj.value = '';
		obj.className = obj.className.replace(' blur', '');
		return false;
	}
	else
	{
		if(obj.value == '')
		{
			obj.value = val;
			obj.className = obj.className+' blur';
		}
	}
	return false;
}
