function collapse(selector_id,list_id)
{
    $("#" + selector_id).click(function(){
       if($("#" + list_id).is(":visible")) {
           $("#" + list_id).hide();
           $("#" + selector_id).children("a").css('background', '#f9f9f9');
           $("#" + selector_id).children("a").hover(function(){
               $(this).css('background', '#eeeeee');
           },
           function(){
               $(this).css('background', '#f9f9f9');
           });
       } else {
           $("#" + list_id).show();
           $("#" + selector_id).children("a").css('background', '#eeeeee');
           $("#" + selector_id).children("a").hover(function(){
               $(this).css('background', '#eeeeee');
           },
           function(){
               $(this).css('background', '#eeeeee');
           });
       }
    });
} 

function collapse_animate(selector_id,list_id,count_id,doc_root)
{
    $("#" + selector_id).click(function(){
        $.post(doc_root + "/ajax_files/left_column_state.php", {menu: selector_id, value: $("#" + list_id + "_1").is(":hidden")}); 
        var foo = $("#" + count_id).html();
        for(i=1;i<=foo;i++) {
            if($("#" + list_id + "_" + i).is(":visible")) {
                $("#" + list_id + "_" + i).fadeOut((100+(100/foo))-i*(100/foo));
                $("#" + selector_id).children("a").css('background', '#f9f9f9');
                $("#" + selector_id).children("a").hover(function(){
                   $(this).css('background', '#eeeeee');
                },
                function(){
                   $(this).css('background', '#f9f9f9');
                });
                if(i == foo && selector_id == 'brands_title'){
                    $("#left_nav_facebook").css('margin-top','-10px')
                }
            } else {
                $("#" + list_id + "_" + i).delay(i*5).fadeIn(200);
                $("#" + selector_id).children("a").css('background', '#eeeeee');
                $("#" + selector_id).children("a").hover(function(){
                   $(this).css('background', '#eeeeee');
                },
                function(){
                   $(this).css('background', '#eeeeee');
                });
                if(i == foo && selector_id == 'brands_title'){
                    $("#left_nav_facebook").css('margin-top','-1px')
                }
            }
        }
    });
}

function tooltip(class_name, tooltip)
{
    tooltip = tooltip || "tooltip"
    var j = 0;
    var x = 0;
    var tip = "";
    $(window).mousemove(function(){
       $("#y_scroll_holder").html($(window).scrollTop());
       if($('#' + tooltip).css('top')) {
           j = $('#' + tooltip).css('top');
           j.replace("","px")
           $("#y_scroll_holder").attr('class', j);
       }
       if($('#' + tooltip).css('left')) {
           $("#x_scroll_holder").html($(window).scrollLeft());
           x = $('#' + tooltip).css('left');
           x.replace("","px")
           $("#x_scroll_holder").attr('class', x);
       }
    });
    $('.' + class_name).mouseover(function(e) {
         //Grab the title attribute's value and assign it to a variable  
         var tip = $(this).children('span').html();
         //Remove the title attribute's to avoid the native tooltip from the browser  
           
         //Append the tooltip template and its value  
         $("#holding_container").html('<div id="tooltip" style="display: none; color: #666666; width:200px; opacity: .9; position: absolute; line-height: 1.6em"><div class="tipHeader"></div><div class="tipBody" style="background-color: #F9F9F9; padding-left: 10px;">' + tip + '</div><div class="tipFooter"></div></div>');
           
         //Set the X and Y axis of the tooltip  
         $('#' + tooltip).css('top', e.pageY + 5);
         $('#' + tooltip).css('left', e.pageX + 15);
         $(window).scroll(function(){
            //$('#ider').html(parseInt($("#scroll_holder").attr('class')) - 5 + (parseInt($(window).scrollTop()) - parseInt($("#scroll_holder").html())));
            $('#' + tooltip).css('top',parseInt($("#y_scroll_holder").attr('class')) - 0 + (parseInt($(window).scrollTop()) - parseInt($("#y_scroll_holder").html())));
            $('#' + tooltip).css('left',parseInt($("#x_scroll_holder").attr('class')) - 0 + (parseInt($(window).scrollLeft()) - parseInt($("#x_scroll_holder").html())));
         })
         //Show the tooltip with fadeIn effect
         $('#' + tooltip).delay(25).fadeIn(100);
         //$('#' + tooltip).fadeTo('10',0.8);
           
     }).mousemove(function(e) {
         //$("#ider").html('MOUSE X-AXIS:' + e.pageX + '<br />MOUSE Y-AXIS:' + e.pageY);
         //alert(e.pageY);
         //Keep changing the X and Y axis for the tooltip, thus, the tooltip move along with the mouse
         if(e.pageX > ($(window).width() - ($("#tooltip").width() + 15)) + $(window).scrollLeft()) {
             $('#' + tooltip).css('left', e.pageX - ($("#tooltip").width() + 10));
         } else {
            $('#' + tooltip).css('left', e.pageX + 15);
         }

         if(e.pageY > ($(window).height() - ($("#tooltip").height() - 5)) + $(window).scrollTop()) {
             $('#' + tooltip).css('top', e.pageY - ($("#tooltip").height() - 5));
         } else {
            $('#' + tooltip).css('top', e.pageY + 5);
         }
     }).mouseout(function() {

         //Put back the title attribute's value  
         //Remove the appended tooltip template
        $("#holding_container").html("");

     });
}

