﻿var tracing = false;

var NODETYPE_TEXT = 3;

var NODENAME_DIV = "div";
var NODENAME_P = "p";
var NODENAME_A = "a";

var NODENAME_LIST = "ul";
var NODENAME_LISTITEM = "li";

var NODENAME_H2 = "h2";
var NODENAME_H3 = "h4";

var NODENAME_IMG = "img";
var NODENAME_SPAN = "span";

var CLASSNAME_SLIDE = "heroslide";
var CLASSNAME_IMG = "slideimage";
var CLASSNAME_CAPTION = "slidecaption";

var CLASSNAME_PROD_TICKET = "productTicket";
var CLASSNAME_GEN_TICKET = "generalTicket";

var CLASSNAME_ITEM_DETAILS = "itemDetails";
var CLASSNAME_ITEM_IMAGE = "itemImage";


var heroSlides = document.getElementById('heroSlides');
var heroNav = document.getElementById('heroNav');
var swingTickets = document.getElementById('swingTickets');

if (heroSlides) {

    var slidesXML = processHeroSlides(heroSlides);
    var slidesXMLStr = escape(xml2Str(slidesXML));

    trace(slidesXMLStr);

    if (slidesXMLStr) {

        var so = new SWFObject("/include/swf/heroSlides.swf", "Slides", "950", "380", "8", "#FFFFFF");

        so.addVariable("slides", slidesXMLStr);
        //so.addVariable("flashtrace", trace);

        so.write(heroSlides);
    }


}

if (heroNav) {

    var navTitleStr = escape(processHeroNavTitle(heroNav));
    var navLinksStr = escape(processHeroNavLinks(heroNav));


    if (navLinksStr) {

        var so = new SWFObject("/include/swf/heroNav.swf", "Nav", "950", "380", "8", "#FFFFFF");

        so.addVariable("links", navLinksStr);
        so.addVariable("title", navTitleStr);
        //so.addVariable("flashtrace", trace);

        so.write(heroNav);
    }
}


if (swingTickets) {

    var ticketsXML = processSwingTickets(swingTickets);
    var ticketsXMLStr = escape(xml2Str(ticketsXML));

    if (ticketsXMLStr) {

        var so = new SWFObject("/include/swf/swingTickets.swf", "swingTickets", "270", "310", "8", "#FFFFFF");

        so.addVariable("tickets", ticketsXMLStr);
        //so.addVariable("flashtrace", trace);

        so.write(swingTickets);
    }


}


function processSwingTickets(domObj) {

    var ticketsXML = createXMLDoc('tickets');

    var lItms = domObj.childNodes;
    var len = lItms.length;

    for (var i = 0; i < len; i++) {
        var chldNd = lItms[i];
        if (chldNd.nodeName.toLowerCase() == NODENAME_LISTITEM.toLowerCase() && chldNd.className.toLowerCase().indexOf(CLASSNAME_GEN_TICKET.toLowerCase()) > -1) {
            createGeneralTicket(chldNd, ticketsXML);
        } else if (chldNd.nodeName.toLowerCase() == NODENAME_LISTITEM.toLowerCase() && chldNd.className.toLowerCase().indexOf(CLASSNAME_PROD_TICKET.toLowerCase()) > -1) {
            createProductTicket(chldNd, ticketsXML);
        }
    }
    return ticketsXML;
}


function createGeneralTicket(srcNode, XMLDoc) {

    var tktNode = XMLDoc.createElement(CLASSNAME_GEN_TICKET);

    var tktChildren = srcNode.childNodes;
    var len = tktChildren.length;

    for (var i = 0; i < len; i++) {
        var chldNd = tktChildren[i];
        if (chldNd.nodeName.toLowerCase() == NODENAME_H3) {
            createTicketTitle(chldNd, tktNode, XMLDoc);
        } else if (chldNd.nodeName.toLowerCase() == NODENAME_DIV.toLowerCase() && chldNd.className.toLowerCase().indexOf(CLASSNAME_ITEM_DETAILS.toLowerCase()) > -1) {
            createTicketText(chldNd, tktNode, XMLDoc);
        } else if (chldNd.nodeName.toLowerCase() == NODENAME_DIV.toLowerCase() && chldNd.className.toLowerCase().indexOf(CLASSNAME_ITEM_IMAGE.toLowerCase()) > -1) {
            createTicketImage(chldNd, tktNode, XMLDoc);
        }
    }
    XMLDoc.documentElement.appendChild(tktNode);

}

