v4 style
[freeside.git] / httemplate / elements / cssexpr.js
1 function constExpression(x) {
2         return x;
3 }
4
5 function simplifyCSSExpression() {
6         try {
7                 var ss,sl, rs, rl;
8                 ss = document.styleSheets;
9                 sl = ss.length
10         
11                 for (var i = 0; i < sl; i++) {
12                         simplifyCSSBlock(ss[i]);
13                 }
14         }
15         catch (exc) {
16                 //alert("Got an error while processing css. The page should still work but might be a bit slower");
17                 throw exc;
18         }
19 }
20
21 function simplifyCSSBlock(ss) {
22         var rs, rl;
23         
24         for (var i = 0; i < ss.imports.length; i++)
25                 simplifyCSSBlock(ss.imports[i]);
26         
27         if (ss.cssText.indexOf("expression(constExpression(") == -1)
28                 return;
29
30         rs = ss.rules;
31         rl = rs.length;
32         for (var j = 0; j < rl; j++)
33                 simplifyCSSRule(rs[j]);
34         
35 }
36
37 function simplifyCSSRule(r) {
38         var str = r.style.cssText;
39         var str2 = str;
40         var lastStr;
41         do {
42                 lastStr = str2;
43                 str2 = simplifyCSSRuleHelper(lastStr);
44         } while (str2 != lastStr)
45
46         if (str2 != str)
47                 r.style.cssText = str2;
48 }
49
50 function simplifyCSSRuleHelper(str) {
51         var i, i2;
52         i = str.indexOf("expression(constExpression(");
53         if (i == -1) return str;
54         i2 = str.indexOf("))", i);
55         var hd = str.substring(0, i);
56         var tl = str.substring(i2 + 2);
57         var exp = str.substring(i + 27, i2);
58         var val = eval(exp)
59         return hd + val + tl;
60 }
61
62 if (/msie/i.test(navigator.userAgent) && window.attachEvent != null) {
63         window.attachEvent("onload", function () {
64                 simplifyCSSExpression();
65         });
66 }