//	Набор функций для унифицированной системы обмена ссылками
//	Пример использования см. в Templates/FondMigrate/edit1_pred_10.tmpl, Templates/Mat/mat_search.tmpl и Templates/Mat/mat_search_list.tmpl
function ures_to_clipboard (w) {
//	копирование отобранных объектов из результатов поиска в буфер обмена
//	обязательные свойства: ures_class, ures_title. Могут быть определены имена дополнительных свойств параметрами вызова ures_to_clipboard
	var clb={}; var i; var a; var b; var d;
	var list=w.document.all.smark
	if (!list.length) list=[list]
	for (d=0; d<list.length; d++) {
		var b=list[d]
		if (b.checked) {
			if (!clb[b.ures_class]) clb[b.ures_class]=new Array()
			var title=w.document.all['ures_title_'+b.value].innerHTML.replace("'","\'")
			var numargs = ures_to_clipboard.arguments.length
			var s=''
			if (numargs>1) {
				for (var i=1; i<numargs; i++) {
				if (b[ures_to_clipboard.arguments[i]]) 
					s+=','+ures_to_clipboard.arguments[i]+":'"+b[ures_to_clipboard.arguments[i]]+"'"
				}
			}
			clb[b.ures_class].push("{id:"+b.value+",title:'"+title+"'"+s+"}")
		}
	}
	if (clb.length<1) {
		alert("Нет отмеченных объектов для копирования")
		return
	}
	var a=new Array()
	for ( d in clb ) {
		a.push(d+':['+clb[d].join(',')+']')
	}
	if (!window.clipboardData.setData('text','{'+a.join(',')+'};')) {
				alert('Не удалось записать текст в буфер обмена')
	}
}
//	Операции с таблицами
function f06_insertRow(tb) {
	tb=f06_findTbody(tb)
	var nr=tb.lastChild.cloneNode(true)
	tb.insertBefore(nr,tb.lastChild)
	nr.style.display=''
	return nr
}
function f06_shiftRow(tr,n) {
// сдвиг строки таблицы на n строк (вверх или вниз, в зависимости от знака)
	if (!n) return 0
	while (tr && tr.tagName !='TR') tr=tr.parentElement
	var tbody=tr.parentElement
	var firstRowIndex=tbody.getElementsByTagName("TR")[0].rowIndex
	var target=tr.rowIndex+n-firstRowIndex
	var source=tr.rowIndex-firstRowIndex
	var last=tbody.lastChild.rowIndex-firstRowIndex
	if (target>=0 && target<last) {
		tbody.moveRow(source,target)
		return n
	}
	return 0
}
function f06_removeRow(td) {
	while (td && td.tagName !='TD') td=td.parentElement
	var f=td.firstChild
	if (f.tagName=='INPUT') f.value=1
	var tbody=td.parentElement.parentElement
	var firstRowIndex=tbody.getElementsByTagName("TR")[0].rowIndex
	td.parentElement.style.display='none'
	tbody.moveRow(td.parentElement.rowIndex-firstRowIndex,0)
}
function f06_findTbody(tb) {
	// tb - ref to Table, tBody, TR, TD or any TD.child. Returns tbody element
	if (tb.tagName=='TABLE') tb=tb.getElementsByTagName("TBODY")[0]
	else while (tb && tb.tagName !='TBODY') tb=tb.parentElement
	return tb
}
function f06_insertBuffer(tb,buf,doc_class) {
	tb=f06_findTbody(tb)
	var i; var j; var c=0;
NextRow:	for (i in buf) {
		var d=buf[i]	// массив конкретного класса документов
		for (var k in d) {
			if (tb.unique_key) {
				// проверка уникальности
				var rows=tb.getElementsByTagName("TR")
				for (var r=0; r<rows.length; r++) {
					var row=rows[r].all
					var uk=row[tb.unique_key]
					var dc=row['document_class']
					if ( uk && (f06_getElementValue(uk) == d[tb.unique_key]) && (!dc || (f06_getElementValue(dc)==doc_class)))	continue NextRow
				}
			}
		}
		if (tb.check_function && !tb.check_function(d,doc_class)) {continue NextRow} /* прикладная проверка (определяется в tbody) */
		var tr=f06_insertRow(tb)
		var el
		for (j in d) {
			el=tr.all[j]	// поиск элемента с ид-ром, соответствующим ключу
			if (el) f06_setElementValue(el,d[j])
		}
		if (doc_class) {
			el=tr.all['document_class']
			if (el) f06_setElementValue(el,doc_class)
		}
		c++
	}
	return c
}

// выделение (присвоение) значения элемента в зависимости от его типа
function f06_getElementValue(el) {
	return (el.tagName=='INPUT')?el.value:el.innerHTML
}
function f06_setElementValue(el,val) {
	if (el.tagName=='INPUT') {el.value=val} else {el.innerHTML=val}
}

function f06_insertUresData (tb,buf) {/* tb - target table, buf - string */
	var b=f06_parseClipBoard(buf)
	var numargs = f06_insertUresData.arguments.length
	var c=0
	if (numargs>2) {
		for (var i=2; i<numargs; i++) {
			if (b[f06_insertUresData.arguments[i]]) {
				c+=f06_insertBuffer(tb,b[f06_insertUresData.arguments[i]],f06_insertUresData.arguments[i])
			}
		}
	} else {
		for (var doc_class in b) {
			if (b[doc_class]) {
				c+=f06_insertBuffer(tb,b[doc_class],doc_class)
			}
		}
	}
	return c
}
function f06_alertNoData() {
	alert("В буфере нет данных, которые могут быть сюда добавлены")
}

function f06_parseClipBoard(buf) {
	if (!buf) {buf=window.clipboardData.getData('text')}
	if (!buf) {
		return {}
	}
	try {
		var b
		eval("b="+buf)
		return b
	} catch(e) {
//		alert("Ошибка в содержимом буфера "+b)
		return {}
	}
}

function f06_convertToClipBoard(d) {
//	преобразует структуру в текстовую строку для буфера обмена
	var a=new Array
	for (var i in d) {
		var p=new Array
		for (var j=0; j< d[i].length; j++) {
			var s=new Array
			for (var k in d[i][j]) {
				s.push(k+":'"+d[i][j][k]+"'")
			}
			p.push('{'+s.join(',')+'}')
		}
		a.push(i+':['+p.join(',')+']')
	}
	return '{'+a.join(',')+'}'
}
