﻿
var page_command;

function PageAction() {
    this.execute = false;
    this.command = null;
    this.url = null;
}

function courselisting_init() {
    page_command = new PageAction();
    if (document.getElementById("sel-school")) {
        //document.getElementById("sel-school").onchange = load_school_info();
    }

    check_action();
}

function check_action() {

    if (page_command.execute) {

        execute_request(page_command.url, page_command.command);
        page_command.execute = false;
    }
    setTimeout("check_action()", 800);
}

function submit_request(url, command) {
    //alert(command);
    page_command.url = url;
    page_command.command = command;
    page_command.execute = true;
}

function execute_request(url, command) {

    var req = null;
    var iframe = null;
    var xml_request = document.getElementById("xmlrequest");
    xml_request.innerHTML = "";
    xml_request.style.display = "none";

    if (window.XMLHttpRequest) {
        req = new XMLHttpRequest();     // Modern browsers
    }
    else
        if (window.ActiveXObject) {
        req = new ActiveXObject("Microsoft.XMLHTTP");    // Internet Explorer
    } else {
        xml_request.innerHTML = "<div id=\"flash\" class=\"error\"><p>You must have ActiveX enabled.</p></div>";
        xml_request.style.display = "block";
    }

    if (req != null) {

        req.onreadystatechange = function() {
            if (req.readyState == 4) {

                if (req.status == 200) {

                    switch (command) {
                        case 'load_depts':
                            process_depts(req);
                            break;
                        case 'load_courses':
                            process_courses(req);
                            break;
                        case 'load_sections':
                            process_sections(req);
                            break;
                        case 'load_section_request':
                            process_section_request(req);
                            break;
                        case 'load_section_request_post_captcha':
                            process_section_request(req);
                            break;
                        case 'load_campuses':
                            process_campuses(req);
                            break;
                        case 'load_isbn_search':
                            process_isbn_search(req);
                            break;
                        case 'load_keyword_search':
                            process_isbn_search(req);
                            break;
                        case 'init_amz_prices':
                            process_amz_prices(req);
                            break;
                        case 'load_sellback_search':
                            process_sellback_search(req);
                            break;
                        case 'init_sellback_comp_prices':
                            process_sellback_comp_prices(req);
                            break;
                        case 'init_buy_comp_prices':
                            process_buy_comp_prices(req);
                            break;
                    }
                }
                else {

                    xml_request.innerHTML = "<div id=\"flash\" class=\"error\"><p>There has been an error processing your request.</p></div>";
                    xml_request.style.display = "block";
                }
            }
        };

        if (document.getElementById("debug_xml")) {
            xml_request.innerHTML = url;
            xml_request.style.display = "block";
        }
        var t = new Date().getTime();
        req.open("GET", url + "&t=" + t, true);
        req.send(null);
    }
}

function init_sellback_prices() {
    var tag = document.getElementById("DisplayHeader");

    var oldHeader = tag.innerHTML;

    tag.innerHTML = "Calculating Total...";
    
    var inputs = document.getElementsByTagName("input");

    var total = 0;
    for (i = 0; i < inputs.length; i++) {

        if (inputs[i].type == "checkbox") {

            if (inputs[i].className == "row_box") {

                if (inputs[i].checked) {
                    var price = inputs[i].value;

                    total += parseFloat(price);
                }
            }
        }
    }

    var totalTag = document.getElementById("total");
    totalTag.innerHTML = formatCurrency(parseFloat(total));
    
    tag.innerHTML = oldHeader;
}

function init_buy_comp_prices() {
    var inputs = document.getElementsByTagName("input");

    var isbnList = "";

    for (i = 0; i < inputs.length; i++) {

        if (inputs[i].type == "checkbox") {

            if (inputs[i].className == "row_box") {

                var isbn = inputs[i].name;
                //strip off the other stuff
                isbn = isbn.toString().replace("RowCheckBox[", "");
                isbn = isbn.toString().substring(0, isbn.toString().length - 1);

                isbnList += isbn + ",";
            }
        }
    }

    url = "/Misc/buy_comp_price_xml.aspx?isbns=" + isbnList.substring(0, isbnList.length - 1);
    
    submit_request(url, "init_buy_comp_prices");
}

function init_sellback_comp_prices() {
    var inputs = document.getElementsByTagName("input");

    var isbnList = "";
    
    for (i = 0; i < inputs.length; i++) {

        if (inputs[i].type == "checkbox") {

            if (inputs[i].className == "row_box") {

                var isbn = inputs[i].name;
                //strip off the other stuff
                isbn = isbn.toString().replace("RowCheckBox[", "");
                isbn = isbn.toString().substring(0, isbn.toString().length - 1);

                isbnList += isbn + ",";
            }
        }
    }

    url = "/Misc/sellback_comp_price_xml.aspx?isbns=" + isbnList.substring(0, isbnList.length - 1);
    
    submit_request(url, "init_sellback_comp_prices");
}

function init_amz_prices() {
    //var tag = document.getElementById("compare-list");
    var tag = document.getElementById("compare-whole-inner");
    
    var isbnList = "";

    var inputs = document.getElementsByTagName("input");

    var bbPrice = 0;
    var amzPrice = 0;
    var cnt = 0;
    var amzCnt = 0;
    
    for (i = 0; i < inputs.length; i++) {

        if (inputs[i].type == "checkbox") {

            if (inputs[i].className == "row_box") {

                if (inputs[i].checked) {
                    cnt++;
                    var isbn = inputs[i].name;
                    //strip off the other stuff
                    isbn = isbn.toString().replace("RowCheckBox[", "");
                    isbn = isbn.toString().substring(0, isbn.toString().length - 1);
                    
                    //grap the bookleberry price for the selection
                    var bbUsed = document.getElementById("UsedRadioButton[" + isbn + "]");
                    var bbNew = document.getElementById("NewRadioButton[" + isbn + "]");

                    var amzUsed = document.getElementById("PriceAmzUsed[" + isbn + "]");
                    var amzNew = document.getElementById("PriceAmzNew[" + isbn + "]");
                    
                    if (bbUsed.checked) {
                        bbPrice += parseFloat(document.getElementById("UsedPrice[" + isbn + "]").innerHTML.toString().replace("$", ""));

                        if (parseFloat(bbPrice) < 25 ) {
                            bbPrice += parseFloat(3.99);
                        }

                        if (amzUsed != "loading...") {
                            if (amzUsed.innerHTML.toString().indexOf("N/A") < 0) {
                                amzPrice += parseFloat(amzUsed.innerHTML.toString().replace("$", ""));
                                amzCnt++;
                            }
                        }
                    }
                    else if (bbNew.checked) {
                        bbPrice += parseFloat(document.getElementById("NewPrice[" + isbn + "]").innerHTML.toString().replace("$", ""));

                        if (parseFloat(bbPrice) < 25) {
                            bbPrice += parseFloat(3.99);
                        }

                        if (amzNew != "loading...") {
                            if (amzNew.innerHTML.toString().indexOf("N/A") < 0) {
                                amzPrice += parseFloat(amzNew.innerHTML.toString().replace("$", ""));
                                amzCnt++;
                            }
                        }    
                    }
                }
            }
        }
    }
    
    //tag.innerHTML = "<dt class=\"bb title\">Bookleberry</dt><dt class=\"other title\">Amazon <small>(avg. price)</small></dt><dd class=\"bb price\">" + cnt + " Books + Shipping = <strong>" + formatCurrency(bbPrice) + "</strong></dd><dd class=\"other price\">" + cnt + " Books + Shipping = " + formatCurrency(amzPrice) + "</dd>";
    var str = ""
    str = "<div style=\"float: left; display: block; width: 45%;\">";
    str += "<span id=\"bb-title\">Bookleberry</span><br />";
    str += "<span id=\"bb-total\">" + cnt + " Books + Shipping = <strong>" + formatCurrency(bbPrice) + "</strong></span>";
    str += "</div>";
    str += "<div style=\"float: left; display: block; width: 10%; height: 5px;\"></div>";
    str += "<div style=\"float: left; display: block; width: 45%;\">";
    str += "<span id=\"other-title\">Amazon <small>(avg. price)</small></span><br />";
    str += "<span id=\"other-total\">" + amzCnt + " Books + Shipping = " + formatCurrency(amzPrice) + "</span>";
    str += "</div>";
    str += "<div style=\"clear:both;\"></div>";
    tag.innerHTML = str;

    //update the result counts
    //var totalResultTag = document.getElementById("TotalResultCount");
    //totalResultTag.innerHTML = cnt;

    //totalResultTag = document.getElementById("TotalResultCount2");
    //totalResultTag.innerHTML = "(" + cnt + ")";
    
    //url = "/Misc/amazon_price_xml.aspx?isbns=" + isbnList.substring(0, isbnList.length - 1);

    //submit_request(url, "init_amz_prices");
}

