﻿function Boot()
{
	var divs = document.getElementsByTagName("div");
	var div;
	for(var i=0; (div = divs[i]); i++)
		if(div.className)
			if(div.className.charAt(0) == "$")
				InitControl(div);
}
function InitControl(div)
{
	if(div.className == "$DataSheet")
		InitDataSheet(div);
}

Browser = new Object();
Browser.UA = navigator.userAgent;
Browser.AV = navigator.appVersion;
Browser.mac = Browser.AV.indexOf("Macintosh") == -1 ? false : true; 
Browser.win = Browser.AV.indexOf("Windows") == -1 ? false : true; 
Browser.opera = Browser.UA.indexOf("Opera") == -1 ? false : true; 
Browser.khtml = ((Browser.AV.indexOf("Konqueror") >= 0)||(Browser.AV.indexOf("Safari") >= 0)) ? true : false; 
Browser.safari = (Browser.AV.indexOf("Safari") >= 0) ? true : false; 
Browser.mozilla = ((Browser.UA.indexOf("Gecko") >= 0)&&(!Browser.khtml)) ? true : false; 
Browser.ie = ((document.all)&&(!Browser.opera)) ? true : false;
Browser.ie50 = Browser.ie && Browser.AV.indexOf("MSIE 5.0")>=0;
Browser.ie55 = Browser.ie && Browser.AV.indexOf("MSIE 5.5")>=0;
Browser.ie60 = Browser.ie && Browser.AV.indexOf("MSIE 6.0")>=0;

var Events = new Object();
Events.AddHandler = function(obj, type, fn)
{
	if(obj.tagName && obj.tagName.toLowerCase() == "a")
		obj.href = "javascript:void(0)";
	if(obj.addEventListener)
	{
		obj.addEventListener(type, fn, false);
		return true;
	}
	if(obj.attachEvent)
		return obj.attachEvent("on"+type, fn);
	return false;
}
Events.GetSender = function(e)
{
	if(!e)
		var e = window.event;
	if(e.srcElement)
		return e.srcElement;
	else if(e.currentTarget)
		return e.currentTarget;
	else
		return null;
}
//----
var $$Keys = {BackSpace:8,Tab:9,Enter:13,Esc:27,Space:32,PgUp:33,PgDown:34,End:35,Home:36,Left:37,Up:38,Right:39,Down:40,Del:46,
	F1:112,F2:113,F3:114,F4:115,F5:116,F6:117,F7:118,F8:119,F9:120,F10:121,F11:122,F12:123}
var a = [];
for(k in $$Keys)
	a.push({k:k, v:$$Keys[k]});
for(k in a)
	$$Keys[a[k].v] = a[k].k;

