1/** 2 * Ãltalános (böngészÅfüggetlen) segédfüggvények 3 */ 4 5// FüggÅségek 6if ("undefined" == typeof AITIA) { 7 alert("AITIA include missing!"); 8} 9 10// Többszörös include 11if ("undefined" != typeof AITIA_UTIL) { 12 alert("AITIA_UTIL multiple insert!"); 13} 14 15AITIA_UTIL = 1; 16 17Aitia.Util = {}; 18 19Aitia.Util.lastDropped = {}; 20 21Aitia.Util.dragging = false; 22 23Aitia.Util.treeDrags = new Array(); 24 25Aitia.Util.treeDrops = new Array(); 26 27Aitia.Util.treePerms = {}; 28 29Aitia.Util.timers = {}; 30 31/** 32 * Decimális számot hexadecimálisra alakÃt 33 */ 34Aitia.Util.dec2Hex = function(num) { 35 var chars = '0123456789ABCDEF'; 36 if (num > 255) return 'FF'; 37 return chars.charAt(parseInt(num/16))+chars.charAt(num%16); 38} // dec2Hex 39 40 41/** 42 * Balról kiegészÃti a számot 0-al 43 * @todo: általánosabbra alakÃtható 44 */ 45Aitia.Util.digit2 = function(num) { 46 if (num < 10) { 47 return "0"+num; 48 } 49 return num; 50} // digit2 51 52 53/** 54 * Rendezés - Lehetne parametertÅl függÅ rendezés is (factory) 55 * cmpFunc(a,b): -1 a < b, 0 a = b, 1 a > b 56 */ 57Aitia.Util.sort = function(arr,cmpFunc) { 58 this.quicksort(arr, 0, arr.length - 1, cmpFunc); 59} // sort 60 61 62/** 63 * Rendezés - quicksort implementáció 64 */ 65Aitia.Util.quicksort = function(arr,a,b,cmpFunc) { 66 var left, right; 67 var ref, w; 68 var i; 69 70 left = a; right = b; 71 72 ref = arr[parseInt((a+b)/2)]; 73 74 while(left <= right) { // csökkenÅ sorrendben 75 // Van komperáló függvény 76 if (cmpFunc) { 77 while (cmpFunc(arr[left],ref) == 1) { ++left; } // arr[left] > ref 78 while (cmpFunc(arr[right],ref) == -1) { --right; } // arr[right] < ref 79 } 80 // Nincs 81 else { 82 while (arr[left] > ref) { ++left; } 83 while (arr[right] < ref) { --right; } 84 } 85 86 if (left <= right) { // elemek cseréje 87 if (left != right) { //ha egyenlÅ, akkor nem cserél 88 w = arr[left]; 89 arr[left] = arr[right]; 90 arr[right] = w; 91 } 92 ++left; 93 --right; 94 } 95 } 96 if (a < right) { 97 this.quicksort(arr, a, right, cmpFunc); 98 } 99 if (left < b) { 100 this.quicksort(arr, left, b, cmpFunc); 101 } 102} // quicksort 103 104 105/** 106 * Selection megszüntetése 107 */ 108Aitia.Util.removeSelection = function() { 109 if (document.selection) { 110 try { 111 document.selection.empty(); 112 } catch(e) {} 113 } else if (window.getSelection) { 114 window.getSelection().removeAllRanges(); 115 } else { 116 try { 117 document.createElement("input").focus(); 118 } catch(e) {} 119 } 120} // removeSelection 121 122 123Aitia.Util.timer = function(fn, id, time) { 124 if(this.timers[id]) { 125 clearTimeout(this.timers[id]); 126 this.timers[id] = null; 127 } 128 this.timers[id] = setTimeout(fn, time); 129} 130 131 132 133function arab2rom(number) { 134 ones = new Array('', 'I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX'); 135 decades = new Array('', 'X', 'XX', 'XXX', 'XL', 'L', 'LX', 'LXX', 'LXXX', 'XC'); 136 hundreds = new Array('', 'C', 'CC', 'CCC', 'CD', 'D', 'DC', 'DCC', 'DCCC', 'CM'); 137 tousands = new Array('', 'M', 'MM', 'MMM'); 138 all = new Array(ones, decades, hundreds, tousands); 139 if (number > 3999) { 140 //alert('The number is greater than 3999!'); 141 return '<ERROR>'; 142 } 143 if (number < 1) { 144 //alert('The number is not positive!'); 145 return '<ERROR>'; 146 } 147 148 numstr = number.toString(); 149 len = numstr.length; 150 romanstr = ''; 151 // generation 152 for (i = 0; i < len; i++) { 153 romanstr += all[len - i - 1][numstr.charAt(i)]; 154 } 155 156 return romanstr; 157} 158 159 160function rom2arab(romanstr) { 161 invalid_number_err = 'The string is not a valid roman numeral!'; 162 //err = 'ERR'; 163 err = null; 164 165 // maximal characters for a class, e.g. DCCC, XXXV, VIII 166 // tousands, hundreds, decades, ones 167 max = new Array(3, 4, 4, 4); 168 // can a class contain more characters or there must follow 169 // next class, i.e. after XC can follow only ones (V, I) 170 can_more = new Array(true, true, true, true); 171 simple = new Array(false, false, false, false); 172 // class chars counter: tousands, hundreds, decades, ones 173 counter = new Array(0, 0, 0, 0); 174 175 romanstr = romanstr.toUpperCase(); 176 len = romanstr.length; 177 arab = 0; 178 for (i = 0; i < len; i++) { 179 switch (romanstr.charAt(i)) { 180 case 'M': 181 if ( ++counter[0] > max[0] || !can_more[0] ) { 182 //alert(invalid_number_err); 183 return err; 184 } 185 arab += 1000; 186 break; 187 case 'D': 188 can_more[0] = false;
189 if ( ++counter[1] > max[1] || !can_more[1] || simple[1] ) { 190 //alert(invalid_number_err); 191 return err; 192 } 193 switch (romanstr.charAt(i+1)) { 194 case 'M': 195 //alert(invalid_number_err); 196 return err; 197 default: 198 arab += 500; 199 simple[1] = true; 200 } 201 break; 202 case 'C': 203 can_more[0] = false; 204 if ( ++counter[1] > max[1] || !can_more[1] || simple[2] ) { 205 //alert(invalid_number_err); 206 return err; 207 } 208 switch (romanstr.charAt(i+1)) { 209 case 'M': 210 arab += 900; 211 i++; 212 can_more[1] = false; 213 break; 214 case 'D': 215 arab += 400; 216 i++; 217 can_more[1] = false; 218 break; 219 default: 220 arab += 100; 221 simple[1] = true; 222 } 223 break; 224 case 'L': 225 current = 2; 226 if ( ++counter[2] > max[2] || !can_more[2] || simple[2]) { 227 //alert(invalid_number_err); 228 return err; 229 } 230 switch (romanstr.charAt(i+1)) { 231 case 'M': case 'D': case 'C': 232 //alert(invalid_number_err); 233 return err; 234 default: 235 arab += 50; 236 simple[2] = true; 237 } 238 break; 239 case 'X': 240 current = 2; 241 if ( ++counter[2] > max[2] || !can_more[2] || simple[3] ) { 242 //alert(invalid_number_err); 243 return err; 244 } 245 switch (romanstr.charAt(i+1)) { 246 case 'M': case 'D': 247 //alert(invalid_number_err); 248 return err; 249 case 'C': 250 arab += 90; 251 i++; 252 can_more[2] = false; 253 break; 254 case 'L': 255 arab += 40; 256 i++; 257 can_more[2] = false; 258 break; 259 default: 260 arab += 10; 261 simple[2] = true; 262 } 263 break; 264 case 'V': 265 current = 3; 266 if ( ++counter[3] > max[3] || !can_more[3] || simple[3]) { 267 //alert(invalid_number_err); 268 return err; 269 } 270 switch (romanstr.charAt(i+1)) { 271 case 'M': case 'D': case 'C': case 'L': case 'X': 272 //alert(invalid_number_err); 273 return err; 274 default: 275 arab += 5; 276 simple[3] = true; 277 } 278 break; 279 case 'I': 280 current = 3; 281 if ( ++counter[3] > max[3] || !can_more[3] ) { 282 //alert(invalid_number_err); 283 return err; 284 } 285 switch (romanstr.charAt(i+1)) { 286 case 'M': case 'D': case 'C': case 'L': 287 //alert(invalid_number_err); 288 return err; 289 case 'X': 290 arab += 9; 291 i++; 292 can_more[3] = false; 293 break; 294 case 'V': 295 arab += 4; 296 i++; 297 can_more[3] = false; 298 break; 299 default: 300 arab += 1; 301 simple[3] = true; 302 } 303 break; 304 default: 305 //alert(invalid_number_err); 306 return err; 307 } // end switch (romanstr.charAt(i)) 308 } // end for (i = 0; i < len; i++) 309 return arab; 310}
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.