function PatternPrintAddFormSetup( formId , file , frames ) {
	var workspace = getFormElement( formId , "workspace" );
	if( ! file ) workspace.innerHTML = "Wybierz plik";
	else PatternPrintAddFormLoadPattern( formId , file , frames ); 
	addOnLoadAction( function( formId ) {
		var pb = getFormElement( formId, "propertiesList" );
		getFormElement( formId, "workspace" ).style.height = document.getElementById(formId).offsetHeight + "px";
	} , formId );
}
function PatternPrintAddFormMarkPatternLink( formId, file ) {
	var o = getFormElement( formId , "fileList" ).childNodes;
	if( o && o.length )
	for( var i = 0 ; i < o.length ; i++ ) if( o[i].nodeType == 1 && file.match( new RegExp( "patterns/"+o[i].innerHTML+"/pattern.html" ) ) ) 
		o[i].className = "active";
	else o[i].className = "";
}
function PatternPrintAddFormLoadPattern( formId , file , frames ) {
	setFormElementValue( formId , "data[Pattern][file]" , file );
	ajax = new AJAX( file );
	ajax.formId = formId;
	ajax.onload = function() { 
		var workspace = getFormElement( this.formId , "workspace" );
		workspace.innerHTML = this.document;	
		var pattern = getFormElement( this.formId , "pattern" );
		removeTextNodes( pattern );
		PatternPrintAddFormSetPatternFrameActions( pattern );
		if( frames ) for( var i = 0 ; i < frames.length ; i++ )
			for( var j = 0 ; j < pattern.frames.length ; j++ )
				if( pattern.frames[j].getAttribute("nr") == frames[i][0] ) {
					pattern.frames[j].setName( frames[i][1] );
					pattern.frames[j].setTitle( "Ramka #" + pattern.frames[j].getAttribute("nr") );
				}
		document.getElementById( this.formId ).pattern = pattern;
		pattern.file = this.file; 
		PatternPrintAddFormMarkPatternLink( this.formId, this.file );
	};
}
function PatternPrintAddFormSetPatternFrameActions( pattern , node ) {
	if( ! node ) {
		node = pattern;
		pattern.className = "pattern";
	}
	if( node.getAttribute( "static" ) ) {
		node.className = "static";
	}
	if( node.getAttribute( "frame" ) ) {
		if( ! pattern.frames ) pattern.frames = [ node ];
		else pattern.frames.push( node );
		node.className = "frame";
		node.parent = pattern;
		node.onclick = function() {
			var form = document.getElementById( getFormId( this ) );
			form.frame = this;
			for( var i = 0 ; i < pattern.frames.length ; i++ )
				pattern.frames[i].className = "frame";
			this.className = "frame_active";
			this.setName( window.prompt( "Podaj nazwę ramki : " , this.innerHTML ) );
		}
		node.setName = function( title ) {
			if( title ) this.innerHTML = title;
		};
		node.setTitle = function( title ) {
			if( title ) this.title = title;
		};
		node.onmouseover = function() {
			window.status = this.title;
		}
		node.onmouseout = function() {
			window.status = " ";
			if( ! this.form ) this.form = document.getElementById( getFormId( this ) );
			if( ! this.form.frame ) return;
		}
		node.select = function( node ) {
			var frames = node.parentNode.parent.frames;
			for( var j = 0 ; j < frames.length ; j++ )
			for( var i = 0 ; i < frames[j].childNodes.length ; i++ ) 
				if( frames[j].childNodes[i] != node && frames[j].childNodes[i].normalClassName ) frames[j].childNodes[i].className = frames[j].childNodes[i].normalClassName;
			if( this.selectedItem != node ) {
				node.normalClassName = node.className;
				node.className = node.className + "_onfocus";
				this.selectedItem = node;
			}
		}
	} else {
		if( node != pattern && ! node.getAttribute( "static" ) ) node.className="PatternPrintAddFormUnknown";
		for( var i = 0 ; i < node.childNodes.length ; i++ ) PatternPrintAddFormSetPatternFrameActions( pattern , node.childNodes[i] );
	}
}
function PatternPrintAddFormSubmit( o ) {
	var formId = getFormId( o );
	var form = o.form;
	var node, nodeName;
	for( var i = 0 ; i < form.pattern.frames.length ; i++ ) {
		nodeName = "data[Pattern][children]["+ i +"][name]";
		node = form.elements[nodeName]; 
		if( ! node ) {
			node = document.createElement( "input" );
			node.name = nodeName;
			form.appendChild( node );
			node.type = "hidden";
		}
		node.value = form.pattern.frames[i].innerHTML;
		if( ! node.value ) return alert( "Proszę podać nazwy wszystkich ramek.\nBrakuje nazwy ramki #"+form.pattern.frames[i].getAttribute("nr"));

		nodeName = "data[Pattern][children]["+ i +"][frame]";
		node = form.elements[nodeName]; 
		if( ! node ) {
			node = document.createElement( "input" );
			node.name = nodeName;
			form.appendChild( node );
			node.type = "hidden";
		}
		node.value = form.pattern.frames[i].getAttribute( "nr" );
	}
	form.submit();
}
