0

This is a script that is generated by CodeCharge (code generator) as part of my app (well, also by Artisteer designs, apparently). I have very little knowledge of web development, zero knowledge of JS and I have to use this code generator. The script keeps coming up with this error: "Line: 139, Char: 13, Error: Unable to get property 'parent' of undefined or null reference, Code:0, URL: ). Like I was saying, I have no control upon generation of this script, but I can go and modify it, to hopefully fix this. Below is the full script. Line 139 is:

    var s = c.parent().children('.art-layout-cell:not(.art-content)');

This is full script:

/* begin Page */
/* Created by Artisteer v3.1.0.55575 */
// css helper
(function($) {
    var data = [
        {str:navigator.userAgent,sub:'Chrome',ver:'Chrome',name:'chrome'},
        {str:navigator.vendor,sub:'Apple',ver:'Version',name:'safari'},
        {prop:window.opera,ver:'Opera',name:'opera'},
        {str:navigator.userAgent,sub:'Firefox',ver:'Firefox',name:'firefox'},
        {str:navigator.userAgent,sub:'MSIE',ver:'MSIE',name:'ie'}];
    for (var n=0;n<data.length;n++) {
        if ((data[n].str && (data[n].str.indexOf(data[n].sub) != -1)) || data[n].prop) {
            var v = function(s){var i=s.indexOf(data[n].ver);return (i!=-1)? parseInt(s.substring(i+data[n].ver.length+1)):'';};
            $('html').addClass(data[n].name+' '+data[n].name+v(navigator.userAgent) || v(navigator.appVersion)); break;         
    }
}
})(jQuery);
/* end Page */

/* begin Menu */
jQuery(function () {
    if (!jQuery.browser.msie || parseInt(jQuery.browser.version) > 7) return;
    jQuery('ul.art-hmenu>li:not(:first-child)').each(function () { jQuery(this).prepend('<span class="art-hmenu-separator"> </span>'); });
    if (!jQuery.browser.msie || parseInt(jQuery.browser.version) > 6) return;
    jQuery('ul.art-hmenu li').each(function () {
        this.j = jQuery(this);
        this.UL = this.j.children('ul:first');
        if (this.UL.length == 0) return;
        this.A = this.j.children('a:first');
        this.onmouseenter = function () {
            this.j.addClass('art-hmenuhover');
            this.UL.addClass('art-hmenuhoverUL');
            this.A.addClass('art-hmenuhoverA');
        };
        this.onmouseleave = function() {
            this.j.removeClass('art-hmenuhover');
            this.UL.removeClass('art-hmenuhoverUL');
            this.A.removeClass('art-hmenuhoverA');
        };
    });
});

jQuery(function() { setHMenuOpenDirection({container: "div.art-sheet-body",         defaultContainer: "#art-main", menuClass: "art-hmenu", leftToRightClass: "art-hmenu-left-to-right", rightToLeftClass: "art-hmenu-right-to-left"}); });

function setHMenuOpenDirection(menuInfo) {
    var defaultContainer = jQuery(menuInfo.defaultContainer);
    defaultContainer = defaultContainer.length > 0 ? defaultContainer = jQuery(defaultContainer[0]) : null;

jQuery("ul." + menuInfo.menuClass + ">li>ul").each(function () {
    var submenu = jQuery(this);
    var submenuWidth = submenu.outerWidth();
    var submenuLeft = submenu.offset().left;

    var mainContainer = submenu.parents(menuInfo.container);
    mainContainer = mainContainer.length > 0 ? mainContainer = jQuery(mainContainer[0]) : null;

    var container = mainContainer || defaultContainer;
    if (container != null) {
        var containerLeft = container.offset().left;
        var containerWidth = container.outerWidth();

        if (submenuLeft + submenuWidth >=
                containerLeft + containerWidth) 
            /* right to left */
            submenu.addClass(menuInfo.rightToLeftClass).find("ul").addClass    (menuInfo.rightToLeftClass);
        if (submenuLeft <= containerLeft)
            /* left to right */
            submenu.addClass(menuInfo.leftToRightClass).find("ul").addClass    (menuInfo.leftToRightClass);
        }
    });
}

jQuery(function ($) {
    $("ul.art-hmenu a:not([href])").attr('href', '#').click(function (e) { e.preventDefault(); });
});
/* end Menu */

/* begin MenuSubItem */
jQuery(function () {
    jQuery("ul.art-hmenu ul li").hover(function () { jQuery(this).prev().children("a").addClass("art-hmenu-before-hovered"); }, 
    function () { jQuery(this).prev().children("a").removeClass("art-hmenu-before-hovered"); });
});

jQuery(function () {
    if (!jQuery.browser.msie) return;
    var ieVersion = parseInt(jQuery.browser.version);
    if (ieVersion > 7) return;

/* Fix width of submenu items.
* The width of submenu item calculated incorrectly in IE6-7. IE6 has wider items, IE7 display items like stairs.
*/
jQuery.each(jQuery("ul.art-hmenu ul"), function () {
    var maxSubitemWidth = 0;
    var submenu = jQuery(this);
    var subitem = null;
    jQuery.each(submenu.children("li").children("a"), function () {
        subitem = jQuery(this);
        var subitemWidth = subitem.outerWidth();
        if (maxSubitemWidth < subitemWidth)
            maxSubitemWidth = subitemWidth;
    });
    if (subitem != null) {
        var subitemBorderLeft = parseInt(subitem.css("border-left-width"), 10) || 0;
        var subitemBorderRight = parseInt(subitem.css("border-right-width"), 10) || 0;
        var subitemPaddingLeft = parseInt(subitem.css("padding-left"), 10) || 0;
        var subitemPaddingRight = parseInt(subitem.css("padding-right"), 10) || 0;
        maxSubitemWidth -= subitemBorderLeft + subitemBorderRight + subitemPaddingLeft + subitemPaddingRight;
        submenu.children("li").children("a").css("width", maxSubitemWidth + "px");
    }
});

if (ieVersion > 6) return;
jQuery("ul.art-hmenu ul>li:first-child>a").css("border-top-width", "1px");
});
/* end MenuSubItem */

/* begin Layout */
jQuery(function () {
jQuery(window).bind('resize', function () {
    var bh = jQuery('body').height();
    var mh = 0;

    jQuery('#art-main').children().each(function() {
        if (jQuery(this).css('position') != 'absolute')
            mh += jQuery(this).outerHeight(true);
    });

    if (mh < bh)
    {
        var r = bh - mh;
        var c = jQuery('div.art-content');
        c.css('height', (c.outerHeight(true) + r) + 'px');
    }
});

if (jQuery.browser.msie && parseInt(jQuery.browser.version) < 8) {
    jQuery(window).bind('resize', function() {
        var c = $('div.art-content');
        var s = c.parent().children('.art-layout-cell:not(.art-content)');
        var w = 0;
        c.hide();
        s.each(function() { w += this.clientWidth; });
        c.w = c.parent().width(); c.css('width', c.w - w + 'px');
        c.show();
    });
}

jQuery(window).trigger('resize');
});
/* end Layout */

/* begin Button */
function artButtonSetup(className) {
    jQuery.each(jQuery("a." + className + ", button." + className + ", input." + className), function (i, val) {
    var b = jQuery(val);
    if (!b.parent().hasClass('art-button-wrapper')) {
        if (b.is('input')) b.val(b.val().replace(/^\s*/, '')).css('zoom', '1');
        if (!b.hasClass('art-button')) b.addClass('art-button');
        jQuery("<span class='art-button-wrapper'><span class='art-button-l'> </span><span class='art-button-r'> </span></span>").insertBefore(b).append(b);
        if (b.hasClass('active')) b.parent().addClass('active');
    }
    b.mouseover(function () { jQuery(this).parent().addClass("hover"); });
    b.mouseout(function () { var b = jQuery(this); b.parent().removeClass("hover"); if (!b.hasClass('active')) b.parent().removeClass('active'); });
    b.mousedown(function () { var b = jQuery(this); b.parent().removeClass("hover"); if (!b.hasClass('active')) b.parent().addClass('active'); });
    b.mouseup(function () { var b = jQuery(this); if (!b.hasClass('active')) b.parent().removeClass('active'); });
});
}
jQuery(function() { artButtonSetup("art-button"); });

/* end Button */



// adds spans to apply css styles for buttons with class "Button"
jQuery(function() { artButtonSetup("Button"); });

jQuery(function() {
// events for CCS AjaxPanel can be set with help of AjaxPanelEvents
if (typeof window.AjaxPanelEvents == "undefined") window.AjaxPanelEvents = [];
// when CCS AjaxPanel is updated the buttons should be decorated with spans again
window.AjaxPanelEvents.push({
    eventName: "afterUpdate",
    func: function(updatePanel) {
        // adds spans to apply css styles for buttons with class "Button"
        artButtonSetup("Button", updatePanel);
        // adds spans to apply css styles for buttons with class "art-button"
        artButtonSetup("art-button", updatePanel);
        }
    });
});

Can anybody help? Thanks!

Shadow The GPT Wizard
  • 66,030
  • 26
  • 140
  • 208
MariusD
  • 129
  • 1
  • 2
  • 14

2 Answers2

0

It seems that c is not instantiated, something like c = new anything.

Osvaldo Costa
  • 128
  • 1
  • 1
  • 5
  • Like I was saying, I have no idea of JS, but I don't see a 'new' statement in the whole script, so nothing is instantiated? Or, can it be anywhere else? Or, is this how it's instantiated (doesn't JS instantiate like this (the line before the error): var c = $('div.art-content');? – MariusD Mar 28 '13 at 18:52
  • It is probably that you dont have a class in your markup with the same name as div.art-content. – Osvaldo Costa Mar 28 '13 at 22:00
  • and yes, var c = ${'div.art-content'} is the way jQuery instantiate a HTML element by its class name. – Osvaldo Costa Mar 28 '13 at 22:05
0

It looks like you might have used jQuery.noConflit() in your project, so $ is not jQuery object.

So change

var c = $('div.art-content');

to

var c = jQuery('div.art-content');
Arun P Johny
  • 384,651
  • 66
  • 527
  • 531