﻿function initColumns() {
    jQuery(document).ready(function() {
        getXmlForCategory();
        var defaultText = "<div class='search-widget-instructions'>Select a category<br/>on the left to continue.</div>";
        document.getElementById("columnTitle2").innerHTML = "Product Sub-Categories";
        document.getElementById("columnTitle1").innerHTML = "Product Categories";
        jQuery("#menuColumn3").html(defaultText);
        jQuery("#menuColumn2").html(defaultText);
    });
}
function addItem(columnId, type, xmlNode, isActive) {
    switch (type) {
    case "category":
        if(isActive){
            jQuery("#menuColumn" + columnId).append("<li><a class='active' href=\"Javascript:drillDown(" + jQuery(xmlNode).attr("ID") + "," + columnId + ",'" + stripper(jQuery(xmlNode).attr("Text")) + "');\">" + jQuery(xmlNode).attr("Text") + "</a></li>");
        }
        else{
            jQuery("#menuColumn" + columnId).append("<li><a href=\"Javascript:drillDown(" + jQuery(xmlNode).attr("ID") + "," + columnId + ",'" + stripper(jQuery(xmlNode).attr("Text")) + "');\">" + jQuery(xmlNode).attr("Text") + "</a></li>");
        }        
        break;
    case "product":
        jQuery("#menuColumn" + columnId).append("<li><a class='widgetProduct' href=\"Javascript:showInfo('" + stripper(jQuery(xmlNode).attr("Text")) + "', '" + jQuery(xmlNode).attr("Sku") + "', '" + jQuery(xmlNode).attr("ImageUrl") + "', '" + jQuery(xmlNode).attr("NavigateUrl") + "', '" + stripper(jQuery(xmlNode).attr("Summary")) + "');\">" + jQuery(xmlNode).attr("Text") + "</a></li>");
        break;
    default:
        break;
    }
}
function drillDown(categoryId, columnId, name) {
    if (categoryId == null) categoryId = 14787;
    if (columnId == null) columnId = 1;
    var category2 = document.getElementById("hfCategory2").value;
    var category1 = document.getElementById("hfCategory1").value;
    if (category2 != "" && columnId == 2) {
        document.getElementById("hfCategory1").value = category2;
        getXmlForCategory(category2, 1, categoryId);
        if(document.getElementById("hfCategory1").value != 14787){
            document.getElementById("columnTitle1").innerHTML = charLimit(document.getElementById("columnTitle2").innerHTML)
        }
    }
    else{
        getXmlForCategory(category1, 1, categoryId)
    }
    document.getElementById("columnTitle2").innerHTML = charLimit(name);//+" Sub-Categories";
    getXmlForCategory(categoryId, 2);
}
function getXmlForCategory(categoryId, columnId, currentId) {
    if (categoryId == null) categoryId = 14787;
    if (columnId == null) columnId = 1;
    //if (currentId != null)alert(currentId);
    jQuery.get("/ChromXml.ashx?CategoryId=" + categoryId, {},
    function(xml) {
        document.getElementById("menuColumn" + columnId).innerHTML = "";
        document.getElementById("hfCategory" + columnId).value = categoryId;
        if(columnId > 1)jQuery("#menuColumn" + columnId).hide();
        jQuery('Node', xml).each(function(i) {
            var type = jQuery(this).attr("type");
            var id = jQuery(this).attr("ID");
            if(id == currentId){
                addItem(columnId, type, this, true);
            }
            else{
                addItem(columnId, type, this, false);
            }            
        });
        if (jQuery.trim(document.getElementById("menuColumn" + columnId).innerHTML).length == 0) {
            var nullText = "<div class='search-widget-empty'>The category you have selected is empty.</div>";
            if (categoryId > 1) jQuery("#menuColumn" + columnId).append("<ul><li><a href='Javascript:initColumns()'>Return To Top Level</a></li></ul>");
            jQuery("#menuColumn" + columnId).append(nullText);            
        }
        else {
            if (document.getElementById("hfCategory1").value != 14787) jQuery("#menuColumn" + columnId).prepend("<li><a class='widgetReturn' href='Javascript:initColumns()'>Return To Top Level</a></li>");
            jQuery("#menuColumn" + columnId).html("<ul>" + document.getElementById("menuColumn" + columnId).innerHTML + "</ul>");
        }
        if(columnId > 1)jQuery("#menuColumn" + columnId).slideDown(500);
    });
}
function showInfo(name, sku, imageUrl, navUrl, summary) {
    var column = document.getElementById("menuColumn3")
    if (column) {
        document.getElementById("menuColumn3").innerHTML = "";
        jQuery("#menuColumn3").hide();
        jQuery("#menuColumn3").append("<h4>" + name + "</h4>");
        jQuery("#menuColumn3").append("<h5>Product Id:<a href='" + navUrl + "'>" + sku + "</a></h5>");        
        if (imageUrl.length > 0){
            jQuery("#menuColumn3").append("<a href='" + navUrl + "'><img class='productImage' src='" + imageUrl + "' alt='" + name + "' /></a>");
        }
        jQuery("#menuColumn3").append("<p>" + summary + "</p>");
        jQuery("#menuColumn3").append("<a class='small-button' href='" + navUrl + "'>Details</a>");
        jQuery("#menuColumn3").slideDown(500);
    }
}


