var visibleRow

//creates the HTML for the page
function loadPage(output) {
    var me = document.createElement('div'), obj = document.createElement('div'), select = document.createElement('select'), txt, com = document.createElement('div'), ddl = document.createElement("div")
    if (hasScenarios) {
        try {
            try { //Internet Explorer
                xmlDoc = new ActiveXObject('Microsoft.XMLDOM');
                xmlDoc.async = false;
                xmlDoc.load(xmlFeed);
            }
            catch (err) {
                xmlDoc = document.implementation.createDocument('', '', null);
                xmlDoc.async = false;
                xmlDoc.load(xmlFeed);
            }
        } catch (err) {
            try {
                var xmlhttp = new window.XMLHttpRequest();
                xmlhttp.open('GET', xmlFeed, false);
                xmlhttp.send(null);
                xmlDoc = xmlhttp.responseXML.documentElement;
            } catch (err) {
                alert('error: Todays Rates, ' + err.message);
                return;
            }
        }
    } else {
        try {
            try { //Internet Explorer
                xmlDoc = new ActiveXObject('Microsoft.XMLDOM');
            }
            catch (err) {
                xmlDoc = document.implementation.createDocument('', '', null);
            }
        } catch (err) {
                alert('error: Todays Rates, ' + err.message);
        }
    }
    
    me.id = "todaysRates"
    output.appendChild(me)
    obj.className = "heading"
    obj.innerHTML = "Today's Rates"
    me.appendChild(obj)
    obj = document.createElement("div")
    obj.className = "time"
    obj.appendChild(document.createTextNode(updateTime))
    me.appendChild(obj)
    select.id = "selection"
    select.onchange = changeTerm
    ddl.id = "dropdown"
    ddl.appendChild(select)
    me.appendChild(ddl)
    obj = document.createElement("div")
    obj.id = "data"
    me.appendChild(obj)
    com.className = "notes"
    me.appendChild(com)
    var progRow, dataRow, dataEle, option, alt = false, s, len = xmlDoc.getElementsByTagName("Scenarios").length, inDB, dbData, comRow
    //if display style is 'detailed'
    if (ddl.offsetHeight > 0) {
        for (var i = 0; i < len; i++) {
            var j
            alt = false
            s = gXS(xmlDoc, i)
            inDB = isInDB(s)
            if (inDB)
                dbData = gDBData(gXN(s))
            if (!inDB || dbData != null) {
                progRow = document.createElement("div")
                comRow = document.createElement("div")
                progRow.id = "p_" + gXN(s).replace(/[^a-z0-9]/gi, "")
                if (!visibleRow)
                    visibleRow = gXN(s).replace(/[^a-z0-9]/gi, "")
                else {
                    progRow.style.display = "none"
                    comRow.style.display = 'none'
                }
                option = document.createElement("option")
                option.appendChild(document.createTextNode(gXN(s)))
                select.appendChild(option)
                comRow.id = "n_" + gXN(s).replace(/[^a-z0-9]/gi, "")
                comRow.innerHTML = gXC(s)
                com.appendChild(comRow)
                obj.appendChild(progRow)
                createTBHeading(progRow)
                for (var k = 0, dl = (inDB ? dbData.length / 7 : s.getElementsByTagName("DataRows").length); k < dl; k++) {
                    j++
                    if (inDB) {
                        a = gDBDR(dbData, k)
                        if (dbData[k * 7] == "&nbsp;")
                            break;
                    }
                    else
                        a = gXDR(s, k)
                    dataRow = document.createElement("div")
                    createTBRow(progRow, dataRow, alt, a, gXN(s))
                    alt = !alt
                }
            }
        }
    }
    //else if display style is 'condensed'
    else {
        progRow = document.createElement("div")
        progRow.className = "progRow"
        obj.appendChild(progRow)
        createTBHeading(progRow)
        for (var i = 0; i < len; i++) {
            s = gXS(xmlDoc, i)
            inDB = isInDB(s)
            if (inDB)
                dbData = gDBData(gXN(s))
            if (!inDB || dbData != null) {
                dataRow = document.createElement("div")
                comRow = document.createElement("div")
                comRow.id = "n_" + gXN(s).replace(/[^a-z0-9]/gi, "")
                comRow.innerHTML = gXC(s)
                com.appendChild(comRow)
                dataRow.id = "p_" + gXN(s).replace(/[^a-z0-9]/gi, "")
                if (inDB) {
                    a = gDBDR(dbData, 0)
                }
                else
                    a = gXDR(s, 0)
                createTBRow(progRow, dataRow, alt, a, gXN(s))
                alt = !alt
            }
        }
    }
    obj = document.createElement("div")
    obj.className = "footer"
    me.appendChild(obj)
}
function createTBHeading(progRow) {
    dataRow = document.createElement("div")
    dataRow.className = "dataRowH"
    dataEle = document.createElement("div")
    dataEle.className = "term colH"
    dataEle.appendChild(document.createTextNode(unescape(term)))
    dataRow.appendChild(dataEle)
    dataEle = document.createElement("div")
    dataEle.className = "rate colH"
    dataEle.appendChild(document.createTextNode(unescape(rates)))
    dataRow.appendChild(dataEle)
    dataEle = document.createElement("div")
    dataEle.className = "apr colH"
    dataEle.appendChild(document.createTextNode(unescape(apr)))
    dataRow.appendChild(dataEle)
    dataEle = document.createElement("div")
    dataEle.className = "point colH"
    dataEle.appendChild(document.createTextNode(unescape(points)))
    dataRow.appendChild(dataEle)
    dataEle = document.createElement("div")
    dataEle.className = "numpay colH"
    dataEle.appendChild(document.createTextNode(unescape(number)))
    dataRow.appendChild(dataEle)
    dataEle = document.createElement("div")
    dataEle.className = "payamnt colH"
    dataEle.appendChild(document.createTextNode(unescape(payment)))
    dataRow.appendChild(dataEle)
    progRow.className = "progRow"
	if(typeof fees != "undefined"){
		dataEle = document.createElement("div")
		dataEle.className = "fees colH"
		dataEle.appendChild(document.createTextNode(unescape(fees)))
		dataRow.appendChild(dataEle)
		dataEle = document.createElement("div")
		dataEle.className = "lenderName colH"
		dataEle.appendChild(document.createTextNode(unescape(lenderName)))
		dataRow.appendChild(dataEle)
	}
    progRow.appendChild(dataRow)
}
function createTBRow(progRow, dataRow, alt, a, name) {
    dataRow.className = "dataRow"
    if (alt) dataRow.className += " alt"
    dataEle = document.createElement("div")
    dataEle.className = "term"
    dataEle.appendChild(document.createTextNode(name))
    dataRow.appendChild(dataEle)
    dataEle = document.createElement("div")
    dataEle.className = "rate"
    dataEle.appendChild(document.createTextNode(a['Rate']))
    dataRow.appendChild(dataEle)
    dataEle = document.createElement("div")
    dataEle.className = "apr"
    dataEle.appendChild(document.createTextNode(a['APR']))
    dataRow.appendChild(dataEle)
    dataEle = document.createElement("div")
    dataEle.className = "point"
    dataEle.appendChild(document.createTextNode(a['Points']))
    dataRow.appendChild(dataEle)
    dataEle = document.createElement("div")
    dataEle.className = "numpay"
    dataEle.appendChild(document.createTextNode(a['Number']))
    dataRow.appendChild(dataEle)
    dataEle = document.createElement("div")
    dataEle.className = "payamnt"
    dataEle.appendChild(document.createTextNode(a['Payment']))
    dataRow.appendChild(dataEle)
	if(typeof fees != "undefined"){
		dataEle = document.createElement("div")
		dataEle.className = "fees"
		dataEle.appendChild(document.createTextNode(a['Fees']))
		dataRow.appendChild(dataEle)
		dataEle = document.createElement("div")
		dataEle.className = "lenderName"
		dataEle.appendChild(document.createTextNode(a['LenderName']))
		dataRow.appendChild(dataEle)
	}
    progRow.appendChild(dataRow)
}
function gXS(x, i) {
    return x.getElementsByTagName("Scenarios")[i]
}
function gXN(s) {
	try {
		return s.getElementsByTagName("DisplayName")[0].childNodes[0].nodeValue
	} catch(err) { return '' }
}
function gXC(s) {
    try {
        return s.getElementsByTagName("Comments")[0].childNodes[0].nodeValue.replace(/\n/g,'<br />')
    } catch (err) {
        return ''
    }
}
function gXDR(s, i) {
    var a = new Array(), dr = s.getElementsByTagName('DataRows')[i]
    a['Rate'] = (dr.getElementsByTagName('Rate')[0].childNodes[0] == null?'':dr.getElementsByTagName('Rate')[0].childNodes[0].nodeValue)
    a['APR'] = (dr.getElementsByTagName('APR')[0].childNodes[0] == null?'':dr.getElementsByTagName('APR')[0].childNodes[0].nodeValue)
    a['Points'] = (dr.getElementsByTagName('Points')[0].childNodes[0] == null?'':dr.getElementsByTagName('Points')[0].childNodes[0].nodeValue)
    a['Number'] = (dr.getElementsByTagName('Number')[0].childNodes[0] == null?'':dr.getElementsByTagName('Number')[0].childNodes[0].nodeValue)
    a['Payment'] = (dr.getElementsByTagName('Payment')[0].childNodes[0] == null?'':dr.getElementsByTagName('Payment')[0].childNodes[0].nodeValue)
	if(dr.getElementsByTagName('Fees').length>0){
		a['Fees'] = (dr.getElementsByTagName('Fees')[0].childNodes[0] == null?'':dr.getElementsByTagName('Fees')[0].childNodes[0].nodeValue)
		a['LenderName'] = (dr.getElementsByTagName('LenderName')[0].childNodes[0] == null?'':dr.getElementsByTagName('LenderName')[0].childNodes[0].nodeValue)
	} else{
		a['Fees'] =  ''
		a['LenderName'] = ''
	}
    return a
}
function isInDB(s) {
    return s.getElementsByTagName("InDatabase")[0].childNodes[0].nodeValue == 'true'
}
function gDBData(sn) {
    for (var i = 0; i < data.length; i++)
        if (data[i].program == sn)
            return data[i].data
}
function gDBDR(dbData, k) {
    var a = new Array()
    k = k * 7
    a['Rate'] = dbData[k]
    a['APR'] = dbData[k+1]
    a['Points'] = dbData[k+2]
    a['Number'] = dbData[k+3]
    a['Payment'] = dbData[k + 4]
	a['Fees'] = dbData[k + 5]
	a['LenderName'] = dbData[k + 6]
    return a
}
function changeTerm() {
    id = this.options[this.selectedIndex].text.replace(/[^a-z0-9]/gi, '')
    document.getElementById('p_' + visibleRow).style.display = 'none'
    document.getElementById('n_' + visibleRow).style.display = 'none'
    document.getElementById('p_' + id).style.display = ''
    document.getElementById('n_' + id).style.display = ''
    visibleRow = id
}
function applyTest(rows) {
    if (visibleRow) {
        var v = document.getElementById('p_' + visibleRow)
        var d = v.innerHTML
        var row = '<div class="dataRow">' + v.childNodes[v.childNodes.length-1].innerHTML + '</div>'
        var str = v.innerHTML
        for (var i = v.childNodes.length-1; i < rows; i++)
            str += row
        v.innerHTML = str
        return d
    }
}
function removeTest(d) {
    if(visibleRow) document.getElementById('p_' + visibleRow).innerHTML = d
}