var grp={jQuery:jQuery.noConflict(!0)},django={jQuery:grp.jQuery.noConflict(!0)},inputTypes=["[type='search']","[type='email']","[type='url']","[type='tel']","[type='number']","[type='range']","[type='date']","[type='month']","[type='week']","[type='time']","[type='datetime']","[type='datetime-local']","[type='color']"].join(",");!function(a){grappelli.getFormat=function(a){if("date"==a){var b=DATE_FORMAT.toLowerCase().replace(/%\w/g,function(a){return a=a.replace(/%/,""),a+a});return b}},grappelli.cleanInputTypes=function(){a("form").each(function(){a(this).find(":input").filter(inputTypes).each(function(){a(this).attr("type","text")})})},grappelli.initDateAndTimePicker=function(){a("p.datetime").each(function(){var b=a(this).html();b=b.replace(/^\w*: /,""),b=b.replace(/<br>[^<]*: /g,"<br>"),a(this).html(b)});var b={constrainInput:!1,showOn:"button",buttonImageOnly:!1,buttonText:"",dateFormat:grappelli.getFormat("date"),showButtonPanel:!0,showAnim:"",beforeShow:function(a,b,c){grappelli.datepicker_instance=this}},c=a("input[class*='vDateField']:not([id*='__prefix__'])");c.datepicker(b),"undefined"!=typeof IS_POPUP&&IS_POPUP&&c.datepicker("disable"),a(document).on("click",".ui-datepicker-current",function(){a.datepicker._selectDate(grappelli.datepicker_instance),grappelli.datepicker_instance=null}),a("input[class*='vTimeField']:not([id*='__prefix__'])").grp_timepicker()},grappelli.initFilter=function(){a("a.grp-pulldown-handler").click(function(){var b=a(this).closest(".grp-pulldown-container");a(b).toggleClass("grp-pulldown-state-open").children(".grp-pulldown-content").toggle()}),a("a.grp-pulldown-handler").bind("mouseout",function(){a(this).blur()}),a(".grp-filter-choice").change(function(){location.href=a(this).val()})},grappelli.initSearchbar=function(){var b=a("input.grp-search-field");b.focus()},grappelli.updateSelectFilter=function(a){"undefined"!=typeof SelectFilter&&(a.find(".selectfilter").each(function(a,b){var c=b.name.split("-");SelectFilter.init(b.id,c[c.length-1],!1,"{% admin_media_prefix %}")}),a.find(".selectfilterstacked").each(function(a,b){var c=b.name.split("-");SelectFilter.init(b.id,c[c.length-1],!0,"{% admin_media_prefix %}")}))},grappelli.reinitDateTimeFields=function(a){a.find(".vDateField").datepicker({constrainInput:!1,showOn:"button",buttonImageOnly:!1,buttonText:"",dateFormat:grappelli.getFormat("date")}),a.find(".vTimeField").grp_timepicker()},grappelli.get_app_label=function(a){var b=a.next("a");if(b.length>0){var c=b.attr("href").split("?")[0].split("/");return c[c.length-3]}return!1},grappelli.get_model_name=function(a){var b=a.next("a");if(b.length>0){var c=b.attr("href").split("?")[0].split("/");return c[c.length-2]}return!1},grappelli.get_query_string=function(a){var b=a.next("a");if(b.length>0){var c=b.attr("href").split("/");return pairs=c[c.length-1].replace("?","").split("&"),pairs.join(":")}return!1}}(grp.jQuery),function(a){var b={init:function(b){return b=a.extend({},a.fn.grp_autocomplete_fk.defaults,b),this.each(function(){var g=a(this);g.attr({tabindex:"-1",readonly:"readonly"}).addClass("grp-autocomplete-hidden-field"),g.next().next()&&"errorlist"!=g.next().next().attr("class")&&"grp-help"!=g.next().next().attr("class")&&g.next().next().remove(),g.next().after(c).after(d(g.attr("id"))),g.parent().wrapInner("<div class='grp-autocomplete-wrapper-fk'></div>"),g.parent().prepend("<input id='"+g.attr("id")+"-autocomplete' type='text' class='vTextField' value='' />"),b=a.extend({wrapper_autocomplete:g.parent(),input_field:g.prev(),remove_link:g.next().next().hide(),loader:g.next().next().next().hide()},a.fn.grp_autocomplete_fk.defaults,b),f(g,b),e(g,b),g.bind("change focus keyup",function(){f(g,b)}),a("label[for='"+g.attr("id")+"']").each(function(){a(this).attr("for",g.attr("id")+"-autocomplete")})})}};a.fn.grp_autocomplete_fk=function(c){return b[c]?b[c].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof c&&c?(a.error("Method "+c+" does not exist on jQuery.grp_autocomplete_fk"),!1):b.init.apply(this,arguments)};var c=function(){var b=a('<div class="grp-loader">loader</div>');return b},d=function(b){var c=a('<a class="grp-related-remove"></a>');return c.attr("id","remove_"+b),c.attr("href","javascript://"),c.attr("onClick","return removeRelatedObject(this);"),c.hover(function(){a(this).parent().toggleClass("grp-autocomplete-preremove")}),c},e=function(b,c){c.wrapper_autocomplete.find("input:first").bind("focus",function(){c.wrapper_autocomplete.addClass("grp-state-focus")}).bind("blur",function(){c.wrapper_autocomplete.removeClass("grp-state-focus")}).autocomplete({minLength:1,autoFocus:!0,delay:1e3,source:function(d,e){a.ajax({url:c.autocomplete_lookup_url,dataType:"json",data:"term="+encodeURIComponent(d.term)+"&app_label="+grappelli.get_app_label(b)+"&model_name="+grappelli.get_model_name(b)+"&query_string="+grappelli.get_query_string(b),beforeSend:function(a){c.loader.show()},success:function(b){e(a.map(b,function(a){return{label:a.label,value:a.value}}))},complete:function(a,b){c.loader.hide()}})},focus:function(){return!1},select:function(d,e){return c.input_field.val(e.item.label),b.val(e.item.value),b.trigger("change"),b.val()?a(c.remove_link).show():a(c.remove_link).hide(),!1}}).data("ui-autocomplete")._renderItem=function(b,c){return c.value?a("<li></li>").data("item.autocomplete",c).append("<a>"+c.label+"</a>").appendTo(b):a("<li></li>").data("item.autocomplete",c).append("<span class='error'>"+c.label+"</span>").appendTo(b)}},f=function(b,c){a.getJSON(c.lookup_url,{object_id:b.val(),app_label:grappelli.get_app_label(b),model_name:grappelli.get_model_name(b)},function(d){a.each(d,function(e){c.input_field.val(d[e].label),b.val()?a(c.remove_link).show():a(c.remove_link).hide()})})};a.fn.grp_autocomplete_fk.defaults={autocomplete_lookup_url:"",lookup_url:""}}(grp.jQuery),function(a){var b={init:function(b){return b=a.extend({},a.fn.grp_autocomplete_generic.defaults,b),this.each(function(){var i=a(this);i.attr({tabindex:"-1",readonly:"readonly"}).addClass("grp-autocomplete-hidden-field");var j=a(b.content_type).val()||a(b.content_type).find(":checked").val();j&&i.after(c).after(d(i.attr("id"))).after(e(i.attr("id"),j)),i.parent().wrapInner("<div class='grp-autocomplete-wrapper-fk'></div>"),i.parent().prepend("<input id='"+i.attr("id")+"-autocomplete' type='text' class='vTextField' value='' />"),b=a.extend({wrapper_autocomplete:a(this).parent(),input_field:a(this).prev(),remove_link:i.nextAll("a.grp-related-remove").hide(),loader:i.nextAll("div.grp-loader").hide()},a.fn.grp_autocomplete_generic.defaults,b),j&&h(i,b),g(i,b),i.bind("change focus keyup",function(){h(i,b)}),a(b.content_type).bind("change",function(){f(a(this),b)}),a("label[for='"+i.attr("id")+"']").each(function(){a(this).attr("for",i.attr("id")+"-autocomplete")})})}};a.fn.grp_autocomplete_generic=function(c){return b[c]?b[c].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof c&&c?(a.error("Method "+c+" does not exist on jQuery.grp_autocomplete_generic"),!1):b.init.apply(this,arguments)};var c=function(){var b=a('<div class="grp-loader">loader</div>');return b},d=function(b){var c=a('<a class="grp-related-remove"></a>');return c.attr("id","remove_"+b),c.attr("href","javascript://"),c.attr("onClick","return removeRelatedObject(this);"),c.hover(function(){a(this).parent().toggleClass("grp-autocomplete-preremove")}),c},e=function(b,c){var d=a('<a class="related-lookup"></a>');return d.attr("id","lookup_"+b),d.attr("href",window.ADMIN_URL+MODEL_URL_ARRAY[c].app+"/"+MODEL_URL_ARRAY[c].model+"/?"),d.attr("onClick","return showRelatedObjectLookupPopup(this);"),d},f=function(b,f){var g=a(f.object_id);g.val(""),g.prev().val(""),g.nextAll("a.related-lookup").remove(),g.nextAll("a.grp-related-remove").remove(),g.nextAll("div.grp-loader").remove();var h=a(b).val()||a(b).find(":checked").val();h&&(g.after(c).after(d(g.attr("id"))).after(e(g.attr("id"),h)),f.remove_link=g.nextAll("a.grp-related-remove").hide(),f.loader=g.nextAll("div.grp-loader").hide())},g=function(b,c){c.wrapper_autocomplete.find("input:first").bind("focus",function(){c.wrapper_autocomplete.addClass("grp-state-focus")}).bind("blur",function(){c.wrapper_autocomplete.removeClass("grp-state-focus")}).autocomplete({minLength:1,autoFocus:!0,delay:1e3,source:function(d,e){a.ajax({url:c.autocomplete_lookup_url,dataType:"json",data:"term="+encodeURIComponent(d.term)+"&app_label="+grappelli.get_app_label(b)+"&model_name="+grappelli.get_model_name(b)+"&query_string="+grappelli.get_query_string(b),beforeSend:function(b){var d=a(c.content_type).val()||a(c.content_type).find(":checked").val();return d?void c.loader.show():!1},success:function(b){e(a.map(b,function(a){return{label:a.label,value:a.value}}))},complete:function(a,b){c.loader.hide()}})},focus:function(){return!1},select:function(d,e){return c.input_field.val(e.item.label),b.val(e.item.value),b.trigger("change"),b.val()?a(c.remove_link).show():a(c.remove_link).hide(),!1}}).data("ui-autocomplete")._renderItem=function(b,c){return c.value?a("<li></li>").data("item.autocomplete",c).append("<a>"+c.label+"</a>").appendTo(b):a("<li></li>").data("item.autocomplete",c).append("<span class='error'>"+c.label+"</span>").appendTo(b)}},h=function(b,c){a.getJSON(c.lookup_url,{object_id:b.val(),app_label:grappelli.get_app_label(b),model_name:grappelli.get_model_name(b)},function(d){a.each(d,function(e){c.input_field.val(d[e].label),b.val()?a(c.remove_link).show():a(c.remove_link).hide()})})};a.fn.grp_autocomplete_generic.defaults={autocomplete_lookup_url:"",lookup_url:"",content_type:"",object_id:""}}(grp.jQuery),function(a){var b={init:function(b){return b=a.extend({},a.fn.grp_autocomplete_m2m.defaults,b),this.each(function(){var c=a(this);c.attr({tabindex:"-1",readonly:"readonly"}).addClass("grp-autocomplete-hidden-field"),c.next().after(e).after(f(c.attr("id"))),c.parent().wrapInner("<div class='grp-autocomplete-wrapper-m2m'></div>"),c.parent().prepend("<ul class='grp-repr'><li class='grp-search'><input id='"+c.attr("id")+"-autocomplete' type='text' class='vTextField' value='' /></li></ul>"),b=a.extend({wrapper_autocomplete:c.parent(),wrapper_repr:c.parent().find("ul.grp-repr"),wrapper_search:c.parent().find("li.grp-search"),remove_link:c.next().next().hide(),loader:c.next().next().next().hide()},a.fn.grp_autocomplete_m2m.defaults,b),c.parent().find("ul.errorlist")&&c.parent().find("ul.errorlist").detach().appendTo(c.parent().parent()),i(c,b),h(c,b),c.bind("change focus keyup",function(){i(c,b)}),a("label[for='"+c.attr("id")+"']").each(function(){a(this).attr("for",c.attr("id")+"-autocomplete")}),b.wrapper_autocomplete.bind("click",function(c){a(c.target).hasClass("related-lookup")||a(c.target).hasClass("grp-related-remove")||b.wrapper_search.find("input:first").focus()})})}};a.fn.grp_autocomplete_m2m=function(c){return b[c]?b[c].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof c&&c?(a.error("Method "+c+" does not exist on jQuery.grp_autocomplete_m2m"),!1):b.init.apply(this,arguments)};var c=function(a,b,c){var d=[];return a.val()&&(d=a.val().split(",")),d.push(b),a.val(d.join(",")),a.trigger("change"),d.join(",")},d=function(a,b,c){var d=[];return a.val()&&(d=a.val().split(",")),d.splice(b,1),a.val(d.join(",")),a.trigger("change"),d.join(",")},e=function(){var b=a('<div class="grp-loader">loader</div>');return b},f=function(b){var c=a('<a class="grp-related-remove"></a>');return c.attr("id","remove_"+b),c.attr("href","javascript://"),c.attr("onClick","return removeRelatedObject(this);"),c.hover(function(){a(this).parent().toggleClass("grp-autocomplete-preremove")}),c},g=function(b,c,e){var f=a('<li class="grp-repr"></li>'),g=a('<a class="grp-m2m-remove" href="javascript://">'+c+"</a>");f.append(g),f.insertBefore(e.wrapper_search),g.bind("click",function(c){var f=a(this).parent().parent().children("li").index(a(this).parent());d(b,f,e),a(this).parent().remove(),b.val()?a(e.remove_link).show():a(e.remove_link).hide(),c.stopPropagation()}),g.hover(function(){a(this).parent().toggleClass("grp-autocomplete-preremove")})},h=function(b,d){d.wrapper_search.find("input:first").bind("keydown",function(b){b.keyCode===a.ui.keyCode.TAB&&a(this).data("uiAutocomplete").menu.active&&b.preventDefault()}).bind("focus",function(){d.wrapper_autocomplete.addClass("grp-state-focus")}).bind("blur",function(){d.wrapper_autocomplete.removeClass("grp-state-focus")}).autocomplete({minLength:1,autoFocus:!0,delay:1e3,position:{my:"left top",at:"left bottom",of:d.wrapper_autocomplete},open:function(b,c){a(".ui-menu").width(d.wrapper_autocomplete.outerWidth()-6)},source:function(c,e){a.ajax({url:d.autocomplete_lookup_url,dataType:"json",data:"term="+encodeURIComponent(c.term)+"&app_label="+grappelli.get_app_label(b)+"&model_name="+grappelli.get_model_name(b)+"&query_string="+grappelli.get_query_string(b),beforeSend:function(a){d.loader.show()},success:function(b){e(a.map(b,function(a){return{label:a.label,value:a.value}}))},complete:function(a,b){d.loader.hide()}})},focus:function(){return!1},select:function(e,f){return g(b,f.item.label,d),c(b,f.item.value,d),b.val()?a(d.remove_link).show():a(d.remove_link).hide(),a(this).val("").focus(),!1}}).data("ui-autocomplete")._renderItem=function(b,c){return c.value?a("<li></li>").data("item.autocomplete",c).append("<a>"+c.label+"</a>").appendTo(b):a("<li></li>").data("item.autocomplete",c).append("<span class='error'>"+c.label+"</span>").appendTo(b)}},i=function(b,c){a.getJSON(c.lookup_url,{object_id:b.val(),app_label:grappelli.get_app_label(b),model_name:grappelli.get_model_name(b)},function(d){c.wrapper_repr.find("li.grp-repr").remove(),c.wrapper_search.find("input").val(""),a.each(d,function(a){d[a].value&&g(b,d[a].label,c)}),b.val()?a(c.remove_link).show():a(c.remove_link).hide()})}}(grp.jQuery),function(a){a.fn.grp_collapsible=function(c){var d={toggle_handler_slctr:".grp-collapse-handler:first",closed_css:"grp-closed",open_css:"grp-open",on_init:function(){},on_toggle:function(){}},e=a.extend(d,c);return this.each(function(){b(a(this),e)})};var b=function(a,b){b.on_init(a,b),c(a,b)},c=function(a,b){d(a,b)},d=function(a,b){a.children(b.toggle_handler_slctr).click(function(){a.toggleClass(b.closed_css).toggleClass(b.open_css),b.on_toggle(a,b)})}}(grp.jQuery),function(a){a.fn.grp_collapsible_group=function(c){var d={open_handler_slctr:".grp-open-handler",close_handler_slctr:".grp-close-handler",collapsible_container_slctr:".grp-collapse",closed_css:"grp-closed",open_css:"grp-open",on_init:function(){},on_open:function(){},on_close:function(){}};return c=a.extend(d,c),this.each(function(){b(a(this),c)})};var b=function(a,b){b.on_init(a,b),c(a,b)},c=function(a,b){d(a,b),e(a,b)},d=function(b,c){b.find(c.open_handler_slctr).each(function(){a(this).click(function(){c.on_open(b,c),b.find(c.collapsible_container_slctr).removeClass(c.closed_css).addClass(c.open_css),b.removeClass(c.closed_css).addClass(c.open_css)})})},e=function(b,c){b.find(c.close_handler_slctr).each(function(){a(this).click(function(){c.on_close(b,c),b.find(c.collapsible_container_slctr).removeClass(c.open_css).addClass(c.closed_css)})})}}(grp.jQuery),function(a){a.fn.grp_inline=function(b){var c={prefix:"form",addText:"add another",deleteText:"remove",addCssClass:"grp-add-handler",removeCssClass:"grp-remove-handler",deleteCssClass:"grp-delete-handler",emptyCssClass:"grp-empty-form",formCssClass:"grp-dynamic-form",predeleteCssClass:"grp-predelete",onBeforeInit:function(a){},onBeforeAdded:function(a){},onBeforeRemoved:function(a){},onBeforeDeleted:function(a){},onAfterInit:function(a){},onAfterAdded:function(a){},onAfterRemoved:function(a){},onAfterDeleted:function(a){}};return b=a.extend(c,b),this.each(function(){var c=a(this),d=c.find("#id_"+b.prefix+"-TOTAL_FORMS");d.attr("autocomplete","off"),initInlineForms(c,b),initAddButtons(c,b),addButtonHandler(c.find("a."+b.addCssClass),b),removeButtonHandler(c.find("a."+b.removeCssClass),b),deleteButtonHandler(c.find("a."+b.deleteCssClass),b)})},getFormIndex=function(a,b,c){var d=a.find("[id^='id_"+b.prefix+"']").attr("id");return d?parseInt(c.exec(d)[1],10):-1},updateFormIndex=function(b,c,d,e){b.find(":input,span,table,iframe,label,a,ul,p,img,div").each(function(){var b=a(this),c=b.attr("id"),f=b.attr("name"),g=b.attr("for"),h=b.attr("href"),i=b.attr("class"),j=b.attr("onclick");c&&b.attr("id",c.replace(d,e)),f&&b.attr("name",f.replace(d,e)),g&&b.attr("for",g.replace(d,e)),h&&b.attr("href",h.replace(d,e)),i&&b.attr("class",i.replace(d,e)),j&&b.attr("onclick",j.replace(d,e))}),b.find(".prepopulated_field").each(function(){var b=a(this).data("dependency_ids")||[],c=[];a.each(b,function(a,b){c.push(b.replace(d,e))}),a(this).data("dependency_ids",c)})};var b=function(b,c){b.find(".prepopulated_field").each(function(){var b=a(this).data("dependency_ids")||[];a(this).prepopulate(b,a(this).attr("maxlength"))})};initInlineForms=function(b,c){b.find("div.grp-module").each(function(){var b=a(this);c.onBeforeInit(b),""!==b.attr("id")&&b.not("."+c.emptyCssClass).not(".grp-table").not(".grp-thead").not(".add-item").addClass(c.formCssClass),b.find("li.grp-delete-handler-container input").each(function(){a(this).is(":checked")&&b.hasClass("has_original")&&b.toggleClass(c.predeleteCssClass)}),c.onAfterInit(b)})},initAddButtons=function(a,b){var c=a.find("#id_"+b.prefix+"-TOTAL_FORMS"),d=a.find("#id_"+b.prefix+"-MAX_NUM_FORMS");a.find("a."+b.addCssClass);""!==d.val()&&d.val()-c.val()<=0&&hideAddButtons(a,b)},addButtonHandler=function(a,c){a.bind("click",function(){var d=a.parents(".grp-group"),e=d.find("#id_"+c.prefix+"-TOTAL_FORMS"),f=d.find("#id_"+c.prefix+"-MAX_NUM_FORMS"),g=(d.find("a."+c.addCssClass),d.find("#"+c.prefix+"-empty"));c.onBeforeAdded(d);var h=parseInt(e.val(),10),i=g.clone(!0);i.removeClass(c.emptyCssClass).attr("id",g.attr("id").replace("-empty",h));var j=/__prefix__/g;updateFormIndex(i,c,j,h),i.insertBefore(g).addClass(c.formCssClass),e.val(h+1),0!==f.val()&&""!==f.val()&&f.val()-e.val()<=0&&hideAddButtons(d,c),b(i,c),c.onAfterAdded(i)})},removeButtonHandler=function(b,c){b.bind("click",function(){var d=b.parents(".grp-group"),e=a(this).parents("."+c.formCssClass).first(),f=d.find("#id_"+c.prefix+"-TOTAL_FORMS"),g=d.find("#id_"+c.prefix+"-MAX_NUM_FORMS"),h=/-(\d+)-/,i=getFormIndex(e,c,h);c.onBeforeRemoved(e),e.remove(),f.val(parseInt(f.val(),10)-1),0!==g.val()&&g.val()-f.val()>0&&showAddButtons(d,c),d.find("."+c.formCssClass).each(function(){var b=a(this),d=getFormIndex(b,c,h);d>i&&updateFormIndex(b,c,h,"-"+(d-1)+"-")}),c.onAfterRemoved(d)})},deleteButtonHandler=function(b,c){b.bind("click",function(){var b=a(this).prev(),d=a(this).parents("."+c.formCssClass).first();c.onBeforeDeleted(d),d.hasClass("has_original")&&(d.toggleClass(c.predeleteCssClass),b.prop("checked")?b.removeAttr("checked"):b.prop("checked",!0)),c.onAfterDeleted(d)})},hideAddButtons=function(a,b){var c=a.find("a."+b.addCssClass);c.hide().parents(".grp-add-item").hide(),c.closest(".grp-module.grp-transparent").hide()},showAddButtons=function(a,b){var c=a.find("a."+b.addCssClass);c.show().parents(".grp-add-item").show(),c.closest(".grp-module.grp-transparent").show()}}(grp.jQuery),function(a){var b={init:function(b){return b=a.extend({},a.fn.grp_related_fk.defaults,b),this.each(function(){var d=a(this),e=d.parent();e.find("a.related-lookup").next().is("strong")&&(e.find("a.related-lookup").get(0).nextSibling.nodeValue="",e.find("a.related-lookup").next("strong").remove()),e.find("a.related-lookup").after(b.placeholder),d.addClass("grp-has-related-lookup"),c(d,b),d.bind("change focus keyup",function(){c(d,b)})})}};a.fn.grp_related_fk=function(c){return b[c]?b[c].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof c&&c?(a.error("Method "+c+" does not exist on jQuery.grp_related_fk"),!1):b.init.apply(this,arguments)};var c=function(b,c){var d=b.parent().find(".grp-placeholder-related-fk");a.getJSON(c.lookup_url,{object_id:b.val(),app_label:grappelli.get_app_label(b),model_name:grappelli.get_model_name(b),query_string:grappelli.get_query_string(b)},function(a){""===a[0].label?d.hide():d.show(),d.html('<span class="grp-placeholder-label">'+a[0].label+"</span>")})};a.fn.grp_related_fk.defaults={placeholder:'<div class="grp-placeholder-related-fk"></div>',repr_max_length:30,lookup_url:""}}(grp.jQuery),function(a){var b={init:function(b){return b=a.extend({},a.fn.grp_related_generic.defaults,b),this.each(function(){var f=a(this),g=a(b.content_type).val()||a(b.content_type).find(":checked").val();g&&f.after(b.placeholder).after(c(f.attr("id"),g)),f.addClass("grp-has-related-lookup"),g&&e(f,b),f.bind("change focus keyup",function(){e(f,b)}),a(b.content_type).bind("change",function(){d(a(this),b)})})}};a.fn.grp_related_generic=function(c){return b[c]?b[c].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof c&&c?(a.error("Method "+c+" does not exist on jQuery.grp_related_generic"),!1):b.init.apply(this,arguments)};var c=function(b,c){var d=a('<a class="related-lookup"></a>');return d.attr("id","lookup_"+b),d.attr("href",window.ADMIN_URL+MODEL_URL_ARRAY[c].app+"/"+MODEL_URL_ARRAY[c].model+"/?"),d.attr("onClick","return showRelatedObjectLookupPopup(this);"),d},d=function(b,d){var e=a(d.object_id);e.val(""),e.parent().find("a.related-lookup").remove(),e.parent().find(".grp-placeholder-related-generic").remove();var f=a(b).val()||a(b).find(":checked").val();f&&e.after(d.placeholder).after(c(e.attr("id"),f))},e=function(b,c){var d=b.next().next();a.getJSON(c.lookup_url,{object_id:b.val(),app_label:grappelli.get_app_label(b),model_name:grappelli.get_model_name(b),query_string:grappelli.get_query_string(b)},function(a){""===a[0].label?d.hide():d.show(),d.html('<span class="grp-placeholder-label">'+a[0].label+"</span>")})};a.fn.grp_related_generic.defaults={placeholder:'<div class="grp-placeholder-related-generic" style="display:none"></div>',repr_max_length:30,lookup_url:"",content_type:"",object_id:""}}(grp.jQuery),function(a){var b={init:function(b){return b=a.extend({},a.fn.grp_related_m2m.defaults,b),this.each(function(){var d=a(this);d.parent().find("a.related-lookup").after(b.placeholder),d.next().addClass("grp-m2m"),d.addClass("grp-has-related-lookup"),c(d,b),d.bind("change focus keyup",function(){c(d,b)})})}};a.fn.grp_related_m2m=function(c){return b[c]?b[c].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof c&&c?(a.error("Method "+c+" does not exist on jQuery.grp_related_m2m"),!1):b.init.apply(this,arguments)};var c=function(b,c){a.getJSON(c.lookup_url,{object_id:b.val(),app_label:grappelli.get_app_label(b),model_name:grappelli.get_model_name(b),query_string:grappelli.get_query_string(b)},function(c){values=a.map(c,function(a){return'<span class="grp-placeholder-label">'+a.label+"</span>"}),""===values?b.parent().find(".grp-placeholder-related-m2m").hide():b.parent().find(".grp-placeholder-related-m2m").show(),b.parent().find(".grp-placeholder-related-m2m").html(values.join('<span class="grp-separator"></span>'))})};a.fn.grp_related_m2m.defaults={placeholder:'<div class="grp-placeholder-related-m2m"></div>',repr_max_length:30,lookup_url:""}}(grp.jQuery),function(a){a.widget("ui.grp_timepicker",{options:{template:'<div id="ui-timepicker" class="module" style="position: absolute; display: none;"></div>',timepicker_selector:"#ui-timepicker",offset:{top:0},default_time_list:["now","00:00","01:00","02:00","03:00","04:00","05:00","06:00","07:00","08:00","09:00","10:00","11:00","12:00","13:00","14:00","15:00","16:00","17:00","18:00","19:00","20:00","21:00","22:00","23:00"],time_list:[]},_create:function(){var b=this;a(document).mousedown(function(c){if(b.timepicker.is(":visible")){var d=a(c.target);d[0].id==b.timepicker[0].id||0!==d.parents(b.options.timepicker_selector).length||d.hasClass("hasTimepicker")||d.hasClass("ui-timepicker-trigger")||b.timepicker.hide()}}),a(document).keyup(function(a){27==a.keyCode&&b.timepicker.hide()}),0===a(this.options.timepicker_selector).size()&&a(this.options.template).appendTo("body"),this.timepicker=a(this.options.timepicker_selector),this.timepicker.hide(),this.element.addClass("hasTimepicker"),this.button=a('<button type="button" class="ui-timepicker-trigger"></button>'),this.element.after(this.button),this.element.prop("disabled")?this.button.prop("disabled",!0):this.button.click(function(){b._toggleTimepicker()})},_toggleTimepicker:function(){this.timepicker.is(":visible")?this.timepicker.hide():(this.element.focus(),this._generateTimepickerContents(),this._showTimepicker())},_generateTimepickerContents:function(){var b=this,c="<ul>";0===this.options.time_list.length&&(this.options.time_list=this.options.default_time_list);for(var d=0;d<this.options.time_list.length;d++)if("now"==this.options.time_list[d]){var e=new Date,f=e.getHours(),g=e.getMinutes();f=10>f?"0"+f:f,g=10>g?"0"+g:g,c+='<li class="ui-state-active row">'+f+":"+g+"</li>"}else c+='<li class="ui-state-default row">'+this.options.time_list[d]+"</li>";c+="</ul>",this.timepicker.html(c),this.timepicker.find("li").click(function(){a(this).parent().children("li").removeClass("ui-state-active"),a(this).addClass("ui-state-active"),b.element.val(a(this).html()),b.timepicker.hide()})},_showTimepicker:function(){var a=document.documentElement.clientHeight,b=document.documentElement.scrollTop||document.body.scrollTop,c=this.element.outerHeight(),d=this.timepicker.outerHeight()+c,e=this.element.offset().top,f=this.element.offset().left,g=e-b+d+60;if(a>g){var h=e+c;this.timepicker.css("left",f+"px").css("top",h+"px")}else{var i=e-d+c;this.timepicker.css("left",f+"px").css("top",i+"px")}this.timepicker.show()},destroy:function(){a.Widget.prototype.destroy.apply(this,arguments)}})}(grp.jQuery);