resolving svn conflicts
[infodrom/rico3] / ricoClient / js / rico2pro.js
1 /**
2   *  Copyright (c) 2009 Matt Brown
3   *
4   *  Licensed under the Apache License, Version 2.0 (the "License"); you may not use this
5   *  file except in compliance with the License. You may obtain a copy of the License at
6   *
7   *         http://www.apache.org/licenses/LICENSE-2.0
8   *
9   *  Unless required by applicable law or agreed to in writing, software distributed under the
10   *  License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
11   *  either express or implied. See the License for the specific language governing permissions
12   *  and limitations under the License.
13   **/
14
15 if (typeof Prototype=='undefined') throw('This version of Rico requires the Prototype library');
16
17 Rico.Lib='Prototype';
18 Rico.LibVersion=Prototype.Version;
19 Rico.extend=Object.extend;
20 Rico.tryFunctions=Try.these;
21 Rico.trim=function(s) { return s.strip(); };
22
23 Rico.toQueryString=Object.toQueryString;
24 Rico.ajaxRequest=Ajax.Request;
25
26 Rico.ajaxSubmit=function(form,url,options) {
27   options.parameters=Form.serialize(form);
28   if (!options.method) options.method='post';
29   url=url || form.action;
30   new Ajax.Request(url,options);
31 }
32
33 Rico.getJSON=function(xhr) { return xhr.responseJSON; };
34
35 Rico.select=function(selector, element) {
36   return element ? $(element).select(selector) : $$(selector);
37 };
38   
39 Rico.eventBind=Event.observe;
40 Rico.eventUnbind=Event.stopObserving;
41 Rico.eventElement=Event.element;
42 Rico.eventStop=Event.stop;
43 Rico.eventClient=function(ev) {
44   return {x:ev.clientX, y:ev.clientY};
45 };
46
47 Rico.eventHandle=function(object, method) {
48   return object[method].bindAsEventListener(object);
49 };
50
51 Rico.addClass=Element.addClassName;
52 Rico.removeClass=Element.removeClassName;
53 Rico.hasClass=Element.hasClassName;
54
55 Rico.getStyle=Element.getStyle;
56 Rico.setStyle=Element.setStyle;
57 Rico.windowHeight=function() {
58   return document.viewport.getHeight();
59 };
60 Rico.windowWidth=function() {
61   return document.viewport.getWidth();
62 };
63 Rico.positionedOffset=function(element) {
64   return $(element).positionedOffset();
65 };
66 Rico.cumulativeOffset=function(element) {
67   return $(element).cumulativeOffset();
68 };
69
70 Rico.docScrollLeft=function() {
71   return document.viewport.getScrollOffsets().left;
72 };
73
74 Rico.docScrollTop=function() {
75   return document.viewport.getScrollOffsets().top;
76 };
77
78 Rico.getDirectChildrenByTag=function(element, tagName) {
79   tagName=tagName.toLowerCase();
80   return $(element).childElements().inject([],function(result,child) {
81     if (child.tagName && child.tagName.toLowerCase()==tagName) result.push(child);
82     return result;});
83 };
84
85
86 // Animation
87
88 Rico._animate=Class.create({
89   initialize: function(element,options,properties) {
90     this.element=$(element);
91     this.properties=[];
92     this.totSteps=(typeof options.duration =='number' ? options.duration : 500)/25;
93     this.options=options;
94     this.curStep=0;
95     var m,curval;
96     for (var p in properties) {
97       curval=this.element.getStyle(p);
98       switch (typeof curval) {
99         case 'string':
100           if (m=curval.match(/(-?\d+\.?\d*)([a-zA-Z]*)$/)) {
101             this.properties.push({property:p, vStart:parseFloat(m[1]), vEnd:parseFloat(properties[p]), units:m.length > 2 ? m[2] : ''});
102           }
103           break;
104         case 'number':
105           this.properties.push({property:p, vStart:curval, vEnd:parseFloat(properties[p]), units:''});
106           break;
107       }
108     }
109     this.px=new PeriodicalExecuter(this.processStep.bind(this),0.025);
110   },
111   
112   processStep: function() {
113     this.curStep++;
114     if (this.curStep >= this.totSteps) {
115       this.px.stop();
116       for (var i=0; i<this.properties.length; i++) {
117         this.setStyle(i,this.properties[i].vEnd);
118       }
119       if (this.options.onEnd) this.options.onEnd();
120     } else {
121       for (var i=0; i<this.properties.length; i++) {
122         var n=this.properties[i].vStart + (this.curStep / this.totSteps) * (this.properties[i].vEnd - this.properties[i].vStart);
123         this.setStyle(i,n);
124       }
125     }
126   },
127   
128   setStyle: function(idx, newVal) {
129     if (this.properties[idx].units) newVal+=this.properties[idx].units;
130     var styleParm={};
131     styleParm[this.properties[idx].property]=newVal;
132     this.element.setStyle(styleParm);
133   }
134 });
135
136 Rico.animate=function(element,options,properties) {
137   var a=new Rico._animate(element,options,properties);
138 };
139
140 Rico.fadeIn=function(element,duration,onEnd) {
141   new Rico._animate(element, {duration:duration, onEnd:onEnd}, {opacity:1.0})
142 };
143
144 Rico.fadeOut=function(element,duration,onEnd) {
145   new Rico._animate(element, {duration:duration, onEnd:onEnd}, {opacity:0.0})
146 };