(function($){
    $.fn.extend({
        scComparison : function(options) {
            var control=this;
            var defaults = {
                cookie:"comparison",
                saveCompareItemsInCookie:true,
                itemAttribute:"itemid",
                minToCompare:2,
                maxToCompare:5,
                buttonMode:"checkbox", //checkbox | link 
                buttonText:"Compare",
                buttonId:"showComparisonArea",
                buttonLinkToOpen:true,
                popupLayout:"cross", //cross | list
                popupProperties:[["code","Code","",""],["price","Price","",""],["saleprice", "Sale Price","",""],["orderable","Orderable","boolean",""],["availability","Availability","",""]], //text|money|number|boolean
                merchantProperties:[],
                popupTitle:"Please compare selected items",
                defaultGroupTitle:"General",
                propertyTitleLabel:"Product",
                popupCloseButtonText:"Close",
                mapPriceText:"Click for instant price quote", 
                addToCartButton:"<input type=\"submit\" value=\"add to cart\" />",
                quantityInputVisible:false,
                clickToSeeOptionsText:"Click to See Options and to Order",
                outOfStockText:"Out Of Stock",
                renderOptions:true,
                addToCartBottom:true,
                addToCartPartOfTitle:true,
                hideEmptyRows:true,
                removeText:"remove",
                rendervalue:function(control, info, td, field, value) {
                    control.rendervalue(td, info, field, value);
                },
                rendertitle:function(control, td, info) {
                    control.rendertitle(td, info);
                },
                renderlabel:function(control, td, label) {
                    control.renderlabel(td, label);
                },
                renderaddtocart:function(control, td, info) {
                    control.renderaddtocart(td, info);
                },
                rendergroup:function(control, td, info) {
                    control.rendergroup(td, info);
                },
                openarea:null,
                closearea:null,
                init:function(container, button) {
                    if ($(button).attr(O.itemAttribute)!=null) return; 
                    if ($('input[name^="vwitem"]', container).length>0) {
                        $('input[name^="vwitem"]', container).each(function() {
                            var x=this.value;                            
                            $(button).attr(O.itemAttribute, x); 
                        });
                    } else {
                        $("a:first", container).each(function() {
                            var x=null;                        
                            x=$(this).attr(O.itemAttribute);
                            if (x==null || x==undefined) {
                                x=this.href.replace(/\.html/gi,"");
                                if (x.lastIndexOf("/")>0) {
                                    x=x.substring(x.lastIndexOf("/")+1);
                                }
                            }
                            $(button).attr(O.itemAttribute, x); 
                        });
                    }
                }
            };
            
		    var O = $.extend({},defaults,options);
		    var W = window;
		    var isGrouped=false;
		    var isInited=false;
		    
		    this.closearea=function() {
		        $("#sccomparepopup").hide();
		        $.dimScreenStop();
	            if ($.isFunction(O.closearea)) {
	                O.closearea.call();
	            }
		    }
		    
		    this.rendervalue=function(td, info, field, value) {
		        if (value!=undefined) {
		            var f=field[0],t=field[2];
		            switch (f) {
		                case "saleprice":
		                case "price":t="money";break;
		                case "orderable":t="boolean";break;
		            }
		            switch (t) {
		                case "money":
		                    if ($.isArray(value)) value=value[0]; 
		                    td.html($.toPrice(value));
		                    break;
		                case "boolean":
		                    td.addClass(isTrueValue(value) ? "booleantrue" : "booleanfalse");
		                    td.html(value);
		                    break;
		                default:
                            td.html(value);
		                    break;
		            }
		            
		            td.addClass(f + "_field");
                } else {
                    td.addClass("na-comparison");
                }
                
                if (O.hideEmptyRows && O.popupLayout=="cross") {
                    var p=td.parent();
                    if ($("td.na-comparison",p).length+1==$("td",p).length) {
                        p.hide();
                    }
                }
		    }
		    
		    this.rendertitle=function (td, info) {
                var html="";
                html+="<div><a href=\"" + info["id"] + ".html\"><img src=\"" + info["images"][0]["ssM"] + "\" /></a></div>";
                html+="<div>" + info["name"] + "</div>";
                html+="<div class=\"scremovelink-cont\"><a href=\"#\" class=\"scremovelink\">" + O.removeText+ "</a></div>";
                td.removeClass("loading").html(html);
		    }
		    this.rendergroup=function(td, label) {
		        if (label==undefined)
		            label="_default";
		        $("span",td).html((label=="_default")?O.defaultGroupTitle:label);
		    }
		    this.renderlabel=function(td, label) {
		        if (label==undefined) return;
		        td.html(label[1]);
		        td.addClass(label[0] + "_field_label");
		    }
		    this.renderaddtocart=function(td, info) {
		        var price=(info["price"]!=null || info["saleprice"]!=null) ? 1 : null;
		        var h="";
	            var opts=info["options"];
	            
		        if (price!=null && price>0) {
			        if (isTrueValue(info["orderable"])) {
			           if (opts==undefined || (opts!=undefined && O.renderOptions)) {
			           
					        h="<form method=post action=\"" + $.yahoo.getAddToCartFormAction() + "\">";
                            var ahtml="";
                            
                            if (info["mapPrice"]) {
						        ahtml="<span class=map><input id=mapinput type=submit value=\"" + O.mapPriceText + "\" height=16 width=155 border=0><a href=\"javascript:makeMAPWin(300,350);\">(Why?)</a><br>" + O.addToCartButton + "<input type=hidden name=vwitem value=\"" + info["id"] + "\" /><input type=hidden name=vwcatalog value=\"" + $.yahoo.storeId + "\" /></span>";
					        } else {
						        ahtml=O.addToCartButton + "<input type=hidden name=vwitem value=\"" + info["id"] + "\" /><input type=hidden name=vwcatalog value=\"" + $.yahoo.storeId + "\" />" + ((O.quantityInputVisible) ? ("<br><input type=text class=quantity value=1 />") : "") + ""
					        }
					        
					        if (opts!=undefined && !O.renderOptionsAsProperties) {
                                h+="<table class=sccomparepit cellpadding=0 cellspacing=0>";
                                for (var o in opts) {
                                    var v=opts[o];
                                    h+="<tr><td class=optlabel>" + o + ":</td><td class=optvalue><select name=\"" + o + "\">";
                                    for (var i=0;i<v.length;i++) {
                                        h+="<option value=\"" + v[i] + "\">" + v[i] + "</option>";
                                    }
                                    h+="</select></td></tr>";
                                }
                                h+="<tr><td class=addtocart colspan=2>" + ahtml + "</td></tr>";
                                h+="</table>";
                            } else {
                                h+=ahtml;
                            }
                            
					        h+="</form>";
			           }
			           else {
					        h="<a href=\"" + info["id"] + ".h\" class=moreoptions>" + O.clickToSeeOptionsText + "</a>";
			           }
			        } else {
				        h="<div class=outofstock>" + O.outOfStockText + "</div>"
			        }
		        }
		        td.html(h);
		    }
		    
		    function isTrueValue(x) {
		        return x==true || x=="t" || x=="true" || x=="yes" || x=="y";
		    }
		    
		    function builtComparePopup(e) {
		        
		        if (W.sc_compare_items==undefined) return;
		        
		        if (W.sc_compare_items.length>=O.minToCompare) {
		        
		            if (W.sc_compare_items.length>O.maxToCompare) {
		                alert("Please select less than " + O.maxToCompare + " item(s) for comparison");
		                return;
		            }
		        
		            var ca=null;
		        
		            if ($("#sccomparepopup").length==0) 
		                ca=$("<div id=sccomparepopup></div>");
		            else 
		                ca=$("#sccomparepopup").empty();
		                
		            var html="";
		        
		            html="<div class=\"title\">" + O.popupTitle + "</div>";
		            html+="<div class=\"title-close\"><a href=# class=close>&nbsp;</a></div>";
                    
                    var p=[];
                    var g=[];

                    if (isGrouped) {
                        for (var i=0;i<O.popupProperties.length;i++) {
                            var gn=O.popupProperties[i][3];
                            if (g[gn]==undefined) g[gn]=[];
                            g[gn][g[gn].length]=O.popupProperties[i];
                        }
                        for (var gn in g) 
                            for (var i=0;i<g[gn].length;i++) 
                                p[p.length]=g[gn][i];
                    } else {
                        p=O.popupProperties;
                    }
                    
                    var gn=null;
                    var gi=0;
		            switch(O.popupLayout) {
		                case "cross": 
		                    html+="<table cellpadding=0 cellspacing=0 border=0 class=\"sccomparecrosstable\"><tbody>";
		                    for (var i=-1,origlen=p.length,len=origlen+((O.addToCartBottom)?1:0);i<len;i++) {
	                            if (isGrouped && p[i]!=undefined && i>=0 && gn!=p[i][3]) {
	                                gn=p[i][3];
	                                html+="<tr g=\"" + gi + "\" gn=\"" + gn + "\"><td colspan=\"" + 
	                                    (sc_compare_items.length + 1) + 
	                                    "\" class=\"propertygroup\"><a href=# class=\"expanded collapsegroup\" gind=\"" + gi + "\">&nbsp;</a><span>&nbsp;</span></td></tr>";
	                                gi++;
	                            }
	                            html+="<tr ind=\"" + i + "\" class=\"" + 
	                                ((i%2==0) ? "even" : "odd") + 
	                                ((i==-1) ? " first" : "") +
	                                ((i==len-1) ? " last" : "") + "\"" +
	                                ((isGrouped && i>=0 && i<origlen) ? (" gind=\"" + (gi-1) + "\"") : "") +
	                                ">";
	                            html+="<td class=\"property" + ((i>=0)?"label":"corner") + "\">&nbsp;</td>";
                                for (var j=0;j<sc_compare_items.length;j++) {
                                    if (i<origlen) {
                                        html+="<td ind=\"" + j + "\" class=\"property" + ((i>=0) ? "value" : "title") + 
                                        ((j==sc_compare_items.length-1) ? " last" : "") +
                                        "\">&nbsp;</td>";
                                    } else {
                                        html+="<td ind=\"" + j + "\" valign=top class=\"propertyaddtocart" + 
                                        ((j==sc_compare_items.length-1) ? " last" : "") +
                                        "\">&nbsp;</td>";
                                    }
                                }
	                            html+="</tr>";
	                        }
	                        html+="</tbody></table>";
                            break;
                        case "list":
                            html+="<table cellpadding=0 cellspacing=0 border=0 class=\"sccomparelisttable\"><tbody>";
		                    for (var i=-1;i<sc_compare_items.length;i++) {
    	                        html+="<tr ind=\"" + i + "\" class=\"" + 
	                                ((i%2==0) ? "even" : "odd") + 
	                                ((i==-1) ? " first" : "") +
	                                ((i==len-1) ? " last" : "") + "\">";
		                        for (var j=-1,origlen=p.length,len=origlen+((O.addToCartBottom)?1:0);j<len;j++) {
		                            if (j>=0) {
		                                if (j<origlen) {
                                            html+="<td ind=\"" + j + "\" class=\"property" + ((i>=0) ? "value" : "label") + 
                                            ((j==len-1) ? " last" : "") +
                                            "\">&nbsp;</td>";
                                        } else {
                                            html+="<td ind=\"" + j + "\" class=\"propertyaddtocart" + 
                                            ((j==len-1) ? " last" : "") +
                                            "\">&nbsp;</td>";
                                        }
                                    } else {
                                        html+="<td ind=\"" + j + "\" class=\"property" + ((i==-1 && j==-1) ? "corner" : "title") + "\">" + ((i==-1 && j==-1) ? O.propertyTitleLabel : "&nbsp;") + "</td>";
                                    }
		                        }
		                        html+="</tr>";
		                    }
		                    html+="</tbody></table>";
                            break;
		            }

	                html+="<a href=# class=close>" + O.popupCloseButtonText + "</a>";

                    ca.html(html);
                    
                    $("a.collapsegroup",ca).click(function(e){
                        var trS="tr[gind=\"" + $(this).attr("gind") + "\"]";
                        if ($(this).attr("collapsed")=="1") {
                            $(trS).show();
                            $(this).attr("collapsed","0").addClass("expanded").removeClass("collapsed");
                        } else {
                            $(trS).hide();
                            $(this).attr("collapsed","1").addClass("collapsed").removeClass("expanded")
                        }
                        e.preventDefault();
                    });
                    
                    $("a.close",ca).click(function(e){control.closearea();e.preventDefault();});
		        
		            if (isGrouped) 
                        for (var gn in g) 
                            O.rendergroup(control,$("tr[gn=\"" + gn + "\"] td.propertygroup",ca),gn);
		        
		            for (var i=0;i<p.length;i++) {
		                switch (O.popupLayout) {
		                    case "cross":    
        		                O.renderlabel(control,$("tr[ind=\"" + i + "\"] td.propertylabel",ca),p[i]); 
		                        break;
		                    case "list":    
        		                O.renderlabel(control,$("tr[ind=\"-1\"] td[ind=\"" + i + "\"].propertylabel",ca),p[i]); 
		                        break;
		                }
		            }

                    if ($("#sccomparepopup").length==0) $(ca).appendTo("body");
		            
		            $.sc.addCallback("parsedItem","comparison",function(info) {
		            
		                  if (info==null) return;
		                  var ii=-1;
		                  for (var i=0;i<sc_compare_items.length;i++) {
		                      if (sc_compare_items[i].id==info.id) {
		                          ii=i;
		                          break;
		                      }
		                  }
		                  if (ii>=0) {
		                  
		                        switch (O.popupLayout) {
		                            case "cross":
		                                
		                                O.rendertitle(control,$("td.propertytitle[ind=" + ii + "]"),info);
		                                
		                                O.renderaddtocart(control,$("td.propertyaddtocart[ind=" + ii + "]"),info);
		                                
		                                $("td.propertytitle[ind=" + ii + "] a.scremovelink").attr(O.itemAttribute,info["id"]).click(function(e) {
                                            var i=$(this).closest("td.propertytitle").attr("ind");
                                            $("td.propertytitle[ind=\"" + i + "\"],td.propertyvalue[ind=\"" + i + "\"],td.propertyaddtocart[ind=\"" + i + "\"]").remove();
                                            var x=$(this).attr(O.itemAttribute);
		                                    if (x!=null) {
		                                        for (var j=0;j<sc_compare_items.length;j++) {
		                                            if (sc_compare_items[j].id==x) sc_compare_items.splice(j,1);
		                                        }
		                                        $("div.sccomparebutton[itemid=\"" + x + "\"]").each(function() {		   
		                                            $(this).attr("compareadded","0").removeClass("sccompareadded");
		                                            $("input:checkbox",this).attr("checked",false).attr("compareadded","0").removeClass("sccompareadded");
                                                });
		                                    }
		                                    if ($("td.propertytitle",ca).length==0) control.closearea();
		                                    e.preventDefault();
                                        });
                                        
                                        for (var i=0;i<p.length;i++) {
                                            var v=info[p[i][0]];
                                            
                                            O.rendervalue(control,info, $("tr[ind=\"" + i + "\"] td[ind=\"" + ii + "\"]"),p[i],v);
                                        }       
		                                break;
		                            case "list":
                                        O.rendertitle(control,$("tr[ind=" + ii + "] td.propertytitle"),info);
		                                O.renderaddtocart(control,$("tr[ind=" + ii + "] td.propertyaddtocart"),info);
                                        $("tr[ind=" + ii + "] td.propertytitle a.scremovelink").attr(O.itemAttribute,info["id"]).click(function(e) {
                                            var i=$(this).closest("tr").attr("ind");
                                            $(this).closest("tr").remove();
                                            var x=$(this).attr(O.itemAttribute);
		                                    if (x!=null) {
		                                        for (var j=0;j<sc_compare_items.length;j++) 
		                                            if (sc_compare_items[j].id==x) sc_compare_items.splice(j,1);
		                                        $("div.sccomparebutton[itemid=\"" + x + "\"]").each(function() {		   
		                                            $("input",this).attr("checked",false).attr("compareadded","0").removeClass("sccompareadded");
                                                });
		                                    }
		                                    if ($("td.propertytitle",ca).length==0) control.closearea();
		                                    e.preventDefault();
                                        });
                                        for (var i=0;i<p.length;i++) {
                                        
                                            var v=info[p[i][0]];
                                            O.rendervalue(control,info, $("tr[ind=\"" + ii + "\"] td[ind=\"" + i + "\"]"),p[i],v);
                                        }       

		                                break;   
		                        }
		                  }
		            });
		            
		            for (var i=0;i<sc_compare_items.length;i++) {
		                $("td.propertytitle[ind=" + i + "]",ca).addClass("loading");
		                
		                $.yahoo.getItem(
		                    {
		                        domain:(O.domain) ? O.domain : null
		                    },
		                    {
		                        id:sc_compare_items[i].id,
		                        type:"html"}
		                    );
                    }
                    
		            $.dimScreen(1000, 0.7, function() {
		                $(ca).css("top",$(W).scrollTop() + ($(W).height()-$(ca).height())/2).css("left",($(W).width()-$(ca).width())/2);
		                $(ca).show();
		                if ($.isFunction(O.showarea)) {
		                    O.showarea.call();
		                }
		            });
		        } else {
		            alert("Please select " + O.minToCompare + " item(s) for comparison");
		        }
    		}
		    
		    if (W.sc_compare_items==undefined) {		    
		        W.sc_compare_items=[];
		        $("#" + O.buttonId).click(builtComparePopup);
    		}
    		
    		return this.each(function() {

                function refreshCookie() {
                    if (O.saveCompareItemsInCookie) {
                        var cv="";
                        for (var j=0;j<sc_compare_items.length;j++) 
                            cv=cv + (cv=="" ? "" : ",") + sc_compare_items[j].id;
                        $.cookie(O.cookie,cv,{
                            path:W.location.pathname,
                            domain:W.location.hostname
                        });
                    }
                }
		        
		        function addToCompare(x) {
		            var i=x.attr(O.itemAttribute);
		            if (i!=null) {
		                for (var j=0;j<sc_compare_items.length;j++) {
		                    if (sc_compare_items[j].id==i) return;
		                }
		                sc_compare_items[sc_compare_items.length]={id:i,loaded:false};
		                refreshCookie();
		            }    
		        }
		        
		        function removeFromCompare(x) {
		            var i=x.attr(O.itemAttribute);
		            if (i!=null) {
		                for (var j=0;j<sc_compare_items.length;j++) {
		                    if (sc_compare_items[j].id==i) sc_compare_items.splice(j,1);
		                }
		                refreshCookie();		                
		            }
		        }
		        
		        function toggleCompare(x) {
    		        if (x.attr("compareadded")==null || x.attr("compareadded")=="0") {
		                x.addClass("sccompareadded");
                        x.attr("compareadded","1");
                    } else {
                        x.removeClass("sccompareadded");
                        x.attr("compareadded","0");
                    }
                    if (x.attr("compareadded")=="1") {
                        addToCompare(x);
                    } else {
                        removeFromCompare(x);
                    }
		        }
		        
		        if (!isInited) {
		            var el=null;
    		        
		            switch(O.buttonMode) {
		                case "checkbox": 
		                    var html="<div class=sccomparebutton><input type=checkbox><span>";
		                    html+=O.buttonLinkToOpen ? ("<a href=#>" + O.buttonText + "</a>") : O.buttonText;
		                    html+="</span></div>";
		                    el=$(html).each(function() {
		                        $("input:checkbox",this).click(function() {
		                            toggleCompare($(this.parentNode));
		                        });
		                    });
		                    break;
		                case "link": 
		                    el=$("<a class=sccomparebutton href=#>" + O.buttonText + "</a>").click(function(e) {
		                        toggleCompare($(this));
		                        e.preventDefault();
		                    });
		                    break;
		            }
    		        
		            $(el).appendTo(this);
    		        
		            if (O.buttonMode=="checkbox" && O.buttonLinkToOpen) {
		                $("span a",el).click(function(e) {
		                    builtComparePopup();
		                    e.preventDefault();
		                    });
		            }
                    
                    for (var i=0;i<O.merchantProperties.length;i++) {
                        var b=true;
                        for(var j=0;j<O.popupProperties.length;j++) {
                            if (O.merchantProperties[i][0]==O.popupProperties[j][0]) {
                                b=false;
                                O.popupProperties[j]=O.merchantProperties[i];
                                break;
                            }
                        }
                        if (b) {
                            O.popupProperties[O.popupProperties.length]=O.merchantProperties[i];
                        }
                    }
                    
                    for(var i=0;i<O.popupProperties.length;i++) { 
                        var p=O.popupProperties[i];
                        if (!$.isArray(p)) {
                            O.popupProperties[i]=[p,p,"text",""];
                            p=O.popupProperties[i];
                        }
                        else {
                            if (p[1]==undefined || p[1]==null) p[1]=p[0];
                            if (p[2]==undefined || p[2]==null) p[2]="text";
                            if (p[3]==undefined || p[3]==null || p[3]=="") p[3]="_default";
                        } 
                        if (isGrouped==false && p[3]!="_default") {
                            isGrouped=true;
                        }
                    }        

                    if ($.isFunction(O.init)) {
		                O.init.call(el, this, el);
		                var cV=$.cookie(O.cookie);
		                if (cV!=null) {
		                    var ct=cV.split(",");
		                    if (sc_compare_items!=undefined) sc_compare_items=[];
		                    for (var i=0;i<ct.length;i++) {
		                        var b=true;
		                        for (var j=0;j<sc_compare_items.length;j++) {
		                            if (sc_compare_items[j].id==ct[i]) {b=false;break;}
		                        }
                                if (b) sc_compare_items[sc_compare_items.length]={id:ct[i],loaded:false};
		                    }
		                };
		                if (sc_compare_items!=undefined) {
	                        for (var i=0;i<sc_compare_items.length;i++) {
	                            if (sc_compare_items[i].id==el.attr(O.itemAttribute)) {
	                                if ($("input:checkbox",el).length==1) 
	                                    $("input:checkbox",el).click();
	                                else
	                                    $(el).click();
	                            }
	                        }
	                    }
		            }
		        }
		    });
        }
    });
})(jQuery);

$(window).scroll(
	function(){
	    var ws=$(window).scrollTop();
	    $("#__dimScreen").css("top",ws + "px");
    }
);

if (window.scDp2DrawCallback){

    scDp2DrawCallback.add(function() {
    
        $("#paging td.infoCell").scComparison(window.scComparisonConfig);
    });
}

if (window.scPaging) {
    scPaging.addEvent("onAfterRender",function() {
        $("td.scpinfocell,td.scpListCell div.scpinfo").each(function() {
            if (!$(this).hasClass("empty") && $(".price,.sale-price",this).length>=1)
                $(this).scComparison(window.scComparisonConfig);
        });
    });
}

if ($("#paging").length==0) {
    $(function() {
        $("#contents #contents-table td").scComparison(window.scComparisonConfig);
    });
}