function createProductTicket(srcNode, XMLDoc) {
    var tktNode = XMLDoc.createElement(CLASSNAME_PROD_TICKET);

    var tktChildren = srcNode.childNodes;
    var len = tktChildren.length;

    for (var i = 0; i < len; i++) {
        var chldNd = tktChildren[i];
        if (chldNd.nodeName.toLowerCase() == NODENAME_H3) {
            createTicketTitle(chldNd, tktNode, XMLDoc);
        } else if (chldNd.nodeName.toLowerCase() == NODENAME_LIST) {
            createTicketProducts(chldNd, tktNode, XMLDoc);
        }
    }
    XMLDoc.documentElement.appendChild(tktNode);

}

function createTicketProducts(srcNode, tktNode, XMLDoc) {

    var productsNode = XMLDoc.createElement('products');

    var childNodes = srcNode.childNodes;
    var len = childNodes.length;

    for (var i = 0; i < len; i++) {
        var chldNd = childNodes[i];
        if (chldNd.nodeName.toLowerCase() == NODENAME_LISTITEM) {
            createTicketProduct(chldNd, productsNode, XMLDoc);
        }
    }

    tktNode.appendChild(productsNode);
}

function createTicketProduct(srcNode, prodsNode, XMLDoc) {

    var productNode = XMLDoc.createElement('product');

    var childNodes = srcNode.childNodes;
    var len = childNodes.length;

    for (var i = 0; i < len; i++) {
        var chldNd = childNodes[i];
        if (chldNd.nodeName.toLowerCase() == NODENAME_DIV.toLowerCase() && chldNd.className.toLowerCase().indexOf(CLASSNAME_ITEM_DETAILS.toLowerCase()) > -1) {
            processProductItemDetailsDiv(chldNd, productNode, XMLDoc);
        } else if (chldNd.nodeName.toLowerCase() == NODENAME_DIV && chldNd.className.toLowerCase().indexOf(CLASSNAME_ITEM_IMAGE)) {
            processProductItemImageDiv(chldNd, productNode, XMLDoc);
        }
    }
    prodsNode.appendChild(productNode);
}

function processProductItemImageDiv(srcNode, prodNode, XMLDoc) {

    var childNodes = srcNode.childNodes;
    var len = childNodes.length;

    for (var i = 0; i < len; i++) {
        var chldNd = childNodes[i];
        if (chldNd.nodeName.toLowerCase() == NODENAME_A.toLowerCase()) {
            prodNode.setAttribute('link', chldNd.attributes['href'].value);
            createTicketImage(chldNd, prodNode, XMLDoc);
        }
    }
}

function processProductItemDetailsDiv(srcNode, prodNode, XMLDoc) {

    var childNodes = srcNode.childNodes;
    var len = childNodes.length;

    for (var i = 0; i < len; i++) {
        var chldNd = childNodes[i];
        if (chldNd.nodeName.toLowerCase() == NODENAME_DIV.toLowerCase()) {
            processProductDetailsDiv(chldNd, prodNode, XMLDoc);
        }
    }
}

function processProductDetailsDiv(srcNode, prodNode, XMLDoc) {

    var childNodes = srcNode.childNodes;
    var len = childNodes.length;

    for (var i = 0; i < len; i++) {
        var chldNd = childNodes[i];
        if (chldNd.nodeName.toLowerCase() == NODENAME_SPAN.toLowerCase()) {
            createTicketText(chldNd, prodNode, XMLDoc);
        } else if (chldNd.nodeName.toLowerCase() == NODENAME_DIV.toLowerCase()) {
            processPriceViewDiv(chldNd, prodNode, XMLDoc);
        }
    }
}

function processPriceViewDiv(srcNode, prodNode, XMLDoc) {

    var childNodes = srcNode.childNodes;
    var len = childNodes.length;

    for (var i = 0; i < len; i++) {
        var chldNd = childNodes[i];
        if (chldNd.nodeName.toLowerCase() == NODENAME_DIV.toLowerCase()) {
            var price = chldNd.innerHTML;
            prodNode.setAttribute('price', price);
        }
    }
}

function createTicketTitle(srcNode, tktNode, XMLDoc) {
    var titleNode = XMLDoc.createElement('title');
    if (srcNode.attributes['class']) titleNode.setAttribute('class', srcNode.attributes['class'].value);
    var valueNode = XMLDoc.createTextNode(srcNode.firstChild.nodeValue);
    titleNode.appendChild(valueNode);
    tktNode.appendChild(titleNode);
}