/**************************************************
*  DataSheet
***************************************************/
var EditedDataSheet;
function InitDataSheet(div)
{
	var table = div.getElementsByTagName("table")[0];
	var initializer = $(table.id + "_changes")
	var changes = initializer.value;
	if(changes.length == 0)
		return;
	eval("table.Changes=" + changes);
	initializer.value = GetDataSheetChangeLog(table);
}
function EditDataSheetCell(cell)
{
	// {className:[classname], width: [width offset], height: [height offset]}
	if(cell.edited)
		return false;
	EndEditDataSheetCell();
	var span = cell.childNodes[0];
	if(span.nodeName.toLowerCase() == "span")
	{
		var table = GetAncestor(cell, "table");
		EditedDataSheet = table;
		var config = GetConfig(table);
		cell.edited = true;
		table.editedCell = cell;
		var oldValue = span.innerHTML;
		var align = "left";
		cell.innerHTML = '<input type="text" autocomplete="off" class="' + config.className + '" style="text-align: ' + align + ';width: ' + (cell.clientWidth+config.width) + '; height: ' + (cell.clientHeight+config.height) + '" value="' + oldValue + '" />';
		cell.oldValue = oldValue;
		var editor = cell.childNodes[0];
		editor.focus();
		editor.select();
		if(Browser.ie)
		{
			editor.onkeydown = _editor_onKey;
		}
		else if(Browser.mozilla)
		{
			editor.selectionStart = 0;
			editor.selectionEnd = editor.textLength;
			editor.onkeypress = _editor_onKey;
		}
	}
}
function IsEditable(cell)
{
	return cell.childNodes[0].nodeName.toLowerCase() == "span";
}
function EndEditDataSheetCell()
{
	if(EditedDataSheet == null)
		return;
	var table = EditedDataSheet;
	var cell = table.editedCell;
	if(cell == null)
		return;
	cell.edited = false;
	table.editedCell = null;
	EditedDataSheet = null;
	var newValue = cell.childNodes[0].value;
	s = "<span title='" + newValue + "'>" + newValue + "</span>";
	cell.innerHTML = s;
	if(cell.oldValue == newValue)
		return;
	var logControl = $(table.id + "_changes");
	if(table.Changes == null)
		table.Changes = new Array();
	//-- log
	var row = cell.parentNode;
	var rows = row.parentNode.rows.length;
	var cells = row.cells.length;
	var cellIndex = cell.cellIndex;
	var rowIndex = row.sectionRowIndex;
	var index = rowIndex * cells + cellIndex;
	table.Changes[index] = newValue;
	logControl.value = GetDataSheetChangeLog(table);
}
function GetDataSheetChangeLog(table)
{
	var s = v = "";
	for(var key in table.Changes)
	{
		v = table.Changes[key].replace(/&/g, "&amp;").replace(/\</g, "&lt;").replace(/\>/g, "&gt;");
		s += '<c i="'+key+'">'+v+'</c>';
	}
	return s;
}
_editor_onKey = function(e)
{
	var hNode = Events.GetSender(e);
	e = (e||event);

	var cancel = validate = ifFullSelect = reset = endEdit = deselect = false;
	var dx = dy = 0;
	switch(e.keyCode)
	{
		case $$Keys.Tab:   dx=e.shiftKey?-1:1; cancel=true; break;
		case $$Keys.Enter: validate=true;cancel=true; endEdit=true; break;
		case $$Keys.Up:    dy=-1; break;
		case $$Keys.Down:  dy= 1; break;
		case $$Keys.Left:  dx=-1; ifFullSelect=true; break;
		case $$Keys.Right: dx= 1; ifFullSelect=true; break;
		case $$Keys.F2:    deselect=true; break;
		default: return;
	}

	//-- check fullselect
	var fullSelect = cursorAtStart = cursorAtEnd = false;
	if(ifFullSelect)
	{
		if(Browser.ie)
		{
			var r = document.selection.createRange();
			
			fullSelect = hNode.value == r.text;
			if(r.text == "")
			{
				cursorAtStart = !r.moveStart("character", -1);
				cursorAtEnd = !r.moveEnd("character", 1);
			}
		}
		else if(Browser.mozilla)
		{
			fullSelect = hNode.selectionEnd - hNode.selectionStart == hNode.textLength;
			cursorAtStart = hNode.selectionStart == hNode.selectionEnd && hNode.selectionStart == 0;
			cursorAtEnd = hNode.selectionStart == hNode.selectionEnd && hNode.selectionEnd == hNode.textLength;
		}
		if(!fullSelect)
			if(!((dx > 0 && cursorAtEnd) || (dx < 0 && cursorAtStart)))
				dx = 0;
	}

	//-- check validation
	validate = validate || dx || dy;

	//-- execution: validate, dx, dy
	if(validate)
	{
		//TODO: validation
		var cell = hNode.parentNode;
		var row = cell.parentNode;
		var rows = row.parentNode.rows.length;
		var cells = row.cells.length
		var cellIndex = cell.cellIndex;
		var rowIndex = row.sectionRowIndex;

		if(endEdit)
		{
			EndEditDataSheetCell();
		}
		else
		{
			do
			{	
				cell = null;
				cellIndex += dx;
				rowIndex += dy;
				if(cellIndex < 0)
				{
					cellIndex = cells-1;
					rowIndex--;
				}
				if(cellIndex >= cells)
				{
					cellIndex = 0;
					rowIndex++;
				}
				if(rowIndex >= 0 && rowIndex < rows)
				{
					row = row.parentNode.rows[rowIndex];
					cell = row.cells[cellIndex];
					if(IsEditable(cell))
						break;
				}
			}while(cell);
			if(cell)
				EditDataSheetCell(cell);
		}
	}
	if(deselect)
	{
		//TODO: szelekcio nincs + textbox vegere tenni a kurzort
	}
	if(cancel)
	{
		if(Browser.ie)
			event.returnValue = false;
		else if(Browser.mozilla)
			e.preventDefault();
	}

	return !cancel;
}
function GetConfig(hNode)
{
	var id = hNode.id + "_config";
	var src = $(id).value;
	var x;
	eval("x="+src);
	return x;
}
function GetAncestor(hNode, name)
{
	if(!hNode || !hNode.nodeName)
		return null;
	if(hNode.nodeName.toLowerCase() == name)
		return hNode;
	return GetAncestor(hNode.parentNode, name);
}
function $(id)
{
	return document.getElementById(id);
}

Events.AddHandler(window, "load", Boot);

