// IE 5.0 function.call
if (!Function.prototype.call) {
	Function.prototype.call = function() {
		var a = arguments, t = [], l = a.length, i = 1;
		for (; i < l; i++) t[i - 1] = 'a['+ i +']';

		a[0].__tmpCall__ = this;
		t = new Function('a', 'return a[0].__tmpCall__('+ t.join() +')')(a);
		delete a[0].__tmpCall__;

		return t;
	}
}

function extend(targ, obj) {
	for (var i in obj) targ[i] = obj[i];
	return targ;
}

// Object to Array
function array(a) {
	var r = [], i = 0, al = a.length;

	try { r = r.slice.call(a, 0); }
	catch (e) { for (; i < al; i++) r[i] = a[i]; }

	return r;
}

function assignID(object) {
	// assign a unique id
	if (!object.__guid) object.__guid = assignID.$id++;
	return object.__guid;
}
assignID.$id = 1;

// bind object to method
function bind(method, context) {
	var bound = function() {
		return method.apply(context, arguments);
	};
	bound.cloneID = assignID(method);
	return bound;
}

// Dom manipulations
function dom(elem, name) {
	return !elem ? document : name
		? array(dom(elem).getElementsByTagName(name))
		: elem.constructor == String
			? dom().getElementById(elem)
			: elem;
}
extend(dom, {
	create: function(html) {
		var d = dom().createElement('div'), res;
		d.innerHTML = html;
		res = d.firstChild;
		d = null;
		return res;
	},

	before: function(elem, before) {
		before.parentNode.insertBefore(elem, before || null);
	},

	// get last of nodes with name
	last: function(elem, name) {
		var elems = dom(name ? elem : null).getElementsByTagName(name || elem);
		return elems[elems.length - 1];
	},
	
	addClass: function(elem, klass) {
		if (!this.hasClass(elem, klass)) {
			elem.className += (elem.className ? " " : "") + klass;
			return klass;
		}
	},

	hasClass: function(elem, klass) {
		var r = new RegExp("(^|\\s)" + klass + "(\\s|$)");
		return r.test(elem.className);
	},

	removeClass: function(elem, klass) {
		var r = new RegExp("(^|\\s)" + klass + "(\\s|$)");
		elem.className = elem.className.replace(r, "$2");
		return klass;
	},

	index: function(node) {
		var index = node.cellIndex, s = node;
		if (!index) while (node = node.previousSibling) if (node.nodeType == 1) index++;
		return index;
	},

	getByClass: function(klass, parent, tag) {
		var i = 0, parent = parent || document, tag = (tag || '*').toUpperCase(), result = [];
		if ((parent.getElementsByClassName) && (result = parent.getElementsByClassName(klass)) && tag != '*') { // FF 3, ... ?
			result = Array.filter(result, function(elem) { return elem.nodeName == tag });
		} else if (document.evaluate) { // FF <= 2, Opera, Safari
			var xpath = document.evaluate(".//" + tag + "[contains(concat(' ', @class, ' '), ' " + klass + " ')]", parent, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
			for (; (e = xpath.snapshotItem(i)); i++) result[result.length] = e;
		} else { // IE
			var regxp = new RegExp('(^|\\s)' + klass + '(\\s|$)');
			var elems = tag == '*' ? parent.all || dom(parent, tag) : dom(parent, tag);
			for (; (e = elems[i]); ++i) if (regxp.test(e.className)) result[result.length] = e;
		}
		return result;
	},

	// event module
	event: {
		add: function(elem, type, handl) {
			if (!handl.$$guid) handl.$$guid = this.guid++;
			if (!elem.events) elem.events = {};

			var handlers = elem.events[type];
			if (!handlers) {
				handlers = elem.events[type] = {};
				if (elem["on" + type])
					handlers[0] = elem["on" + type];
			}

			handlers[handl.$$guid] = handl;
			elem["on" + type] = this.handle;
		},

		guid: 1,

		remove: function(elem, type, handl) {
			if (elem.events && elem.events[type])
				delete elem.events[type][handl.$$guid];
		},

		handle: function(e) {
			e = e || window.event;

			if (!e.target && e.srcElement)
				e.target = e.srcElement;

			if (!e.relatedTarget && e.toElement)
				e.relatedTarget = e.toElement == e.target
					? e.fromElement : e.toElement;

			if (!e.preventDefault)
				e.preventDefault = function() {
					this.returnValue = false;
				};

			if (!e.stopPropagation)
				e.stopPropagation = function() {
					this.cancelBubble = true;
				};

			var handlers = this.events[e.type];
			var result = true;
			for (var i in handlers) {
				if (bind(handlers[i], this)(e) === false) {
					e.preventDefault();
					e.stopPropagation();
					result = false;
				}
			}
		},
		// dom.event.hover(div, function(e){ ... mouse over element code ... }, function{ ... mouse out element code .... });
		hover: function(elem, over, out) {
			dom.event.add(elem, 'mouseover', function(e){
				if (!this.__hovered) {
					this.__hovered = true;
					return over.call(this, e);
				}
			});

			dom.event.add(elem, 'mouseout', function(e){
				var p = e.relatedTarget;
				while (p && p != document && p != this) p = p.parentNode;
				if (p != this) {
					this.__hovered = false;
					return out.call(this, e);
				}
			});
		}
	}
});


// START CLOUSURE
new function() {
	// forse IE background cache
	dom.event.add(window, 'load', function(){
		if (!window.opera) try { document.execCommand("BackgroundImageCache", false, true); } catch(e) {};
	});

	// Additional string methods
	var re = /([\/()[\]{}|*+-.,^$?\\])/g;
	extend(String.prototype, {
		stripTags: function(){
			return this.replace(/<[^>]+>/g, '');
		},
		rescape: function() {
			return this.replace(re, "\\$1");
		},
		html: function() {
			var div = document.createElement('div');
			div.innerHTML = this;
			var res = div.firstChild;
			div = null;
			return res;
		}
	});
};
// END CLOUSURE

var Cookie = {
	set: function(name, value, options) {
		options = options || {};
		var a = [name +'='+ value];
		if (options.expires)
			a[a.length] = 'expires='+ new Date(new Date().getTime() + options.expires * 24 * 60 * 60 * 1000).toUTCString();
		if (options.path)
			a[a.length] = 'path='+ options.path;
		if (options.domain)
			a[a.length] = 'domain='+ options.domain;
		if (options.secure)
			a[a.length] = 'secure'
		document.cookie = a.join('; ');
	},
	rem: function(name, options) {
		options = options || {};
		options.expires = -1;
		this.set(name, '', options);
	},
	get: function(name) {
		var res = String(document.cookie).match(new RegExp('\\b'+ name.rescape() +'=([^;]*)'));
		return res && res[1] || null;
	}
};

// collapse / expand witch cookies
function Expandable(node, collapsed) {
//	var collapsed = Cookie.get(node.className.split(' ')[0] +'_Expandable');
	if (collapsed && !dom.hasClass(node, 'collapsed'))
		dom.addClass(node, 'collapsed');
	else if (!collapsed && !dom.hasClass(node, 'expanded'))
		dom.addClass(node, 'expanded');
}
Expandable.toggle = function(node, wf, valname) {
	var name = node.className.split(' ')[0] +'_Expandable';
	var collapsed = dom.hasClass(node, 'collapsed');
	if (collapsed) {
		dom.removeClass(node, 'collapsed');
		dom.addClass(node, 'expanded');
		$.post('dowfsim.aspx',{WFName: 'SetWFValue',Workflow: wf, WFValueName: valname, WFValue: 1}) // ishsipletes

	} else {
		dom.removeClass(node, 'expanded');
		dom.addClass(node, 'collapsed');
		$.post('dowfsim.aspx',{WFName: 'SetWFValue',Workflow: wf, WFValueName: valname, WFValue: 0}) // susitraukes
	}
};

function Sortable(node, settings) {
	var type = { 'TABLE':'table', 'UL':'list' }[node.nodeName];
	return type && Sortable[type] && Sortable[type](node, extend({zebra:['td1', 'td2']}, settings));
}
extend(Sortable, {
	prefix: 'sort-',
	arraySort: function(a, b) {
		if (a instanceof Array && b instanceof Array) {
			for (var i = 0, res = 0; i < a.length && i < b.length; i++)
				if (res = Sortable.arraySort(a[i], b[i]))
					break;
			return res;
		} else return a > b ? 1 : a < b ? -1 : 0;
	},
	table: function(table, settings) {
		settings = settings || {};
		var rows = array(table.tBodies[0].rows), head;
		if (table.tHead) head = dom(table.tHead, 'th');
		else {
			head = dom(rows[0], 'th');
			rows.shift();
		}
		if (!rows[0]) return;

		var zebra = settings.zebra;
		if (zebra) {
			for (var i = 0, a = []; i < zebra.length; i++)
				if (zebra[i]) a[a.length] = zebra[i];
			var zebraClean = new RegExp("(^|\\s)(" + a.join('|') + ")(\\s|$)", "g");
		}

		var p = this.prefix,
			r = new RegExp(p +'([^ ]+)'), d = new RegExp('desc'),
			rules = Sortable.rules,
			body = rows[0].parentNode,
			type, h, i = 0, last, lasc,
			sort = function(node, type, desc) {
				lasc = lasc == node ? null : node;
				var asc = !!lasc;
				if (desc) asc = !asc;
				var c = asc ? ['asc', 'desc'] : ['desc', 'asc'];
				dom.addClass(node, p + c[0]);
				dom.removeClass(node, p + c[1]);
				if (last && node != last) {
					dom.removeClass(last, p + c[0]);
					dom.removeClass(last, p + c[1]);
				}
				if (!node.sorted) {
					var index = dom.index(node);
					for (var i = 0, a = []; i < rows.length; i++) {
						var row = rows[i], cell = row.cells[index];
						// hack for ListNewPayments
						if (row.cells[0].rowSpan == 2) {
							row = [row, rows[++i]];
						} else row = [row];
						a[a.length] = [rules[type](cell), row];
					}
					node.sorted = { asc: a.sort(Sortable.arraySort), desc: a.slice(0).reverse() };
				}

				var sort = node.sorted[(asc ? 'asc' : 'desc')];
				for (var i = 0; i < sort.length; i++) {
					if (zebra) {
						var group = sort[i][1];
						for (var k = 0; k < group.length; k++) {
							group[k].className = group[k].className.replace(zebraClean, '');
							dom.addClass(group[k], zebra[i % zebra.length]);
							body.appendChild(group[k]);
						}
					}
				}

				last = node;
			};

		var sortFirst;
		for (; i < head.length && (h = head[i]); i++) {
			var c = h.className;
			type = (c.match(r) || {})[1];
			if (rules[type]) {
				dom.addClass(h, p +'enabled');
				new function(type) {
					var desc = dom.hasClass(h, 'desc');
					dom.event.add(h, 'mousedown', function(e){ e.preventDefault(); });
					dom.event.add(h, 'selectstart', function(e){ e.preventDefault(); });
					dom.event.add(h, 'mouseup', function(e){ e.preventDefault(); sort(this, type, desc); });
					if (!sortFirst || dom.hasClass(h, 'sort-first'))
						sortFirst = [h, type, desc];
				}(type);
			}
		}
		if (sortFirst) sort(sortFirst[0], sortFirst[1], sortFirst[2]);
		sortFirst = null;
	},
	rules: {
		string: function(node) {
			return node.innerHTML.stripTags();
		},
		number: function(node) {
			return parseFloat(node.innerHTML.stripTags().replace(/[^\d\.]+/g, '')) || 0;
		},
		curency: function(node) {
			return [node.innerHTML.stripTags(), this.number(node.parentNode.cells[dom.index(node) - 1])];
		},
		type: function(node) {
			var div = node.getElementsByTagName('div');
			if (div && div[0]) {
				var c = parseColor(div[0].style.backgroundColor);
				if (c)
					return String(1000000000 + c[0] * 1000000 + c[1] * 1000 + c[2]).substr(1);
			}
			return '000000000';
		}
	}
});

function parseColor(color) {
  var m = parseColor.reg.exec(color), n = parseColor.num;
  return m && (m[1] && [n(m[1], 0), n(m[2], 0), n(m[3], 0)] || m[4] && [n(m[4], 1), n(m[5], 1), n(m[6], 1)]);
}
parseColor.num = function(str, hex) {
  return parseInt(hex ? ('0x'+ (str.length > 1 ? str : str + str)) : (/\%/.test(str) ? parseFloat(str) * 255 / 100 : str));
}
parseColor.reg = /^\s*(?:rgb\s*\(\s*([0-9]{1,3}|[0-9\.]+\%)\s*,\s*([0-9]{1,3}|[0-9\.]+\%)\s*,\s*([0-9]{1,3}|[0-9\.]+\%)\s*\)|#([a-f0-9]|[a-f0-9]{2})([a-f0-9]|[a-f0-9]{2})([a-f0-9]|[a-f0-9]{2}))\s*$/i;


var InfoCurr = null, InfoInit = false;
function FormInfo(infobox){
	if (!infobox) infobox = dom.last('script').parentNode;
	var trig;

	setTimeout(function(){
	  var wrap;
    if (document.URL.match("eng") == null && document.URL.match("jur") == null)
		  wrap = '<span class="infobox-trigger"><img src="i/info.gif" /></span>'.html();
    else  
		  wrap = '<span class="infobox-trigger"><img src="../i/info.gif" /></span>'.html();
		 
		infobox.parentNode.insertBefore(wrap, infobox);
		wrap.appendChild(infobox);
		trig = wrap.firstChild;
		infobox.style.display = 'none';
		dom.event.add(trig, 'mouseup', function(e){
			if (InfoCurr != infobox) {
				if (InfoCurr) {
					InfoCurr.style.display = 'none';
					InfoCurr.parentNode.style.zIndex = '';
					InfoCurr.parentNode.style.position = 'static';
				}
				InfoCurr = infobox;
				InfoCurr.style.display = '';
				InfoCurr.parentNode.style.zIndex = '10000';
				InfoCurr.parentNode.style.position = 'relative';
				e.stopPropagation();
				if (window.DatePicker) DatePicker.close();
			}
		});
		dom.event.add(infobox, 'mouseup', function(e){
			e.stopPropagation();
			if (window.DatePicker) DatePicker.close();
		});
		if (!InfoInit) {
			InfoInit = true;
			dom.event.add(dom(), 'mouseup', function(){
				if (InfoCurr) {
					InfoCurr.style.display = 'none';
					InfoCurr.parentNode.style.zIndex = '';
					InfoCurr.parentNode.style.position = 'static';
					InfoCurr = null;
				}
			});
		}
	}, 100);
}

function setTips(elems, texts) {
	var timeout, last;
	for (var i = 0; i < elems.length; i++) {
		elems[i].tipText = dom(texts[i]);
		elems[i].tipText.style.display = 'none';
		dom.event.hover(elems[i], function(e){
			last = this.tipText;
			if (last) {
				last.style.marginLeft = Math.floor(this.offsetLeft) +'px';
				last.style.backgroundPosition = Math.floor(this.offsetWidth / 2) +'px 0';
				last.style.display = '';
			}
		}, function(e){
			if (last) last.style.display = 'none';
			last = null;
		});
	}
}

dom.addClass(dom(dom(), 'html')[0], 'js');
dom.event.add(window, 'load', function(){
	setTimeout(function(){
		dom.removeClass(dom(dom(), 'html')[0], 'js');
	}, 100)
});

dom.event.add(window, 'load', function(){
  var mainas = document.forma;
  if (mainas
    && mainas.doc_date
    && mainas.schd_start
    && mainas.schd_stop) {
      var varyk_old = window.varyk;
      var sign_old = window.sign;
      function checkDates() {
        var result = true;
        if (mainas.doc_date.value) {
          var minDate = parseInt(mainas.doc_date.value.replace(/\D+/g, ''));
          var start = parseInt(mainas.schd_start.value.replace(/\D+/g, ''));
          var stop = parseInt(mainas.schd_stop.value.replace(/\D+/g, ''));
          result = start <= stop && minDate <= start;
        }
        if (!result) {
          alert(window.incorrenctDates);
          return false;
        }
        return true;
      }

      window.varyk = function(){ return checkDates() && varyk_old(); };
      window.sign = function(){ return checkDates() && sign_old(); };
    }
});
