var rAccordion = new Class({
initialize: function(container, toggleClass, elementClass, options){
this.container = container;
this.tClass = toggleClass;
this.eClass = elementClass;
this.options = options;
this.selector = '#' + this.container + ' > .';
this.makeAccordion();
},
makeAccordion: function(){
new Accordion(
$$(this.selector+this.tClass),
$$(this.selector+this.eClass),
this.options
).addEvents({
// The onActive and onComplete events added to the stack here to
// attempt to address some of the css issues.
'onActive': function(toggle){
if(toggle.getParent().getStyle('height') != 0)
toggle.getParent().setStyle('height', '');
},
'onComplete': function(a){
if ($defined(a)) {
var height = 0;
a.getParent().getChildren().each(function(e){
height = height + e.offsetHeight;
});
if(height != a.getParent().offsetHeight && a.getParent().offsetHeight != 0)
a.getParent().setStyle('height','');
}
}
});
this.selector += this.eClass + ' > .';
if($defined($$(this.selector)[0]))
this.makeAccordion();
}
});
window.addEvent('domready', function(){
new rAccordion('container', 'toggle', 'element', {
alwaysHide: true,
onActive: function(toggle){
toggle.addClass('active');
},
onBackground: function(toggle){
toggle.removeClass('active');
}
});
});
/**************************************************************
Script	: Sortable Table
Version	: 1.4
Authors	: Samuel Birch
Desc	: Sorts and filters table elements
Licence	: Open Source MIT Licence
**************************************************************/
var sortableTable = new Class({
getOptions: function(){
return {
overCls: false,
onClick: false,
sortOn: 0,
sortBy: 'ASC',
filterHide: true,
filterHideCls: 'hide',
filterSelectedCls: 'selected'
};
},
initialize: function(table, options){
this.setOptions(this.getOptions(), options);
this.table = $(table);
this.tHead = this.table.getElement('thead');
this.tBody = this.table.getElement('tbody');
this.tFoot = this.table.getElement('tfoot');
this.elements = this.tBody.getElements('tr');
this.filtered = false;
/*for(i=0;i<10;i++){
this.elements.clone().injectInside(this.tBody);
}
this.elements = this.tBody.getElements('tr');*/
this.elements.each(function(el,i){
if(this.options.overCls){
el.addEvent('mouseover', function(){
el.addClass(options.overCls);
}, this);
el.addEvent('mouseout', function(){
el.removeClass(options.overCls);
});
}
if(this.options.onClick){
el.addEvent('click', options.onClick);
}
}, this);
//setup header
this.tHead.getElements('th').each(function(el,i){
if(el.axis){
el.addEvent('click', this.sort.bind(this,i));
el.addEvent('mouseover', function(){
el.addClass('tableHeaderOver');
});
el.addEvent('mouseout', function(){
el.removeClass('tableHeaderOver');
});
el.getdate = function(str){
// inner util function to convert 2-digit years to 4
function fixYear(yr) {
yr = +yr;
if (yr<50) { yr += 2000; }
else if (yr<100) { yr += 1900; }
return yr;
};
var ret;
//
if (str.length>12){
strtime = str.substring(str.lastIndexOf(' ')+1);
strtime = strtime.substring(0,2)+strtime.substr(-2)
}else{
strtime = '0000';
}
//
// YYYY-MM-DD
if (ret=str.match(/(\d{2,4})-(\d{1,2})-(\d{1,2})/)) {
return (fixYear(ret[1])*10000) + (ret[2]*100) + (+ret[3]) + strtime;
}
// DD/MM/YY[YY] or DD-MM-YY[YY]
if (ret=str.match(/(\d{1,2})[\/-](\d{1,2})[\/-](\d{2,4})/)) {
return (fixYear(ret[3])*10000) + (ret[2]*100) + (+ret[1]) + strtime;
}
return 999999990000; // So non-parsed dates will be last, not first
};
//
el.findData = function(elem){
var child = elem.getFirst();
if(child){
return el.findData(child);
}else{
return elem.innerHTML.trim();
}
};
//
el.compare = function(a,b){
var1 = el.findData(a.getChildren()[i]);
var2 = el.findData(b.getChildren()[i]);
//var1 = a.getChildren()[i].firstChild.data;
//var2 = b.getChildren()[i].firstChild.data;
if(el.axis == 'number'){
var1 = parseFloat(var1);
var2 = parseFloat(var2);
if(el.sortBy == 'ASC'){
return var1-var2;
}else{
return var2-var1;
}
}else if(el.axis == 'string'){
var1 = var1.toUpperCase();
var2 = var2.toUpperCase();
if(var1==var2){return 0};
if(el.sortBy == 'ASC'){
if(var1<var2){return -1};
}else{
if(var1>var2){return -1};
}
return 1;
}else if(el.axis == 'date'){
var1 = parseFloat(el.getdate(var1));
var2 = parseFloat(el.getdate(var2));
if(el.sortBy == 'ASC'){
return var1-var2;
}else{
return var2-var1;
}
}else if(el.axis == 'currency'){
var1 = parseFloat(var1.substr(1).replace(',',''));
var2 = parseFloat(var2.substr(1).replace(',',''));
if(el.sortBy == 'ASC'){
return var1-var2;
}else{
return var2-var1;
}
}
}
if(i == this.options.sortOn){
el.fireEvent('click');
}
}
}, this);
},
sort: function(index){
if(this.options.onStart){
this.fireEvent('onStart');
}
//
this.options.sortOn = index;
var header = this.tHead.getElements('th');
var el = header[index];
header.each(function(e,i){
if(i != index){
e.removeClass('sortedASC');
e.removeClass('sortedDESC');
}
});
if(el.hasClass('sortedASC')){
el.removeClass('sortedASC');
el.addClass('sortedDESC');
el.sortBy = 'DESC';
}else if(el.hasClass('sortedDESC')){
el.removeClass('sortedDESC');
el.addClass('sortedASC');
el.sortBy = 'ASC';
}else{
if(this.options.sortBy == 'ASC'){
el.addClass('sortedASC');
el.sortBy = 'ASC';
}else if(this.options.sortBy == 'DESC'){
el.addClass('sortedDESC');
el.sortBy = 'DESC';
}
}
//
this.elements.sort(el.compare);
this.elements.injectInside(this.tBody);
//
if(this.filtered){
this.filteredAltRow();
}else{
this.altRow();
}
//
if(this.options.onComplete){
this.fireEvent('onComplete');
}
},
altRow: function(){
this.elements.each(function(el,i){
if(i % 2){
el.removeClass('altRow');
}else{
el.addClass('altRow');
}
});
},
filteredAltRow: function(){
this.table.getElements('.'+this.options.filterSelectedCls).each(function(el,i){
if(i % 2){
el.removeClass('altRow');
}else{
el.addClass('altRow');
}
});
},
filter: function(form){
var form = $(form);
var col = 0;
var key = '';
form.getChildren().each(function(el,i){
if(el.id == 'column'){
col = Number(el.value);
}
if(el.id == 'keyword'){
key = el.value.toLowerCase();
}
if(el.type == 'reset'){
el.addEvent('click',this.clearFilter.bind(this));
}
}, this);
if(key){
this.elements.each(function(el,i){
if(this.options.filterHide){
el.removeClass('altRow');
}
if(el.getChildren()[col].firstChild.data.toLowerCase().indexOf(key) > -1){
el.addClass(this.options.filterSelectedCls);
if(this.options.filterHide){
el.removeClass(this.options.filterHideCls);
}
}else{
el.removeClass(this.options.filterSelectedCls);
if(this.options.filterHide){
el.addClass(this.options.filterHideCls);
}
}
}, this);
if(this.options.filterHide){
this.filteredAltRow();
this.filtered = true;
}
}
},
clearFilter: function(){
this.elements.each(function(el,i){
el.removeClass(this.options.filterSelectedCls);
if(this.options.filterHide){
el.removeClass(this.options.filterHideCls);
}
}, this);
if(this.options.filterHide){
this.altRow();
this.filtered = false;
}
}
});
sortableTable.implement(new Events);
sortableTable.implement(new Options);
//SLIDER TOGGLE
window.addEvent('domready', function() {
$$('.moreInfoWrapper').each(function(item){
var thisSlider = new Fx.Slide( item.getElement( '.moreInfo' ), { duration: 500 } );
thisSlider.show();
item.getElement( '.divToggle' ).addEvent( 'click', function(){ thisSlider.toggle(); } );
} );
} );
/*************************************************************/
//legacy .extend support
Class.prototype.extend = function(properties){
properties.Extends = this;
return new Class(properties);
};
Array.implement({
copy: function(start, length){
return $A(this, start, length);
}
});
Array.alias({erase: 'remove', combine: 'merge'});
Function.extend({
bindAsEventListener: function(bind, args){
return this.create({'bind': bind, 'event': true, 'arguments': args});
}
});
Function.empty = $empty;
Hash.alias({getKeys: 'keys', getValues: 'values', has: 'hasKey', combine: 'merge'});
var Abstract = Hash;
Element.extend = Element.implement;
Elements.extend = Elements.implement;
Element.implement({
getFormElements: function(){
return this.getElements('input, textarea, select');
},
replaceWith: function(el){
el = $(el);
this.parentNode.replaceChild(el, this);
return el;
},
removeElements: function(){
return this.dispose();
}
});
Element.alias({'dispose': 'remove', 'getLast': 'getLastChild'});
Element.implement({
getText: function(){
return this.get('text');
},
setText: function(text){
return this.set('text', text);
},
setHTML: function(){
return this.set('html', arguments);
},
getHTML: function(){
return this.get('html');
},
getTag: function(){
return this.get('tag');
}
});
Event.keys = Event.Keys;
Element.implement({
setOpacity: function(op){
return this.set('opacity', op);
}
});
Object.toQueryString = Hash.toQueryString;
var XHR = new Class({
Extends: Request,
options: {
update: false
},
initialize: function(url, options){
this.parent(options);
this.url = url;
},
request: function(data){
return this.send(this.url, data || this.options.data);
},
send: function(url, data){
if (!this.check(arguments.callee, url, data)) return this;
return this.parent({url: url, data: data});
},
success: function(text, xml){
text = this.processScripts(text);
if (this.options.update) $(this.options.update).empty().set('html', text);
this.onSuccess(text, xml);
},
failure: function(){
this.fireEvent('failure', this.xhr);
}
});
var Ajax = XHR;
JSON.Remote = new Class({
options: {
key: 'json'
},
Extends: Request.JSON,
initialize: function(url, options){
this.parent(options);
this.onComplete = $empty;
this.url = url;
},
send: function(data){
if (!this.check(arguments.callee, data)) return this;
return this.parent({url: this.url, data: {json: Json.encode(data)}});
},
failure: function(){
this.fireEvent('failure', this.xhr);
}
});
Fx.implement({
custom: function(from, to){
return this.start(from, to);
},
clearTimer: function(){
return this.cancel();
},
stop: function(){
return this.cancel();
}
});
Fx.Base = Fx;
Fx.Style = function(element, property, options){
return new Fx.Tween(element, $extend({property: property}, options));
};
Element.implement({
effect: function(property, options){
return new Fx.Tween(this, $extend({property: property}, options));
}
});
Fx.Styles = Fx.Morph;
Element.implement({
effects: function(options){
return new Fx.Morph(this, options);
}
});
Native.implement([Element, Document], {
getElementsByClassName: function(className){
return this.getElements('.' + className);
},
getElementsBySelector: function(selector){
return this.getElements(selector);
}
});
Elements.implement({
filterByTag: function(tag){
return this.filter(tag);
},
filterByClass: function(className){
return this.filter('.' + className);
},
filterById: function(id){
return this.filter('#' + id);
},
filterByAttribute: function(name, operator, value){
return this.filter('[' + name + (operator || '') + (value || '') + ']');
}
});
var $E = function(selector, filter){
return ($(filter) || document).getElement(selector);
};
var $ES = function(selector, filter){
return ($(filter) || document).getElements(selector);
};
var Json = JSON;
JSON.toString = JSON.encode;
JSON.evaluate = JSON.decode;
Cookie.set = function(key, value, options){
return new Cookie(key, options).write(value);
};
Cookie.get = function(key){
return new Cookie(key).read();
};
Cookie.remove = function(key, options){
return new Cookie(key, options).dispose();
};
Fx.Scroll.implement({
scrollTo: function(y, x){
return this.start(y, x);
}
});
