﻿var TheCalendarDays = new IndustryCalendarDays()
var TheCurrentDate  = new Date()
var TheMonths       = new Array()
var TheDayNames     = new Array()
var ThemMonths      = new Array()
var TheCOldResize   = window.onresize
var TheCOldScroll   = window.onscroll
var TheCOldLoad     = window.onload
var TheLanguageID   = 1033;
var TheCurrentEvent = null

function CalIndustryEvent() 
{
    this.ID           = 0
    this.Title        = ""
    this.StartDate    = new Date()
    this.EndDate      = new Date()
    this.StartTime    = new Date()
    this.EndTime      = new Date()
    this.Description  = ""
    this.LocationName = ""
    this.Address      = new Address()
    
    this.LoadFromXML = function(xmlnode) 
    {
        this.ID           = parseInt(GetNodeValue(xmlnode, "IndustryEventID"))
        this.Title        = GetNodeValue(xmlnode, "Title")
        this.StartDate    = GetDateTime(xmlnode.getElementsByTagName("StartDate")[0].firstChild.nodeValue)
        this.EndDate      = GetDateTime(xmlnode.getElementsByTagName("EndDate")  [0].firstChild.nodeValue)
        this.StartTime    = GetDateTime(xmlnode.getElementsByTagName("StartTime")[0].firstChild.nodeValue)
        this.EndTime      = GetDateTime(xmlnode.getElementsByTagName("EndTime")  [0].firstChild.nodeValue)
        this.Description  = GetNodeValue(xmlnode, "Description").replace(/\r\n/g, '\n').replace(/\n/g, '<br/>')
        this.LocationName = GetNodeValue(xmlnode, "LocationName")

        var TheAddressNodes = xmlnode.getElementsByTagName("Addresses")[0].childNodes

        if (TheAddressNodes.length > 0) this.Address.LoadFromXML(TheAddressNodes[0])
    }
}
function Address() 
{
    this.Street1 = 0
    this.Street2 = ""
    this.City    = ""
    this.State   = ""
    this.Zip     = ""

    this.LoadFromXML = function(xmlnode) 
    {
        this.Street1 = GetNodeValue(xmlnode, "Street1")
        this.Street2 = GetNodeValue(xmlnode, "Street2")
        this.City    = GetNodeValue(xmlnode, "City")
        this.State   = GetNodeValue(xmlnode, "State")
        this.Zip     = GetNodeValue(xmlnode, "Zip")
    }
}
function IndustryCalendarDay() 
{
    this.Date   = new Date()
    this.Events = new Array()

    this.LoadFromXML = function(xmlnode) 
    {
        this.Date = GetDate(xmlnode.getElementsByTagName("Date")[0].firstChild.nodeValue.split('T')[0])

        var TheEventNodes = xmlnode.getElementsByTagName("Events")[0].childNodes

        for (var i = 0; i < TheEventNodes.length; i++) 
        {
            var TheEvent = new CalIndustryEvent()
            TheEvent.LoadFromXML(TheEventNodes[i])
            this.Events.push(TheEvent)
        }
    }
}
function IndustryCalendarDays() 
{
    this.TheXmlDocument
    this.Days = new Array()

    this.LoadFromXML = function(xmltext) 
    {
        if (document.implementation && document.implementation.createDocument) 
        {
            this.TheXmlDocument = (new DOMParser()).parseFromString(xmltext, "application/xml");
            this.LoadXML();
        }
        else if (window.ActiveXObject) 
        {
            this.TheXmlDocument = new ActiveXObject("Microsoft.XMLDOM");
            this.TheXmlDocument.async = false;
            var loaded = this.TheXmlDocument.loadXML(xmltext)
            if (loaded) this.LoadXML();
        }
    }

    this.LoadXML = function() 
    {
        var TheDayNodes = this.TheXmlDocument.getElementsByTagName("ArrayOfIndustryCalendarDay")[0].childNodes

        for (var i = 0; i < TheDayNodes.length; i++) 
        {
            var TheDay = new IndustryCalendarDay()
            TheDay.LoadFromXML(TheDayNodes[i])
            this.Days.push(TheDay)
        }
    }

    this.GetDay = function(date) 
    {
        return this.Days[date.getDate() - 1];
    }
}
function SetupmCalendar() 
{
    for (var i = 0; i < 42; i++) 
    {
        var el = $get("md" + i)
        el.index = i
        if (el) 
        {
            el.onclick = function() 
            {
                CalBoxOpen()
            }
            el.onmouseover = function() 
            {
                var coel = $get('coel')
                var coim = $get('coim')

                if (this.date) 
                {
                    var coh = $get('codh')

                    if (this.day && (this.day.Events.length > 0)) 
                    {
                        var cob = $get('codb')

                        if (coh) coh.innerHTML = this.date ? TheMonths[this.date.getMonth()] + ' ' + this.date.getDate() + ', ' + this.date.getFullYear() : 'Error'
                        if (cob) RemoveAllChildren(cob)

                        for (var i = 0; i < this.day.Events.length; i++) 
                        {
                            var evel = document.createElement('div')
                            evel.innerHTML = this.day.Events[i].Title

                            if (i == this.day.Events.length - 1) 
                            {
                                if (i == 0) SetClass(evel, 'mdevef')
                                else        SetClass(evel, 'mdeve')
                            }
                            else if (i == 0) SetClass(evel, 'mdevf')
                            else             SetClass(evel, 'mdev')

                            cob.appendChild(evel)
                        }

                        if (coel) 
                        {
                            var TheCalEL = $get('calpnl')

                            var coell = 0
                            var coelt = 0

                            var col = this.index % 7
                            var row = Math.floor(this.index / 7)

                            coell = TheCalEL.offsetLeft + (26 * col)
                            coelt = TheCalEL.offsetTop - coel.offsetHeight + (26 * row + 13)

                            coim.style.left = (TheCalEL.offsetLeft + (26 * col + 3))      + "px"
                            coim.style.top  = (TheCalEL.offsetTop  + (26 * row + 13) - 1) + "px"

                            switch (col) 
                            {
                                case 0: coell -= 26;  break;
                                case 1: coell -= 52;  break;
                                case 2: coell -= 72;  break;
                                case 3: coell -= 72;  break;
                                case 4: coell -= 72;  break;
                                case 5: coell -= 90;  break;
                                case 6: coell -= 116; break;
                            }

                            coel.style.left = coell + "px"
                            coel.style.top  = coelt + "px"

                            coel.style.zIndex = 50
                            coim.style.zIndex = 51
                            coel.style.visibility = "visible"
                            coim.style.visibility = "visible"
                        }
                    }
                    else 
                    {
                        coel.style.visibility = "hidden"
                        coim.style.visibility = "hidden"
                    }
                }
                else 
                {
                    coel.style.visibility = "hidden"
                    coim.style.visibility = "hidden"
                }
            }

            el.onmouseout = function() 
            {
                var coel = $get('coel')
                var coim = $get('coim')

                coel.style.visibility = "hidden";
                coim.style.visibility = "hidden";
            }
        }
    }
}
function FormatCalendar(date) 
{
    var TheFirstDay    = new Date(date.getFullYear(), date.getMonth(), 1);
    var TheFirstDOW    = TheFirstDay.getDay()
    var TheDaysInMonth = DaysInMonth(date)
    var TheDate        = 1
    var TheMoYe        = $get('moye')

    TheMoYe.innerHTML = TheMonths[TheFirstDay.getMonth()] + ' ' + TheFirstDay.getFullYear()

    if (TheFirstDOW == 0) TheFirstDOW += 7;

    for (var i = 0; i < 42; i++) 
    {
        var el = $get("d" + i)

        if (el) RemoveAllChildren(el)

        if ((i >= TheFirstDOW) && (i < TheFirstDOW + TheDaysInMonth)) 
        {
            if (el) 
            {
                var newel = document.createElement('div')
                SetClass(newel, "cdn")
                newel.innerHTML = TheDate
                el.appendChild(newel)
                el.date = new Date(date.getFullYear(), date.getMonth(), TheDate)
                TheDate++
                var TheDay = TheCalendarDays.GetDay(el.date);

                if (TheDay) 
                {
                    el.day = TheDay

                    for (var j = 0; j < TheDay.Events.length; j++) 
                    {
                        var evel = document.createElement('div')
                        evel.day           = TheDay
                        evel.date          = el.date
                        evel.innerHTML     = TheDay.Events[j].Title
                        evel.IndustryEvent = TheDay.Events[j]

                        SetClass(evel, "cdev")
                        
                        evel.onclick = function() 
                        {
                            sBoxOpen(this)
                        }
                        
                        el.appendChild(evel)
                    }
                }
            }
        }
        else 
        {
            if (el) 
            {
                el.date = null;
                el.day = null;
            }
        }
    }
}
function NextMonth(doop) 
{
    if (!doop) 
    {
        $get('cloadingr') .style.visibility = 'inherit'
        $get('clloadingr').style.visibility = 'inherit'
        TheCurrentDate = new Date(TheCurrentDate.getFullYear(), TheCurrentDate.getMonth() + 1, 1)
        setTimeout("NextMonth(true);", 250)
        return
    }

    CalMakeRequest('xml/IndustryEvents.ashx?y=' + TheCurrentDate.getFullYear() + '&m=' + (TheCurrentDate.getMonth() + 1), CalLoadComplete)
}
function LastMonth(doop) 
{
    if (!doop) 
    {
        $get('cloadingl') .style.visibility = 'inherit'
        $get('clloadingl').style.visibility = 'inherit'
        TheCurrentDate = new Date(TheCurrentDate.getFullYear(), TheCurrentDate.getMonth() - 1, 1)
        setTimeout("LastMonth(true);", 250)
        return
    }

    CalMakeRequest('xml/IndustryEvents.ashx?y=' + TheCurrentDate.getFullYear() + '&m=' + (TheCurrentDate.getMonth() + 1), CalLoadComplete)
}
function CalLoadComplete(xmltext) 
{
    $get('cloadingr') .style.visibility = 'hidden'
    $get('cloadingl') .style.visibility = 'hidden'
    $get('clloadingr').style.visibility = 'hidden'
    $get('clloadingl').style.visibility = 'hidden'

    TheCalendarDays = new IndustryCalendarDays()
    TheCalendarDays.LoadFromXML(xmltext)
    FormatCalendar(TheCurrentDate)
    mFormatCalendar(TheCurrentDate)
}
function mFormatCalendar(date) 
{
    var TheFirstDay    = new Date(date.getFullYear(), date.getMonth(), 1);
    var TheFirstDOW    = TheFirstDay.getDay()
    var TheDaysInMonth = DaysInMonth(date)
    var TheDate = 1
    var TheMoYe = $get('mmoye')

    TheMoYe.innerHTML = TheMonths[TheFirstDay.getMonth()] + ' ' + TheFirstDay.getFullYear()

    if (TheFirstDOW == 0) TheFirstDOW += 7;

    for (var i = 0; i < 42; i++) 
    {
        var el = $get("md" + i)

        if (el) 
        {
            RemoveAllChildren(el)

            if ((i >= TheFirstDOW) && (i < TheFirstDOW + TheDaysInMonth)) 
            {
                var newel = document.createElement('div')
                SetClass(newel, 'mcdn')
                newel.innerHTML = TheDate
                el.appendChild(newel)
                el.date = new Date(date.getFullYear(), date.getMonth(), TheDate)
                TheDate++

                el.day = TheCalendarDays.GetDay(el.date);

                if (el.day.Events.length > 0) 
                {
                    SetClass(newel, 'mcdns')
                    if (el.getAttribute("class")) 
                    {
                        if (el.getAttribute("class").indexOf(" mcds") == -1) 
                        {
                            el.setAttribute("class", el.getAttribute("class") + " mcds")
                        }
                    }
                    if (el.getAttribute("className")) 
                    {
                        if (el.getAttribute("className").indexOf(" mcds") == -1) 
                        {
                            el.setAttribute("className", el.getAttribute("className") + " mcds")
                        }
                    }
                }
                else 
                {
                    if (el.getAttribute("class"))     el.setAttribute("class",     el.getAttribute("class")    .replace(" mcds", ""))
                    if (el.getAttribute("className")) el.setAttribute("className", el.getAttribute("className").replace(" mcds", ""))
                }
            }
            else 
            {
                el.date = null;
                el.day = null;
                if (el.getAttribute("class"))     el.setAttribute("class",     el.getAttribute("class")    .replace(" mcds", ""))
                if (el.getAttribute("className")) el.setAttribute("className", el.getAttribute("className").replace(" mcds", ""))
            }
        }
    }
}
window.onload = function() 
{
    if (TheCOldLoad) TheCOldLoad()

    var el1 = $get('calbback')
    var el2 = $get('calbbox')

    document.forms[0].appendChild(el1)
    document.forms[0].appendChild(el2)

    CalendarSetup()
    SetupmCalendar()
    FormatCalendar(TheCurrentDate)
    mFormatCalendar(TheCurrentDate)
}
function DaysInMonth(date) 
{
    return 32 - new Date(date.getFullYear(), date.getMonth(), 32).getDate();
}
function GetDate(xmldate) 
{
    try 
    {
        if (xmldate.split('-').length != 3) return new Date()

        //Javascript bug parsing '09'
        var TheYear  = parseInt(xmldate.split('-')[0] == "09" ? "9" : xmldate.split('-')[0])
        var TheMonth = parseInt(xmldate.split('-')[1] == "09" ? "9" : xmldate.split('-')[1])
        var TheDay   = parseInt(xmldate.split('-')[2] == "09" ? "9" : xmldate.split('-')[2])

        if ((TheMonth == "NaN") || (TheDay == "NaN") || (TheYear == "NaN")) return new Date()

        return new Date(TheYear, TheMonth - 1, TheDay)
    }
    catch (Error) 
    {
        return new Date()
    }
}
function RemoveLeadingZero(s) 
{
    while (true) 
    {
        if (s.indexOf("0") == 0) s = s.substr(1, s.length - 1);
        else break;
    }

    return (s == "") ? "0" : s;
}
function GetDateTime(xmldatetime) 
{
    try 
    {
        var xmldate = xmldatetime.split('T')[0]
        var xmltime = xmldatetime.split('T')[1]

        if (xmldate.split('-').length != 3) return new Date()
        if (xmltime.split(':').length <  2) return new Date()

        var TheYear   = parseInt(RemoveLeadingZero(xmldate.split('-')[0]))
        var TheMonth  = parseInt(RemoveLeadingZero(xmldate.split('-')[1]))
        var TheDay    = parseInt(RemoveLeadingZero(xmldate.split('-')[2]))
        var TheHour   = parseInt(RemoveLeadingZero(xmltime.split(':')[0]))
        var TheMinute = parseInt(RemoveLeadingZero(xmltime.split(':')[1]))

        return new Date(TheYear, TheMonth - 1, TheDay, TheHour, TheMinute, 0)
    }
    catch (Error) 
    {
        return new Date()
    }
}
function GetCalDateString(date) 
{
    var TheResult = TheDayNames[date.getDay()] + ' ' + TheMonths[date.getMonth()] + ' ' + date.getDate() + ' '

    var TheHours   = date.getHours()
    var TheMinutes = date.getMinutes()
    var TheAMPM    = TheHours < 12 ? 'AM' : 'PM';

    TheHours = TheHours > 12 ? TheHours - 12 : TheHours
    TheHours = TheHours == 0 ? 12 : TheHours

    TheMinutes = TheMinutes < 10 ? '0' + TheMinutes : TheMinutes.toString()

    return TheResult + TheHours + ':' + TheMinutes + ' ' + TheAMPM
}
function GetCalTimeString(date) 
{
    var TheResult  = ''
    var TheHours   = date.getHours()
    var TheMinutes = date.getMinutes()
    var TheAMPM    = TheHours < 12 ? 'AM' : 'PM';

    TheHours = TheHours > 12 ? TheHours - 12 : TheHours
    TheHours = TheHours == 0 ? 12 : TheHours

    TheMinutes = TheMinutes < 10 ? '0' + TheMinutes : TheMinutes.toString()

    TheResult = TheHours + ':' + TheMinutes + ' ' + TheAMPM
    
    return (TheResult == '12:34 PM') ? '' : TheResult
}
function GetNodeValue(aNode, name) 
{
    try 
    {
        if (aNode.getElementsByTagName(name)[0].firstChild) 
        {
            return aNode.getElementsByTagName(name)[0].firstChild.nodeValue
        }
        else return "";
    }
    catch (Error) 
    {
        alert(name)
    }
}
function OnCWindowResize() 
{
    var el1 = $get('calbback')
    var el2 = $get('calbbox')

    el1.style.height = document.documentElement.clientHeight + document.documentElement.scrollTop  + "px"
    el1.style.width  = document.documentElement.clientWidth  + document.documentElement.scrollLeft + "px"
    el2.style.height = document.documentElement.clientHeight + document.documentElement.scrollTop  + "px"
    el2.style.width  = document.documentElement.clientWidth  + document.documentElement.scrollLeft + "px"
}
function OnCWindowScroll() 
{
    var el1 = $get('calbback')
    var el2 = $get('calbbox')

    el1.style.height = document.documentElement.clientHeight + document.documentElement.scrollTop  + "px"
    el1.style.width  = document.documentElement.clientWidth  + document.documentElement.scrollLeft + "px"
    el2.style.height = document.documentElement.clientHeight + document.documentElement.scrollTop  + "px"
    el2.style.width  = document.documentElement.clientWidth  + document.documentElement.scrollLeft + "px"
}
function CalBoxOpen() 
{
    document.documentElement.scrollTop = "0px"
    
    OnCWindowResize()
    OnCWindowScroll()

    var el1 = $get('calbback')
    var el2 = $get('calbbox')
    var el3 = $get('calbox')
    var el4 = $get('detbox')
    var fel = $get('flashcontent')

    fel.style.display    = 'none'
    fel.style.visibility = 'hidden'
    el1.style.display    = "block"
    el2.style.display    = "block"
    el1.style.visibility = "visible"
    el2.style.visibility = "visible"
    el3.style.display    = "block"
    el4.style.display    = "none"
    el3.style.visibility = "visible"
    el4.style.visibility = "hidden"
}
function CalBoxClose() 
{
    var el1 = $get('calbback')
    var el2 = $get('calbbox')
    var fel = $get('flashcontent')

    fel.style.display    = 'block'
    fel.style.visibility = 'visible'

    el1.style.display    = "none"
    el2.style.display    = "none"
    el1.style.visibility = "hidden"
    el2.style.visibility = "hidden"
}
function sBoxOpen(el) 
{
    OnCWindowResize()
    OnCWindowScroll()

    var el1           = $get('calbox')
    var el2           = $get('detbox')
    var ddate         = $get('ddate')
    var dtime         = $get('dtime')
    var dwhat         = $get('dwhat')
    var dlocation     = $get('dlocation')
    var ddesc         = $get('ddesc')
    var dstreet       = $get('dstreet')
    var dstreet2      = $get('dstreet2')
    var dcitystatezip = $get('dcitystatezip')
    var olbtn         = $get('olbtn')

    var calhd = $get('calhd')
    var evhd  = $get('evhd')

    calhd.style.display    = 'none'
    calhd.style.visibility = 'hidden'
    evhd .style.display    = 'block'
    evhd .style.visibility = 'visible'
    
    if (el) 
    {
        TheCurrentEvent = el.IndustryEvent
        
        ddate.innerHTML = TheMonths[el.date.getMonth()] + ' ' + el.date.getDate() + ', ' + el.date.getFullYear()
        dwhat.innerHTML = el.IndustryEvent.Title

        var sdates = GetCalTimeString(el.IndustryEvent.StartTime)
        var edates = GetCalTimeString(el.IndustryEvent.EndTime)

        if (sdates == edates) dtime.innerHTML = sdates
        else                  dtime.innerHTML = sdates + ' - ' + edates

        if (dtime.innerHTML == '') 
        {
            dtime.style.display    = 'none'
            dtime.style.visibility = 'hidden'
        }
        else 
        {
            dtime.style.display    = 'block'
            dtime.style.visibility = 'visible'
        }

        dstreet .innerHTML = el.IndustryEvent.Address.Street1
        dstreet2.innerHTML = el.IndustryEvent.Address.Street2

        if (el.IndustryEvent.Address.Street2 == '')
        {
            dstreet2.style.display    = 'none'
            dstreet2.style.visibility = 'hidden'
        }
        else
        {
            dstreet2.style.display    = 'block'
            dstreet2.style.visibility = 'visible'
        }
        
        dcitystatezip.innerHTML = el.IndustryEvent.Address.City + ', ' + el.IndustryEvent.Address.State + '  ' + el.IndustryEvent.Address.Zip

        dlocation.innerHTML = el.IndustryEvent.LocationName
        ddesc    .innerHTML = el.IndustryEvent.Description

        if (olbtn) olbtn.IndustryEvent = el.IndustryEvent
    }

    if (el1 && el2) 
    {
        el1.style.display    = "none"
        el2.style.display    = "block"
        el1.style.visibility = "hidden"
        el2.style.visibility = "visible"
    }
}
function sBoxClose() 
{
    OnCWindowResize()
    OnCWindowScroll()

    var el1 = $get('detbox')
    var el2 = $get('calbox')

    var calhd = $get('calhd')
    var evhd  = $get('evhd')

    calhd.style.display    = 'block'
    calhd.style.visibility = 'visible'
    evhd.style.display     = 'none'
    evhd.style.visibility  = 'hidden'

    if (el1 && el2) 
    {
        el1.style.display    = "none"
        el2.style.display    = "block"
        el1.style.visibility = "hidden"
        el2.style.visibility = "visible"
    }
}
window.onresize = function() 
{
    if (TheCOldResize) TheCOldResize()
    OnCWindowResize()
}
window.onscroll = function() 
{
    if (TheCOldScroll) TheCOldScroll()
    OnCWindowScroll()
}
function RemoveAllChildren(el) 
{
    while (el.childNodes.length > 0) el.removeChild(el.childNodes[0])
}
function SetClass(el, name) 
{
    if (el) 
    {
        el.setAttribute("class",     name)
        el.setAttribute("className", name)
    }
}
function CalMakeRequest(url, func) 
{
    var TheRequest = false
    var self = this

    if (window.XMLHttpRequest) // Mozilla/Safari
    {
        self.TheRequest = new XMLHttpRequest()
    }
    else if (window.ActiveXObject) // IE
    {
        self.TheRequest = new ActiveXObject("Microsoft.XMLHTTP")
    }

    self.TheRequest.open('GET', url, true);
    self.TheRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    self.TheRequest.onreadystatechange = function() 
    {
        if (self.TheRequest.readyState == 4) 
        {
            if (self.TheRequest.status == 200) 
            {
                if (func) func(self.TheRequest.responseText)
            }
        }
    }

    self.TheRequest.send(null)
}

function SaveToCalendar () 
{
    document.forms[0].action = "xml/IndustryEvents.ashx?type=ics&eid=" + TheCurrentEvent.ID

    return true;
}
