cb12.js
上传用户:stephen_wu
上传日期:2008-07-05
资源大小:1757k
文件大小:13k
源码类别:

网络

开发平台:

Unix_Linux

  1. function cbsaveorder( cb, n, fldName, task, subtaskName, subtaskValue ) {
  2.     cbCheckAllRowsAndSubTask( cb, n, fldName, subtaskName, subtaskValue );
  3.     submitform( task );
  4. }
  5. //needed by cbsaveorder function
  6. function cbCheckAllRowsAndSubTask( cb, n, fldName, subtaskName, subtaskValue ) {
  7.     if (!fldName) {
  8.         fldName = 'cb';
  9.     }
  10.     f = cbParentForm( cb );
  11.     for ( var i = 0; i < n; i++ ) {
  12.              box = f.elements[fldName+i];
  13.              if ( box.checked == false ) {
  14.                      box.checked = true;
  15.              }
  16.     }
  17. if (subtaskName && subtaskValue) {
  18. f.elements[subtaskName].value = subtaskValue;
  19. }
  20. }
  21. /**
  22. * Toggles the check state of a group of boxes
  23. *
  24. * Checkboxes must have an id attribute in the form cb0, cb1...
  25. * @param the id of the toggle button
  26. * @param The number of box to 'check'
  27. * @param An alternative field name id prefix
  28. */
  29. function cbToggleAll( tgl, n, fldName ) {
  30.     if (!fldName) {
  31.         fldName = 'cb';
  32.     }
  33.     var frm = tgl.form;
  34.     for (i=0; i < n; i++) {
  35.         cb = eval( 'frm.' + fldName + i );
  36.         if (cb) {
  37.             cb.checked = tgl.checked;
  38.         }
  39.     }
  40.     return true;
  41. }
  42. function cbParentForm(cb) {
  43. var f;
  44. if ( cb == window  ) {
  45. f = window.event.srcElement; // IE
  46. } else {
  47. f = cb;
  48. }
  49. while (f) {
  50. f = f.parentNode;
  51. if (f.nodeName == 'FORM') {
  52. break;
  53. }
  54. }
  55. return f;
  56. }
  57. /**
  58. * Performs task/subtask on table row id
  59. */
  60. function cbListItemTask( cb, task, subtaskName, subtaskValue, fldName, id ) {
  61.     var f = cbParentForm(cb);
  62.     if (cb) {
  63.         for (i = 0; true; i++) {
  64.             cbx = f.elements[fldName+i];
  65.             if (!cbx) {
  66.              break;
  67.             }
  68.             if ( i == id ) {
  69.             cbx.checked = true;
  70.             } else {
  71.             cbx.checked = false;
  72.          }
  73.         }
  74. f.elements[subtaskName].value = subtaskValue;
  75.         submitbutton(task);
  76.     }
  77.     return false;
  78. }
  79. /**
  80. * Performs task/subtask on selected table rows
  81. */
  82. function cbDoListTask( cb, task, subtaskName, subtaskValue, fldName ) {
  83.     var f = document.forms['adminForm'];
  84.     if (cb) {
  85.      var oneChecked = false;
  86.         for (i = 0; true; i++) {
  87.             cbx = f.elements[fldName+i];
  88.             if ( ! cbx ) {
  89.              break;
  90.             }
  91.             if ( cbx.checked ) {
  92.             oneChecked = true;
  93.             break;
  94.          }
  95.         }
  96.         if ( oneChecked ) {
  97.          if ( subtaskValue == 'deleterows' ) {
  98.          if ( ! confirm('Are you sure you want to delete selected items ?') ) { 
  99.          return false;
  100.          }
  101.          }
  102. f.elements[subtaskName].value = subtaskValue;
  103.          submitbutton(task);
  104.         } else {
  105.          alert( "no items selected" );
  106.         }
  107.     }
  108.     return false;
  109. }
  110. function submitbutton(pressbutton) {
  111. if (pressbutton == "showPlugins" || pressbutton == "cancelPlugin" || pressbutton == "cancelPluginAction") {
  112. cbsubmitform(pressbutton);
  113. return;
  114. }
  115. // validation
  116. var form = document.forms['adminForm'];
  117. if ( ( typeof(form.elements['name']) != "undefined") && ( form.elements['name'].value == "" ) ) {
  118. alert( "Plugin must have a name" );
  119. } else {
  120. cbsubmitform(pressbutton);
  121. }
  122. }
  123. /**
  124. * Submit the admin form
  125. */
  126. function cbsubmitform(pressbutton){
  127. document.forms['adminForm'].elements['task'].value = pressbutton;
  128. if ( typeof(document.forms['adminForm']) != 'undefined' ) {
  129. try {
  130. document.forms['adminForm'].onsubmit();
  131. }
  132. catch(e){}
  133. }
  134. document.forms['adminForm'].submit();
  135. }
  136. /**
  137. * general cb DOM events handler
  138. */
  139. var cbW3CDOM = (document.createElement && document.getElementsByTagName);
  140. function cbGetElementsByClass(searchClass,node,tag) {
  141. var classElements = new Array();
  142. if ( node == null ) {
  143. node = document;
  144. }
  145. if ( tag == null ) {
  146. tag = '*';
  147. }
  148. var els = node.getElementsByTagName(tag);
  149. var elsLen = els.length;
  150. var pattern = new RegExp('(^|\s)'+searchClass+'(\s|$)');
  151. for (i = 0, j = 0; i < elsLen; i++) {
  152. if ( pattern.test(els[i].className) ) {
  153. classElements[j] = els[i];
  154. j++;
  155. }
  156. }
  157. return classElements;
  158. }
  159. function cbAddEvent(obj, evType, fn){
  160. if (obj.addEventListener){
  161. obj.addEventListener(evType, fn, true);
  162. return true;
  163. } else if (obj.attachEvent){
  164. var r = obj.attachEvent("on"+evType, fn);
  165. return r;
  166. } else {
  167. return false;
  168. }
  169. }
  170. function cbAddEventObjArray(objArr, evType, fn){
  171. for (var j=0;j<objArr.length;j++) {
  172. if (objArr[j].type != 'hidden') {
  173. eval('objArr[j].on' + evType + '=fn');
  174. /* cbAddEvent( objArr[j], evType, fn ); */
  175. }
  176. }
  177. }
  178. /**
  179. * CB filters events handler
  180. */
  181. function cbInitFiltersBlur()
  182. {
  183. if (!cbW3CDOM) {
  184. return;
  185. }
  186. var nav = cbGetElementsByClass('cbFilters');
  187. if ((nav.length == 1) && (nav[0].getElementsByTagName('input').length == 1)) { //TBD TEST!
  188. for (var i=0;i<nav.length;i++) {
  189. cbAddEventObjArray( nav[i].getElementsByTagName('input'),  'change', cbFilterInputBlur );
  190. cbAddEventObjArray( nav[i].getElementsByTagName('select'), 'change', cbFilterInputBlur );
  191. }
  192. }
  193. }
  194. function cbFilterInputBlur(thisevent) {
  195. // var mine;
  196. // if (thisevent) {
  197. // mine = (thisevent.target.parentNode == this);
  198. // } else if (window.event.target) {
  199. // mine = (window.event.target==window.event.currentTarget);
  200. // } else if (window.event.srcElement) {
  201. // mine = (window.event.srcElement.parentNode == this);
  202. // }
  203. // if (mine) {
  204. cbParentForm(this).submit();
  205. return false;
  206. // }
  207. // return !mine;
  208. }
  209. cbAddEvent(window, 'load', cbInitFiltersBlur);
  210. /**
  211. * CB hide and set fields depending on other fields:
  212. */
  213. var cbHideFields = new Array();
  214. var cbParamsSaveBefHide = new Array();
  215. var cbSels = new Array();
  216. var cbPreviousOnChangeValues = new Array();
  217. function cbGetDisplayStyle( dt ) {
  218. var ds;
  219. if (dt.style.getPropertyValue) {
  220. ds = dt.style.getPropertyValue("display");
  221. } else {
  222. ds = dt.style.display;
  223. }
  224. return ds;
  225. }
  226. /**
  227. * CB change params hidding/showing actions
  228. */
  229. function cbParamChange() {
  230. var fieldsToShow = new Array();
  231. var fieldsToHide = new Array();
  232. var fieldsToSet  = new Array();
  233. var fieldsToRestore = new Array();
  234. var value, nameValue, inputToSet, field;
  235. var changedDoPost = false;
  236. var i,j;
  237. for (i=0;i<cbHideFields.length;i++) {
  238. for (j=1;j<cbSels[i].length;j++) {
  239. if (cbSels[i][j].type != 'hidden') {
  240. /*
  241. var name = cbSels[i][j].name;
  242. if ( name.substr(-2, 2)  == '[]' ) {
  243. name = name.substr(0, name.length-2);
  244. }
  245. */
  246. if ((cbSels[i][j].type == 'radio') || (cbSels[i][j].type == 'checkbox') ) {
  247. if ( cbSels[i][j].checked ) {
  248. value = cbSels[i][j].value;
  249. }
  250. } else {
  251. value = cbSels[i][j].value;
  252. }
  253. }
  254. }
  255. // already the case: if (cbHideFields[1] == cbSels[i][0].id)
  256. var cMatch = false;
  257. switch (cbHideFields[i][2]) {
  258. case '==': if ( value == cbHideFields[i][3] ) { cMatch = true; } break;
  259. case '!=': if ( value != cbHideFields[i][3] ) { cMatch = true; } break;
  260. case '>=': if ( value >= cbHideFields[i][3] ) { cMatch = true; } break;
  261. case '<=': if ( value <= cbHideFields[i][3] ) { cMatch = true; } break;
  262. case '>' : if ( value >  cbHideFields[i][3] ) { cMatch = true; } break;
  263. case '<' : if ( value <  cbHideFields[i][3] ) { cMatch = true; } break;
  264. case 'regexp' :
  265. var cbRegexp = new RegExp(cbHideFields[i][3]);
  266. cMatch = ( ! cbRegexp.test(value) );
  267. break;
  268. case 'evaluate' :
  269. break;
  270. default:
  271. alert('js error operator "'+cbHideFields[i][2]+'" unknown.');
  272. break;
  273. }
  274. if (cbHideFields[i][2] == 'evaluate' ) {
  275. if (typeof(cbPreviousOnChangeValues[cbHideFields[i][1]]) != 'undefined') {
  276. if (cbPreviousOnChangeValues[cbHideFields[i][1]] != value) {
  277. changedDoPost = true;
  278. }
  279. }
  280. cbPreviousOnChangeValues[cbHideFields[i][1]] = value;
  281. } else {
  282. if ( cMatch ) {
  283. fieldsToHide = fieldsToHide.concat( cbHideFields[i][4] );
  284. if ( cbHideFields[i][5].length > 0 ) {
  285. fieldsToSet  = fieldsToSet.concat( i );
  286. }
  287. } else {
  288. fieldsToShow = fieldsToShow.concat( cbHideFields[i][4] );
  289. if ( cbHideFields[i][5].length > 0 ) {
  290. fieldsToRestore  = fieldsToSet.concat( i );
  291. }
  292. }
  293. }
  294. }
  295. for (i=0;i<fieldsToSet.length;i++) {
  296. if ( cbGetDisplayStyle( document.getElementById( cbHideFields[fieldsToSet[i]][0] ) ) != 'none' ) {
  297. for (j=0;j<cbHideFields[fieldsToSet[i]][5].length;j++) {
  298. nameValue  = cbHideFields[fieldsToSet[i]][5][j].split('=',3);
  299. if ( cbGetDisplayStyle( document.getElementById( cbHideFields[fieldsToSet[i]][4][0] /* nameValue[0] */ ) ) != 'none' ) {
  300. inputToSet = document.getElementById( nameValue[1] );
  301. if (typeof(cbParamsSaveBefHide[fieldsToSet[i]])=='undefined') {
  302. cbParamsSaveBefHide[fieldsToSet[i]] = new Array();
  303. }
  304. cbParamsSaveBefHide[fieldsToSet[i]][j] = inputToSet.value;
  305. inputToSet.value = nameValue[2];
  306. }
  307. }
  308. }
  309. }
  310. for (i=0;i<fieldsToRestore.length;i++) { // TBD:Opera doesn't restore correctly with radio choice
  311. if ( cbGetDisplayStyle( document.getElementById( cbHideFields[fieldsToRestore[i]][0] ) ) != 'none' ) {
  312. for (j=0;j<cbHideFields[fieldsToRestore[i]][5].length;j++) {
  313. nameValue  = cbHideFields[fieldsToRestore[i]][5][j].split('=',3);
  314. if ( cbGetDisplayStyle( document.getElementById( cbHideFields[fieldsToRestore[i]][4][0] /* nameValue[0] */ ) ) == 'none' ) {
  315. inputToSet = document.getElementById( nameValue[1] );
  316. inputToSet.value = cbParamsSaveBefHide[fieldsToRestore[i]][j];
  317. }
  318. }
  319. }
  320. }
  321. if (typeof(jQuery)=='undefined') {
  322. for (i=0;i<fieldsToShow.length;i++) {
  323. field = document.getElementById(fieldsToShow[i]);
  324. if (field) {
  325. field.style.display = '';
  326. } else {
  327. alert('field not found number: '+i+' id:'+fieldsToShow[i]);
  328. }
  329. }
  330. for (i=0;i<fieldsToHide.length;i++) {
  331. field = document.getElementById(fieldsToHide[i]);
  332. if (field) {
  333. field.style.display = 'none';
  334. } else {
  335. alert('field not found number: '+i+' id:'+fieldsToHide[i]);
  336. }
  337. }
  338. } else {
  339. for (i=0;i<fieldsToShow.length;i++) {
  340. // jQuery( document.getElementById(fieldsToShow[i]) ).slideDown("slow"); //  http://dev.jquery.com/ticket/2041
  341. jQuery( document.getElementById(fieldsToShow[i]) ).fadeIn("slow");
  342. }
  343. for (i=0;i<fieldsToHide.length;i++) {
  344. // jQuery( document.getElementById(fieldsToHide[i]) ).slideUp("slow");
  345. jQuery( document.getElementById(fieldsToHide[i]) ).fadeOut("slow", function() {
  346. jQuery( this ).hide();
  347. });
  348. }
  349. }
  350. if ( changedDoPost ) {
  351. cbParentForm(this).submit();
  352. return false;
  353. }
  354. }
  355. function cbInitFields()
  356. {
  357. if (!cbW3CDOM) {
  358. return;
  359. }
  360. if (typeof(overlib_pagedefaults)!='undefined') {
  361. overlib_pagedefaults(WIDTH,250,VAUTO,RIGHT,AUTOSTATUSCAP, CSSCLASS,TEXTFONTCLASS,'cb-tips-font',FGCLASS,'cb-tips-fg',BGCLASS,'cb-tips-bg',CAPTIONFONTCLASS,'cb-tips-capfont', CLOSEFONTCLASS, 'cb-tips-closefont');
  362. }
  363. if (typeof(cbHideFields)=='undefined') {
  364. return;
  365. }
  366. for (var i=0;i<cbHideFields.length;i++) {
  367. var inputDom = document.getElementById(cbHideFields[i][0]);
  368. if ( inputDom === null ) {
  369. alert('xml name ' + cbHideFields[i][0] + ' is undefined. It is cbHideFields[' + i + '][0].');
  370. } else {
  371. var sels = inputDom.getElementsByTagName('input');
  372. if ( sels.length == 0 ) {
  373. sels = inputDom.getElementsByTagName('select');
  374. }
  375. var k = 1;
  376. cbSels[i] = new Array();
  377. cbSels[i][0] = inputDom;
  378. for (var j=0;j<sels.length;j++) {
  379. if (sels[j].type != 'hidden') {
  380. if (sels[j].type == 'text') {
  381. cbAddEvent( sels[j], 'change', cbParamChange );
  382. } else {
  383. cbAddEvent( sels[j], 'click', cbParamChange );
  384. }
  385. cbSels[i][k++] = sels[j];
  386. }
  387. }
  388. }
  389. }
  390. cbParamChange();
  391. }
  392. cbAddEvent(window, 'load', cbInitFields);
  393. /**
  394. * CB basic ajax library (experimental)
  395. */
  396. function CBgetHttpRequestInstance() {
  397. var http_request = false;
  398. if (window.XMLHttpRequest) { // Mozilla, Safari,...
  399. http_request = new XMLHttpRequest();
  400. if (http_request.overrideMimeType) {
  401. http_request.overrideMimeType('text/xml');
  402. }
  403. } else if (window.ActiveXObject) { // IE
  404. try {
  405. http_request = new ActiveXObject("Msxml2.XMLHTTP");
  406. } catch (e) {
  407. try {
  408. http_request = new ActiveXObject("Microsoft.XMLHTTP");
  409. } catch (e) {}
  410. }
  411. }
  412. return http_request;
  413. }
  414. function CBmakeHttpRequest(url, id, errorText, postsVars, http_request) {
  415. if ((arguments.length < 5) || (http_request==null) ) {
  416. http_request = CBgetHttpRequestInstance();
  417. }
  418. if (!http_request) {
  419. // alert('Giving up: Cannot create an XMLHTTP instance');
  420. return false;
  421. }
  422. // http_request.cbId = id;
  423. // http_request.cbErrorText = errorText;
  424. http_request.onreadystatechange = function() { CBalertContents(http_request); };
  425. if (postsVars == null) {
  426. http_request.open('GET', url, true);
  427. http_request.send(null);
  428. } else {
  429. http_request.open('POST', url, true);
  430. http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  431. http_request.setRequestHeader("Content-length", postsVars.length);
  432. http_request.send(postsVars);
  433. }
  434. function CBalertContents(http_request) {
  435. if (http_request.readyState == 4) {
  436. if ((http_request.status == 200) && (http_request.responseText.length > 0) && (http_request.responseText.length < 1025)) {
  437. // document.getElementById(http_request.cbId).innerHTML = http_request.responseText;
  438. document.getElementById(id).innerHTML = http_request.responseText;
  439. } else if (http_request.cbErrorText.length > 0) {
  440. // document.getElementById(http_request.cbId).innerHTML = http_request.cbErrorText;
  441. document.getElementById(id).innerHTML = errorText;
  442. } else {
  443. document.getElementById(id).innerHTML = '';
  444. }
  445. http_request = null;
  446. }
  447. }
  448. return true;
  449. }