scrigo.js.php 28.9 KB
Newer Older
1
<?php
2 3 4 5 6 7 8 9 10
session_start();
include '../../lib/config.inc.php';
header('Content-Type: text/javascript; charset=utf-8'); // the config file sets the content type header so we have to override it here!
require_once '../../lib/app.inc.php';
$lang = (isset($_SESSION['s']['language']) && $_SESSION['s']['language'] != '')?$_SESSION['s']['language']:'en';
include_once ISPC_ROOT_PATH.'/web/strengthmeter/lib/lang/'.$lang.'_strengthmeter.lng';

$app->uses('ini_parser,getconf');
$server_config_array = $app->getconf->get_global_config();
11
?>
mcramer's avatar
mcramer committed
12 13 14 15 16
var pageFormChanged = false;
var tabChangeWarningTxt = '';
var tabChangeDiscardTxt = '';
var tabChangeWarning = false;
var tabChangeDiscard = false;
17 18 19 20
var requestsRunning = 0;
var indicatorPaddingH = -1;
var indicatorPaddingW = -1;
var indicatorCompleted = false;
Marius Cramer's avatar
Marius Cramer committed
21
var registeredHooks = new Array();
22 23
redirect = '';

24
function reportError(request) {
25 26
	/* Error reporting is disabled by default as some browsers like safari
	   sometimes throw errors when a ajax request is delayed even if the
27
	   ajax request worked. */
28

29 30 31
	/*alert(request);*/
}

Marius Cramer's avatar
Marius Cramer committed
32 33 34 35 36 37 38 39 40 41 42 43 44 45
function registerHook(name, callback) {
    if(!registeredHooks[name]) registeredHooks[name] = new Array();
    var newindex = registeredHooks[name].length;
    registeredHooks[name][newindex] = callback;
}

function callHook(name, params) {
    if(!registeredHooks[name]) return;
    for(var i = 0; i < registeredHooks[name].length; i++) {
        var callback = registeredHooks[name][i];
        callback(name, params);
    }
}

46 47 48 49
function resetFormChanged() {
    pageFormChanged = false;
}

50
function showLoadIndicator() {
51 52
    document.body.style.cursor = 'wait';

53 54 55
<?php
if($server_config_array['misc']['use_loadindicator'] == 'y'){
?>
56
    requestsRunning += 1;
57

58 59 60 61 62 63 64 65 66
    if(requestsRunning < 2) {
        var indicator = jQuery('#ajaxloader');
        if(indicator.length < 1) {
            indicator = jQuery('<div id="ajaxloader" style="display: none;"></div>');
            indicator.appendTo('body');
        }
        var parent = jQuery('#content');
        if(parent.length < 1) return;
        indicatorCompleted = false;
67

68 69 70 71 72 73 74 75
        var atx = parent.offset().left + 150; //((parent.outerWidth(true) - indicator.outerWidth(true)) / 2);
        var aty = parent.offset().top + 150;
        indicator.css( {'left': atx, 'top': aty } ).fadeIn('fast', function() {
            // check if loader should be hidden immediately
            indicatorCompleted = true;
            if(requestsRunning < 1) $(this).fadeOut('fast', function() { $(this).hide();});
        });
    }
76 77 78
<?php
}
?>
79 80 81
}

function hideLoadIndicator() {
82 83
    document.body.style.cursor = '';

84 85 86 87 88 89 90
    requestsRunning -= 1;
    if(requestsRunning < 1) {
        requestsRunning = 0; // just for the case...
        if(indicatorCompleted == true) jQuery('#ajaxloader').fadeOut('fast', function() { jQuery('#ajaxloader').hide(); } );
    }
}

91 92 93
function onAfterContentLoad(url, data) {
    if(!data) data = '';
    else data = '&' + data;
94 95 96
<?php
if($server_config_array['misc']['use_combobox'] == 'y'){
?>
97
    $('#pageContent').find("select").combobox();
98 99 100
<?php
}
?>
101
    callHook('onAfterContentLoad', {'url': url, 'data': data });
102 103
}

