(function($){

	//Function for Modal, added on January 18, 2010
	$.fn.modal = function(){
	    return this.each(function(){
	        var wpDialogOptions = {
	            width: 655,
	            resizable: false,
	            draggable: false,
	            autoOpen: false
	        };
	        
	        var m = $(this).dialog(wpDialogOptions).dialog("open");
	        m.find(".modalClose").click(function(){
	            m.dialog("close");
	            return false;
	        });
	    
	    
	    });
	
	};

    
    //Function for dashboard mysites page
    $.fn.wpDashboard = function() {
        
        return this.each(function() {
        
            var dashboard = $(this);
            var speed = 500;
            //insert  border blocks
                //these can also just be inserted into the html instead
            dashboard.find(".dashboardBlocks > li").append('<div class="wb_top" ></div> <div class="wb_bottom"></div>');
            //set up click action for "show dashboard" link
            $("#dashboardCompact .dashboardFooter > a").click(function(){ 
                dashboard.css({height:"125px"});
                $("#dashboardCompact").animate({opacity:0},{queue:false, duration:speed}).slideUp(speed, function(){ $(this).css({display:"none"});});
                $("#dashboardFull").css({opacity:0}).animate({opacity:1},{queue:false, duration:speed}).slideDown(speed);
                return false; 
            });
            //set up click action for "hide dashboard" link
            $("#dashboardFull .dashboardFooter > a").click(function(){ 
                dashboard.css({height:"125px"});
                $("#dashboardFull").animate({opacity:0},{queue:false, duration:speed}).slideUp(speed, function(){$(this).css({display:"none"});});
                $("#dashboardCompact")
                    .css({opacity:0})
                    .animate({opacity:1},{queue:false, duration:speed})
                    .slideDown(speed, function(){ 
                        $("#dashboard").height("45px");  
                });
                
                return false; 
                
            });
        
        
        
         });
     };
     
     /* Set up and functions for mySites */
     
     $.fn.wpMySites = function() {
        
        return this.each(function() {
            
            mySitesContainer = $(this);
            //action when clicking a checkbox
            $("#mysiteListing tr td input:checkbox").click(function(){ this.checked==false?deactivateRow(this):activateRow(this); }); 
            //start with messages div hidden, include border boxes
            $("#messages").css({display:"none"}).append('<div class="wb_top" ></div> <div class="wb_bottom"></div>');
            //select all, select none
            $("#mysiteListing .selectAll").click(function(e){ $("#mySiteList input:checkbox").each(function(){ this.checked="checked"; activateRow(this); }); return false;});
            $("#mysiteListing .selectNone").click(function(e){ $("#mySiteList input:checkbox").each(function(){ this.checked=false; deactivateRow(this); }); return false;});

            $("#mysiteListing .selectAll").click(function(e){ $("#textAdTable input:checkbox").each(function(){ this.checked="checked"; activateRow(this); }); return false;});
            $("#mysiteListing .selectNone").click(function(e){ $("#textAdTable input:checkbox").each(function(){ this.checked=false; deactivateRow(this); }); return false;});

            //set up the draggable rows
            $("#mySiteList > tbody > tr").draggable({
                appendTo:"body",
                cursor:"pointer",
                cursorAt:{top:20,left:100},
                helper:function(){
                    //if it's an active row, grab all the rows
                    if($(this).hasClass("active")){
                        var inLength = $("#mySiteList input:checkbox:checked").length;
                        //this is the drag box that you see when you drag
                        return $('<div class="dragBox"><div class="back"></div><div class="front"><p><strong>'+inLength+' Site'+(inLength!=1?'s':'')+'</strong></p><p>Drag to a Group</p></div></div>');
                    }
                    //otherwise just grab the dragged row
                    else{
                        //this is the drag box that you see when you drag
                        return $('<div class="dragBox"><div class="back"></div><div class="front"><p><strong>1 Site</strong></p><p>Drag to a Group</p></div></div>');
                    }
                }
            });
            

        
            var activateRow = function(input){

                var row = $(input).parents("tr");
                
                $(row).addClass("active");
                
                
                
            
            };
            
            var deactivateRow = function(input){
                
                var row = $(input).parents("tr");
                $(row).removeClass("active");
            
            };
            
            //set up the droppable list elements
            $("#myGroupsList li.dropTarget").droppable({
                accept: "#mySiteList > tbody > tr",
                activeClass: 'droppable-active',
                hoverClass: 'droppable-hover',
                tolerance: 'pointer',
                drop: function(ev, ui) {
                    var dropEl = this;
                    
                    var dragEl = $(ui.draggable);
                    
                    if($(dragEl).hasClass("active")){
                        var data = $("#mysiteForm input:checkbox:checked[name='SiteID']").serialize();
                    }
                    else{

                        var data = "SiteID="+$(dragEl).find("input:checkbox[name='SiteID']").attr("value");
                    }
                    
                    
                    var group_id = $(this).find("a").attr("id");
                    group_id = group_id.substr(6);
                    data = data + "&group_id="+escape(group_id);
                    
                    //any additional data can be added to the end of this query string
                    
                    
                    var url = "/ajaxResponse/mysitesAjax.cfm?"+data;
                    $.getJSON(url, function(json){
                        //callback function uses the json data from the ajax to update
                        //the group count and insert the message.
                        //any element on the page can be updated this way, as needed. 
                        $(dropEl).find("span.count").text("("+json.curGroupCount+")");
                        $("#messages").html("<p>"+json.message+"</p>").show();
                        
                    });

                    

                    
                }
            });
            
            //just a line to activate already-checked rows, if there are any
            $("#mySiteList input:checkbox:checked").each( function(){ activateRow(this); });
        
        
        });
     
     
        
     };
     
     
     $.fn.wpBatchAdd = function() {
        
        return this.each(function() {
            
            var container = $(this);
            //drop arrow toggling
            $("#batchList .info .dropArrow").click(function(){ 
                $(this).parent().parent().toggleClass("expanded"); 
                return false; 
            });
            
            //activations for rows
            container.find("#domains a.selectAll").click(function(){ $("#domainList li input:checkbox").each(function(){ this.checked="checked"; activateRow(this); }); return false;});
            $("#domainList li label").click(function(){ 
                var inEl = $(this).find("input:checkbox")[0];
                inEl.checked==false?deactivateRow(inEl):activateRow(inEl);  
            });
            
                    
            
            
            
            var activateRow = function(inputEl){
                var row = $(inputEl).parent().parent();
                $(row).addClass("active");
            };
            var deactivateRow = function(inputEl){
                
                var row = $(inputEl).parent().parent();
                $(row).removeClass("active");
            
            };

        
        
        });
    }
    
    $.fn.wpHelp = function() {
        
        return this.each(function() {
            
            $(this).click(function(){
            
                $.get($(this).attr("href"),{},function(data){
                    $(data).modal();
                },"html");
                    
                
            
            
                return false;
            });

        
        
        });
    }
    
    $.fn.wpSortableTable = function(userOptions){
    
        return this.each(function() {
            var options = {};
            options = $.extend({}, userOptions, options);
            $(this).find("td").each(function(){
                $(this).css({width:$(this).width()+"px"});
            });
            var tbody = $(this);
            $(this).sortable({
                axis:"y",
                forceHelperSize:true,
                forcePlaceholderSize:true,
                placeholder:"placeHolder",
                helper:function(a,b,c){
                    var orig = b;
                    var help = b.clone();
                    help.children().each(function(i){
                        $(this).width(orig.children().eq(i).width());
                    });
                    return help;
                    
                },
                
                update:function(e,ui){
                    
                    $(this).find("tr:even").removeClass("alt");
                    $(this).find("tr:odd").addClass("alt");
                    var data = tbody.sortable("serialize");
                    for(param in options.postParams){
                        data = data + "&"+param+"="+options.postParams[param];
                    }
                    $.ajax({
                        type:"POST",
                        dataType: "json",
                        url: options.location,
                        data: data,
                        success: function(o){
                            $(".message").html(o.message);
                        },
                        error: function(o){
                            $(".message").html("There was an error: "+o.statusText);
                        }
                    });
                    
                    
                }
            
            
            
            });
            
            
            
        
        });
    
    
    };
    

    $.fn.wpSiteInfo = function(){
    
        return this.each(function(){
            var theLink = $(this);
            theLink.click(function(){
                theLink.addClass("loading");
                $(".siteInfoOverlay").remove();
                $.get(theLink.attr("href"), function(data){
                    var t = $('<div class="w"><a href="#" class="close">close</a><span class="nubbin"></span></div>').append(data);
                    $('<div class="siteInfoOverlay"></div>')
                        .append(t).css({top:(theLink.offset().top-200)+"px", left:(theLink.offset().left+19)+"px"})
                        .appendTo("body")
                        .find("a.close").click(function(){
                            $(this).parents(".siteInfoOverlay").remove();
                            theLink.removeClass("infoActive");
                            $(".siteInfoBackdrop").remove();
                            return false;
                        });
                    theLink.removeClass("loading").addClass("infoActive");
                    $('<div class="siteInfoBackdrop"></div>').appendTo("body");
                
                },"html");
                
                
                return false;
            });
        
        
        });
    };


    /*
    START NEW DOMAIN APPS FUNCTIONALITY
    */ 
	
    //list crop function
    $.fn.listCrop=function(c){var d=$(this),e=$("<ul></ul>"),f=d.children(),g=0;if(f.length>c){f.each(function(a,b){if(a>=c){$(b).remove().appendTo(e);g++}});$('<li class="listCrop"><a href="#" class="c">+ '+g+" more</a></li>").click(function(a){if($(a.target).is(".listCrop ul a"))return true;else{$(this).toggleClass("open");var b=$(this);$(this).hasClass("open")?$("body").bind("click.wpListCrop",function(h){if(!$(h.target).is(".listCrop ul a")){b.trigger("click");return false}}):$("body").unbind("click.wpListCrop"); return false}}).append(e).appendTo(d)}};
    
    //picker function
$.fn.wpPicker=function(h){var f=$(this);$.get(h.url,function(l){var b=$(l);b.dialog({width:655,resizable:false,draggable:false,autoOpen:false});var c=b.find(".results ul");if(h.type=="domains"){var g={};b.find(".org .selectedResults");var j=function(){if(!$(this).hasClass("noResults")){$(this).toggleClass("selected");if($(this).hasClass("selected"))g[$(this).attr("data-value")]=$(this).text();else delete g[$(this).attr("data-value")]}},k=function(){c.fadeOut("fast",function(){$(this).empty();$(this).parent().addClass("loading"); $.post(h.resultsUrl,{userInput:$("#filter").val(),group:b.find(".org .selected a").attr("data-value")},function(a){c.parent().removeClass("loading");$(a).find("li").each(function(){$(this).appendTo(c).click(j);g[$(this).attr("data-value")]!==undefined&&$(this).addClass("selected")});c.fadeIn("fast")},"html")})};b.find(".org a").click(function(){var a=$(this);b.find(".org .selected").removeClass("selected");$(this).parent().addClass("selected");a.is(".selectedResults")?c.fadeOut("fast",function(){$(this).empty(); $.each(g,function(d,e){$('<li class="selected" data-value="'+d+'">'+e+"</li>").appendTo(c).click(j)});c.fadeIn("fast")}):k();return false});var i;$("#filter").focus(function(){var a=$(this).val(),d=$(this);i=setInterval(function(){var e=d.val();if(e!=a){a=e;k()}},900)}).blur(function(){clearInterval(i)});b.find(".modalFooter .continue").click(function(){var a=$(this).closest("form");$.each(g,function(d){$('<input type="hidden" value="'+d+'" name="domains[]" />').appendTo(a)});a.submit();return false}); b.find(".inputClear").click(function(){$("#filter").val("").trigger("keyup");return false});f.click(function(){b.dialog("open");return false})}else{f.find(".set, .change").click(function(){b.dialog("open");return false});$("#filter").focus(function(){var a=$(this).val(),d=$(this);i=setInterval(function(){var e=d.val();e!=a&&e.length>2&&c.fadeOut("fast",function(){$(this).empty();$("#pickerContent").addClass("loading");$.post(h.resultsUrl,{userInput:e},function(m){$(m).find("li").appendTo(c);$("#pickerContent").removeClass("loading"); c.children().click(function(){if(!$(this).hasClass("noResults")){c.find(".selected").removeClass("selected");$(this).addClass("selected")}});c.fadeIn("fast");a=e},"html")})},900)}).blur(function(){clearInterval(i)});b.find(".modalFooter .sButton").click(function(){var a=c.find(".selected"),d=a.text();a=a.attr("data-value")!==undefined?a.attr("data-value"):a.text();f.find(".value").text(d);f.removeClass("empty");d=b.find(":hidden").remove().clone();f.find("input").remove().end().append(d.val(a));b.dialog("close"); return false})}$(".ui-dialog #modalInner .modalFooter .modalClose").live("click",function(){b.dialog("close");return false})},"html")};  	
    /*
    END NEW DOMAIN APPS FUNCTIONALITY
    */ 	
    
    $(function(){
    
		$("#appDetail .uninstall").wpHelp();
		$("#appDetail .editpop").wpHelp();
		$("#domainAppsList .uninstall").wpHelp();
		$("#domainAppsList .editpop").wpHelp();
	
        $("a.checkArticles").live("click",function(e){
            e.preventDefault();
            $.post($(this).attr("href"),{keywords:escape($("#keywords").val())},function(data){
                $(data).modal();
            },"html");
            
        
        });
        
		$("#catList").listCrop(15);
		$("#myGroupsList").listCrop(10);
		
        $(".datefieldinput").datepicker();
    
        $(".gOptions").each(function(){
            var opt = $(this);
            $(this).parent().hover(function(){ opt.show(); },function(){opt.hide();});
            
            $(this).find("a").wpHelp();
                
        });
        
        
        $(".siteInfo").wpSiteInfo();


// show/hide 

$("input.showHide:radio").bind("click.showHide",function(){
    if($(this).is(":checked")){
        var action = $(this).attr("rel").substr(0,4);
        if(action=="show"){
            $("." + $(this).attr("rel").substring(5)).show();
        }
        else{
            $("." + $(this).attr("rel").substring(5)).hide();
        }
    }
    $(this).closest(".formBlock").hide().show();
    
}).filter(":checked").trigger("click.showHide");

// END show/hide 
    
    });


// Category Picker

    $.fn.categoryPicker = function(options){
        var ucwords = function(str){
            return (str+'').replace(/^(.)|\s(.)/g, function ( $1 ) { return $1.toUpperCase( ); } );
        };
        var modalContainer = $('#modalInner').remove().dialog({
            width: 655,
            resizable: false,
            draggable: false,
            autoOpen: false
        });
        var container = $(this);
        var int;
        var selectedCategory = false;
        var cpListing = $("#cpListing").height(0);
        var cpMore = $("#cpMore").hide();
        var cpCategories = $("#cpCategories").hide();
        $(".ui-dialog #modalInner > div.modalContent > div.modalFooter a.modalClose").live("click",function(){
            modalContainer.dialog("close");
            return false;
        });
        modalContainer.find(".saveCategory").click(function(){
            
            if(selectedCategory === false){
                
            }
            else{
                container.find(".i")
                    .find("img,a.choose,div.cat").remove().end()
                    .append('<div class="cat">'+selectedCategory.formattedCat+'</div>')
                    .append($('<img src="' + selectedCategory.image + '" class="categoryImg" />'))
                    .find("input.cat").val(selectedCategory.category).end()
                    .closest("li").addClass("selected")
                    .closest("ul").hide().show();
                container.find(".h").html('<a href="#" class="change">change</a>');
                modalContainer.dialog("close");
            }
            return false;
        });
        modalContainer.find(".startOver").hide().click(function(){
            
            $("#mSearch").val("");
            cpCategories.empty().add(cpMore.find("img").remove().end().find(".note").show().end()).fadeOut("fast");
            
            cpListing.animate({height:0,padding:0},"normal",function(){ $(this).addClass("empty"); });
            modalContainer.find(".startNote").show();
            $(this).hide();
            return false;
        });
        modalContainer.find("#mSearch").focus(function(){
        
            var value = $(this).val();
            var tInput = $(this);
            int = setInterval(function(){
                
                if(tInput.val() != value && tInput.val().length > 2){
                    cpMore.add(cpCategories).fadeOut("fast");
                    value = tInput.val();
                    modalContainer.find(".startNote").hide().end().find(".startOver").show();
                    cpMore.find("img:visible").fadeOut("fast",function(){ cpMore.find("img").remove().end().find(".note").fadeIn("fast"); });
                    selectedCategory = false;
                    cpListing.removeClass("empty").addClass("loading").animate(
                    { height: "160px",padding: "10px" },
                    "medium",
                    function(){

                        $.post(options.url,{userInput:value},function(data){
                            var catContainer = $("#cpCategories").empty();
                            
                            if(data.length){
                                $.each(data,function(i,key){
                                    var cKey = key;
                                    cKey.formattedCat = ucwords(cKey.category.replace(/_/g," ").replace(">","&raquo;"));
                                    cKey.category = cKey.category.replace(">","&gt;");
                                    var timg = $('<img src="' + cKey.image + '" />').hide().appendTo($("#cpMore"));
                                    $('<li>'+cKey.formattedCat+'</li>')
                                        .appendTo(catContainer)
                                        .hover(function(){ $(this).addClass("hover"); }, function(){ $(this).removeClass("hover"); })
                                        .click(function(){
                                            catContainer.find(".selected").removeClass("selected");
                                            $(this).addClass("selected");
                                            selectedCategory = cKey;
                                                $("#cpMore img:visible, #cpMore .note:visible").fadeOut("fast", function(){ timg.fadeIn("fast"); });
                                            });
                                });
                            }
                            else{
                                $('<li class="noResults">No results found.</li>').appendTo(catContainer);
                                $("#cpMore img:visible").fadeOut("fast");
                            }
                            cpListing.removeClass("loading empty");
                            cpCategories.add(cpMore).fadeIn("medium");
                        },"json");
                    }
                    );
                }
            },800);
        }).blur(function(){
            clearInterval(int);
        });
        container.find("a.choose,a.change").live("click",function(){
            $("#mSearch").val("");
            cpCategories.empty().hide();
            cpMore.hide().find("img").remove().end().find(".note").show();
            cpListing.addClass("empty").css({height:0,padding:0});
            modalContainer.dialog("open");
            return false;
        
        });
    };
    


// End Category Picker

    
})(jQuery);