function isInArray(needle, haystack)
{
    var length = haystack.length;
    for(var i = 0; i < length; i++) {
        if(typeof haystack[i] == 'object') {
            if(arrayCompare(haystack[i], needle)) return true;
        } else {
            if(haystack[i] == needle) return true;
        }
    }
    return false;
}

function required(origin,noteTarget,name) {
    $(origin).focus(function(){

    });
    $(origin).blur(function(){
        if($(origin).val() == "") {
            if($(origin + "_asterisk").is(":visible")) {

            } else {
                $(origin + "_asterisk").css('display','none');
                $(origin + "_icon_check").css('display','none');
                $(origin + "_icon_x").show();
                $(noteTarget).css('color', '#FF0000');
                $(noteTarget).html("REQUIRED");
            }
        } else {
            $(origin + "_asterisk").css('display','none');
            $(origin + "_icon_x").css('display','none');
            $(origin + "_icon_check").show();
            $(noteTarget).css('color', '#00FF00');
            $(noteTarget).html("");
        }
    });
    $(origin).keyup(function(){
        if($(origin + "_asterisk").is(":visible")) {
            if($(origin).val() == "") {
            } else {
                $(origin + "_asterisk").css('display','none');
                $(origin + "_icon_x").css('display','none');
                $(origin + "_icon_check").show();
                $(noteTarget).css('color', '#00FF00');
                $(noteTarget).html("");
            }
        } else {
            if($(origin).val() == "") {
                $(origin + "_asterisk").css('display','none');
                $(origin + "_icon_check").css('display','none');
                $(origin + "_icon_x").show();
                $(noteTarget).css('color', '#FF0000');
                $(noteTarget).html("REQUIRED");
            } else {
                $(origin + "_asterisk").css('display','none');
                $(origin + "_icon_x").css('display','none');
                $(origin + "_icon_check").show();
                $(noteTarget).css('color', '#00FF00');
                $(noteTarget).html("");
            }
        }
    });
}

function length(origin, noteTarget, length, name) {
    $(origin).blur(function(){
        if($(origin).val() == "") {
            if($(origin + "_asterisk").is(":visible")) {

            } else {
                $(origin + "_asterisk").css('display','none');
                $(origin + "_icon_check").css('display','none');
                $(origin + "_icon_x").show();
                $(noteTarget).css('color', '#FF0000');
                $(noteTarget).html(name + "&nbsp;MUST&nbsp;BE&nbsp;AT&nbsp;LEAST&nbsp;" + length + "&nbsp;CHARACTERS&nbsp;LONG");
            }
        } else {
            var string = $(origin).val();
            if(string.length < parseInt(length)) {
                $(origin + "_asterisk").css('display','none');
                $(origin + "_icon_check").css('display','none');
                $(origin + "_icon_x").show();
                $(noteTarget).css('color', '#FF0000');
                $(noteTarget).html(name + "&nbsp;MUST&nbsp;BE&nbsp;AT&nbsp;LEAST&nbsp;" + length + "&nbsp;CHARACTERS&nbsp;LONG");
            } else {
                $(origin + "_asterisk").css('display','none');
                $(origin + "_icon_x").css('display','none');
                $(origin + "_icon_check").show();
                $(noteTarget).css('color', '#00FF00');
                $(noteTarget).html("");
            }
        }
    });
    $(origin).keyup(function(){
        var string = $(origin).val();
        if($(origin + "_asterisk").is(":visible")) {
            if(string.length >= parseInt(length)) {
                $(origin + "_asterisk").css('display','none');
                $(origin + "_icon_x").css('display','none');
                $(origin + "_icon_check").show();
            }
        } else {
            if(string.length < parseInt(length)) {
                $(origin + "_asterisk").css('display','none');
                $(origin + "_icon_check").css('display','none');
                $(origin + "_icon_x").show();
                $(noteTarget).css('color', '#FF0000');
                $(noteTarget).html(name + "&nbsp;MUST&nbsp;BE&nbsp;AT&nbsp;LEAST&nbsp;" + length + "&nbsp;CHARACTERS&nbsp;LONG");
            } else {
                $(origin + "_asterisk").css('display','none');
                $(origin + "_icon_x").css('display','none');
                $(origin + "_icon_check").show();
                $(noteTarget).css('color', '#00FF00');
                $(noteTarget).html("");
            }
        }
    });
}