104
function loadContentRefresh(pagename) {
105

106
  if(document.getElementById('refreshinterval').value > 0) {
107
	var pageContentObject2 = jQuery.ajax({	type: "GET",
108
											url: pagename,
109
											data: "refresh="+document.getElementById('refreshinterval').value,
110
											dataType: "html",
111 112 113
											beforeSend: function() {
												showLoadIndicator();
											},
114
											success: function(data, textStatus, jqXHR) {
115
                                                hideLoadIndicator();
116
												jQuery('#pageContent').html(jqXHR.responseText);
117
                                                onAfterContentLoad(pagename, "refresh="+document.getElementById('refreshinterval').value);
mcramer's avatar
mcramer committed
118
                                                pageFormChanged = false;
119 120
											},
											error: function() {
121
                                                hideLoadIndicator();
122
												reportError('Ajax Request was not successful.'+pagename);
cfoe's avatar
cfoe committed
123
											}
124
										});
125
  	setTimeout( "loadContentRefresh('"+pagename+"&refresh="+document.getElementById('refreshinterval').value+"')", document.getElementById('refreshinterval').value*1000*60 );
126 127 128
  }
}

129
function capp(module, redirect) {
130 131
	var submitFormObj = jQuery.ajax({		type: "GET",
											url: "capp.php",
132
											data: "mod="+module+((redirect != undefined) ? '&redirect='+redirect : ''),
133
											dataType: "html",
134 135 136
											beforeSend: function() {
												showLoadIndicator();
											},
137 138 139 140 141
											success: function(data, textStatus, jqXHR) {
												if(jqXHR.responseText != '') {
													if(jqXHR.responseText.indexOf('HEADER_REDIRECT:') > -1) {
														var parts = jqXHR.responseText.split(':');
														loadContent(parts[1]);
142 143 144
													} else if (jqXHR.responseText.indexOf('URL_REDIRECT:') > -1) {
														var newUrl= jqXHR.responseText.substr(jqXHR.responseText.indexOf('URL_REDIRECT:') + "URL_REDIRECT:".length);
														document.location.href = newUrl;
145
													} else {
146
														//alert(jqXHR.responseText);
147 148 149
													}
												}
												loadMenus();
150
                                                hideLoadIndicator();
151 152
											},
											error: function() {
153
                                                hideLoadIndicator();
154
												reportError('Ajax Request was not successful.'+module);
cfoe's avatar
cfoe committed
155
											}
156
									});
157 158 159 160 161 162 163 164 165 166 167 168 169 170
}

function submitLoginForm(formname) {
    //* Validate form. TODO: username and password with strip();
    var frm = document.getElementById(formname);
    var userNameObj = frm.username;
    if(userNameObj.value == ''){
        userNameObj.focus();
        return;
    }
    var passwordObj = frm.passwort;
    if(passwordObj.value == ''){
        passwordObj.focus();
        return;
171
    }
172

173 174 175 176
	$('#dummy_username').val(userNameObj.value);
	$('#dummy_passwort').val(passwordObj.value);
	$('#dummy_login_form').submit();

177
	var submitFormObj = jQuery.ajax({		type: "POST",
178 179
											url: "content.php",
											data: jQuery('#'+formname).serialize(),
180
											dataType: "html",
181 182 183
											beforeSend: function() {
												showLoadIndicator();
											},
184 185 186 187 188 189 190 191 192 193 194
											success: function(data, textStatus, jqXHR) {
												if(jqXHR.responseText.indexOf('HEADER_REDIRECT:') > -1) {
													var parts = jqXHR.responseText.split(':');
													//alert(parts[1]);
													loadContent(parts[1]);
													//redirect = parts[1];
													//window.setTimeout('loadContent(redirect)', 1000);
												} else if (jqXHR.responseText.indexOf('LOGIN_REDIRECT:') > -1) {
													// Go to the login page
													document.location.href = 'index.php';
												} else {
195
													jQuery('#pageContent').html(jqXHR.responseText);
196
                                                    onAfterContentLoad('content.php', jQuery('#'+formname).serialize());
mcramer's avatar
mcramer committed
197
                                                    pageFormChanged = false;
198 199
												}
												loadMenus();
200
                                                hideLoadIndicator();
201 202
											},
											error: function() {
203
                                                hideLoadIndicator();
204
												reportError('Ajax Request was not successful.110');
cfoe's avatar
cfoe committed
205
											}
206
									});
207 208 209 210 211
	/*
	if(redirect != '') {
		loadContent(redirect);
		redirect = '';
	}
212
	document.getElementById('footer').innerHTML = 'Powered by <a href="http://www.ispconfig.org" target="_blank">ISPConfig</a>';
213
	*/
214

215 216
}

217
function submitForm(formname,target) {
218
	var submitFormObj = jQuery.ajax({		type: "POST",
219 220
											url: target,
											data: jQuery('#'+formname).serialize(),
221
											dataType: "html",
222 223 224
											beforeSend: function() {
												showLoadIndicator();
											},
225 226 227 228 229 230 231 232
											success: function(data, textStatus, jqXHR) {
												if(jqXHR.responseText.indexOf('HEADER_REDIRECT:') > -1) {
													var parts = jqXHR.responseText.split(':');
													//alert(parts[1]);
													loadContent(parts[1]);
													//redirect = parts[1];
													//window.setTimeout('loadContent(redirect)', 1000);
												} else {
233
													jQuery('#pageContent').html(jqXHR.responseText);
234
                                                    onAfterContentLoad(target, jQuery('#'+formname).serialize());
mcramer's avatar
mcramer committed
235
                                                    pageFormChanged = false;
236
												}
237
                                                hideLoadIndicator();
238 239
											},
											error: function(jqXHR, textStatus, errorThrown) {
240
                                                hideLoadIndicator();
241 242
												var parts = jqXHR.responseText.split(':');
												reportError('Ajax Request was not successful. 111');
cfoe's avatar
cfoe committed
243
											}
244
									});
245 246 247 248 249 250 251 252
	/*
	if(redirect != '') {
		loadContent(redirect);
		redirect = '';
	}
	*/
}

253
function submitFormConfirm(formname,target,confirmation) {
254
	var successMessage = arguments[3];
255
	if(window.confirm(confirmation)) {
256
		var submitFormObj = jQuery.ajax({	type: "POST",
257 258 259
											url: target,
											data: jQuery('#'+formname).serialize(),
											dataType: "html",
260 261 262
											beforeSend: function() {
												showLoadIndicator();
											},
263
											success: function(data, textStatus, jqXHR) {
264
												if(successMessage) alert(successMessage);
265 266 267 268 269 270 271 272
												if(jqXHR.responseText.indexOf('HEADER_REDIRECT:') > -1) {
													var parts = jqXHR.responseText.split(':');
													//alert(parts[1]);
													loadContent(parts[1]);
													//redirect = parts[1];
													//window.setTimeout('loadContent(redirect)', 1000);
												} else {
													jQuery('#pageContent').html(jqXHR.responseText);
273
                                                    onAfterContentLoad(target, jQuery('#'+formname).serialize());
mcramer's avatar
mcramer committed
274
                                                    pageFormChanged = false;
275
												}
276
                                                hideLoadIndicator();
277 278
											},
											error: function(jqXHR, textStatus, errorThrown) {
279
                                                hideLoadIndicator();
280 281
												var parts = jqXHR.responseText.split(':');
												reportError('Ajax Request was not successful. 111');
cfoe's avatar
cfoe committed
282
											}
283 284 285 286
									});
	}
}

287
function submitUploadForm(formname,target) {
288 289
	var handleResponse = function(loadedFrame) {
		var response, responseStr = loadedFrame.contentWindow.document.body.innerHTML;
290

291 292 293 294 295 296 297 298 299 300 301 302 303 304 305
		try {
			response = JSON.parse(responseStr);
		} catch(e) {
			response = responseStr;
		}
		var msg = '';
		var okmsg = jQuery('#OKMsg',response).html();
		if(okmsg){
			msg = '<div id="OKMsg">'+okmsg+'</div>';
		}
		var errormsg = jQuery('#errorMsg',response).html();
		if(errormsg){
			msg = msg+'<div id="errorMsg">'+errormsg+'</div>';
		}
		return msg;
306

307
    };
308

309 310
	var frame_id = 'ajaxUploader-iframe-' + Math.round(new Date().getTime() / 1000);
	jQuery('body').after('<iframe width="0" height="0" style="display:none;" name="'+frame_id+'" id="'+frame_id+'"/>');
311
	jQuery('input[type="file"]').closest("form").attr({target: frame_id, action: target}).submit();
312 313 314 315 316
	jQuery('#'+frame_id).load(function() {
        var msg = handleResponse(this);
		jQuery('#errorMsg').remove();
		jQuery('#OKMsg').remove();
		jQuery('input[name="id"]').before(msg);
317
		jQuery(this).remove();
318 319
      });

320 321 322 323 324 325 326 327 328
	/*
	if(redirect != '') {
		loadContent(redirect);
		redirect = '';
	}
	*/
}

function loadContent(pagename) {
mcramer's avatar
mcramer committed
329
  var params = arguments[1];
330
  var pageContentObject2 = jQuery.ajax({	type: "GET",
331
											url: pagename,
mcramer's avatar
mcramer committed
332
                                            data: (params ? params : null),
333
											dataType: "html",
334
											beforeSend: function() {
335
												showLoadIndicator();
336
											},
337 338 339 340 341 342 343 344
											success: function(data, textStatus, jqXHR) {
												if(jqXHR.responseText.indexOf('HEADER_REDIRECT:') > -1) {
													var parts = jqXHR.responseText.split(':');
													loadContent(parts[1]);
												} else if (jqXHR.responseText.indexOf('URL_REDIRECT:') > -1) {
													var newUrl= jqXHR.responseText.substr(jqXHR.responseText.indexOf('URL_REDIRECT:') + "URL_REDIRECT:".length);
													document.location.href = newUrl;
												} else {
345 346 347 348
													//document.getElementById('pageContent').innerHTML = jqXHR.responseText;
													//var reponse = jQuery(jqXHR.responseText);
													//var reponseScript = reponse.filter("script");
													//jQuery.each(reponseScript, function(idx, val) { eval(val.text); } );
349

350
													jQuery('#pageContent').html(jqXHR.responseText);
351
                                                    onAfterContentLoad(pagename, (params ? params : null));
mcramer's avatar
mcramer committed
352
                                                    pageFormChanged = false;
353
												}
354
                                                hideLoadIndicator();
355 356
											},
											error: function() {
357
                                                hideLoadIndicator();
358
												reportError('Ajax Request was not successful. 113');
cfoe's avatar
cfoe committed
359
											}
360
									});
361 362 363 364
}


function loadInitContent() {
365
	var pageContentObject = jQuery.ajax({	type: "GET",
366 367
											url: "content.php",
											data: "s_mod=login&s_pg=index",
368
											dataType: "html",
369 370 371
											beforeSend: function() {
												showLoadIndicator();
											},
372 373 374 375 376
											success: function(data, textStatus, jqXHR) {
												if(jqXHR.responseText.indexOf('HEADER_REDIRECT:') > -1) {
													var parts = jqXHR.responseText.split(":");
													loadContent(parts[1]);
												} else {
377
													jQuery('#pageContent').html(jqXHR.responseText);
378
                                                    onAfterContentLoad('content.php', "s_mod=login&s_pg=index");
mcramer's avatar
mcramer committed
379
                                                    pageFormChanged = false;
380
												}
381
                                                hideLoadIndicator();
382 383
											},
											error: function() {
384
                                                hideLoadIndicator();
385
												reportError('Ajax Request was not successful. 114');
cfoe's avatar
cfoe committed
386
											}
387
										});
388

389 390 391 392 393 394 395
  loadMenus();
  keepalive();
  setTimeout("setFocus()",1000);

}

function setFocus() {
396
	try {
397
		jQuery('form#pageForm').find('input[name="username"]').focus();
398 399
	} catch (e) {
	}
400 401 402 403
}


function loadMenus() {
404
  var sideNavObject = jQuery.ajax({			type: "GET",
405 406
											url: "nav.php",
											data: "nav=side",
407
											dataType: "html",
408 409 410
											beforeSend: function() {
												showLoadIndicator();
											},
411
											success: function(data, textStatus, jqXHR) {
412
                                                hideLoadIndicator();
413
												jQuery('#sideNav').html(jqXHR.responseText);
414 415
											},
											error: function() {
416
                                                hideLoadIndicator();
417
												reportError('Ajax Request was not successful. 115');
cfoe's avatar
cfoe committed
418
											}
419
									});
420 421

  var topNavObject = jQuery.ajax({			type: "GET",
422 423
											url: "nav.php",
											data: "nav=top",
424
											dataType: "html",
425 426 427
											beforeSend: function() {
												showLoadIndicator();
											},
428
											success: function(data, textStatus, jqXHR) {
429
                                                hideLoadIndicator();
430
												jQuery('#topNav').html(jqXHR.responseText);
431 432
											},
											error: function(o) {
433
                                                hideLoadIndicator();
434
												reportError('Ajax Request was not successful. 116');
cfoe's avatar
cfoe committed
435
											}
436
								});
437 438 439

}

