Common.js 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458
  1. /**
  2. * Copyright(c) 2006-2009, FeyaSoft Inc. All right reserved
  3. * ====================================================================
  4. * Licence @ Feyasoft Inc.
  5. * ====================================================================
  6. */
  7. Ext.ns("Ext.util");
  8. /**
  9. * This JS is used to define util functions
  10. *
  11. * @author fzhuang
  12. * @Date July 26, 2007
  13. */
  14. Ext.util.Common = Ext.util.Common || {
  15. /*
  16. * get day offset between 2 date
  17. */
  18. getDayOffset : function(sdate, edate){
  19. sdate = sdate.clearTime(true);
  20. edate = edate.clearTime(true);
  21. var dayoff = Math.round(edate.getElapsed(sdate)/(3600*24*1000))+1;
  22. return dayoff;
  23. },
  24. /*
  25. * get the size of a object
  26. */
  27. getSizeOfObj : function(o){
  28. var len = 0;
  29. for(var p in o){
  30. len++;
  31. }
  32. return len;
  33. },
  34. /*
  35. * compare whether 2 object is equal
  36. */
  37. isEqualObj : function(o1, o2){
  38. if('object' == Ext.type(o1) && 'object' == Ext.type(o2)){
  39. if(Ext.util.Common.getSizeOfObj(o1) == Ext.util.Common.getSizeOfObj(o2)){
  40. for(var p in o1){
  41. if('object' == Ext.type(o1[p]) || 'array' == Ext.type(o1[p])){
  42. if(!Ext.util.Common.isEqualObj(o1[p], o2[p])){
  43. return false;
  44. }
  45. }else if(o1[p] != o2[p]){
  46. return false;
  47. }
  48. }
  49. }else{
  50. return false;
  51. }
  52. }else if('array' == Ext.type(o1) && 'array' == Ext.type(o1)){
  53. if(o1.length != o2.length){
  54. return false;
  55. }else{
  56. for(var i = 0, len = o1.length; i < len; i++){
  57. if(!Ext.util.Common.isEqualObj(o1[i], o2[i])){
  58. return false;
  59. }
  60. }
  61. }
  62. }else if(o1 != o2){
  63. return false;
  64. }
  65. return true;
  66. },
  67. /**
  68. * validate url ...
  69. * @param {} url
  70. * @return {Boolean}
  71. */
  72. validateURL : function(url)
  73. {
  74. if (url == null) return false;
  75. var myURL = url.trim();
  76. if(myURL.length != 0)
  77. {
  78. if (myURL)
  79. var j = new RegExp();
  80. j.compile("^[A-Za-z]+://[A-Za-z0-9-]+\.[A-Za-z0-9]+");
  81. if (j.test(myURL))
  82. {
  83. return true;
  84. }
  85. } else {
  86. return true;
  87. }
  88. return false;
  89. },
  90. isUrl : function (url, needHead) {
  91. if (url == null) return false;
  92. var regexp = /(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;
  93. if (needHead) regexp = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;
  94. return regexp.test(url);
  95. },
  96. /**
  97. * Array to string with separator
  98. */
  99. arrToStringBySep : function(myArray, separator) {
  100. return myArray.join(separator);
  101. },
  102. /**
  103. * truncate Custom renderer function
  104. * val rendered
  105. * @param {Object} val
  106. */
  107. getDate : function(days){
  108. var myDate = new Date();
  109. myDate.setDate(myDate.getDate()+days);
  110. return myDate;
  111. },
  112. /**
  113. * truncate Custom renderer function
  114. * val rendered
  115. * @param {Object} val
  116. */
  117. truncate : function(val, p, record){
  118. if (val.length > 20) {
  119. p.attr = 'ext:qtip=' + '"' + val + '"';
  120. val = val.substring(0, 20);
  121. val = val.replace(/\w+$/, '') + '...';
  122. }
  123. return val;
  124. },
  125. /**
  126. * Red/Green Custom renderer function
  127. * renders red if <0 otherwise renders green
  128. * @param {Object} val
  129. */
  130. renderPosNeg : function(val){
  131. if(val >= 0){
  132. return '<span style="color:green;">' + val + '</span>';
  133. }else if(val < 0){
  134. return '<span style="color:red;">' + val + '</span>';
  135. }
  136. return val;
  137. },
  138. /**
  139. * Percent Custom renderer function
  140. * Renders red or green with %
  141. * @param {Object} val
  142. */
  143. renderPctChange : function(val){
  144. if(val >= 0){
  145. return '<span style="color:green;">' + val + '%</span>';
  146. }else if(val < 0){
  147. return '<span style="color:red;">' + val + '%</span>';
  148. }
  149. return val;
  150. },
  151. /**
  152. * Transfer boolean fromat
  153. * @method formatBoolean
  154. * @param {any} obj The object being testing
  155. * @return yes/no
  156. */
  157. formatBoolean: function(obj){
  158. return obj ? 'Yes' : 'No';
  159. },
  160. /**
  161. * Determines whether or not the provided object is a boolean
  162. * @method isBoolean
  163. * @param {any} obj The object being testing
  164. * @return Boolean
  165. */
  166. isBoolean: function(obj) {
  167. return typeof obj == 'boolean';
  168. },
  169. /**
  170. * Determines whether or not the provided object is a function
  171. * @method isFunction
  172. * @param {any} obj The object being testing
  173. * @return Boolean
  174. */
  175. isFunction: function(obj) {
  176. return typeof obj == 'function';
  177. },
  178. /**
  179. * Determines whether or not the provided object is null
  180. * @method isNull
  181. * @param {any} obj The object being testing
  182. * @return Boolean
  183. */
  184. isNull: function(obj) {
  185. return obj === null;
  186. },
  187. /**
  188. * Determines whether or not the provided object is a legal number
  189. * @method isNumber
  190. * @param {any} obj The object being testing
  191. * @return Boolean
  192. */
  193. isNumber: function(obj) {
  194. return typeof obj == 'number' && isFinite(obj);
  195. },
  196. /**
  197. * Determines whether or not the provided object is a string
  198. * @method isString
  199. * @param {any} obj The object being testing
  200. * @return Boolean
  201. */
  202. isString: function(obj) {
  203. return typeof obj == 'string';
  204. },
  205. /**
  206. * Determines whether or not the provided object is undefined
  207. * @method isUndefined
  208. * @param {any} obj The object being testing
  209. * @return Boolean
  210. */
  211. isUndefined: function(obj) {
  212. return typeof obj == 'undefined';
  213. },
  214. // generates a renderer function to be used for textual date groups
  215. textDate : function(){
  216. // create the cache of ranges to be reused
  217. var today = new Date().clearTime(true);
  218. var year = today.getFullYear();
  219. var todayTime = today.getTime();
  220. var yesterday = today.add('d', -1).getTime();
  221. var tomorrow = today.add('d', 1).getTime();
  222. var weekDays = today.add('d', 6).getTime();
  223. var lastWeekDays = today.add('d', -6).getTime();
  224. return function(date){
  225. if(!date) {
  226. return '(No Date)';
  227. }
  228. var notime = date.clearTime(true).getTime();
  229. if (notime == todayTime) {
  230. return 'Today';
  231. }
  232. if(notime > todayTime){
  233. if (notime == tomorrow) {
  234. return 'Tomorrow';
  235. }
  236. if (notime <= weekDays) {
  237. return date.format('l');
  238. }
  239. }else {
  240. if(notime == yesterday) {
  241. return 'Yesterday';
  242. }
  243. if(notime >= lastWeekDays) {
  244. return 'Last ' + date.format('l');
  245. }
  246. }
  247. return date.getFullYear() == year ? date.format('D m/d') : date.format('D m/d/Y');
  248. }
  249. },
  250. countryStore : function() {
  251. var countryStore = ["AFGHANISTAN","ALBANIA","ALGERIA","AMERICAN SAMOA","ANDORRA","ANGOLA","ANGUILLA","ANTARCTICA","ANTIGUA AND BARBUDA","ARGENTINA",
  252. "ARMENIA","ARUBA","AUSTRALIA","AUSTRIA","AZERBAIJAN","BAHAMAS","BAHRAIN","BANGLADESH","BARBADOS","BELARUS"
  253. ,"BELGIUM","BELIZE","BENIN","BERMUDA","BHUTAN","BOLIVIA","BOSNIA AND HERZEGOWINA",
  254. "BOTSWANA","BOUVET ISLAND","BRAZIL","BRITISH INDIAN OCEAN TERRITORY","BRUNEI DARUSSALAM","BULGARIA","BURKINA FASO","BURUNDI","CAMBODIA","CAMEROON","CANADA",
  255. "CAPE VERDE","CAYMAN ISLANDS","CENTRAL AFRICAN REPUBLIC","CHAD","CHILE","CHINA","CHRISTMAS ISLAND","COCOS(KEELING) ISLANDS","COLOMBIA","COMOROS","CONGO","CONGO, THE DEMOCRATIC REPUBLIC OF THE","COOK ISLANDS","COSTA RICA","COTE D'IVOIRE","CROATIA (localname: Hrvatska)","CUBA","CYPRUS",
  256. "CZECH REPUBLIC","DENMARK","DJIBOUTI","DOMINICA","DOMINICAN REPUBLIC","EAST TIMOR","ECUADOR","EGYPT","EL SALVADOR","EQUATORIAL GUINEA",
  257. "ERITREA","ESTONIA","ETHIOPIA","FALKLAND ISLANDS (MALVINAS)","FAROE ISLANDS","FIJI","FINLAND","FRANCE","FRANCE, METROPOLITAN","FRENCH GUIANA",
  258. "FRENCH POLYNESIA","FRENCH SOUTHERN TERRITORIES","GABON","GAMBIA","GEORGIA","GERMANY","GHANA","GIBRALTAR","GREECE","GREENLAND","GRENADA",
  259. "GUADELOUPE","GUAM","GUATEMALA","GUINEA","GUINEA-BISSAU","GUYANA","HAITI","HEARD AND MC DONALD ISLANDS","HOLY SEE (VATICAN CITY STATE)",
  260. "HONDURAS","HONG KONG","HUNGARY","ICELAND","INDIA","INDONESIA","IRAN (ISLAMIC REPUBLIC OF)","IRAQ","IRELAND","ISRAEL","ITALY","JAMAICA","JAPAN","JORDAN","KAZAKHSTAN","KENYA","KIRIBATI","KOREA, DEMOCRATIC PEOPLE'S REPUBLIC OF","KOREA, REPUBLICOF","KUWAIT","KYRGYZSTAN",
  261. "LAO PEOPLE'S DEMOCRATIC REPUBLIC","LATVIA","LEBANON","LESOTHO","LIBERIA","LIBYAN ARAB JAMAHIRIYA","LIECHTENSTEIN","LITHUANIA","LUXEMBOURG",
  262. "MACAU","MACEDONIA, THE FORMER YUGOSLAV REPUBLIC","MADAGASCAR","MALAWI","MALAYSIA","MALDIVES","MALI","MALTA","MARSHALL ISLANDS","MARTINIQUE",
  263. "MAURITANIA","MAURITIUS","MAYOTTE","MEXICO","MICRONESIA, FEDERATED STATES OF","MOLDOVA, REPUBLIC OF","MONACO","MONGOLIA","MONTSERRAT",
  264. "MOROCCO","MOZAMBIQUE","MYANMAR (Burma)","NAMIBIA","NAURU","NEPAL","NETHERLANDS","NETHERLANDS ANTILLES","NEW CALEDONIA","NEW ZEALAND",
  265. "NICARAGUA","NIGER","NIGERIA","NIUE","NORFOLK ISLAND","NORTHERN MARIANA ISLANDS","NORWAY","OMAN","PAKISTAN","PALAU","PANAMA","PAPUA NEW GUINEA",
  266. "PARAGUAY","PERU","PHILIPPINES","PITCAIRN","POLAND","PORTUGAL","PUERTO RICO","QATAR","REUNION","ROMANIA","RUSSIAN FEDERATION",
  267. "RWANDA","SAINT KITTS AND NEVIS","SAINT LUCIA","SAINT VINCENT AND THE GRENADINES","SAMOA","SAN MARINO","SAO TOME AND PRINCIPE",
  268. "SAUDI ARABIA","SENEGAL","SEYCHELLES","SIERRA LEONE","SINGAPORE","SLOVAKIA (Slovak Republic)","SLOVENIA","SOLOMON ISLANDS","SOMALIA",
  269. "SOUTH AFRICA","SOUTH GEORGIA AND THE SOUTH SANDWICH ISLANDS","SPAIN","SRI LANKA","ST. HELENA","ST.PIERRE AND MIQUELON","SUDAN","SURINAME","SVALBARD AND JAN MAYEN ISLANDS","SWAZILAND","SWEDEN","SWITZERLAND","SYRIAN ARAB REPUBLIC","TAIWAN, REPUBLIC OF CHINA",
  270. "TAJIKISTAN","TANZANIA, UNITED REPUBLIC OF","THAILAND","TOGO","TOKELAU","TONGA","TRINIDAD AND TOBAGO","TUNISIA","TURKEY","TURKMENISTAN",
  271. "TURKS AND CAICOS ISLANDS","TUVALU","UGANDA","UKRAINE","UNITED ARAB EMIRATES","UNITED KINGDOM","UNITED STATES","UNITED STATES MINOR OUTLYING ISLANDS",
  272. "URUGUAY","UZBEKISTAN","VANUATU","VENEZUELA","VIET NAM","VIRGIN ISLANDS (BRITISH)","VIRGIN ISLANDS (U.S.)","WALLIS AND FUTUNA ISLANDS",
  273. "WESTERN SAHARA","YEMEN","YUGOSLAVIA (now Serbia and Montenegro)","ZAMBIA","ZIMBABWE"];
  274. return countryStore;
  275. },
  276. formatDetailDate: function(obj){
  277. return obj ? obj.dateFormat('D M d H:i') : '';
  278. },
  279. // This will reset the theme based on the main.gsp file
  280. // <link rel="stylesheet" type="text/css" title="theme-Blue" href="${createLinkTo(dir:'js',file:'extjs/resources/css/xtheme-blue.css')}" />
  281. // <link rel="stylesheet" type="text/css" title="theme-Gray" href="${createLinkTo(dir:'js',file:'extjs/resources/css/xtheme-gray.css')}" />
  282. setActiveTheme : function(theme) {
  283. var links = document.getElementsByTagName("link");
  284. var len = links.length;
  285. for (var i = 0; i < len; i++) {
  286. var a = links[i];
  287. if (a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("title") && a.getAttribute("title").indexOf("theme-") != -1) {
  288. a.disabled = true;
  289. if (a.getAttribute("title") == theme) a.disabled = false;
  290. }
  291. }
  292. },
  293. // for set wall paper
  294. setWallpicture : function(name) {
  295. document.body.style.backgroundImage = "url(js/feyaSoft/desktop/wallpapers/" + name + ")";
  296. },
  297. getURLSearch: function (){
  298. var strSearch = location.search;
  299. var reg1 = /=/gi;
  300. var reg2 = /&/gi;
  301. strSearch = strSearch.substr(1, strSearch.length);
  302. strSearch = strSearch.replace(reg1, '":"');
  303. strSearch = strSearch.replace(reg2, '","');
  304. if (strSearch == "")
  305. return null;
  306. else
  307. strSearch = '{"' + strSearch + '"}';
  308. eval("var ArrayUrl=" + strSearch);
  309. return ArrayUrl;
  310. },
  311. getTimeZone : function() {
  312. var tmSummer = new Date(Date.UTC(2005, 6, 30, 0, 0, 0, 0));
  313. var so = -1 * tmSummer.getTimezoneOffset();
  314. var tmWinter = new Date(Date.UTC(2005, 12, 30, 0, 0, 0, 0));
  315. var wo = -1 * tmWinter.getTimezoneOffset();
  316. if (-660 == so && -660 == wo) return "2";
  317. if (-600 == so && -600 == wo) return "3";
  318. if (-570 == so && -570 == wo) return "4";
  319. if (-540 == so && -600 == wo) return "4";
  320. if (-540 == so && -540 == wo) return "4";
  321. if (-480 == so && -540 == wo) return "4";
  322. if (-480 == so && -480 == wo) return "5";
  323. if (-420 == so && -480 == wo) return "6";
  324. if (-420 == so && -420 == wo) return "10";
  325. if (-360 == so && -420 == wo) return "7";
  326. if (-360 == so && -360 == wo) return '12';
  327. if (-360 == so && -300 == wo) return '11';
  328. if (-300 == so && -360 == wo) return '15';
  329. if (-300 == so && -300 == wo) return '16';
  330. if (-240 == so && -300 == wo) return "17";
  331. if (-240 == so && -240 == wo) return '19';
  332. if (-240 == so && -180 == wo) return '20';
  333. if (-180 == so && -240 == wo) return '23';
  334. if (-180 == so && -180 == wo) return '25';
  335. if (-180 == so && -120 == wo) return '27';
  336. if (-150 == so && -210 == wo) return '26';
  337. if (-120 == so && -180 == wo) return '28';
  338. if (-120 == so && -120 == wo) return '30';
  339. if (-60 == so && -60 == wo) return '31';
  340. if (0 == so && -60 == wo) return '32';
  341. if (0 == so && 0 == wo) return '33';
  342. if (60 == so && 0 == wo) return '34';
  343. if (60 == so && 60 == wo) return '38';
  344. if (60 == so && 120 == wo) return '49';
  345. if (120 == so && 60 == wo) return '36';
  346. if (120 == so && 120 == wo) return '45';
  347. if (180 == so && 120 == wo) return '42';
  348. if (180 == so && 180 == wo) return '53';
  349. if (240 == so && 180 == wo) return '52';
  350. if (240 == so && 240 == wo) return '56';
  351. if (270 == so && 210 == wo) return '55';
  352. if (270 == so && 270 == wo) return '61';
  353. if (300 == so && 240 == wo) return '61';
  354. if (300 == so && 300 == wo) return '62';
  355. if (330 == so && 330 == wo) return '63';
  356. if (345 == so && 345 == wo) return '64';
  357. if (360 == so && 300 == wo) return '65';
  358. if (360 == so && 360 == wo) return '65';
  359. if (390 == so && 390 == wo) return '70';
  360. if (420 == so && 360 == wo) return '69';
  361. if (420 == so && 420 == wo) return '71';
  362. if (480 == so && 420 == wo) return '73';
  363. if (480 == so && 480 == wo) return '73';
  364. if (540 == so && 480 == wo) return '79';
  365. if (540 == so && 540 == wo) return '78';
  366. if (570 == so && 570 == wo) return '82';
  367. if (570 == so && 630 == wo) return '81';
  368. if (600 == so && 540 == wo) return '80';
  369. if (600 == so && 600 == wo) return '83';
  370. if (600 == so && 660 == wo) return '84';
  371. if (630 == so && 660 == wo) return '85';
  372. if (660 == so && 600 == wo) return '86';
  373. if (660 == so && 660 == wo) return '87';
  374. if (690 == so && 690 == wo) return '88';
  375. if (720 == so && 660 == wo) return '89';
  376. if (720 == so && 720 == wo) return '90';
  377. if (720 == so && 780 == wo) return '89';
  378. if (765 == so && 825 == wo) return '90';
  379. if (780 == so && 780 == wo) return '1'
  380. if (840 == so && 840 == wo) return "1";
  381. return 17;
  382. },
  383. // set in the cookies ...
  384. setCookie : function(name, value, days) {
  385. var date = new Date();
  386. date.setTime(date.getTime()+(days*24*60*60*1000));
  387. var thisCookie = name + "=" + escape(value) +
  388. ((days) ? "; expires=" + date.toGMTString() : "");
  389. document.cookie = thisCookie;
  390. },
  391. readCookie : function(name) {
  392. var nameSG = name + "=";
  393. if (document.cookie == null || document.cookie.indexOf(nameSG) == -1)
  394. return null;
  395. var ca = document.cookie.split(';');
  396. for(var i=0; i<ca.length; i++) {
  397. var c = ca[i];
  398. while (c.charAt(0)==' ') c = c.substring(1,c.length);
  399. if (c.indexOf(nameSG) == 0) return c.substring(nameSG.length,c.length);
  400. }
  401. return null;
  402. },
  403. eraseCookie : function(name) { Ext.util.Common.setCookie(name,"", 0.0001); }
  404. };
  405. ///////////////////////////////////////////////
  406. /// add more vtype ....
  407. Ext.apply(Ext.form.VTypes, {
  408. 'usernameVal': function(val, field) {
  409. var objRegExp = /^[a-zA-Z][-_.@a-zA-Z0-9]{0,80}$/;
  410. return objRegExp.test(val);
  411. },
  412. 'usernameValText': 'Username must start with a letter and only include -_.@a-zA-Z0-9 characters'
  413. });
  414. ///////////////////////////////////////////////
  415. String.prototype.ellipse = function(maxLength){
  416. if(this.length > maxLength){
  417. return this.substr(0, maxLength-3) + '...';
  418. }
  419. return this;
  420. };