function match(first,second,target,name) {
    $(first).focus(function(){
        if($(second).val() == "" || $(first).val() == "" || $(first + "_comment").is(":visible")) {
            $(second + "_icon_x").css('display','none');
            $(second + "_icon_check").css('display','none');
            $(second + "_asterisk").show();
            $(target).css('color', '#FF00');
            $(target).html("");
        }
    });
    $(first).blur(function(){
        if($(second).val() == "" || $(first).val() == "" || $(first + "_comment").is(":visible")) {
            $(second + "_icon_x").css('display','none');
            $(second + "_icon_check").css('display','none');
            $(second + "_asterisk").show();
            $(target).css('color', '#FF00');
            $(target).html("");
        }
    });
    $(first).keyup(function(){
        if($(second).val() == "" || $(first).val() == "" || $(first + "_comment").is(":visible")) {
            $(second + "_icon_x").css('display','none');
            $(second + "_icon_check").css('display','none');
            $(second + "_asterisk").show();
            $(target).css('color', '#FF00');
            $(target).html("");
        } else {
            if($(first + "_icon_check").is(":visible") && $(first).val() == $(second).val()) {
                $(second + "_asterisk").css('display','none');
                $(second + "_icon_x").css('display','none');
                $(second + "_icon_check").show();
                $(target).css('color', '#00FF00');
                $(target).html("");
            }
        }
    });
    $(second).focus(function(){
        if($(second).val() == "" || $(first).val() == "" || $(first + "_comment").is(":visible")) {
            $(second + "_icon_x").css('display','none');
            $(second + "_icon_check").css('display','none');
            $(second + "_asterisk").show();
            $(target).css('color', '#FF00');
            $(target).html("");
        }
    });
    $(second).blur(function(){
        if($(second).val() == '') {
        } else {
            if($(second).val() == "" || $(first).val() == "" || $(first + "_comment").is(":visible")) {
                $(second + "_icon_x").css('display','none');
                $(second + "_icon_check").css('display','none');
                $(second + "_asterisk").show();
                $(target).css('color', '#FF00');
                $(target).html("");
            } else {
                if($(first).val() != $(second).val()) {
                    $(second + "_asterisk").css('display','none');
                    $(second + "_icon_check").css('display','none');
                    $(second + "_icon_x").show();
                    $(target).css('color', '#FF0000');
                    $(target).html(name + "&nbsp;DON'T&nbsp;MATCH");
                } else {
                    $(second + "_asterisk").css('display','none');
                    $(second + "_icon_x").css('display','none');
                    $(second + "_icon_check").show();
                    $(target).css('color', '#00FF00');
                    $(target).html("");
                }
            }
        }
    });
    $(second).keyup(function(){
        if($(second).val() == "" || $(first).val() == "" || $(first + "_comment").is(":visible")) {
            $(second + "_icon_x").css('display','none');
            $(second + "_icon_check").css('display','none');
            $(second + "_asterisk").show();
            $(target).css('color', '#FF00');
            $(target).html("");
        } else {
        if($(second + "_asterisk").is(":visible")) {
            if($(first).val() == $(second).val()) {
                $(second + "_asterisk").css('display','none');
                $(second + "_icon_x").css('display','none');
                $(second + "_icon_check").show();
            }
        } else {
            if($(first).val() != $(second).val()) {
                $(second + "_asterisk").css('display','none');
                $(second + "_icon_check").css('display','none');
                $(second + "_icon_x").show();
                $(target).css('color', '#FF0000');
                $(target).html(name + "&nbsp;DON'T&nbsp;MATCH");
            } else {
                $(second + "_asterisk").css('display','none');
                $(second + "_icon_x").css('display','none');
                $(second + "_icon_check").show();
                $(target).css('color', '#FF0000');
                $(target).html("");
            }
        }
        }
    });
    $(first).keyup(function(){
        if($(first + "_asterisk").is(":visible")) {

        } else {
            if($(second + "_asterisk").is(":visible")) {

            } else {
                if($(first).val() != $(second).val()) {
                    $(second + "_asterisk").css('display','none');
                    $(second + "_icon_check").css('display','none');
                    $(second + "_icon_x").show();
                    $(target).css('color', '#FF0000');
                    $(target).html(name + "&nbsp;DON'T&nbsp;MATCH");
                } else {
                    $(second + "_asterisk").css('display','none');
                    $(second + "_icon_x").css('display','none');
                    $(second + "_icon_check").show();
                    $(target).css('color', '#00FF00');
                    $(target).html("");
                }
            }
        }
    });
}