440
function changeTab(tab,target,force) {
441 442
	//document.forms[0].next_tab.value = tab;
	document.pageForm.next_tab.value = tab;
443

444 445 446
    var idel = jQuery('form#pageForm').find('[name="id"]');
    var id = null;
    if(idel.length > 0) id = idel.val();
447
    if(tabChangeDiscard == 'y' && !force) {
448
        if((idel.length < 1 || id) && (pageFormChanged == false || window.confirm(tabChangeDiscardTxt))) {
mcramer's avatar
mcramer committed
449
            var next_tab = tab;
450 451
            if(id) loadContent(target, {'next_tab': next_tab, 'id': id});
            else loadContent(target, {'next_tab': next_tab});
mcramer's avatar
mcramer committed
452 453 454 455 456 457 458 459 460
        } else {
            return false;
        }
    } else {
        if(id && tabChangeWarning == 'y' && pageFormChanged == true) {
            if(window.confirm(tabChangeWarningTxt)) {
                submitForm('pageForm', target);
            } else {
                var next_tab = tab;
461 462
                if(id) loadContent(target, {'next_tab': next_tab, 'id': id});
                else loadContent(target, {'next_tab': next_tab});
mcramer's avatar
mcramer committed
463 464 465 466 467
            }
        } else {
            submitForm('pageForm',target);
        }
    }
468
}
469

470 471 472 473 474 475
function del_record(link,confirmation) {
  if(window.confirm(confirmation)) {
          loadContent(link);
  }
}

476 477 478 479 480 481
function confirm_action(link,confirmation) {
  if(window.confirm(confirmation)) {
          loadContent(link);
  }
}

482
function loadContentInto(elementid,pagename) {
483
  var pageContentObject2 = jQuery.ajax({	type: "GET",
484
											url: pagename,
485
											dataType: "html",
486 487 488
											beforeSend: function() {
//												showLoadIndicator();
											},
489
											success: function(data, textStatus, jqXHR) {
490
//                                                hideLoadIndicator();
491
												jQuery('#'+elementid).html(jqXHR.responseText);
492 493
											},
											error: function() {
494
//                                                hideLoadIndicator();
495
												reportError('Ajax Request was not successful. 118');
cfoe's avatar
cfoe committed
496
											}
497
										});
498 499
}

500
function loadOptionInto(elementid,pagename) {
501
	var pageContentObject2 = jQuery.ajax({	type: "GET",
502
											url: pagename,
503
											dataType: "html",
504 505 506
											beforeSend: function() {
//												showLoadIndicator();
											},
507
											success: function(data, textStatus, jqXHR) {
508
//                                                hideLoadIndicator();
509 510 511 512 513 514 515 516 517 518 519 520 521
												var teste = jqXHR.responseText;
												var elemente = teste.split('#');
												el=document.getElementById(elementid);
												el.innerHTML='';
												for (var i = 0; i < elemente.length; ++i){

													var foo2 = document.createElement("option");
													foo2.appendChild(document.createTextNode(elemente[i]));
													foo2.value=elemente[i];
													el.appendChild(foo2);
												}
											},
											error: function() {
522
//                                                hideLoadIndicator();
523
												reportError('Ajax Request was not successful. 119');
cfoe's avatar
cfoe committed
524
											}
525
										});
526 527
}

528
function keepalive() {
529
	var pageContentObject3 = jQuery.ajax({	type: "GET",
530
											url: "keepalive.php",
531
											dataType: "html",
532 533 534 535 536
											success: function(data, textStatus, jqXHR) {
												setTimeout( keepalive, 1000000 );
											},
											error: function() {
												reportError('Session expired. Please login again.');
cfoe's avatar
cfoe committed
537
											}
538
										});
539 540 541 542
  	//setTimeout( keepalive, 1000000 );
}


543 544 545 546 547 548 549
<?php
$min_password_length = 5;
if(isset($server_config_array['misc']['min_password_length'])) {
	$min_password_length = $app->functions->intval($server_config_array['misc']['min_password_length']);
}
?>
var pass_minimum_length = <?php echo $min_password_length; ?>;
550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581
var pass_messages = new Array();

var pass_message = new Array();
pass_message['text'] = "<?php echo $wb['password_strength_0_txt']?>";
pass_message['color'] = "#d0d0d0";
pass_messages[0] = pass_message;

var pass_message = new Array();
pass_message['text'] = "<?php echo $wb['password_strength_1_txt']?>";
pass_message['color'] = "red";
pass_messages[1] = pass_message;

var pass_message = new Array();
pass_message['text'] = "<?php echo $wb['password_strength_2_txt']?>";
pass_message['color'] = "yellow";
pass_messages[2] = pass_message;

var pass_message = new Array();
pass_message['text'] = "<?php echo $wb['password_strength_3_txt']?>";
pass_message['color'] = "#00ff00";
pass_messages[3] = pass_message;

var pass_message = new Array();
pass_message['text'] = "<?php echo $wb['password_strength_4_txt']?>";
pass_message['color'] = "green";
pass_messages[4] = pass_message;

var pass_message = new Array();
pass_message['text'] = "<?php echo $wb['password_strength_5_txt']?>";
pass_message['color'] = "green";
pass_messages[5] = pass_message;

582 583
var special_chars = "`~!@#$%^&*()_+|\=-[]}{';:/?.>,<\" ";

584 585 586 587 588 589 590
function pass_check(password) {
	var length = password.length;
	var points = 0;
	if (length < pass_minimum_length) {
		pass_result(0);
		return;
	}
591

592 593 594 595
	if (length < 5) {
		pass_result(1);
		return;
	}
596 597 598 599 600 601 602
	
	var different = 0;
	
	if (pass_contains(password, "abcdefghijklnmopqrstuvwxyz")) {
		different += 1;
	}
	
603 604
	if (pass_contains(password, "ABCDEFGHIJKLNMOPQRSTUVWXYZ")) {
		points += 1;
605
		different += 1;
606
	}
607

608 609
	if (pass_contains(password, "0123456789")) {
		points += 1;
610
		different += 1;
611
	}
612

613
	if (pass_contains(password, special_chars)) {
614
		points += 1;
615
		different += 1;
616
	}
617

618
	if (points == 0 || different < 3) {
619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678
		if (length >= 5 && length <=6) {
			pass_result(1);
		} else if (length >= 7 && length <=8) {
			pass_result(2);
		} else {
			pass_result(3);
		}
	} else if (points == 1) {
		if (length >= 5 && length <=6) {
			pass_result(2);
		} else if (length >= 7 && length <=10) {
			pass_result(3);
		} else {
			pass_result(4);
		}
	} else if (points == 2) {
		if (length >= 5 && length <=8) {
			pass_result(3);
		} else if (length >= 9 && length <=10) {
			pass_result(4);
		} else {
			pass_result(5);
		}
	} else if (points == 3) {
		if (length >= 5 && length <=6) {
			pass_result(3);
		} else if (length >= 7 && length <=8) {
			pass_result(4);
		} else {
			pass_result(5);
		}
	} else if (points >= 4) {
		if (length >= 5 && length <=6) {
			pass_result(4);
		} else {
			pass_result(5);
		}
	}
}



function pass_result(points, message) {
	if (points == 0) {
		width = 10;
	} else {
		width = points*20;
	}
	document.getElementById("passBar").innerHTML = '<div style="float:left; height: 10px; padding:0px; background-color: ' + pass_messages[points]['color'] + '; width: ' + width + 'px;" />';
	document.getElementById("passText").innerHTML = pass_messages[points]['text'];
}
function pass_contains(pass, check) {
	for (i = 0; i < pass.length; i++) {
		if (check.indexOf(pass.charAt(i)) > -1) {
			return true;
		}
	}
	return false;
}

679
var new_tpl_add_id = 0;
680
function addAdditionalTemplate(){
681 682 683 684
    var tpl_add = jQuery('#template_additional').val();
    var addTemplate = jQuery('#tpl_add_select').val().split('|',2);
	var addTplId = addTemplate[0];
	var addTplText = addTemplate[1];
685
	if(addTplId > 0) {
686 687 688 689 690 691 692 693 694 695
        var newVal = tpl_add.split('/');
        new_tpl_add_id += 1;
        var delbtn = jQuery('<a href="#"></a>').attr('class', 'button icons16 icoDelete').click(function(e) {
            e.preventDefault();
            delAdditionalTemplate($(this).parent().attr('rel'));
        });
        newVal[newVal.length] = 'n' + new_tpl_add_id + ':' + addTplId;
	    jQuery('<li>' + addTplText + '</li>').attr('rel', 'n' + new_tpl_add_id).append(delbtn).appendTo('#template_additional_list ul');
	    jQuery('#template_additional').val(newVal.join('/'));
	    alert('additional template ' + addTplText + ' added to customer');
696
	} else {
697
	    alert('no additional template selcted');
698 699 700
	}
}

701 702 703 704 705 706 707
function delAdditionalTemplate(tpl_id){
    var tpl_add = jQuery('#template_additional').val();
	if(tpl_id) {
        // new style
		var $el = jQuery('#template_additional_list ul').find('li[rel="' + tpl_id + '"]').eq(0); // only the first
        var addTplText = $el.text();
        $el.remove();
708

709 710 711 712 713 714 715 716 717 718 719
		var oldVal = tpl_add.split('/');
		var newVal = new Array();
        for(var i = 0; i < oldVal.length; i++) {
            var tmp = oldVal[i].split(':', 2);
            if(tmp.length == 2 && tmp[0] == tpl_id) continue;
            newVal[newVal.length] = oldVal[i];
        }
        jQuery('#template_additional').val(newVal.join('/'));
		alert('additional template ' + addTplText + ' deleted from customer');
    } else if(tpl_add != '') {
        // old style
720 721 722
		var addTemplate = document.getElementById('tpl_add_select').value.split('|',2);
		var addTplId = addTemplate[0];
		var addTplText = addTemplate[1];
723 724 725 726 727 728 729 730 731

		jQuery('#template_additional_list ul').find('li:not([rel])').each(function() {
            var text = jQuery(this).text();
            if(text == addTplText) {
                jQuery(this).remove();
                return false;
            }
            return this;
        });
732

733
		var newVal = tpl_add;
734 735
        var repl = new RegExp('(^|\/)' + addTplId + '(\/|$)');
		newVal = newVal.replace(repl, '');
736
		newVal = newVal.replace('//', '/');
737
		jQuery('#template_additional').val(newVal);
738 739 740 741
		alert('additional template ' + addTplText + ' deleted from customer');
  } else {
  	alert('no additional template selcted');
  }
742

743
}
744 745 746 747 748 749 750 751 752 753 754

function getInternetExplorerVersion() {
    var rv = -1; // Return value assumes failure.
    if (navigator.appName == 'Microsoft Internet Explorer') {
        var ua = navigator.userAgent;
        var re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
        if (re.exec(ua) != null)
            rv = parseFloat(RegExp.$1);
    }
    return rv;
}
755

756
function password(minLength, special, num_special){
757
	minLength = minLength || 10;
758
	if(minLength < 8) minLength = 8;
759 760
	var maxLength = minLength + 5;
	var length = getRandomInt(minLength, maxLength);
761 762 763 764 765 766 767 768 769
	
	var alphachars = "abcdefghijklmnopqrstuvwxyz";
	var upperchars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    var numchars = "1234567890";
    var specialchars = "!@#_";
	
	if(num_special == undefined) num_special = 0;
	if(special != undefined && special == true) {
		num_special = Math.floor(Math.random() * (length / 4)) + 1;
770
	}
771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790
	var numericlen = getRandomInt(1, 2);
	var alphalen = length - num_special - numericlen;
	var upperlen = Math.floor(alphalen / 2);
	alphalen = alphalen - upperlen;
	var password = "";
	
	for(i = 0; i < alphalen; i++) {
		password += alphachars.charAt(Math.floor(Math.random() * alphachars.length));
	}
	
	for(i = 0; i < upperlen; i++) {
		password += upperchars.charAt(Math.floor(Math.random() * upperchars.length));
	}
	
	for(i = 0; i < num_special; i++) {
		password += specialchars.charAt(Math.floor(Math.random() * specialchars.length));
	}
	
	for(i = 0; i < numericlen; i++) {
		password += numchars.charAt(Math.floor(Math.random() * numchars.length));
791
	}
792 793 794
	
	password = password.split('').sort(function() { return 0.5 - Math.random(); }).join('');
	
795 796 797
	return password;
}

798 799 800 801 802 803 804
<?php
$min_password_length = 10;
if(isset($server_config_array['misc']['min_password_length'])) {
	$min_password_length = $app->functions->intval($server_config_array['misc']['min_password_length']);
}
?>

Falko Timme's avatar
Falko Timme committed
805
function generatePassword(passwordFieldID, repeatPasswordFieldID){
806 807 808 809
	var oldPWField = jQuery('#'+passwordFieldID);
	var newPWField = oldPWField.clone();
	newPWField.attr('type', 'text').attr('id', 'tmp'+passwordFieldID).insertBefore(oldPWField);
	oldPWField.remove();
810
	var pword = password(<?php echo $min_password_length; ?>, false, 1);
Falko Timme's avatar
Falko Timme committed
811
	jQuery('#'+repeatPasswordFieldID).val(pword);
812
	newPWField.attr('id', passwordFieldID).val(pword).trigger('keyup').select();
813
}
814

815 816
var funcDisableClick = function(e) { e.preventDefault(); return false; };

817 818 819 820 821 822 823
function checkPassMatch(pwField1,pwField2){
    var rpass = jQuery('#'+pwField2).val();
    var npass = jQuery('#'+pwField1).val();
    if(npass!= rpass) {
		jQuery('#confirmpasswordOK').hide();
        jQuery('#confirmpasswordError').show();
		jQuery('button.positive').attr('disabled','disabled');
824 825 826 827 828 829
        jQuery('.tabbox_tabs ul li a').each(function() {
            var $this = $(this);
            $this.data('saved_onclick', $this.attr('onclick'));
            $this.removeAttr('onclick');
            $this.click(funcDisableClick);
        });
830 831 832 833 834
        return false;
    } else {
		jQuery('#confirmpasswordError').hide();
        jQuery('#confirmpasswordOK').show();
		jQuery('button.positive').removeAttr('disabled');
835 836 837 838 839
		jQuery('.tabbox_tabs ul li a').each(function() {
            var $this = $(this);
            $this.unbind('click', funcDisableClick);
            if($this.data('saved_onclick') && !$this.attr('onclick')) $this.attr('onclick', $this.data('saved_onclick'));
        });
840 841 842
    }
}

843 844 845 846
function getRandomInt(min, max){
    return Math.floor(Math.random() * (max - min + 1)) + min;
}

847 848 849 850 851
jQuery('.addPlaceholder').live("click", function(){
	var placeholderText = jQuery(this).text();
	var template = jQuery(this).siblings(':input');
	template.insertAtCaret(placeholderText);
});
852 853 854 855 856 857

jQuery('.addPlaceholderContent').live("click", function(){
	var placeholderContentText = jQuery(this).find('.addPlaceholderContent').text();
	var template2 = jQuery(this).siblings(':input');
	template2.insertAtCaret(placeholderContentText);
});
858

859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884
jQuery.fn.extend({
	insertAtCaret: function(myValue){
		return this.each(function(i) {
			if (document.selection) {
				//For browsers like Internet Explorer
				this.focus();
				sel = document.selection.createRange();
				sel.text = myValue;
				this.focus();
			} else if (this.selectionStart || this.selectionStart == '0') {
				//For browsers like Firefox and Webkit based
				var startPos = this.selectionStart;
				var endPos = this.selectionEnd;
				var scrollTop = this.scrollTop;
				this.value = this.value.substring(0, startPos)+myValue+this.value.substring(endPos,this.value.length);
				this.focus();
				this.selectionStart = startPos + myValue.length;
				this.selectionEnd = startPos + myValue.length;
				this.scrollTop = scrollTop;
			} else {
				this.value += myValue;
				this.focus();
			}
		})
	}
});