/*@jquery.hotkeys.js*/
(function (jQuery){
    // keep reference to the original $.fn.bind, $.fn.unbind and $.fn.find
    jQuery.fn.__bind__ = jQuery.fn.bind;
    jQuery.fn.__unbind__ = jQuery.fn.unbind;
    jQuery.fn.__find__ = jQuery.fn.find;
    
    var hotkeys = {
        version: '0.7.9',
        override: /keypress|keydown|keyup/g,
        triggersMap: {},
        
        specialKeys: { 27: 'esc', 9: 'tab', 32:'space', 13: 'return', 8:'backspace', 145: 'scroll', 
            20: 'capslock', 144: 'numlock', 19:'pause', 45:'insert', 36:'home', 46:'del',
            35:'end', 33: 'pageup', 34:'pagedown', 37:'left', 38:'up', 39:'right',40:'down', 
            109: '-', 
            112:'f1',113:'f2', 114:'f3', 115:'f4', 116:'f5', 117:'f6', 118:'f7', 119:'f8', 
            120:'f9', 121:'f10', 122:'f11', 123:'f12', 191: '/'},
        
        shiftNums: { "`":"~", "1":"!", "2":"@", "3":"#", "4":"$", "5":"%", "6":"^", "7":"&", 
            "8":"*", "9":"(", "0":")", "-":"_", "=":"+", ";":":", "'":"\"", ",":"<", 
            ".":">",  "/":"?",  "\\":"|" },
        
        newTrigger: function (type, combi, callback) { 
            // i.e. {'keyup': {'ctrl': {cb: callback, disableInInput: false}}}
            var result = {};
            result[type] = {};
            result[type][combi] = {cb: callback, disableInInput: false};
            return result;
        }
    };
    // add firefox num pad char codes
    //if (jQuery.browser.mozilla){
    // add num pad char codes
    hotkeys.specialKeys = jQuery.extend(hotkeys.specialKeys, { 96: '0', 97:'1', 98: '2', 99: 
        '3', 100: '4', 101: '5', 102: '6', 103: '7', 104: '8', 105: '9', 106: '*', 
        107: '+', 109: '-', 110: '.', 111 : '/'
        });
    //}
    
    // a wrapper around of $.fn.find 
    // see more at: http://groups.google.com/group/jquery-en/browse_thread/thread/18f9825e8d22f18d
    jQuery.fn.find = function( selector ) {
        this.query = selector;
        return jQuery.fn.__find__.apply(this, arguments);
	};
    
    jQuery.fn.unbind = function (type, combi, fn){
        if (jQuery.isFunction(combi)){
            fn = combi;
            combi = null;
        }
        if (combi && typeof combi === 'string'){
            var selectorId = ((this.prevObject && this.prevObject.query) || (this[0].id && this[0].id) || this[0]).toString();
            var hkTypes = type.split(' ');
            for (var x=0; x<hkTypes.length; x++){
                delete hotkeys.triggersMap[selectorId][hkTypes[x]][combi];
            }
        }
        // call jQuery original unbind
        return  this.__unbind__(type, fn);
    };
    
    jQuery.fn.bind = function(type, data, fn){
        // grab keyup,keydown,keypress
        var handle = type.match(hotkeys.override);
        
        if (jQuery.isFunction(data) || !handle){
            // call jQuery.bind only
            return this.__bind__(type, data, fn);
        }
        else{
            // split the job
            var result = null,            
            // pass the rest to the original $.fn.bind
            pass2jq = jQuery.trim(type.replace(hotkeys.override, ''));
            
            // see if there are other types, pass them to the original $.fn.bind
            if (pass2jq){
                result = this.__bind__(pass2jq, data, fn);
            }            
            
            if (typeof data === "string"){
                data = {'combi': data};
            }
            if(data.combi){
                for (var x=0; x < handle.length; x++){
                    var eventType = handle[x];
                    var combi = data.combi.toLowerCase(),
                        trigger = hotkeys.newTrigger(eventType, combi, fn),
                        selectorId = ((this.prevObject && this.prevObject.query) || (this[0].id && this[0].id) || this[0]).toString();
                        
                    //trigger[eventType][combi].propagate = data.propagate;
                    trigger[eventType][combi].disableInInput = data.disableInInput;
                    
                    // first time selector is bounded
                    if (!hotkeys.triggersMap[selectorId]) {
                        hotkeys.triggersMap[selectorId] = trigger;
                    }
                    // first time selector is bounded with this type
                    else if (!hotkeys.triggersMap[selectorId][eventType]) {
                        hotkeys.triggersMap[selectorId][eventType] = trigger[eventType];
                    }
                    // make trigger point as array so more than one handler can be bound
                    var mapPoint = hotkeys.triggersMap[selectorId][eventType][combi];
                    if (!mapPoint){
                        hotkeys.triggersMap[selectorId][eventType][combi] = [trigger[eventType][combi]];
                    }
                    else if (mapPoint.constructor !== Array){
                        hotkeys.triggersMap[selectorId][eventType][combi] = [mapPoint];
                    }
                    else {
                        hotkeys.triggersMap[selectorId][eventType][combi][mapPoint.length] = trigger[eventType][combi];
                    }
                    
                    // add attribute and call $.event.add per matched element
                    this.each(function(){
                        // jQuery wrapper for the current element
                        var jqElem = jQuery(this);
                        
                        // element already associated with another collection
                        if (jqElem.attr('hkId') && jqElem.attr('hkId') !== selectorId){
                            selectorId = jqElem.attr('hkId') + ";" + selectorId;
                        }
                        jqElem.attr('hkId', selectorId);
                    });
                    result = this.__bind__(handle.join(' '), data, hotkeys.handler)
                }
            }
            return result;
        }
    };

    hotkeys.findElement = function (elem){
        if (!jQuery(elem).attr('hkId')){
            if (jQuery.browser.opera || jQuery.browser.safari){
                while (!jQuery(elem).attr('hkId') && elem.parentNode){
                    elem = elem.parentNode;
                }
            }
        }
        return elem;
    };

    hotkeys.handler = function(event) {
        var target = hotkeys.findElement(event.currentTarget), 
            jTarget = jQuery(target),
            ids = jTarget.attr('hkId');
        
        if(ids){
            ids = ids.split(';');
            var code = event.which,
                type = event.type,
                special = hotkeys.specialKeys[code],
                character = !special && String.fromCharCode(code).toLowerCase(),
                shift = !!event.shiftKey,
                ctrl = !!event.ctrlKey,            
                alt = !!event.altKey || (!!event.originalEvent && !!event.originalEvent.altKey),
                mapPoint = null;

            for (var x=0; x < ids.length; x++){
                if (hotkeys.triggersMap[ids[x]][type]){
                    mapPoint = hotkeys.triggersMap[ids[x]][type];
                    break;
                }
            }
            

            if (mapPoint){ 
                var trigger;

                if(!shift && !ctrl && !alt) { // No Modifiers
                    trigger = mapPoint[special] ||  (character && mapPoint[character]);
                }
                else{

                    var modif = '';
                    if(alt) modif +='alt+';
                    if(ctrl) modif+= 'ctrl+';
                    if(shift) modif += 'shift+';

                    trigger = mapPoint[modif+special];
                    if (!trigger){
                        if (character){
                            trigger = mapPoint[modif+character] 
                                || mapPoint[modif+hotkeys.shiftNums[character]]

                                || (modif === 'shift+' && mapPoint[hotkeys.shiftNums[character]]);
                        }
                    }
                }
                if (trigger){
                    var result = false;
                    for (var x=0; x < trigger.length; x++){
                        if(trigger[x].disableInInput){

                            var elem = jQuery(event.target);
                            if (jTarget.is("input") || jTarget.is("textarea") || jTarget.is("select") 
                                || elem.is("input") || elem.is("textarea") || elem.is("select")) {
                                return true;
                            }
                        }                       

                        result = result || trigger[x].cb.apply(this, [event]);
                    }
                    return result;
                }
            }
        }
    };

    window.hotkeys = hotkeys;
    return jQuery;
})(jQuery);

/*@common.js*/
var _globals = {
pathToOk: '_datasources/',
pathToCore: '_core/',
pictScriptPath: 'http://isu.tisbi.ru/pict/?PID=',
pathToTranslator: '_core/translate.php',
imageBase: '_images/silk/{img}.png',
imageBaseCommon: '_images/{img}',
caption: 'ИСУ ВУЗ',
modules: {},
instances: [],
accessedActions:[],
data: {},
ajaxCallbackAwaiting: [],
useExtendedErrors: true
}
var globals = $.extend({},_globals);
String.prototype.set = function(name,value,modifiers){
var r = RegExp("\{"+name+"\}",modifiers || "ig");
return this.replace(r,value);
}
String.prototype.toDate = function(){
return new Date(this.replace(/-/g,'/'));
}
var ajaxStat = {
len: 0,
count: 0,
inWait: 0,
history: []
}
function cm_on(p){
cm('mod_object_navigator',p);
}
function cm_img(img,alt,style){
var ib = globals.imageBase;
if(img.search(/\.(gif|jpg|jpeg)$/i)!=-1)ib = ib.substr(0,ib.length-4);
if(alt)alt=alt.replace(/"/,'\"');
return '<img src="'+ib.set('img',img)+
'" width="16" height="16" alt="'+(alt?alt:'img')+'" '+
(alt?'title="'+alt+'"':'')+
(style?' style="'+style+'"':'')+' />';
if(alt)alt=alt.replace(/"/,'\"');
if(alt)alt=alt.replace(/"/,'\"');
}
function cm_help_caller(keyword,text){
return '<span class="likealink" onclick="cm(\'help\',\''+keyword+'\');">'+(text||keyword)+'</span>';
}
function cm_calc(context,name,args){
if(typeof context[name]=='function'){
if(!args)args=[];
try{
return context[name].apply(context,args);
}catch(e){
alert('Error in calc '+name);
console.log(context,e);
}
}else{
return context[name];
}
}
function cm_format_date(str){
var y = parseInt(str.substr(0,4));
var m = parseInt(str.substr(5,2))-1;
var d = parseInt(str.substr(8,2));
var time = str.substr(11,5);
var mn = Date.abbrMonthNames;
return d+' '+mn[m]+' '+y+' в '+time;
}
function cm_get(url,params,callback){
if(url.search(/^[^\\\/]*(?=\.php)/)==0){
url = globals.pathToOk+url;
}
var entry = {
url: url,
params: (typeof params == 'function'?null:params),
id: ajaxStat.history.length
};
ajaxStat.history.push(entry);
$.get(url,params,function(x){
entry.response = x;
if(typeof callback == 'function') callback(x);
else if(typeof params == 'function') params(x);
});
}
function cm_get_json(url,params,callback,port){cm_ajax_json('get',url,params,callback,port);}
function cm_post_json(url,params,callback,port){cm_ajax_json('post',url,params,callback,port);}
function cm_ajax_json(type,url,params,callback,port){
if(typeof type=='undefined')type='post';
if(url.search(/^[^\\\/]*(?=\.php)/)==0){
url = globals.pathToOk+url;
}
if(typeof port!='undefined'){
console.log(port);
switch(port){					
case 'http' : url = 'http://'+location.hostname+location.pathname+url;
//case 'https' : url = 'https://'+location.hostname+location.pathname+url;		
}};

var in_wait = false;
var pp = typeof params == 'function'?'':$.param(params);
for(var i in globals.ajaxCallbackAwaiting){
if(globals.ajaxCallbackAwaiting[i].url==url && globals.ajaxCallbackAwaiting[i].pp==pp){
in_wait = true;
var waitor = globals.ajaxCallbackAwaiting[i];
break;
}
}
if(in_wait){
waitor.cb.push(typeof params == 'function'?params:callback);
}else{
var waitor = {
url: url,
pp: pp,
cb: [typeof params == 'function'?params:callback]
}
globals.ajaxCallbackAwaiting.push(waitor);
}
if(waitor.cb.length==1){
var entry = {
url: url,
params: typeof params == 'function'?null:params,
id: ajaxStat.history.length
};
if(typeof params == 'function'){
callback=params;
params = {};
}
ajaxStat.history.push(entry);
var fff = function(x){
entry.response = x;
try{
x = $.parseJSON(x);
}catch(e){
alert('JSON Parsing @ cm_get_js('+url+'): '+e.message);
return false;
}
try{
var c;
while(waitor.cb.length>0){
c = waitor.cb.pop();
if(typeof c == 'function'){
c(x);
}
}
delete waitor;
}catch(e){
console.log(e);
alert('Error in callback after requesting url '+url+'\nMessage: '+$.toJSON(e));
}
}
if(type == 'post')
$.post(url,params,fff);
else
$.get(url,params,fff);
}
}
function ie_select_locate(select,value){
var options = select.options;
for(var i=0;i<options.length;i++){
if(parseInt(options[i].value)==value){
select.selectedIndex = i;
return true;
}
}
return false;
}
function cm_in_array(arr,subj){
if(typeof arr == 'array' || typeof arr == 'object'){
for(var i in arr)if(arr[i]==subj)return true;
return false;
}else{
throw 'Функция cm_in_array принимает первым параметром массив';
return false;
}
}
function cm_centrize(element,w,h){
var myWidth = 0;
var myHeight = 0;
if(typeof(window.innerWidth)=='number'){
myWidth = window.innerWidth;
myHeight = window.innerHeight;
}else if (document.documentElement && (document.documentElement.clientWidth || document.documentElement.clientHeight)) {
myWidth = document.documentElement.clientWidth;
myHeight = document.documentElement.clientHeight;
}else if (document.body && (document.body.clientWidth || document.body.clientHeight)) {
myWidth = document.body.clientWidth;
myHeight = document.body.clientHeight;
}
if(h>myHeight)myHeight=h;
var scrOfX = 0, scrOfY = 0;
if(typeof(window.pageYOffset) == 'number') {
scrOfY = window.pageYOffset;
scrOfX = window.pageXOffset;
} else if (document.body && (document.body.scrollLeft || document.body.scrollTop)) {
scrOfY = document.body.scrollTop;
scrOfX = document.body.scrollLeft;
} else if (document.documentElement && (document.documentElement.scrollLeft || document.documentElement.scrollTop)) {
scrOfY = document.documentElement.scrollTop;
scrOfX = document.documentElement.scrollLeft;
}
var top2 = Math.round((myHeight - h) / 2 + scrOfY);
if(top2<10)
top2=10;
element.style.top = String(top2) + 'px';
element.style.left = String(Math.round((myWidth - w) / 2) + scrOfX) + 'px';
}
queue = function(){
this.init();
}
queue.prototype = {
c: 0,
b: false,
init: function(fn){
this.q = new Array();
},
add: function(fn,params,prev){
		var q=this.q,pos;
		// Вычисляем позицию если надо
		if(prev)for(var i=q.length-1;i>=this.c-1;i--)if(q[i]==prev){pos=i;break;}
		// Если позиция не известна, значит добавляем в конец
		if(!pos)pos=q.length-1;
		// Сдвигаем элементы после позиции на один элемент вправо
		for(var i=q.length-1;i>pos;i--){q[i+1]=q[i];}
		// Помещаем текущий элемент на свое место
		var x={f:fn,pr:params};
		q[pos+1]=x;
		// Возвращаем текущую позицию или вызываем функцию если очередь не зянята
		return this.b?x:this.next();
	},
	// Вызов следующего элемента очереди
	next: function(){
		var q=this.q;
		// Получаем текущий объект в очереди
		var f = q[this.c];
		// Обозначаем флаг занятости
		this.b = f;
		if(f){
			// Указатель адресуем на следующий элемент очереди
			this.c++;
			// Обрабатываем текущий
			f.f(f.pr);
			// Возвращаем текущий
			return f;
		}
	}
}

var GLOB_IncludedModules = [];
var GLOB_AjaxQueue = new queue();
function ajax_wait(fn,params,pos){return GLOB_AjaxQueue.add(fn,params,pos);}
function ajax_next(){return GLOB_AjaxQueue.next();}
(function($){
$.fn.jEMS_FormSubmit=function(op){
if(typeof op == 'function'){
op = {success:op}
}else if(typeof op == 'undefined'){
op = {}
}
op = $.extend({
success: false,
failure: false,
beforeSend: function(a){return a;},
skipCheck: false
},op);
$.jems.init(this,op);
return this;
};
if(!$.jems)$.jems = {}
$.jems.init= function(jform,op){
jform.submit(function(){
$('input[@type=submit]',jform).attr('disabled',true);
a = jform.formToArray();
a = op.beforeSend(a);
if(!a){
$('input[@type=submit]',jform).attr('disabled',false);
return false;
}
var act = jform.attr('action') || '';
if($.browser.opera){
act = act.split('/').pop();
}
var callback = function(data){
$('input[@type=submit]',jform).attr('disabled',false);
if(op.skipCheck){
if(op.success)op.success(data);
}else{
if(data.charAt(0)=='{'){
var d = $.parseJSON(data);
if(d && (d.errcode==0 || d.nohandle)){
var x = {};
for(var i in a)x[a[i].name] = a[i].value;
if(typeof op.success == 'function')op.success.apply(x,[data]);
}else{
if(globals.useExtendedErrors)
cm('mod_error',d);
else
alert(unescape(d.caption+'\n'+d.message));
}
}else{
alert(unescape(data));
}
}
}
var m = jform.attr('method') || '';
var port = jform.attr('port') || '';
if(m.toLowerCase()=='post'){
switch(port){					
case 'http' : $.post('http://'+location.hostname+location.pathname+globals.pathToOk+act,a,callback);
case 'https' : $.post('https://'+location.hostname+location.pathname+globals.pathToOk+act,a,callback);
default: $.post(globals.pathToOk+act,a,callback);
}
}else{
switch(port){
case 'http' : cm_get('http://'+location.hostname+location.pathname+globals.pathToOk+act,a,callback);
case 'https' : cm_get('https://'+location.hostname+location.pathname+globals.pathToOk+act,a,callback);
default: cm_get(globals.pathToOk+act,a,callback);
}
}
return false;
});
}
})(jQuery);
dump = function(v){
cm('mod_dump',v);
}
jQuery.fn.ajaxSubmit = function(options) {
if (typeof options == 'function')
options = { success: options };
var url = this.attr('action') || window.location;
options = jQuery.extend({
url:  url,
type: this.attr('method') || 'GET'
}, options || {});
var a = this.formToArray(options.semantic);
if (options.beforeSubmit && options.beforeSubmit(a, this, options) === false) return this;
var veto = {};
jQuery.event.trigger('form.submit.validate', [a, this, options, veto]);
if (veto.veto)
return this;
var q = jQuery.param(a);
if (options.type.toUpperCase() == 'GET') {
options.url += (options.url.indexOf('?') >= 0 ? '&' : '?') + q;
options.data = null;
}
else
options.data = q;
var $form = this, callbacks = [];
if (options.resetForm) callbacks.push(function() { $form.resetForm(); });
if (options.clearForm) callbacks.push(function() { $form.clearForm(); });
if (!options.dataType && options.target) {
var oldSuccess = options.success || function(){};
callbacks.push(function(data, status) {
jQuery(options.target).attr("innerHTML", data).evalScripts().each(oldSuccess, [data, status]);
});
}
else if (options.success)
callbacks.push(options.success);
options.success = function(data, status) {
for (var i=0, max=callbacks.length; i < max; i++)
callbacks[i](data, status);
};
var files = jQuery('input:file', this).fieldValue();
var found = false;
for (var j=0; j < files.length; j++)
if (files[j])
found = true;
if (options.iframe || found)
fileUpload();
else
jQuery.ajax(options);
jQuery.event.trigger('form.submit.notify', [this, options]);
return this;
function fileUpload() {
var form = $form[0];
var opts = jQuery.extend({}, jQuery.ajaxSettings, options);
var id = 'jqFormIO' + jQuery.fn.ajaxSubmit.counter++;
var $io = jQuery('<iframe id="' + id + '" name="' + id + '" />');
var io = $io[0];
var op8 = jQuery.browser.opera && window.opera.version() < 9;
if (jQuery.browser.msie || op8) io.src = 'javascript:false;document.write("");';
$io.css({ position: 'absolute', top: '-1000px', left: '-1000px' });
form.method = 'POST';
form.encoding ? form.encoding = 'multipart/form-data' : form.enctype = 'multipart/form-data';
var xhr = {
responseText: null,
responseXML: null,
status: 0,
statusText: 'n/a',
getAllResponseHeaders: function() {},
getResponseHeader: function() {},
setRequestHeader: function() {}
};
var g = opts.global;
if (g && ! jQuery.active++) jQuery.event.trigger("ajaxStart");
if (g) jQuery.event.trigger("ajaxSend", [xhr, opts]);
var cbInvoked = 0;
var timedOut = 0;
setTimeout(function() {
$io.appendTo('body');
io.attachEvent ? io.attachEvent('onload', cb) : io.addEventListener('load', cb, false);
var x = form.action;
form.action = opts.url;
var t = form.target;
form.target = id;
if (opts.timeout)
setTimeout(function() { timedOut = true; cb(); }, opts.timeout);
form.submit();
form.target = t;
form.action = x;
}, 10);
function cb() {
if (cbInvoked++) return;
var i = 0;
while(i < 5000000)i++;
io.detachEvent ? io.detachEvent('onload', cb) : io.removeEventListener('load', cb, false);
var ok = true;
try {
if (timedOut) throw 'timeout';
var data, doc;
doc = io.contentWindow ? io.contentWindow.document : io.contentDocument ? io.contentDocument : io.document;
xhr.responseText = doc.body ? doc.body.innerHTML : null;
xhr.responseXML = doc.XMLDocument ? doc.XMLDocument : doc;
if (opts.dataType == 'json' || opts.dataType == 'script') {
var ta = doc.getElementsByTagName('textarea')[0];
data = ta ? ta.value : xhr.responseText;
if (opts.dataType == 'json')
eval("data = " + data);
else
jQuery.globalEval(data);
}
else if (opts.dataType == 'xml') {
data = xhr.responseXML;
if (!data && xhr.responseText != null)
data = toXml(xhr.responseText);
}
else {
data = xhr.responseText;
}
}
catch(e){
ok = false;
jQuery.handleError(opts, xhr, 'error', e);
}
if (ok) {
opts.success(data, 'success');
if (g) jQuery.event.trigger("ajaxSuccess", [xhr, opts]);
}
if (g) jQuery.event.trigger("ajaxComplete", [xhr, opts]);
if (g && ! --jQuery.active) jQuery.event.trigger("ajaxStop");
if (opts.complete) opts.complete(xhr, ok ? 'success' : 'error');
setTimeout(function() {
$io.remove();
xhr.responseXML = null;
}, 100);
};
function toXml(s, doc) {
if (window.ActiveXObject) {
doc = new ActiveXObject('Microsoft.XMLDOM');
doc.async = 'false';
doc.loadXML(s);
}
else
doc = (new DOMParser()).parseFromString(s, 'text/xml');
return (doc && doc.documentElement && doc.documentElement.tagName != 'parsererror') ? doc : null;
}
};
};
jQuery.fn.ajaxSubmit.counter = 0;
jQuery.fn.formToArray = function(semantic) {
var a = [];
if (this.length == 0) return a;
var form = this[0];
var els = semantic ? form.getElementsByTagName('*') : form.elements;
if (!els) return a;
for(var i=0, max=els.length; i < max; i++) {
var el = els[i];
var n = el.name;
if (!n) continue;
if (semantic && form.clk && el.type == "image") {
if(!el.disabled && form.clk == el)
a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y});
continue;
}
var v = $.fieldValue(el, true);
if (v === null) continue;
if (v.constructor == Array) {
for(var j=0, jmax=v.length; j < jmax; j++)
a.push({name: n, value: v[j]});
}
else
a.push({name: n, value: v});
}
if (!semantic && form.clk) {
var inputs = form.getElementsByTagName("input");
for(var i=0, max=inputs.length; i < max; i++) {
var input = inputs[i];
var n = input.name;
if(n && !input.disabled && input.type == "image" && form.clk == input)
a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y});
}
}
var dtc = $('[@itype=dateTimeComponent]',this);
if(dtc.size()>0){
dtc.each(function(){
a.push({name: $(this).attr('iname'), value: $(this).attr('ivalue')});
});
}
return a;
};
$.fn.formSerialize = function(semantic) {
return $.param(this.formToArray(semantic));
};
$.fn.fieldValue = function(successful) {
for (var val=[], i=0, max=this.length; i < max; i++) {
var el = this[i];
var v = $.fieldValue(el, successful);
if (v === null || typeof v == 'undefined' || (v.constructor == Array && !v.length))
continue;
v.constructor == Array ? $.merge(val, v) : val.push(v);
}
return val;
};
jQuery.fieldValue = function(el, successful) {
var n = el.name, t = el.type, tag = el.tagName.toLowerCase();
if (typeof successful == 'undefined') successful = true;
if (successful && (!n || t == 'reset' || t == 'button' ||
(t == 'checkbox' || t == 'radio') && !el.checked ||
(t == 'submit' || t == 'image') && el.form && el.form.clk != el ||
tag == 'select' && el.selectedIndex == -1))
return null;
if (tag == 'select') {
var index = el.selectedIndex;
if (index < 0) return null;
var a = [], ops = el.options;
var one = (t == 'select-one');
var max = (one ? index+1 : ops.length);
for(var i=(one ? index : 0); i < max; i++) {
var op = ops[i];
if (op.selected) {
var v = jQuery.browser.msie && !(op.attributes['value'].specified) ? op.text : op.value;
if (one) return v;
a.push(v);
}
}
return a;
}
return el.value;
};
jQuery.fn.clearForm = function() {
    return this.each(function() {
        jQuery('input,select,textarea', this).clearFields();
    });
};


