var f;
var home_slideshow_data = [];
var temp_img;
var fade_list = [];
var fading = 0;

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

function log()
{
    if (typeof(console) != 'undefined')
    {
        for (i = 0; i < arguments.length; i++)
        {
            console.log(arguments[i]);
        }
    }
}

function init(page)
{
	switch (page)
	{
		case 'contact':
			load_gmap();
			window.onunload = GUnload;
			f = new form_utils();
			break;
		
		case 'home':
			var objects = {
				image: 'image',
				caption: 'caption',
				text: 'caption_label',
				link: 'caption_link'
			};
			init_img_text_link_slideshow(objects, home_slideshow_data);
			break;
	}
}

function form_utils()
{
	this.focus = function(o,v)
	{
		if (o.value == v) o.value = '';
		o.className = o.className.replace(/^error$/,'');
	}

	this.blur = function(o,v)
	{
		if (o.value == '') o.value = v;
	}
}

function swap_case_img(src, alt)
{
	var img = $('main_img').firstChild;
	var src_parts = img.src.split('/').reverse();
	src_parts[0] = src;
	src_parts.reverse();
	img.src = src_parts.join('/');
	img.alt = alt;
}

function fader()
{
    var obj = null;
	var speed = null;
	var interval_id = null;
    var opacity_now = null;
	var after_finish = null;

    this.setup = function(o)
	{
		if (!o) return false;
		obj = $(o);
        return true;
	}

    this.initiate = function(s,af)
	{
        speed = s;
		after_finish = af;
        if(opacity_now === null)
        {
            if(speed < 0) opacity_now = 100;
            else opacity_now = 0;
        }
        obj.style.opacity = (opacity_now / 100);
        obj.style.filter = "alpha(opacity=" + opacity_now + ")";
        if(speed > 0 && opacity_now == 0) obj.style.display = 'block';
        var interval = 30;
        if(interval_id)
        {
            clearInterval(interval_id);
            fading--;
        }
        interval_id = setInterval(do_fade,interval);
        fading++;
	}

    function do_fade()
	{
        x = opacity_now;
		new_opacity = x + speed;
        if (new_opacity <= 100 && new_opacity >= 0)
        {
            obj.style.opacity = (new_opacity / 100);
            obj.style.filter = "alpha(opacity=" + new_opacity + ")";
            opacity_now = new_opacity;
        }
        else
        {
            if (new_opacity < 0)
            {
                obj.style.opacity = 0;
                obj.style.filter = "alpha(opacity=0)";
                opacity_now = 0;
            }
            else if (new_opacity > 100)
            {
                obj.style.opacity = 1;
                obj.style.filter = "alpha(opacity=100)";
                opacity_now = 100;
            }
            if(speed < 0 && opacity_now == 0) obj.style.display = 'none';
            clearInterval(interval_id);
            interval_id = null;
            fading--;
			if(after_finish != null) after_finish();
        }
	}
}

function fade(obj,speed,after_finish)
{
	if (fade_list[obj])
	{
		fade_list[obj].initiate(speed,after_finish);
	}
	else
	{
		fade_list[obj] = new fader;
		fade_list[obj].setup(obj);
		fade_list[obj].initiate(speed,after_finish);
	}
}

function img_text_link_slideshow()
{
	var data = null;
	var text = null;
	var current_index = 0;
	var objs = null;
	var interval_speed = null;
	var fade_speed = null;
	var interval_id = null;

	this.setup = function(os, d)
	{
		if(!os.image) return false;
		if(!os.caption) return false;
		if(!os.text) return false;
		if(!os.link) return false;
		objs = { img: $(os.image), cap: $(os.caption), txt: $(os.text), lnk: $(os.link) };
		for(i in objs) if(!objs[i]) return false;
		data = d;
		return true;
	}

	this.initiate = function(o)
	{
		if(!o) return false;
		if(!o.interval_speed || !o.fade_speed) return false;
		if(o) for(i in o)
		{
			eval(i + " = " + o[i]);
		}
		for(i in objs) if(i != 'txt' && i != 'lnk')
		{
			objs[i].style.width = objs[i].offsetWidth + 'px';
		}
		if(interval_id) clearInterval(interval_id);
		interval_id = setInterval(down_img,interval_speed);
		return true;
	}

	function down_img()
	{
		fade(objs.img.id,-fade_speed,next_img);
	}
	
	function down_txt()
	{
		fade(objs.cap.id,-fade_speed,next_txt);
	}

	function next_img()
	{
		current_index = (current_index + 1) % data.length;
		var d = data[current_index];
		//image
		objs.img.src = d.image.src;
		objs.img.alt = d.image.alt;
		down_txt();
		up_img();
	}
	
	function next_txt()
	{
		var d = data[current_index];
		//text
		objs.txt.innerHTML = d.text;
		//link
		objs.lnk.href = d.link;
	}

	function up_img()
	{
		fade(objs.img.id,fade_speed,up_txt);
	}
	
	function up_txt()
	{
		fade(objs.cap.id,fade_speed);
	}
}

function init_img_text_link_slideshow(objects, data)
{
	slideshow = new img_text_link_slideshow;
	slideshow.setup(objects, data);
	slideshow.initiate( { interval_speed: 8000, fade_speed: 10 } );
}

function cache_img(src)
{
	temp_img = new Image();
	temp_img.src = src;
}