function load_campuses() {
    
    //populate the campuses from selected state
    var state = document.getElementById("sel-state").options[document.getElementById("sel-state").selectedIndex].value;
    var school = document.getElementById("sel-school");

    school.options.length = 0;
    school.options[0] = new Option("Loading...");

    url = "/Misc/campuses_xml.aspx?state=" + state;

    submit_request(url, "load_campuses");
}

function load_depts() {
    var term = document.getElementById("sel-term");
    var depts = document.getElementById("sel-dept");
    var sects = document.getElementById("sel-section");
    var course = document.getElementById("sel-course");
    var siteId = document.getElementById("site-id");
    
    if (term.value != -1) {

        term = term.value.toString().substring(term.value.toString().lastIndexOf("-") + 1);

        depts.options.length = 0;
        depts.options[0] = new Option("Loading...");

        sects.options.length = 0;
        sects.disabled = true;
        course.options.length = 0;
        course.disabled = true;

        url = "/Misc/depts_xml.aspx?term=" + term + "&siteId=" + siteId.value;

        submit_request(url, "load_depts");
    }
    else {
        depts.disabled = true;
        sects.disabled = true;
        course.disabled = true;
    }
}

function load_courses() {
    var term = document.getElementById("sel-term");
    var course = document.getElementById("sel-course");
    var siteId = document.getElementById("site-id");
    var sects = document.getElementById("sel-section");
    var dept = document.getElementById("sel-dept");

    if (dept.value.toString().indexOf("Please") < 0) {

        term = term.value.toString().substring(term.value.toString().lastIndexOf("-") + 1);

        course.options.length = 0;
        course.options[0] = new Option("Loading...");

        sects.options.length = 0;
        sects.disabled = true;

        url = "/Misc/courses_xml.aspx?term=" + term + "&siteId=" + siteId.value + "&dept=" + dept.value;

        submit_request(url, "load_courses");
    }
    else {
        course.disabled = true;
    }
}

function load_sections() {
    var term = document.getElementById("sel-term");
    var section = document.getElementById("sel-section");
    var siteId = document.getElementById("site-id");
    var dept = document.getElementById("sel-dept");
    var course = document.getElementById("sel-course");

    if (course.value.toString().indexOf("Please") < 0) {

        term = term.value.toString().substring(term.value.toString().lastIndexOf("-") + 1);

        section.options.length = 0;
        section.options[0] = new Option("Loading...");

        url = "/Misc/sections_xml.aspx?term=" + term + "&siteId=" + siteId.value + "&dept=" + dept.value + "&course=" + course.value;

        submit_request(url, "load_sections");
    }
    else {
        section.disabled = true;
    }
}

function load_section_request() {
    var section = document.getElementById("sel-section").value;
    var siteId = document.getElementById("site-id").value;
    var dept = document.getElementById("sel-dept");
    var course = document.getElementById("sel-course");
    var products = document.getElementById("isbn-search-results");

    


    if (section.toString().indexOf("Please") < 0) {

        products.style.display = "block";
        products.innerHTML = "<br /><h3>Loading textbooks...<img src=\"/Content/Images/loading_small.gif\" id=\"LoadImage\" height=\"16\" width=\"16\" alt=\"loading\" /></h3>";

        url = "/Misc/by_course_textbooks_xml.aspx?&siteId=" + siteId + "&section=" + section;

        submit_request(url, "load_section_request");
    }
}

function load_section_request_post_captcha(siteId, section) {
    var products = document.getElementById("isbn-search-results");

    products.style.display = "block";
    products.innerHTML = "<br /><h3>Loading textbooks...<img src=\"/Content/Images/loading_small.gif\" id=\"LoadImage\" height=\"16\" width=\"16\" alt=\"loading\" /></h3>";

    url = "/Misc/by_course_textbooks_xml.aspx?&siteId=" + siteId + "&section=" + section;
    
    submit_request(url, "load_section_request_post_captcha");
}

function load_isbn_search() {
    var isbns = document.getElementById("current-search");
    var page = document.getElementById("hdnPage").value;
    var products = document.getElementById("isbn-search-results");
    
    products.style.display = "block";
    products.innerHTML = "<br /><h3>Loading textbooks...<img src=\"/Content/Images/loading_small.gif\" id=\"LoadImage\" height=\"16\" width=\"16\" alt=\"loading\" /></h3>";

    var encode = urlencode(isbns.value);

    if (page == null || page == "") {
        page = 1;
    }
    
    url = "/Misc/by_isbn_textbooks_xml.aspx?&type=isbn&isbn=" + encode + "&page=" + page;
    
    submit_request(url, "load_isbn_search");
}