function createTicketText(srcNode, tktNode, XMLDoc) {

    var textNode = XMLDoc.createElement('text');
    var appendText = false;

    var childNodes = srcNode.childNodes;
    var len = childNodes.length;

    for (var i = 0; i < len; i++) {
        var chldNd = childNodes[i];
        if (chldNd.nodeName.toLowerCase() == NODENAME_P) {
            var pNode = XMLDoc.createElement('p');
            if (chldNd.attributes['class']) pNode.setAttribute('class', chldNd.attributes['class'].value);
            var valueNode = XMLDoc.createTextNode(chldNd.firstChild.nodeValue);
            pNode.appendChild(valueNode);
            textNode.appendChild(pNode);
            appendText = true;
        } else if (chldNd.nodeType == NODETYPE_TEXT && chldNd.nodeValue.indexOf('  ') < 0) {
            var valueNode = XMLDoc.createTextNode(chldNd.nodeValue);
            textNode.appendChild(valueNode);
            appendText = true;
        }
    }

    if (appendText) tktNode.appendChild(textNode);
}

function createTicketImage(srcNode, tktNode, XMLDoc) {

    var childNodes = srcNode.childNodes;
    var len = childNodes.length;

    for (var i = 0; i < len; i++) {
        var chldNd = childNodes[i];
        if (chldNd.nodeName.toLowerCase() == NODENAME_IMG.toLowerCase()) {
            if (chldNd.attributes['src']) {
                var imgNode = XMLDoc.createElement('img');
                imgNode.setAttribute('src', chldNd.attributes['src'].value);
                tktNode.appendChild(imgNode);
            }
        }
    }

}

function processHeroNavTitle(domObj) {
    var titles = domObj.getElementsByTagName('h2');
    if (titles.length < 1)
        return '';
    var titleObj = domObj.removeChild(titles[0]);
    ;
    return '<h2>' + titleObj.innerHTML.toUpperCase() + ' </h2>';
}


function processHeroNavLinks(domObj) {
    return domObj.innerHTML;
}


function processHeroSlides(domObj) {

    var slidesXML = createXMLDoc('slides');

    var hsDivs = domObj.childNodes;
    var len = hsDivs.length;

    for (var i = 0; i < len; i++) {
        var chldNd = hsDivs[i];
        if (chldNd.nodeName.toLowerCase() == NODENAME_DIV && chldNd.className.toLowerCase().indexOf(CLASSNAME_SLIDE) > -1) {

            var slideNode = slidesXML.createElement('slide');

            var schld = chldNd.childNodes;
            var sLen = schld.length;

            for (var j = 0; j < sLen; j++) {
                var sChlNd = schld[j];
                if (sChlNd.nodeName.toLowerCase() == NODENAME_IMG && sChlNd.className.toLowerCase().indexOf(CLASSNAME_IMG) > -1) {
                    slideNode.setAttribute('imgsrc', sChlNd.src);
                    slidesXML.documentElement.appendChild(slideNode);
                } else if (sChlNd.nodeName.toLowerCase() == NODENAME_SPAN && sChlNd.className.toLowerCase().indexOf(CLASSNAME_CAPTION) > -1) {
                    var valueNode = slidesXML.createTextNode(sChlNd.firstChild.nodeValue);
                    slideNode.appendChild(valueNode);
                }
            }

        }
    }
    return slidesXML;
}


function xml2Str(xmlNode) {
    try {
        return (new XMLSerializer()).serializeToString(xmlNode);
    }
    catch (e) {
        try {
            return xmlNode.xml;
        }
        catch (f) {
            trace('xml2Str catch 2 ' + f.description);
        }
    }
    return false;
}


function trace(str) {
    if (!tracing)
        return;
    try {
        opera.postError(str);
    }
    catch (e) {
        try {
            console.log(str);
        }
        catch (f) {
            alert(str);
        }
    }
}

function createXMLDoc(rootnode) {
    var xmlDocument;
    try {
        xmlDocument = document.implementation.createDocument('', rootnode, null);
    }
    catch (e) {
        try {
            xmlDocument = new ActiveXObject("MSXML2.DOMDocument.3.0");
            var root = xmlDocument.createElement(rootnode);
            xmlDocument.documentElement = root;
        }
        catch (f) {
            trace('catch window.ActiveXObject f ' + f.description);
        }
    }
    return xmlDocument;
}