function stripper(str) {    
        var escapableChars = ["\\", "'", "\""];
        var totalChars = escapableChars.length;
//        alert("Stripping:\n" + str + "\n" + "Total Chars:" + totalChars);
        for (var i = 0; i < totalChars; i++) {
            var regReplace = new RegExp("\\" + escapableChars[i], 'gi');
//            alert("Replacing:\n" + escapableChars[i]);
            str = str.replace(regReplace, getEntities(escapableChars[i]));
//            alert("Result:\n" + str);
        }
        return str;
    }


    function getEntities(str) {
        var rval = "";
        for (i = 0; i < str.length; i++) {
            var character = str.charCodeAt(i);
            rval += "&amp;#" + character + ";";
        }
        return rval;
    }

    function charLimit(pString) {
        var string = new String(pString);
        if (string.toString().length > 28) {
            return string.substr(0, 25) + "...";
        }
        else {
            return string;
        }
    }

/*
 * (c)2006 Jesse Skinner/Dean Edwards/Matthias Miller/John Resig
 * Special thanks to Dan Webb's domready.js Prototype extension
 * and Simon Willison's addLoadEvent
 *
 * For more info, see:
 * http://www.thefutureoftheweb.com/blog/adddomloadevent
 * http://dean.edwards.name/weblog/2006/06/again/
 * http://www.vivabit.com/bollocks/2006/06/21/a-dom-ready-extension-for-prototype
 * http://simon.incutio.com/archive/2004/05/26/addLoadEvent
 * 
 *
 * To use: call addDOMLoadEvent one or more times with functions, ie:
 *
 *    function something() {
 *       // do something
 *    }
 *    addDOMLoadEvent(something);
 *
 *    addDOMLoadEvent(function() {
 *        // do other stuff
 *    });
 *
 */

addDOMLoadEvent = (function() {
    // create event function stack
    var load_events = [],
    load_timer,
    script,
    done,
    exec,
    old_onload,
    init = function() {
        done = true;

        // kill the timer
        clearInterval(load_timer);

        // execute each function in the stack in the order they were added
        while (exec = load_events.shift())
        exec();

        if (script) script.onreadystatechange = '';
    };

    return function(func) {
        // if the init function was already ran, just run this function now and stop
        if (done) return func();

        if (!load_events[0]) {
            // for Mozilla/Opera9
            if (document.addEventListener) document.addEventListener("DOMContentLoaded", init, false);

            // for Internet Explorer
            /*@cc_on @*/
            /*@if (@_win32)
                document.write("<script id=__ie_onload defer src=//0><\/scr"+"ipt>");
                script = document.getElementById("__ie_onload");
                script.onreadystatechange = function() {
                    if (this.readyState == "complete")
                        init(); // call the onload handler
                };
            /*@end @*/

            // for Safari
            if (/WebKit/i.test(navigator.userAgent)) { // sniff
                load_timer = setInterval(function() {
                    if (/loaded|complete/.test(document.readyState)) init(); // call the onload handler
                },
                10);
            }

            // for other browsers set the window.onload, but also execute the old window.onload
            old_onload = window.onload;
            window.onload = function() {
                init();
                if (old_onload) old_onload();
            };
        }

        load_events.push(func);
    }
})();




function toggleDiv(divid) {
    if (document.getElementById(divid).style.display == 'none') {
        //document.getElementById(divid).style.display = 'block';
        jQuery("#" + divid).slideDown(750, function(){jQuery("#search-frame").fadeIn(250)});   
        document.getElementById('expand-image').src = '/App_Themes/ChromRes/images/collapse.gif';
    } else {
        //document.getElementById(divid).style.display = 'none';
        jQuery("#search-frame").fadeOut(250, function() {jQuery("#" + divid).slideUp()});        
        document.getElementById('expand-image').src = '/App_Themes/ChromRes/images/expand.gif';
    }
}