function emailValidation(email,target,note) {
    var regex = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
    $(email).blur(function(){
        var email_address = $(email).val();
        if(email_address == "" && $(email + "_asterisk").is(":visible")) {

        } else {
            if(regex.test(email_address)) {
                $(email + "_asterisk").css('display','none');
                $(email + "_icon_x").css('display','none');
                $(email + "_icon_check").show();
                $(target).css('color', '#00FF00');
                $(target).html("");
            }
            else {
                $(email + "_asterisk").css('display','none');
                $(email + "_icon_check").css('display','none');
                $(email + "_icon_x").show();
                $(target).css('color', '#FF0000');
                $(target).html("INVALID&nbsp;EMAIL&nbsp;ADDRESS");
            }
        }
    });
    $(email).keyup(function(){
        var email_address = $(email).val();
        if($(email + "_asterisk").is(":visible")) {
            if(regex.test(email_address)){
                $(email + "_asterisk").css('display','none');
                $(email + "_icon_x").css('display','none');
                $(email + "_icon_check").show();
            }
        } else {
            if(regex.test(email_address)){
                $(email + "_asterisk").css('display','none');
                $(email + "_icon_x").css('display','none');
                $(email + "_icon_check").show();
                $(target).css('color', '#FF0000');
                $(target).html("");
            } else {
                $(email + "_asterisk").css('display','none');
                $(email + "_icon_check").css('display','none');
                $(email + "_icon_x").show();
                $(target).css('color', '#FF0000');
                $(target).html("INVALID&nbsp;EMAIL&nbsp;ADDRESS");
            }
        }
    });
}


function alphaNumericCheck(searchPhrase){
    var regex=/^[0-9A-Za-z_]+$/; //^[a-zA-z]+$/
    if(regex.test(searchPhrase)){
        return false;
    } else {
        return true;
    }
}


