SitePoint Sponsor

User Tag List

Results 1 to 9 of 9

Hybrid View

  1. #1
    Non-Member
    Join Date
    Aug 2005
    Posts
    56
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Javascript 2 files conflict

    2 javascript files conflict causing both scripts to "malfunction".

    ** Side Note** (I whittled it down to these 2 scripts out of around 8 after I deleted one and the other worked.)

    Anyway below are the 2 files

    Mootools:

    PHP Code:
    //Included scripts
    //moo.js / function.js / array.js / string.js / elements.js / fx.js / dom.js / fxpack.js / tips.js / ajax.js


    //mootools.js: moo javascript tools
    //by Valerio Proietti (http://mad4milk.net) MIT-style license.

    // CREDITS:

    //Class is slightly based on Base.js : http://dean.edwards.name/weblog/2006/03/base/
    //(c) 2006 Dean Edwards, License: http://creativecommons.org/licenses/LGPL/2.1/

    //Some functions are based on those found in prototype.js : http://prototype.conio.net/
    //(c) 2005 Sam Stephenson <sam@conio.net>, MIT-style license


    //moo.js : My Object Oriented javascript - has no dependancies

    var Class = function(properties){
    var 
    klass = function(){
    for (
    p in thisthis[p]._proto_ this;
    if (
    arguments[0] != 'noinit' && this.initialize) return this.initialize.apply(thisarguments);
    };
    klass.extend this.extend;
    klass.implement this.implement;
    klass.prototype properties;
    return 
    klass;
    };

    Class.empty = function(){};

    Class.
    create = function(properties){
    return new Class(
    properties);
    };

    Class.
    prototype = {
    extend: function(properties){
    var 
    prototype = new this('noinit');
    for (
    property in properties){
    var 
    previous prototype[property];
    var 
    current properties[property];
    if (
    previous && previous != currentcurrent previous.parentize(current) || current;
    prototype[property] = current;
    }
    return new Class(
    prototype);
    },

    implement: function(properties){
    for (
    property in propertiesthis.prototype[property] = properties[property];
    }
    }

    Object.extend = function(){
    var 
    args arguments;
    if (
    args[1]) args = [args[0], args[1]];
    else 
    args = [thisargs[0]];
    for (
    property in args[1]) args[0][property] = args[1][property];
    return 
    args[0];
    };

    Object.Native = function(){
    for (var 
    0arguments.lengthi++) arguments[i].extend = Class.prototype.implement;
    };

    new 
    Object.Native(Function, Array, String);

    Function.
    extend({
    parentize: function(current){
    var 
    previous this;
    return function(){
    this.parent previous;
    return 
    current.apply(thisarguments);
    };
    }
    });



    Function.
    extend({

    pass: function(argsbind){
    var 
    fn this;
    if (
    $type(args) != 'array'args = [args];
    return function(){
    fn.apply(bind || fn._proto_ || fnargs);
    };
    },

    bind: function(bind){
    var 
    fn this;
    return function(){
    return 
    fn.apply(bindarguments);
    };
    },

    bindAsEventListener: function(bind){
    var 
    fn this;
    return function(
    event){
    fn.call(bindevent || window.event);
    return 
    false;
    };
    },

    delay: function(msbind){
    return 
    setTimeout(this.bind(bind || this._proto_ || this), ms);
    },

    periodical: function(msbind){
    return 
    setInterval(this.bind(bind || this._proto_ || this), ms);
    }

    });

    function 
    $clear(timer){
    clearTimeout(timer);
    clearInterval(timer);
    return 
    null;
    };

    function 
    $type(objtypes){
    if (!
    obj) return false;
    var 
    type false;
    if (
    obj instanceof Function) type 'function';
    else if (
    obj.nodeName){
    if (
    obj.nodeType == && !/\S/.test(obj.nodeValue)) type 'textnode';
    else if (
    obj.nodeType == 1type 'element';
    }
    else if (
    obj instanceof Array) type 'array';
    else if (
    typeof obj == 'object'type 'object';
    else if (
    typeof obj == 'string'type 'string';
    else if (
    typeof obj == 'number' && isFinite(obj)) type 'number';
    return 
    type;
    };

    function 
    $check(objobjTrueobjFalse){
    if (
    obj) {
    if (
    objTrue && $type(objTrue) == 'function') return objTrue();
    else return 
    objTrue || obj;
    } else {
    if (
    objFalse && $type(objFalse) == 'function') return objFalse();
    return 
    objFalse || false;
    }
    };

    var 
    Chain = new Class({

    chain: function(fn){
    this.chains this.chains || [];
    this.chains.push(fn);
    return 
    this;
    },

    callChain: function(){
    if (
    this.chains && this.chains.lengththis.chains.splice(01)[0].delay(10this);
    }

    });



    if (!Array.
    prototype.forEach){
    Array.
    prototype.forEach = function(fnbind){
    for(var 
    0this.length i++) fn.call(bindthis[i], i);
    };
    }

    Array.
    extend({

    each: Array.prototype.forEach,

    copy: function(){
    var 
    nArray = [];
    for (var 
    0this.lengthi++) nArray.push(this[i]);
    return 
    nArray;
    },

    remove: function(item){
    for (var 
    0this.lengthi++){
    if (
    this[i] == itemthis.splice(i1);
    }
    return 
    this;
    },

    test: function(item){
    for (var 
    0this.lengthi++){
    if (
    this[i] == item) return true;
    };
    return 
    false;
    },

    extend: function(nArray){
    for (var 
    0nArray.lengthi++) this.push(nArray[i]);
    return 
    this;
    }

    });

    function 
    $A(array){
    return Array.
    prototype.copy.call(array);
    };



    String.extend({

    test: function(valueparams){
    return 
    this.match(new RegExp(valueparams));
    },

    camelCase: function(){
    return 
    this.replace(/-\D/gi, function(match){
    return 
    match.charAt(match.length 1).toUpperCase();
    });
    },

    capitalize: function(){
    return 
    this.toLowerCase().replace(/\b[a-z]/g, function(match){
    return 
    match.toUpperCase();
    });
    },

    trim: function(){
    return 
    this.replace(/^\s*|\s*$/g,'');
    },

    clean: function(){
    return 
    this.replace(/\s\s/g' ').trim();
    },

    rgbToHex: function(array){
    var 
    rgb this.test('^[rgba]{3,4}\\(([\\d]{0,3}),[\\s]*([\\d]{0,3}),[\\s]*([\\d]{0,3})\\)$');
    var 
    hex = [];
    for (var 
    1rgb.lengthi++) hex.push((rgb[i]-0).toString(16));
    var 
    hexText '#'+hex.join('');
    if (array) return 
    hex;
    else return 
    hexText;
    },

    hexToRgb: function(array){
    var 
    hex this.test('^[#]{0,1}([\\w]{1,2})([\\w]{1,2})([\\w]{1,2})$');
    var 
    rgb = [];
    for (var 
    1hex.lengthi++){
    if (
    hex[i].length == 1hex[i] += hex[i];
    rgb.push(parseInt(hex[i], 16));
    }
    var 
    rgbText 'rgb('+rgb.join(',')+')';
    if (array) return 
    rgb;
    else return 
    rgbText;
    }

    });



    var 
    Element = new Class({



    initialize: function(el){
    if (
    $type(el) == 'string'el document.createElement(el);
    return $(
    el);
    },



    inject: function(elwhere){
    var 
    el $check($(el), $(el), new Element(el));
    switch(
    where){
    case 
    "before": $(el.parentNode).insertBefore(thisel); break;
    case 
    "after": {
    if (!
    el.getNext()) $(el.parentNode).appendChild(this);
    else $(
    el.parentNode).insertBefore(thisel.getNext());
    } break;
    case 
    "inside"el.appendChild(this); break;
    }
    return 
    this;
    },

    injectBefore: function(el){
    return 
    this.inject(el'before');
    },

    injectAfter: function(el){
    return 
    this.inject(el'after');
    },

    injectInside: function(el){
    return 
    this.inject(el'inside');
    },

    adopt: function(el){
    var 
    el $check($(el), $(el), new Element(el));
    this.appendChild(el);
    return 
    this;
    },



    remove: function(){
    this.parentNode.removeChild(this);
    },

    clone: function(){
    return $(
    this.cloneNode(true));
    },

    replaceWith: function(el){
    var 
    el $check($(el), $(el), new Element(el));
    this.parentNode.replaceChild(elthis);
    return 
    el;
    },

    appendText: function(text){
    if (
    this.getTag() == 'style' && window.ActiveXObjectthis.styleSheet.cssText text;
    else 
    this.appendChild(document.createTextNode(text));
    return 
    this;
    },



    hasClassName: function(className){
    return 
    $check(this.className.test("\\b"+className+"\\b"), true);
    },

    addClassName: function(className){
    if (!
    this.hasClassName(className)) this.className = (this.className+' '+className.trim()).clean();
    return 
    this;
    },

    removeClassName: function(className){
    if (
    this.hasClassName(className)) this.className this.className.replace(className.trim(), '').clean();
    return 
    this;
    },

    toggleClassName: function(className){
    if (
    this.hasClassName(className)) return this.removeClassName(className);
    else return 
    this.addClassName(className);
    },



    setStyle: function(propertyvalue){
    if (
    property == 'opacity'this.setOpacity(value);
    else 
    this.style[property.camelCase()] = value;
    return 
    this;
    },

    setStyles: function(source){
    if (
    $type(source) == 'object') {
    for (
    property in sourcethis.setStyle(propertysource[property]);
    } else if (
    $type(source) == 'string'this.setAttribute('style'source);
    return 
    this;
    },

    setOpacity: function(opacity){
    if (
    opacity == && this.style.visibility != "hidden"this.style.visibility "hidden";
    else if (
    this.style.visibility != "visible"this.style.visibility "visible";
    if (
    window.ActiveXObjectthis.style.filter "alpha(opacity=" opacity*100 ")";
    this.style.opacity opacity;
    return 
    this;
    },

    getStyle: function(propertynum){
    var 
    proPerty property.camelCase();
    var 
    style $check(this.style[proPerty]);
    if (!
    style) {
    if (
    document.defaultViewstyle document.defaultView.getComputedStyle(this,null).getPropertyValue(property);
    else if (
    this.currentStylestyle this.currentStyle[proPerty];
    }
    if (
    style && ['color''backgroundColor''borderColor'].test(proPerty) && style.test('rgb')) style style.rgbToHex();
    if ([
    'auto''transparent'].test(style)) style 0;
    if (
    num) return parseInt(style);
    else return 
    style;
    },

    removeStyles: function(){
    $A(arguments).each(function(property){
    this.style[property.camelCase()] = '';
    }, 
    this);
    return 
    this;
    },



    addEvent: function(actionfn){
    this[action+fn] = fn.bind(this);
    if (
    this.addEventListenerthis.addEventListener(actionfnfalse);
    else 
    this.attachEvent('on'+actionthis[action+fn]);
    var 
    el this;
    if (
    this != windowUnload.functions.push(function(){
    el.removeEvent(actionfn);
    el[action+fn] = null;
    });
    return 
    this;
    },

    removeEvent: function(actionfn){
    if (
    this.removeEventListenerthis.removeEventListener(actionfnfalse);
    else 
    this.detachEvent('on'+actionthis[action+fn]);
    return 
    this;
    },



    getBrother: function(what){
    var 
    el this[what+'Sibling'];
    while (
    $type(el) == 'textnode'el el[what+'Sibling'];
    return $(
    el);
    },

    getPrevious: function(){
    return 
    this.getBrother('previous');
    },

    getNext: function(){
    return 
    this.getBrother('next');
    },

    getFirst: function(){
    var 
    el this.firstChild;
    while (
    $type(el) == 'textnode'el el.nextSibling;
    return $(
    el);
    },



    setProperty: function(propertyvalue){
    var 
    el false;
    switch(
    property){
    case 
    'class'this.className value; break;
    case 
    'style'this.setStyles(value); break;
    case 
    'name': if (window.ActiveXObject && this.getTag() == 'input'){
    el = $(document.createElement('<input name="'+value+'" />'));
    $A(this.attributes).each(function(attribute){
    if (
    attribute.name != 'name'el.setProperty(attribute.nameattribute.value);

    });
    if (
    this.parentNodethis.replaceWith(el);
    };
    default: 
    this.setAttribute(propertyvalue);
    }
    return 
    el || this;
    },

    setProperties: function(source){
    for (
    property in sourcethis.setProperty(propertysource[property]);
    return 
    this;
    },

    setHTML: function(html){
    this.innerHTML html;
    return 
    this;
    },

    getProperty: function(property){
    return 
    this.getAttribute(property);
    },

    getTag: function(){
    return 
    this.tagName.toLowerCase();
    },



    getOffset: function(what){
    what what.capitalize();
    var 
    el this;
    var 
    offset 0;
    do {
    offset += el['offset'+what] || 0;
    el el.offsetParent;
    } while (
    el);
    return 
    offset;
    },

    getTop: function(){
    return 
    this.getOffset('top');
    },

    getLeft: function(){
    return 
    this.getOffset('left');
    }

    });

    function 
    $Element(elmethodargs){
    if (
    $type(args) != 'array'args = [args];
    return 
    Element.prototype[method].apply(elargs);
    };

    new 
    Object.Native(Element);

    function $(
    el){
    if (
    $type(el) == 'string'el document.getElementById(el);
    if (
    $type(el) == 'element'){
    if (!
    el.extend){
    Unload.elements.push(el);
    el.extend Object.extend;
    el.extend(Element.prototype);
    }
    return 
    el;
    } else return 
    false;
    };



    window.addEvent Element.prototype.addEvent;
    window.removeEvent Element.prototype.removeEvent;

    var 
    Unload = {

    elements: [], functions: [], vars: [],

    unload: function(){
    Unload.functions.each(function(fn){
    fn();
    });

    window.removeEvent('unload'window.removeFunction);

    Unload.elements.each(function(el){
    for(
    p in Element.prototype){
    window[p] = null;
    document[p] = null;
    el[p] = null;
    }
    el.extend null;
    });
    }

    };
    window.removeFunction Unload.unload;
    window.addEvent('unload'window.removeFunction);



    var 
    Fx fx = {};

    Fx.Base = new Class({

    setOptions: function(options){
    this.options Object.extend({
    duration500,
    onComplete: Class.empty,
    onStart: Class.empty,
    unit'px',
    waittrue,
    transitionFx.sinoidal,
    fps30
    }, options || {});
    },

    step: function(){
    var 
    currentTime  = (new Date).getTime();
    if (
    currentTime >= this.options.duration+this.startTime){
    this.clearTimer();
    this.now this.to;
    this.options.onComplete.pass(this.elthis).delay(10);
    this.callChain();
    } else {
    this.tPos = (currentTime this.startTime) / this.options.duration;
    this.setNow();
    }
    this.increase();
    },

    setNow: function(){
    this.now this.compute(this.fromthis.to);
    },

    compute: function(fromto){
    return 
    this.options.transition(this.tPos) * (to-from) + from;
    },

    custom: function(fromto){
    if(!
    this.options.waitthis.clearTimer();
    if (
    this.timer) return;
    this.options.onStart.pass(this.elthis).delay(10);
    this.from from;
    this.to to;
    this.startTime = (new Date).getTime();
    this.timer this.step.periodical(Math.round(1000/this.options.fps), this);
    return 
    this;
    },

    set: function(to){
    this.now to;
    this.increase();
    return 
    this;
    },

    clearTimer: function(){
    this.timer $clear(this.timer);
    return 
    this;
    },

    setStyle: function(elpropertyvalue){
    if (
    property == 'opacity'){
    if (
    value == && navigator.userAgent.test('Firefox')) value 0.9999;
    el.setOpacity(value);
    } else 
    el.setStyle(propertyvalue+this.options.unit);
    }

    });

    Fx.Base.implement(new Chain);

    Fx.Style Fx.Base.extend({

    initialize: function(elpropertyoptions){
    this.el = $(el);
    this.setOptions(options);
    this.property property.camelCase();
    },

    hide: function(){
    return 
    this.set(0);
    },

    goTo: function(
    val){
    return 
    this.custom(this.now || 0val);
    },

    increase: function(){
    this.setStyle(this.elthis.propertythis.now);
    }

    });

    Fx.Layout Fx.Style.extend({

    initialize: function(ellayoutoptions){
    this.parent(ellayoutoptions);
    this.layout layout.capitalize();
    this.el.setStyle('overflow''hidden');
    },

    toggle: function(){
    if (
    this.el['offset'+this.layout] > 0) return this.custom(this.el['offset'+this.layout], 0);
    else return 
    this.custom(0this.el['scroll'+this.layout]);
    },

    show: function(){
    return 
    this.set(this.el['scroll'+this.layout]);
    }

    });

    Fx.Height Fx.Layout.extend({

    initialize: function(eloptions){
    this.parent(el'height'options);
    }

    });

    Fx.Width Fx.Layout.extend({

    initialize: function(eloptions){
    this.parent(el'width'options);
    }

    });

    Fx.Opacity Fx.Style.extend({

    initialize: function(eloptions){
    this.parent(el'opacity'options);
    this.now 1;
    },

    toggle: function(){
    if (
    this.now 0) return this.custom(10);
    else return 
    this.custom(01);
    },

    show: function(){
    this.set(1);
    }

    });

    Element.extend({

    effect: function(propertyoptions){
    return new 
    Fx.Style(thispropertyoptions);
    }

    });

    Fx.sinoidal = function(pos){return ((-Math.cos(pos*Math.PI)/2) + 0.5);}; //this transition is from script.aculo.us

    Fx.linear = function(pos){return pos;};

    Fx.cubic = function(pos){return Math.pow(pos3);};

    Fx.circ = function(pos){return Math.sqrt(pos);};

    //SuperDom.js - depends on Moo.js + Native Scripts

    function $S(){
    var 
    els = [];
    $A(arguments).each(function(sel){
    if (
    $type(sel) == 'string'els.extend(document.getElementsBySelector(sel));
    else if (
    $type(sel) == 'element'els.push($(sel));
    });
    return $$(
    els);
    };

    function 
    $E(selectorfilter){
    return ($(
    filter) || document).getElement(selector);
    };

    function $$(
    elements){
    return 
    Object.extend(elements, new Elements);
    };

    Element.extend({

    getElements: function(selector){
    var 
    filters = [];
    selector.clean().split(' ').each(function(seli){
    var 
    bits = [];
    var 
    param = [];
    var 
    attr = [];
    if (
    bits sel.test('^([\\w]*)')) param['tag'] = bits[1] || '*';
    if (
    bits sel.test('([.#]{1})([\\w-]*)$')){
    if (
    bits[1] == '.'param['class'] = bits[2];
    else 
    param['id'] = bits[2];
    }
    if (
    bits sel.test('\\[["\'\\s]{0,1}([\\w-]*)["\'\\s]{0,1}([\\W]{0,1}=){0,2}["\'\\s]{0,1}([\\w-]*)["\'\\s]{0,1}\\]$')){
    attr['name'] = bits[1];
    attr['operator'] = bits[2];
    attr['value'] = bits[3];
    }
    if (
    == 0){
    if (
    param['id']){
    var 
    el this.getElementById(param['id']);
    if (
    el && (param['tag'] == '*' || $(el).getTag() == param['tag'])) filters = [el];
    else return 
    false;
    } else {
    filters $A(this.getElementsByTagName(param['tag']));
    }
    } else {
    filters = $$(filters).filterByTagName(param['tag']);
    if (
    param['id']) filters = $$(filters).filterById(param['id']);
    }
    if (
    param['class']) filters = $$(filters).filterByClassName(param['class']);
    if (
    attr['name']) filters = $$(filters).filterByAttribute(attr['name'], attr['value'], attr['operator']);

    }, 
    this);
    filters.each(function(el){
    $(
    el);
    });
    return $$(
    filters);
    },

    getElement: function(selector){
    return 
    this.getElementsBySelector(selector)[0];
    },

    getElementsBySelector: function(selector){
    var 
    els = [];
    selector.split(',').each(function(sel){
    els.extend(this.getElements(sel));
    }, 
    this);
    return $$(
    els);
    }

    });

    document.extend Object.extend;

    document.extend({

    getElementsByClassName: function(className){
    return 
    document.getElements('.'+className);
    },
    getElementElement.prototype.getElement,
    getElementsElement.prototype.getElements,
    getElementsBySelectorElement.prototype.getElementsBySelector

    });

    var 
    Elements = new Class({

    action: function(actions){
    this.each(function(el){
    el = $(el);
    if (
    actions.initializeactions.initialize.apply(el);
    for(
    action in actions){
    var 
    evt false;
    if (
    action.test('^on[\\w]{1,}')) el[action] = actions[action];
    else if (
    evt action.test('([\\w-]{1,})event$')) el.addEvent(evt[1], actions[action]);
    }
    });
    },

    filterById: function(id){
    var 
    found = [];
    this.each(function(el){
    if (
    el.id == idfound.push(el);
    });
    return 
    found;
    },

    filterByClassName: function(className){
    var 
    found = [];
    this.each(function(el){
    if (
    $Element(el'hasClassName'className)) found.push(el);
    });
    return 
    found;
    },

    filterByTagName: function(tagName){
    var 
    found = [];
    this.each(function(el){
    found.extend($A(el.getElementsByTagName(tagName)));
    });
    return 
    found;
    },

    filterByAttribute: function(namevalueoperator){
    var 
    found = [];
    this.each(function(el){
    var 
    att el.getAttribute(name);
    if(!
    att) return;
    if (!
    operator) return found.push(el);

    switch(
    operator){
    case 
    '*=': if (att.test(value)) found.push(el); break;
    case 
    '=': if (att == valuefound.push(el); break;
    case 
    '^=': if (att.test('^'+value)) found.push(el); break;
    case 
    '$=': if (att.test(value+'$')) found.push(el);
    }

    });
    return 
    found;
    }

    });

    new 
    Object.Native(Elements);



    Fx.Styles Fx.Base.extend({

    initialize: function(eloptions){
    this.el = $(el);
    this.setOptions(options);
    this.now = {};
    },

    setNow: function(){
    for (
    p in this.fromthis.now[p] = this.compute(this.from[p], this.to[p]);
    },

    custom: function(objFromTo){
    var 
    from = {};
    var 
    to = {};
    for (
    p in objFromTo){
    from[p] = objFromTo[p][0];
    to[p] = objFromTo[p][1];
    }
    return 
    this.parent(fromto);
    },

    resizeTo: function(htowto){
    return 
    this.custom({'height': [this.el.offsetHeighthto], 'width': [this.el.offsetWidthwto]});
    },

    resizeBy: function(hbywby){
    return 
    this.custom({'height': [this.el.offsetHeightthis.el.offsetHeight+hby], 'width': [this.el.offsetWidththis.el.offsetWidth+wby]});
    },

    increase: function(){
    for (
    p in this.nowthis.setStyle(this.elpthis.now[p]);
    }

    });



    Fx.Color Fx.Base.extend({

    initialize: function(elpropertyoptions){
    this.el = $(el);
    this.setOptions(options);
    this.property property.camelCase();
    this.now = [];
    },

    custom: function(fromto){
    return 
    this.parent(from.hexToRgb(true), to.hexToRgb(true));
    },

    setNow: function(){
    [
    0,1,2].each(function(i){
    this.now[i] = Math.round(this.compute(this.from[i], this.to[i]));
    }, 
    this);
    },

    increase: function(){
    this.el.setStyle(this.property"rgb("+this.now[0]+","+this.now[1]+","+this.now[2]+")");
    },

    fromColor: function(color){
    return 
    this.custom(colorthis.el.getStyle(this.property));
    },

    toColor: function(color){
    return 
    this.custom(this.el.getStyle(this.property), color);
    }

    });

    Element.extend({

    effects: function(options){
    return new 
    Fx.Styles(thisoptions);
    }

    });



    Fx.expoIn = function(pos){return Math.pow(210 * (pos 1))};
    Fx.expoOut = function(pos){return (-Math.pow(2, -10 pos) + 1)};

    Fx.quadIn = function(pos){return Math.pow(pos2)};
    Fx.quadOut = function(pos){return -(pos)*(pos-2)};

    Fx.circOut = function(pos){return Math.sqrt(Math.pow(pos-1,2))};
    Fx.circIn = function(pos){return -(Math.sqrt(Math.pow(pos2)) - 1)};

    Fx.backIn = function(pos){return (pos)*pos*((2.7)*pos 1.7)};
    Fx.backOut = function(pos){return ((pos-1)*(pos-1)*((2.7)*(pos-1) + 1.7) + 1)};

    Fx.sineOut = function(pos){return Math.sin(pos * (Math.PI/2))};
    Fx.sineIn = function(pos){return -Math.cos(pos * (Math.PI/2)) + 1};
    Fx.sineInOut = function(pos){return -(Math.cos(Math.PI*pos) - 1)/2};


    Fx.wobble = function(pos){return (-Math.cos(pos*Math.PI*(9*pos))/2) + 0.5};
    Fx.pulse = function(pos){return (Math.floor(pos*10) &#37; 2 == 0 ? (pos*10-Math.floor(pos*10)) : 1-(pos*10-Math.floor(pos*10)))};


    var Tips = new Class({

    setOptions: function(options){
    this.options = {
    transitionStartfx.sinoidal,
    transitionEndfx.sinoidal,
    maxTitleChars30,
    fxDuration150,
    maxOpacity1,
    timeOut100,
    className'tooltip'
    }
    Object.extend(this.optionsoptions || {});
    },

    initialize: function(elementsoptions){
    this.elements elements;
    this.setOptions(options);
    this.toolTip = new Element('div').addClassName(this.options.className).setStyle('position''absolute').injectInside(document.body);

    this.toolText = new Element('p').injectInside(this.toolTip);
    this.fx = new fx.Style(this.toolTip'opacity', {durationthis.options.fxDurationwaitfalse}).hide();
    $A(elements).each(function(el){
    if(
    el.title){
    $(
    el).myText $check(el.title);
    if (
    el.myTextel.removeAttribute('title');
    if (
    el.href){
    if (
    el.href.test('http://')) el.myTitle el.href.replace('http://''');
    if (
    el.href.length this.options.maxTitleCharsel.myTitle el.href.substr(0,this.options.maxTitleChars-3)+"...";
    }
    if (
    el.myText && el.myText.test('::')){
    var 
    dual el.myText.split('::');
    el.myTitle dual[0].trim();
    el.myText dual[1].trim();
    }

    el.oldMouseover= (el.onmouseover el.onmouseover:null);
    el.oldMouseout= (el.onmouseout el.onmouseout:null);

    el.onmouseover = function(){
    this.show(el);
    el.oldMouseover el.oldMouseover():null;
    return 
    false;
    }.
    bind(this);
    el.onmousemove this.locate.bindAsEventListener(this);
    el.onmouseout = function(){
    el.oldMouseout el.oldMouseout():null;
    this.timer $clear(this.timer);
    this.disappear();
    }.
    bind(this);
    }
    }, 
    this);
    },

    show: function(el){

    this.toolText.innerHTML el.myText;
    this.timer $clear(this.timer);
    this.fx.options.transition this.options.transitionStart;
    this.timer this.appear.delay(this.options.timeOutthis);
    },

    appear: function(){
    this.fx.custom(this.fx.nowthis.options.maxOpacity);
    },

    locate: function(evt){
    var 
    doc document.documentElement;
    this.toolTip.setStyles({'top'evt.clientY doc.scrollTop 15 'px''left'evt.clientX doc.scrollLeft 30 'px'});
    },

    disappear: function(){
    this.fx.options.transition this.options.transitionEnd;
    this.fx.custom(this.fx.now0);
    }

    });



    var 
    Ajax ajax = new Class({

    setOptions: function(options){
    this.options = {
    method'post',
    postBody'',
    asynctrue,
    onComplete: Class.empty,
    updatenull,
    evalScriptsfalse
    };
    Object.extend(this.optionsoptions || {});
    },

    initialize: function(urloptions){
    this.setOptions(options);
    this.url url;
    this.transport this.getTransport();
    },

    request: function(){
    this.transport.open(this.options.methodthis.urlthis.options.async);
    this.transport.onreadystatechange this.onStateChange.bind(this);
    if (
    this.options.method == 'post'){
    this.transport.setRequestHeader('Content-type''application/x-www-form-urlencoded');
    if (
    this.transport.overrideMimeTypethis.transport.setRequestHeader('Connection''close');
    }
    switch(
    $type(this.options.postBody)){
    case 
    'element'this.options.postBody = $(this.options.postBody).toQueryString(); break;
    case 
    'object'this.options.postBody Object.toQueryString(this.options.postBody);
    }
    if(
    $type(this.options.postBody) == 'string'this.transport.send(this.options.postBody);
    else 
    this.transport.send();
    return 
    this;
    },

    onStateChange: function(){
    if (
    this.transport.readyState == && this.transport.status == 200){
    if (
    this.options.update) $(this.options.update).setHTML(this.transport.responseText);
    this.options.onComplete.pass([this.transport.responseTextthis.transport.responseXML], this).delay(20);
    if (
    this.options.evalScriptsthis.evalScripts.delay(30this);
    this.transport.onreadystatechange = Class.empty;
    this.callChain();
    }
    },

    evalScripts: function(){
    if(
    scripts this.transport.responseText.match(/<script[^>]*?>.*?<\/script>/g)){
    scripts.each(function(script){
    eval(script.replace(/^<script[^>]*?>/, '').replace(/<\/script>$/, ''));
    });
    }
    },

    getTransport: function(){
    if (window.XMLHttpRequest) return new XMLHttpRequest();
    else if (window.ActiveXObject) return new ActiveXObject('Microsoft.XMLHTTP');
    }

    });

    Ajax.implement(new Chain);

    Object.toQueryString = function(source){
    var queryString = [];
    for (property in source) queryString.push(encodeURIComponent(property)+'='+encodeURIComponent(source[property]));
    return queryString.join('&');
    };

    Element.extend({

    send: function(options){
    options = Object.extend(options, {postBody: this.toQueryString(), method: 'post'});
    return new Ajax(this.getProperty('action'), options).request();
    },

    toQueryString: function(){
    var queryString = [];
    $A(this.getElementsByTagName('*')).each(function(el){
    $(el);
    var name = $check(el.name);
    if (!name) return;
    var value = false;
    switch(el.getTag()){
    case 'select': value = el.getElementsByTagName('option')[el.selectedIndex].value; break;
    case 'input': if ( (el.checked && ['checkbox', 'radio'].test(el.type)) || (['hidden', 'text', 'password'].test(el.type)) ) 
    value = el.value; break;
    case 'textarea': value = el.value;
    }
    if (value) queryString.push(encodeURIComponent(name)+'='+encodeURIComponent(value));
    });
    return queryString.join('&');
    }

    }); 
    Last edited by r937; Mar 12, 2007 at 08:11. Reason: offers of payment are not permitted outside the Looking To Hire forum

  2. #2
    Non-Member
    Join Date
    Aug 2005
    Posts
    56
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Prototype:

    PHP Code:
    /*  Prototype JavaScript framework, version 1.5.0_rc0
     *  (c) 2005 Sam Stephenson <sam@conio.net>
     *
     *  Prototype is freely distributable under the terms of an MIT-style license.
     *  For details, see the Prototype web site: http://prototype.conio.net/
     *
    /*--------------------------------------------------------------------------*/

    var Prototype = {
      
    Version'1.5.0_rc0',
      
    ScriptFragment'(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)',

      
    emptyFunction: function() {},
      
    K: function(x) {return x}
    }

    var Class = {
      
    create: function() {
        return function() {
          
    this.initialize.apply(thisarguments);
        }
      }
    }

    var Abstract = new 
    Object();

    Object.extend = function(destinationsource) {
      for (var 
    property in source) {
        
    destination[property] = source[property];
      }
      return 
    destination;
    }

    Object.inspect = function(object) {
      try {
        if (
    object == undefined) return 'undefined';
        if (
    object == null) return 'null';
        return 
    object.inspect object.inspect() : object.toString();
      } catch (
    e) {
        if (
    instanceof RangeError) return '...';
        throw 
    e;
      }
    }

    Function.
    prototype.bind = function() {
      var 
    __method thisargs $A(arguments), object args.shift();
      return function() {
        return 
    __method.apply(objectargs.concat($A(arguments)));
      }
    }

    Function.
    prototype.bindAsEventListener = function(object) {
      var 
    __method this;
      return function(
    event) {
        return 
    __method.call(objectevent || window.event);
      }
    }

    Object.extend(Number.prototype, {
      
    toColorPart: function() {
        var 
    digits this.toString(16);
        if (
    this 16) return '0' digits;
        return 
    digits;
      },

      
    succ: function() {
        return 
    this 1;
      },

      
    times: function(iterator) {
        
    $R(0thistrue).each(iterator);
        return 
    this;
      }
    });

    var Try = {
      
    these: function() {
        var 
    returnValue;

        for (var 
    0arguments.lengthi++) {
          var 
    lambda arguments[i];
          try {
            
    returnValue lambda();
            break;
          } catch (
    e) {}
        }

        return 
    returnValue;
      }
    }

    /*--------------------------------------------------------------------------*/

    var PeriodicalExecuter = Class.create();
    PeriodicalExecuter.prototype = {
      
    initialize: function(callbackfrequency) {
        
    this.callback callback;
        
    this.frequency frequency;
        
    this.currentlyExecuting false;

        
    this.registerCallback();
      },

      
    registerCallback: function() {
        
    setInterval(this.onTimerEvent.bind(this), this.frequency 1000);
      },

      
    onTimerEvent: function() {
        if (!
    this.currentlyExecuting) {
          try {
            
    this.currentlyExecuting true;
            
    this.callback();
          } 
    finally {
            
    this.currentlyExecuting false;
          }
        }
      }
    }
    Object.extend(String.prototype, {
      
    gsub: function(patternreplacement) {
        var 
    result ''source thismatch;
        
    replacement arguments.callee.prepareReplacement(replacement);

        while (
    source.length 0) {
          if (
    match source.match(pattern)) {
            
    result += source.slice(0match.index);
            
    result += (replacement(match) || '').toString();
            
    source  source.slice(match.index match[0].length);
          } else {
            
    result += sourcesource '';
          }
        }
        return 
    result;
      },

      
    sub: function(patternreplacementcount) {
        
    replacement this.gsub.prepareReplacement(replacement);
        
    count count === undefined count;

        return 
    this.gsub(pattern, function(match) {
          if (--
    count 0) return match[0];
          return 
    replacement(match);
        });
      },

      
    scan: function(patterniterator) {
        
    this.gsub(patterniterator);
        return 
    this;
      },

      
    truncate: function(lengthtruncation) {
        
    length length || 30;
        
    truncation truncation === undefined '...' truncation;
        return 
    this.length length ?
          
    this.slice(0length truncation.length) + truncation this;
      },

      
    strip: function() {
        return 
    this.replace(/^\s+/, '').replace(/\s+$/, '');
      },

      
    stripTags: function() {
        return 
    this.replace(/<\/?[^>]+>/gi'');
      },

      
    stripScripts: function() {
        return 
    this.replace(new RegExp(Prototype.ScriptFragment'img'), '');
      },

      
    extractScripts: function() {
        var 
    matchAll = new RegExp(Prototype.ScriptFragment'img');
        var 
    matchOne = new RegExp(Prototype.ScriptFragment'im');
        return (
    this.match(matchAll) || []).map(function(scriptTag) {
          return (
    scriptTag.match(matchOne) || [''''])[1];
        });
      },

      
    evalScripts: function() {
        return 
    this.extractScripts().map(function(script) { return eval(script) });
      },

      
    escapeHTML: function() {
        var 
    div document.createElement('div');
        var 
    text document.createTextNode(this);
        
    div.appendChild(text);
        return 
    div.innerHTML;
      },

      
    unescapeHTML: function() {
        var 
    div document.createElement('div');
        
    div.innerHTML this.stripTags();
        return 
    div.childNodes[0] ? div.childNodes[0].nodeValue '';
      },

      
    toQueryParams: function() {
        var 
    pairs this.match(/^\??(.*)$/)[1].split('&');
        return 
    pairs.inject({}, function(paramspairString) {
          var 
    pair pairString.split('=');
          
    params[pair[0]] = pair[1];
          return 
    params;
        });
      },

      
    toArray: function() {
        return 
    this.split('');
      },

      
    camelize: function() {
        var 
    oStringList this.split('-');
        if (
    oStringList.length == 1) return oStringList[0];

        var 
    camelizedString this.indexOf('-') == 0
          
    oStringList[0].charAt(0).toUpperCase() + oStringList[0].substring(1)
          : 
    oStringList[0];

        for (var 
    1len oStringList.lengthleni++) {
          var 
    oStringList[i];
          
    camelizedString += s.charAt(0).toUpperCase() + s.substring(1);
        }

        return 
    camelizedString;
      },

      
    inspect: function() {
        return 
    "'" this.replace(/\\/g'\\\\').replace(/'/g, '\\\'') + "'";
      }
    });

    String.prototype.gsub.prepareReplacement = function(replacement) {
      if (
    typeof replacement == 'function') return replacement;
      var 
    template = new Template(replacement);
      return function(
    match) { return template.evaluate(match) };
    }

    String.prototype.parseQuery String.prototype.toQueryParams;

    var 
    Template = Class.create();
    Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/;
    Template.prototype = {
      
    initialize: function(templatepattern) {
        
    this.template template.toString();
        
    this.pattern  pattern || Template.Pattern;
      },

      
    evaluate: function(object) {
        return 
    this.template.gsub(this.pattern, function(match) {
          var 
    before match[1];
          if (
    before == '\\') return match[2];
          return 
    before + (object[match[3]] || '').toString();
        });
      }
    }

    var 
    $break    = new Object();
    var 
    $continue = new Object();

    var 
    Enumerable = {
      
    each: function(iterator) {
        var 
    index 0;
        try {
          
    this._each(function(value) {
            try {
              
    iterator(valueindex++);
            } catch (
    e) {
              if (
    != $continue) throw e;
            }
          });
        } catch (
    e) {
          if (
    != $break) throw e;
        }
      },

      
    all: function(iterator) {
        var 
    result true;
        
    this.each(function(valueindex) {
          
    result result && !!(iterator || Prototype.K)(valueindex);
          if (!
    result) throw $break;
        });
        return 
    result;
      },

      
    any: function(iterator) {
        var 
    result true;
        
    this.each(function(valueindex) {
          if (
    result = !!(iterator || Prototype.K)(valueindex))
            throw 
    $break;
        });
        return 
    result;
      },

      
    collect: function(iterator) {
        var 
    results = [];
        
    this.each(function(valueindex) {
          
    results.push(iterator(valueindex));
        });
        return 
    results;
      },

      
    detect: function (iterator) {
        var 
    result;
        
    this.each(function(valueindex) {
          if (
    iterator(valueindex)) {
            
    result value;
            throw 
    $break;
          }
        });
        return 
    result;
      },

      
    findAll: function(iterator) {
        var 
    results = [];
        
    this.each(function(valueindex) {
          if (
    iterator(valueindex))
            
    results.push(value);
        });
        return 
    results;
      },

      
    grep: function(patterniterator) {
        var 
    results = [];
        
    this.each(function(valueindex) {
          var 
    stringValue value.toString();
          if (
    stringValue.match(pattern))
            
    results.push((iterator || Prototype.K)(valueindex));
        })
        return 
    results;
      },

      include: function(object) {
        var 
    found false;
        
    this.each(function(value) {
          if (
    value == object) {
            
    found true;
            throw 
    $break;
          }
        });
        return 
    found;
      },

      
    inject: function(memoiterator) {
        
    this.each(function(valueindex) {
          
    memo iterator(memovalueindex);
        });
        return 
    memo;
      },

      
    invoke: function(method) {
        var 
    args $A(arguments).slice(1);
        return 
    this.collect(function(value) {
          return 
    value[method].apply(valueargs);
        });
      },

      
    max: function(iterator) {
        var 
    result;
        
    this.each(function(valueindex) {
          
    value = (iterator || Prototype.K)(valueindex);
          if (
    result == undefined || value >= result)
            
    result value;
        });
        return 
    result;
      },

      
    min: function(iterator) {
        var 
    result;
        
    this.each(function(valueindex) {
          
    value = (iterator || Prototype.K)(valueindex);
          if (
    result == undefined || value result)
            
    result value;
        });
        return 
    result;
      },

      
    partition: function(iterator) {
        var 
    trues = [], falses = [];
        
    this.each(function(valueindex) {
          ((
    iterator || Prototype.K)(valueindex) ?
            
    trues falses).push(value);
        });
        return [
    truesfalses];
      },

      
    pluck: function(property) {
        var 
    results = [];
        
    this.each(function(valueindex) {
          
    results.push(value[property]);
        });
        return 
    results;
      },

      
    reject: function(iterator) {
        var 
    results = [];
        
    this.each(function(valueindex) {
          if (!
    iterator(valueindex))
            
    results.push(value);
        });
        return 
    results;
      },

      
    sortBy: function(iterator) {
        return 
    this.collect(function(valueindex) {
          return {
    valuevaluecriteriaiterator(valueindex)};
        }).
    sort(function(leftright) {
          var 
    left.criteriaright.criteria;
          return 
    ? -0;
        }).
    pluck('value');
      },

      
    toArray: function() {
        return 
    this.collect(Prototype.K);
      },

      
    zip: function() {
        var 
    iterator Prototype.Kargs $A(arguments);
        if (
    typeof args.last() == 'function')
          
    iterator args.pop();

        var 
    collections = [this].concat(args).map($A);
        return 
    this.map(function(valueindex) {
          return 
    iterator(collections.pluck(index));
        });
      },

      
    inspect: function() {
        return 
    '#<Enumerable:' this.toArray().inspect() + '>';
      }
    }

    Object.extend(Enumerable, {
      
    map:     Enumerable.collect,
      
    find:    Enumerable.detect,
      
    select:  Enumerable.findAll,
      
    member:  Enumerable.include,
      
    entriesEnumerable.toArray
    });
    var 
    $A = Array.from = function(iterable) {
      if (!
    iterable) return [];
      if (
    iterable.toArray) {
        return 
    iterable.toArray();
      } else {
        var 
    results = [];
        for (var 
    0iterable.lengthi++)
          
    results.push(iterable[i]);
        return 
    results;
      }
    }

    Object.extend(Array.prototypeEnumerable);

    if (!Array.
    prototype._reverse)
      Array.
    prototype._reverse = Array.prototype.reverse;

    Object.extend(Array.prototype, {
      
    _each: function(iterator) {
        for (var 
    0this.lengthi++)
          
    iterator(this[i]);
      },

      
    clear: function() {
        
    this.length 0;
        return 
    this;
      },

      
    first: function() {
        return 
    this[0];
      },

      
    last: function() {
        return 
    this[this.length 1];
      },

      
    compact: function() {
        return 
    this.select(function(value) {
          return 
    value != undefined || value != null;
        });
      },

      
    flatten: function() {
        return 
    this.inject([], function(array, value) {
          return array.
    concat(value && value.constructor == Array ?
            
    value.flatten() : [value]);
        });
      },

      
    without: function() {
        var 
    values $A(arguments);
        return 
    this.select(function(value) {
          return !
    values.include(value);
        });
      },

      
    indexOf: function(object) {
        for (var 
    0this.lengthi++)
          if (
    this[i] == object) return i;
        return -
    1;
      },

      
    reverse: function(inline) {
        return (
    inline !== false this this.toArray())._reverse();
      },

      
    inspect: function() {
        return 
    '[' this.map(Object.inspect).join(', ') + ']';
      }
    });
    var 
    Hash = {
      
    _each: function(iterator) {
        for (var 
    key in this) {
          var 
    value this[key];
          if (
    typeof value == 'function') continue;

          var 
    pair = [keyvalue];
          
    pair.key key;
          
    pair.value value;
          
    iterator(pair);
        }
      },

      
    keys: function() {
        return 
    this.pluck('key');
      },

      
    values: function() {
        return 
    this.pluck('value');
      },

      
    merge: function(hash) {
        return 
    $H(hash).inject($H(this), function(mergedHashpair) {
          
    mergedHash[pair.key] = pair.value;
          return 
    mergedHash;
        });
      },

      
    toQueryString: function() {
        return 
    this.map(function(pair) {
          return 
    pair.map(encodeURIComponent).join('=');
        }).
    join('&');
      },

      
    inspect: function() {
        return 
    '#<Hash:{' this.map(function(pair) {
          return 
    pair.map(Object.inspect).join(': ');
        }).
    join(', ') + '}>';
      }
    }

    function 
    $H(object) {
      var 
    hash Object.extend({}, object || {});
      
    Object.extend(hashEnumerable);
      
    Object.extend(hashHash);
      return 
    hash;
    }
    ObjectRange = Class.create();
    Object.extend(ObjectRange.prototypeEnumerable);
    Object.extend(ObjectRange.prototype, {
      
    initialize: function(startendexclusive) {
        
    this.start start;
        
    this.end end;
        
    this.exclusive exclusive;
      },

      
    _each: function(iterator) {
        var 
    value this.start;
        do {
          
    iterator(value);
          
    value value.succ();
        } while (
    this.include(value));
      },

      include: function(
    value) {
        if (
    value this.start)
          return 
    false;
        if (
    this.exclusive)
          return 
    value this.end;
        return 
    value <= this.end;
      }
    });

    var 
    $R = function(startendexclusive) {
      return new 
    ObjectRange(startendexclusive);
    }

    var 
    Ajax = {
      
    getTransport: function() {
        return Try.
    these(
          function() {return new 
    XMLHttpRequest()},
          function() {return new 
    ActiveXObject('Msxml2.XMLHTTP')},
          function() {return new 
    ActiveXObject('Microsoft.XMLHTTP')}
        ) || 
    false;
      },

      
    activeRequestCount0
    }

    Ajax.Responders = {
      
    responders: [],

      
    _each: function(iterator) {
        
    this.responders._each(iterator);
      },

      
    register: function(responderToAdd) {
        if (!
    this.include(responderToAdd))
          
    this.responders.push(responderToAdd);
      },

      
    unregister: function(responderToRemove) {
        
    this.responders this.responders.without(responderToRemove);
      },

      
    dispatch: function(callbackrequesttransportjson) {
        
    this.each(function(responder) {
          if (
    responder[callback] && typeof responder[callback] == 'function') {
            try {
              
    responder[callback].apply(responder, [requesttransportjson]);
            } catch (
    e) {}
          }
        });
      }
    };

    Object.extend(Ajax.RespondersEnumerable);

    Ajax.Responders.register({
      
    onCreate: function() {
        
    Ajax.activeRequestCount++;
      },

      
    onComplete: function() {
        
    Ajax.activeRequestCount--;
      }
    });

    Ajax.Base = function() {};
    Ajax.Base.prototype = {
      
    setOptions: function(options) {
        
    this.options = {
          
    method:       'post',
          
    asynchronoustrue,
          
    contentType:  'application/x-www-form-urlencoded',
          
    parameters:   ''
        
    }
        
    Object.extend(this.optionsoptions || {});
      },

      
    responseIsSuccess: function() {
        return 
    this.transport.status == undefined
            
    || this.transport.status == 0
            
    || (this.transport.status >= 200 && this.transport.status 300);
      },

      
    responseIsFailure: function() {
        return !
    this.responseIsSuccess();
      }
    }

    Ajax.Request = Class.create();
    Ajax.Request.Events =
      [
    'Uninitialized''Loading''Loaded''Interactive''Complete'];

    Ajax.Request.prototype Object.extend(new Ajax.Base(), {
      
    initialize: function(urloptions) {
        
    this.transport Ajax.getTransport();
        
    this.setOptions(options);
        
    this.request(url);
      },

      
    request: function(url) {
        var 
    parameters this.options.parameters || '';
        if (
    parameters.length 0parameters += '&_=';

        try {
          
    this.url url;
          if (
    this.options.method == 'get' && parameters.length 0)
            
    this.url += (this.url.match(/\?/) ? '&' '?') + parameters;

          
    Ajax.Responders.dispatch('onCreate'thisthis.transport);

          
    this.transport.open(this.options.methodthis.url,
            
    this.options.asynchronous);

          if (
    this.options.asynchronous) {
            
    this.transport.onreadystatechange this.onStateChange.bind(this);
            
    setTimeout((function() {this.respondToReadyState(1)}).bind(this), 10);
          }

          
    this.setRequestHeaders();

          var 
    body this.options.postBody this.options.postBody parameters;
          
    this.transport.send(this.options.method == 'post' body null);

        } catch (
    e) {
          
    this.dispatchException(e);
        }
      },

      
    setRequestHeaders: function() {
        var 
    requestHeaders =
          [
    'X-Requested-With''XMLHttpRequest',
           
    'X-Prototype-Version'Prototype.Version,
           
    'Accept''text/javascript, text/html, application/xml, text/xml, */*'];

        if (
    this.options.method == 'post') {
          
    requestHeaders.push('Content-type'this.options.contentType);

          
    /* Force "Connection: close" for Mozilla browsers to work around
           * a bug where XMLHttpReqeuest sends an incorrect Content-length
           * header. See Mozilla Bugzilla #246651.
           */
          
    if (this.transport.overrideMimeType)
            
    requestHeaders.push('Connection''close');
        }

        if (
    this.options.requestHeaders)
          
    requestHeaders.push.apply(requestHeadersthis.options.requestHeaders);

        for (var 
    0requestHeaders.length+= 2)
          
    this.transport.setRequestHeader(requestHeaders[i], requestHeaders[i+1]);
      },

      
    onStateChange: function() {
        var 
    readyState this.transport.readyState;
        if (
    readyState != 1)
          
    this.respondToReadyState(this.transport.readyState);
      },

      
    header: function(name) {
        try {
          return 
    this.transport.getResponseHeader(name);
        } catch (
    e) {}
      },

      
    evalJSON: function() {
        try {
          return eval(
    '(' this.header('X-JSON') + ')');
        } catch (
    e) {}
      },

      
    evalResponse: function() {
        try {
          return eval(
    this.transport.responseText);
        } catch (
    e) {
          
    this.dispatchException(e);
        }
      },

      
    respondToReadyState: function(readyState) {
        var 
    event Ajax.Request.Events[readyState];
        var 
    transport this.transportjson this.evalJSON();

        if (
    event == 'Complete') {
          try {
            (
    this.options['on' this.transport.status]
             || 
    this.options['on' + (this.responseIsSuccess() ? 'Success' 'Failure')]
             || 
    Prototype.emptyFunction)(transportjson);
          } catch (
    e) {
            
    this.dispatchException(e);
          }

          if ((
    this.header('Content-type') || '').match(/^text\/javascript/i))
            
    this.evalResponse();
        }

        try {
          (
    this.options['on' event] || Prototype.emptyFunction)(transportjson);
          
    Ajax.Responders.dispatch('on' eventthistransportjson);
        } catch (
    e) {
          
    this.dispatchException(e);
        }

        
    /* Avoid memory leak in MSIE: clean up the oncomplete event handler */
        
    if (event == 'Complete')
          
    this.transport.onreadystatechange Prototype.emptyFunction;
      },

      
    dispatchException: function(exception) {
        (
    this.options.onException || Prototype.emptyFunction)(thisexception);
        
    Ajax.Responders.dispatch('onException'thisexception);
      }
    });

    Ajax.Updater = Class.create();

    Object.extend(Object.extend(Ajax.Updater.prototypeAjax.Request.prototype), {
      
    initialize: function(containerurloptions) {
        
    this.containers = {
          
    successcontainer.success ? $(container.success) : $(container),
          
    failurecontainer.failure ? $(container.failure) :
            (
    container.success null : $(container))
        }

        
    this.transport Ajax.getTransport();
        
    this.setOptions(options);

        var 
    onComplete this.options.onComplete || Prototype.emptyFunction;
        
    this.options.onComplete = (function(transportobject) {
          
    this.updateContent();
          
    onComplete(transportobject);
        }).
    bind(this);

        
    this.request(url);
      },

      
    updateContent: function() {
        var 
    receiver this.responseIsSuccess() ?
          
    this.containers.success this.containers.failure;
        var 
    response this.transport.responseText;

        if (!
    this.options.evalScripts)
          
    response response.stripScripts();

        if (
    receiver) {
          if (
    this.options.insertion) {
            new 
    this.options.insertion(receiverresponse);
          } else {
            
    Element.update(receiverresponse);
          }
        }

        if (
    this.responseIsSuccess()) {
          if (
    this.onComplete)
            
    setTimeout(this.onComplete.bind(this), 10);
        }
      }
    });

    Ajax.PeriodicalUpdater = Class.create();
    Ajax.PeriodicalUpdater.prototype Object.extend(new Ajax.Base(), {
      
    initialize: function(containerurloptions) {
        
    this.setOptions(options);
        
    this.onComplete this.options.onComplete;

        
    this.frequency = (this.options.frequency || 2);
        
    this.decay = (this.options.decay || 1);

        
    this.updater = {};
        
    this.container container;
        
    this.url url;

        
    this.start();
      },

      
    start: function() {
        
    this.options.onComplete this.updateComplete.bind(this);
        
    this.onTimerEvent();
      },

      
    stop: function() {
        
    this.updater.onComplete undefined;
        
    clearTimeout(this.timer);
        (
    this.onComplete || Prototype.emptyFunction).apply(thisarguments);
      },

      
    updateComplete: function(request) {
        if (
    this.options.decay) {
          
    this.decay = (request.responseText == this.lastText ?
            
    this.decay this.options.decay 1);

          
    this.lastText request.responseText;
        }
        
    this.timer setTimeout(this.onTimerEvent.bind(this),
          
    this.decay this.frequency 1000);
      },

      
    onTimerEvent: function() {
        
    this.updater = new Ajax.Updater(this.containerthis.urlthis.options);
      }
    });
    function $() {
      var 
    results = [], element;
      for (var 
    0arguments.lengthi++) {
        
    element arguments[i];
        if (
    typeof element == 'string')
          
    element document.getElementById(element);
        
    results.push(Element.extend(element));
      }
      return 
    results.length results[0] : results;
    }

    document.getElementsByClassName = function(classNameparentElement) {
      var 
    children = ($(parentElement) || document.body).getElementsByTagName('*');
      return 
    $A(children).inject([], function(elementschild) {
        if (
    child.className.match(new RegExp("(^|\\s)" className "(\\s|$)")))
          
    elements.push(Element.extend(child));
        return 
    elements;
      });
    }

    /*--------------------------------------------------------------------------*/

    if (!window.Element)
      var 
    Element = new Object();

    Element.extend = function(element) {
      if (!
    element) return;
      if (
    _nativeExtensions) return element;

      if (!
    element._extended && element.tagName && element != window) {
        var 
    methods Element.Methodscache Element.extend.cache;
        for (
    property in methods) {
          var 
    value methods[property];
          if (
    typeof value == 'function')
            
    element[property] = cache.findOrStore(value);
        }
      }

      
    element._extended true;
      return 
    element;
    }

    Element.extend.cache = {
      
    findOrStore: function(value) {
        return 
    this[value] = this[value] || function() {
          return 
    value.apply(null, [this].concat($A(arguments)));
        }
      }
    }

    Element.Methods = {
      
    visible: function(element) {
        return $(
    element).style.display != 'none';
      },

      
    toggle: function() {
        for (var 
    0arguments.lengthi++) {
          var 
    element = $(arguments[i]);
          
    Element[Element.visible(element) ? 'hide' 'show'](element);
        }
      },

      
    hide: function() {
        for (var 
    0arguments.lengthi++) {
          var 
    element = $(arguments[i]);
          
    element.style.display 'none';
        }
      },

      
    show: function() {
        for (var 
    0arguments.lengthi++) {
          var 
    element = $(arguments[i]);
          
    element.style.display '';
        }
      },

      
    remove: function(element) {
        
    element = $(element);
        
    element.parentNode.removeChild(element);
      },

      
    update: function(elementhtml) {
        $(
    element).innerHTML html.stripScripts();
        
    setTimeout(function() {html.evalScripts()}, 10);
      },

      
    replace: function(elementhtml) {
        
    element = $(element);
        if (
    element.outerHTML) {
          
    element.outerHTML html.stripScripts();
        } else {
          var 
    range element.ownerDocument.createRange();
          
    range.selectNodeContents(element);
          
    element.parentNode.replaceChild(
            
    range.createContextualFragment(html.stripScripts()), element);
        }
        
    setTimeout(function() {html.evalScripts()}, 10);
      },

      
    getHeight: function(element) {
        
    element = $(element);
        return 
    element.offsetHeight;
      },

      
    classNames: function(element) {
        return new 
    Element.ClassNames(element);
      },

      
    hasClassName: function(elementclassName) {
        if (!(
    element = $(element))) return;
        return 
    Element.classNames(element).include(className);
      },

      
    addClassName: function(elementclassName) {
        if (!(
    element = $(element))) return;
        return 
    Element.classNames(element).add(className);
      },

      
    removeClassName: function(elementclassName) {
        if (!(
    element = $(element))) return;
        return 
    Element.classNames(element).remove(className);
      },

      
    // removes whitespace-only text node children
      
    cleanWhitespace: function(element) {
        
    element = $(element);
        for (var 
    0element.childNodes.lengthi++) {
          var 
    node element.childNodes[i];
          if (
    node.nodeType == && !/\S/.test(node.nodeValue))
            
    Element.remove(node);
        }
      },

      empty: function(
    element) {
        return $(
    element).innerHTML.match(/^\s*$/);
      },

      
    childOf: function(elementancestor) {
        
    element = $(element), ancestor = $(ancestor);
        while (
    element element.parentNode)
          if (
    element == ancestor) return true;
        return 
    false;
      },

      
    scrollTo: function(element) {
        
    element = $(element);
        var 
    element.element.element.offsetLeft,
            
    element.element.element.offsetTop;
        
    window.scrollTo(xy);
      },

      
    getStyle: function(elementstyle) {
        
    element = $(element);
        var 
    value element.style[style.camelize()];
        if (!
    value) {
          if (
    document.defaultView && document.defaultView.getComputedStyle) {
            var 
    css document.defaultView.getComputedStyle(elementnull);
            
    value css css.getPropertyValue(style) : null;
          } else if (
    element.currentStyle) {
            
    value element.currentStyle[style.camelize()];
          }
        }

        if (
    window.opera && ['left''top''right''bottom'].include(style))
          if (
    Element.getStyle(element'position') == 'static'value 'auto';

        return 
    value == 'auto' null value;
      },

      
    setStyle: function(elementstyle) {
        
    element = $(element);
        for (var 
    name in style)
          
    element.style[name.camelize()] = style[name];
      },

      
    getDimensions: function(element) {
        
    element = $(element);
        if (
    Element.getStyle(element'display') != 'none')
          return {
    widthelement.offsetWidthheightelement.offsetHeight};

        
    // All *Width and *Height properties give 0 on elements with display none,
        // so enable the element temporarily
        
    var els element.style;
        var 
    originalVisibility els.visibility;
        var 
    originalPosition els.position;
        
    els.visibility 'hidden';
        
    els.position 'absolute';
        
    els.display '';
        var 
    originalWidth element.clientWidth;
        var 
    originalHeight element.clientHeight;
        
    els.display 'none';
        
    els.position originalPosition;
        
    els.visibility originalVisibility;
        return {
    widthoriginalWidthheightoriginalHeight};
      },

      
    makePositioned: function(element) {
        
    element = $(element);
        var 
    pos Element.getStyle(element'position');
        if (
    pos == 'static' || !pos) {
          
    element._madePositioned true;
          
    element.style.position 'relative';
          
    // Opera returns the offset relative to the positioning context, when an
          // element is position relative but top and left have not been defined
          
    if (window.opera) {
            
    element.style.top 0;
            
    element.style.left 0;
          }
        }
      },

      
    undoPositioned: function(element) {
        
    element = $(element);
        if (
    element._madePositioned) {
          
    element._madePositioned undefined;
          
    element.style.position =
            
    element.style.top =
            
    element.style.left =
            
    element.style.bottom =
            
    element.style.right '';
        }
      },

      
    makeClipping: function(element) {
        
    element = $(element);
        if (
    element._overflow) return;
        
    element._overflow element.style.overflow;
        if ((
    Element.getStyle(element'overflow') || 'visible') != 'hidden')
          
    element.style.overflow 'hidden';
      },

      
    undoClipping: function(element) {
        
    element = $(element);
        if (
    element._overflow) return;
        
    element.style.overflow element._overflow;
        
    element._overflow undefined;
      }
    }

    Object.extend(ElementElement.Methods);

    var 
    _nativeExtensions false;

    if(!
    HTMLElement && /Konqueror|Safari|KHTML/.test(navigator.userAgent)) {
      var 
    HTMLElement = {}
      
    HTMLElement.prototype document.createElement('div').__proto__;
    }

    Element.addMethods = function(methods) {
      
    Object.extend(Element.Methodsmethods || {});

      if(
    typeof HTMLElement != 'undefined') {
        var 
    methods Element.Methodscache Element.extend.cache;
        for (
    property in methods) {
          var 
    value methods[property];
          if (
    typeof value == 'function')
            
    HTMLElement.prototype[property] = cache.findOrStore(value);
        }
        
    _nativeExtensions true;
      }
    }

    Element.addMethods();

    var 
    Toggle = new Object();
    Toggle.display Element.toggle;

    /*--------------------------------------------------------------------------*/

    Abstract.Insertion = function(adjacency) {
      
    this.adjacency adjacency;
    }

    Abstract.
    Insertion.prototype = {
      
    initialize: function(elementcontent) {
        
    this.element = $(element);
        
    this.content content.stripScripts();

        if (
    this.adjacency && this.element.insertAdjacentHTML) {
          try {
            
    this.element.insertAdjacentHTML(this.adjacencythis.content);
          } catch (
    e) {
            var 
    tagName this.element.tagName.toLowerCase();
            if (
    tagName == 'tbody' || tagName == 'tr') {
              
    this.insertContent(this.contentFromAnonymousTable());
            } else {
              throw 
    e;
            }
          }
        } else {
          
    this.range this.element.ownerDocument.createRange();
          if (
    this.initializeRangethis.initializeRange();
          
    this.insertContent([this.range.createContextualFragment(this.content)]);
        }

        
    setTimeout(function() {content.evalScripts()}, 10);
      },

      
    contentFromAnonymousTable: function() {
        var 
    div document.createElement('div');
        
    div.innerHTML '<table><tbody>' this.content '</tbody></table>';
        return 
    $A(div.childNodes[0].childNodes[0].childNodes);
      }
    }

    var 
    Insertion = new Object();

    Insertion.Before = Class.create();
    Insertion.Before.prototype Object.extend(new Abstract.Insertion('beforeBegin'), {
      
    initializeRange: function() {
        
    this.range.setStartBefore(this.element);
      },

      
    insertContent: function(fragments) {
        
    fragments.each((function(fragment) {
          
    this.element.parentNode.insertBefore(fragmentthis.element);
        }).
    bind(this));
      }
    });

    Insertion.Top = Class.create();
    Insertion.Top.prototype Object.extend(new Abstract.Insertion('afterBegin'), {
      
    initializeRange: function() {
        
    this.range.selectNodeContents(this.element);
        
    this.range.collapse(true);
      },

      
    insertContent: function(fragments) {
        
    fragments.reverse(false).each((function(fragment) {
          
    this.element.insertBefore(fragmentthis.element.firstChild);
        }).
    bind(this));
      }
    });

    Insertion.Bottom = Class.create();
    Insertion.Bottom.prototype Object.extend(new Abstract.Insertion('beforeEnd'), {
      
    initializeRange: function() {
        
    this.range.selectNodeContents(this.element);
        
    this.range.collapse(this.element);
      },

      
    insertContent: function(fragments) {
        
    fragments.each((function(fragment) {
          
    this.element.appendChild(fragment);
        }).
    bind(this));
      }
    });

    Insertion.After = Class.create();
    Insertion.After.prototype Object.extend(new Abstract.Insertion('afterEnd'), {
      
    initializeRange: function() {
        
    this.range.setStartAfter(this.element);
      },

      
    insertContent: function(fragments) {
        
    fragments.each((function(fragment) {
          
    this.element.parentNode.insertBefore(fragment,
            
    this.element.nextSibling);
        }).
    bind(this));
      }
    });

    /*--------------------------------------------------------------------------*/

    Element.ClassNames = Class.create();
    Element.ClassNames.prototype = {
      
    initialize: function(element) {
        
    this.element = $(element);
      },

      
    _each: function(iterator) {
        
    this.element.className.split(/\s+/).select(function(name) {
          return 
    name.length 0;
        }).
    _each(iterator);
      },

      
    set: function(className) {
        
    this.element.className className;
      },

      
    add: function(classNameToAdd) {
        if (
    this.include(classNameToAdd)) return;
        
    this.set(this.toArray().concat(classNameToAdd).join(' '));
      },

      
    remove: function(classNameToRemove) {
        if (!
    this.include(classNameToRemove)) return;
        
    this.set(this.select(function(className) {
          return 
    className != classNameToRemove;
        }).
    join(' '));
      },

      
    toString: function() {
        return 
    this.toArray().join(' ');
      }
    }

    Object.extend(Element.ClassNames.prototypeEnumerable);
    var 
    Selector = Class.create();
    Selector.prototype = {
      
    initialize: function(expression) {
        
    this.params = {classNames: []};
        
    this.expression expression.toString().strip();
        
    this.parseExpression();
        
    this.compileMatcher();
      },

      
    parseExpression: function() {
        function 
    abort(message) { throw 'Parse error in selector: ' message; }

        if (
    this.expression == '')  abort('empty expression');

        var 
    params this.paramsexpr this.expressionmatchmodifierclauserest;
        while (
    match expr.match(/^(.*)\[([a-z0-9_:-]+?)(?:([~\|!]?=)(?:"([^"]*)"|([^\]\s]*)))?\]$/i)) {
          params.attributes = params.attributes || [];
          params.attributes.push({name: match[2], operator: match[3], value: match[4] || match[5] || ''});
          expr = match[1];
        }

        if (expr == '*') return this.params.wildcard = true;

        while (match = expr.match(/^([^a-z0-9_-])?([a-z0-9_-]+)(.*)/i)) {
          modifier = match[1], clause = match[2], rest = match[3];
          switch (modifier) {
            case '#':       params.id = clause; break;
            case '.':       params.classNames.push(clause); break;
            case '':
            case undefined: params.tagName = clause.toUpperCase(); break;
            default:        abort(expr.inspect());
          }
          expr = rest;
        }

        if (expr.length > 0) abort(expr.inspect());
      },

      buildMatchExpression: function() {
        var params = this.params, conditions = [], clause;

        if (params.wildcard)
          conditions.push('true');
        if (clause = params.id)
          conditions.push('element.id == ' + clause.inspect());
        if (clause = params.tagName)
          conditions.push('element.tagName.toUpperCase() == ' + clause.inspect());
        if ((clause = params.classNames).length > 0)
          for (var i = 0; i < clause.length; i++)
            conditions.push('Element.hasClassName(element, ' + clause[i].inspect() + ')');
        if (clause = params.attributes) {
          clause.each(function(attribute) {
            var value = 'element.getAttribute(' + attribute.name.inspect() + ')';
            var splitValueBy = function(delimiter) {
              return value + ' && ' + value + '.split(' + delimiter.inspect() + ')';
            }

            switch (attribute.operator) {
              case '=':       conditions.push(value + ' == ' + attribute.value.inspect()); break;
              case '~=':      conditions.push(splitValueBy(' ') + '.include(' + attribute.value.inspect() + ')'); break;
              case '|=':      conditions.push(
                                splitValueBy('-') + '.first().toUpperCase() == ' + attribute.value.toUpperCase().inspect()
                              ); break;
              case '!=':      conditions.push(value + ' != ' + attribute.value.inspect()); break;
              case '':
              case undefined: conditions.push(value + ' != null'); break;
              default:        throw 'Unknown operator ' + attribute.operator + ' in selector';
            }
          });
        }

        return conditions.join(' && ');
      },

      compileMatcher: function() {
        this.match = new Function('element', 'if (!element.tagName) return false; \
          return ' + this.buildMatchExpression());
      },

      findElements: function(scope) {
        var element;

        if (element = $(this.params.id))
          if (this.match(element))
            if (!scope || Element.childOf(element, scope))
              return [element];

        scope = (scope || document).getElementsByTagName(this.params.tagName || '*');

        var results = [];
        for (var i = 0; i < scope.length; i++)
          if (this.match(element = scope[i]))
            results.push(Element.extend(element));

        return results;
      },

      toString: function() {
        return this.expression;
      }
    }

    function $$() {
      return 
    $A(arguments).map(function(expression) {
        return expression.strip().split(/\s+/).inject([null], function(results, expr) {
          var selector = new Selector(expr);
          return results.map(selector.findElements.bind(selector)).flatten();
        });
      }).flatten();
    }
    var Field = {
      clear: function() {
        for (var i = 0; i < arguments.length; i++)
          $(arguments[i]).value = '';
      },

      focus: function(element) {
        $(element).focus();
      },

      present: function() {
        for (var i = 0; i < arguments.length; i++)
          if ($(arguments[i]).value == '') return false;
        return true;
      },

      select: function(element) {
        $(element).select();
      },

      activate: function(element) {
        element = $(element);
        element.focus();
        if (element.select)
          element.select();
      }
    }

    /*--------------------------------------------------------------------------*/

    var Form = {
      serialize: function(form) {
        var elements = Form.getElements($(form));
        var queryComponents = new Array();

        for (var i = 0; i < elements.length; i++) {
          var queryComponent = Form.Element.serialize(elements[i]);
          if (queryComponent)
            queryComponents.push(queryComponent);
        }

        return queryComponents.join('&');
      },

      getElements: function(form) {
        form = $(form);
        var elements = new Array();

        for (var tagName in Form.Element.Serializers) {
          var tagElements = form.getElementsByTagName(tagName);
          for (var j = 0; j < tagElements.length; j++)
            elements.push(tagElements[j]);
        }
        return elements;
      },

      getInputs: function(form, typeName, name) {
        form = $(form);
        var inputs = form.getElementsByTagName('input');

        if (!typeName && !name)
          return inputs;

        var matchingInputs = new Array();
        for (var i = 0; i < inputs.length; i++) {
          var input = inputs[i];
          if ((typeName && input.type != typeName) ||
              (name && input.name != name))
            continue;
          matchingInputs.push(input);
        }

        return matchingInputs;
      },

      disable: function(form) {
        var elements = Form.getElements(form);
        for (var i = 0; i < elements.length; i++) {
          var element = elements[i];
          element.blur();
          element.disabled = 'true';
        }
      },

      enable: function(form) {
        var elements = Form.getElements(form);
        for (var i = 0; i < elements.length; i++) {
          var element = elements[i];
          element.disabled = '';
        }
      },

      findFirstElement: function(form) {
        return Form.getElements(form).find(function(element) {
          return element.type != 'hidden' && !element.disabled &&
            ['input', 'select', 'textarea'].include(element.tagName.toLowerCase());
        });
      },

      focusFirstElement: function(form) {
        Field.activate(Form.findFirstElement(form));
      },

      reset: function(form) {
        $(form).reset();
      }
    }

    Form.Element = {
      serialize: function(element) {
        element = $(element);
        var method = element.tagName.toLowerCase();
        var parameter = Form.Element.Serializers[method](element);

        if (parameter) {
          var key = encodeURIComponent(parameter[0]);
          if (key.length == 0) return;

          if (parameter[1].constructor != Array)
            parameter[1] = [parameter[1]];

          return parameter[1].map(function(value) {
            return key + '=' + encodeURIComponent(value);
          }).join('&');
        }
      },

      getValue: function(element) {
        element = $(element);
        var method = element.tagName.toLowerCase();
        var parameter = Form.Element.Serializers[method](element);

        if (parameter)
          return parameter[1];
      }
    }

    Form.Element.Serializers = {
      input: function(element) {
        switch (element.type.toLowerCase()) {
          case 'submit':
          case 'hidden':
          case 'password':
          case 'text':
            return Form.Element.Serializers.textarea(element);
          case 'checkbox':
          case 'radio':
            return Form.Element.Serializers.inputSelector(element);
        }
        return false;
      },

      inputSelector: function(element) {
        if (element.checked)
          return [element.name, element.value];
      },

      textarea: function(element) {
        return [element.name, element.value];
      },

      select: function(element) {
        return Form.Element.Serializers[element.type == 'select-one' ?
          'selectOne' : 'selectMany'](element);
      },

      selectOne: function(element) {
        var value = '', opt, index = element.selectedIndex;
        if (index >= 0) {
          opt = element.options[index];
          value = opt.value || opt.text;
        }
        return [element.name, value];
      },

      selectMany: function(element) {
        var value = [];
        for (var i = 0; i < element.length; i++) {
          var opt = element.options[i];
          if (opt.selected)
            value.push(opt.value || opt.text);
        }
        return [element.name, value];
      }
    }

    /*--------------------------------------------------------------------------*/

    var 
    $F = Form.Element.getValue;

    /*--------------------------------------------------------------------------*/

    Abstract.TimedObserver = function() {}
    Abstract.TimedObserver.prototype = {
      initialize: function(element, frequency, callback) {
        this.frequency = frequency;
        this.element   = $(element);
        this.callback  = callback;

        this.lastValue = this.getValue();
        this.registerCallback();
      },

      registerCallback: function() {
        setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
      },

      onTimerEvent: function() {
        var value = this.getValue();
        if (this.lastValue != value) {
          this.callback(this.element, value);
          this.lastValue = value;
        }
      }
    }

    Form.Element.Observer = Class.create();
    Form.Element.Observer.prototype = Object.extend(new Abstract.TimedObserver(), {
      getValue: function() {
        return Form.Element.getValue(this.element);
      }
    });

    Form.Observer = Class.create();
    Form.Observer.prototype = Object.extend(new Abstract.TimedObserver(), {
      getValue: function() {
        return Form.serialize(this.element);
      }
    });

    /*--------------------------------------------------------------------------*/

    Abstract.EventObserver = function() {}
    Abstract.EventObserver.prototype = {
      initialize: function(element, callback) {
        this.element  = $(element);
        this.callback = callback;

        this.lastValue = this.getValue();
        if (this.element.tagName.toLowerCase() == 'form')
          this.registerFormCallbacks();
        else
          this.registerCallback(this.element);
      },

      onElementEvent: function() {
        var value = this.getValue();
        if (this.lastValue != value) {
          this.callback(this.element, value);
          this.lastValue = value;
        }
      },

      registerFormCallbacks: function() {
        var elements = Form.getElements(this.element);
        for (var i = 0; i < elements.length; i++)
          this.registerCallback(elements[i]);
      },

      registerCallback: function(element) {
        if (element.type) {
          switch (element.type.toLowerCase()) {
            case 'checkbox':
            case 'radio':
              Event.observe(element, 'click', this.onElementEvent.bind(this));
              break;
            case 'password':
            case 'text':
            case 'textarea':
            case 'select-one':
            case 'select-multiple':
              Event.observe(element, 'change', this.onElementEvent.bind(this));
              break;
          }
        }
      }
    }

    Form.Element.EventObserver = Class.create();
    Form.Element.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), {
      getValue: function() {
        return Form.Element.getValue(this.element);
      }
    });

    Form.EventObserver = Class.create();
    Form.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), {
      getValue: function() {
        return Form.serialize(this.element);
      }
    });
    if (!window.Event) {
      var Event = new Object();
    }

    Object.extend(Event, {
      KEY_BACKSPACE: 8,
      KEY_TAB:       9,
      KEY_RETURN:   13,
      KEY_ESC:      27,
      KEY_LEFT:     37,
      KEY_UP:       38,
      KEY_RIGHT:    39,
      KEY_DOWN:     40,
      KEY_DELETE:   46,

      element: function(event) {
        return event.target || event.srcElement;
      },

      isLeftClick: function(event) {
        return (((event.which) && (event.which == 1)) ||
                ((event.button) && (event.button == 1)));
      },

      pointerX: function(event) {
        return event.pageX || (event.clientX +
          (document.documentElement.scrollLeft || document.body.scrollLeft));
      },

      pointerY: function(event) {
        return event.pageY || (event.clientY +
          (document.documentElement.scrollTop || document.body.scrollTop));
      },

      stop: function(event) {
        if (event.preventDefault) {
          event.preventDefault();
          event.stopPropagation();
        } else {
          event.returnValue = false;
          event.cancelBubble = true;
        }
      },

      // find the first node with the given tagName, starting from the
      // node the event was triggered on; traverses the DOM upwards
      findElement: function(event, tagName) {
        var element = Event.element(event);
        while (element.parentNode && (!element.tagName ||
            (element.tagName.toUpperCase() != tagName.toUpperCase())))
          element = element.parentNode;
        return element;
      },

      observers: false,

      _observeAndCache: function(element, name, observer, useCapture) {
        if (!this.observers) this.observers = [];
        if (element.addEventListener) {
          this.observers.push([element, name, observer, useCapture]);
          element.addEventListener(name, observer, useCapture);
        } else if (element.attachEvent) {
          this.observers.push([element, name, observer, useCapture]);
          element.attachEvent('on' + name, observer);
        }
      },

      unloadCache: function() {
        if (!Event.observers) return;
        for (var i = 0; i < Event.observers.length; i++) {
          Event.stopObserving.apply(this, Event.observers[i]);
          Event.observers[i][0] = null;
        }
        Event.observers = false;
      },

      observe: function(element, name, observer, useCapture) {
        var element = $(element);
        useCapture = useCapture || false;

        if (name == 'keypress' &&
            (navigator.appVersion.match(/Konqueror|Safari|KHTML/)
            || element.attachEvent))
          name = 'keydown';

        this._observeAndCache(element, name, observer, useCapture);
      },

      stopObserving: function(element, name, observer, useCapture) {
        var element = $(element);
        useCapture = useCapture || false;

        if (name == 'keypress' &&
            (navigator.appVersion.match(/Konqueror|Safari|KHTML/)
            || element.detachEvent))
          name = 'keydown';

        if (element.removeEventListener) {
          element.removeEventListener(name, observer, useCapture);
        } else if (element.detachEvent) {
          element.detachEvent('on' + name, observer);
        }
      }
    });

    /* prevent memory leaks in IE */
    if (navigator.appVersion.match(/\bMSIE\b/))
      Event.observe(window, 'unload', Event.unloadCache, false);
    var Position = {
      // set to true if needed, warning: firefox performance problems
      // NOT neeeded for page scrolling, only if draggable contained in
      // scrollable elements
      includeScrollOffsets: false,

      // must be called before calling withinIncludingScrolloffset, every time the
      // page is scrolled
      prepare: function() {
        this.deltaX =  window.pageXOffset
                    || document.documentElement.scrollLeft
                    || document.body.scrollLeft
                    || 0;
        this.deltaY =  window.pageYOffset
                    || document.documentElement.scrollTop
                    || document.body.scrollTop
                    || 0;
      },

      realOffset: function(element) {
        var valueT = 0, valueL = 0;
        do {
          valueT += element.scrollTop  || 0;
          valueL += element.scrollLeft || 0;
          element = element.parentNode;
        } while (element);
        return [valueL, valueT];
      },

      cumulativeOffset: function(element) {
        var valueT = 0, valueL = 0;
        do {
          valueT += element.offsetTop  || 0;
          valueL += element.offsetLeft || 0;
          element = element.offsetParent;
        } while (element);
        return [valueL, valueT];
      },

      positionedOffset: function(element) {
        var valueT = 0, valueL = 0;
        do {
          valueT += element.offsetTop  || 0;
          valueL += element.offsetLeft || 0;
          element = element.offsetParent;
          if (element) {
            p = Element.getStyle(element, 'position');
            if (p == 'relative' || p == 'absolute') break;
          }
        } while (element);
        return [valueL, valueT];
      },

      offsetParent: function(element) {
        if (element.offsetParent) return element.offsetParent;
        if (element == document.body) return element;

        while ((element = element.parentNode) && element != document.body)
          if (Element.getStyle(element, 'position') != 'static')
            return element;

        return document.body;
      },

      // caches x/y coordinate pair to use with overlap
      within: function(element, x, y) {
        if (this.includeScrollOffsets)
          return this.withinIncludingScrolloffsets(element, x, y);
        this.xcomp = x;
        this.ycomp = y;
        this.offset = this.cumulativeOffset(element);

        return (y >= this.offset[1] &&
                y <  this.offset[1] + element.offsetHeight &&
                x >= this.offset[0] &&
                x <  this.offset[0] + element.offsetWidth);
      },

      withinIncludingScrolloffsets: function(element, x, y) {
        var offsetcache = this.realOffset(element);

        this.xcomp = x + offsetcache[0] - this.deltaX;
        this.ycomp = y + offsetcache[1] - this.deltaY;
        this.offset = this.cumulativeOffset(element);

        return (this.ycomp >= this.offset[1] &&
                this.ycomp <  this.offset[1] + element.offsetHeight &&
                this.xcomp >= this.offset[0] &&
                this.xcomp <  this.offset[0] + element.offsetWidth);
      },

      // within must be called directly before
      overlap: function(mode, element) {
        if (!mode) return 0;
        if (mode == 'vertical')
          return ((this.offset[1] + element.offsetHeight) - this.ycomp) /
            element.offsetHeight;
        if (mode == 'horizontal')
          return ((this.offset[0] + element.offsetWidth) - this.xcomp) /
            element.offsetWidth;
      },

      clone: function(source, target) {
        source = $(source);
        target = $(target);
        target.style.position = 'absolute';
        var offsets = this.cumulativeOffset(source);
        target.style.top    = offsets[1] + 'px';
        target.style.left   = offsets[0] + 'px';
        target.style.width  = source.offsetWidth + 'px';
        target.style.height = source.offsetHeight + 'px';
      },

      page: function(forElement) {
        var valueT = 0, valueL = 0;

        var element = forElement;
        do {
          valueT += element.offsetTop  || 0;
          valueL += element.offsetLeft || 0;

          // Safari fix
          if (element.offsetParent==document.body)
            if (Element.getStyle(element,'position')=='absolute') break;

        } while (element = element.offsetParent);

        element = forElement;
        do {
          valueT -= element.scrollTop  || 0;
          valueL -= element.scrollLeft || 0;
        } while (element = element.parentNode);

        return [valueL, valueT];
      },

      clone: function(source, target) {
        var options = Object.extend({
          setLeft:    true,
          setTop:     true,
          setWidth:   true,
          setHeight:  true,
          offsetTop:  0,
          offsetLeft: 0
        }, arguments[2] || {})

        // find page position of source
        source = $(source);
        var p = Position.page(source);

        // find coordinate system to use
        target = $(target);
        var delta = [0, 0];
        var parent = null;
        // delta [0,0] will do fine with position: fixed elements,
        // position:absolute needs offsetParent deltas
        if (Element.getStyle(target,'position') == 'absolute') {
          parent = Position.offsetParent(target);
          delta = Position.page(parent);
        }

        // correct by body offsets (fixes Safari)
        if (parent == document.body) {
          delta[0] -= document.body.offsetLeft;
          delta[1] -= document.body.offsetTop;
        }

        // set position
        if(options.setLeft)   target.style.left  = (p[0] - delta[0] + options.offsetLeft) + 'px';
        if(options.setTop)    target.style.top   = (p[1] - delta[1] + options.offsetTop) + 'px';
        if(options.setWidth)  target.style.width = source.offsetWidth + 'px';
        if(options.setHeight) target.style.height = source.offsetHeight + 'px';
      },

      absolutize: function(element) {
        element = $(element);
        if (element.style.position == 'absolute') return;
        Position.prepare();

        var offsets = Position.positionedOffset(element);
        var top     = offsets[1];
        var left    = offsets[0];
        var width   = element.clientWidth;
        var height  = element.clientHeight;

        element._originalLeft   = left - parseFloat(element.style.left  || 0);
        element._originalTop    = top  - parseFloat(element.style.top || 0);
        element._originalWidth  = element.style.width;
        element._originalHeight = element.style.height;

        element.style.position = 'absolute';
        element.style.top    = top + 'px';;
        element.style.left   = left + 'px';;
        element.style.width  = width + 'px';;
        element.style.height = height + 'px';;
      },

      relativize: function(element) {
        element = $(element);
        if (element.style.position == 'relative') return;
        Position.prepare();

        element.style.position = 'relative';
        var top  = parseFloat(element.style.top  || 0) - (element._originalTop || 0);
        var left = parseFloat(element.style.left || 0) - (element._originalLeft || 0);

        element.style.top    = top + 'px';
        element.style.left   = left + 'px';
        element.style.height = element._originalHeight;
        element.style.width  = element._originalWidth;
      }
    }

    // Safari returns margins on body which is incorrect if the child is absolutely
    // positioned.  For performance reasons, redefine Position.cumulativeOffset for
    // KHTML/WebKit only.
    if (/Konqueror|Safari|KHTML/.test(navigator.userAgent)) {
      Position.cumulativeOffset = function(element) {
        var valueT = 0, valueL = 0;
        do {
          valueT += element.offsetTop  || 0;
          valueL += element.offsetLeft || 0;
          if (element.offsetParent == document.body)
            if (Element.getStyle(element, 'position') == 'absolute') break;

          element = element.offsetParent;
        } while (element);

        return [valueL, valueT];
      }


  3. #3
    Non-Member
    Join Date
    Aug 2005
    Posts
    56
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Done some more twiddling and found its not actually those 2 files conflicting its one of them and this internal stylesheet:

    PHP Code:
    <style type="text/css">
            
    form fieldset {border:none;margin:20px 0 10px 0;}form span.focus{background-position:100% -29px !important;}form span.focus input{background-position:-29px !important;}form span.focus textarea{background:#c8dfaf !important;}form span.error{background-position:100% -58px !important;}form span.error input{background-position:0 -58px !important;}form span.error textarea{background:#e58080 !important;}form label {position:relative;float:left;text-align:right;margin:4px 10px 0 0;}form .textarea {position:relative;float:left;display:block;overflow:hidden;}form .textarea textarea {border:1px solid #fff;padding:6px 6px 5px 7px;}form .field {position:relative;float:left;display:block;overflow:hidden;*height:27px;}form .field input {position:relative;*top:-1px;border:none;padding:6px 6px 5px 7px;}form .helpers {position:relative;float:left;display:block;width:60px;overflow:hiddden;_zoom:1;}form .helpers a.help {position:relative;z-index:100;float:left;top:-1px;_zoom:1;margin:0 0 0 5px;display:block;width:32px;height:32px;background:url('images/form/form/icon.frm.help.gif') top left no-repeat;text-indent:-2000px;}form .helpers a.help[class] {background:url('images/form/icon.frm.help.png') top left no-repeat;*background:url('images/form/icon.frm.help.gif') top left no-repeat;}form .helpers em {position:relative;float:left;display:block;color:#f00;width:14px;height:12px;background:url('images/form/icon.frm.required.gif') top left no-repeat;text-indent:-2000px;font-size:0;top:8px;margin:0 0 0 2px;}form div {position:relative;overflow:hidden;_zoom:1;margin:0 0 5px 0;overflow:hidden;}fieldset {position:relative !important;_zoom:1;}nfirmationPanel h2 {background:url('images/form/bg.error.top.gif') top left no-repeat;padding:20px;}
    #baseSignup #content h2 {background:url('images/form/icon.page.signup.gif') no-repeat;height:88px;}#baseSignup #content h2 span {position:relative;display:block;background:url('images/form/hdr.page.signup.gif') 0 20px no-repeat;height:44px;text-indent:-2000px;border-bottom:1px solid #4b6eac;margin:0 0 0 130px;padding:20px 0 5px 0;}.reseller #content h2 span {background:url('images/form/hdr.page.signup.reseller.gif') 0 20px no-repeat !important;}#baseSignup #content p {margin:0 0 20px 130px;}#baseSignup #content p.last {padding:20px 0 0 0;margin:30px 0 30px 130px;border-top:1px solid #4b6eac;}#content form {position:relative;}#content form fieldset {margin:20px 0 50px 0;_padding:20px 0 10px 0;_width:743px;}#content form fieldset .legend {position:relative;display:block;margin:0 0 20px 0;border-bottom:1px solid #4b6eac;}#content form fieldset .legend strong {position:relative;display:block;padding:5px 10px 5px 10px;background:url('images/form/bg.fieldset.gif') top left no-repeat;font-size:120%;width:436px;}#content form fieldset fieldset {margin:20px 0 0 0;}#content form fieldset fieldset .legend {font-size:100%;font-weight:bold;}#content form fieldset fieldset fieldset .legend {margin:0 0 20px 128px;}#content form label {width:120px;}#content form .select {position:relative;float:left;display:block;overflow:hidden;height:27px;background:url('images/form/fields.signup.gif') top left no-repeat;padding:0 0 0 3px;}#content form .select select {width:487px;border:none;padding:5px 6px 5px 7px;*margin:3px 0 0 0;}#content form .field {background:url('images/form/fields.signup.gif') top right no-repeat;width:490px;}#content form .field input {width:474px;background:url('images/form/fields.signup.gif') top left no-repeat;}#content form .shortCol .field {width:97px !important;}#content form .shortCol .field input {width:81px !important;}#content form .shortCol .short {width:50px !important;margin:0 3px 0 0;}#content form .shortCol .short input {width:34px !important;}#baseSignup #content form .trigger {overflow:hidden;_zoom:1;margin:20px 0 20px 0;}#baseSignup #content form .trigger .checkbox {position:relative;float:left;margin:6px 10px 0 127px;*margin:2px 10px 0 127px;}#baseSignup #content form .trigger label {width:auto;}#baseSignup #content form .hidden {opacity:0;filter:alpha(opacity=0);}#content form .checkbox input {position:relative;float:left;}#content form div.radioRow {margin:20px 0 -10px 0;width:683px;}#content form div.radioRow span.desc {width:350px;margin:0 0 20px 0;padding:10px;}#content form div.radioRow h4 {position:relative;display:block;float:left;height:100px;width:120px;margin:0 10px 0 0;text-align:right;}#content form div.radioRow span {display:block;float:left;width:150px;margin:0 0 5px 0;}#content form div.radioRow span input {position:relative;float:left;width:auto;margin:auto;top:2px;*top:-2px;}#content form div.radioRow span label {position:relative;float:left;width:auto !important;margin:0 10px 0 5px;}#content form div.radioRow .helpers {position:absolute;display:block;width:60px;overflow:hiddden;_zoom:1;right:3px;top:0;}#content form div.radioYesNo {margin:20px 0 -10px 130px;width:570px;}#content form div.error span.desc {background:#d24343;border:1px solid #820000;}#content form div.radioYesNo span.desc {width:350px;padding:10px;}#content form div.radioYesNo span {position:relative;display:block;margin:0 0 10px 0;}#content form div.radioYesNo span.row {position:relative;display:block;overflow:hidden;_zoom:1;}#content form div.radioYesNo input.radio {position:relative;float:left;top:2px;*top:-2px;}#content form div.radioYesNo label {float:left;width:auto !important;margin:0 20px 0 10px;}#content form div.radioYesNo span.field {width:250px;}#content form div.radioYesNo span.field input {width:234px;}#content form #majorCredit div.radioYesNo span.field {width:228px;}#content form #majorCredit div.radioYesNo span.field input {width:212px;}#content form #depositoryAccount div.radioYesNo span.other {float:none;clear:both;padding:10px 0 0 0;display:block;}#content form #businessPremises div.radioYesNo {padding:10px 0 10px 0;}#content form #businessPremises div.radioYesNo .desc {margin:0 10px 0 0;}#content form #businessPremises div.radioYesNo span.row {margin-top:10px;*margin-top:0;*padding:10px;}#content form #businessPremises div.radioYesNo span.row .helpers {margin-left:-30px;*margin-top:-5px;}#baseSignup #content form .hlfRow {position:relative;overflow:hidden;_zoom:1;margin:0 0 5px 0;clear:both;}#baseSignup #content form .hlfRow div {float:left;}#content form .hlfRow label {width:120px;}#baseSignup #content form .hlfRow .field {width:150px;}#baseSignup #content form .hlfRow .field input {width:134px;}#baseSignup #content form .hlfRow label {}#content form #bankDetails .or {margin:0 0 0 50px;}#content form #bankDetails .or label {width:70px;}#content form .choiceRow {position:relative;overflow:auto;*zoom:1;margin:20px 0 0 0;}#content form .choiceRow .helpers {position:absolute;right:64px;top:15px;}#content form .choiceRow div .feild {}#baseSignup #content form .fieldHalf {width:250px !important;}#baseSignup #content form .fieldHalf input {width:234px !important;}#baseSignup #content form #businessPremises .radioYesNo {margin:20px 0 0 130px;}#baseSignup #content form #businessPremises .radioYesNo .helpers {left:35px;*left:22px;_left:19px;}#baseSignup #content form #businessPremises .radioYesNo .desc {position:relative;float:left;width:300px;}#content form div.checkboxRow {margin:20px 0 -10px 130px;width:570px;}#content form div.checkboxRow span.desc {width:350px;margin:0 0 20px 0;padding:10px;}#content form div.checkboxRow span {position:relative;display:block;margin:0 0 10px 0;}#content form div.checkboxRow span.row {position:relative;display:block;}#content form div.checkboxRow .checkbox {position:relative;float:left;}#content form div.checkboxRow .checkbox input {top:3px;*top:-2px;}#content form div.checkboxRow label {float:left;width:auto !important;margin:0 20px 0 10px;}#content form div.checkboxRow span.row span.other {clear:both;padding:10px 0 0 0;}#content form div.checkboxRow span.row span.other label {margin-top:5px;}#content form div.checkboxRow span.row .field {width:200px;}#content form div.checkboxRow span.row .field input {width:184px;}#content form #returnPolicy div.checkboxRow span.row .field {width:350px;}#content form #returnPolicy div.checkboxRow span.row .field input {width:334px;}#content form div.inputComboRow {margin:0 0 0 30px;_padding:0 0 20px 0;}#content form div.inputComboRow em.percentage {position:relative;display:block;float:left;margin:0 0 0 3px;width:53px;height:23px;background:url('images/form/combo.plus.gif') no-repeat;text-indent:-2000px;top:1px;}#content form div.inputComboRow label {width:auto;}#content form div.inputComboRow .field {width:34px;}#content form div.inputComboRow .field input {width:18px;}#content form #typeSale div.inputComboRow {margin:0 0 0 17px;}#content form #timeFrameDelivery {padding:0 0 10px 0;}#content form #timeFrameDelivery div.inputComboRow {margin:0 0 0 57px;}#content form #timeFrameDelivery div.inputComboRow .helpers {margin:10px 0 0 64px;_margin:10px 0 0 30px;padding:0 0 10px 0;}table.qTable {margin-top: 5px;clear: both;}table.qTable th { color: #fff; }table.qTable th, table.qTable td {vertical-align: top;}table.qTable td, table.qTable th { text-align: center; }table.qTable td.number {width: 19px;height: 17px;background: transparent url('images/form/number.gif') 9px 9px no-repeat;color: white;font-weight: bold;font-size: 11px;float: left;padding:10px;}table.qTable td.caption {text-align: left;color: #fff;font-weight: bold;padding:10px 20px 30px 10px;}table.qTable td span.error {display:none;background:#d24343;border:1px solid #820000;padding:10px;margin:0 0 5px 0;}table.qTable td.error span.error {display:block;}table.qTable td span.helpers {margin:0 0 0 2px;_margin:0 0 0 -1px;}#content form #bankruptcy {_padding:0 0 50px 0;}#cont {position:relative;float:right;border:none;width:108px;height:30px;background:url('images/form/btn.continue.gif') no-repeat;font-size:0;line-height:100px;cursor:pointer;_cursor:hand;}#cont:hover {background:url('images/form/btn.continue.gif') bottom left no-repeat;}#prev {position:realtive;margin:0 0 0 130px;border:none;width:108px;height:30px;background:url('images/form/btn.previous.gif') no-repeat;font-size:0;line-height:100px;cursor:pointer;_cursor:hand;}#prev:hover {background:url('images/form/btn.previous.gif') bottom left no-repeat;}

            
    </style

  4. #4
    I'll take mine raw silver trophy MikeFoster's Avatar
    Join Date
    Dec 2002
    Location
    Alabama, USA
    Posts
    2,560
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Obviously you cannot use those libraries together. They both define variables/functions/objects with the same names:

    Class
    Object.extend
    Ajax
    $
    $$
    ...and there are probably more.

  5. #5
    Non-Member
    Join Date
    Aug 2005
    Posts
    56
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Can I not just change the names of conflicting vars/funcs/objects etc?

    If so which ones

  6. #6
    I'll take mine raw silver trophy MikeFoster's Avatar
    Join Date
    Dec 2002
    Location
    Alabama, USA
    Posts
    2,560
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Yes you can rename them, but it might be a little tricky.

    I've already provided the duplicate names that I initially saw. There may be more, or there may not be. You can look through the files for more duplicates.

  7. #7
    SitePoint Addict jtrelfa's Avatar
    Join Date
    Oct 2004
    Location
    Troy, Mi
    Posts
    231
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Before we can help, there's a couple of things
    1. Why do you need prototype *and* mootools? From the mootools website:
    Some functions are based on those found in prototype.js
    2. Your answer to #1 should tell you what needs to be fixed in one or the other.

    Can you give us a URL to see to help you solve the issue?

    One last thing - moofx (http://moofx.mad4milk.net/) *requires* the prototype.js library but mootools (http://mootools.net/) does not (even though they are from the same author(s) )
    var me = null;

  8. #8
    Non-Member
    Join Date
    Aug 2005
    Posts
    56
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Quote Originally Posted by jtrelfa View Post
    Before we can help, there's a couple of things
    1. Why do you need prototype *and* mootools? From the mootools website:
    I probably don't, these are 2 javascripts from dif sites for different parts of the page - whatever you can do to get them to work is ok

  9. #9
    SitePoint Addict jtrelfa's Avatar
    Join Date
    Oct 2004
    Location
    Troy, Mi
    Posts
    231
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Url?
    var me = null;


Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •