Index: branches/RC/core/admin_templates/js/ajax.js
===================================================================
diff -u -N
--- branches/RC/core/admin_templates/js/ajax.js (revision 11932)
+++ branches/RC/core/admin_templates/js/ajax.js (revision 0)
@@ -1,484 +0,0 @@
-function preg_print_pre(obj, reg)
-{
- if (!reg) reg = /.*/;
- var p = ''
- for (var prop in obj) {
- if (prop.match(reg) ) {
- p += prop + ': '+obj[prop] + '\n'
- }
- }
- alert(p)
-}
-
-
-// Main AJAX classs
-function Request() {}
-
-Request.timeout = 60000; //60 seconds
-Request.method = 'GET';
-Request.headers = {};
-Request.params = null;
-Request.progressText = 'Loading ...';
-
-Request.makeRequest = function(p_url, p_busyReq, p_progId, p_successCallBack, p_errorCallBack, p_pass, p_object) {
- //p_url: the web service url
- //p_busyReq: is a request for this object currently in progress?
- //p_progId: element id where progress HTML should be shown
- //p_successCallBack: callback function for successful response
- //p_errorCallBack: callback function for erroneous response
- //p_pass: string of params to pass to callback functions
- //p_object: object of params to pass to callback functions
-
- if (p_busyReq) return;
- var req = Request.getRequest();
- if (req != null) {
- p_busyReq = true;
- Request.showProgress(p_progId);
- req.onreadystatechange = function() {
- if (req.readyState == 4) {
- p_busyReq = false;
- window.clearTimeout(toId);
- try {
- if (req.status == 200) {
- // preg_print_pre(req)
- p_successCallBack(req, p_pass, p_object);
- } else {
- p_errorCallBack(req, p_pass, p_object);
- }
- Request.hideProgress(p_progId);
- }
- catch (e) {
-// alert('AJAX error')
- }
- }
- }
- var $ajax_mark = (p_url.indexOf('?') ? '&' : '?') + 'ajax=yes';
- req.open(Request.method, p_url + $ajax_mark, true);
-
- if (Request.method == 'POST') {
- Request.headers['Content-type'] = 'application/x-www-form-urlencoded';
- Request.headers['referer'] = p_url;
- }
- else {
- Request.headers['If-Modified-Since'] = 'Sat, 1 Jan 2000 00:00:00 GMT';
- }
-
- Request.sendHeaders(req);
- if (Request.method == 'POST') {
- req.send(Request.params);
- Request.method = 'GET'; // restore method back to GET
- }
- else {
- req.send(null);
- }
-
- var toId = window.setTimeout( function() {if (p_busyReq) req.abort();}, Request.timeout );
- }
-}
-
-Request.processRedirect = function($request) {
- var $match_redirect = new RegExp('^#redirect#(.*)').exec($request.responseText);
- if ($match_redirect != null) {
- // redirect to external template requested
- window.location.href = $match_redirect[1];
- return true;
- }
- return false;
-}
-Request.sendHeaders = function($request) {
- for (var $header_name in Request.headers) {
- if (typeof Request.headers[$header_name] == 'function') {
- continue;
- }
- $request.setRequestHeader($header_name, Request.headers[$header_name]);
- }
- Request.headers = {}; // reset header afterwards
-}
-
-Request.getRequest = function() {
- var xmlHttp;
- try { xmlHttp = new ActiveXObject('MSXML2.XMLHTTP'); return xmlHttp; } catch (e) {}
- try { xmlHttp = new ActiveXObject('Microsoft.XMLHTTP'); return xmlHttp; } catch (e) {}
- try { xmlHttp = new XMLHttpRequest(); return xmlHttp; } catch(e) {}
- return null;
-}
-
-Request.showProgress = function(p_id) {
- if (p_id != '') {
- var $content_div = $( jq('#' + p_id) );
- var $content_offset = $content_div.offset();
- var $content_width = $content_div.width();
- var $content_height = $content_div.height();
-
-// alert('id: ' + p_id + '; ch: ' + $content_div.get(0).clientHeight + '; sh: ' + $content_div.get(0).style.height);
-
- var $parent_div = $content_div.parents(':first');
-
- // use parent height, when own height is larger, then parent's
- $content_width = Math.min($content_width, $parent_div.width());
- $content_height = Math.min($content_height, $parent_div.height());
-
- var $progress_overlay = $( jq('#' + p_id + '_progress') );
-
- if ($progress_overlay.length == 0) {
- $progress_overlay = $('
');
-
- var $maximal_height = $(window).height() - $content_offset.top;
-
- $progress_overlay.css(
- {
- width: $content_div.width(),
- height: $content_height > 0 ? $content_height : $maximal_height,
- left: $content_offset.left,
- top: $content_offset.top + $parent_div.scrollTop(),
- position: 'absolute',
- zIndex: 30,
- opacity: 0.5,
- backgroundColor: '#2D79D6',
-
- // don't show progress overlay, when target div is hidden
- display: $content_offset.top /*$content_height*/ > 0 ? 'block' : 'none'
- }
- );
-
- $('body').append($progress_overlay);
-
- $progress_overlay.html( Request.getProgressHtml() );
- }
- else {
- if ($content_height > 0) {
- // show progress, only when target div is visible
- $progress_overlay.css(
- {
- width: $content_width,
- height: $content_height,
- top: $content_offset.top + $parent_div.scrollTop()
- }
- );
- }
-
- $progress_overlay.show();
- }
-
- }
-}
-
-Request.hideProgress = function(p_id) {
- if (p_id != '') {
- $( jq('#' + p_id + '_progress') ).hide();
- }
-}
-
-Request.setOpacity = function (opacity, id) {
- var $element = $( typeof(id) == 'string' ? jq('#' + id) : id );
- $element.css('opacity', opacity / 100);
-}
-
-Request.getProgressHtml = function() {
- return "" + Request.progressText + "
";
-}
-
-Request.getErrorHtml = function(p_req) {
- //TODO: implement accepted way to handle request error
- return '[status: ' + p_req.status + '; status_text: ' + p_req.statusText + '; responce_text: ' + p_req.responseText + ']';
-}
-
-Request.serializeForm = function(theform) {
- if (typeof(theform) == 'string') {
- theform = document.getElementById(theform);
- }
-
- var els = theform.elements;
- var len = els.length;
- var queryString = '';
-
- Request.addField = function(name, value) {
- if (queryString.length > 0) queryString += '&';
- queryString += encodeURIComponent(name) + '=' + encodeURIComponent(value);
- };
-
- for (var i = 0; i= 0) {
- Request.addField(el.name, el.options[el.selectedIndex].value);
- }
- break;
-
- case 'select-multiple':
- for (var j = 0; j < el.options.length; j++) {
- if (!el.options[j].selected) continue;
- Request.addField(el.name, el.options[j].value);
- }
- break;
-
- case 'checkbox':
- case 'radio':
- if (!el.checked) continue;
- Request.addField(el.name,el.value);
- break;
- }
- }
- return queryString;
-};
-
-// AJAX ProgressBar class
-function AjaxProgressBar($url) {
- this.WindowTitle = this.GetWindow().document.title;
- this.URL = $url;
- this.BusyRequest = false;
- this.LastResponceTime = this.GetMicroTime();
- this.ProgressPercent = 0; // progress percent
- this.ProgressTime = new Array();
- this.Query();
-}
-
-AjaxProgressBar.prototype.GetWindow = function() {
- return window.parent ? window.parent : window;
-}
-
-AjaxProgressBar.prototype.GetMicroTime = function() {
- var $now = new Date();
- return Math.round($now.getTime() / 1000); // because miliseconds are returned too
-}
-
-AjaxProgressBar.prototype.Query = function() {
-// prompt('requestinng', this.URL);
- Request.makeRequest(this.URL, this.BusyRequest, '', this.successCallback, this.errorCallback, '', this);
-}
-
-// return time needed for progress to finish
-AjaxProgressBar.prototype.GetEstimatedTime = function() {
- return Math.ceil((100 - this.ProgressPercent) * Math.sum(this.ProgressTime) / this.ProgressPercent);
-}
-
-AjaxProgressBar.prototype.successCallback = function($request, $params, $object) {
- var $responce = $request.responseText;
- var $match_redirect = new RegExp('^#redirect#(.*)').exec($responce);
- if ($match_redirect != null) {
- $object.showProgress(100);
- // redirect to external template requested
- window.location.href = $match_redirect[1];
- return false;
- }
-
- if (isNaN(parseFloat($responce))) {
- // error message received, otherwise $responce should be number
- alert($responce);
- return ;
- }
-
- if ($object.showProgress($responce)) {
- $object.Query();
- }
-}
-
-AjaxProgressBar.prototype.errorCallback = function($request, $params, $object) {
- alert('AJAX Error; class: AjaxProgressBar; ' + Request.getErrorHtml($request));
-}
-
-AjaxProgressBar.prototype.FormatTime = function ($seconds) {
- $seconds = parseInt($seconds);
-
- var $minutes = Math.floor($seconds / 60);
- if ($minutes < 10) $minutes = '0' + $minutes;
- $seconds = $seconds % 60;
- if ($seconds < 10) $seconds = '0' + $seconds;
-
- return $minutes + ':' + $seconds;
-}
-
-AjaxProgressBar.prototype.showProgress = function ($percent) {
- this.ProgressPercent = $percent;
- var $now = this.GetMicroTime();
- this.ProgressTime[this.ProgressTime.length] = $now - this.LastResponceTime;
- this.LastResponceTime = $now;
-
- var $display_progress = parseInt(this.ProgressPercent);
- this.GetWindow().document.title = $display_progress + '% - ' + this.WindowTitle;
- document.getElementById('progress_display[percents_completed]').innerHTML = $display_progress + '%';
- document.getElementById('progress_display[elapsed_time]').innerHTML = this.FormatTime( Math.sum(this.ProgressTime) );
- document.getElementById('progress_display[Estimated_time]').innerHTML = this.FormatTime( this.GetEstimatedTime() );
-
- document.getElementById('progress_bar[done]').style.width = $display_progress + '%';
- document.getElementById('progress_bar[left]').style.width = (100 - $display_progress) + '%';
- return $percent < 100 ? true : false;
-}
-
-// AJAX PopupManager class
-function AjaxPopupManager($url) {
- this.URL = $url;
- this.ResponceFunction = null;
- this.PopupSizes = new Array();
-}
-
-AjaxPopupManager.prototype.GetSize = function ($template) {
- if (this.ResponceFunction == null) {
- alert ('Please define responce function first (type: '+typeof(this.ResponceFunction)+')');
- }
-
- if (!isset(this.PopupSizes[$template])) {
- var $url = this.URL + '&type=GetPopupSize&template_name=' + $template;
-// alert('from ajax: '+$url);
- Request.makeRequest($url, this.BusyRequest, '', this.successCallback, this.errorCallback, ['GetSize', $template], this);
- }
- else {
-// alert('from cache');
- this.ResponceFunction(this.PopupSizes[$template]);
- }
-}
-
-AjaxPopupManager.prototype.successCallback = function($request, $params, $object) {
- var $responce = $request.responseText;
- /*var $match_redirect = new RegExp('^#redirect#(.*)').exec($responce);
- if ($match_redirect != null) {
- alert('AJAX REDIRECT!!!')
- // redirect to external template requested
- window.location.href = $match_redirect[1];
- return false;
- }*/
-
- switch ($params[0]) {
- case 'GetSize':
- // store responce to cache for future use
- $object.PopupSizes[ $params[1] ] = $responce;
- break;
- }
-
- $object.ResponceFunction($responce);
- $object.ResponceFunction = null; // reset responce function
-}
-
-AjaxPopupManager.prototype.errorCallback = function($request, $params, $object) {
- alert('AJAX Error; class: AjaxPopupManager; ' + Request.getErrorHtml($request));
-}
-
-// AJAX DropdownPreloader class
-function AjaxDropdownPreloader($url, $input_mask, $filter_field, $dependend_field, value) {
- this.URL = $url;
- this.InputMask = $input_mask;
- this.FilterField = $filter_field;
- this.DependendField = $dependend_field;
- this.Titles = this.prepareTitles();
- this.Value = value;
- this.BusyRequest = false;
-}
-
-AjaxDropdownPreloader.prototype.prepareURL = function()
-{
- return this.URL.replace('#DEPENDEND#', this.Dependend).replace('#FILTER_VALUE#', this.getValue(this.FilterField));
-}
-
-AjaxDropdownPreloader.prototype.prepareTitles = function() {
- var $control = this.getControl(this.DependendField);
- var $i = 0;
- var $ret = new Array ();
- while ($i < $control.options.length) {
- $ret[$control.options[$i].value] = $control.options[$i].innerHTML;
- $i++;
- }
- return $ret;
-}
-
-AjaxDropdownPreloader.prototype.getValue = function($field_name) {
- var $control = this.getControl($field_name);
- if ($control.tagName == 'INPUT') return $control.value;
- return $control.selectedIndex > 0 ? $control.options[$control.selectedIndex].value : '';
-}
-
-AjaxDropdownPreloader.prototype.Query = function () {
- var $url = this.prepareURL();
- var $selected_value = this.Value || this.getValue(this.DependendField);
- // remove all existing options
- this.removeOptions();
- Request.makeRequest($url, this.BusyRequest, '', this.successCallback, this.errorCallback, $selected_value, this);
-}
-
-AjaxDropdownPreloader.prototype.getControl = function($field) {
- var $id = this.InputMask.replace('#FIELD#', $field);
- return document.getElementById($id);
-}
-
-AjaxDropdownPreloader.prototype.successCallback = function($request, $params, $object) {
- if (Request.processRedirect($request) === true) {
- return ;
- }
- var control = $object.getControl($object.DependendField)
- $object.ProcessXMLNode($request.responseXML, control, $params);
- runOnChange(control);
- $object.AfterProcess();
-}
-
-AjaxDropdownPreloader.prototype.ProcessXMLNode = function($node, $dst_field, $selected_value) {
- for (var i = 0; i < $node.childNodes.length; i++) {
- var $child = $node.childNodes.item(i);
- switch ($child.tagName) {
- case 'option':
- var opt_value = $child.getAttribute('value');
- var title;
- if (opt_value) { // value is passed explicically
- title = $child.firstChild.nodeValue
- }
- else {
- opt_value = $child.firstChild.nodeValue;
- title = this.Titles[$child.firstChild.nodeValue];
- }
- this.addOption($dst_field, opt_value, title, $child.attributes);
- if (!$dst_field.multiple && (opt_value == $selected_value)) {
- $dst_field.options[$dst_field.options.length - 1].selected = true;
- }
- break;
- case 'field_options':
- if (!$dst_field.multiple) {
- this.addOption($dst_field, '', '');
- }
- // add new states
- this.ProcessXMLNode($child, $dst_field, $selected_value);
- if ($dst_field.options.length == 0 || $dst_field.options.length == 2) {
- $dst_field.value = $dst_field.options[$dst_field.options.length - 1].value;
- }
- break;
- }
- }
-}
-
-AjaxDropdownPreloader.prototype.AfterProcess = function() {
-
-}
-
-AjaxDropdownPreloader.prototype.removeOptions = function($object) {
- if (!$object) $object = this.getControl(this.DependendField);
- if ($object.options.length > 0) {
- while ($object.options.length > 0) {
- $object.remove(0);
- }
- }
-}
-
-AjaxDropdownPreloader.prototype.addOption = function($object, $value, $title, attributes) {
- var $option = document.createElement('OPTION');
- $object.options.add($option, $object.options.length);
- $option.innerText = $title;
- $option.innerHTML = $title;
- $option.value = $value;
- if (attributes) {
- for (var i=0; i