	function findWellFormedOccurence(value,sign,closedsigns)
	{
		lleft ="";
		lrest = value;
		findfirst = true;
		lsignpos = 0;
		while (findfirst)
		{
			ltest =lrest.substring(lsignpos,lrest.length);
			//alert("dot.test:"+ltest);
			lnewsignpos=ltest.indexOf(sign);
			if 	(lnewsignpos!=-1)
			{
				lleft=lrest.substr(0,lsignpos+lnewsignpos);
				//alert("left:"+lleft);
				//alert("closedsigns:"+closedsigns);
				allclosed=true;
				if (closedsigns!='')
				{
					lcspairs = new Array();
					if (closedsigns.indexOf("\;")==-1)
					{
						lcspairs[0] = closedsigns;
					}else lcspairs = closedsigns.split('\;');
					//alert("count:"+lcspairs.length);
					
					for (index=0;index<lcspairs.length;index++)
					{
						//alert("lcspair:"+lcspairs[index]);
						lcs=lcspairs[index].split('\,');
						//alert("count:"+lcs.length);
						lls = lleft.split(lcs[0]);
						
						lrs = lleft.split(lcs[1]);
						//alert("leftsign:"+lcs[0]+","+lls.length+";rightsign:"+lcs[1]+","+lrs.length);
						if (lls.length!=lrs.length) allclosed=false;
					}
				}
				if (allclosed)
				{							
					lrest =lrest.substring(lsignpos+lnewsignpos+1,lrest.length);
					lsignpos = lsignpos+lnewsignpos+1;
					findfirst = false;						
				}else
				{
					lsignpos = lsignpos+lnewsignpos+1;
				}
			}else
			{
				lleft=lrest;
				lrest="";
				findfirst = false;
				lsignpos = lnewsignpos;			
			}
		}
		outp = new Array(4);
		if (lsignpos!=-1) { outp[0] = true; }else outp[0] = false; 
		outp[1] = lsignpos;
		outp[2] = lleft;
		outp[3] = lrest;
		return outp;
	}
	
	function extractWellFormedOccurence(value,leftsign,rightsign,closedsigns)
	{
		myclosedsigns = "(,);[,]";
		leftoccurence = findWellFormedOccurence(value,leftsign,closedsigns);
		
		if (leftoccurence[0])
		{
			rightoccurence = findWellFormedOccurence(leftoccurence[3],rightsign,myclosedsigns);
			if (rightoccurence[0])
			{
				return rightoccurence[2];
			}else return false;
		}else return false;				
	}

	function NSPElement()
	{
		var ldom = jsXML.createDOMDocument();
		this.grootxe=ldom.createElement("NSP");
		var ele = ldom.createElement("parameter");
		this.grootxe.appendChild(ele);
		ele.appendChild(ldom.createTextNode(""));
		ele = ldom.createElement("name");
		this.grootxe.appendChild(ele);
		ele.appendChild(ldom.createTextNode(""));
	};
	

	NSPElement.prototype = 
	{
		grootxe:jsXML.createDOMDocument().createElement("empty"), 
		
		enNSPElement:"nsp-element",
		enNSPNamespaceElement:"nsp-namespace-element",
		enNSPAttributeElement:"nsp-attribute-element",
		enNSPArrayElement:"nsp-array-element",
		
		type:"nsp-element",
		
		selectSingleTag : function(tag)
		{
			var child = this.grootxe.firstChild;

			if (child!=null) 
			{
				var goon = true;
				while (child!=null & goon) 
				{
					if (child.tagName!=tag)	{child = child.nextSibling;} else goon=false;
				}
			} 
			return child;
		},
	
		getNSPserialized:function()
		{	
			var lname= new String(this.Name);
			var lparam=new String(this.Parameter);
			var lnnsp=new String();
			var lreturn= new String();
		
			if (this.selectSingleTag("NSP")!=null)
			{
				var lnsp = new NSPElement();
	    		lnsp.XElement=this.selectSingleTag("NSP");
	    	
	    		lnnsp=lnsp.getNSPserialized();
			}
			
			lreturn =lname;
	    		
			if(lparam!=''){	lreturn+= "#" + lparam;	}
			
			if(lnnsp!=''){	lreturn+= "." + lnnsp;	}
			
	    	return lreturn;
		},
	
		NSPserializedSelf:function()
		{
			var lname= new String(this.getName());
			var lparam=new String(this.getParameter());
			var lreturn= new String();
			
			lreturn =lname;
			
			if(lparam!=''){	lreturn+= "#" + lparam;	}
			
			return lreturn;
		},
	
		setNSPserialized:function(nsp)
		{
			var ldotpos=0;
			var lcrosspos=0;
			var lleft =new String();
			var lrest =new String();
			var lname  =new String();
			var lparam =new String();
		
			ldotpos=nsp.indexOf(".");

			lcrosspos=nsp.indexOf("#");
			
			if (ldotpos==-1)
			{
				lleft=nsp;	
			}else
			{
				lleft=nsp.substring(0,ldotpos);
				lrest=nsp.substring(ldotpos+1,nsp.length);
			}
			
			if (lcrosspos==-1)
			{
				lname =lleft;
			}else
			{
				lname =lleft.substring(0,lcrosspos);
				lparam=lleft.substring(lcrosspos+1,lleft.length);
			}
	
			this.setName(lname);
			
			this.setParameter(lparam);
			
			if (lrest!='')
			{		
				var lnsp=new NSPElement();
				lnsp.setNSPserialized(lrest);
				
				this.grootxe.appendChild(lnsp.XElement);
			}	
		},
	
		getName: function()
		{
			var lval = this.selectSingleTag("name");
			return lval.firstChild.nodeValue;
		},
	
		setName: function(nm)
		{
			var lval = this.selectSingleTag("name");
			lval.firstChild.nodeValue=nm;
		},
		
		getParameter: function()
		{
			var lval = this.selectSingleTag("parameter");
			return lval.firstChild.nodeValue ;
		},
	
		setParameter: function(para)
		{
			var lval = this.selectSingleTag("parameter");
			lval.firstChild.nodeValue =para;
		},
	
		appendNSP:function(apNSP)
		{
			this.grootxe.appendChild(apNSP.XElement);
			apNSP.XElement=this.selectSingleTag("NSP");
			return apNSP;
		},
	
		appendNSPByString:function(apNSP)
		{
			var lnsp = new NSPElement();
			lnsp.NSPserialized=apNSP;
			this.grootxe.appendChild(lnsp.XElement);
			return lnsp;	
		},

	    selectSingleNSP:function(nspName )
		{
	    	if (this.getName()==nspName)
			{
	    		return this;
	    	}else
	    	{
	    		var lnsp = new NSPElement();
	    		lnsp.XElement=this.selectSingleTag("NSP");
	    		return lnsp.selectSingleNSP(nspName);
	    	}
	    },

		nextNSP:function()
		{
			var lnsp = new NSPElement();
			if (this.selectSingleTag("NSP") != null)
			{
		    	lnsp.XElement=this.selectSingleTag("NSP");
		    	return lnsp;
			}else return null;
		},
		
		lastNSP:function(){
			var lnsp = new NSPElement();
			if (this.selectSingleTag("NSP") != null)
			{
		    	lnsp.XElement=this.selectSingleTag("NSP");
		    	return this.lastNSP();
			}else return this;
		},
	
		count:function()
		{
			var nsp = this.nextNSP();
			if (nsp!=null){ return 1 + nsp.count(); }else return 1;
		},
	
		getXElement:function(){
			return this.grootxe;
		},
		
		XElementSelf:function()
		{
			var lxe=this.grootxe;
			
			if (this.selectSingleTag("NSP") != null) lxe.removeChild("NSP");

			return lxe;
		},
		
		setXElement:function(nspXE)
		{
	  		this.grootxe=nspXE;
		}
	
	}
	
	var NSPNamespaceElement = function()
	{
		var ldom = jsXML.createDOMDocument();
		this.grootxe=ldom.createElement("NSP");
		var ele = ldom.createElement("parameter");
		this.grootxe.appendChild(ele);
		ele.appendChild(ldom.createTextNode(""));
		ele = ldom.createElement("name");
		this.grootxe.appendChild(ele);
		ele.appendChild(ldom.createTextNode(""));
		var atb = ldom.createElement("attributes");
		this.grootxe.appendChild(atb);			
		this.NSPList = new NSPList();
		//document.getElementById("output").value+="\r\n"+this.grootxe.xml;	
	};				

	NSPNamespaceElement.prototype = 
	{
		NSPList:NSPList,
		grootxe:jsXML.createDOMDocument().createElement("empty"), 
		selectSingleTag : function(tag)
		{
			//alert(this.grootxe.xml);	
			var child = this.grootxe.firstChild;

			if (child!=null) 
			{
				var goon = true;
				while (child!=null & goon) 
				{
					if (child.tagName!=tag)	{child = child.nextSibling;} else goon=false;
				}
			} 
			return child;
		},
		
		type:"nsp-namespace-element",
	
		getAttributes:function()
		{
			anode = this.selectSingleTag("attributes");
			node = anode.firstChild;
			
			if (anode!=null)
			{
				lnspatb = new NSPAttributeElement();
				lnspatb.setXElement(node);
	
				lnspatbarr = new Array(lcount);
				lcount = lnspatb.count();
				for(index = 0;index < lcount;index++)
				{
					lnspatb2=new NSPAttributeElement();
					lnspatb2.setNSPserialized(lnspatb.NSPserializedSelf);
					lnspatbarr[index]=lnspatb2;
					lnspatb=lnspatb.nextNSP();
				}
				return lnspatbarr;
			}else
			{
				lnspatbarr = new Array(0);
				return lnspatbarr;	
			}
		},
	
		AttributesNSP:function()
		{
			anode = this.selectSingleTag("attributes");
			node = anode.firstChild;
			
			if (anode!=null)
			{
				lnspatb = new NSPAttributeElement();
				lnspatb.setXElement(node);
				return lnspatb;
			}else return null;	
		},
	
		setAttributes:function(atb)
		{
			//document.getElementById("output").value+="\r\n"+this.grootxe.xml;
			var anode = this.selectSingleTag("attributes");
			var node = anode.firstChild;
			if (typeof atb == "string")
			{
				if (node!=null) anode.removeChild(node);
				if (atb!='')
				{
					//document.getElementById("output").value+="\r\n"+atb;
					latb = new NSPAttributeElement();
					latb.setNSPserialized(atb);
				
					anode.appendChild(latb.getXElement());
				}
			}else
			if (typeof atb == "array")
			{
				if (node!=null) anode.removeChild(node);
				latb = new NSPAttributeElement();
				for (value in atb){
					lnsps = "";
					if (typeof value == "string")
					{
						lnsps = value;
					}else lnsps = value.getNSPserialized();
					
					if (latb.count()==0)
					{
						latb.setNSPserialized(lnsps);
					}else latb.appendNSP(lnsps);
									  
				}
				anode.appendChild(latb.getXElement());
			}
			//document.getElementById("output").value+="\r\n"+this.grootxe.xml;
		},
	
		getAttributeElement:function()
		{
			anode = this.selectSingleTag("attributes");
			node = anode.firstChild;
			
			if (node!=null)
			{
				//document.getElementById("output-new").value+="\r\n"+node.xml;
				latb = new NSPAttributeElement();
				latb.setXElement(node);
				return latb;	
			}else return null;	
		},
	
		setAttributeElement:function(name_pos)
		{
			anode = this.selectSingleTag("attributes");
			node = anode.firstChild;
			
			if (typeof name_pos=='string')
			{
				if (node!=null)
				{
					latb = new NSPAttributeElement();
					latb.setXElement(node);
					return latb.selectSingleNSP(name_pos);
				}else return null;
			}else
			if (name_pos>-1)
			{				
				if (node!=null)
				{
					latb = new NSPAttributeElement();
					latb.setXElement(node);
					
					if (name_pos <= latb.count()-1){
						for (lindex=1;lindex <= name_pos;lindex++){
							latb =latb.nextNSP();
						}
						return latb;	
					}else return null;
				}else return null;
			}else return null;
		},
	
		getName: function()
		{
			var lval = this.selectSingleTag("name");
			return lval.firstChild.nodeValue;
		},
	
		setName: function(nm)
		{
			var lval = this.selectSingleTag("name");
			lval.firstChild.nodeValue=nm;
		},
		
		getParameter: function()
		{
			var lval = this.selectSingleTag("parameter");
			return lval.firstChild.nodeValue ;
		},
	
		setParameter: function(para)
		{
			var lval = this.selectSingleTag("parameter");
			lval.firstChild.nodeValue =para;
		},
			
		getNSPserialized:function()
		{
			
			var lname= new String(this.getName());
			var lparam=new String(this.getParameter());
			var lnnsp=new String();
			var lreturn= new String();
			//document.getElementById("output").value+="\r\n"+this.grootxe.xml;
			anode = this.selectSingleTag("attributes");
			nspnode =  anode.firstChild;
			var latb =new String();
		
			if (nspnode!=null)
			{
				latbnsp=new NSPAttributeElement();
				latbnsp.setXElement(nspnode);
				latb = latbnsp.getNSPserialized();
			}
			
			child = this.selectSingleTag("NSP");
			
			if (child!=null)
			{
				lnsp = new NSPNamespaceElement();		
	    		lnsp.setXElement(child);
	    		lnnsp=lnsp.getNSPserialized();
			}
			
			lreturn = lname;
	    		
	    	if(latb!='') lreturn += "["+latb+"]";
	    		
			if(lparam!='') lreturn+= "#" + lparam;
			
			if (this.NSPList.count() >0) lreturn+="(" +this.NSPList.getNSPserialized()+ ")";
			
			if(lnnsp!='') lreturn+= "." + lnnsp;
	    		
	    	return lreturn;
			
		},
	
		NSPserializedSelf:function()
		{	
			var lname= new String(this.getName());
			var lparam=new String(this.getParameter());
			var anode = this.selectSingleTag("attributes");
			var nspnode = anode.firstChild;
			var latb = new String();
			
			var lreturn= new String();
			
			lreturn =lname;
			
			if (nspnode!=null)
			{
				latbnsp=new NSPAttributeElement();
				latbnsp.setXElement(nspnode);
				latb = latbnsp.getNSPserialized();
			}
			
			if(latb!='') lreturn = lname+"["+latb+"]";
			
			if(lparam!='') lreturn+= "#" + lparam;
			
			if (this.NSPList.count >0) lreturn+="(" +this.NSPList.NSPserialized()+ ")";
			
			return lreturn;
		},
	
		setNSPserialized:function(nsp)
		{	
			var ldotpos=0;
			var lcrosspos=0;
			var lleftbrack = 0;
			var lrightbrack = 0;
			var lleft =new String();
			var lpleft =new String();
			var lrest =new String();
			var lprest =new String();
			var lname  =new String();
			var lparam =new String();
			var latb = new String();
			var anode = this.selectSingleTag("attributes");
			var nspnode = anode.firstChild;
		
			//alert("fullnsp:"+nsp);
			dotresult = findWellFormedOccurence(nsp,".","(,);[,]");
			
			lnspstring = dotresult[2];
			lrest = dotresult[3];
			//alert("nsp:"+dotresult[2]);
			//alert("rest:"+dotresult[3]);
			
			brackresult = findWellFormedOccurence(lnspstring,"(","[,]");
			lleft = brackresult[2];
			//alert("brack.left:"+brackresult[2]);
			//alert("brack.rest:"+brackresult[3]);
			llist = extractWellFormedOccurence(lnspstring,"(",")","[,]");
			if (llist==false) llist = "";
			//alert("list:"+llist);
			crossresult = findWellFormedOccurence(lleft,"#","[,]");
			//alert("cross.left:"+crossresult[2]);
			//alert("cross.rest:"+crossresult[3]);
			if(crossresult[3].indexOf("(")!=-1) 
			{
				lparam = crossresult[3].substring(0,crossresult[3].indexOf("("));
			}else lparam = crossresult[3];
			//alert("param:"+lparam);	
			lleft = crossresult[2];			
			cubiqresult = findWellFormedOccurence(lleft,"[","");
			//alert("cubiq.left:"+cubiqresult[2]);
			//alert("cubiq.rest:"+cubiqresult[3]);
			lname = cubiqresult[2];
			//alert("name:"+lname);	
			latb = extractWellFormedOccurence(lleft,"[","]","");
			if (latb==false) latb = "";
			//alert("atbs:"+latb);	
			
			
	
			this.setName(lname);
			
			this.setParameter(lparam);
			
			if (nspnode != null) anode.removeChild(nspnode);
			
			if (latb!='')
			{
				latbnsp =new NSPAttributeElement();
				latbnsp.setNSPserialized(latb);
				anode.appendChild(latbnsp.getXElement());
			}
			
			this.NSPList.setNSPserialized(llist);
			
			if (lrest!='')
			{
				var lnsp=new NSPNamespaceElement();
				lnsp.setNSPserialized(lrest);
				
				this.grootxe.appendChild(lnsp.getXElement());	
			}			
		},	
	
		appendNSP:function(apNSP)
		{	
			this.grootxe.appendChild(apNSP.XElement);
			apNSP.setXElement(this.selectSingleTag("NSP"));
			return apNSP;
		},
		
		appendNSPByString:function(apNSP)
		{
			var lnsp = new NSPNamespaceElement();
			lnsp.setNSPserialized(apNSP);
			this.grootxe.appendChild(lnsp.getXElement());
			return lnsp;	
		},

	    selectSingleNSP:function(nspName )
		{
	    	if (this.getName()==nspName)
			{
	    		return this;
	    	}else
	    	{
	    		nspele = this.selectSingleTag("NSP")
	    		if (nspele != null)
	    		{
		    		var lnsp = new NSPNamespaceElement();
		    		//alert(nspele.xml);
		    		lnsp.setXElement(this.selectSingleTag("NSP"));
		    		
		    		return lnsp.selectSingleNSP(nspName);
	    		}else return null;
	    	}
	    },

		nextNSP:function()
		{
			var lnsp = new NSPNamespaceElement();
			if (this.selectSingleTag("NSP") != null)
			{
		    	lnsp.setXElement(this.selectSingleTag("NSP"));
		    	return lnsp;
			}else return null;
		},
		
		lastNSP:function()
		{
			var lnsp = new NSPNamespaceElement();
			if (this.selectSingleTag("NSP") != null)
			{
		    	lnsp.setXElement(this.selectSingleTag("NSP"));
		    	return this.lastNSP();
			}else return this;
		},
		
		count:function()
		{
			var nsp = this.nextNSP();
			if (nsp!=null){ return 1 + nsp.count(); }else return 1;
		},
		
		getXElement:function()
		{
			var node = this.selectSingleTag("nsp-list");
			if (node !=null) this.grootxe.removeChild(node);
			this.grootxe.appendChild(this.NSPList.getXElement());
			return this.grootxe;
		},
	
		XElementSelf:function()
		{
			var lxe=this.grootxe;
			var node = this.selectSingleTag("nsp-list");
			if (node !=null) this.grootxe.removeChild(node);
			this.grootxe.appendChild(this.NSPList.getXElement());
			if (this.selectSingleTag("NSP") != null)
			{
				lxe.removeChild("NSP");
			}
			return lxe;
		},
		
		setXElement:function(nspXE)
		{
	  		this.grootxe=nspXE;
	  		var node = this.selectSingleTag("nsp-list");
			if (node !=null) this.NSPList.setXElement(node);
		}
	
	}
	
	var NSPAttributeElement = function()
	{
		var ldom = jsXML.createDOMDocument();
		this.grootxe=ldom.createElement("NSP");
		var ele = ldom.createElement("parameter");
		this.grootxe.appendChild(ele);
		ele.appendChild(ldom.createTextNode(""));
		ele = ldom.createElement("name");
		this.grootxe.appendChild(ele);
		ele.appendChild(ldom.createTextNode(""));
		var atb = ldom.createElement("value");
		this.grootxe.appendChild(atb);
		atb.appendChild(ldom.createTextNode(""));
	};	
	
	NSPAttributeElement.prototype = 
	{
		grootxe:jsXML.createDOMDocument().createElement("empty"), 
		type:"nsp-attribute-element",
	
		selectSingleTag : function(tag)
		{
			var child = this.grootxe.firstChild;
	
			if (child!=null) 
			{
				var goon = true;
				while (child!=null & goon) 
				{
					if (child.tagName!=tag)	{child = child.nextSibling;} else goon=false;
				}
			} 
			return child;
		},	
		
		getNSPserialized:function()
		{
			var lname= new String(this.getName());
			var lparam=new String(this.getParameter());
			var lvalue=new String(this.getValue());
			var lnnsp=new String();
			var lreturn= new String();
		
			if (this.selectSingleTag("NSP")!=null)
			{
				var lnsp = new NSPAttributeElement();
	    		lnsp.setXElement(this.selectSingleTag("NSP"));
	    		lnnsp=lnsp.getNSPserialized();    
			}
			
			lreturn =lname;
			
			if(lvalue!='') lreturn+= "(" + lvalue+")";
	    		
			if(lparam!='') lreturn+= "#" + lparam;
			
			if(lnnsp!='') lreturn+= "," + lnnsp;
	    		
	    	return lreturn;
		},
	
		NSPserializedSelf:function()
		{
			var lname= new String(this.getName());
			var lparam=new String(this.getParameter());
			var lvalue=new String(this.getValue());
			var lreturn= new String();
			
			lreturn =lname;
			
			if(lvalue!='') lreturn+= "(" + lvalue+")";
			
			if(lparam!='') lreturn+= "#" + lparam;
			
			return lreturn;
		},
		
		setNSPserialized:function(nsp)
		{
			//document.getElementById("output").value+="\r\n"+this.grootxe.xml;
			var lcompos=0;
			var lcrosspos=0;
			var lleftbrack=0;
			var lrightbrack=0;
			var lleft =new String();
			var lrest =new String();
			var lname  =new String();
			var lparam =new String();
			var lvalue =new String();
			
			lcompos=nsp.indexOf(",");
			lleftbrack=nsp.indexOf("(");
			lrightbrack=nsp.indexOf(")");
			//document.getElementById("output").value+="\r\n"+nsp+","+lcompos+","+lleftbrack+","+lrightbrack;
			/* if comma is between the value brackets -> search for comma after brackets*/
			if ((lleftbrack < lcompos) & (lrightbrack > lcompos))
			{
				lcompos=nsp.indexOf(",",lrightbrack);
			}
			
			/* if comma before brackets -> brackets belong to next attribute and shouldnt been recognized within 
			 * this attribute */
			if ((lcompos != -1) & (lcompos<lleftbrack))
			{
				lleftbrack=-1;
				lrightbrack=-1;	
			}
			
			/* if no comma nsp belong to one attribute else devide */
			if (lcompos==-1)
			{
				lleft=nsp;	
			}else
			{
				lleft=nsp.substring(0,lcompos);
				lrest=nsp.substring(lcompos+1,nsp.length);
			}
			
			/* if no bracket within this attribute search for cross else search for cross after brackets*/
			if (lleftbrack==-1)
			{
				lcrosspos=lleft.indexOf("#");
			}else lcrosspos=lleft.indexOf("#",lrightbrack);
			
			
			if (lcrosspos==-1)
			{
				if (lleftbrack==-1)
				{
					lname =lleft;
					lparam="";
					lvalue="";
				}else
				{
					lname=lleft.substring(0,lleftbrack);
					lvalue=lleft.substring(lleftbrack+1,lrightbrack);
				}
			}else
			{
				if (lleftbrack==-1)
				{
					lname =lleft.substring(0,lcrosspos);;
					lparam=lleft.substring(lcrosspos+1,lleft.length);
					lvalue="";
				}else
				{
					lname=lleft.substring(0,lleftbrack);
					lvalue=lleft.substring(lleftbrack+1,lrightbrack);
					lparam=lleft.substring(lcrosspos+1,lleft.length);
				}
			}
	
			this.setName(lname);
	
			this.setParameter(lparam);
		
			this.setValue(lvalue);
			//document.getElementById("output").value+="\r\n"+this.Name+","+lparam+","+lvalue;
			if (lrest!='')
			{
				var lnsp=new NSPAttributeElement();
				lnsp.setNSPserialized(lrest);
				this.grootxe.appendChild(lnsp.getXElement());
			}
			//document.getElementById("output").value+="\r\n"+this.grootxe.xml;
		},
	
		getName: function()
		{
			var lval = this.selectSingleTag("name");
			return lval.firstChild.nodeValue;
		},
	
		setName: function(nm)
		{
			var lval = this.selectSingleTag("name");
			lval.firstChild.nodeValue=nm;
		},
		
		getParameter: function()
		{
			var lval = this.selectSingleTag("parameter");
			return lval.firstChild.nodeValue ;
		},
	
		setParameter: function(para)
		{
			var lval = this.selectSingleTag("parameter");
			lval.firstChild.nodeValue =para;
		},
		
		setValue:function(val) 
		{
			if (typeof val=='string')
			{
				var lval = this.selectSingleTag("value");
				lval.firstChild.nodeValue=val;
			}else
			{
				var lval = this.selectSingleTag("value");
				lval.firstChild.nodeValue=val.getNSPserialized();
			}
		},

		getValue:function ()
		{
			var lvalue=new String(this.selectSingleTag("value").firstChild.nodeValue);
			return lvalue;
		},
		
		getValueNSP:function ()
		{
			var lvalue=new String(this.selectSingleTag("value").firstChild.nodeValue);
			if (lvalue!='')
			{
				var lnsp = new NSPAttributeElement();
				lnsp.setNSPserialized(lvalue);
				return lnsp;
			}else return null;
		},
		
		appendNSP:function(apNSP)
		{
			this.grootxe.appendChild(apNSP.getXElement);
			apNSP.setXElement(this.selectSingleTag("NSP"));
			return apNSP;
		},
	
		appendNSPByString:function(apNSP)
		{
			var lnsp = new NSPAttributeElement();
			lnsp.setNSPserialized(apNSP);
			this.grootxe.appendChild(lnsp.getXElement);
			return lnsp;
		},
	
	    selectSingleNSP:function(nspName )
		{
	    	if (this.getName()==nspName)
			{
	    		return this;
	    	}else
	    	{
	    		lele = this.selectSingleTag("NSP");
	    		if (lele != null)
	    		{
		    		var lnsp = new NSPAttributeElement();
		    		lnsp.setXElement(lele);
		    		return lnsp.selectSingleNSP(nspName);
	    		}else return null;
	    	}
	    },

		nextNSP:function()
		{
			var lnsp = new NSPAttributeElement();
			if (this.selectSingleTag("NSP") != null)
			{
		    	lnsp.setXElement(this.selectSingleTag("NSP"));
		    	return lnsp;
			}else return null;
		},
		
		lastNSP:function()
		{
			var lnsp = new NSPAttributeElement();
			if (this.selectSingleTag("NSP") != null)
			{
		    	lnsp.setXElement(this.selectSingleTag("NSP"));
		    	return this.lastNSP();
			}else return this;
		},
		
		count:function()
		{
			var nsp = this.nextNSP();
			if (nsp!=null){ return 1 + nsp.count(); }else return 1;
		},
		
		getXElement:function()
		{
			return this.grootxe;
		},
	
		XElementSelf:function()
		{
			var lxe=this.grootxe;
			
			if (this.selectSingleTag("NSP") != null)
			{
				lxe.removeChild("NSP");
			}
			return lxe;
		},
		
		setXElement:function(nspXE)
		{
	  		this.grootxe=nspXE;
		}
	}
	
	var NSPList = function()
	{
		var ldom = jsXML.createDOMDocument();
		this.mrootxe=ldom.createElement("nsp-list");
	};		

	NSPList.prototype = 
	{
		mrootxe:jsXML.createDOMDocument().createElement("nsp-list"), 
		selectSingleTag : function(tag)
		{
			var child = this.mrootxe.firstChild;

			if (child!=null) 
			{
				var goon = true;
				while (child!=null & goon) 
				{
					if (child.tagName!=tag)	{child = child.nextSibling;} else goon=false;
				}
			} 
			return child;
		},
		
		type:"nsp-array",
		
		getAsArray:function()
		{
			var node = this.mrootxe.firstChild;
			var lnspelearr = new Array(0);
			while (node!=null)
			{
				if (node.tagName == 'NSP')
				{
					var lnspele = new NSPNamespaceElement();
					lnspele.setXElement(node);
					
					lnspelearr.push(lnspele);
				}
				node=node.nextSibling;
			}
			return lnspelearr;
		},
		
		setAsArray:function(nsparr)
		{
			while (this.mrootxe.hasChildNode) this.mrootxe.removeChild(this.mrootxe.firstChild);
			for(value in nsparr)
			{
				this.mrootxe.appendChild(value.getXElement());
			}
		},
		
		firstElement:function()
		{
			if (this.mrootxe.hasChildNodes)
			{
				var lnspele = new NSPNamespaceElement();
				lnspele.setXElement(this.mrootxe.firstChild);
				return lnspele;
			}else return null;
		},
		
		lastElement:function()
		{
			if (this.mrootxe.hasChildNodes)
			{
				var lnspele = new NSPNamespaceElement();
				lnspele.setXElement(this.mrootxe.flastChild);
				return lnspele;
			}else return null;
		},
		
		appendElement:function(ele)
		{
			this.mrootxe.appendChild(ele.getXElement());
		},
		
		appendNSP:function(nsp)
		{
			//alert(nsp);
			var lnspele = new NSPNamespaceElement();
			lnspele.setNSPserialized(nsp);
			this.mrootxe.appendChild(lnspele.getXElement());
			//document.getElementById("output").value+="\r\n"+this.mrootxe.xml;
		},
		
		removeElement:function(name_pos)
		{
			if (isNaN(name_pos))
			{
				var node = this.mrootxe.firstChild;
				while (node!=null)
				{
					if (node.tagName == 'NSP')
					{
						lnspele = new NSPNamespaceElement();
						lnspele.setXElement(node);
						if (lnspele.getName()==name_pos)
						{
							this.mrootxe.removeChild(node);
							node = null;
						}else node=node.nextSibling;						
					}else node=node.nextSibling;
				}
			}else
			{
				if (this.mrootxe.childNodes.length>=name_pos)
				{
					this.mrootxe.removeChild(this.mrootxe.childNodes.item(name_pos));
					return true;
				}else return false;
			}
		},
		
		getElement:function(name_pos)
		{
			var nspele = null;
			if (isNaN(name_pos))
			{
				var node = this.mrootxe.firstChild;
				while (node!=null)
				{
					if (node.tagName == 'NSP')
					{
						var lnspele = new NSPNamespaceElement();
						lnspele.setXElement(node);
						if (lnspele.getName()==name_pos)
						{
							nspele = lnspele;
							node = null;
						}else node=node.nextSibling;						
					}else node=node.nextSibling;
				}
			}else
			{
				if (this.mrootxe.childNodes.length>=name_pos)
				{
					var nspele = new NSPNamespaceElement();
					nspele.setXElement(this.mrootxe.childNodes.item(name_pos));					
				}
			}
			return nspele;
		},
		
		setElement:function(name_pos,ele)
		{
			if (isNaN(name_pos))
			{
				var node = this.mrootxe.firstChild;
				while (node!=null)
				{
					if (node.tagName == 'NSP')
					{
						var lnspele = new NSPNamespaceElement();
						lnspele.setXElement(node);
						if (lnspele.getName()==name_pos)
						{
							lnspele.setNSPserialized(ele.getNSPserialized());
							node = null;
						}else node=node.nextSibling;						
					}else node=node.nextSibling;
				}
			}else
			{
				if (this.mrootxe.childNodes.length>=name_pos)
				{
					var lnspele = new NSPNamespaceElement();
					lnspele.setXElement(this.mrootxe.childNodes.item(name_pos));	
					lnspele.setNSPserialized(ele.getNSPserialized());				
				}
			}
		},
			
			
		getNSPserialized:function()
		{
			//document.getElementById("output").value+="\r\n"+this.grootxe.xml;
			
			var lnnsp=new String();
			var lreturn= new String();
			var node = this.mrootxe.firstChild;
			while (node!=null)
			{
				if (node.tagName == 'NSP')
				{
					var lnspele = new NSPNamespaceElement();
					lnspele.setXElement(node.cloneNode(true));
					lnnsp = lnspele.getNSPserialized();
					if(lnnsp!='' && lreturn!='') {lreturn+= ":" + lnnsp;}else lreturn = lnnsp;				
				}
				//alert(lnnsp);
				node = node.nextSibling;
			}	    		
	    	return lreturn;			
		},			
	
		setNSPserialized:function(nsp)
		{	
			var ldoubledotpos=0;
			var lcrosspos=0;
			var lleftbrack = 0;
			var lrightbrack = 0;
			var lleft =new String();
			var lrest =new String();

			while (this.mrootxe.hasChildNode) this.mrootxe.removeChild(this.mrootxe.firstChild);
			if (nsp!='')
			{
				findnext = true;
				
				lrest =nsp;
				//alert("nsp:"+nsp);
				while (findnext)
				{
					var item = new Array(4);
					item = findWellFormedOccurence(lrest,":","[,];(,)");
					
					if (item[0])
					{
						lrest = item[3];
					}else
					{
						findnext = false;
					}
					//alert("left:"+item[2]);
					//alert("rest:"+item[3]);
					if (item[2]!='')
					{
						var lnsp=new NSPNamespaceElement();
						lnsp.setNSPserialized(item[2]);
						this.mrootxe.appendChild(lnsp.getXElement());					
					}
				}
			}				
		},	
		
		count:function()
		{
			
			return this.mrootxe.childNodes.length;
		},
		
		getXElement:function()
		{
			return this.mrootxe;
		},
		
		setXElement:function(nspXE)
		{
	  		this.mrootxe=nspXE;	  		
		}
			
	
	}
