var DeprecationNotifier={logDeprecation:true,MessageTemplate:new Template('Prototype #{type} Warning: #{message}\n#{stack}'),Regexp:new RegExp("@"+window.location.protocol+".*?\\d+\\n","g"),init:function(deprecatedMethods){if(!Prototype.Browser.Gecko)return;deprecatedMethods.each(function(d){var condition=d.condition,type=d.type||'deprecation',message=d.message,namespace=d.namespace,method=d.methodName;namespace[method]=(namespace[method]||function(){}).wrap(function(proceed){var args=$A(arguments).splice(1);if(!condition||condition.apply(this,args))
DeprecationNotifier.notify(message,type);return proceed.apply(proceed,args);});});Element.addMethods();},notify:function(message,type){if(type=='deprecation'&&!DeprecationNotifier.logDeprecation)
return false;this.log(this.MessageTemplate.evaluate({message:message,stack:this.getStack(),type:type.capitalize()}),type);return true;},getStack:function(){try{throw new Error("stack");}catch(e){return e.stack.match(this.Regexp).reject(function(path){return/(prototype|unittest|deprecation)\.js/.test(path);}).join("\n");}},log:function(message,type){if(type==='removal'){console.error(message);}else console.warn(message);}};DeprecationNotifier.init([{methodName:'display',namespace:Toggle,message:'Toggle.display has been deprecated, please use Element.toggle instead.'},{methodName:'show',namespace:Element.Methods,message:'Passing an arbitrary number of elements to Element.show is no longer supported.\n'+
'Use [id_1, id_2, ...].each(Element.show) or $(id_1, id_2, ...).invoke("show") instead.',type:'removal',condition:function(){return arguments.length>1&&!Object.isNumber(arguments[1])}},{methodName:'hide',namespace:Element.Methods,message:'Passing an arbitrary number of elements to Element.hide is no longer supported.\n'+
'Use [id_1, id_2, ...].each(Element.hide) or $(id_1, id_2, ...).invoke("hide") instead.',type:'removal',condition:function(){return arguments.length>1&&!Object.isNumber(arguments[1])}},{methodName:'toggle',namespace:Element.Methods,message:'Passing an arbitrary number of elements to Element.toggle is no longer supported.\n'+
'Use [id_1, id_2, ...].each(Element.toggle) or $(id_1, id_2, ...).invoke("toggle") instead.',type:'removal',condition:function(){return arguments.length>1&&!Object.isNumber(arguments[1])}},{methodName:'clear',namespace:Form.Element.Methods,message:'Passing an arbitrary number of elements to Field.clear is no longer supported.\n'+
'Use [id_1, id_2, ...].each(Form.Element.clear) or $(id_1, id_2, ...).invoke("clear") instead.',type:'removal',condition:function(){return arguments.length>1&&!Object.isNumber(arguments[1])}},{methodName:'present',namespace:Form.Element.Methods,message:'Passing an arbitrary number of elements to Field.present is no longer supported.\n'+
'Use [id_1, id_2, ...].each(Form.Element.present) or $(id_1, id_2, ...).invoke("present") instead.',type:'removal',condition:function(){return arguments.length>1&&!Object.isNumber(arguments[1])}},{methodName:'childOf',namespace:Element.Methods,message:'Element#childOf has been deprecated, please use Element#descendantOf instead.'},{methodName:'Before',namespace:Insertion,message:'Insertion.Before has been deprecated, please use Element#insert instead.'},{methodName:'Top',namespace:Insertion,message:'Insertion.Top has been deprecated, please use Element#insert instead.'},{methodName:'Bottom',namespace:Insertion,message:'Insertion.Bottom has been deprecated, please use Element#insert instead.'},{methodName:'After',namespace:Insertion,message:'Insertion.After has been deprecated, please use Element#insert instead.'},{methodName:'prepare',namespace:Position,message:'Position.prepare has been deprecated.'},{methodName:'within',namespace:Position,message:'Position.within has been deprecated.'},{methodName:'withinIncludingScrolloffsets',namespace:Position,message:'Position.withinIncludingScrolloffsets has been deprecated.'},{methodName:'overlap',namespace:Position,message:'Position.overlap has been deprecated.'},{methodName:'cumulativeOffset',namespace:Position,message:'Position.cumulativeOffset has been deprecated, please use Element#cumulativeOffset instead.'},{methodName:'positionedOffset',namespace:Position,message:'Position.positionedOffset has been deprecated, please use Element#positionedOffset instead.'},{methodName:'absolutize',namespace:Position,message:'Position.absolutize has been deprecated, please use Element#absolutize instead.'},{methodName:'relativize',namespace:Position,message:'Position.relativize has been deprecated, please use Element#relativize instead.'},{methodName:'realOffset',namespace:Position,message:'Position.realOffset has been deprecated, please use Element#cumulativeScrollOffset instead.'},{methodName:'offsetParent',namespace:Position,message:'Position.offsetParent has been deprecated, please use Element#getOffsetParent instead.'},{methodName:'page',namespace:Position,message:'Position.page has been deprecated, please use Element#viewportOffset instead.'},{methodName:'clone',namespace:Position,message:'Position.clone has been deprecated, please use Element#clonePosition instead.'},{methodName:'initialize',namespace:Element.ClassNames.prototype,message:'Element.ClassNames has been deprecated.'},{methodName:'classNames',namespace:Element.Methods,message:'Element#classNames has been deprecated.\n'+
'If you need to access CSS class names as an array, try: $w(element.classname).'},{methodName:'setStyle',namespace:Element.Methods,message:'Use of uncamelized style-property names is no longer supported.\n'+
'Use either camelized style-property names or a regular CSS string instead (see online documentation).',type:'removal',condition:function(element,style){return!Object.isString(style)&&Object.keys(style).join('').include('-');}},{methodName:'getElementsByClassName',namespace:document,message:'document.getElementsByClassName has been deprecated, please use $$ instead.'},{methodName:'getElementsByClassName',namespace:Element.Methods,message:'Element#getElementsByClassName has been deprecated, please use Element#select instead.'},{methodName:'immediateDescendants',namespace:Element.Methods,message:'Element#immediateDescendants has been deprecated, please use Element#childElements instead.'},{methodName:'getElementsBySelector',namespace:Element.Methods,message:'Element#getElementsBySelector has been deprecated, please use Element#select instead.'},{methodName:'toQueryString',namespace:Hash,message:'Hash.toQueryString has been deprecated.\n'+
'Use the instance method Hash#toQueryString or Object.toQueryString instead.'},{methodName:'remove',namespace:Hash.prototype,message:'Hash#remove is no longer supported, use Hash#unset instead.\n'+
'Please note that Hash#unset only accepts one argument.',type:'removal'},{methodName:'merge',namespace:Hash.prototype,message:'Hash#merge is no longer destructive: it operates on a clone of the Hash instance.\n'+
'If you need a destructive merge, use Hash#update instead.',type:'modification'},{methodName:'unloadCache',namespace:Event,message:'Event.unloadCache has been deprecated.'}]);(function(){if(!Prototype.Browser.Gecko)return;var __properties=Object.keys(Hash.prototype).concat(['_object','__properties']);var messages={setting:new Template("Directly setting a property on an instance of Hash is no longer supported.\n"+
"Please use Hash#set('#{property}', #{value}) instead."),getting:new Template("Directly accessing a property of an instance of Hash is no longer supported.\n"+
"Please use Hash#get('#{property}') instead.")};function notify(property,value){var message=messages[arguments.length==1?'getting':'setting'].evaluate({property:property,value:Object.inspect(value)});DeprecationNotifier.notify(message,'removal');}
function defineSetters(obj,prop){if(obj.__properties.include(prop))return;obj.__properties.push(prop);obj.__defineGetter__(prop,function(){checkProperties(this);notify(prop);});obj.__defineSetter__(prop,function(value){checkProperties(this);notify(prop,value);});}
function checkProperties(hash){var current=Object.keys(hash);if(current.length==hash.__properties.length)
return;current.each(function(prop){if(hash.__properties.include(prop))return;notify(prop,hash[prop]);defineSetters(hash,prop);});}
Hash.prototype.set=Hash.prototype.set.wrap(function(proceed,property,value){defineSetters(this,property);return proceed(property,value);});$w('merge update').each(function(name){Hash.prototype[name]=Hash.prototype[name].wrap(function(proceed,object){for(var prop in object)defineSetters(this,prop);return proceed(object);});});$H(Hash.prototype).each(function(method){var key=method.key;if(!Object.isFunction(method.value)||key=='initialize')return;Hash.prototype[key]=Hash.prototype[key].wrap(function(proceed){checkProperties(this);return proceed.apply(proceed,$A(arguments).splice(1));});});Hash.prototype.initialize=Hash.prototype.initialize.wrap(function(proceed,object){this.__properties=__properties.clone();for(var prop in object)defineSetters(this,prop);proceed(object);});})();