jQuery.fn.clearFields = jQuery.fn.clearInputs = function() {
    return this.each(function() {
        var t = this.type, tag = this.tagName.toLowerCase();
        if (t == 'text' || t == 'password' || tag == 'textarea')
            this.value = '';
        else if (t == 'checkbox' || t == 'radio')
            this.checked = false;
        else if (tag == 'select')
            this.selectedIndex = -1;
    });
};


jQuery.fn.resetForm = function() {
    return this.each(function() {
        // guard against an input with the name of 'reset'
        // note that IE reports the reset function as an 'object'
        if (typeof this.reset == 'function' || (typeof this.reset == 'object' && !this.reset.nodeType))
            this.reset();
    });
};
(function ($) {
var m = {
'\b': '\\b',
'\t': '\\t',
'\n': '\\n',
'\f': '\\f',
'\r': '\\r',
'"' : '\\"',
'\\': '\\\\'
},
s = {
'array': function (x) {
var a = ['['], b, f, i, l = x.length, v;
for (i = 0; i < l; i += 1) {
v = x[i];
f = s[typeof v];
if (f) {
v = f(v);
if (typeof v == 'string') {
if (b) {
a[a.length] = ',';
}
a[a.length] = v;
b = true;
}
}
}
a[a.length] = ']';
return a.join('');
},
'boolean': function (x) {
return String(x);
},
'null': function (x) {
return "null";
},
'number': function (x) {
return isFinite(x) ? String(x) : 'null';
},
'object': function (x) {
if (x) {
if (x instanceof Array) {
return s.array(x);
}
var a = ['{'], b, f, i, v;
for (i in x) {
v = x[i];
f = s[typeof v];
if (f) {
v = f(v);
if (typeof v == 'string') {
if (b) {
a[a.length] = ',';
}
a.push(s.string(i), ':', v);
b = true;
}
}
}
a[a.length] = '}';
return a.join('');
}
return 'null';
},
'string': function (x) {
if (/["\\\x00-\x1f]/.test(x)) {
x = x.replace(/([\x00-\x1f\\"])/g, function(a, b) {
var c = m[b];
if (c) {
return c;
}
c = b.charCodeAt();
return '\\u00' +
Math.floor(c / 16).toString(16) +
(c % 16).toString(16);
});
}
return '"' + x + '"';
}
};
$.toJSON = function(v) {
var f = isNaN(v) ? s[typeof v] : s['number'];
if (f) return f(v);
};
$.parseJSON = function(v, safe) {
if (safe === undefined) safe = $.parseJSON.safe;
if (safe && !/^("(\\.|[^"\\\n\r])*?"|[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t])+?$/.test(v))
return undefined;
return eval('('+v+')');
};
$.parseJSON.safe = false;
})(jQuery);
function jEMS_StoreSettings(keep_silence,cb){
if(typeof keep_silence == 'undefined')keep_silence = 'false';
var str = $.toJSON(globals.data);
$.get(globals.pathToOk+'ok_common.php?q=StoreSettings&RoleID='+globals.roleId+'&Data='+escape(str),function(data){
if(data=='1'){
if(!keep_silence)alert('Сохранение выполнено!');
if(typeof cb == 'function')cb();
return true;
}else{
alert('Ошибка сохранения настроек:\n'+data);
return false;
}
});
return true;
}
$(document).bind('keyup','ctrl+f10', function(){
cm('mod_object_navigator');
});
$(document).bind('keyup','ctrl+f9', function(){
var am = globals.activeModule;
if(!am)return;
var n = am._moduleName;
var p = am._calledWith;
var c = am._caller;
am.jqObject.jqmClose();
globals.modules[n] = null;
cm(n,p,c);
});
$(document).bind('keyup','ctrl+f8', function(){
cm('mod_sessions');
});
$(document).bind('keyup','esc', function(){
if(!globals.windows || globals.windows.length==0)return false;
var m = globals.windows[globals.windows.length-1];
m.jqObject.jqmClose();
});
/*@1602.cmenu.js*/
(function($){
if(typeof cm_img != 'function')cm_img = function(img,alt,style){
if(alt)alt=alt.replace(/"/,'\"');
return '<img src="_images/silk/'+img+(img.search(/\.(gif|jpg|jpeg)$/i)==-1?'.png':'')+
'" width="16" height="16" alt="'+(alt?alt:'img')+'" '+
(alt?'title="'+alt+'"':'')+
(style?' style="'+style+'"':'')+' />';
}
if(typeof globals == 'undefined')globals={activeModule:window};
$.cmenu = {
c:[],
init: function(id,act){
var x = {
cn: 'cmenu',
id: id,
jq: $('<div iuid="'+id+'" class="cmenu"></div>'),
r: false
};
x[typeof act=='function'?'f':'a'] = act;
$('body').append(x.jq);
return x;
},
render:function(x){
if(typeof x.f == 'function'){
if(typeof x.caller != 'object')return false;
x.r = x.f(x);
if(typeof x.r == 'object'){
x.a = x.r;
x.r = false;
}else{
x.r = !x.r;
}
}
if(x.r)return false;
x.r = true;
var h = '';
var strAsd = ' onmouseover="$.cmenu.to=setTimeout(function(){var m = $.cmenu.getMenu('+x.id+');m && m.sub && $.cmenu.hideMenu(m.sub);},300);" onmouseout="clearTimeout($.cmenu.to);" ';
for(var i in x.a){
var a = x.a[i];
if(a=='-'){
h+='<hr'+($.browser.msie?' style="width:50px;align:center;"':'')+'/>';
continue;
}
if(a.constructor == Array){
a = (function(x){return new menuItem(x[0],x[1],x[2],x[3])})(a);
x.a[i] = a;
}
if(typeof a.visible != 'undefined' && !a.visible ||
(typeof a.acid != 'undefined' && $.inArray(a.acid,globals.accessedActions||[])))continue;
if(a.submenu && (!a.submenu.cn || a.submenu.cn != 'cmenu')){
a.submenu = this.getMenu(a.submenu);
}
h+='<div class="cmenuItem" '+
(a.disabled?
'style="color:#808080;" ':
'onclick="$.cmenu.exec('+x.id+',\''+i+'\');" '+
(a.submenu?
this.getCaller(a.submenu,'hovertimeout'):
strAsd
)
)+
'>'+
cm_img(a.icon?a.icon:'undefined')+' '+a.caption+
(a.submenu?cm_img('page-next.gif','','position:absolute;right:0px;vertical-align:middle;'):'')+'</div>';
}
x.jq.html(h);
},
exec:function(id,act){
var m = $.cmenu.c[id];
if(!m){
alert('Menu not found');
return false;
}
if(!m.a || !m.a[act]){
alert('Action not found');
return false;
}
if(typeof m.a[act].execute == 'function' && !m.a[act].disabled){
m.a[act].execute.apply(globals.activeModule,[m.a[act],m,m.p]);
console.log(m);
}
},
getMenu: function(acts){
var t = typeof acts;
if(t.search(/function|object|undefined/)!=-1){
var id = this.c.length;
this.c.push({id:id});
this.c[id] = this.init(id,acts);
return this.c[id];
}else{
return this.c[acts];
}
},
show:function(m,p){
if(typeof m != 'object'){
m = this.getMenu(m);
}
if(m.v && m.caller==p){
return false;
}
if(!this.hideBinded){
this.hideBinded = true;
$().bind('click',this.hideAll);
}
m.caller = p;
m.sub && this.hideMenu(m.sub);
var jqp = $(p);
if(jqp.hasClass('cmenuItem')&&!jqp.hasClass('cmenuItemWithSub')){
jqp.addClass('cmenuItemWithSub');
var pm = $.cmenu.getMenu($(p.parentNode).attr('iuid'));
if(pm){
if(pm.sub && pm.sub!=m){
$.cmenu.hideMenu(pm.sub);
$.cmenu.to && clearTimeout($.cmenu.to) && delete $.cmenu.to;
}
pm.sub = m;
m.parentMenu = pm;
}
}
this.render(m);
m.p = this.getPath(p);
if(m.jq[0].offsetParent!=m.p[0].offsetParent)m.jq.appendTo(m.p[0].offsetParent);
if(m.jq.css('display')=='none')m.jq.show();
var cmenuOffParent = m.jq[0].offsetParent
var cmenuWidth = m.jq[0].offsetWidth;
var cmenuHeight = m.jq[0].offsetHeight;
var w = 0, h = 0;
if(typeof(window.innerWidth) == 'number'){
w = window.innerWidth;h = window.innerHeight;
}else if(document.documentElement && (document.documentElement.clientWidth || document.documentElement.clientHeight)){
w = document.documentElement.clientWidth;h = document.documentElement.clientHeight;
}
var sx = 0, sy = 0;
if(typeof window.pageYOffset == 'number'){
sx = window.pageXOffset;sy = window.pageYOffset;
}else if(document.body && (document.body.scrollLeft || document.body.scrollTop)) {
sx = document.body.scrollLeft;sy = document.body.scrollTop;
}else if(document.documentElement && (document.documentElement.scrollLeft || document.documentElement.scrollTop)){
sx = document.documentElement.scrollLeft;sy = document.documentElement.scrollTop;
}
var winHeight = h+sy;
var winWidth = w+sx;
var off = this.getOffset(p,cmenuOffParent);
m.jq.css('left',cmenuOffParent.offsetLeft+off.x+p.offsetWidth+cmenuWidth>winWidth?off.x-cmenuWidth:off.x+p.offsetWidth);
m.jq.css('top',cmenuOffParent.offsetTop+off.y+cmenuHeight>winHeight?off.y-cmenuHeight+p.offsetHeight+4:off.y-2);
m.v = true;
},
getPath:function(el){
var p = [];
while(el){
p.push(el);
if(!$(el).hasClass('cmenuItem'))break;
console.log(el);
el = $.cmenu.getMenu(parseInt($(el).parent().attr('iuid'))).caller;
}
return p.reverse();
},
hideAll:function(){
if($.cmenu.lockHiding)return false;
$().unbind('click',$.cmenu.hideAll);
$.cmenu.hideBinded = false;
var len = $.cmenu.c.length;
for(var i=0;i<len;i++){
$.cmenu.hideMenu($.cmenu.c[i]);
}
},
hideMenu:function(m){
if(!m||!m.v)return;
m.v = false;
this.hideMenu(m.sub);
m.caller && $(m.caller).removeClass('cmenuItemWithSub');
m.jq.hide();
},
getCaller:function(id,event){
var m = false;
if(typeof id == 'object'){
m = true;
id = id.id;
}
if(typeof id != 'number'){
console.error('$.cmenu.getCaller - unexpected type of first parameter ('+(typeof id)+'), expecting number');
return '';
}
switch(event){
case 'click':
default:
return 'onclick="$.cmenu.show('+id+',this);$.cmenu.lockHiding=true;" onmouseout="$.cmenu.lockHiding=false;"';
case 'hovertimeout':
return 'onmouseover="var t=this;$.cmenu.to=setTimeout(function(){$.cmenu.show('+id+',t);$.cmenu.lockHiding=true;},100);" onmouseout="clearTimeout($.cmenu.to);$.cmenu.lockHiding=false;"';
}
},
getOffset:function(el,stop){
if(el.offsetParent && el.offsetParent!=stop){
var of = this.getOffset(el.offsetParent,stop);
of.x+=el.offsetLeft;
of.y+=el.offsetTop;
return of;
}else{
return {
x: el.offsetLeft,
y: el.offsetTop
}
}
}
}
$.fn.bindMenu = function(event,menu){
if(arguments.length==1){
menu = event;
event = 'click';
}
if(!menu.jq){
menu = $.cmenu.getMenu(menu);
}
return this.each(function(){
$(this).bind(event,function(){
$.cmenu.lockHiding = true;
$.cmenu.show(menu,this);
})
.bind('mouseout',function(){
$.cmenu.lockHiding = false;
});
});
}
menuItem = function(caption,icon,execute,submenu){
if(caption.search(/^!/)!=-1){
this.disabled = true;
caption = caption.substr(1);
}
this.caption = caption;
this.icon = icon;
this.execute = execute;
this.submenu = submenu;
}
})(jQuery);
/*@jquery.1602.actions.js*/
$.act1602 = {
_template_group: '<div class="actionGroup" onclick="$(\'#{id}\').toggle();$.act1602[\'{gid}\'].groups[\'{gname}\']._collapsed=!$.act1602[\'{gid}\'].groups[\'{gname}\']._collapsed;"><img src="{ico}" width="16" height="16" /><span style="position:relative;top:-3px;margin-left:6px;">{cap}</span></div><div style="display:{displ};border:1px solid #449;border-top:0px;margin:0px;padding:0px" id="{id}">{pref}<table cellspacing="5">{items}</table>{suff}</div>',
_template_item: '<tr><td>{ico}</td><td><span class="likealink" onClick="{act}">{cap}</span></td></tr>',
_disabled_item: '<tr><td>{ico}</td><td><span style="color:#888;">{cap}</span></td></tr>',
_execAction: function(id,group,action){
var a = $.act1602[id].groups[group].acts[action];
if(!a || a.disabled) return false;
if(typeof a.execute == 'function')a.execute.apply(globals.activeModule);
}
};
$.fn.renderActions = function(a,g){
var id = this.attr('id');
if(typeof $.act1602[id] == 'undefined')$.act1602[id] = {};
if(typeof a=='undefined')a=$.act1602[id].actions;
else $.act1602[id].actions = a;
if(typeof g=='undefined')g=$.act1602[id].groups;
else $.act1602[id].groups = g;
if(typeof a=='undefined')return this;
if(typeof g == 'undefined'){
$.act1602[id].groups = {};
for(var i in a){
if(!a[i].group)a[i].group = 'noGroup';
if(typeof $.act1602[id].groups[a[i].group] == 'undefined')
$.act1602[id].groups[a[i].group] = {acts:[]};
}
g = $.act1602[id].groups;
}
for(var gid in g){
if(typeof g[gid]=='string'){
var tg = g[gid].split('|');
g[gid] = {
caption: $.trim(tg[0]),
ico: $.trim(tg[1])
}
}
if(g[gid].acts)delete g[gid].acts;
g[gid].acts = [];
}
for(var i in a){
if(typeof a[i]!='object'||typeof a[i].caption=='undefined')continue;
if(!g[a[i].group])g[a[i].group] = {acts:[]};
g[a[i].group].acts.push(a[i]);
}
var t = '';
var aa = globals.accessedActions;
for(var i in g){
var items_html = '';
for(var j in g[i].acts){
var act = g[i].acts[j];
if(typeof act.visible != 'undefined' && !act.visible)continue;
if(aa && (typeof act.acid != 'undefined') && $.inArray(act.acid,aa)==-1)continue;
items_html+= (act.disabled?$.act1602._disabled_item:$.act1602._template_item)
.set('ico',act.icon?'<img src="'+globals.imageBase.set('img',act.icon)+'" width="16" height="16" style="position:relative;top:3px;" /> ':'')
.set('act','$.act1602._execAction(\''+id+'\',\''+i+'\','+j+')')
.set('cap',act.caption?act.caption:'');
}
if(items_html!='')
t+=$.act1602._template_group
.set('ico',globals.imageBase.set('img',g[i].ico||'wand'))
.set('id',id+'_'+i)
.set('gid',id)
.set('gname',i)
.set('pref',g[i].pref?g[i].pref:'')
.set('items',items_html)
.set('suff',g[i].suff?g[i].suff:'')
.set('displ',g[i]._collapsed?'none':'block')
.set('cap',g[i].caption?g[i].caption:'');
}
this.html(t);
return this;
}
/*@jquery.1602.tabs.js*/
$.fn.tabs = function(index,op) {
if(typeof index == 'number') index--; else index = 0;
var
classSelected = 'tabs-selected',
classNav = 'tabs';
var con = $(this);
var nav = con.children('ul').addClass(classNav);
con.children('div').hide();
con.children('div:eq('+index+')').show();
nav.children('li').each(function(i,a){
var t = $(this);
t.attr('ind',i+1);
var icon = t.attr('icon');
if(icon){
t
.find('a')
.css({
'background-image':'url('+globals.imageBase.set('img',icon)+')',
'background-position':'2px 50%',
'background-repeat':'no-repeat'
});
t
.find('span')
.css('margin-left','16px');
}
});
$('a',nav).removeAttr('href');
$('li:eq('+index+')',nav).addClass(classSelected);
$('li',nav).click(function(){
con.triggerTab($(this).attr('ind'));
});
return this;
};
$.fn.hideTab = function(index) {
index = parseInt(index);
if(!isNaN(index)) index--; else index = 0;
var con = $(this);
var nav = con.children('ul');
$('li:eq('+index+')',nav).hide();
return this;
}
$.fn.triggerTab = function(index) {
index = parseInt(index);
if(!isNaN(index)) index--; else index = 0;
var
classSelected = 'tabs-selected',
classNav = 'tabs';
var con = $(this);
var nav = con.children('ul').addClass(classNav);
con.children('div').hide();
var div = con.children('div:eq('+index+')');
div.show();
$('li.'+classSelected,nav).removeClass(classSelected);
$('li:eq('+index+')',nav).addClass(classSelected);
$(this).trigger('tabTriggered',[index+1,div]);
return this;
};
/*@jquery.1602.sul.js*/
(function($){
$.fn.sulApply = function(cl){
if (typeof cl == 'undefined')
cl = {};
if (typeof cl == 'function')
cl = {
onComplete: cl
};
$.sul.init(this, cl);
return this;
};
$.fn.sulDeserialize = function(data){
var section = this.attr('id');
$.sul.data[section] = data;
$.sul.update_depends(section, 'root');
return this;
};
$.sul = {
blocks:[],
depends: {},
loaded_urls: [],
data: {},
init: function(where, op){
var wh = $(where);
var sect = wh.attr('id');
var iuid = wh.attr('iuid');
if(!iuid){
iuid = $.sul.blocks.length;
wh.attr('iuid',iuid);
}
op.sectionName = sect;
op = $.extend({
onComplete: null,
saveData: false,
sectionName: '',
data: ((op.saveData && op.sectionName && globals.data[op.sectionName]) ? (globals.data[op.sectionName]) : ({})),
loadDataOnInit: true
}, op);
$.sul.blocks[iuid] = op;
if (typeof globals.data[sect] == 'undefined')
globals.data[sect] = {};
$.sul.data[sect] = op.data;
if (typeof $.sul.elements == 'undefined')
$.sul.elements = {};
if (typeof $.sul.elements[sect] != 'undefined')
delete $.sul.elements[sect];
$.sul.elements[sect] = {};
var ss = $('select[@get]', where);
var dep = {
root: []
};
ss.each(function(){
var select = this;
var th = $(this);
if (!th.attr('get')) {
return;
}
var id = th.attr('name');
var m = th.attr('master');
var onchange = select.onchange;
select.onchange = function(){
var val = th.val();
if (op.saveData) {
globals.data[sect][th.attr('name')] = val;
}
$.sul.data[sect][id] = val;
$.sul.update_depends(sect, id);
if (typeof onchange == 'function') {
onchange();
}
}
select.saveData = op.saveData;
select.listener = where;
if (m && m != '') {
m = m.split(' ');
for (var i in m) {
if (!dep[m[i]])
dep[m[i]] = [];
dep[m[i]].push(id);
}
}
else {
if (!dep.root[id])
dep.root.push(id);
}
$.sul.elements[sect][id] = select;
});
$.sul.depends[sect] = dep;
if (!op.loadDataOnInit)
return;
this.update_depends(sect, 'root');
},
parse_url: function(sel){
if (!sel) {
return false;
}
sel = $(sel);
var url = sel.attr('get');
if (!url)
return false;
var m = sel.attr('master');
var ls = sel.get(0).listener;
var sect = $(ls).attr('id');
var data = $.sul.data[$(ls).attr('id')];
if (!m)
return url;
m = m.split(' ');
var res = '';
var j = 0;
for (var i = 0; i < url.length; i++) {
if (url.charAt(i) == '*') {
if (data[m[j]])
res += data[m[j]] + '';
else {
var val = $.sul.elements[sect][m[j]];
if (!val || !val.value) {
return false;
}
res += val;
}
j++;
}
else {
res += url.charAt(i);
}
}
return res;
},
print: function(url, where){
var res, f = false;
var t = '';
where = $(where);
var opts = where.attr('sul');
if (!where.get(0)) {
return;
}
var lr = where.get(0).listener;
var sect = $(lr).attr('id');
var data = $.sul.data[sect];
var name = where.attr('name');
var what_server = $.sul.loaded_urls[url];
var cu = where.attr('currentUrl');
var vvv = where.val();
if (typeof cu != 'undefined' && cu == url) {
var rrr = (data[name] == vvv);
try {
if (!rrr)
where.val(data[name]);
}
catch (e) {
alert(e.message);
}
return !rrr;
}
where.attr('currentUrl', url);
opts = opts ? '{' + opts + '}' : '{}';
opts = $.extend({
nocache: false,
addempty: false,
emptyid: 0,
emptyname: '----',
cookie: false
}, $.parseJSON(opts));
var coo_id = sect ? data[name] : false;
f = isNaN(parseInt(coo_id));
what = [];
if (opts.addempty) {
what.push({
id: opts.emptyid,
name: opts.emptyname
});
}
for (var i in what_server)
what.push(what_server[i]);
var firstId = 0;
if (what[0])
firstId = what[0].id;
for (var i in what) {
if (f) {
res = what[i].id;
f = false;
}
else {
if (what[i].id == coo_id) {
res = what[i].id;
}
}
t += '<option value="' + what[i].id + '">' + what[i].name + '</option>';
}
where.html(t);
if (!res)
res = firstId;
data[name] = res;
if ($.browser.msie) {
try {
ie_select_locate(where.get(0), res);
}
catch (e) {
}
}
else {
where.val(res).attr('qwe', res);
}
if (where.get(0).saveData) {
globals.data[sect][name] = res;
}
return true;
},
printAndGetURLs: function(section, name){
var sd = $.sul.depends[section];
if (!sd || !sd[name]) {
return [];
}
var d = [];
var depSelNames = sd[name];
for (var i in depSelNames) {
var zz = $.sul.elements[section][depSelNames[i]];
var u = this.parse_url(zz);
if (!u) {
continue;
}
zz.url = u;
zz.sulName = depSelNames[i];
d.push(zz);
}
var urls = [];
for (var i in d) {
var s = d[i];
var url = s.url;
if (typeof $.sul.loaded_urls[url] == 'undefined') {
urls.push('url[]=' + escape(url));
urls = $.merge(urls, $.sul.printAndGetURLs(section, s.sulName));
}
else {
if ($.sul.print(url, s))
$.sul.update_depends(section, s.sulName);
}
}
return urls;
},
update_depends: function(section, name, mi){
if (typeof mi == 'undefined')
mi = 0;
var urls = $.sul.printAndGetURLs(section, name);
if(urls.length>0){
$.sul.q = ajax_wait(function(){
cm_get_json(globals.pathToCore + 'sul.php?' + (urls.join('&')),function(arr){
var j = 0;
for (var i in arr) {
var coll = arr[i];
if(coll.url == '') continue;
var res = [];
for (var j in coll.data) {
coll.data[j].name = coll.data[j].name;
res.push(coll.data[j]);
}
$.sul.loaded_urls[coll.url] = res;
j++;
}
if(j>0)$.sul.update_depends(section, name, mi + 1);
ajax_next();
delete $.sul.q;
});
},$.sul.q);
}
}
}
})(jQuery);
/*@jquery.1602.win.js*/
(function($){
call_module = function(module_name,param,caller){
var winClass = globals.modules[module_name];
if(winClass){
if(!winClass._moduleName)winClass._moduleName = module_name;
if(typeof winClass.className == 'undefined'){
winClass.className = 'winForm';
winClass.params = $.extend({single: true,oldModule: true},winClass.params);
}
if(winClass.params && winClass.params.single){
var newInst = winClass;
}else{
var cn = true;
if(typeof winClass.getName == 'function'){
var uName = winClass.getName(param);
for(var i in globals.instances){
var x = globals.instances[i];
if(x._uniqueName == uName && x._moduleName == winClass._moduleName){
cn = false;
var newInst = globals.instances[i];
break;
}
}
}
if(cn){
var newInst = $.extend({},winClass);
newInst._uniqueName = uName;
}
}
newInst._caller = caller || globals.activeModule || {jqObject:$()};
if(typeof newInst._uid == 'undefined'){
var addToPage = function(x){
var dsk = $('#desktop');
if(dsk.size()>0){
dsk.append(x);
}else{
$('#global_wrapper').append(x);
}
}
var instUID = globals.instances.length;
newInst._uid = 'wf'+instUID;
globals.instances.push(newInst);
newInst.selfPath = 'globals.instances['+instUID+']';
newInst.params = $.extend({
width: 400,
height: 400,
caption: newInst._uid,
icon: 'win-blank'
},newInst.params);
switch(globals.modules[module_name].className){
default:case'winForm':case'Di':{
var resizer =
'<div class="jqBord resizeB" resize="b"></div>'+
'<div class="jqBord resizeR" resize="r"></div>'+
'<div class="jqBord resizeL" resize="l"></div>'+
'<div class="jqBord resizeT" resize="t"></div>'+
'<div class="jqCorn resizeTL" resize="tl"></div>'+
'<div class="jqCorn resizeTR" resize="tr"></div>'+
'<div class="jqCorn resizeBL" resize="bl"></div>'+
'<div class="jqCorn resizeBR" resize="br"></div>';
var wrapper =
'<div id="{id}" class="jqmWindow" iuid="{iuid}">'+
'<div class="jqmWinContent">{content}</div><div class="jqCorn resizeTL" resize="tl"></div>'+
resizer+
'<div class="jqDrag jqWinHeader">'+
'<span style="position:absolute;left:0;top:0;padding:3px">'+
'<img src="'+globals.imageBase+'" width="16" height="16" id="winIco" onclick="globals.instances['+instUID+'].jqObject.jqmSwitch();" />'+
'</span><span id="{id}_cap">{cap}</span>'+
'<img src="'+globals.imageBaseCommon.set('img','dialog/jClose.gif')+'" width="25" height="22" class="jqmClose" />'+
'</div>'+
'</div>';
if(newInst.params.oldModule){
var jq = $('<div id="'+module_name+'" class="module" iuid="'+instUID+'">'+newInst.html+'</div>');
newInst.jqObject = jq.find('.jqmWindow');
newInst.jqObject.prepend(resizer).mousedown(function(){newInst.jqObject.jqmShow();});
$('#global_wrapper').append(newInst.jqObject);
newInst.params.caption = newInst.jqObject.find('.jqWinHeader span').text();
}else{
newInst.jqObject = $(
wrapper
.replace(/\{id\}/g,newInst._uid)
.replace(/\{iuid\}/g,instUID)
.replace(/\{img\}/g,newInst.params.icon)
.replace(/\{cap\}/g,newInst.params.caption)
.replace(/\{content\}/g,newInst.html)
)
.jqm({width:newInst.params.width,height:newInst.params.height})
$('#global_wrapper').append(newInst.jqObject);
}
newInst.show = function(){this.jqObject.jqmShow();}
newInst.hide = function(){this.jqObject.jqmHide();}
newInst.setCaption = function(caption){
this.params.caption = caption;
this.jqObject.find('#'+this._uid+'_cap').html(caption);
}
newInst.getCaption = function(){
return this.params.caption?this.params.caption:newInst._uid;
}
newInst.setIcon = function(ico_name){
var img = this.jqObject.find('img#winIco');
img.attr('src',globals.imageBase.set('img',ico_name));
this.params.icon = ico_name;
}
newInst.getIcon = function(){
return this.params.icon;
}
}break;
case 'Bg':
newInst.jqObject = $('<div iuid="'+instUID+'" style="display:none;">'+newInst.html+'</div>');
addToPage(newInst.jqObject);
newInst.show = function(){this.jqObject.jqmShow();}
newInst.hide = function(){this.jqObject.jqmHide();}
newInst.setCaption = function(caption){
this.params.caption = caption;
}
newInst.getCaption = function(){
return this.params.caption?this.params.caption:newInst._uid;
}
newInst.setIcon = function(ico_name){
return false;
}
newInst.getIcon = function(){
return this.params.icon;
}
break;
}
try{
if(typeof newInst.init == 'function')newInst.init();
}catch(e){
alert('Ошибка инициализации модуля '+module_name+':\n'+$.toJSON(e));
}
}
try{
ajax_wait(function(){
newInst._calledWith = param;
newInst.main(param);
ajax_next();
});
}catch(e){
alert('Ошибка запуска модуля '+module_name+':\n'+$.toJSON(e));
}
}else{
ajax_wait(function(){
cm_get_json(globals.pathToCore+'module_loader.php?disable_encoding_header=1&module='+module_name,function(moduleObject){
if(moduleObject.html)moduleObject.script.html = moduleObject.html;
globals.modules[module_name] = moduleObject.script;
call_module(module_name,param,caller);
ajax_next();
});
});
}
}
cm = call_module;
function cm_activate_module_on_click(){$(this).jqmShow();}
$.fn.jqm = function(op){
var t = this;
this.find('.jqmClose').click(function(){
t.jqmClose();
});
this.jqDrag('.jqDrag').jqResize('div[@resize]').bgiframe();
op = $.extend({
width:500,
height:300
},op);
cm_centrize(this.get(0),op.width,op.height);
this.css({
'z-index': op.zIndex,
'width': op.width,
'height':op.height
});
return this;
}
$.fn.jqmShow = function(){
if(globals.env.lockTabs)return this;
if(!globals.curZindex)globals.curZindex=6;
if(!globals.windows)globals.windows=[];
var instUID = parseInt(this.attr('iuid'));
var inst = globals.instances[instUID];
if(inst._closed)inst._closed = false;
if(globals.activeModule==inst){
console.log('Module has already activated');
return this;
}
var am = globals.activeModule;
globals.prevActiveModule = am;
if(am){
cm_calc(am,'onDeactivate');
am.jqObject.bind('mousedown',cm_activate_module_on_click);
if(am.className!='Bg')am.jqObject.removeClass('jqActive');
}
globals.activeModule = inst;
globals.activeModule.jqObject.unbind('mousedown',cm_activate_module_on_click);
var id = inst._uid;
var found = false;
for(var i=0;i<globals.windows.length;i++){
if(globals.windows[i] == inst){
found = true;
break;
}
}
if(found){
var tmp;
while(i<globals.windows.length-1){
tmp = globals.windows[i];
globals.windows[i] = globals.windows[i+1];
globals.windows[i+1] = tmp;
i++;
}
if(inst.className!='Bg' && this.css('z-index')<globals.curZindex-1)this.css('z-index',globals.curZindex++);
}else{
globals.windows.push(inst);
if(inst.className!='Bg')this.css('z-index',globals.curZindex++);
}
if(inst.className=='Bg'){
if(globals.env.visibleBg && globals.env.visibleBg.className == 'Bg')globals.env.visibleBg.jqObject.hide();
inst.jqObject.show();
inst.visible = true;
globals.env.visibleBg = inst;
}else{
this.addClass('jqActive').show();
}
try{
if(!$.browser.msie){
var input = this.find('input:first')[0];
}
}catch(e){};
cm_calc(inst,'onActivate');
$().trigger('windowsChanged');
return this;
};
$.fn.jqmSwitch = function(){
var instUID = parseInt(this.attr('iuid'));
var inst = globals.instances[instUID];
if(globals.activeModule == inst)globals.activeModule = null;
if(inst.className == 'Di' || inst.className == 'winForm'){
inst.className = 'Bg';
var newParent = $('<div iuid="'+instUID+'" style="display:none;"></div>');
inst.jqObject.find('div.jqmWinContent').children().appendTo(newParent);
inst.jqObject.remove();
inst.jqObject = newParent;
inst.jqObject.appendTo('#desktop');
inst.jqObject.jqmShow();
}else{
inst.className = 'Di';
var content = inst.jqObject.children();
var resizer =
'<div class="jqBord resizeB" resize="b"></div>'+
'<div class="jqBord resizeR" resize="r"></div>'+
'<div class="jqBord resizeL" resize="l"></div>'+
'<div class="jqBord resizeT" resize="t"></div>'+
'<div class="jqCorn resizeTL" resize="tl"></div>'+
'<div class="jqCorn resizeTR" resize="tr"></div>'+
'<div class="jqCorn resizeBL" resize="bl"></div>'+
'<div class="jqCorn resizeBR" resize="br"></div>';
var wrapper =
'<div id="{id}" class="jqmWindow" iuid="{iuid}">'+
'<div class="jqmWinContent">{content}</div><div class="jqCorn resizeTL" resize="tl"></div>'+
resizer+
'<div class="jqDrag jqWinHeader">'+
'<span style="position:absolute;left:0;top:0;padding:3px">'+
'<img src="'+globals.imageBase+'" width="16" height="16" id="winIco" onclick="globals.instances['+instUID+'].jqObject.jqmSwitch();" />'+
'</span><span id="{id}_cap">{cap}</span>'+
'<img src="'+globals.imageBaseCommon.set('img','dialog/jClose.gif')+'" alt="Закрыть окно" width="25" height="22" class="jqmClose" />'+
'</div>'+
'</div>';
var newParent = $(
wrapper
.replace(/\{id\}/g,inst._uid)
.replace(/\{iuid\}/g,instUID)
.replace(/\{img\}/g,inst.params.icon)
.replace(/\{cap\}/g,inst.params.caption)
.replace(/\{content\}/g,'')
)
.jqm({width:inst.params.width,height:inst.params.height,zIndex:globals.curZindex++});
content.appendTo(newParent.find('div.jqmWinContent'));
inst.jqObject.remove();
inst.jqObject = newParent;
inst.jqObject.appendTo('#global_wrapper');
inst.jqObject.jqmShow();
}
};
$.fn.jqmHide = function(){
var win = globals.windows.pop();
globals.activeModule = null;
if(globals.windows.length==0){
globals.activeModule = null;
$().trigger('windowsChanged');
}
var instUID = win.jqObject.attr('iuid');
switch(win.className){
default:case'winForm':case'Di':
this.removeClass('jqActive').hide();
for(var i=globals.windows.length-1;i>=0;i--){
var cl = globals.windows[i].className;
if(cl=='winForm' || cl=='Di'){
globals.windows[i].jqObject.jqmShow();
}
}
break;
case 'Bg':
var success = false;
for(var i=globals.windows.length-1;i>=0;i--){
var w = globals.windows[i];
if(w.className == 'Bg'){
w.jqObject.jqmShow();
success = true;
break;
}
}
this.hide();
break;
}
this.trigger('hide');
return this;
}
$.fn.jqmClose = function(){
var instUID = this.attr('iuid');
var win = globals.instances[instUID];
if(win.params && win.params.locked){
console.log('locked',win);
return false;
}
if(typeof win.onCloseQuery =='function' && !win.onCloseQuery.apply(win))return false;
cm_calc(win,'onDeactivate');
cm_calc(win,'onClose');
for(var i=0;i<globals.windows.length-1;i++){
if(globals.windows[i] == win){
globals.windows[i] = globals.windows[i+1];
globals.windows[i+1] = win;
}
}
globals.windows.pop();
this.hide().trigger('hide');
if(win.params && !win.params.single){
win.jqObject.remove();
delete globals.instances[instUID];
}else{
globals.instances[instUID]._closed = true;
}
if(globals.windows.length>0){
globals.windows[globals.windows.length-1].show();
}else{
globals.activeModule = null;
$().trigger('windowsChanged');
}
cm_calc(win,'onAfterClose');
return true;
}
})(jQuery);
/*@1602.datetime.js*/
$.fn.dateTime = function(datetime,isdate){
switch(typeof datetime){
case 'undefined':
return this.attr('ivalue');
break;
case 'string':
var x = datetime.toDate();
var hh,mm,YYYY,MM,DD;
this.attr('ivalue',datetime);
hh = parseInt(x.getHours());
mm = parseInt(x.getMinutes());
YYYY = parseInt(x.getFullYear());
MM = parseInt(x.getMonth()+1);
DD = parseInt(x.getDate());
if($('select',this).size()>0){
$('select[@itype=MM]',this).val(MM);
$('input[@itype=YYYY]',this).val(YYYY);
$('input[@itype=DD]',this).val(DD);
$('input[@itype=m]',this).val(mm);
$('input[@itype=hh]',this).val(hh);
}else{
var opts = '';
var mths = ['января', 'февраля', 'марта', 'апреля', 'мая', 'июня', 'июля', 'августа', 'сентября', 'октября', 'ноября', 'декабря'];;
for(var i in mths){
opts+='<option '+((Number(i)+1)==MM?'selected':'')+' value="'+(Number(i)+1)+'">'+mths[i]+'</option>';
}
if(isdate)
this.html(
'<input itype="DD" value="'+DD+'" size="2" maxlength="2"  onchange="$(this.parentNode).dateTime(this)" /> '+
'<select itype="MM" style="width:100px" onchange="$(this.parentNode).dateTime(this)" >'+opts+'</select>'+
'<input itype="YYYY" value="'+YYYY+'" size="4" maxlength="4" onchange="$(this.parentNode).dateTime(this)" /> '
).attr('itype','dateTimeComponent');
else
this.html(
'<input itype="DD" value="'+DD+'" size="2" maxlength="2"  onchange="$(this.parentNode).dateTime(this)" /> '+
'<select itype="MM" style="width:100px" onchange="$(this.parentNode).dateTime(this)" >'+opts+'</select>'+
'<input itype="YYYY" value="'+YYYY+'" size="4" maxlength="4" onchange="$(this.parentNode).dateTime(this)" /> года, в '+
'<input itype="hh" value="'+hh+'" size="2" maxlength="2" onchange="$(this.parentNode).dateTime(this)" />:'+
'<input itype="m" value="'+mm+'" size="2" maxlength="2" onchange="$(this.parentNode).dateTime(this)"  /> '
).attr('itype','dateTimeComponent');
}
break;
case 'object':
var inp = $(datetime),newVal = false;
var val = parseInt(inp.val());
if(val<10)val = '0'+String(val);
var oldVal = this.attr('ivalue');
var f = function(s,ss,b){
ss = String(ss);
return s.substr(0,b)+ss+s.substr(b+ss.length,s.length);
}
switch(inp.attr('itype')){
case 'MM':
newVal = f(oldVal,val,5);
break;
case 'YYYY':
if(val.length<4){
alert('Год должен содержать 4 цифры');
return;
}
newVal = f(oldVal,val,0);
break;
case 'DD':
newVal = f(oldVal,val,8);
break;
case 'hh':
newVal = f(oldVal,val,11);
break;
case 'm':
newVal = f(oldVal,val,14);
break;
}
if(newVal)this.attr('ivalue',newVal);
break;
}
return this;
};
/*@1602.widgets.js*/
$.widgets = {
panels: [],
getPanel: function(jq){
var uid = jq.attr('uid');
if(!uid){
uid = $.widgets.panels.length;
jq.attr('uid',String(uid));
var pane = {
active: null,
widgets: {},
mode: 'hideSingle',
uid: uid,
visibleWidgets: 0
};
$.widgets.panels.push(pane);
}else{
var pane = $.widgets.panels[uid];
}
return pane;
}
}
$.fn.widgetShow = function(w){
var pane = $.widgets.getPanel(this);
var prevVisible = pane.visibleWidgets;
if(typeof w == 'object' && typeof w.constructor != Array){
var id = 'wp'+pane.uid+'_'+w.name;
w.hidden = false;
w.jqHeader = $('<div class="widgetHeader" onclick="$(this).parent().widgetActivate(\''+w.name+'\');">'+(w.title?w.title:'')+'</div>');
w.jqContent = $('<div class="widgetContent"></div>');
pane.widgets[w.name] = w;
pane.visibleWidgets++;
this.append(w.jqHeader).append(w.jqContent);
if(pane.mode == 'showAll' || (pane.mode == 'hideSingle' && prevVisible>0))
w.jqHeader.show();
}else{
if(typeof w == 'string')w = w.split(',');
for(var i=1;i<arguments.length;i++)w.push(arguments[i]);
for(var i in w){
var wi = pane.widgets[w[i]];
if(!wi)continue;
if(wi.hidden){
wi.hidden = false;
pane.visibleWidgets++;
}
if(pane.mode == 'showAll' || (pane.mode == 'hideSingle' && prevVisible>0))
wi.jqHeader.show();
}
}
if(pane.mode=='hideSingle' && prevVisible<=1 && pane.visibleWidgets>1){
for(var i in pane.widgets){
var wi = pane.widgets[i];
if(!wi.hidden)wi.jqHeader.show();
}
}
if(!pane.active){
var x = null;
for(var i in pane.widgets){if(pane.widgets[i].hidden)continue;x = i;break;};
if(x)this.widgetActivate(x);
}
return this;
}
$.fn.widgetHide = function(w){
var ret;
var pane = $.widgets.getPanel(this);
var prevVisible = pane.visibleWidgets;
if(typeof w == 'string'){
ret = w;
w = w.split(',');
}else if(typeof w == 'undefined'){
w = [];
for(var i in pane.widgets)if(!pane.widgets[i].hidden)w.push(pane.widgets[i].name);
ret = w.join(',');
}
for(var i=1;i<arguments.length;i++)w.push(arguments[i]);
for(var i in w){
var wi = pane.widgets[w[i]];
if(!wi)continue;
if(!wi.hidden){
wi.hidden = true;
pane.visibleWidgets--;
}
wi.jqHeader.hide();
wi.jqContent.hide();
if(pane.active==wi.name){
pane.active = null;
}
}
if(pane.mode=='hideSingle' && prevVisible>1 && pane.visibleWidgets == 1){
for(var i in pane.widgets){
var wi = pane.widgets[i];
if(!wi.hidden)wi.jqHeader.hide();
}
}
if(!pane.active){
var x = null;
for(var i in pane.widgets){if(pane.widgets[i].hidden)continue;x = i;break;};
if(x)this.widgetActivate(x);
}
return ret;
}
$.fn.widgetActivate = function(what){
var pane = $.widgets.getPanel(this);
var a = pane.widgets[pane.active];
pane.active = what;
a = pane.widgets[what];
if(a)a.jqContent.show();
}
/*@1602.object_view.js*/
$.ov = {
views:[],
objectMemberValue: function(x){
var val;
switch(typeof x){
case 'boolean':
val = '<input type="checkbox" '+(x?'checked ':'')+'/>';
break;
case 'number':
val = '<pre style="color:blue">'+x+'</pre>';
break;
case 'string':
val = '<pre style="color:red;max-height:300px;overflow:auto;">"'+String(x).substr(0,50).replace(/</g,'&lt;')+'"</pre>';
break;
case 'function':
val = 'function';
break;
default:
case 'object':
val = x;
break;
}
return val;
},
objectToRows: function(ovid,path,className){
var level = path.length;
var pathStr = path.join('.');
var view = this.views[ovid];
var obj = view.object;
var exp = view.expanded;
for(var i in path)obj = obj[path[i]];
var r = '';
if(typeof className == 'undefined')className = obj.className;
var cl = this.classes[className];
var isCollection =
(obj.constructor==Array)
||
(typeof obj == 'object' && cl && cl.collection && cl.collection.exceptedIndex && !obj[cl.collection.exceptedIndex]);
if(cl && !isCollection){
for(var i in cl.members){
var x = obj[i];
var mem = cl.members[i];
if(typeof x == 'undefined' && !mem.calculated){
if(mem.notNull || typeof mem.editing == 'undefined'){
if(/^_{2}[a-z]$/.test(i)){
r+='<tr><th colspan="2">'+mem+'</th></tr>';
}
continue;
}
x = mem.editing.defaultValue;
}
var newPathStr = pathStr+(level>0?'.':'')+i;
var label = i;
var value = x;
if(
(
(cl.editing && !(mem.editing===false))
||
(!cl.editing && mem.editing)
)&&(
!(typeof x == 'object' && typeof mem.editing != 'object')
)
){
var type = (mem.editing&&mem.editing.type)?mem.editing.type:mem.editing;
switch(type){
case 'textarea':
value = '<textarea path="'+newPathStr+'" rows="'+(mem.editing&&mem.editing.rows?mem.editing.rows:3)+'" onblur="$.ov.saveValue(this);">'+String(x).replace(/</g,'&lt;')+'</textarea>';
break;
case 'password':
case 'text':
default:
value = '<input type="'+(type=='password'?type:'text')+'" path="'+newPathStr+'" value="'+String(x).replace(/\"/g,'&quot;').replace(/[\n\r]/,"")+'" onblur="$.ov.saveValue(this);" />';
break;
case 'select':
var opts = '';
for(var i in mem.editing.opts){
opts+='<option '+(x==mem.editing.opts[i]?'selected':'')+'>'+mem.editing.opts[i]+'</option>';
}
value = '<select path="'+newPathStr+'" onchange="$.ov.saveValue(this);">'+opts+'</select>';
break;
}
}else{
var c = $.ov.classes[mem.className];
if(typeof mem.asString == 'function'){
value = mem.asString.apply(obj,[x]);
}else if(c){
if(c.collection && typeof c.collection.value == 'function')
value = $.ov.classes[mem.className].collection.value.apply(x);
}
}
if(typeof mem == 'string'){
label = mem;
}else if(typeof mem == 'object' && mem.label){
label = mem.label;
}
var levelup = 'class="likealink" onclick="$(this.parentNode).objectView(\''+newPathStr+'\''+(mem.className?',\''+mem.className+'\'':'')+')"';
var is_levelup = false;
if(typeof x == 'object')for(var xxx in x){is_levelup = true; break;}
var expanded = is_levelup && (cm_in_array(exp,newPathStr) || x.__ov_expanded || mem.defaultExpanded);
r+='<tr level="'+level+'" expanded="'+(expanded?1:0)+'" '+(mem.className?'iclass="'+mem.className+'"':'')+'><td class="'+(is_levelup?'likealink ':'')+'ovColMain" style="padding-left:'+(15*level+3)+'px" '+(is_levelup?levelup:'')+'>'+label+'</td><td class="ovColumn">'+value+'</td></tr>';
if(expanded)r+=$.ov.objectToRows(ovid,newPathStr.split('.'),mem.className);
}
}else{
for(var i in obj){
try{
var x = obj[i];
}catch(e){
continue;
}
var defExp = false;
if(cl && isCollection){
var vis = cl.collection.visible;
if(typeof vis == 'function' && !vis(i,obj[i]))continue;
var label = typeof cl.collection.index == 'function'?cl.collection.index.apply(obj[i],[i,obj[i]]):i;
var val = typeof cl.collection.value == 'function'?cl.collection.value.apply(obj[i]):obj[i];
var is_levelup = (typeof cl.collection.expandable == 'undefined' && typeof x == 'object')?true:!!cl.collection.expandable;
defExp = !!cl.collection.defaultExpanded;
}else{
var label = i;
var val = this.objectMemberValue(x);
var is_levelup = false;
if(typeof x != 'string')for(var xxx in x){is_levelup = true; break;}
}
var newPathStr = pathStr+(level>0?'.':'')+i;
var levelup = ' onclick="$(this.parentNode).objectView(\''+newPathStr+'\''+(cl?',\''+className+'\'':'')+')"';
var expanded = is_levelup && (cm_in_array(exp,newPathStr) || x.__ov_expanded || defExp);
r+='<tr level="'+level+'" expanded="'+(expanded?1:0)+'" '+(cl?'iclass="'+className+'"':'')+'><td class="'+(is_levelup?'likealink ':'')+'ovColMain" style="padding-left:'+(15*level+3)+'px" '+(is_levelup?levelup:'')+'>'+label+'</td><td class="ovColumn">'+val+'</td></tr>';
if(expanded)r+=$.ov.objectToRows(ovid,newPathStr.split('.'),(cl?className:void(0)));
}
}
if(r=='')r='<tr level="'+level+'"><td class="ovColMain" style="padding-left:'+(15*level)+'px">empty</td><td class="ovColumn">empty</td></tr>';
if(level>0)exp.push(pathStr);
return r;
},
saveValue: function(el){
var tag = el.tagName.toLowerCase();
switch(tag){
case 'select':
case 'textarea':
case 'input':
if(tag !='select' && el.defaultValue==el.value)return;
var ovid = el.parentNode.parentNode.parentNode.parentNode.parentNode.attributes.ovid.nodeValue;
var obj = $.ov.views[ovid].object;
var path = el.attributes.path.nodeValue.split('.');
var last = path.pop();
for(var i in path)obj = obj[path[i]];
el.defaultValue = el.value;
obj[last] = el.value;
var tr = el.parentNode.parentNode;
var curLevel = Number(tr.attributes.level.nodeValue);
var sibling = tr.previousSibling;
if(curLevel>0){
while(sibling && Number(sibling.attributes.level.nodeValue)==curLevel)
sibling=sibling.previousSibling;
}
if(sibling){
var cl = $.ov.classes[sibling.attributes.iclass.nodeValue];
sibling.childNodes[1].innerHTML = typeof cl.collection.value == 'function'?cl.collection.value(obj):obj;
}
break;
break;
}
},
handleAction: function(ovid,path,index,field,className){
$.ov.classes[className].members[field].action.apply($.ov.views[ovid].object[path][index]);
},
classes:{}
};
$.ov.classes.userTesting = {
members:{
subject: 'Предмет',
script: 'Сценарий',
userName: 'Тестируемый',
result: {
label: 'Результат',
asString: function(){return '<b>'+String(Math.round(Number(this.result)*10)/10)+'%</b>';}
},
attempts: {
label: 'Попытки',
asString: function(x){
var n = x.length;
if(n%10>4 || n%10==0 || (n>10 && n<20)) return n+' попыток';
if(n%10==1) return n+' попытка';
return n+' попытки';
},
className: 'testAttempt',
defaultExpanded: true
}
}
};
$.ov.classes.testAttempt= {
members:{
timeBegin: {
label:'Открыта',
asString:function(x){
return x?x.toDate().asFormat():'';
}
},
timeEnd: {
label:'Закрыта',
asString:function(x){
return x?x.toDate().asFormat():'';
}
},
result: {
label: 'Результат',
asString: function(){return '<b>'+String(Math.round(Number(this.result)*10)/10)+'%</b>';}
},
themes: {
label: 'Заданные вопросы',
className: 'testTheme',
defaultExpanded: true,
asString: function(){
return '';
}
}
},
collection: {
index: function(i,val){
return 'Попытка №'+(Number(i)+1);
},
value: function(){
return (Math.round(Number(this.result)*10)/10)+'%';
},
defaultExpanded: true,
expandable: true
}
};
$.ov.classes.testTheme = {
members:{
themeName: 'Название',
questCount: 'Кол-во вопросов',
correctAns: 'Отвечено верно',
result: {
calculated: true,
label: 'Результат по теме',
asString: function(){return Math.round((this.correctAns/this.questCount)*1000)/10+'%';}
},
questions: {
label: 'Вопросы темы',
className: 'testQuestion',
defaultExpanded: true,
asString: function(){
return '';
}
}
},
collection:{
index: function(i,val){
return 'Тема №'+(Number(i)+1);
},
value: function(val){
return '<b>'+this.themeName+'</b> (отвечено верно <b style="color:blue">'+this.correctAns+'</b> из '+this.questCount+')';
},
defaultExpanded: false,
expandable: true
}
};
$.ov.classes.testQuestion = {
members:{
answers:{
label: 'Ответы',
className: 'testAnswer',
defaultExpanded: true,
asString: function(){
return '';
}
}
},
collection: {
index: function(i,val){
return 'Вопрос '+(Number(i)+1);
},
value: function(val){
if(globals.godMode){
var correct = true;
for(var j in this.answers)if(this.answers[j].isCorrect!=this.answers[j].userAnswer)correct = false;
return '<span style="font-weight:700;color:'+(correct?'green':'red')+'">'+this.content+'</span>';
}else{
return this.content;
}
},
defaultExpanded: false,
expandable: true
}
};
$.ov.classes.testAnswer = {
members:{},
collection:{
index: function(i,val){
console.log(this);
return '<input type="'+(this.t==1?'radio':'checkbox')+'" disabled '+(this.userAnswer===1?'checked':'')+' />';
},
value: function(val){
return this.content+(globals.godMode && this.isCorrect===1?' <b style="color:green;">(правильный ответ)</b>':'');
},
defaultExpanded: false,
expandable: false
}
}
$.fn.objectView = function(obj,className){
var path;
if(typeof obj == 'string')
path = obj.split('.');
else
path = [];
var level = path.length;
if(level==0){
var ovid = this.attr('ovid');
if(!ovid){
ovid = $.ov.views.length;
this.attr('ovid',ovid);
$.ov.views.push({
object:obj,
expanded:[]
});
}else{
$.ov.views[ovid].object = obj;
$.ov.views[ovid].expanded = [];
}
}else{
var tmp = this;
var tmp2;
ovid = this[0].parentNode.parentNode.parentNode.attributes.ovid.nodeValue;
if(this.attr('expanded')==1){
var curlevel = this.attr('level');
tmp = tmp.next('tr');
while(true){
if(tmp.attr('level')<=curlevel || tmp.size()==0)break;
tmp2 = tmp.next('tr');
tmp.remove();
tmp = tmp2;
}
this.attr('expanded',0);
var pathStr = path.join('.');
var exp = $.ov.views[ovid].expanded;
for(var i in exp)if(exp[i]==pathStr)delete exp[i];
return this;
}
this.attr('expanded',1);
obj = $.ov.views[ovid];
}
var r = $.ov.objectToRows(ovid,path,className);
if(level == 0){
if(this.children('table.objectView').size()==0)
this.html('<table class="objectView" cellspacing="0"><thead><tr><th colspan="Object View"></th></tr></thead><tbody></tbody></table>');
var tbody = this.children('table.objectView tbody');
tbody.html(r);
}else{
this.after(r);
}
}
$.fn.objectXView = function(obj,className){
if(!$.ov.classes[className])return false;
var cs = $.ov.classes[className].collections;
var objectPlace = $('div#ov',this);
if(objectPlace.size()==0){
var initHtml = '<div id="ov" style="margin-bottom:10px;"></div>';
var t = '';
var c = '';
for(var i in cs){
var cc = $.ov.classes[cs[i]];
if(!cc)continue;
t+='<li><a href="#"><span>'+(cc.collectionTitle || i)+'</span></a></li>';
c+='<div id="'+i+'" class="tabPageUnbounded"></div>';
}
if(c!=''){
initHtml += '<div id="tabs"><ul>'+t+'</ul>'+c+'</div>';
}
this.html(initHtml).find('div#tabs').tabs();
objectPlace = $('div#ov',this);
}
objectPlace.objectView(obj,className);
var ovid = parseInt(objectPlace.attr('ovid'));
for(var i in cs){
var cn = cs[i];
if(!$.ov.classes[cn])continue;
var m = $.ov.classes[cn].members;
var t = '<table class="tab3d" cellspacing="0" cellpadding="3"><thead><tr>';
var colcount = 0;
for(var j in m){
t+='<th>'+(typeof m[j]=='object'?m[j].label:m[j])+'</th>';
colcount++;
}
t+='</tr></thead><tbody>';
var rowcount = 0;
for(var j in obj[i]){
t+='<tr>';
for(var k in m){
var v = obj[i][j][k];
if(m[k].action)
t+='<td><span class="likealink" onclick="$.ov.handleAction('+ovid+',\''+i+'\','+j+',\''+k+'\',\''+cn+'\')">'+v+'</span></td>';
else
t+='<td>'+v+'</td>';
}
t+='</tr>';
rowcount++;
}
if(rowcount==0)t+='<tr><td colspan="'+colcount+'" style="padding:50px;"><center>нет данных</center></td></tr>';
t+='</tbody></table>';
this.find('#tabs #'+i).html(t);
}
};
/*@date.js*/
Date.dayNames = ['Воскресенье', 'Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота'];
Date.abbrDayNames = ['Вс', 'Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб'];
Date.monthNames = ['январь', 'февраль', 'март', 'апрель', 'май', 'июнь', 'июль', 'август', 'сентябрь', 'октябрь', 'ноябрь', 'декабрь'];
Date.abbrMonthNames = ['янв', 'фев', 'мар', 'апр', 'май', 'июн', 'июл', 'авг', 'сен', 'окт', 'ноя', 'дек'];
Date.firstDayOfWeek = 1;
Date.format = 'yyyy-mm-dd';
(function() {
function add(name, method) {
if( !Date.prototype[name] ) {
Date.prototype[name] = method;
}
};
add("isLeapYear", function() {
var y = this.getFullYear();
return (y%4==0 && y%100!=0) || y%400==0;
});
add("isWeekend", function() {
return this.getDay()==0 || this.getDay()==6;
});
add("isWeekDay", function() {
return !this.isWeekend();
});
add("getDaysInMonth", function() {
return [31,(this.isLeapYear() ? 29:28),31,30,31,30,31,31,30,31,30,31][this.getMonth()];
});
add("getDayName", function(abbreviated) {
return abbreviated ? Date.abbrDayNames[this.getDay()] : Date.dayNames[this.getDay()];
});
add("getMonthName", function(abbreviated,form) {
var m = this.getMonth();
if(isNaN(m))return '';
if(!form){
return abbreviated ? Date.abbrMonthNames[m] : Date.monthNames[m];
}else{
var mn = Date.monthNames[m];
if(m==2 || m==7)return mn+'a';
else return mn.substr(0,mn.length-1)+'я';
}
});
add("getDayOfYear", function() {
var tmpdtm = new Date("1/1/" + this.getFullYear());
return Math.floor((this.getTime() - tmpdtm.getTime()) / 86400000);
});
add("getWeekOfYear", function() {
return Math.ceil(this.getDayOfYear() / 7);
});
add("setDayOfYear", function(day) {
this.setMonth(0);
this.setDate(day);
return this;
});
add("addYears", function(num) {
this.setFullYear(this.getFullYear() + num);
return this;
});
add("addMonths", function(num) {
var tmpdtm = this.getDate();
this.setMonth(this.getMonth() + num);
if (tmpdtm > this.getDate())
this.addDays(-this.getDate());
return this;
});
add("addDays", function(num) {
this.setDate(this.getDate() + num);
return this;
});
add("addHours", function(num) {
this.setHours(this.getHours() + num);
return this;
});
add("addMinutes", function(num) {
this.setMinutes(this.getMinutes() + num);
return this;
});
add("addSeconds", function(num) {
this.setSeconds(this.getSeconds() + num);
return this;
});
add("zeroTime", function() {
this.setMilliseconds(0);
this.setSeconds(0);
this.setMinutes(0);
this.setHours(0);
return this;
});
add("asString", function() {
var r = Date.format;
return r
.replace(/yyyy/g,this.getFullYear())
.replace(/yy/g,this.getYear())
.replace(/mmm/g,this.getMonthName(true))
.replace(/mm/g,_zeroPad(this.getMonth()+1))
.replace(/dd/g,_zeroPad(this.getDate()));
});
add("asFormat",function(fmt){
if(!fmt)fmt = '{d} {Ba} {Y} в {H}:{M}';
var d = {
A: this.getDayName(),
b: this.getMonthName(true),
B: this.getMonthName(false),
Ba:this.getMonthName(false,true),
m: x(this.getMonth()+1),
d: x(this.getDate()),
H: x(this.getHours()),
M: x(this.getMinutes()),
S: x(this.getSeconds()),
Y: this.getFullYear()
}
for(var i in d)fmt = fmt.set(i,d[i],'g');
return fmt;
});
Date.fromString = function(s)
{
var f = Date.format;
var d = new Date('01/01/1977');
var iY = f.indexOf('yyyy');
if (iY > -1) {
d.setFullYear(Number(s.substr(iY, 4)));
} else {
d.setYear(Number(s.substr(f.indexOf('yy'), 2)));
}
var iM = f.indexOf('mmm');
if (iM > -1) {
var mStr = s.substr(iM, 3);
for (var i=0; i<Date.abbrMonthNames.length; i++) {
if (Date.abbrMonthNames[i] == mStr) break;
}
d.setMonth(i);
} else {
d.setMonth(Number(s.substr(f.indexOf('mm'), 2)) - 1);
}
d.setDate(Number(s.substr(f.indexOf('dd'), 2)));
if (isNaN(d.getTime())) return false;
return d;
}
var _zeroPad = function(num) {
var s = '0'+num;
return s.substring(s.length-2)
};
var x = function(n,d){
if(!d)d=2;
n = n.toString();
for(var i=n.length;i<d;i++)n='0'+n;
return n;
}
})();
/*@jquery.bgiframe.js*/
(function($){
$.fn.bgIframe = jQuery.fn.bgiframe = function(s) {
if (!$.browser.msie && $.browser.version!='6.0') return this;
s = $.extend({
top     : 'auto',
left    : 'auto',
width   : 'auto',
height  : 'auto',
opacity : true,
src     : 'javascript:false;'
}, s || {});
var prop = function(n){return n&&n.constructor==Number?n+'px':n;},
html = '<iframe class="bgiframe"frameborder="0"tabindex="-1"src="'+s.src+'"'+
'style="display:block;position:absolute;z-index:-1;'+
(s.opacity !== false?'filter:Alpha(Opacity=\'0\');':'')+
'top:'+(s.top=='auto'?'expression(((parseInt(this.parentNode.currentStyle.borderTopWidth)||0)*-1)+\'px\')':prop(s.top))+';'+
'left:'+(s.left=='auto'?'expression(((parseInt(this.parentNode.currentStyle.borderLeftWidth)||0)*-1)+\'px\')':prop(s.left))+';'+
'width:'+(s.width=='auto'?'expression(this.parentNode.offsetWidth+\'px\')':prop(s.width))+';'+
'height:'+(s.height=='auto'?'expression(this.parentNode.offsetHeight+\'px\')':prop(s.height))+';'+
'"/>';
return this.each(function() {
if ( !$('iframe.bgiframe', this)[0] ){
$(this).prepend(html);
}
});
};
})(jQuery);
/*@jquery.datePicker.js*/
(function($){
$.fn.extend({
renderCalendar  :   function(s)
{
var dc = function(a)
{
return document.createElement(a);
};
s = $.extend(
{
month			: null,
year			: null,
renderCallback	: null,
showHeader		: $.dpConst.SHOW_HEADER_SHORT,
dpController	: null,
hoverClass		: 'dp-hover'
}
, s
);
if (s.showHeader != $.dpConst.SHOW_HEADER_NONE) {
var headRow = $(dc('tr'));
for (var i=Date.firstDayOfWeek; i<Date.firstDayOfWeek+7; i++) {
var weekday = i%7;
var day = Date.dayNames[weekday];
headRow.append(
jQuery(dc('th')).attr({'scope':'col', 'abbr':day, 'title':day, 'class':(weekday == 0 || weekday == 6 ? 'weekend' : 'weekday')}).html(s.showHeader == $.dpConst.SHOW_HEADER_SHORT ? day.substr(0, 1) : day)
);
}
};
var calendarTable = $(dc('table'))
.attr(
{
'cellspacing':2,
'className':'jCalendar'
}
)
.append(
(s.showHeader != $.dpConst.SHOW_HEADER_NONE ?
$(dc('thead'))
.append(headRow)
:
dc('thead')
)
);
var tbody = $(dc('tbody'));
var today = (new Date()).zeroTime();
var month = s.month == undefined ? today.getMonth() : s.month;
var year = s.year || today.getFullYear();
var currentDate = new Date(year, month, 1);
var firstDayOffset = Date.firstDayOfWeek - currentDate.getDay() + 1;
if (firstDayOffset > 1) firstDayOffset -= 7;
var weeksToDraw = Math.ceil(( (-1*firstDayOffset+1) + currentDate.getDaysInMonth() ) /7);
currentDate.addDays(firstDayOffset-1);
var doHover = function()
{
if (s.hoverClass) {
$(this).addClass(s.hoverClass);
}
};
var unHover = function()
{
if (s.hoverClass) {
$(this).removeClass(s.hoverClass);
}
};
var w = 0;
while (w++<weeksToDraw) {
var r = jQuery(dc('tr'));
for (var i=0; i<7; i++) {
var thisMonth = currentDate.getMonth() == month;
var d = $(dc('td'))
.text(currentDate.getDate() + '')
.attr('className', (thisMonth ? 'current-month ' : 'other-month ') +
(currentDate.isWeekend() ? 'weekend ' : 'weekday ') +
(thisMonth && currentDate.getTime() == today.getTime() ? 'today ' : '')
)
.hover(doHover, unHover)
;
if (s.renderCallback) {
s.renderCallback(d, currentDate, month, year);
}
r.append(d);
currentDate.addDays(1);
}
tbody.append(r);
}
calendarTable.append(tbody);
return this.each(
function()
{
$(this).empty().append(calendarTable);
}
);
},
datePicker : function(s)
{
if (!$.event._dpCache) $.event._dpCache = [];
s = $.extend(
{
month				: undefined,
year				: undefined,
startDate			: undefined,
endDate				: undefined,
renderCallback		: [],
createButton		: true,
showYearNavigation	: true,
closeOnSelect		: true,
displayClose		: false,
selectMultiple		: false,
clickInput			: false,
verticalPosition	: $.dpConst.POS_TOP,
horizontalPosition	: $.dpConst.POS_LEFT,
verticalOffset		: 0,
horizontalOffset	: 0,
hoverClass			: 'dp-hover'
}
, s
);
return this.each(
function()
{
var $this = $(this);
var alreadyExists = true;
if (!this._dpId) {
this._dpId = $.event.guid++;
$.event._dpCache[this._dpId] = new DatePicker(this);
alreadyExists = false;
}
var controller = $.event._dpCache[this._dpId];
controller.init(s);
if (!alreadyExists && s.createButton) {
this.disabled = true;
controller.button = $('<a href="#" class="dp-choose-date" title="' + $.dpText.TEXT_CHOOSE_DATE + '">' + $.dpText.TEXT_CHOOSE_DATE + '</a>')
.bind(
'click',
function()
{
$this.dpDisplay(this);
this.blur();
return false;
}
);
$this.after(controller.button);
}
if (!alreadyExists && $this.is(':text')) {
$this
.bind(
'dateSelected',
function(e, selectedDate, $td)
{
this.value = selectedDate.asString();
}
).bind(
'change',
function()
{
var d = Date.fromString(this.value.replace(/00:00:00/g,''));
if (d) {
controller.setSelected(d, true, true);
}
}
);
if (s.clickInput) {
$this.bind(
'click',
function()
{
$this.dpDisplay();
}
);
}
var d = Date.fromString(this.value);
if (this.value != '' && d) {
controller.setSelected(d, true, true);
}
}
$this.addClass('dp-applied');
}
)
},
dpSetDisabled : function(s)
{
return _w.call(this, 'setDisabled', s);
},
dpSetStartDate : function(d)
{
return _w.call(this, 'setStartDate', d);
},
dpSetEndDate : function(d)
{
return _w.call(this, 'setEndDate', d);
},
dpGetSelected : function()
{
var c = _getController(this[0]);
if (c) {
return c.getSelected();
}
return null;
},
dpSetSelected : function(d, v, m)
{
if (v == undefined) v=true;
if (m == undefined) m=true;
return _w.call(this, 'setSelected', Date.fromString(d), v, m);
},
dpSetDisplayedMonth : function(m, y)
{
return _w.call(this, 'setDisplayedMonth', Number(m), Number(y));
},
dpDisplay : function(e)
{
return _w.call(this, 'display', e);
},
dpSetRenderCallback : function(a)
{
return _w.call(this, 'setRenderCallback', a);
},
dpSetPosition : function(v, h)
{
return _w.call(this, 'setPosition', v, h);
},
dpSetOffset : function(v, h)
{
return _w.call(this, 'setOffset', v, h);
},
_dpDestroy : function()
{
}
});
var _w = function(f, a1, a2, a3)
{
return this.each(
function()
{
var c = _getController(this);
if (c) {
c[f](a1, a2, a3);
}
}
);
};
function DatePicker(ele)
{
this.ele = ele;
this.displayedMonth		=	null;
this.displayedYear		=	null;
this.startDate			=	null;
this.endDate			=	null;
this.showYearNavigation	=	null;
this.closeOnSelect		=	null;
this.displayClose		=	null;
this.selectMultiple		=	null;
this.verticalPosition	=	null;
this.horizontalPosition	=	null;
this.verticalOffset		=	null;
this.horizontalOffset	=	null;
this.button				=	null;
this.renderCallback		=	[];
this.selectedDates		=	{};
};
$.extend(
DatePicker.prototype,
{
init : function(s)
{
this.setStartDate(s.startDate);
this.setEndDate(s.endDate);
this.setDisplayedMonth(Number(s.month), Number(s.year));
this.setRenderCallback(s.renderCallback);
this.showYearNavigation = s.showYearNavigation;
this.closeOnSelect = s.closeOnSelect;
this.displayClose = s.displayClose;
this.selectMultiple = s.selectMultiple;
this.verticalPosition = s.verticalPosition;
this.horizontalPosition = s.horizontalPosition;
this.hoverClass = s.hoverClass;
this.setOffset(s.verticalOffset, s.horizontalOffset);
},
setStartDate : function(d)
{
if (d) {
this.startDate = Date.fromString(d);
}
if (!this.startDate) {
this.startDate = (new Date()).zeroTime();
}
this.setDisplayedMonth(this.displayedMonth, this.displayedYear);
},
setEndDate : function(d)
{
if (d) {
this.endDate = Date.fromString(d);
}
if (!this.endDate) {
this.endDate = (new Date('12/31/2999'));
}
if (this.endDate.getTime() < this.startDate.getTime()) {
this.endDate = this.startDate;
}
this.setDisplayedMonth(this.displayedMonth, this.displayedYear);
},
setPosition : function(v, h)
{
this.verticalPosition = v;
this.horizontalPosition = h;
},
setOffset : function(v, h)
{
this.verticalOffset = parseInt(v) || 0;
this.horizontalOffset = parseInt(h) || 0;
},
setDisabled : function(s)
{
$e = $(this.ele);
$e[s ? 'addClass' : 'removeClass']('dp-disabled');
if (this.button) {
$but = $(this.button);
$but[s ? 'addClass' : 'removeClass']('dp-disabled');
$but.attr('title', s ? '' : $.dpText.TEXT_CHOOSE_DATE);
}
if ($e.is(':text')) {
$e.attr('disabled', s ? 'disabled' : '');
}
},
setDisplayedMonth : function(m, y)
{
if (this.startDate == undefined || this.endDate == undefined) {
return;
}
var s = new Date(this.startDate.getTime());
s.setDate(1);
var e = new Date(this.endDate.getTime());
e.setDate(1);
var t;
if ((!m && !y) || (isNaN(m) && isNaN(y))) {
t = new Date().zeroTime();
t.setDate(1);
} else if (isNaN(m)) {
t = new Date(y, this.displayedMonth, 1);
} else if (isNaN(y)) {
t = new Date(this.displayedYear, m, 1);
} else {
t = new Date(y, m, 1)
}
if (t.getTime() < s.getTime()) {
t = s;
} else if (t.getTime() > e.getTime()) {
t = e;
}
this.displayedMonth = t.getMonth();
this.displayedYear = t.getFullYear();
},
setSelected : function(d, v, moveToMonth)
{
if (this.selectMultiple == false) {
this.selectedDates = {};
}
if (moveToMonth) {
this.setDisplayedMonth(d.getMonth(), d.getFullYear());
}
this.selectedDates[d.getTime()] = v;
},
isSelected : function(t)
{
return this.selectedDates[t];
},
getSelected : function()
{
var r = [];
for(t in this.selectedDates) {
if (this.selectedDates[t] == true) {
r.push(new Date(Number(t)));
}
}
return r;
},
display : function(eleAlignTo)
{
if ($(this.ele).is('.dp-disabled')) return;
eleAlignTo = eleAlignTo || this.ele;
var c = this;
var $ele = $(eleAlignTo);
var eleOffset = $ele.offset();
var _checkMouse = function(e)
{
var el = e.target;
var cal = $('#dp-popup')[0];
while (true){
if (el == cal) {
return true;
} else if (el == document) {
c._closeCalendar();
return false;
} else {
el = $(el).parent()[0];
}
}
};
this._checkMouse = _checkMouse;
this._closeCalendar(true);
$('body')
.append(
$('<div></div>')
.attr('id', 'dp-popup')
.css(
{
'top'	:	eleOffset.top + c.verticalOffset,
'left'	:	eleOffset.left + c.horizontalOffset
}
)
.append(
$('<h2></h2>'),
$('<div id="dp-nav-prev"></div>')
.append(
$('<a id="dp-nav-prev-year" href="#" title="' + $.dpText.TEXT_PREV_YEAR + '">&lt;&lt;</a>')
.bind(
'click',
function()
{
return c._displayNewMonth.call(c, this, 0, -1);
}
),
$('<a id="dp-nav-prev-month" href="#" title="' + $.dpText.TEXT_PREV_MONTH + '">&lt;</a>')
.bind(
'click',
function()
{
return c._displayNewMonth.call(c, this, -1, 0);
}
)
),
$('<div id="dp-nav-next"></div>')
.append(
$('<a id="dp-nav-next-year" href="#" title="' + $.dpText.TEXT_NEXT_YEAR + '">&gt;&gt;</a>')
.bind(
'click',
function()
{
return c._displayNewMonth.call(c, this, 0, 1);
}
),
$('<a id="dp-nav-next-month" href="#" title="' + $.dpText.TEXT_NEXT_MONTH + '">&gt;</a>')
.bind(
'click',
function()
{
return c._displayNewMonth.call(c, this, 1, 0);
}
)
),
$('<div></div>')
.attr('id', 'dp-calendar')
)
.bgIframe()
);
var $pop = $('#dp-popup');
if (this.showYearNavigation == false) {
$('#dp-nav-prev-year, #dp-nav-next-year').css('display', 'none');
}
if (this.displayClose) {
$pop.append(
$('<a href="#" id="dp-close">' + $.dpText.TEXT_CLOSE + '</a>')
.bind(
'click',
function()
{
c._closeCalendar();
return false;
}
)
);
}
c._renderCalendar();
if (this.verticalPosition == $.dpConst.POS_BOTTOM) {
$pop.css('top', eleOffset.top + $ele.height() - $pop.height() + c.verticalOffset);
}
if (this.horizontalPosition == $.dpConst.POS_RIGHT) {
$pop.css('left', eleOffset.left + $ele.width() - $pop.width() + c.horizontalOffset);
}
$(this.ele).trigger('dpDisplayed', $pop);
$(document).bind('mousedown', this._checkMouse);
},
setRenderCallback : function(a)
{
if (a && typeof(a) == 'function') {
a = [a];
}
this.renderCallback = this.renderCallback.concat(a);
},
cellRender : function ($td, thisDate, month, year) {
var c = this.dpController;
var d = new Date(thisDate.getTime());
$td.bind(
'click',
function()
{
var $this = $(this);
if (!$this.is('.disabled')) {
c.setSelected(d, !$this.is('.selected') || !c.selectMultiple);
var s = c.isSelected(d.getTime());
$(c.ele).trigger('dateSelected', [d, $td, s]);
if (c.closeOnSelect) {
c._closeCalendar();
} else {
$this[s ? 'addClass' : 'removeClass']('selected');
}
}
}
);
if (c.isSelected(d.getTime())) {
$td.addClass('selected');
}
for (var i=0; i<c.renderCallback.length; i++) {
c.renderCallback[i].apply(this, arguments);
}
},
_displayNewMonth : function(ele, m, y)
{
if (!$(ele).is('.disabled')) {
this.setDisplayedMonth(this.displayedMonth + m, this.displayedYear + y);
this._clearCalendar();
this._renderCalendar();
$(this.ele).trigger('dpMonthChanged', [this.displayedMonth, this.displayedYear]);
}
ele.blur();
return false;
},
_renderCalendar : function()
{
$('#dp-popup h2').html(Date.monthNames[this.displayedMonth] + ' ' + this.displayedYear);
$('#dp-calendar').renderCalendar(
{
month			: this.displayedMonth,
year			: this.displayedYear,
renderCallback	: this.cellRender,
dpController	: this,
hoverClass		: this.hoverClass
}
);
if (this.displayedYear == this.startDate.getFullYear() && this.displayedMonth == this.startDate.getMonth()) {
$('#dp-nav-prev-year').addClass('disabled');
$('#dp-nav-prev-month').addClass('disabled');
$('#dp-calendar td.other-month').each(
function()
{
var $this = $(this);
if (Number($this.text()) > 20) {
$this.addClass('disabled');
}
}
);
var d = this.startDate.getDate();
$('#dp-calendar td.current-month').each(
function()
{
var $this = $(this);
if (Number($this.text()) < d) {
$this.addClass('disabled');
}
}
);
} else {
$('#dp-nav-prev-year').removeClass('disabled');
$('#dp-nav-prev-month').removeClass('disabled');
var d = this.startDate.getDate();
if (d > 20) {
var sd = new Date(this.startDate.getTime());
sd.addMonths(1);
if (this.displayedYear == sd.getFullYear() && this.displayedMonth == sd.getMonth()) {
$('#dp-calendar td.other-month').each(
function()
{
var $this = $(this);
if (Number($this.text()) < d) {
$this.addClass('disabled');
}
}
);
}
}
}
if (this.displayedYear == this.endDate.getFullYear() && this.displayedMonth == this.endDate.getMonth()) {
$('#dp-nav-next-year').addClass('disabled');
$('#dp-nav-next-month').addClass('disabled');
$('#dp-calendar td.other-month').each(
function()
{
var $this = $(this);
if (Number($this.text()) < 14) {
$this.addClass('disabled');
}
}
);
var d = this.endDate.getDate();
$('#dp-calendar td.current-month').each(
function()
{
var $this = $(this);
if (Number($this.text()) > d) {
$this.addClass('disabled');
}
}
);
} else {
$('#dp-nav-next-year').removeClass('disabled');
$('#dp-nav-next-month').removeClass('disabled');
var d = this.endDate.getDate();
if (d < 13) {
var ed = new Date(this.endDate.getTime());
ed.addMonths(-1);
if (this.displayedYear == ed.getFullYear() && this.displayedMonth == ed.getMonth()) {
$('#dp-calendar td.other-month').each(
function()
{
var $this = $(this);
if (Number($this.text()) > d) {
$this.addClass('disabled');
}
}
);
}
}
}
},
_closeCalendar : function(programatic)
{
$(document).unbind('mousedown', this._checkMouse);
this._clearCalendar();
$('#dp-popup a').unbind();
$('#dp-popup').empty().remove();
if (!programatic) {
$(this.ele).trigger('dpClosed', [this.getSelected()]);
}
},
_clearCalendar : function()
{
$('#dp-calendar td').unbind();
$('#dp-calendar').empty();
}
}
);
$.dpConst = {
SHOW_HEADER_NONE	:	0,
SHOW_HEADER_SHORT	:	1,
SHOW_HEADER_LONG	:	2,
POS_TOP				:	0,
POS_BOTTOM			:	1,
POS_LEFT			:	0,
POS_RIGHT			:	1
};
$.dpText = {
TEXT_PREV_YEAR		:	'Previous year',
TEXT_PREV_MONTH		:	'Previous month',
TEXT_NEXT_YEAR		:	'Next year',
TEXT_NEXT_MONTH		:	'Next month',
TEXT_CLOSE			:	'Close',
TEXT_CHOOSE_DATE	:	'Choose date'
};
$.dpVersion = '$Id: jquery.datePicker.js 3438 2007-09-22 14:33:14Z kelvin.luck $';
function _getController(ele)
{
if (ele._dpId) return $.event._dpCache[ele._dpId];
return false;
};
if ($.fn.bgIframe == undefined) {
$.fn.bgIframe = function() {return this; };
};
$(window)
.bind('unload', function() {
var els = $.event._dpCache || [];
for (var i in els) {
$(els[i].ele)._dpDestroy();
}
});
})(jQuery);
/*@deserialize.js*/
$.fn.deserialize = function(d,config) {
var data= d;
me  = this;
if (d === undefined) {
return me;
}
config = $.extend({ isPHPnaming	: false,
overwrite	: true},config);
if (d.constructor == Array)	{
data={};
for(var i=0; i<d.length; i++) {
if (typeof data[d[i].name] != 'undefined') {
if (data[d[i].name].constructor!= Array) {
data[d[i].name]=[data[d[i].name],d[i].value];
} else {
data[d[i].name].push(d[i].value);
}
} else {
data[d[i].name]=d[i].value;
}
}
}
$('input,select,textarea',me)
.each(function() {
var p=this.name;
var v = [];
if (config.isPHPnaming) {
p=p.replace(/\[\]$/,'');
}
if(p && data[p] != undefined) {
v = data[p].constructor == Array ? data[p] : [data[p]];
}
if (config.overwrite === true || data[p]) {
switch(this.type || this.tagName.toLowerCase()) {
case "radio":
case "checkbox":
this.checked=false;
for(var i=0;i<v.length;i++) {
this.checked|=(this.value!='' && v[i]==this.value);
}
break;
case "select-multiple" || "select":
for( i=0;i<this.options.length;i++) {
this.options[i].selected=false;
for(var j=0;j<v.length;j++) {
this.options[i].selected|=(this.options[i].value!='' && this.options[i].value==v[j]);
}
}
break;
case "button":
case "submit":
this.value=v.length>0?v.join(','):this.value;
break;
default:
this.value=v.join(',');
}
}
});
return me;
};
/*@jquery.dnrno.js*/
(function($){
$.fn.jqDrag=function(r){$.jqDnR.init(this,r,'d');  return this;};
$.fn.jqResize=function(r){
this.bgiframe();
var mn = $(this).parent().attr('id');
$('.jqmRefresh',this).click(function(){
if(typeof mn == 'undefined' || mn==''){
}else{
jEMS_Reload(mn);
}
});
$.jqDnR.init(this,r,'r');
$('.jqResize',this).css({display:'none'});
return this;
};
$.jqDnR={
init:function(w,r,t){
r=(r)?$(r,w):w;
r.bind('mousedown',{w:w,t:t},function(e){
var h=e.data;
var w=h.w;
hash=$.extend({
oX:f(w,'left'),
oY:f(w,'top'),
oW:f(w,'width'),
oH:f(w,'height'),
pX:e.pageX,
pY:e.pageY,
rk:$(this).attr('resize')
},h);
$().mousemove($.jqDnR.drag).mouseup($.jqDnR.stop);
return true;
});
},
drag:function(e) {
var h=hash;
var w=h.w[0];
if(h.t == 'd'){
h.w.css({
left:Math.max(h.oX + e.pageX - h.pX,0),
top:Math.max(h.oY + e.pageY - h.pY,0)
});
}else{
switch(h.rk){
case 'br':
h.w.css({
width:Math.max(e.pageX - h.pX + h.oW,0),
height:Math.max(e.pageY - h.pY + h.oH,0)
});
break;
case 'b':
h.w.css({
height:Math.max(e.pageY - h.pY + h.oH,0)
});
break;
case 'bl':
h.w.css({
left:Math.max(e.pageX - h.pX + h.oX,0),
width:Math.max(-e.pageX + h.pX + h.oW,0),
height:Math.max(e.pageY - h.pY + h.oH,0)
});
break;
case 'l':
h.w.css({
left:Math.max(e.pageX - h.pX + h.oX,0),
width:Math.max(-e.pageX + h.pX + h.oW,0)
});
break;
case 'r':
h.w.css({
width:Math.max(e.pageX - h.pX + h.oW,0)
});
break;
case 't':
h.w.css({
height:Math.max(-e.pageY + h.pY + h.oH,0),
top:Math.max(e.pageY - h.pY + h.oY,0)
});
break;
case 'tr':
h.w.css({
height:Math.max(-e.pageY + h.pY + h.oH,0),
top:Math.max(e.pageY - h.pY + h.oY,0),
width:Math.max(e.pageX - h.pX + h.oW,0)
});
break;
case 'tl':
h.w.css({
height:Math.max(-e.pageY + h.pY + h.oH,0),
top:Math.max(e.pageY - h.pY + h.oY,0),
width:Math.max(-e.pageX + h.pX + h.oW,0),
left:Math.max(e.pageX - h.pX + h.oX,0)
});
break;
}
}
return false;
},
stop:function(){
var j=$.jqDnR;
$().unbind('mousemove',j.drag).unbind('mouseup',j.stop);
},
h:false};
var hash=$.jqDnR.h;
var f=function(w,t){
return parseInt(w.css(t)) || 0
};
})(jQuery);
/*@jquery.cookie.js*/
$.cookie = function(name, value, options) {
if (typeof value != 'undefined') {
options = options || {};
var expires = '';
if (options.expires && (typeof options.expires == 'number' || options.expires.toGMTString)) {
var date;
if (typeof options.expires == 'number') {
date = new Date();
date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
} else {
date = options.expires;
}
expires = '; expires=' + date.toGMTString();
}
var path = options.path ? '; path=' + options.path : '';
var domain = options.domain ? '; domain=' + options.domain : '';
var secure = options.secure ? '; secure' : '';
document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');
} else {
var cookieValue = null;
if (document.cookie && document.cookie != '') {
var cookies = document.cookie.split(';');
for (var i = 0; i < cookies.length; i++) {
var cookie = jQuery.trim(cookies[i]);
if (cookie.substring(0, name.length + 1) == (name + '=')) {
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
}
}
}
return cookieValue;
}
};
/*@jquery.1602.grid.js*/
(function($){
$.fn.gridInit=function(constructor,op){
var home = parseInt(this.attr('iuid'));
if(!home){
home = $.grid1602.hash.length;
this.attr('iuid',home);
}
if(typeof globals.data[home] == 'undefined') globals.data[home] = {};
var ini = globals.data[home];
var sb = ini.sortby; sb = sb?sb:'id';
var sd = ini.sortdir; sd = sd?sd:0;
var h = {
jqObject: this,
items: [],
itemConst: function(d){this.shortdata=d},
gridSettings: {
itemsOnPage: 15,
quickSearchField: false,
columns: {},
page: 0,
sortBy: sb,
sortDir: sd,
pagesDeltaCount: 3,
datasource: null,
loadOnInit: true,
on_load_complete: null,
on_footer_calc: null,
checkSupportEnabled: ini.cse?true:false,
pagingSupportEnabled: true,
sortSupportEnabled: true,
remotePaging: false,
cookieEnabled: false,
localScroll: ini.ls?true:false,
hidePager: false,
hideFooter: false,
showEmptyCells: true,
emptyMessage: 'Нет элементов для представления в данном виде',
showRefreshButton: false,
selectFirst: true
},
countChecked: 0,
totalCount: 0,
home: home
};
if(typeof constructor == 'function')h.itemConst = constructor;
if(typeof constructor == 'object')op = constructor;
h.gridSettings = $.extend(h.gridSettings,op);
for(var i in h.gridSettings.columns){
if(typeof h.gridSettings.columns[i] == 'string')
h.gridSettings.columns[i] = {
visible: true,
caption: h.gridSettings.columns[i]
}
}
var cook = ini.visible;
if(cook && cook!=''){
cook = cook.split(',');
for(var i in h.gridSettings.columns)h.gridSettings.columns[i].visible = false;
for(var i in cook){
if(h.gridSettings.columns[cook[i]])
h.gridSettings.columns[cook[i]].visible = true;
}
}
if(!$.grid1602.hash[home]){
$.grid1602.hash[home] = h;
if(h.gridSettings.datasource && h.gridSettings.loadOnInit){
this.gridLoad();
}else{
}
}else{
this.gridLocate(h.itemId);
}
return this;
};
$.fn.gridPage=function(k){
var h = this.getHash();
if(!h){
alert('ads');
return this;
}
if(k!=0 && (k<0 || (k)*h.gridSettings.itemsOnPage>=h.totalCount)){
return this;
}
h.gridSettings.page = k;
$.grid1602.render(h.jqObject);
return this;
};
$.fn.gridLoad=function(ds,clear,callback){
var h = this.getHash();
if(!h){
console.log(this);
console.log(this.gridHash());
alert('Error! Press F5.');
return false;
}
var ath = this;
if(typeof ds == 'function'){
callback = ds;
clear = true;
ds = h.gridSettings.datasource;
}else if(typeof ds == 'boolean'){
callback = clear;
clear = ds;
ds = h.gridSettings.datasource;
}else if(typeof ds == 'undefined'){
ds = h.gridSettings.datasource;
clear = true;
}
if(h.gridSettings)
h.gridSettings.datasource = ds;
else{
console.log(h);
alert('Error! Press F5.');
return false;
}
if(typeof clear=='undefined')	clear = false;
$.getJSON(ds+'&time='+escape(Date()),function(data){
if(data.errcode && data.errcode!=0)return false;
ath.gridAdd(data,clear);
if(typeof h.gridSettings.on_load_complete == 'function')
h.gridSettings.on_load_complete(h);
if(typeof callback == 'function')callback(h);
});
return this;
};
$.fn.gridLoadCurrent=function(id){
var h = this.getHash();
var ath = this;
if(typeof id == 'undefined')id = h.itemId;
t = '<td colspan="'+($('tr:eq(0) th',this).size())+'" style="background:eee;color:#555;font-weight:700;text-align:center;"><table><tr><td><img src="/vk/ok/css/tabs/loading.gif" /></td><td>пожалуйста, подождите, идет загрузка обновленных данных</td></tr></table></td>';
$('tr[@itemId='+id+']',this).html(t);
$.getJSON(h.gridSettings.datasource+'&id='+id,function(data){
delete h.items[id];
h.oneRecord = true;
ath.gridAdd(data);
h.oneRecord = false;
ath.gridLocate(id);
});
return this;
};
$.fn.gridSort=function(sb){
var h = this.getHash();
var home = h.home;
var ini = globals.data[home];
if(h.gridSettings.cookieEnabled){
ini.sortby = sb;;
ini.sortdir = (h.gridSettings.sortDir==0)?128:0;
}
if(h.gridSettings.remotePaging){
if(h.gridSettings.sortBy==sb){
h.gridSettings.sortDir = (h.gridSettings.sortDir==0)?128:0;
}else{
h.gridSettings.sortBy=sb;
h.gridSettings.sortDir = 0;
}
var col = h.gridSettings.columns[sb];
if(!col || !col.sortIndex || col.sortIndex==0){
alert('Невозможно отсортировать по выбранному столбцу');
return this;
}
var sortIndex = col.sortIndex + h.gridSettings.sortDir;
h.jqObject.gridLoad(h.gridSettings.datasource+'&locateid='+h.itemId+'&sort='+sortIndex+'&iop='+h.gridSettings.itemsOnPage,true);
}else{
if(h.gridSettings.sortBy==sb){
h.order.reverse();
$.grid1602.render(h.jqObject);
h.jqObject.gridLocate();
}else{
h.gridSettings.sortBy=sb;
h.jqObject.gridRefresh();
}
}
return h.jqObject;
};
$.fn.gridFilter=function(fn,p){
if(typeof fn != 'function') return this;
var h = this.getHash();
h.f = {
f:fn,
p:p
}
this.gridRefresh();
return this;
};
$.fn.gridManager=function(where){
$.grid1602.renderColumnManager(this,where);
return this;
};
$.fn.gridRefresh=function(sort){
var h = this.getHash();
if(h && h.f){
var gs = h.gridSettings;
var sf = gs.selectFirst;
if(sf&&h.itemId&&!h.f.f(h.items[h.itemId],h.f.p))h.itemId = 0;
for(var i in h.items){
h.items[i].shortdata.hide1602 = !h.f.f(h.items[i],h.f.p);
}
}
if(typeof sort == 'undefined')sort = true;
//console.log(h.itemId);
if(sort) $.grid1602.sort(this);
this.gridLocate();
return this;
};
$.fn.gridLocate=function(itemId,ignore_remote_paging){
var mode = 'int';
var res = false;
var h = this.getHash();
var qsf = h.gridSettings.quickSearchField;
var qst = h.gridSettings.quickSearchType;
if(typeof ignore_remote_paging == 'undefined') ignore_remote_paging = false;
if(typeof itemId == 'undefined')itemId = h.itemId;
if(!isNaN(parseInt(itemId)))itemId = parseInt(itemId);
if(h.gridSettings.remotePaging && !ignore_remote_paging){
if(typeof itemId == 'string'){
var ath = this;
$.getJSON(h.gridSettings.datasource+'&locatestr='+itemId+'&time='+escape(Date()),function(data){
ath.gridAdd(data,true);
ath.gridLocate(itemId,true);
ath.gridPage(data.page);
});
}else{
this.gridPage(h.gridSettings.page);
}
return this;
}
if(typeof itemId == 'number'){
for(var i in h.order)if(h.order[i]==itemId){
res = i;
break;
}
}else if(qsf){
mode = 'str';
var query = itemId;
for(var i in h.order){
var str = h.items[h.order[i]].shortdata[qsf];
if(str && itemId){
if(!qst){
var fff = str.toLowerCase().match(itemId.toLowerCase());
}else{
if(str.toLowerCase().search(RegExp(itemId.toLowerCase(),'i')) == 0) var fff = '111';
}
if(fff){
res = i;
itemId = h.order[i];
break;
}
}
}
}
if(res){
h.itemId = itemId;
this.trigger('scrollcursor',[h.items[itemId]]);
var p = res/h.gridSettings.itemsOnPage;
p = ((Math.ceil(p)-p)==0)?p:Math.ceil(p)-1;
this.gridPage(p);
}else{
if(mode=='str' && typeof query == 'string' && query!= '')alert('Ничего не найдено!');
this.gridPage(0);
}
return this;
};
$.fn.gridAddObject=function(x,clear){
if(typeof x !='object')return this;
if(typeof clear =='undefined')clear = false;
var exist = true;
var h = 	this.getHash();
var rp = 	h.gridSettings.remotePaging;
if(h && clear){
delete h.items;
h.items = [];
delete h.order;
h.order = [];
h.gridSettings.page=0;
h.totalCount = 0;
}
if(typeof x.id=='undefined'){
for(var i=0;i<x.length;i++){
var id = parseInt(x[i].id);
if(isNaN(id)){
id = h.items.length;
x[i].id = id;
}
if(typeof h.items[id] !='undefined')h.totalCount++;
h.items[id] = new h.itemConst(x[i]);
}
}else{
if(typeof h.items[id] !='undefined')h.totalCount++;
var id = parseInt(x.id);
if(isNaN(id)){
id = h.items.length;
x[i].id = id;
}
h.items[id] = new h.itemConst(x);
}
if(typeof x.id=='undefined' && x.length>1){
this.gridRefresh();
}else{
this.gridRefresh(true);
}
return this;
};
$.fn.gridAdd=function(x,clear){
if(typeof x !='object')return this;
if(typeof clear =='undefined')clear = false;
if(x.type=='undefined' || x.type !='grid1602'){
alert('Нераспознанный ответ сервера (type "grid1602" expected, but type "'+x.type+'" found)');
return this;
}
var exist = true;
var h = 	this.getHash();
var rp = 	h.gridSettings.remotePaging;
if(h && clear){
delete h.items;
h.items = [];
delete h.order;
h.order = [];
h.gridSettings.page=0;
h.totalCount = 0;
}
if(rp){
if(!h.oneRecord){
h.totalCount=x.totalCount;
h.gridSettings.page = x.page;
}
}else{
h.totalCount+=x.data.length;
}
var gs = h.gridSettings;
var sf = gs.selectFirst;
for(var i=0;i<x.data.length;i++){
var item = {};
for(var index in x.columns)item[x.columns[index]] = x.data[i][index];
var id = parseInt(item.id);
for(var j in item)if(typeof item[j] == 'string')item[j] = unescape(item[j]);
if(id==NaN) return this;
if(exist)delete h.items[id];
h.items[id] = new h.itemConst(item);
//if(!h.itemid && sf && !cm_calc(gs,'nofocusable',[item]))h.itemId = id;
}
//console.log(h.itemId);
if(!h.gridSettings.pagingSupportEnabled){
h.gridSettings.page = 0;
h.gridSettings.__itemsOnPage = h.gridSettings.itemsOnPage;
h.gridSettings.itemsOnPage = h.totalCount;
}else{
if(h.gridSettings.__itemsOnPage)
h.gridSettings.itemsOnPage = h.gridSettings.__itemsOnPage;
}
if(x.data.length>1){
this.gridRefresh();
}else{
this.gridRefresh(true);
}
return this;
};
$.fn.gridFocused=function(){
var h = this.getHash();
return (h&&h.itemId)?h.items[h.itemId]:false;
};
$.fn.gridSelected=function(){
var h = this.getHash();
var x = [];
for(var i in h.items){
if(h.items[i].shortdata.checked)x.push(h.items[i]);
}
return x;
};
$.fn.getHash=function(){
var id = parseInt(this.attr('iuid'));
if(!id && this.parent().size()==0)return false;
if($.grid1602.hash[id])return $.grid1602.hash[id];
return this.parent().getHash();
};
$.fn.gridHash = $.fn.getHash;
$.grid1602={
hash:[
],
handleClick: function(td){
var el = $(td);
var row = el.parent();
var tbody = row.parent();
var grid = tbody.parent().parent().parent();
var h = grid.getHash();
if(!h){
alert('No hash!');
return;
}
$('.focused',tbody).removeClass('focused');
row.addClass('focused');
var id = row.attr('itemId');
h.itemId=id;
st = h.items[id];
if(st)
grid.trigger('scrollcursor',[st]);
else
alert(id);
},
handleAction: function(span,column){
span = $(span);
var el = span.parent();
var row = el.parent();
var grid = row.parent().parent().parent().parent();
var h = grid.getHash();
if(!h){alert('No hash!');return;};
var id = row.attr('itemId');
var act = h.gridSettings.columns[column].action;
if(h.items[id] && typeof act == 'function')act.apply(h.items[id].shortdata);
},
render: function(th,init){
if(typeof init == 'undefined') init = false;
var h = 	th.getHash();
var num = 	h.totalCount;
var gs =	h.gridSettings;
var sf = 	gs.selectFirst;
var page = 	gs.page;
var sse = 	gs.sortSupportEnabled;
var cols = 	gs.columns;
var cord =	gs.colOrder;
var rp = 	gs.remotePaging;
var ds = 	gs.datasource;
var showAll=gs.showAllColumns;
var home =	th.attr('id');
var buf2 =	'';
var item =	null;
var st =	'';
var iop =	gs.itemsOnPage;
var pdc =	gs.pagesDeltaCount;
var check = gs.checkSupportEnabled;
var ini = globals.data[home];
if($('.grid',th).size()==0 || init){
if(showAll && h.items[h.order[0]]){
item = h.items[h.order[0]].shortdata;
cols = {};
for(var i in item){
cols[i] = {caption:i,visible:true}
}
h.gridSettings.columns = cols;
}
if(!cord || cord.length==0){
cord = [];
for(var i in cols){
if(typeof cols[i].visible == 'undefined' && !cols[i].system)cols[i].visible = true;
if(cols[i].visible) cord.push(i);
}
h.gridSettings.colOrder = cord;
}
var tab = '';
if(!h.gridSettings.hidePager)tab+='<div class="pager"></div>';
var st = '';
tab+='<div '+st+'><table class="grid tab3d" cellspacing="0"><thead><tr>';
if(check)tab+='<th width="20"><input type="checkbox" id="'+home+'_check_all" /></th>';
var under = '';
var group = false;
var glen = 0;
for(var i in cord){
if(cols[cord[i]] && cols[cord[i]].visible){
if(cols[cord[i]].caption && cols[cord[i]].caption!=''){
cap = cols[cord[i]].caption;
}else{
cap = cord[i];
}
var cg = cols[cord[i]].group;
if(cg){
under+='<th name="'+cord[i]+'" '+(sse?'onclick="$(this).gridSort(\''+cord[i]+'\')"':'')+'>'+cap+'</th>';
if(group && cg!=group){
tab+='<th colspan="'+glen+'">'+group+'</th>';
glen = 1;
group = cg;
}else if(group && cg == group){
glen++;
}else if(!group){
group = cg;
glen = 1;
}
}else{
if(group){
tab+='<th colspan="'+glen+'">'+group+'</th>';
}
glen=0;
group = false;
tab+='<th name="'+cord[i]+'" rowspan="'+(cols[cord[i]].group?1:2)+'" '+(sse?'onclick="$(this).gridSort(\''+cord[i]+'\')"':'')+'>'+cap+'</th>';
}
}
}
if(under!='')under = '<tr>'+under+'</tr>';
tab+=(group&&glen?'<th colspan="'+glen+'">'+group+'</th>':'')+'</tr>'+under+'</thead><tbody></tbody></table></div>';
if(!h.gridSettings.hideFooter)tab+='<div class="footer"></div>';
th.html(tab);
}
if(!h.gridSettings.hidePager){
var buf = [];
var col = h.gridSettings.columns[h.gridSettings.sortBy];
var sortIndex = 0;
if(col)sortIndex = col.sortIndex + h.gridSettings.sortDir;
for(var i=Math.max(0,page-pdc);i*iop<Math.min(num,page*iop+(pdc+1)*iop);i++){
if(i==page)
buf.push('<span style="color:red;border:1px solid #F00">&nbsp;'+(i+1)+'&nbsp;</span>');
else{
if(rp){
buf.push('<span class="likealink" onclick="$(this).gridLoad(\''+ds+'&page='+i+'&sort='+sortIndex+'&iop='+iop+'&time='+escape(Date())+'\',true);">'+(i+1)+'</span>');
}else{
buf.push('<span class="likealink" onclick="$(this).gridPage('+i+');">'+(i+1)+'</span>');
}
}
}
buf = buf.join(' | ');
if((page+pdc+1)*iop<num){
if(rp){
buf+=(((page+pdc+2)*iop<num)?' ... ':' | ')+'<span class="likealink" onclick="$(this).gridLoad(\''+ds+'&page='+(Math.ceil(num/iop)-1)+'&iop='+iop+'&sort='+sortIndex+'&time='+escape(Date())+'\',true);">'+(Math.ceil(num/iop))+'</span>';
}else{
buf+=(((page+pdc+2)*iop<num)?' ... ':' | ')+'<span class="likealink" onclick="$(this).gridPage('+(Math.ceil(num/iop)-1)+');">'+(Math.ceil(num/iop))+'</span>';
}
}
if((page-pdc)>0){
if(rp){
buf='<span class="likealink" onclick="$(this).gridLoad(\''+ds+'&page=0&iop='+iop+'&sort='+sortIndex+'&time='+escape(Date())+'\',true);">1</span>'+(((page-pdc)>1)?' ... ':' | ')+buf;
}else{
buf='<span class="likealink" onclick="$(this).gridPage(0);">1</span>'+(((page-pdc)>1)?' ... ':' | ')+buf;
}
}
if(rp){
var legend = 'Показаны записи с '+(page*iop+1)+' по '+(Math.min((page+1)*iop,num))+' из '+num+
' <span class="likealink" onclick="$(this).gridLoad(\''+ds+'&page='+(page-1)+'&iop='+iop+'&sort='+sortIndex+'&time='+escape(Date())+'\',true);">'+
'&lt;&lt; пред.'+'</span> ||| '+
'<span class="likealink" onclick="$(this).gridLoad(\''+ds+'&page='+(page+1)+'&iop='+iop+'&sort='+sortIndex+'&time='+escape(Date())+'\',true);">'+
'след. &gt;&gt;'+
'</span><br />Страницы: ';
}else{
var legend = 'Показаны записи с '+(page*iop+1)+' по '+(Math.min((page+1)*iop,num))+' из '+num+
' <span class="likealink" onclick="$(this).gridPage('+(page-1)+');">'+
'&lt;&lt; пред.'+'</span> ||| '+
'<span class="likealink" onclick="$(this).gridPage('+(page+1)+');">'+
'след. &gt;&gt;'+
'</span><br />Страницы: ';
}
var result = i>1? legend+buf : '';
if(h.gridSettings.showRefreshButton){
result = '<table><tr><td><span class="likealink" onclick="$(this.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode).'+(h.gridSettings.datasource?'gridLoad()':'gridRefresh()')+';">'+cm_img('arrow_refresh','Обновить')+'</span></td><td>'+result+'</td></tr></table>';
}
$('.pager',th).html(result);
}
if(rp)
var i=0;
else
var i=page*iop;
var m = '';
for(var j=0;j<iop;j++){
if(typeof h.order == 'undefined' || !h.order[i+j])break;
if(!h.items[h.order[i+j]])continue;
item = h.items[h.order[i+j]].shortdata;
if(sf && !h.itemId && !cm_calc(gs,'nofocusable',[item]))h.itemId = item.id;
if(check){
buf2 = '<td nofocus="true" width="20" align="center"><input type="checkbox" class="grid1602_checkbox" '+(item.checked?'checked':'')+' /></td>';
}else
buf2 = '';
for(var k in cord){
var clm = cols[cord[k]];
if(clm && clm.visible){
var cv = clm.calc?clm.calc(item[cord[k]],item):item[cord[k]];
if(h.gridSettings.showEmptyCells && (typeof cv == 'undefined' || (typeof cv == 'string' && cv.replace(/ /,'') == '')))cv='&nbsp;';
if(
clm.action
&&
(
typeof clm.action_allowed !='function' ||
clm.action_allowed.apply(item)
)
){
var do_action =
'&nbsp;<span style="color:blue;cursor:pointer;font-size:12px;" \
onclick="$.grid1602.handleAction(this,\''+cord[k]+'\');">'+
cv+
'</span>';
if((/^ .* $/).test(clm.action_icon)){
cv = '<center>'+do_action+'</center>';
}else if((/^.* $/).test(clm.action_icon)){
cv = do_action+' '+cv;
}else{
cv= do_action;
}
}
if(cm_calc(gs,'nofocusable',[item])){
buf2+='<td>'+cv+'</td>';
}else{
buf2+='<td onclick="$.grid1602.handleClick(this);">'+cv+'</td>';
}
}
}
var st='';
if(typeof h.gridSettings.calculateRowStyle=='function'){
try{
st = h.gridSettings.calculateRowStyle(item);
}catch(e){
alert('Error in calc style: '+e);
}
if(st) st = ' style="'+st+'"';
}
if(item.id==h.itemId)
m+='<tr itemId="'+item.id+'" class="focused"'+st+'>'+buf2+'</tr>';
else
m+='<tr itemId="'+item.id+'"'+st+'>'+buf2+'</tr>';
}
if(m==''){
m = '<tr><td nofocus="true" align="center" colspan="'+(h.gridSettings.checkSupportEnabled?cord.length+1:cord.length)+'" style="padding:50px;color:#aaa;cursor:default;">'+h.gridSettings.emptyMessage+'</td></tr>';
}
$('.grid tbody',th).html(m);
if(typeof h.gridSettings.on_footer_calc == 'function' && !h.gridSettings.hideFooter){
$('.footer',th).html(h.gridSettings.on_footer_calc(h));
}
if(check){
$('.grid1602_checkbox',th).click(function(){
$(this).attr('disabled',true);
var ch = $(this).attr('checked')?true:false;
var id = parseInt($(this).parent().parent().attr('itemId'));
if(isNaN(id))$(this).attr('checked',false);
h.items[id].shortdata.checked = ch;
if(ch)h.countChecked++; else h.countChecked--;
$('#'+home+'_check_all',th).attr('checked',h.countChecked==h.totalCount);
$(this).attr('disabled',false);
});
$('#'+home+'_check_all',th).click(function(){
$(this).attr('disabled',true);
var checkedAll = $(this).attr('checked')?true:false;
if(checkedAll){
h.countChecked = h.totalCount;
}else{
h.countChecked = 0;
}
$('.grid1602_checkbox',th).attr('checked',checkedAll);
for(var i in h.items)if(!h.items[i].shortdata.hide1602)h.items[i].shortdata.checked = checkedAll;
$(this).attr('disabled',false)
});
}
},
renderColumnManager: function(th,where){
var h = th.getHash();
var cols = h.gridSettings.columns;
var home = th.attr('iuid');
var t = '';
for(var i in cols){
if(cols[i].system) continue;
t+='<input type="checkbox" name="'+i+'" id="'+home+'_'+i+'" '+(cols[i].visible?'checked':'')+' />'+
'<label for="'+home+'_'+i+'">'+((cols[i].caption&&cols[i].caption!='')?cols[i].caption:i)+'</label><br />';
}
t+='Количество записей на страницу <input value="'+(h.gridSettings.itemsOnPage)+'" id="'+home+'_iop"  /><br />';
t+='<input type="checkbox" id="'+home+'_localScroll" '+(h.gridSettings.localScroll?'checked':'')+' />'+
'<label for="'+home+'_localScroll">Внутренний скроллинг таблицы</label><br />';
t+='<input type="checkbox" id="'+home+'_checkSupportEnabled" '+(h.gridSettings.checkSupportEnabled?'checked':'')+' />'+
'<label for="'+home+'_checkSupportEnabled">Показывать чекбоксы</label><br />';
t+='<input type="button" value="Применить" onclick="$.grid1602.saveColumnsVisibility(\''+home+'\',\''+where+'\');" />';
$('#'+where).html(t);
},
saveColumnsVisibility: function(what,where){
var h = $('#'+what).getHash();
var ini = globals.data[h.home];
var t = [];
$('#'+where+' input').each(function(i,elem){
var n = $(elem).attr('name');
var v = $(elem).attr('checked');
if(h.gridSettings.columns[n])h.gridSettings.columns[n].visible = !!v;
if(v)t.push(n);
});
h.gridSettings.colOrder = [];
ini.visible = (t.length==0)?'':t.join(',');
h.gridSettings.itemsOnPage = $('#'+what+'_iop').val();
if(h.gridSettings.itemsOnPage>50)h.gridSettings.itemsOnPage = 50;
ini.iop = h.gridSettings.itemsOnPage;
h.gridSettings.localScroll = $('#'+what+'_localScroll').attr('checked');
ini.ls = h.gridSettings.localScroll;
h.gridSettings.checkSupportEnabled = $('#'+what+'_checkSupportEnabled').attr('checked');
ini.cse = h.gridSettings.checkSupportEnabled;
if(t.length>0){
for(var i in h.gridSettings.columns)h.gridSettings.columns[i].visible = false;
for(var i in t){
if(h.gridSettings.columns[t[i]])
h.gridSettings.columns[t[i]].visible = true;
}
}
$.grid1602.render($('#'+what),true);
},
sort: function(th){
h = th.getHash();
var sb = h.gridSettings.sortBy;
var sd = h.gridSettings.sortDir;
h.order = [];
for(var i in h.items)
if(!h.items[i].shortdata['hide1602'])
h.order.push({id:i,s:h.items[i].shortdata[sb]});
h.order.sort(function(x,y){
if(x.s>y.s)return 1;
if(x.s==y.s && h.items[x.id] && h.items[x.id].fio){
var f1 = h.items[x.id].fio;
var f2 = h.items[y.id].fio;
if(f1>f2)return 1;
if(f1==f2)return 0;
}
return -1;
});
for(var i in h.order)h.order[i] = h.order[i].id;
if(sd>127)h.order.reverse();
if(!h.gridSettings.remotePaging)h.totalCount = h.order.length;
}
}
})(jQuery);