/**************************************************
*  Postoláshoz tartozó függvények
***************************************************/
var bEnableSubmit = true;
function Submit(form)
{
	// Edit módban nem submitolódnak a linkek ezért az edit pageben definiálva van egy EditMode változó.
	
	var bEditMode;
	try
	{
		bEditMode = EditMode;
	}
	catch(e)
	{
		bEditMode = false;
	}
	
	if(!document.all)
	{
		window.onunload = null;
	}
	else
	{
		if(!bEnableSubmit)
		{
			return false;
		}
		bEnableSubmit = false;
	}
	for(var i=0; i<document.forms.length; i++)
	{	
		if(document.forms[i].id != form.id)
		{
			
			if (document.createElement)
			{
			
				var x;
				if (document.all)
				{
					try
					{
						x=document.createElement("<input type=hidden name='__SNPEPortletState_" + document.forms[i].id + "'>");
						x.value = document.forms[i].all["__SNPEPortletState_" + document.forms[i].id].value;
						form.appendChild(x);						
					}
					catch(e)
					{
					}
				}
				else
				{
					try
					{
						x=document.createElement("INPUT"); 
						x.type='hidden'; 
						x.name='__SNPEPortletState_' + document.forms[i].id;
						x.value=document.forms[i].elements["__SNPEPortletState_" + document.forms[i].id].value;
						form.appendChild(x);
					}
					catch(e)
					{}
				}
			}
		}
	}
	var y;
	
	try
	{
		if (document.all)
				{
				    
					try
					{
	                    y=document.createElement("<input type='hidden' name='__SNPEPortletPosition'>");
	                    y.value = y.pageYOffset || y.pageYOffset ||  document.documentElement.scrollTop || document.body.scrollTop;
		                form.appendChild(y);
	                   					
					}
					catch(e)
					{
					    
					}
				}
				else
				{
					
					try
					{
		                y = document.createElement("INPUT"); 
		                y.type='hidden'; 
		                y.name='__SNPEPortletPosition';
                	
		                y.value = y.pageYOffset || y.pageYOffset ||  document.documentElement.scrollTop || document.body.scrollTop;
		                form.appendChild(y);
					}
					catch(e)
					{}
				}

	}
	catch(e)
	{}
	
	return true;
}

function SubmitLink(formname, linkname)
{
	// Edit módban nem submitolódnak a linkek ezért az edit pageben definiálva van egy EditMode változó.
	
	
	var bEditMode;
	try
	{
		bEditMode = EditMode;
	}
	catch(e)
	{
		bEditMode = false;
	}
		
	
	if (!bEditMode)
	{
		var form = document.forms[formname];
		var x;
		if(bEnableSubmit)
		{
			if (document.all)
			{
				x = document.createElement("<input type=hidden name='__SNPEPortletSubmitLink'>");
				x.value = form.id + "_" + linkname;
			}
			else
			{
				x=document.createElement("INPUT"); 
				x.type='hidden'; 
				x.name='__SNPEPortletSubmitLink';
				x.value = form.id + "_" + linkname;
			}
			form.appendChild(x);
			Submit(form);
			bEnableSubmit = false;
		}
		form.submit();	
	}
}
var _yPos;
function ScrollTo()
{
	{
		window.scrollTo(0, _yPos);
		
		InitPage();
	}
}
function SetScrollPos(y)
{
	_yPos = y;
	if (Browser.ie) document.onreadystatechange = ScrollTo;
	else document.addEventListener("DOMContentLoaded", ScrollTo, false);
}
/**************************************************
*  Postoláshoz tartozó függvények vége
***************************************************/

/**************************************************
*  Modális ablak nyitásához tartozó függvények 
***************************************************/
var _content, _placeholderid, _title, _width, _height;
function openModalWindow()
{
	
	if(document.readyState == 'complete' || !document.all)
	{
		
		var form = document.getElementById(_placeholderid);
		var vRet = window.showModalDialog("ModalWindow.aspx?contentname=" + _content + "&placeholderid=" + _placeholderid,_title, "resizable:yes;scroll:no;dialogHeight:" + _height + "px;dialogWidth:" + _width + "px;");
		
		if(vRet != null)
		{
			form.all["__SNPEPortletState_" + _placeholderid].value = vRet;
		}
		else
		{	
			var cancelElem = document.createElement("<input type=hidden name='__SNPEPortletModalWindowCanceled'>");
			cancelElem.value = 'true';
			form.appendChild(cancelElem);
		}
		var x = document.createElement("<input type=hidden name='__SNPEPortletModalWindowClosed'>");
		x.value = 'true';
		form.appendChild(x);
		Submit(form);
		form.submit();
	}
}
function OpenModalWindow(content, placeholderid, title, width, height)
{

	if(document.all)
	{
		_content = content;
		_placeholderid = placeholderid;
		_width = width;
		_title = title;
		_height = height;
		document.onreadystatechange = openModalWindow;
	}
	else
	{
		var vRet = window.open("ModalWindow.aspx?contentname=" + content + "&placeholderid=" + placeholderid,title, "chrome,all,dialog=yes,resizable=yes,modal");
		
	}
}