function load_sellback_search() {
    var isbns = document.getElementById("current-search");
    var products = document.getElementById("isbn-search-results");
    var page = document.getElementById("hdnPage").value;

    products.style.display = "block";
    products.innerHTML = "<br /><h3>Checking prices...<img src=\"/Content/Images/loading_small.gif\" id=\"LoadImage\" height=\"16\" width=\"16\" alt=\"loading\" /></h3>";

    var encode = urlencode(isbns.value);

    if (page == null || page == "") {
        page = 1;
    }

    url = "/Misc/by_isbn_sellbooks_xml.aspx?&type=isbn&isbn=" + encode + "&page=" + page;
    
    submit_request(url, "load_sellback_search");
}

function load_keyword_search() {
    var keywords = document.getElementById("current-search");
    var products = document.getElementById("isbn-search-results");
    var page = document.getElementById("hdnPage");

    products.style.display = "block";
    products.innerHTML = "<br /><h3>Loading textbooks...<img src=\"/Content/Images/loading_small.gif\" id=\"LoadImage\" height=\"16\" width=\"16\" alt=\"loading\" /></h3>";

    url = "/Misc/by_isbn_textbooks_xml.aspx?&type=keyword&keyword=" + keywords.value + "&page=" + page.value;
    
    submit_request(url, "load_keyword_search");
}

function process_campuses(req) {
    
    var doc = req.responseXML;   // assign the Xml file to a var
    var elements = doc.getElementsByTagName('Campus');   // read the first element with a dom's method
    var schools = document.getElementById("sel-school");

    schools.options.length = 0;
    for (i = 0; i < elements.length; i++) {

        var element = elements[i];
        schools.options[i] = new Option(element.getAttribute("Name"), element.getAttribute("Id"));
    }
    
    schools.disabled = false;
}

function process_depts(req) {
    
    var doc = req.responseXML;   // assign the Xml file to a var
    var elements = doc.getElementsByTagName('Department');   // read the first element with a dom's method
    var dept = document.getElementById("sel-dept");

    dept.options.length = 0;
    dept.options[0] = new Option("- Please make a selection -");
    for (i = 0; i < elements.length; i++) {

        var element = elements[i];
        var optionName = element.getAttribute("Abbrev") + ' - ' + element.getAttribute("Name");
        dept.options[i + 1] = new Option(optionName, element.getAttribute("Id"));
    }

    dept.disabled = false;
}

function process_courses(req) {

    var doc = req.responseXML;   // assign the Xml file to a var
    var elements = doc.getElementsByTagName('Course');   // read the first element with a dom's method
    var course = document.getElementById("sel-course");

    course.options.length = 0;
    course.options[0] = new Option("- Please make a selection -");
    for (i = 0; i < elements.length; i++) {

        var element = elements[i];
        course.options[i + 1] = new Option(element.getAttribute("Desc"), element.getAttribute("Id"));
    }

    course.disabled = false;
}

function process_sections(req) {

    var doc = req.responseXML;   // assign the Xml file to a var
    var elements = doc.getElementsByTagName('Section');   // read the first element with a dom's method
    var section = document.getElementById("sel-section");

    section.options.length = 0;
    section.options[0] = new Option("- Please make a selection -");
    for (i = 0; i < elements.length; i++) {

        var element = elements[i];
        section.options[i + 1] = new Option(element.getAttribute("Desc"), element.getAttribute("Id"));
    }

    section.disabled = false;
}

function process_section_request(req) {
    var doc = req.responseText;   // assign the Xml file to a var

    document.getElementById("isbn-search-results").innerHTML = doc;

    //do this since we aren't displaying amz prices
    var loadImg = document.getElementById("LoadImage");

    if (loadImg != null) {

        loadImg.style.display = "none";
    }

    //init_buy_comp_prices();
}

function process_isbn_search(req) {
    var doc = req.responseText;   // assign the Xml file to a var

    document.getElementById("isbn-search-results").innerHTML = doc;

    //do this since we aren't displaying amz prices
    var loadImg = document.getElementById("LoadImage");

    if (loadImg != null) {

        loadImg.style.display = "none";
    }

    //init_buy_comp_prices();
    select_all("chk - selectall");
}

function process_sellback_search(req) {
    var doc = req.responseText;   // assign the Xml file to a var

    document.getElementById("isbn-search-results").innerHTML = doc;


    var check = document.getElementById("chk-selectall");
    
    if (check != null) {
        check.checked = true;
        select_all(document.getElementById("chk-selectall"));
        init_sellback_comp_prices();
    }
}

function process_amz_prices(req) {
    var doc = req.responseText;

    document.getElementById("compare-list").innerHTML = doc;
}