function usernameSearch(origin,target,last,url){
    $(origin).focus(function(){

    });
    $(origin).blur(function(){
        var searchPhrase = $(origin).val();
        if(searchPhrase != '') {
            if(alphaNumericCheck(searchPhrase)) {
                $(origin + "_asterisk").css('display','none');
                $(origin + "_icon_check").css('display','none');
                $(origin + "_icon_x").show();
                $(target).css('color', '#FF0000');
                $(target).html("SPACES&nbsp;AND&nbsp;SYMBOLS&nbsp;AREN'T&nbsp;ALLOWED&nbsp;(\"_\"&nbsp;IS&nbsp;ALLOWED)");
            } else if(searchPhrase.length < 4) {
                $(origin + "_asterisk").css('display','none');
                $(origin + "_icon_check").css('display','none');
                $(origin + "_icon_x").show();
                $(target).css('color', '#FF0000');
                $(target).html("USERNAME&nbsp;MUST&nbsp;BE&nbsp;4&nbsp;CHARACTERS&nbsp;OR&nbsp;LONGER");
            } else {
                last = $.post(url, {ajax_id: 1, search_phrase: searchPhrase},
                    function(data){
                        if(data == ''){
                            $(target).css('color', '#00FF00');
                            $(target).html("");
                        } else if(data == '0'){
                            $(origin + "_asterisk").css('display','none');
                            $(origin + "_icon_x").css('display','none');
                            $(origin + "_icon_check").show();
                            $(target).css('color', '#00FF00');
                            $(target).html("");
                        } else {
                            $(origin + "_asterisk").css('display','none');
                            $(origin + "_icon_check").css('display','none');
                            $(origin + "_icon_x").show();
                            $(target).css('color', '#FF0000');
                            $(target).html("USERNAME&nbsp;IS&nbsp;ALREADY&nbsp;TAKEN");
                        }
                    }
                );
            }
        } else if($(origin + "_asterisk").is(":visible")) {

        } else {
            $(origin + "_asterisk").css('display','none');
            $(origin + "_icon_check").css('display','none');
            $(origin + "_icon_x").show();
            $(target).css('color', '#FF0000');
            $(target).html("USERNAME&nbsp;MUST&nbsp;BE&nbsp;4&nbsp;CHARACTERS&nbsp;OR&nbsp;LONGER");
        }
    });
    $(origin).keyup(function(){
        if(last) {
            last.abort();
        }
        var searchPhrase = $(origin).val();
        if(searchPhrase != '') {
            if(alphaNumericCheck(searchPhrase)) {
                if($(origin + "_asterisk").is(":visible")) {

                } else {
                    $(origin + "_asterisk").css('display','none');
                    $(origin + "_icon_check").css('display','none');
                    $(origin + "_icon_x").show();
                    $(target).css('color', '#FF0000');
                    $(target).html("SPACES&nbsp;AND&nbsp;SYMBOLS&nbsp;AREN'T&nbsp;ALLOWED&nbsp;(\"_\"&nbsp;IS&nbsp;ALLOWED)");
                }
            } else if(searchPhrase.length < 4) {
                if($(origin + "_asterisk").is(":visible")) {

                } else {
                    $(origin + "_asterisk").css('display','none');
                    $(origin + "_icon_check").css('display','none');
                    $(origin + "_icon_x").show();
                    $(target).css('color', '#FF0000');
                    $(target).html("USERNAME&nbsp;MUST&nbsp;BE&nbsp;4&nbsp;CHARACTERS&nbsp;OR&nbsp;LONGER");
                }
            } else {
                last = $.post(url, {ajax_id: 1, search_phrase: searchPhrase},
                   function(data){
                      if(data == ''){
                        if($(origin + "_asterisk").is(":visible")) {

                        } else {
                            $(origin + "_asterisk").css('display','none');
                            $(origin + "_icon_x").css('display','none');
                            $(origin + "_icon_check").show();
                            $(target).html("");
                        }
                      } else if(data == '0'){
                        $(origin + "_asterisk").css('display','none');
                        $(origin + "_icon_x").css('display','none');
                        $(origin + "_icon_check").show();
                        $(target).html("");
                      } else {
                        if($(origin + "_asterisk").is(":visible")) {

                        } else {
                            $(origin + "_asterisk").css('display','none');
                            $(origin + "_icon_check").css('display','none');
                            $(origin + "_icon_x").show();
                            $(target).css('color', '#FF0000');
                            $(target).html("USERNAME&nbsp;IS&nbsp;ALREADY&nbsp;TAKEN");
                        }
                      }
                   }
                );
            }
        }
    });
    return last;
}

function preload(arrayOfImages) {
    $(arrayOfImages).each(function(){
        //$('<img/>')[0].src = this;
        // Alternatively you could use:
        (new Image()).src = this;
    });
}

function radioChange(radioName,customFunction,passIn) {
    $("input[name=" + radioName + "]").each(function(){
        $("#proxy_" + $(this).attr("id")).click(function(){
            if(is_array(passIn)) {
                var string = "";
                var count = 1;
                for(var i in passIn) {
                    if(count == 1) {
                        string = i;
                    } else {
                        string = string + ", " + i;
                    }
                }
                eval(customFunction)(string);
            } else {
                eval(customFunction)(passIn);
            }
        });
        $("label[for=" + $(this).attr("id") + "]").click(function(){
            if(is_array(passIn)) {
                var string = "";
                var count = 1;
                for(var i in passIn) {
                    if(count == 1) {
                        string = i;
                    } else {
                        string = string + ", " + i;
                    }
                }
                eval(customFunction)(string);
            } else {
                eval(customFunction)(passIn);
            }
        });
    });
}


function alertThing(thing) {
    alert(thing);
}

function is_array(obj) {
    if (obj.constructor.toString().indexOf("Array") == -1)
        return false;
    else
        return true;
}

function isset(varname) {
    if(typeof( window[ varname ] ) != "undefined") return true;
    else return false;
}

