function fullsize(i)
{
	document.getElementById('fullsize_shield').style.display = "block";
	document.getElementById('fullsize_image').src = "include/graphics/gallery/fullsize/" + i + ".jpg";
	if (i < 2) { prevpic = 15; } else { prevpic = i - 1; }
	if (i > 14) { nextpic = 1; } else { nextpic = i + 1; }
	document.getElementById('viewer_box').style.display = "block";
}

function prev_photo(){ fullsize(prevpic); }

function next_photo() { fullsize(nextpic); }

function close_viewer()
{
	document.getElementById('fullsize_shield').style.display = "none";
	document.getElementById('viewer_box').style.display = "none";
}

function AjaxData(i)
{
    var r=null;
    try { r=new XMLHttpRequest(); /* Firefox, Opera 8.0+, Safari */ }
    catch (e)
    {
        try { r=new ActiveXObject('Msxml2.XMLHTTP');/* Internet Explorer */ }
        catch (e) { r=new ActiveXObject('Microsoft.XMLHTTP'); }
    }
    if (r==null)
    {
        alert ('Your browser does not support AJAX!');
        return;
    }
    if (i.indexOf('?')>-1) //add nocache var to url so we don't get cached data
    { i += '&nocache=' + new Date().getTime(); }
    else
    { i += '?nocache=' + new Date().getTime(); }
    r.open('GET',i,true);
    r.send(null);
    return r;
}

function display_homepage_screenings()
{
	var months = new Array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec");
	var u = 'include/xml/screenings.xml';
	var r = AjaxData(u);
	r.onreadystatechange=function()
	{
	    if (r.readyState==4 || r.readyState=='complete')
	    {
			var	x = parse_xml_into_variable_array(r.responseText); 
			var s = x['screenings'][0]['event'];
			var d = new Date();
			var y = d.getFullYear();
			var m = d.getMonth() + 1;
			if (m < 10) { m = "0" + m; }
			var d = d.getDate();
			if (d < 10) { d = "0" + d; }
			var today = y + "" + m + "" + d;
			if (s[s.length-1]['date'] >= today)
			{
				var o = "<table><tr><td class='title' colspan='2'>SCREENINGS</td></tr>";		
				o += "<tr><th>DATE/TIME</th><th class='right'>LOCATION</th></tr>";
				var t = 0;
				for (n=0;(n<s.length && t < 6);n++)
				{
					if (s[n]['date'] >= today)
					{
						t++;
						o += "<tr";
						if (t % 2) { o += " class='odd'"; }
						o += "><td>";
						var m = parseInt(s[n]['date'][0].substring(4,6), 10);
						m = m - 1;
						var month = months[m];
						var d = parseInt(s[n]['date'][0].substring(6), 10);
						o += month + " " + d + "</td>";
						o += "<td class='right'>" + s[n]['location'][0] + "<br />" + s[n]['city'][0] + ", " + s[n]['state'][0] + "</td></tr>";
					}
				}
				o += "<tr><td class='link' colspan='2'>(view full schedule)</td></tr></table>";
				document.getElementById('homepage_screenings').innerHTML = o;
			}
	    }
	}
}

function display_screenings()
{
	var weekdays = new Array("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday");
	var u = 'include/xml/screenings.xml';
	var r = AjaxData(u);
	r.onreadystatechange=function()
	{
	    if (r.readyState==4 || r.readyState=='complete')
	    {
			var	x = parse_xml_into_variable_array(r.responseText); 
			var s = x['screenings'][0]['event'];
			var d = new Date();
			var y = d.getFullYear();
			var m = d.getMonth() + 1;
			if (m < 10) { m = "0" + m; }
			var d = d.getDate();
			if (d < 10) { d = "0" + d; }
			var today = y + "" + m + "" + d; 
			if (s[s.length-1]['date'] >= today)
			{
				var o = "<table id='screenings'>";
				o += "<tr><th>DATE/TIME</th><th class='loc'>LOCATION</th><th class='tickets'>TICKETS</th></tr>";
				var t = 0;
				for (n=0;n<s.length;n++)
				{
					if (s[n]['date'] >= today)
					{
						t++;
						o += "<tr";
						if (t % 2) { o += " class='odd'"; }
						o += "><td>";
						var y = s[n]['date'][0].substring(0,4);
						var m = parseInt(s[n]['date'][0].substring(4,6), 10);
						tm = m - 1;
						var td = parseInt(s[n]['date'][0].substring(6), 10);
						var dt = new Date();
						dt.setFullYear(y,tm,td);
						o += weekdays[dt.getDay()] + ", " + m + "/" + td + "/" + y + "<br />" + s[n]['time'][0] + "</td>";
						o += "<td class='loc'>" + s[n]['location'][0] + "<br />" + s[n]['city'][0] + ", " + s[n]['state'][0] + "</td>";
						o += "<td class='tickets'><a href='" + s[n]['url'][0] + "' target='_blank'>Get Info</a></td></tr>";
					}
				}
				o += "</table>";
				document.getElementById('screenings').innerHTML = o;
			}
	    }
	}
}


function rotate_promo(i, c, a)
{
	if (a == 'up') { c++; }	else { c--; }
	if (c > 10) 
	{ setTimeout("rotate_promo(" + i + ", 10, 'down')", 3000); }
	else if (c < 1) 
	{ 
		document.getElementById('promo'+i).style.display = "none";
		i++;
		if (document.getElementById('promo'+i) == null) { i = 0; }
		rotate_promo(i, 0, 'up');
	}
	else
	{
			document.getElementById('promo'+i).style.display = "block";
			document.getElementById('promo'+i).style.opacity = (c / 10);
			document.getElementById('promo'+i).style.filter = "alpha(opacity=" + (c * 10) + ")";
			setTimeout("rotate_promo(" + i + ", " + c + ", '" + a + "')", 100);
	}
}