function process_sellback_comp_prices(req) {
    var doc = req.responseXML;

    var priceElements = doc.getElementsByTagName("Root");

    for (i = 0; i < priceElements.length; i++) {

        var element = priceElements[i];

        for (j = 0; j < element.childNodes.length; j++) {
            
            var isbn = element.childNodes[j].getAttribute("ISBN");
            var price = element.childNodes[j].getAttribute("AvgPrice");

            var priceTag = document.getElementById("Price[" + isbn + "]");

            priceTag.innerHTML = formatCurrency(price);
        }
    }

    var loadImg = document.getElementById("LoadImage").style.display = "none";

    var h2 = document.getElementById("DisplayHeader");
    //h2.innerHTML = h2.innerHTML.toString().replace("(loading prices...)", "");
    h2.innerHTML = h2.innerHTML.toString().substring(0, h2.innerHTML.toString().indexOf("("));
    h2.innerHTML = h2.innerHTML.toString() + "(s)";
}

function process_buy_comp_prices(req) {
    var doc = req.responseXML;
    
    var priceElements = doc.getElementsByTagName("Root");

    for (i = 0; i < priceElements.length; i++) {

        var element = priceElements[i];

        for (j = 0; j < element.childNodes.length; j++) {

            var isbn = element.childNodes[j].getAttribute("ISBN");
            var amzPrice = element.childNodes[j].getAttribute("AmzUsed");
            var amzPrice2 = element.childNodes[j].getAttribute("AmzNew");

            var amz = amzPrice;
            var amz2 = amzPrice2;

            if (amzPrice != "N/A") {
                amz = formatCurrency(parseFloat(amzPrice));
            }

            if (amzPrice2 != "N/A") {
                amz2 = formatCurrency(parseFloat(amzPrice2));
            }

            var amzTag = document.getElementById("AmzPriceUsed[" + isbn + "]");
            var curHtml = amzTag.innerHTML;

            if (amzPrice != "N/A") {
                curHtml = curHtml.replace(">loading...<", ">" + formatCurrency(amz) + "<");
            }
            else {
                curHtml = curHtml.replace(">loading...<", ">N/A<");
            }

            amzTag.innerHTML = curHtml;

            var amzTag2 = document.getElementById("AmzPriceNew[" + isbn + "]");
            var curHtml2 = amzTag2.innerHTML;

            if (amzPrice2 != "N/A") {
                curHtml2 = curHtml2.replace(">loading...<", ">" + formatCurrency(amz2) + "<");
            }
            else {
                curHtml2 = curHtml2.replace(">loading...<", ">N/A<");
            }

            amzTag2.innerHTML = curHtml2;
        }
    }

    //todo:
    //iterate over remaining rows with no check box and replace loading... with n/a

    var loadImg = document.getElementById("LoadImage");
    
    if (loadImg != null) {
        
        loadImg.style.display = "none";
    }

    if (document.location.href.toString().indexOf("Course") < 0) {
        var h2 = document.getElementById("DisplayHeader");
        
        if (h2 != null) {
            //h2.innerHTML = h2.innerHTML.toString().replace("(loading prices...)", "");
            h2.innerHTML = h2.innerHTML.toString().substring(0, h2.innerHTML.toString().indexOf("("));
            h2.innerHTML = h2.innerHTML.toString() + "(s)";
        }
    }

    if (document.location.href.toString().indexOf("Keyword") < 0) {

        if (document.getElementById("chk-selectall") != null) {
            document.getElementById("chk-selectall").checked = true;
            select_all(document.getElementById("chk-selectall"));
        }
    }
}

function formatCurrency(num) {
    num = num.toString().replace(/\$|\,/g, '');
    if (isNaN(num))
        num = "0";
    sign = (num == (num = Math.abs(num)));
    num = Math.floor(num * 100 + 0.50000000001);
    cents = num % 100;
    num = Math.floor(num / 100).toString();
    if (cents < 10)
        cents = "0" + cents;
    for (var i = 0; i < Math.floor((num.length - (1 + i)) / 3); i++)
        num = num.substring(0, num.length - (4 * i + 3)) + ',' + num.substring(num.length - (4 * i + 3));
        
    return (((sign) ? '' : '-') + '$' + num + '.' + cents);
}

function urlencode(str) {
    str = escape(str);
    str = str.replace('+', '%2B');
    str = str.replace('%20', '+');
    str = str.replace('*', '%2A');
    str = str.replace('/', '%2F');
    str = str.replace('@', '%40');
    return str;
}

function urldecode(str) {
    str = str.replace('+', ' ');
    str = unescape(str);
    return str;
}