function shippingAmountAjax(url) {
    $("input[name=shipping_method]").each(function(){
        $("#proxy_" + $(this).attr("id")).live("click", function(){
            var shipping_amount = $(this).attr("id");
            shipping_amount = shipping_amount.replace("proxy_","");
            shipping_amount = $("#" + shipping_amount).val();
            alert(shipping_amount);
            var newArray = shipping_amount.split("|");
            shipping_amount = newArray[0];
            $.post(url, {ajax_id: 2, shipping_amount: shipping_amount},
               function(data){
                    var split = data.split("|");
                    $("#mini_cart_shipping").html(split[0]);
                    $(".mini_grand_value").html(split[1]);
               }
            );
        });
        $("label[for=" + $(this).attr("id") + "]").click(function(){

        });
    });
}

function mini_cart_change(BASE_URL) {
    if(!BASE_URL) {
        BASE_URL = "https://www.hickorees.com";
    }
    $.post(BASE_URL + "/ajax_files/mini_cart_change.php", {},
        function(data){
            var split = data.split("|");
            $("#mini_cart_sub_total").html(split[0]);
            $("#mini_cart_tax").html(split[1]);
            $("#mini_cart_shipping").html(split[2]);
            $("#mini_cart_discount_a").html("-" + split[3]);
            $(".mini_grand_value").html(split[4]);
            if(split[4] == '$0.00') {
                $("#payment_information_area").hide();
                $("#free").val(1);
                if($("#creditcardrequired").val() == 0) {
                    $("paypal_state").val(1);
                } else {
                    $("paypal_state").val(0);
                    $("#creditcardrequired").val(0)
                }
                $("#credit_card_radios").children(".radio").children().each(function(){
                   var id = $(this).children("label").children("input:hidden").attr("id");
                   if($("#" + id + "required").val() == 1) {
                       $("#" + id + "required").val(0)
                       $("#selected_cc").val("#" + id + "required");
                   }
                });
            } else {
                if($("#paypal_state").val() == 0) {
                    $("#creditcardrequired").val(1);
                    $("#credit_card_radios").show();
                    $($("#selected_cc").val()).val(1);
                } else {
                    $("#creditcardrequired").val(0);
                    $("#credit_card_radios").hide();
                    $($("#selected_cc").val()).val(0);
                }
                $("#free").val(0);
                $("#payment_information_area").show();
            }
        }
    );
}

function ajax_validate(collection) {
    $.post(
        "http://dev.hickorees.com/ajax_files/ajax_validate.php",
        collection,
        function(data){
            data = data.split('|');
            if(data.length == 1) {
                var obj2 = jQuery.parseJSON(data[0]);
                for(var i=0;i<obj2.length;i=i+1) {
                    $("#" + obj2[i]).css('border-color','#888888 #999999 #999999 #888888');
                }
                $(".alert-div").hide();
            } else {
                var obj = jQuery.parseJSON(data[0]);
                var obj2 = jQuery.parseJSON(data[1]);
                var c = obj[collection['test_name']];
                $("#alert-message").html(data[2]);
                $(".alert-div").fadeIn(1000);
                for(var i=0;i<c.length;i=i+1) {
                    $("#" + c[i]).css('border-color','#FF0000');
                }
                for(var i=0;i<obj2.length;i=i+1) {
                    $("#" + obj2[i]).css('border-color','#888888 #999999 #999999 #888888');
                }
            }
        }
    );
}

function array2json(arr) {
    var parts = [];
    var is_list = (Object.prototype.toString.apply(arr) === '[object Array]');

    for(var key in arr) {
        var value = arr[key];
        if(typeof value == "object") { //Custom handling for arrays
            if(is_list) parts.push(array2json(value)); /* :RECURSION: */
            else parts[key] = array2json(value); /* :RECURSION: */
        } else {
            var str = "";
            if(!is_list) str = '"' + key + '":';

            //Custom handling for multiple data types
            if(typeof value == "number") str += value; //Numbers
            else if(value === false) str += 'false'; //The booleans
            else if(value === true) str += 'true';
            else str += '"' + value + '"'; //All other things
            // :TODO: Is there any more datatype we should be in the lookout for? (Functions?)

            parts.push(str);
        }
    }
    var json = parts.join(",");
    
    if(is_list) return '[' + json + ']';//Return numerical JSON
    return '{' + json + '}';//Return associative JSON
}