function parse_xml_into_variable_array(xml)
{
    try { return  parse_xml_get_tags(xml); }
    catch(err) { alert(err); }
}

function parse_xml_get_tag(i)
{
    if (i.indexOf('<') > -1 && i.indexOf('>') > -1)
    {
        s = i.indexOf('<') + 1;
        e = i.indexOf('>');
        return i.substring(s, e);
    } else { return ""; }
}

function parse_xml_get_tag_name(i)
{
    if (i.indexOf(' ') > -1)
    {
        e = i.indexOf(' ');
        return i.substr(0, e);
    } else { return i; }
}

function parse_xml_get_tag_type(i, tag_name)
{
    if (i.substr(0, 3) == "!--")
        { return "comment"; }
    else if (tag_name == "?xml")
        { return "xml tag"; }
    else if (i.substr(0, 1) == "/")
        { throw "Malformed XML data. When looking for new tag, found closing tag '" + tag_name + "'."; }
    else if (i.substring(i.length-1) == "/")
        { return "self closing tag"; }
    else
        { return "opening tag"; }
}

function parse_xml_remove_tag(i, tag_name)
{
    if (i.indexOf('</' + tag_name + '>') > -1)
    {
        e = i.indexOf('</' + tag_name + '>') + tag_name.length + 3;
        return i.substring(e);
    } else {
        throw "Malformed XML data. No closing tag for '" + tag_name + "'.";
    } 
}

function parse_xml_get_tag_value(i, tag_name)
{
    s = i.indexOf('>') + 1;
    if (i.indexOf('</' + tag_name, s) > -1)
    {
        e = i.indexOf('</' + tag_name, s);
        return i.substring(s, e);
    } else {
        throw "Malformed XML data. No closing tag for '" + tag_name + "'.";
    } 
}

function parse_xml_get_subtag_name(i)
{
    if(i.indexOf("=") > -1)
    {
        e = i.indexOf('=');
        s = i.lastIndexOf(" ", e) + 1;
        return i.substring(s, e);
    } else { return ""; }
}

function parse_xml_get_subtag_value(i, subtag_name)
{
    s = i.indexOf(subtag_name + '=') + 2 + subtag_name.length;
    c = i.substr(s-1, 1);
    if (c !== "'" && c !== '"' && c !== "\\")
        { throw "Malformed XML data. Missing ' or \" after = for subtag '" + subtag_name + "'."; }
    if (c == "\\") { c = i.substr(s-1, 2); s++; }
    match = "false";
    e = s;
    while (match == "false" && i.indexOf(c, e) > -1)
    {
        e = i.indexOf(c, e);
        if (c.length == 2 || i.substr(e-1, 1) !== "\\") { match = "true"; } else { e++; }
    }
    if (match == "true")
        { return i.substring(s, e); }
    else
        { throw "Malformed XML data. No closing ' or \" to subtag '" + subtag_name + "'."; } 
}

function parse_xml_get_subtags(i)
{
    var o = new Array();
    while(parse_xml_get_subtag_name(i) !== '')
    {
        subtag_name = parse_xml_get_subtag_name(i);
        subtag_value = parse_xml_get_subtag_value(i, subtag_name);
        e = i.indexOf(subtag_value);
        i = i.substring(e);
        o[subtag_name]=subtag_value;
    }
    return o;
}

function parse_xml_get_tags(i, o)
{
    if (typeof o == 'undefined') { var o = new Array(); }
    while (parse_xml_get_tag(i) !== '')
    {
        tag = parse_xml_get_tag(i);
        tag_name = parse_xml_get_tag_name(tag);
        tag_type = parse_xml_get_tag_type(tag, tag_name);
        if (tag_type == "comment")
        {
            e = i.indexOf("-->") + 3;
            i = i.substring(e);
        }
        else if (tag_type == "xml tag" || tag_type == "self closing tag")
        {
            subtags = parse_xml_get_subtags(tag);
            if (tag_type == "self closing tag")
            {
                if (typeof o[tag_name] == 'undefined')
                    { o[tag_name]=[subtags]; } else { o[tag_name].push(subtags); }
            }
            else
            {
                o[tag_name] = subtags;
            }
            e = i.indexOf(tag) + tag.length + 1;
            i = i.substring(e);
        }
        else if (tag_type == "opening tag")
        {
            tag_value = parse_xml_get_tag_value(i, tag_name);
            if (tag.indexOf("=") > -1)
                { var subtags = parse_xml_get_subtags(tag); } else { var subtags = ''; }
            i = parse_xml_remove_tag(i, tag_name);
            if (parse_xml_get_tag(tag_value) == '')
            {
                if (subtags !== '')
                {
                    if (typeof o[tag_name] == 'undefined')
                    {
                        o[tag_name]=subtags;
                        o[tag_name].push(tag_value);
                    } else {
                        var len = o[tag_name].length;
                        o[tag_name][len]=subtags;
                        o[tag_name][len].push(tag_value);
                    }
                } else {
                    if (typeof o[tag_name] == 'undefined')
                        { o[tag_name]=[tag_value]; } else { o[tag_name].push(tag_value); }
                }
            } else {
                if (subtags !== '')
                {
                    if (typeof o[tag_name] == 'undefined')
                    {
                        o[tag_name]=[get_tags(tag_value, subtags)];
                    } else {
                        o[tag_name].push(get_tags(tag_value, subtags));
                    }
                } else {
                    if (typeof o[tag_name] == 'undefined')
                        { o[tag_name]=[parse_xml_get_tags(tag_value)]; }
                    else
                        { o[tag_name].push(parse_xml_get_tags(tag_value)); }
                }
            }
        }
    }
    return o;
}