function MozillaWinClose(placeholderid, notCancel)
{
	var vRet;
	try
	{
		var fModal = document.getElementById(placeholderid);
		vRet = fModal.elements["__SNPEPortletState_" + placeholderid].value;
	}
	catch(e)
	{
	}
	var form = window.opener.document.getElementById(placeholderid);
	if(notCancel)
	{
		form.elements["__SNPEPortletState_" + placeholderid].value = vRet;
	}
	else
	{	
		var cancelElem = window.opener.document.createElement("INPUT"); 
		cancelElem.type='hidden'; 
		cancelElem.name='__SNPEPortletModalWindowCanceled';
		cancelElem.value = 'true';
		form.appendChild(cancelElem);
	}
	
	
	var x = window.opener.document.createElement("INPUT"); 
	x.type='hidden'; 
	x.name='__SNPEPortletModalWindowClosed';
	x.value = 'true';
	form.appendChild(x);
	
	//Submit(form);
	for(var i=0; i<window.opener.document.forms.length; i++)
	{	
		if(window.opener.document.forms[i].id != form.id)
		{
			var x;
			try
			{
				x = window.opener.document.createElement("INPUT"); 
				x.type = 'hidden'; 
				x.name = '__SNPEPortletState_' + document.forms[i].id;
				x.value = window.opener.document.forms[i].items["__SNPEPortletState_" + window.parent.document.forms[i].id].value;
				form.appendChild(x);
			}
			catch(e)
			{}
		}
	}
	//window.document.body.onUnload = test;
	
	
	//if(!notCancel)
	window.close();
	if(window.opener != null)
	{
		window.opener.onunload = null;
	}
	//window.opener.document.forms[placeholderid].submit();
	form.submit();
}	
/**************************************************
*  Modális ablak nyitásához tartozó függvények vége
***************************************************/
var MaxIcon = "icoMax.gif";
var MinIcon = "icoMin.gif";

function WinMinMax(tr, img)
{
	var path = ImgFullPath(img);
	if(document.all.item(tr).style.display == ''){
		document.all.item(tr).style.display = 'none';
		img.src = path + MaxIcon;
		setCookie(tr, "c");
	}else{
		document.all.item(tr).style.display = ''
		img.src = path + MinIcon;
		setCookie(tr, "o");
	}
}
function ImgFullPath(oImg){
	var path = "";
	try{
		path = "SysRes/" + oImg.getAttribute("skin") + "/ctrl/";
	}
	catch(e){
		path = "SysRes/SNPESkin/ctrl/";
	}
	return path
}
//cookies

function setCookie(name, value) 
{   var today = new Date();
	var expire = new Date();   
	expire.setTime(today.getTime() + 1000*60*60*24*365);
	document.cookie = name + "=" + escape(value)   + ((expire == null) ? "" : ("; expires=" + expire.toGMTString()));
}
function getCookie(Name) 
{   
  var search = Name + "=";
  if (document.cookie.length > 0) 
  { // if there are any cookies      
     offset = document.cookie.indexOf(search)       
     if (offset != -1) 
     { // if cookie exists          
       offset += search.length          
       // set index of beginning of value         
       end = document.cookie.indexOf(";", offset)          
       // set index of end of cookie value         
       if (end == -1)             
          end = document.cookie.length         
       return unescape(document.cookie.substring(offset, end))      
     }    
  }
}


document.onreadystatechange = InitPage;

function InitPage()
{
	if(document.readyState == 'complete')
	{
		for(var i=0; i<document.forms.length; i++)
		{	
			if (document.all)
			{
				try
				{
					x = document.forms[i].all["__snpeplaceholderid"].value ;
					var tr = document.all.item(x + "_body");
					var oImg = document.all.item(x + "_minmax");
					var path = ImgFullPath(oImg);
					if(getCookie(x + "_body") == "o")
					{
						tr.style.display = "";
						if(oImg != null)
							oImg.src = path + MinIcon;
					}
					if(getCookie(x + "_body") == "c")
					{						
						if(oImg != null)
						{
							tr.style.display = "none";
							oImg.src = path + MaxIcon;
						}
					}
					
				}
				catch(e)
				{
				}
			}
		}
	}
}
/* tree-hez kapcsolodo fuggvenyek */
function showOrHide(formid, iconPrefix, id, pid) {
	if (document.all.item(id).style.display == "") {
		document.all.item(id).style.display = "none";
		document.images(pid).src = iconPrefix + "p.gif";
		document.forms[formid].all[document.all.item(id).snpeID].value = "0";
	}else{
		document.all.item(id).style.display = "";
		document.images(pid).src = iconPrefix + "m.gif";
		document.forms[formid].all[document.all.item(id).snpeID].value = "1";
	}
}
/* tree-hez kapcsolodo fuggvenyek vege */