(function()
{
SYM.client = 
{	
	path : "/kunder/rsm/cms.nsf",
	mmpath : "/kunder/rsm/cmsmm.nsf",
	language: "NO",
	images: "http://80.239.2.160:8080/gfx",
	modules : 
	{
		items : new Array(),
		add : function(obj)
		{ 			
			SYM.client.modules.items[ SYM.client.modules.items.length ] = new SYM.client.modules.module( obj ) 			
			if ( SYM.client.modules.items[ SYM.client.modules.items.length -1 ].enabled )
			{
				SYM.client.modules.items[ SYM.client.modules.items.length -1 ].load();	
			}
		},
		addItems : function( id , obj )
		{
			var place = SYM.client.modules.find( id );
			if (place != -1)
			{
				return false;
			}			
			SYM.client.modules.items[place].add(obj);			
			return true;	
		},
		load: function( id )
		{  
			var place = SYM.client.modules.find( id );
			if (place != -1)
			{
				SYM.client.modules.items[place].enabled = true;
				SYM.client.modules.items[place].load();
				return true;
			}else
			{
				return false;
			}
		},
		find : function( id )
		{
			for (var i =0 ; i < SYM.client.modules.items.length ; i++)
			{
				if (SYM.client.modules.items[i].szid == id)
				{return i;}
			}
			return -1;
		},
	
		isEnabled: function (id)
		{
			var place = SYM.client.modules.find( id );
			if (place != -1)
			{
				return (SYM.client.modules.items[place].enabled?1:0);
			}else
			{
				return -1;
			}		
		},
		unload: function( id )
		{  
			var place = SYM.client.modules.find( id );
			if (place != -1)
			{
				SYM.client.modules.items[place].enabled = false;
				SYM.client.modules.items[place].unload();
				return true;
			}			
			return false;
		}
	}
}
SYM.client.dialog = function(url , opt)
{
	if (opt == null){ opt = new Object(); }
	var width = ( opt.width == null ? 400 : opt.width );
	var height = ( opt.height == null ? 300 : opt.height );
	$("#cmsModalDialogLoading").show()		
	$('#cmsModalDialog').dialog('option', 'width', width);
	$('#cmsModalDialog').dialog('option', 'height', height);
	$('#cmsModalDialog').dialog("open");	
	$('#cmsModalDialogFrame').attr('src', url );
	$('#cmsModalDialogFrame').load( function(  ){ $("#cmsModalDialogLoading").hide()} );
}
 
SYM.client.form = new Object();
SYM.client.form.validate = function( szvalue  , obj )
{
	var status = true;
	if (obj == null){obj = new Object();} // add a default...
	obj.empty = ( obj.empty==null?true:obj.empty ); // add if it should be valid with empty or not. 
	if (obj.type == "date")
	{
		if (  szvalue != "" &&  !SYM.util.date.validDate(szvalue) )
		{
			SYM.client.form.validate.error("Invalid date, yyyy.mm.dd");			
			status = false;
		}else if( !obj.empty && szvalue == ""  )
		{
			SYM.client.form.validate.error("You must specifiy a date!");			
			status = false;
		}
	}else if (obj.type == "time-diff")
	{
		if (SYM.util.date.timeDiff( szvalue , obj.timediff ) < 0)
		{
			SYM.client.form.validate.error("Stop time must be greater than start time.");	
			status = false;
		}
	}else if ( obj.type == "time" )
	{
		if (!SYM.util.date.validTime( szvalue ))
		{
			SYM.client.form.validate.error("Invalid time format, hh:mm");
			status = false;
		}
	}else
	{
		if (szvalue == "" || szvalue == null)
		{
			if (obj.div != null){ $("#"+obj.div).effect("bounce", { times:3 }, 200)}
			status = false;
		}
	}
 
	if (!status)
	{
		if(obj.id != null){$("input[name='"+obj.id+"']").css("border-color" , "red").focus().blur(function(){$(this).css("border-color","")}); }	
	}
	return status;
}
SYM.client.form.validate.error = function( sztxt )
{
	alert(sztxt);
}
SYM.client.view = function ( obj)
{
	this.dataset = null; // this is the json data
	this.name = obj.viewname;
	if (obj.url == null){return null}
	this.url = obj.url;
	this.element = (obj.element == null ? "#projectsearch" : obj.element);
	this.flat = (obj.flat == null?true:obj.flat);
	this.level = (obj.level == null?"":obj.level); // what level to start on.
	this.sub = obj.sub;
	this.path = this.url; // the path, this contain the start and count keys.
	this.key = obj.key; // the key where to start with.
	this.paint = obj.paint; // the paint function 
	this.template = obj.template;
	this.overlay = obj.overlay;
	this.page = 0;
	this.div = obj.div;
	this.count = obj.count;
	this.paths = new Array();
	this.paths[0] = "";	
	var szstart =  SYM.util.cookie.read( obj.viewname );
	if (szstart != null && szstart != "")
	{
		this.paths = $.parseJSON( szstart );
	}	
	this.sublevel = false;
	this.threaded = (obj.threaded == null?null:obj.threaded); // indicates if we should use plus sign and not step into.
	this.storeoption = (obj.store==null?0:obj.store) ; // storeoption : 1 = native, 2 = flash navite store, 0 = do not store
	this.store = function()
	{
			/* STORE THE INFORMATION TO A COOKIE SO WE CAN STEP BACK TO IT. */
			SYM.util.cookie.set( obj.viewname , $.toJSON(this.paths) );
	}
	this.clean = function()
	{SYM.util.cookie.remove(obj.viewname);}
	
	this.section = function( szname , szlevel, szcount , key )
	{
		this.name = szname;
		this.level = szlevel;
		this.count = szcount;
		this.key = key;
	}
	
	// init the path
	if (this.level != "")
	{
		this.paths[0] = new this.section("" , this.level );
	}
	if (obj.level != null)
	{
		this.paths[0] =  new this.section("" , obj.level , null );
	}
	this.getParent = function()
	{
		return this.paths[ this.paths.length -1 ].key
	}	
	this.getLevel = function( obj )
	{
		var szlevel = "";
		var i = 0;
		szlevel = this.paths[this.paths.length-1].level;	
		if (szlevel == null)
		{szlevel = "";}							
		if (  obj != null)
		{ szlevel += (szlevel == "" ?"":".") + obj;}
		return szlevel;
	}	
	this.getCount = function() // GET THE COUNT
	{
		return (this.paths[ this.paths.length-1 ].count != null?"&count="+this.paths[ this.paths.length-1 ].count:"&count=100");
	}
	this.nextPage = function(page)
	{
		if (page == null)
		{
			if (this.page == null)
			{this.page = 0;}
			this.page++;
		}else
		{
			this.page = page;
		}
		this.update();
	}
	
	this.previousPage = function( page )
	{
		if(page == null)
		{
			this.page--;
		}else
		{
			this.page = page;
		}
		this.update();		
	}
	this.getPath = function() // GET THE PATH 
	{
		var szpath = "";
		var szlevel = this.getLevel();
		if (szlevel != "" )
		{
			this.sublevel = true;
			szpath = this.getUrl() + "&start=" + szlevel + ".1" + this.getCount();		
		}else
		{
			this.sublevel = false;
			szpath = this.getUrl();
		}				
		if (this.level == szlevel )
		{
			// this is the start, not the end
			this.sublevel = false;		
		}
		return szpath;		
	}
	this.expand = function( level, count , sztxt , key ) // EXPAND LEVEL
	{			
		var key = "";
		try
		{
			var items = level.split(".")
			key = this.dataset.viewentry[parseInt((items[items.length-1]))-1]['@unid'];
			if (key == null){key="";}
		}catch(ooops){}
		this.paths[ this.paths.length ] = new this.section( sztxt , level , count , key);
		this.update( this.getPath() );	
	}	
	this.gotoLevel = function( pos )
	{	
		this.paths = this.paths.splice(0,pos+1);		
		this.update(this.getPath());			
	}
	this.levelUp = function()
	{
		this.gotoLevel( this.paths.length-2 )
	}
	this.paintit = function( )
	{
		if (this.storeoption != 0 ){this.store()};
		if(this.paint != null) 
		{			
			this.paint(this);
		}else if ( this.template != null )
		{			
			$("#" + this.div).html( SYM.client.view.Template(this.template , this)   ).show();
		}
		if (this.overlay != null){ SYM.client.overlay({overlay:this.overlay}) }
	}
	this.setData = function(data)
	{
		if (this.threaded && this.dataset != null) 
		{	
			this.div = this.sub + this.paths[this.paths.length-1].level
			this.div = this.div.replace( /\./g , "_")
			this.dataset = data;
/*	
			var path = this.paths[this.paths.length-1].level;
			path = path.split(".");
			var parent = this.dataset.viewentry[path[1]];
			if (parent != null)
			{
				this.dataset.viewentry[path[1]-1].viewentry = data.viewentry;
			}
			this.paths = this.paths.splice(0,this.paths.length-1);	 // just go up, do not store item			
*/
		}else
		{
			this.dataset = data;
			/*if(data['@toplevelentries'] != this.paths[ this.paths.length-1 ].count)
			{
				if (this.paths[ this.paths.length-1 ].count != null &&  data['@toplevelentries'] != null)			
				{
					this.paths[ this.paths.length-1 ].count = data['@toplevelentries'];
					this.update();
				}
			}*/
		}		
		this.paintit();
	}
	
	this.getText = function( data , parameter )
	{
		return SYM.client.view.getText(data, parameter);
	}
	this.getUrl = function() // get the url of the system with cache
	{return this.url + "&cache="+SYM.client.cache.get() + ( this.key != null?"&restricttocategory="+this.key:"" )+ (this.count != null?"&start="+((this.page*this.count)+1):"");	}
	
	this.getNewCount = function(data) 
	{
		if (data.viewentry != null && data.viewentry[0]['@children'] == null || data.viewentry[0]['@children'] =="undefined") {
			szNewCount = "0";
		}else if (data.viewentry != null){
			szNewCount = data.viewentry[0]['@children'];
		}
		
		this.paths[ this.paths.length-1 ].count = szNewCount
		var oThis = this
		
		var szurl = this.getPath()
		$.getJSON(szurl, function(data){ oThis.setData(data)});	}
 
	this.update = function(szurl)
	{
		if (this.overlay != null)
		{
		 	SYM.client.overlay( {overlay:this.overlay , div:this.div} ) 
		}	
		var oThis = this		
		if (szurl == null)
		{szurl = this.getPath()}
	
		if (this.paths[ this.paths.length-1 ].count != null)
		{ 
			var key = (this.key != null ? "&RestrictToCategory=" + this.key : "");
			var path = this.paths[ this.paths.length-1 ].level;
			if (path != null && path != "") 
			{
					var sznewUrl = this.url + "&cache="+SYM.client.cache.get();
					$.getJSON(sznewUrl + key + "&start="+ path +"&count=1" , function(data){oThis.getNewCount(data)});
					return null;
			}else{
				$.getJSON(szurl, function(data){ oThis.setData(data)});
			}		
		}else {
			$.getJSON(szurl, function(data){ oThis.setData(data)});
		}
	}
	this.update( this.getPath() );
}
SYM.client.view.Template= function( sztemplate , data )
{
	var a = new EJS( {url: sztemplate} ).render( data );
	if ( $.browser.msie )
	{
		while ( a.substring(0,1) == "\n" || a.substring(0,1) == " " )
		{a = a.substring(1,a.length);}	
	}
	return a;
}
SYM.client.overlay = function( obj )
{
	if ( $("#"+obj.overlay ).length != 0)
	{
		$("#"+obj.overlay ).fadeOut("fast" , function(){$("#"+obj.overlay ).remove()});	
	}else if ( obj.div != null )
	{
		$(document.body).append("<div id='"+ obj.overlay +"' class='overlay'>"+ (obj.text?obj.text:"")+"</div>");
		var position = $("#"+obj.div).position();
	  	var width = $("#"+obj.div).width();
	  	if (!document.all)
	  	{	  	
			$("#"+obj.overlay).css( {"opacity" :".5" , "left": (position.left ) + "px","height":  $("#"+obj.div).height() + "px", "width":width + "px", "top":position.top + "px" } );
		}else{
			$("#"+obj.overlay).css( {"filter" :"alpha(opacity=50)" , "left": (position.left ) + "px","height":  $("#"+obj.div).height() + "px", "width":width + "px", "top":position.top + "px" } );
		}
	}
}
SYM.client.cache = 
{
	key:"",
	get : function()
	{
		if (SYM.client.cache.key == "")
		{
			var szold = SYM.util.cookie.read( "viewcache" );
			if (szold == "" || szold == null) 
			{
				SYM.client.cache.update();
			}else
			{
				SYM.client.cache.key = szold;	
			}
		}
		return SYM.client.cache.key;	
	},
	
	update : function()
	{
		var d = new Date();
		var szkey = "";
		szkey = d.getHours() + "" + d.getMinutes() + "" + d.getSeconds();
		SYM.client.cache.key = szkey;
		SYM.util.cookie.set( "viewcache" , szkey );
	}
}
SYM.client.view.refresh = function(){ SYM.client.cache.update(); }
SYM.client.view.getText = function( data , parameter )
{
	
	if (data == null || data.length == null) {return;}
	for ( var i = 0 ; i < data.length ; i++ )
	{
		if( data[i]['@name'] == parameter )
		{
			if (data[i].textlist != null)
			{
				var szdata = "";
				for ( var ii = 0 ; ii < data[i].textlist.text.length ; ii++ )			
				{
			
					if (data[i].textlist.text!= null && data[i].textlist.text[ii][0] != null)
					{
						szdata += (szdata.length!= 0?";":"") + data[i].textlist.text[ii][0]
					}
				}
				return szdata;
			}else if (data[i].text!= null && data[i].text['0'] != null)
			{
				return data[i].text['0']
			}else if (data[i].number!= null && data[i].number['0'] != null)
			{
				return data[i].number['0']
			}
		}
	}
	return "";
}
SYM.client.view.reload = function()
{
	try
	{
		SYM.client.loading();
		myview.dataset = null;
		myview.update();
}catch(dd){}
}
 
SYM.client.view.parentView = function()
{
	location.href=SYM.client.path + "/pages/project.documents.html" 
}
register("SYM.client.ui");
register("SYM.client.ui.media");
SYM.client.ui.media.image =
{		
		/* APPENDS A FILE FROM THE FILE-SYSTEM */
		append : function()
		{},
		/* INSERTS A IMAGE FROM THE MM */
		insert : function( name )
		{					
			try
			{
				//Standard picklist for resource lookup
				var pickListHeight
				var pickListWidth
				var pickListURL
	
				try {pickListHeight = g_pickListHeight + "px"}		
				catch(e){	pickListHeight = "455px"}
				try{pickListWidth = g_pickListWidth + "px"}
				catch(e)	{pickListWidth = "650px"}
	
				try	
				{pickListURL = g_pickListURL	}
				catch(e)	{ pickListURL =  '/wcm/wcmrs.nsf'}
				var param1 = "&dlgtype="+name
				insertToField = (function(value){ SYM.client.ui.field.image.update(  name ,value ); })
				var options = "dialogHeight:" + pickListHeight +";dialogWidth:" + pickListWidth + ";resizable:no;help:no;status:no;scroll:no;"
				pickListURL +=  "/inpPickList?ReadForm"
				szwindowleft =  "left:" +((screen.availWidth-pickListWidth ) / 2 ) + ";";
				szwindowtop =  "top:" +((screen.availHeight-pickListHeight ) / 2) + ";";
				showModalDialog( pickListURL , window, szwindowleft + szwindowtop + options  );					
			}catch(e)
			{
				alert("Error " + e.message)
			}	
		},
	
			
		del:function( name )
		{
			SYM.client.ui.field.image.update( name , null )
		},
		
		preview:function( name )
		{
			
		}
	
},
SYM.client.ui.section = 
{
	docsections : 0,
	show : function(obj)
	{
		// go up and then go down.
		sub = $(obj).parent().find("div.section-content");
		if (  $(sub).css("display") != "none") 
		{
			$(sub).hide("slide",{direction: 'up'},500);
		}else
		{
			$(sub).show("slide",{direction: 'up'},500);
		}
	},
	
	add:function(obj)
	{
		SYM.client.ui.docsections++;
		if (obj == null){obj = new Object();}
		var name = obj.name ;
		var title = obj.title;
		var content = (obj.content==null?"":obj.content);
		var parent = (obj.parent == null ? document.body :$("#"+obj.parent));
		if (obj.noadd){parent==null;}
		
		var newSection = $("<div>").addClass("section-wrapper")
		if ( obj.name != null ){$(newSection).attr("id",obj.name)}
		$(newSection).append(
			$("<div>").addClass("section-header").click(function(){SYM.client.ui.section.show(this)}).append("<h3>"+title+"</h3>")
		).append
		(
			$("<div>").addClass("section-content").attr("id", ( obj.name == null?"sym-section-"+SYM.client.ui.docsections:obj.name+"-content" )).append(obj.content).css("display",(obj.hide?"none":""))
			.append(
				$("<div>").css("clear","both")
			).append(
				$("<div>").addClass("section-corner-left")
			).append(
				$("<div>").addClass("section-corner-right")
			)
		);
		if (parent != null){
		$(parent).append(newSection);}
		return newSection;
	}	
}
SYM.client.ui.button =
{
	docbuttons:0,
	add:function(obj)
	{
		if (obj == null){return;}
		if ( obj.width == null  ){obj.width=100}
		if (obj.parent != null){obj.parent = $("#"+obj.parent)}
		SYM.client.ui.button.docbuttons++;
		var butt = $("<div>").addClass("button-wrapper").mouseover(function(){$(this).addClass('button-wrapper-active')}).mouseout( function(){$(this).removeClass('button-wrapper-active')} ).css( "width" , (obj.width+12)+"px" );
		var buttinner = $("<div>").addClass("button-content").css("width",obj.width+"px");
		if ( obj.imgstyle != null )
		{
			$(buttinner).append( $("<div>").addClass("button-img").addClass( obj.imgstyle ) );
		}else if ( obj.imgsrc )
		{
			$(buttinner).append( $("<div>").addClass("button-img").css( "background-image" ,obj.imgsrc ) );
		}else
		{
			$(buttinner).append($("<div>").addClass("button-img") );
		}
				
		$(buttinner).append($("<p>").text( obj.text ));
		
		if ( obj.fn != null){ $(butt).click( obj.fn ) };
		$(butt).append(
			$("<div>").addClass("button-left")
		).append(
			buttinner
		).append(
			$("<div>").addClass("button-right")
		);
		if (obj.parent != null)
		{
			$(obj.parent).append(butt);
		}
	}
}
SYM.client.lang =
{
	sztxts : "3-DDAG-6PEGXD: DO NOT CHANGE WCM.JS STARTS;3-DDAG-6PEGXE: Rediger;3-DDAG-6PEGXF: Slett;3-DDAG-6PEGXG: Mal;3-DDAG-6PEGXH: Registrering;3-DDAG-6PEGXJ: Utsendelseskategori;3-DDAG-6PEGXK: Bildesuite;3-DDAG-6PEGXL: Bildeformat;3-DDAG-6PEGXM: Ny avstemming;3-DDAG-6PEGXN: Søk database;3-DDAG-6PEGXP: Avstemmingsressurs;3-DDAG-83SHFK: Flytt;3-DDAG-6PEGXQ: Konfigurasjon;3-DDAG-6PEGXR: Mottaker;3-DDAG-6PEGXS: Nøkkelord;3-DDAG-6PEGXT: Multimedia;3-DDAG-6PEGXU: Ny...;3-DDAG-6PEGXV: Dokument;3-DDAG-6PEGXW: Forhåndsvisning;3-DDAG-6PEGXX: Forhåndsvisning ;3-DDAG-6PEGXY: Fjern fra web;3-DDAG-6PEGXZ: Godkjenn;3-DDAG-6PEGY2: Avvis dokument;3-DDAG-6PEGY3: Hent inn;3-DDAG-6PEGY4: Forhåndsvisning;3-DDAG-6PEGY5: Send liste;3-DDAG-77PALX: Lenke ressurs;3-DDAG-6PEGY6: Vil du slette gjeldende dokument?;3-DDAG-6PEGY7: -Velg verdi-;3-DDAG-6PEGY8: Ingen beskrivelse;3-DDAG-6PEGY9: Fjern valgte bilde fra siden;3-DDAG-6PEGYA: Alle dokumenter;3-DDAG-6PEGYC: Opprett dokument;3-DDAG-6PEGYD: Innstillinger;3-DDAG-6PEGYE: Systemet kan ikke slette dokumenter som han undernivåer eller dokumenter knyttet til seg.;3-DDAG-7RBESN: Søk: Skriv inn 3 bokstaver eller mer;3-DDAG-7RBESP: Kan ikke finne noen dokumenter;3-DDAG-7RBESQ: Søker;3-DDAG-7X8D97: Kopierer dokumenter...;3-DDAG-7X8D9B: Ingen dokumenter ble kopiert, kun vanlige dokumenter kan kopieres;3-DDAG-7X8D9T: Kopier;3-DDAG-7Y2M84: Laster;3-DDAG-7Y2M84: Søker;3-DDAG-7Y2MLH: Sletter dokument;3-DDAG-7Y2MLJ: Flytter dokument;3-DDAG-7Y2MLK: Arbeider;3-DDAG-7Y2MLL: CMS;3-DDAG-7Y2PN8: Vennligst vent;3-DDAG-7Y2MLM: Feil har oppstått;3-DDAG-7X8D9E: Systemet kopierte xxx dokument(er);3-DDAG-7Y2MLN: Systemet flyttet xxx dokument(er);3-DDAG-7Y2MLP: Systemet slettet xxx dokument(er);3-DDAG-7Y2PLR: Systemet endret layout på xxx dokument(er);3-DDAG-7Y2PJ2: Ingen dokumenter ble behandlet.;3-DDAG-829JHU: Lagrer innhold;3-DDAG-83ESDP: Filnavnet eksisterer allerede, vennligst endre filnavnet før opplasting.;3-DDAG-83ESFC: Filen $filename$ er lastet opp. Vil du legge den til i innholdet ;3-DDAG-7NBL8G: Sidetittelen er ikke unik, vennligst endre tittelen.;3-DDAG-829JHT: Kategori ( skriv 3 tegn eller mer – skill nivåer med / );3-DDAG-83ES9T: Ikke mer enn 3 nivåer er tillatt;3-DDAG-83ESAW: Vil du bruke dette bildet?;3-DDAG-83GFAN: Legg til nytt bilde;3-DDAG-83KESW: Logg inn Google accounts;3-DDAG-83KEU6: Logg ut Google accounts;3-DDAG-83KG8Y: Besøk/Besøkende;3-DDAG-83KG8Z: Endring;3-DDAG-83KG92: Gj.sn. tid;3-DDAG-83KG93: Topp 5 sider;3-DDAG-83KGAP: Datoperiode;3-DDAG-83KG94: I dag;3-DDAG-83KG95: I går;3-DDAG-83KG96: Siste 7 dager;3-DDAG-83KG97: Siste 30 dager;3-DDAG-83KGM3: Åpne GA;3-DDAG-83KGML: Logg ut Google;3-DDAG-6PEGYB: DO NOT CHANGE WCM.JS ENDS;3-DDAG-6PEHVK: DO NOT CHANGE INPSITEMAP.JS STARTS;3-DDAG-6PEHVL: Angi søkeord;3-DDAG-6PEHVM: Laster;3-DDAG-6PEHVN: Problemer med forbindelsen med server.;3-DDAG-6PEHVX: DO NOT CHANGE INPSITEMAP.JS ENDS;3-DDAG-6PEHWK: DO NOT CHANGE INPCONTENTDOCUMENTATTRIBUTES.JS STARTS;3-DDAG-6PEHWL: -Velg verdi-;3-DDAG-6PEHWM: [Full tilgang];3-DDAG-6PEHWQ: DO NOT CHANGE INPCONTENTDOCUMENTATTRIBUTES.JS ENDS;3-DDAG-6PEHWR: DO NOT CHANGE DATECONTROL.JS STARTS;3-DDAG-6PEHWS: Ma;3-DDAG-6PEHXR: Ti;3-DDAG-6PEHXS: On;3-DDAG-6PEHXT: To;3-DDAG-6PEHXU: Fr;3-DDAG-6PEHXV: Lø;3-DDAG-6PEHXW: Sø;3-DDAG-6PEHXX: Januar;3-DDAG-6PEHXZ: Februar;3-DDAG-6PEHY2: Mars;3-DDAG-6PEHY3: April;3-DDAG-6PEHY4: Mai;3-DDAG-6PEHY5: Juni;3-DDAG-6PEHY6: Juli;3-DDAG-6PEHY7: August;3-DDAG-6PEHY8: September;3-DDAG-6PEHY9: Oktober;3-DDAG-6PEHYA: November;3-DDAG-6PEHYB: Desember;3-DDAG-6PEHYH: DO NOT CHANGE DATECONTROL.JS ENDS;3-DDAG-6PFPZ7: DO NOT CHANGE CONTENTDOCUMENT STARTS;3-DDAG-6PFPZ8: Dokumentet blir sendt til valgte personer for kommentar. Du kan endre mottakere.;3-DDAG-6PFPZ9: Det er ikke valgt person til å kommentere på dokumentet. Velg person fra listen.;3-DDAG-6PFPZA: Du må skrive en kommentar før du kan returnere dokumentet.;3-DDAG-6PFPZB: Dokumentet returneres med kommentarer. Du kan endre kommentaren om ønskelig.;3-DDAG-6PFPZC: Angi en begrunnelse på hvorfor dokumentet avvises.;3-DDAG-6PFPZD: -Velg verdi-;3-DDAG-6PFPZY: Dokumentet sendes til godkjenner listet over. Du kan endre godkjenner om ønskelig.;3-DDAG-6PFPZZ: Dokumentet er ikke tildelt en godkjenner. Du kan velge godkjenner fra listen over, eller sende dokumentet til standard godkjenner.;3-DDAG-6PFQ22: Dokumentet sendes til web-redaktør listet over. Du kan endre web-redaktør om ønskelig.;3-DDAG-6PFQ23: Dokumentet er ikke tildelt web-redaktør. Du kan velge web-redaktør fra listen over, eller sende dokumentet til standard web-redaktør. ;3-DDAG-6PFQ24: Vil du godkjenne dokumentet?;3-DDAG-6PFQ25: DO NOT CHANGE CONTENTDOCUMENT ENDS;3-DDAG-6PMDZF: DO NOT CHANGE OTHER STARTS;3-DDAG-6PGFRC: Er du sikker på at du vil fjerne objektet?;3-DDAG-6PGFRL: Angi et navn på objektet.;3-DDAG-6PGFRM: Angi en menytittel.;3-DDAG-6PGFRN: Angi web-redaktør(er).;3-DDAG-6PGFRP: Angi standard web-redaktør.;3-DDAG-6PGFRQ: Angi godkjenner(e).;3-DDAG-6PGFRR: Angi standard godkjenner.;3-DDAG-6PGFRS: Du har foretatt endringer på fanen Arbeidflyt.;3-DDAG-6PMDZ4: Du har satt 'Bruk godkjenner' til 'Nei'.;3-DDAG-6PMDZ5: Følgende Innholdsdokumenter under dette menyvalget ;3-DDAG-6PMDZ6: vil få status '0' (Kladd):;3-DDAG-6PMDZ7: alle med status '2' (Godkjenner);3-DDAG-6PMDZ8: alle avvist fra status '2';3-DDAG-6PMDZ9: Innholdsdokumenter på høring med status '2' og på høring med avvist status, vil settes tilbake til status '0' \nnår de returneres fra høring.;3-DDAG-6PMDZA: Ønsker du å fortsette?;3-DDAG-6PMDZB: Dette krever at du lagrer css-klassen på nytt. Vil du fortsette?;3-DDAG-6PMDZC: Er du sikker på at du vil gjerne dette elementet?;3-DDAG-6PMDZD: Angi Klasse-navn.;3-DDAG-6PMDZE: Klasse-navnet må være unikt.;3-DDAG-6PPFLQ: Angi en lenke.;3-DDAG-6PPFLR: Anførselstegn er ikke tillatt her.\nDe kan kun benyttes i Events.;3-DDAG-6PPFLS: Angi en verdi i feltet 'Angi forfatter av nytt dokument'.;3-DDAG-6PPFLT: Angi en verdi i feltet 'Velg person for kommentar'.;3-DDAG-6PPFLU: Angi en verdi i feltet 'Velg ny godkjenner'.;3-DDAG-6PPFLV: Angi en verdi i feltet 'Velg ny web-redaktør'.;3-DDAG-6PSPJD: For å kunne foreta endringer i dokumentet, må du velge handlingsknappen 'Fjern fra web' \n eller du kan lage en kopi av dokumentet. Kopien vil erstatte dokumentet med status Publisert når det publiseres. \n Vil du lage en kopi av dokumentet?;3-DDAG-6PSPJE: Avhengig av hvor i arbeidsflyten dokumentet befinner seg, kan du velge en ny person i feltene 'Opprettet av', 'Kommentar', 'Godkjenner' eller 'web-redaktør'. Navnet må være hierarkisk.;3-DDAG-6PSPJF: Angi en begrunnelse på hvorfor dokumentet må fjernes fra web.;3-DDAG-6PSPJG: Vil du fjerne dokumentet fra web?;3-DDAG-6PSPJH: ;3-DDAG-6PSPJJ: ;3-DDAG-6PSPJK: ;3-DDAG-6PSPJL: ;3-DDAG-6PSPJM: ;3-DDAG-6PSPJN: ;3-DDAG-6PSPJP: ;3-DDAG-6PSPJQ: ;3-DDAG-6PSPJR: ;3-DDAG-6PSPJS: ;3-DDAG-6PSPJT: ;3-DDAG-6PSPJU: ;3-DDAG-6PSENQ: DO NOT CHANGE VIEW TEXTS STARTS;3-DDAG-6PSENR: Innstillinger;3-DDAG-6PSENS: Tilpasset informasjon;3-DDAG-6PSENT: Søk database;3-DDAG-6PSENU: Rediger søkeinnstillinger;3-DDAG-6PSENV: Alle servere;3-DDAG-6PSENW: [Kopi];3-DDAG-6PSEQ8: Innholdsside;3-DDAG-6PSEQ9: Listeside;3-DDAG-6PSEQA: Portalside;3-DDAG-6PSEQB: Mappe;3-DDAG-6PSEQC: Kobling;3-DDAG-6PSEQD: Nytt dokument;3-DDAG-6PSEQE: Kladd;3-DDAG-6PSEQF: Til høring;3-DDAG-6PSEQG: Til godkjenning;3-DDAG-6PSEQH: Til endelig godkjenning;3-DDAG-6PSEQJ: Avvist;3-DDAG-6PSEQK: Publisert;3-DDAG-6PSEQL: Arkiv;3-DDAG-6PSEQM: Forestående;3-DDAG-6PSEQN: Gått ut på dato;3-DDAG-6PSEQP: Rediger CSS-filer;3-DDAG-6PSEQQ: Konfigurasjonsdokument for web;3-DDAG-6PSEQR: Oppsettparametre;3-DDAG-6PSEQS: Rediger konfigurasjonsdokument;3-DDAG-6PSEQT: Rediger startside;3-DDAG-6PSEQU: Rediger konfigurasjon for siden;3-DDAG-6PSEQV: Felles;3-DDAG-6PSEQW: Private maler;3-DDAG-6PSEQX: Kun brukere;3-DDAG-6PSEQY: Dag(er);3-DDAG-6PSEQZ: Uke(r);3-DDAG-6PSER2: Måned(er);3-DDAG-6PSER3: Ubegrenset;3-DDAG-6PSER4: Under arbeid;3-DDAG-6PSER5: Arbeidskopi;3-DDAG-6PSER6: Innholdsdokumentet er beskyttet.;3-DDAG-6PSER7: Rediger innstillinger;3-DDAG-6PSER8: Registrering;3-DDAG-6PSER9: Nøkkelord;3-DDAG-6PSERA: Mottakere;3-DDAG-6PSERB: Tilpasset informasjon;3-DDAG-6PSERF: Annet;3-DDAG-6PSERC: Mer fra forfatter;3-DDAG-6PSERD: Rediger standardverdier;3-DDAG-6PSERE: Tilbakemelding til forfatter;3-DDAG-6PSP54: Abonner;3-DDAG-6PSP55: Opphev abonnement;3-DDAG-6PSP56: Kategorier mailingliste;3-DDAG-6PSP57: Forhåndsvisning;3-DDAG-6PSP58: Sendt fra mailingliste;3-DDAG-6PSP59: Dokumenter i mailingliste;3-DDAG-6PSP5A: Januar;3-DDAG-6PSP5B: Februar;3-DDAG-6PSP9P: Mars;3-DDAG-6PSP9Q: April;3-DDAG-6PSP9R: Mai;3-DDAG-6PSP9S: Juni;3-DDAG-6PSP9T: Juli;3-DDAG-6PSP9U: August;3-DDAG-6PSP9V: September;3-DDAG-6PSP9W: Oktober;3-DDAG-6PSP9X: November;3-DDAG-6PSP9Y: Desember;3-DDAG-6PSP9Z: Tekst e-post;3-DDAG-6PSPA2: Html e-post;3-DDAG-6PSPA3: ;3-DDAG-6PSPA4: ;3-DDAG-6UFAS4: Skjema;3-DDAG-6UTQ4H: Versjon;3-DDAG-6UTQ4J: Sist endret;3-DDAG-6UWBED: Forfatter;3-DDAG-6UWBEE: Status;3-DDAG-6UWBJL: Installert;3-DDAG-6UWBJN: Avinstallert;3-DDAG-6UWBJQ: Ny versjon er tilgjengelig ;3-DDAG-6UWBKF: Ikke lastet ned;3-DDAG-6VPRDU: Oppsett;3-DDAG-72KDEA: 404 Settings;3-DDAG-7NNKHJ: Multi-opplasting;3-DDAG-7NBL8G: Kan ikke lagre – URL er ikke unik ;3-DDAG-6PSERG: DO NOT CHANGE VIEW TEXTS STARTS",
	getText : function(key)
	{
		var txt = "";	
		var a = 0;
		var b = 0;
		a = SYM.client.lang.sztxts.indexOf( key );
		
		if ( a != -1 )
		{
			 b = SYM.client.lang.sztxts.indexOf(  ";", a+1 );	
			if ( b != -1 )
			{
				txt = SYM.client.lang.sztxts.substring( (a + key.length+1) , b   );
			}		
		}
		a = txt.indexOf( " " );
		if ( a == 0 )
			txt = txt.substring( 1 , txt.length );
		return txt;
	}
}
})()
SYM.client.modules.module = function ( obj )
{
	this.szname = obj.name;
	this.szid = obj.id;
	this.enabled = ( SYM.util.getCookieValue(obj.id) == "1" ? true : false);
	this.menuItems = null; 
	if (obj.actions != null && obj.actions[0] != null)
	{		
		this.menuItems = new Array(); 
		for (i = 0 ; i < obj.actions.length ; i++)
		{
			if (obj.actions[i] != null)
			{
				this.menuItems[i] = new SYM.client.modules.module.menuItem( obj.actions[i] );
			}				
		}	
	}
	
	this.load = function()
	{		
		var item = SYM.util.dom.getObject("system" + this.szid);
		if (item != null)
		{
			item.src = "inpMenuSelected.gif" 
	 	}
	}
	this.unload = function()
	{
		var item = SYM.util.dom.getObject("system" +this.szid);
		if (item != null)
		{
			item.src = "blank.gif" 
	 	}
	}
	
	this.add = function( items )
	{
		if (this.menuItems == null)
		{
			this.menuItems = new Array(); 
		}
		
		for (i = 0 ; i < items.actions.length ; i++)
		{
			if (items.actions[i] != null)
			{
				this.menuItems[i] = new SYM.client.modules.module.menuItem( items.actions[i] );
			}				
		}
	}
	
	return this
} 	
SYM.client.modules.module.menuItem = function(obj) {	
	this.action = null;
	this.szview  = "";
	this.click = null;	
	this.icon = null;
	this.szname = obj.name;
	this.other = null;		
	if ( obj.type == "create"  )
	{
		this.type = 2;
	}else if (obj.type == "action" )
	{
		this.type = 3;
	}else if (obj.type == "search" )
	{
		this.type = 4;
	}else if (obj.type == "help" )
	{
		this.type = 6;
	}else
	{
		this.type = 0;
	}	
	this.szview = obj.view;
	this.action = obj.action;
	if ( obj.icon != null)
	{this.icon = obj.icon;}
	if (obj.other != null)
	{this.other = obj.other;}	
	return this;
}
SYM.client.ui.tabs=
{
	items: new Array(),
	szdiv : "",
	type : 0,
	active:-1,
	init : function(obj , properties )
	{
		SYM.client.ui.tabs.szdiv = obj;
		if ( properties  != null )
		{
			SYM.client.ui.tabs.type = properties.type;
		} 
	},
	tab : function( obj )
	{
		this.name = obj.name;
		this.fn = obj.fn;
		this.width = (obj.width == null ? "100px": obj.width);
		this.szdiv  = obj.div;		
		this.pos = SYM.client.ui.tabs.items.length									
		this.id = SYM.client.ui.tabs.szdiv + "_tab_" + SYM.client.ui.tabs.items.length								
	},
	add:function(obj)
	{
		SYM.client.ui.tabs.items[ SYM.client.ui.tabs.items.length ] = new SYM.client.ui.tabs.tab( obj );	
		SYM.client.ui.tabs.render( SYM.client.ui.tabs.items[ SYM.client.ui.tabs.items.length-1 ] )
	},
	render:function(obj)
	{
		var szhtml = "";
		if (obj == null)
		{
	
		}else
		{
			// RENDER ONE						
			if(SYM.client.ui.tabs.items.length == 1)
			{
				// First item
				szhtml = "<ul class='tabs' id='"+ SYM.client.ui.tabs.szdiv +"_tabs'>"
			}
			szhtml = szhtml + "<li id='"+obj.id+"' onclick='SYM.client.ui.tabs.show("+obj.pos+")' onmouseover='$(this).addClass(\"ahov\")' onmouseout='$(this).removeClass(\"ahov\")'><div class='a'></div><div class='b' style='width:"+ obj.width +";'><p"+( SYM.client.ui.tabs.type == 1?" class='small'":"" )+">"+obj.name+"</p></div><div class='c'></div></li>"
			if(SYM.client.ui.tabs.items.length == 1)
			{
				// First item
				szhtml = szhtml + "</ul>"
				$( "#" +SYM.client.ui.tabs.szdiv ).append( szhtml);
			}else
			{
				$( "#" +SYM.client.ui.tabs.szdiv + "_tabs").append(szhtml );
			}
		}	
	},
	remove : function()
	{
		SYM.client.ui.tabs.items = new Array();
		$( "#" + SYM.client.ui.tabs.szdiv + "_tabs").remove();
	},
	show : function(item)
	{
		$( "#" +SYM.client.ui.tabs.szdiv + "_tabs").find(".atab").removeClass("atab");
		$( "#" +SYM.client.ui.tabs.szdiv + "_tab_"+item).addClass("atab");
		if (  SYM.client.ui.tabs.items[ item ].szdiv != "" )
		{
			$("#"+SYM.client.ui.tabs.items[ item ].szdiv ).fadeIn("slow");
			if ( SYM.client.ui.tabs.active != -1 && SYM.client.ui.tabs.active != item ){ $("#"+SYM.client.ui.tabs.items[ SYM.client.ui.tabs.active ].szdiv).hide();}
		}
		if ( SYM.client.ui.tabs.items[ item ].fn != null)
		{ SYM.client.ui.tabs.items[ item ].fn()} 
		SYM.client.ui.tabs.active = item;
	}
}
/*
SYM.client.ui.form = function( name ) 
{
	this.szname = name;
	this.formObjects = new Array();	
	this.add = function( obj )
	{	
		if (obj.items  == null)
		{
			this.formObjects[this.formObjects.length] = obj;
		}else
		{
			for ( var i = 0 ; i < obj.items.length ; i++)
			{
				this.formObjects[this.formObjects.length] = obj.items[i];	
			}
		}
	};	
	this.render = function( obj )
	{
		if (obj == null)
		{obj = document.body}
	
		for ( var i = 0 ; i < this.formObjects.length ; i++ )
		{
			obj.appendChild(this.formObjects[i])
		}
	}
	return this;
}
*/
SYM.client.ui.form = function( obj )
{
	this.tabs = null;
	this.activeTab = 0;
	this.form = obj.parent;
	SYM.client.ui.field.defaultClass = "client";
	this.save = function (  )
	{
		values = SYM.form.serialize(this.form.name);			
		var saveIt = new SYM.util.xhr( SYM.client.path + "/DominoConnectorSave?openagent&cmsdebug=1&edit=1&id="  +  parentID , function(){content.saved(this.getText()) } , values );	
		saveIt.init();
	}
	this.showTab = function( item )
	{
		SYM.client.ui.form.item.tab(this.tabs,item);
	}
	if ( obj.tabs != null)
	{		
		this.tabs = SYM.util.clone(obj.tabs);		
	}
	SYM.client.ui.form.render(obj);	
	// all is loaded now attach other events()
	/*
					editAreaLoader.init({
						id: "editor_UserHTML"  	// id of the textarea to transform		
						,start_highlight: true	// if start with highlight
						,allow_resize: "y"
						,toolbar: "search, go_to_line, |, undo, redo, |, select_font, |, syntax_selection, |, change_smooth_selection, highlight, reset_highlight, |, help"							,allow_toggle: true
						,display: "later"
						,language: "en"
						,syntax: "js"			
					})*/
	return this;
}
SYM.client.ui.form.storeNative = function( szform )
{
	if (szform == null )
	{
		szform = 0;
	}
	var elements = document.forms[szform].getElementsByTagName("INPUT");
	for (i =0  ; i < elements.length; i++)
	{
		field = elements[i];
		if (field.getAttribute("symfieldtype") != null)
		{
			var tryps = "SYM.client.ui.field." + field.getAttribute("symfieldtype")  + ".save('" + field.name + "')" ;
			field.value = eval(tryps)
		}
	}
	var elements = document.forms[szform].getElementsByTagName("SELECT");
	for (i =0  ; i < elements.length; i++)
	{
		field = elements[i];
		if (field.getAttribute("symfieldtype") != null)
		{
			var tryps = "SYM.client.ui.field." + field.getAttribute("symfieldtype")  + ".save('" + field.name + "')" ;
			field.value = eval(tryps)
		}
	}
 
	var elements = document.forms[szform].getElementsByTagName("TEXTAREA");
	for (i =0  ; i < elements.length; i++)
	{
		field = elements[i];
		if (field.getAttribute("symfieldtype") != null)
		{
			var tryps = "SYM.client.ui.field." + field.getAttribute("symfieldtype")  + ".save('" + field.name + "')" ;
			field.value = eval(tryps)
		}
	}
}
SYM.client.ui.form.render = function( obj )
{		
	if ( obj.parent == null )
	{obj.parent = document.body;}
	
	var newItem = SYM.util.dom.create(
	{ 
			type:"table", 
			id : "content_wrapper",
			attributes:
			[
				{ name:"cellpadding" , value:"0" },		
				{ name:"cellspacing" , value:"0" },
				{ name:"border" , value:"0" },				
				{ name:"width" , value:"100%" },
				{ name:"height" , value:"90%" }
			],
			items:
			[
				{
					type:"tbody",
					items: [
					{
						type:"tr",
						items:
						[
							{
								type:"td",
								attributes:[
									{ name:"width" , value:"3" },
									{ name:"height" , value:"3" },
									{ name:"valign" , value:"top" }
								],
								items:
								[
									{ 
										type:"img" ,  
										src:"/§dbfilepath/inpBGTL.gif"
									}
								]
							},
							{
								type:"td",
								attributes:[
									{ name:"vAlign" , value:"top" },
									{ name:"width" , value:"100%" },	
									{ name:"height" , value:"3" },
									{ name:"style" , value:"background-image:url("+ SYM.client.path +"/inpBGBGT.gif);background-repeat: repeat-x;"},
								]
							},
							{
								type:"td",
								attributes:[
									
									{ name:"height" , value:"3" },
									{ name:"vAlign" , value:"top" },
									{ name:"align" , value:"right" }
								],
								items:
								[
									{ 
										type:"img" ,  
										src:"/§dbfilepath/inpBGTR.gif"
									}
								]
							}
						]
					},
					{
						type:"tr",
						items:
						[
							{
								type:"td",
								szhtml:"&nbsp;",
								attributes:[
									{ name:"width" , value:"3" },	
									{ name:"style" , value:"background-image:url("+ SYM.client.path +"/inpBGBGL.gif);" },
								]
							},
							{
								type:"td",
								name : "symFormContent",
								attributes:[{ name:"vAlign" , value:"top" },{ name:"height" , value:"100%" }],
								items:	
								[
									{
										type:"div",
										id:"header",
										attributes:[ {name:"style", value:"left:13px;top:50px;width:100%;z-index:4;"} ],
										items:
										[
											{
												type:"div",
												attributes:[{ name:"class",value:"content_Header" }],
												items:
												[
													{
														type:"div",
														szhtml : obj.title,
														attributes:[ { name:"class",value:"content_Header_Txt" } ]
													},
													{
														type:"div",
														id : "symFormActions",
														attributes:[ { name:"style",value:"float:right" } ]
													}
												]
											}
										]
						
									}
								]
							},
							{
								type:"td",
								szhtml:"&nbsp;",
								attributes:[									
									{ name:"width" , value:"3" },									
									{ name:"align" , value:"right" },		
									{ name:"style" , value:"background-position: 1px 2px;background-image:url("+ SYM.client.path +"/inpBGBGR.gif);background-repeat: repeat-y;" },
								]
							}
						]
					}
					]
				}
			]			
		}
	);	
	obj.parent.appendChild( newItem );	
	// add the actions
	if (obj.actions != null)
	{
		var parentItem = SYM.util.dom.getObject("symFormActions");		
		for ( var i = 0 ; i < obj.actions.length ; i++)	
		{
			var actionItem = SYM.util.dom.create(
				{ 
					type:"a", 
					attributes:[ {name:"href" , value:obj.actions[i].fn }],
					items:
					[
						{ 
							type:"img", 
							src: obj.actions[i].icon ,
							attributes:[
								{name:"border" , value:"0"}
							]
						}
					]
				}
			);	
		
			parentItem.appendChild(actionItem);		
		}		
	}
	/* NOW WE HAVE DONE THE FUN PART, TRY GETTING WHAT THE USER WANTS TO DO WITH THE REST */
	if ( obj.layout == "tabs"  && obj.tabs != null)
	{			
		obj.parent.appendChild( SYM.client.ui.form.item.tab(obj) );		
		var parentItem = SYM.util.dom.getObject("symFormContent");
		var newTD = SYM.util.dom.create({ type:"td" , attributes:[ { name:"valign" , value:"top"} ] });
		for ( var i = 0 ; i < obj.tabs.length ; i++)
		{
			var newItem = SYM.util.dom.create( 
				{type:"div" , id : "content_" + i  , attributes:[{ name:"class" , value:"contentDiv" },{name:"style",value:"display:none;"} ]});	
			if (obj.tabs[i].items != null)
			{
				for ( var ii = 0 ; ii < obj.tabs[i].items.length ; ii++)
				{
					var nItem = SYM.client.ui.form.item(obj.tabs[i].items[ii] );
					if (nItem != null)
					{
						newItem.appendChild(nItem)
					}
				}
			}	
			newTD.appendChild(newItem);			
		}
		var wrapperTop = SYM.util.dom.create({
			type:"table",
			attributes:[ {name:"height",value:"100%" },{ name:"width" , value:"100%" }, { name:"cellpadding" , value:"2" }, { name:"cellspacing" , value:"2" } ],
			szclass:"contentTable",
			items:[
				{
					type:"tbody",
					items:[
						{ 
							type:"tr",
							items:[ 
								{
									type:"obj" , 
									value:newTD
								} 
							] 
						}
					]
				}
			]
		}
		)
		parentItem.appendChild( wrapperTop );					
	}
}
SYM.client.ui.form.item = function( obj )
{
	var newItem = null;
	if (obj.type == "column")
	{
		newItem = SYM.util.dom.create( { type:"div" , attributes:[{name:"style" , value:"padding-right:4px;float:left;" + obj.style }] } ) ;
	}else if( obj.type == "break" )
	{	
		newItem = SYM.util.dom.create( { type:"div" , attributes:[{name:"style" , value:"clear:both;" }] } ) ;
	}else if (obj.type == null)
	{
		// a field just add it.
		newItem =  obj;
	}
	
	if ( obj.items != null)
	{
		for (var i = 0 ; i < obj.items.length ; i++)
		{
			var iItem = SYM.client.ui.form.item( obj.items[i]   )	
			if (newItem == null)
			{
				newItem = iItem; 
    			}else
			{
				newItem.appendChild(iItem);		
			}
		}
	}
	return newItem;
}
SYM.client.ui.form.item.tab = function(obj , item)
{	
	if (item == null)
	{
		var parentItem = SYM.util.dom.create( { type:"div" , id:"symFormTabs" , attributes:[{name:"style" , value:"position:absolute;left:13px;top:15px; z-index:4"}] } );	
		// IS NEW PRINT OUT ALL
		for ( var i = 0 ; i < obj.tabs.length ; i++ )
		{
			var item = SYM.util.dom.create( 
			{
				type:"li" , 
				attributes:[{ name:"class" , value:"symFormTabItem" }],
					id:"symTab" + i , 
					
					items:
					[
						{
							type:"div",
							attributes:[{name:"class" , value:"tabA"}]
						},
						{
							type:"div",
							szhtml : obj.tabs[i].name,
							attributes:[
								{name:"class" , value:"tabB"},
								{name:"style" , value:"width:" + obj.tabs[i].width + "px"},
								{name:"onclick" , value:"parentForm.showTab('" + i + "')"}
							]
						},
						{
							type:"div",
							attributes:[{name:"class" , value:"tabC"}]
						}
					]
				} 
			)
			parentItem.appendChild(item );
		}	
		return parentItem;	
	}else
	{
		var parentItem = SYM.util.dom.getObject("symFormTabs");
		if (parentItem == null){return;}
		
		nodelist = parentItem.childNodes;

		var thisNode = null;
		for (var i = 0 ; i < parentItem.childNodes.length ; i++)
		{
			thisNode = nodelist[i];
			if (thisNode.className == "symFormTabItemActive")
			{
				thisNode.className = "symFormTabItem"
				SYM.util.dom.hide("content_" + i);
			}
		}
		SYM.util.dom.show("content_" + item);
		parentItem.childNodes[item].className = "symFormTabItemActive";		
		if (obj[item].fn != null)
		{ obj[item].fn(); }
	}
}
SYM.client.ui.field = 
{
	type : null,
	valid : null,
	defaultClass:null,
	defaultType : null,
	// add a field for tranforming.
	add : function( obj )
	{		
		if (obj != null )
		{
			if (obj.type == null && SYM.client.ui.field.defaultType != null)
			{obj.type = SYM.client.ui.field.defaultType;}
			if (obj.type != null)
			{
				// simpe, add default values.
				var fieldObject = SYM.form.getField( obj.field );				
				var newItem = null;
				// if null, try the document holder.
				if ( fieldObject == null )
				{fieldObject = SYM.util.dom.getObject( obj.field );}
				if (obj.szclass == null && SYM.client.ui.field.defaultClass != null)
				{					
					obj.szclass = SYM.client.ui.field.defaultClass + obj.type;
				}
				if(obj.required != null)
				{
					//alert("set this:" + obj.required);
				}
				if ( obj.type == "lookup")
				{
					newItem = SYM.client.ui.field.lookup.create( obj );								
					if (fieldObject != null && newItem != null)
					{					
						var szValue = SYM.form.getItemValue( fieldObject );	
						var objectParent = fieldObject.parentNode;
						objectParent.replaceChild(newItem,fieldObject) 	
						SYM.client.ui.field.lookup.set( obj.field , szValue);	
					}
					return newItem;
				}else if(obj.type=="timewidget"){
				                    newItem = SYM.client.ui.field.timewidget.create( obj  );
				                    if (fieldObject != null && newItem != null)
					{
						var szValue = SYM.form.getItemValue(fieldObject );
						var objectParent = fieldObject.parentNode;
						objectParent .replaceChild(newItem,fieldObject)
						SYM.client.ui.field.timewidget.set( obj.field , szValue);
					}else if (obj.parent != null)
					{
						obj.parent.appendChild(newItem);
					}
					return newItem;
                }else if(obj.type == "datewidget")
				{
					newItem = SYM.client.ui.field.datewidget.create( obj );
					if (fieldObject && newItem != null )
					{
						var szvalue = SYM.form.getItemValue( fieldObject ) ;
						var objectParent = fieldObject.parentNode;
						objectParent .replaceChild(newItem,fieldObject)
						SYM.client.ui.field.datewidget.set( obj.field , szvalue );
					}else if (obj.parent != null)
					{
						obj.parent.appendChild(newItem);
					}
					return newItem;
				} else if(obj.type == "tooltip")
				{
					newItem = SYM.client.ui.field.tooltip.create( obj );
					if (fieldObject && newItem != null )
					{
						var szvalue = SYM.form.getItemValue( fieldObject ) ;
						var objectParent = fieldObject.parentNode;
						objectParent .replaceChild(newItem,fieldObject)
						SYM.client.ui.field.tooltip.set( obj.field , szvalue );
					}
					return newItem;
				}else if(obj.type == "keyword")
				{
					newItem = SYM.client.ui.field.keyword.create( obj  );			
					if (fieldObject != null && newItem != null)
					{					
						var szValue = SYM.form.getItemValue(fieldObject );		
						var objectParent = fieldObject.parentNode;
						objectParent .replaceChild(newItem,fieldObject) 	
						SYM.client.ui.field.keyword.set( obj.field , szValue);	
					}
					return newItem;
				}else if(obj.type == "developer")
				{
					newItem = SYM.client.ui.field.developer.create( obj  );			
					if (fieldObject != null && newItem != null)
					{					
						var szValue = SYM.form.getItemValue(fieldObject );		
						var objectParent = fieldObject.parentNode;
						objectParent .replaceChild(newItem,fieldObject) 	
						SYM.client.ui.field.image.set( obj.field , szValue);	
					}			
					return newItem;
				}else if(obj.type == "radio")
				{
					newItem = SYM.client.ui.field.radio.create( obj  );			
					if (fieldObject != null && newItem != null)
					{					
						var szValue = SYM.form.getItemValue(fieldObject);						
						var objectParent = fieldObject.parentNode;
						objectParent .replaceChild(newItem,fieldObject) 	
						var ss = "SYM.client.ui.field.radio.set('"+ obj.field+"'  , '" + szValue+"');";
						window.setTimeout(ss , 100);
					}
					return newItem;
				}else if(obj.type == "image")
				{				
					newItem = SYM.client.ui.field.image.create( obj );																	if (fieldObject != null && newItem != null)
					{					
						var szValue = SYM.form.getItemValue(fieldObject );		
						var objectParent = fieldObject.parentNode;
						objectParent .replaceChild(newItem,fieldObject) 	
						SYM.client.ui.field.image.set( obj.field , szValue);	
					}
					return newItem;
				}else if(obj.type == "date")
				{	
					newItem = SYM.client.ui.field.date.create( obj );							
					if (fieldObject && newItem != null )
					{			
						var szvalue = SYM.form.getItemValue( fieldObject ) ;
						var objectParent = fieldObject.parentNode;
						objectParent .replaceChild(newItem,fieldObject) 	
						SYM.client.ui.field.date.set( obj.field , szvalue );
					}
					return newItem;
				}else if(obj.type == "select")
				{
					newItem = SYM.client.ui.field.select.create(obj);
					if ( fieldObject  != null && newItem  != null) 
					{						
						var szValue = SYM.form.getItemValue(fieldObject );		
						var objectParent = fieldObject.parentNode;
						objectParent .replaceChild(newItem,fieldObject) 	
						SYM.client.ui.field.select.set( obj.field , szValue);	
					}
					return newItem;
				}else if(obj.type == "author")
				{
					return null;
				}else if(obj.type == "keyword")
				{
					newItem = SYM.client.ui.field.keyword.create(obj);
					if ( fieldObject  != null && newItem != null ) 
					{						
						var szValue = SYM.form.getItemValue(fieldObject );		
						var objectParent = fieldObject.parentNode;
						objectParent .replaceChild(newItem,fieldObject) 	
						SYM.client.ui.field.keyword.set( obj.field , szValue);	
					}
					return newItem;
				}else
				{
					newItem = eval("SYM.client.ui.field." + obj.type + ".create(obj )");
					if ( fieldObject  != null && newItem != null) 
					{						
						var szValue = SYM.form.getItemValue(fieldObject );		
						var objectParent = fieldObject.parentNode;
						objectParent .replaceChild(newItem,fieldObject) 	
						eval("SYM.client.ui.field." + obj.type + ".set( obj.field , szValue )");
					}
					return newItem;
				}							
			}
		}	
	},
	setAttributes : function( obj  , extra)
	{				
		attribes = new Array();
		if (obj.classname != null)
		{attribes.push({ name:"class",value:obj.classname });}
		if (obj.style != null)
		{attribes.push({ name:"style",value:obj.style });}
		if (obj.value != null)
		{attribes.push({ name:"value",value:obj.value });}
		
		if (extra)
		{attribes.push(extra);}
		return attribes;
	},
	// Serializes an object for store.
	serialize:function()	
	{
		return true;
	},
	/* set the value of the field, can be JSON or text. If JSON then we have a structure */
	set : function( obj1 , obj2 )
	{
		return true;	
	}
}
SYM.client.infobar = 
{
	id : "status_info",
	type : "status_green",
	timeout : null,
	show:function( text , obj  )
	{
		if (obj == null){ obj = new Object(); }
		if (obj.id != null){ SYM.client.infobar.id = obj.id; }
		if (obj.type != null){ SYM.client.infobar.type = obj.type; }
		$( "#" + SYM.client.infobar.id +"_content" ).html( text );
		$( "#" + SYM.client.infobar.id).addClass( SYM.client.infobar.type ).slideDown( 'slow' );
		SYM.client.infobar.timeout = window.setTimeout
		(
			"$('#"+ SYM.client.infobar.id +"').slideUp( 'slow' );", 
			(obj.delay == null ? 5000 : obj.delay )
		);
	},
	hide : function( obj )
	{
		if (SYM.client.infobar.timeout != null)
		{ window.clearTimeout(SYM.client.infobar.timeout) ;SYM.client.infobar.timeout= null;}
		$('#'+ SYM.client.infobar.id).slideUp('slow');
		return;
	}
}
SYM.client.ui.field.date =
{
	create:function( obj )
	{
		var newdiv= SYM.util.dom.create(
		{
			type:"div",
			attributes:[{name:"class" , value:"fieldDate"}],
			name:"fieldwrapper_" + obj.field	
		});
		if (obj.label != null)
		{
			// add a label
			 Adiv= SYM.util.dom.create(
			{
				type:"div",
				attributes:[{name:"class" , value:"clientLabel"}]
			});
			Adiv.appendChild(document.createTextNode( obj.label ));
			newdiv.appendChild(Adiv);
		}
		// add a div that floats:
		Adiv= SYM.util.dom.create(
		{
			type:"div",
			attributes:[{name:"class" , value:"divA"}],
			items:
			[
				{
					type : "text",
					name : obj.field,				
					attributes : [ 
						{ name:"readonly" , value:"true" } ,
						{ name:"value" , value:"" } ,
						{ name:"symfieldtype" , value:"date" } ,
					]			
				}
			]
		});		
		newdiv.appendChild(Adiv);		
		Adiv= SYM.util.dom.create(
		{
			type:"div",			
			attributes:[{name:"class" , value:"divB"}],
			items:
			[
				{
					type : "div",
					id: obj.field+ "_dateimage",
					attributes:[ { name:"class",value:"fieldDateIcon" } ],
					events : [{ type:"mouseup", action: (  function() {  SYM.client.ui.field.date.action( obj.field );  }   ) }]
				}				
			]
		});
		newdiv.appendChild(Adiv);
		Adiv= SYM.util.dom.create(
		{
			type:"div",
			attributes:[{name:"class" , value:"break"}]
		});
		newdiv.appendChild(Adiv);
		Adiv= SYM.util.dom.create(
		{
					type:"div",
					name : obj.field + "_cal",
					attributes : [ { name:"style" , value: "position:absolute;left:0px;top:0px; z-index:400" } ]
		});
		document.body.appendChild(Adiv);
		return newdiv;
	},
	action : function( name )
	{
		var pos =  SYM.util.dom.findPos(SYM.util.dom.getObject(name+"_dateimage")) 	
		SYM.util.dom.getObject( name +  "_cal").style.top = pos[1] + 17;
		SYM.util.dom.getObject(name + "_cal").style.left = pos[0]  +2;
		SYM.client.ui.calendar.setDate( SYM.form.getField(name,true), SYM.form.getItemValue(name,true,null,true)  , name)
		return this;
	},
	
	set:function( name , value )
	{
		var field = SYM.form.getField( name );	
		field.value = value ;
		return field;
	},
	save:function( name )
	{		
			return SYM.form.getItemValue(name , true, null, true);
	},
	get:function( name )
	{		
		return SYM.form.getItemValue(name , null , false , true);
	}
}
SYM.client.ui.field.image =
{
	create:function( obj  )
	{
		var newdiv= SYM.util.dom.create(
		{
			type:"div",
			attributes:[{name:"style" , value:"clear:both;"}],
			name:"fieldwrapper_" + obj.field
		});
		if (obj.label != null)
		{
			// add a label
			 Adiv= SYM.util.dom.create(
			{
				type:"div",
				attributes:[{name:"class" , value:"clientLabel"}]
			});
			Adiv.appendChild(document.createTextNode( obj.label ));
			newdiv.appendChild(Adiv);
		}
		Adiv= SYM.util.dom.create(
		{
			type:"div",
			attributes:[{name:"style" , value:"float:left;padding-top:2px;"}],
			items:
			[
				{
					type:"img",
					name:"add_" + obj.field,
					attributes : [ 
						{ name:"src" , value: SYM.client.path + "/inpdlgAdd.gif" }
					],
					events : [
						{ type:"click", action: (  function() {  SYM.client.ui.media.image.insert( obj.field );  }   ) }
					]			
				}
			]
		});
		newdiv.appendChild(Adiv);
		Adiv= SYM.util.dom.create(
		{
			type:"div",
			attributes:[{name:"style" , value:"float:left;padding-top:2px;"}],
			items:
			[
			{
			type:"img",
			name:"preview_" + obj.field,
			attributes : [ 
				{ name:"src" , value: SYM.client.path + "/inpdlgPreview.gif" }
			],
			events : [
					{ type:"click", action: (  function() {  SYM.client.ui.media.image.preview( obj.field);  }   ) }
			]
			
			}
			]
		});
		newdiv.appendChild(Adiv);
		
		Adiv= SYM.util.dom.create(
		{
			type:"div",
			attributes:[{name:"style" , value:"float:left;padding-top:2px;"}],
			items:
			[
				{
					type:"img",
					name:"remove_" + obj.field,
					attributes : [ 
						{ name:"src" , value: SYM.client.path + "/inpdlgRemove.gif" }				
					],
					events : [{ type:"click", action: (  function() {  SYM.client.ui.media.image.del( obj.field);  }   ) }]
				}
			]
		});
		newdiv.appendChild(Adiv);
		newfield = SYM.util.dom.create(
			{
				type:"hidden",
				name : obj.field,
				attributes : [ 
					{ name:"symfieldtype" , value:"image" }
				]
			}
		)
		newdiv.appendChild(newfield );
		Adiv= SYM.util.dom.create(
		{
			type:"div",
			attributes:[{name:"style" , value:"float:left;padding:2px;"}],
			items:
			[
				{
					type:"text",
					name:"disp" + obj.field,
					attributes : [ { name:"readonly" , value:"true" }]
				}
			]
		});
		newdiv.appendChild(Adiv);
		return newdiv;
	},
	update:function( name , value )
	{		
		if (value != null && value != "" )
		{		
			SYM.form.setItemValue(name  , value , null , false, true );
			values = value.split("|")
			SYM.form.setItemValue("disp" + name  , values[1]);
		}else
		{
			SYM.form.setItemValue(name  , ""  , null , false, true);
			SYM.form.setItemValue("disp" + name  , "");
		}
	},
	set:function( name , value )
	{
		SYM.client.ui.field.image.update( name , value);
		return true;
	},
	save : function(name)
	{
		var values = SYM.form.getField( name ).value;
		return values;
	},
	
	get:function(name)
	{
		return SYM.form.getItemValue(name , null , false , true );
	}
}
SYM.client.ui.field.lookup =
{
	create:function( obj  )
	{
		var newdiv= SYM.util.dom.create(
		{
			type:"div",
			name:"fieldwrapper_" + obj.field,	
			attributes : [ 
				{ name:"style" , value:"" } 
			]
		});
		
		if (obj.label != null)
		{
			// add a label
			 Adiv= SYM.util.dom.create(
			{
				type:"div",
				attributes:[{name:"class" , value:"clientLabel"}]
			});
			Adiv.appendChild(document.createTextNode( obj.label ));
			newdiv.appendChild(Adiv);
		}
		attrib =  [ 
				{ name:"symfieldtype" , value:"lookup" } ,
				{ name:"style" , value:"float:left;border:0px;" } ,
				{ name:"cmsview" , value:obj.view } 
			]
		if (obj.database != null)
		{attrib.push( {name:"symfielddb" , value:obj.database} )}
		if (obj.lookupfield != null)
		{
			attrib.push( {name:"symfieldfield" , value:obj.lookupfield} )
		}else
		{
			// set default value
			attrib.push( {name:"symfieldfield" , value:"1"} )
		}
		var newfield = SYM.util.dom.create(
		{
				type : "text",
				name : obj.field,
				attributes : attrib,
				events : [
					{ type:"keyup", action: (  function() {  SYM.client.ui.field.lookup.action( obj.field );  }   ) }
				]
			}
		);
		var newdiv2= SYM.util.dom.create(
		{
			type:"div",			
			attributes : [ 
				{ name:"class" , value:"clientTypeAHead" } 
			]
		});
		newdiv2.appendChild(newfield);
		newdiv.appendChild(newdiv2);
		var newimage =  SYM.util.dom.create(
		{
				type : "img",
				name : obj.field+ "_dateimage",
				attributes : [ 
					{ name:"src" , value: SYM.client.path + "/ajax_drop.gif" },
					{ name:"style" , value:"padding-left:0px;" }
				],
		
				events : [
					{ type:"mouseup", action: (  function() {  SYM.client.ui.field.lookup.action( obj.field , true );  }   ) }
				]
			}
		);	
		newdiv2.appendChild(newimage);
		return newdiv;
	},
	updatePos : function( name )
	{
		//alert(name)
	},
	action : function(obj , override)
	{	
		var field = SYM.form.getField(obj);
		if (field.value.length >= 3 || override)
		{			
			if (override && SYM.util.dom.getObject( "values_" + obj  ) != null)
			{
				SYM.util.dom.remove("values_" + obj)
			}else
			{
				new SYM.util.xhr( SYM.client.path + "/displookup?readform&" + ( field.getAttribute("symfielddb") != null ? "d=" + field.getAttribute("symfielddb") + "&" : "") +  ( field.getAttribute("symfieldfield") != null ? "c=" + field.getAttribute("symfieldfield") + "&" : "") +  "v="+field.getAttribute("cmsview") + "&p=1&n=10&k="  + field.value   ,  "SYM.client.ui.field.lookup.paint( '" + obj  + "' ,  this.getText() )" ).init();
			}
		}else
		{
			SYM.util.dom.remove("values_" + obj);		
		}						
	},
	paint:function( name , obj )
	{
		valueDiv = SYM.util.dom.getObject("values_" + name);
		if (valueDiv != null)
		{
			valueDiv.parentNode.removeChild(valueDiv);
		}			
		var values = eval("(" + obj + ")");
		if(values.items.length  == 0)
		{return;}		
		valueDiv = SYM.util.dom.create(
		{ 
				type:"div" , 
				name:"values_" + unescape(name),
				attributes : [ 
					{ name:"class" , value:"symFieldLookup" }
				]
			}
		)
		SYM.util.dom.addEvent( window , "scroll" ,  new Function("SYM.client.ui.field.lookup.updatePos('" + name + "')"));	
		document.body.appendChild(valueDiv)	
		
		var field = SYM.form.getField( name );
		var pos = SYM.util.dom.findPos(field);
		valueDiv.style.width = field.offsetWidth;
		valueDiv.style.left = pos[0] + "px";
		valueDiv.style.top = (pos[1]+field.offsetHeight) + 2 + "px";
		var itemC = null;
		for ( iobj = 0 ; iobj < values.items.length ; iobj++)
		{
			itemC = SYM.util.dom.create( {type:"div",name:"item_"+ i + name , attributes:[{ name:"class" , value:"symFieldLookupItem" }] } );	
			SYM.util.dom.hover( itemC , "symFieldLookupItem-Hover" , "symFieldLookupItem" );	
			sz = unescape(values.items[iobj].item[0].value);
			SYM.util.dom.addEvent( itemC , "click" ,  new Function("SYM.client.ui.field.lookup.update('" + name + "','" + sz + "')"));			
			itemC.appendChild(document.createTextNode(unescape(values.items[iobj].item[0].value)));
			valueDiv.appendChild(itemC);
		}
 	},
	
	set:function( name , value )
	{
		SYM.form.getField(name).value = value		
	},
	update:function( name , value )
	{
		SYM.form.setItemValue(name , unescape(value) );
		SYM.util.dom.remove("values_" + name);				
	},
	save:function( name )
	{
		return SYM.form.getField(name).value;
	},
	get:function()
	{
		return SYM.form.getField(name).value
	}
}	
SYM.client.ui.field.keyword =
{
	setValues : function (name , type , values)	
	{
		var newdiv = SYM.util.dom.getObject("fieldwrapper_" + name);
		var fielditems = eval("(" + values + ")"); // do object from the result.		
		if (type == "checkbox" || type == "radio")
		{
			for ( var icount = 0 ; icount < fielditems.items.length ; icount++ )
			{						
				if (fielditems.items[icount].item[0].value != null)
				{				 
					newfield = SYM.util.dom.create(
					{
						type : type,
						name : "item_" + name,
						linebreak:true,
						attributes : [ 
							{ name:"value" , value: unescape(fielditems.items[icount].item[0].value)  } 						
						]
					}
					);
					newdiv.appendChild(newfield);
				}
			}	
		}else
		{
			var attribes = new Array();
			for ( var icount = 0 ; icount < fielditems.items.length ; icount++ )
			{						
				if (fielditems.items[icount].item[0].value != null)
				{			 
					attribes.push({ name:"option" , value: unescape(fielditems.items[icount].item[0].value)  });
				}
			}	
			newfield = SYM.util.dom.create(
					{
						type : type,
						name : "item_" + name,
						linebreak:true,
						attributes : attribes
					}
			);
			if (newdiv != null && newfield != null)
			{newdiv.appendChild(newfield);}
		}
		SYM.client.ui.field.keyword.set( SYM.form.getField(name).value , name );
		return newdiv;
	},
	create:function( obj  )
	{		
		var newdiv= SYM.util.dom.create(
		{
			type:"div",
			name:"fieldwrapper_" + obj.field
		});
	
		if (obj.label != null)
		{
			// add a label
			 Adiv= SYM.util.dom.create(
			{
				type:"div",
				attributes:[{name:"class" , value:"clientLabel"}]
			});
			Adiv.appendChild(document.createTextNode( obj.label ));
			newdiv.appendChild(Adiv);
		}
		var newfield = SYM.util.dom.create(
		{
				type : "hidden",
				name : obj.field,
				attributes : [ 
					{ name:"symfieldtype" , value:"keyword" }			
				]
			}
		);
		newdiv.appendChild(newfield);									 		
		var szurl =  SYM.client.path + "/dispLookup?readform&v=lupKeyword&k=" + obj.key + "&c=keywords";			
		var szcall = "SYM.client.ui.field.keyword.setValues( \"" + obj.field  + "\" , \""+ obj.fieldtype +"\" ,  this.getText() )"
		new SYM.util.xhr( szurl , szcall  ).init();					
	},
	
	set:function( value, name)
	{
		SYM.form.setItemValue( SYM.form.getField("item_" + name), value , null , false , true );
	},
	save:function(name)
	{
		return SYM.form.getItemValue( name  , null, false , true );
	},
	get:function( name )
	{
		return SYM.form.getItemValue( name  , null, false , true  );
	}
}
SYM.client.uniqueInfo = function()
{
	this.last = 0;
	this.delay = 500;
	this.timeout = null;
	this.reset = function() { this.last=0; this.currentString="" } 	
 }; 
SYM.client.unique = function( obj )
{
	this.done = false;
	this.id = (obj.field == null?obj:obj.field);
	this.column = ( obj.column == null?"4":obj.column )
	this.view = ( obj.view == null?"pages":obj.view )
	this.timer = null;
	this.unique = true;
	this.callback = ( obj.fn == null?null:obj.fn );
	this.keyup = function()
	{		
		if ( this.timer != null)
		{
			window.clearTimeout(this.timer);
			this.timer = null;	
		}		
		this.timer = window.setTimeout(  SYM.bind(this.check,this)  , 2000 );
	}
	
	this.create = function (fn)
	{	
		SYM.util.dom.addEvent( SYM.form.getField(this.id) , "keyup" , SYM.bind(this.keyup , this));		
	}
	this.check = function()
	{		
		if (this.timer != null)
		{
			window.clearTimeout(this.timer);
			this.timer = null;	
		}
		var id = SYM.form.getItemValue( this.id );		
		var szurl =  SYM.client.path + "/dispLookup?readform&v="+ this.view +"&k=" +  id + "&c=" + this.column + "&p=0&now=" + new Date();
		new SYM.util.xhr( szurl ,  "response( '"  + this.id +"' ,  this.getText() )"  , null , this  ).init();			
	}
	
	this.response = function( name , obj )
	{				
		this.done = true;
		var values = eval("(" + obj + ")");
		if (values.items != null && values.items.length >= 1)
		{
			if ( values.items[0].item[0].value != szDocID)
			{
				this.unique = false;
				ff = SYM.form.getField(name);
				ff.style.backgroundColor  = "#FF9393"	
				ff.setAttribute("symUnique" , "false");
			}else
			{
				ff = SYM.form.getField(name);
				ff.style.backgroundColor  = ""	
				ff.setAttribute("symUnique" , "true");
			}		 
		}else
		{
			ff = SYM.form.getField(name);
			ff.style.backgroundColor  = ""	
			ff.setAttribute("symUnique" , "true");
		}
		if (this.callback != null)
		{	
			this.callback(this.unique)
		}
		return true;	
	}
}
	
/* TEXT FIELD */
SYM.client.ui.field.text =
{
	create:function( obj ,  fieldObject  )
	{
		fieldObject  = SYM.form.getField( obj.field )
		var newdiv= SYM.util.dom.create(
		{
			type:"div",
			name:"fieldwrapper_" + obj.field
		});
	
		if (obj.label != null)
		{
			// add a label
			 Adiv= SYM.util.dom.create(
			{
				type:"div",
				attributes:[{name:"class" , value:"clientLabel"}]
			});
			Adiv.appendChild(document.createTextNode( obj.label ));
			newdiv.appendChild(Adiv);
		}
		
		var attribes = SYM.client.ui.field.setAttributes( obj  , { name:"symfieldtype" , value:"text" } );	
		
		var newfield = SYM.util.dom.create(
		{
				type : "text",
				name : obj.field,
				szclass : obj.szclass,
				attributes :  attribes 
			}
		);
		newdiv.appendChild(newfield);						
		return newdiv;
	},
	
	set:function(  name  , value )
	{
		SYM.form.getField( name).value =  value 
	},
	save:function(name)
	{
		return SYM.form.getField(  name  ).value;
	},
	get:function( name )
	{
		return SYM.form.getField(  name  ).value
	}
}
/* TEXT AREA FIELD */
SYM.client.ui.field.textarea =
{
	create:function( obj ,  fieldObject  )
	{
		fieldObject  = SYM.form.getField( obj.field )
		var newdiv= SYM.util.dom.create(
		{
			type:"div",
			name:"fieldwrapper_" + obj.field
		});
	
		if (obj.label != null)
		{
			// add a label
			 Adiv= SYM.util.dom.create(
			{
				type:"div",
				attributes:[{name:"class" , value:"clientLabel"}]
			});
			Adiv.appendChild(document.createTextNode( obj.label ));
			newdiv.appendChild(Adiv);
		}
		var attribes = SYM.client.ui.field.setAttributes( obj ,{ name:"symfieldtype" , value:"textarea" }) 
		var newfield = SYM.util.dom.create(
			{ type : "textarea",name : obj.field,attributes:attribes,szclass : obj.szclass}
		);
		newdiv.appendChild(newfield);				
		return newdiv;
	},
	
	set:function( name , value )
	{
		 SYM.form.getField( name).value =  unescape(value);
	},
	save:function(name)
	{
		return SYM.form.getField(  name  ).value;
	},
	get:function( name )
	{
		return SYM.form.getField( name).value;
	}
}
/* RADIO BOX */
SYM.client.ui.field.radio =
{
	create:function( obj )
	{
		var newdiv= SYM.util.dom.create(
		{
			type:"div",
			name:"fieldwrapper_" + obj.field
		});
	
		if (obj.label != null)
		{
			// add a label
			 Adiv= SYM.util.dom.create(
			{
				type:"div",
				attributes:[{name:"class" , value:"clientLabel"}]
			});
			Adiv.appendChild(document.createTextNode( obj.label ));
			newdiv.appendChild(Adiv);
		}
		var attribes = SYM.client.ui.field.setAttributes( obj ,{ name:"symfieldtype" , value:"radio" }) 
		if (obj.values != null)
		{
			for ( i = 0 ; i <obj.values.length ; i++)
			{
				attribes.push({ name:"value" , value: obj.values[i]  });		
			}
		}
		var newfield = SYM.util.dom.create(
			{ type : "radio" , linebreak:obj.linebreak,name : obj.field,attributes:attribes }
		);
		newdiv.appendChild(newfield);				
		return newdiv;
	},
	
	set:function( name , value )
	{
		SYM.form.setItemValue( name , value , null , false , true );		
	},
	save:function(name)
	{
		return SYM.form.getItemValue( name  , false, null , true );
	},
	get:function( name )
	{
		return SYM.form.getItemValue( name , false, null, true );
	}
}
/* CHECKBOX BOX */
SYM.client.ui.field.checkbox =
{
	create:function( obj )
	{
		var newdiv= SYM.util.dom.create(
		{
			type:"div",
			name:"fieldwrapper_" + obj.field
		});
	
		if (obj.label != null)
		{
			// add a label
			 Adiv= SYM.util.dom.create(
			{
				type:"div",
				attributes:[{name:"class" , value:"clientLabel"}]
			});
			Adiv.appendChild(document.createTextNode( obj.label ));
			newdiv.appendChild(Adiv);
		}
		var attribes = new Array(); //SYM.client.ui.field.setAttributes( obj ,{ name:"symfieldtype" , value:"checkbox" }) 
		if (obj.values != null)
		{
			for ( i = 0 ; i <obj.values.length ; i++)
			{
				attribes.push({ name:"value" , value: obj.values[i]  });		
			}
		}
		
		var newfield = SYM.util.dom.create(
			{ type : "hidden" , name : obj.field,attributes:[{ name:"symfieldtype" , value:"checkbox" } ]}
		);
		newdiv.appendChild(newfield);
		newfield = SYM.util.dom.create(
			{ type : "checkbox" , linebreak:obj.linebreak,name : "disp_" + obj.field,attributes:attribes }
		);
		newdiv.appendChild(newfield);				
		return newdiv;
	},
	
	set:function( name , value )
	{
		SYM.form.getField(name ).value = value;
		SYM.form.setItemValue( "disp_" + name , value , null , false , true );		
	},
	save:function(name)
	{	
		return SYM.form.getItemValue(  "disp_" +name , false , null , true  );
	},
	get:function( name )
	{
		return SYM.form.getItemValue(  "disp_" +name , false , null , true  );
	}
}
/* SELECT BOX */
SYM.client.ui.field.select =
{
	create:function( obj )
	{
		var newdiv= SYM.util.dom.create(
		{
			type:"div",
			name:"fieldwrapper_" + obj.field
		});
	
		if (obj.label != null)
		{
			// add a label
			 Adiv= SYM.util.dom.create(
			{
				type:"div",
				attributes:[{name:"class" , value:"clientLabel"}]
			});
			Adiv.appendChild(document.createTextNode( obj.label ));
			newdiv.appendChild(Adiv);
		}
		var attribes = SYM.client.ui.field.setAttributes( obj ,{ name:"symfieldtype" , value:"select" }) 
		if (obj.values != null)
		{
			for ( i = 0 ; i <obj.values.length ; i++)
			{
				attribes.push({ name:"option" , value: obj.values[i]  });		
			}
		}
		var newfield = SYM.util.dom.create(
			{ type : "select" , multi : obj.multi ,name : obj.field,attributes:attribes }
		);
		newdiv.appendChild(newfield);				
		return newdiv;
	},
	
	set:function( name, value)
	{	
		SYM.form.setItemValue(  name , value , null  , false , true);
	},
	save:function(name)
	{
		return SYM.form.getItemValue(  name ,  null, false , true   );
	},
	get:function( name )
	{
		return SYM.form.getItemValue( name ,  null, false , true );
	}
}
SYM.client.ui.rearange = function( mapping )
{
	findParent = function( node )
	{
		tmpnode = node;
		
		while(tmpnode.parentNode != null)
		{
			tmpnode = tmpnode.parentNode;					
			if (tmpnode.id != null && tmpnode.id.indexOf("field") != -1)
			{
				return tmpnode;
			}
		}		
		return node;
	}
	fieldMapping = mapping.split(",")	
	var form = SYM.util.dom.getObject("formContainer");
	if (form == null){return false;}	
	for (fm = 0 ; fm < fieldMapping.length ; fm++)
	{
		obj = SYM.util.dom.getObject( "fieldwrapper_" + fieldMapping[fm] );
		if (obj == null)
		{obj = SYM.util.dom.getObject( fieldMapping[fm] );}
		if (obj == null)
		{obj = SYM.form.getField( fieldMapping[fm] );}
	
		obj  = findParent(obj);
		if (obj != null)
		{
			form.appendChild(obj);			
		}else
		{alert("no show");}
	}
}
/* DEVELOPER FIELD */
SYM.client.ui.field.developer =
{
	create:function( obj   )
	{
		var newdiv= SYM.util.dom.create(
		{
			type:"div",
			name:"fieldwrapper_" + obj.field
		});
	
		if (obj.label != null)
		{
			// add a label
			 Adiv= SYM.util.dom.create(
			{
				type:"div",
				attributes:[{name:"class" , value:"clientLabel"}]
			});
			Adiv.appendChild(document.createTextNode( obj.label ));
			newdiv.appendChild(Adiv);
		}
				
		var newfield = SYM.util.dom.create(
		{
				type : "textarea",
				name :  obj.field,
				szclass : obj.szclass,
				attributes  : SYM.client.ui.field.setAttributes( obj  , { name:"symfieldtype" , value:"developer" }) 		
			}
		);		
//		newdiv.appendChild( SYM.util.dom.create({ type:"hidden" ,  name:obj.field , attributes :  [{ name:"symfieldtype" , value:"developer" }] }) );					
		newdiv.appendChild(newfield);						
		return newdiv;
	},
	
	set:function(  name , value )
	{		
		var  f = SYM.form.getField( name  )
		if (f == null)
		{
			f = SYM.form.getField( "cp_" + name  )
		}
		f.value  =  unescape(value);
		
	},
	save:function(name)
	{
		var values =  eval("editAreaLoader.getValue('"+name+"')") ;
		if (SYM.util.ie)
		{
			return values.replace(/\r\n/g, "\n");
		}else
		{
			return values
		}
	},	
	get:function( name )
	{			
		//SYM.form.setItemValue( name , editAreaLoader.getValue( name ).replace (/\t/g , "@TAB")) 
		return editAreaLoader.getValue( name )
	}
}
/* KEYWORD WIDGET FIELD */
SYM.client.ui.field.keywordwidget =
{
    /**
     * Create keyword widget field
     *
     * @param obj
     * @param fieldObject
     */
    create:function(obj, fieldObject)
    {
        fieldObject = SYM.form.getField(obj.field);
		var wordlength = ( obj.length == null?-1:obj.length ); // add a check, only want to search after xx number of chars.
        //create root div
        var newdiv = SYM.util.dom.create(
        {
            type:"div",
            name:"fieldwrapper_" + obj.field
        });
        //add label        
        if (obj.label != null)
        {
            // add a label
            Adiv = SYM.util.dom.create(
            {
                type:"div",
                attributes:[{name:"class" , value:"clientLabel"}]
            });
            Adiv.appendChild(document.createTextNode(obj.label));
            newdiv.appendChild(Adiv);
        }
        //create text input field, that is base element
        var attribes = SYM.client.ui.field.setAttributes(obj, { name:"symfieldtype" , value:"text"  });
        var attribes = SYM.client.ui.field.setAttributes(obj, new Array( {name:"symfieldtype" , value:"text"} ) );
        var newfield = SYM.util.dom.create({
            type : "text",
            name : obj.field,
            szclass : obj.szclass,
            attributes :  attribes
        });
        // keywordwidget initialization
        var multSeparChar = ', ';
        var config = {
            isVisibleOnblur: false,
            multSeparChar: multSeparChar,
            width:250
        };
	if (obj.width != null){config.width = obj.width;}
        var selectFrame = SYM.client.ui.field.keywordwidget.selector(obj, newfield, selectCurrent, config);
        var dataProcessor = SYM.client.ui.field.keywordwidget.datapreparing(obj);
        var previousValue;
        var timeout;
        var hasFocus;
        var $newfield = $(newfield).attr("autocomplete", "off");
        //this input used as storage for selected data
        var data = $("<input/>").attr("type", "hidden").attr("id", obj.field + "_data");
        $(data).attr("enteredSYMValues", "[]").attr("selectedSYMValues", "[]");
        /**
         * This is handler for onBlur action.
         *
         * The method manages values which we enter
         * in input field manual with values which we selected via selector popup
         */
        function mergeSYMValues() {
            var str = newfield.value;
            var inputWords = trimWords(str);
            var enteredSYMValues = eval($(data).attr("enteredSYMValues"));
            var newEnteredValues = [];
            var selectedSYMValues = [];
            $.each(inputWords, function(i, row_d) {
                var ivs1 = row_d;
                var isFound = false;
                $.each(enteredSYMValues, function(j, row) {
                    var ivs2 = row.value;
                    var value = getSYMValue(ivs2);
                    if (value == ivs1) {
                        selectedSYMValues[selectedSYMValues.length] = ivs2;
                        newEnteredValues[newEnteredValues.length] = ivs2;
                        isFound = true;
                        return false;
                    }
                });
                if (!isFound) {
                    selectedSYMValues[selectedSYMValues.length] = ivs1;
                }
            });
            enteredSYMValues = newEnteredValues;
            $(data).attr("enteredSYMValues", getJSON(enteredSYMValues)).attr("selectedSYMValues", getJSON(selectedSYMValues));
        }
        /**
         * return last word from input
         * @param value - string with sequence of key words seprated by comma
         */
        function lastWord(value) {
            if (!obj.mulitvalue)
                return value;
            var words = trimWords(value);
            return words[words.length - 1];
        }
        /**
         * proccesing of selected keyword item
         * show in input field and story selected SYM value
         */
        function selectCurrent() {
            var selected = selectFrame.selected();
            if (!selected)
                return false;
		var v = selected.result;
           //save entered value
		var $data = $("#" + obj.field + "_data");
		$data.attr("enteredSYMValues", addJSON($data.attr("enteredSYMValues"), $.trim(v)));
		if ( obj.fn != null)
		{
			obj.fn( v )
		}else
		{
			v = getSYMValue(v);
			previousValue = v;
			if (obj.mulitvalue) {
				var words = trimWords($newfield.val());
				if (words.length > 1) {
					v = words.slice(0, words.length - 1).join(multSeparChar + " ") + multSeparChar + " " + v;
 	               }
     	       	}
            	$newfield.val(v);
			$newfield.trigger("result", [selected.data, selected.value]);
		}
		hideResultsNow();
           return true;
        }
        /**
         * trim selected key word
         * @param value - key word item
         */
        function trimWords(value) {
            if (!value) {
                return [""];
            }
            var words = value.split(multSeparChar);
            var result = [];
            $.each(words, function(i, value) {               
                result[i] = value;
            });
            return result;
        }
        /**
         * hide selector via timeout=20mls
         */
        function hideResults() {
            clearTimeout(timeout);
            timeout = setTimeout(hideResultsNow, 200);
        }
        /**
         * hide result selector immediately
         */
        function hideResultsNow() {
            var wasVisible = selectFrame.visible();
            selectFrame.hide();
            clearTimeout(timeout);
            if (wasVisible)
            // position cursor at end of input field
                $moveCursorToEnd(newfield, newfield.value.length, newfield.value.length);
        }
        /**
         * onchange event execution
         */
        function onChange() {
            var currentValue = $newfield.val();
            if (currentValue == previousValue)
                return;
            currentValue = lastWord(currentValue);
            if (currentValue == previousValue)
                return;
            previousValue = currentValue;
			if (currentValue.length >= wordlength)
			{
				request(currentValue, receiveData, hideResultsNow);
			}else
			{
				hideResultsNow();				
			}	            
        }
        /**
         * Show selector when data is received
         * @param q - query
         * @param data - received data
         */
        function receiveData(q, data) {
            if (data && data.length) {               
                selectFrame.display(data, q);
                selectFrame.show();
            } else {
                hideResultsNow();
            }
        }
        /**
         * send request on data loading and processing
         *
         * @param term - query term
         * @param success - success function
         * @param failure - failure function
         */
	function request(term, success, failure) 
	{
		var data = dataProcessor.load(term);
		var thisUrl= "";
            // recieve the cached data
            if (data && data.length) {
                success(term, data);
                // if an AJAX url has been supplied, try loading the data now			
            } else if ( (typeof obj.url == "function") || ((typeof obj.url == "string") && (obj.url.length > 0)) ) {
		  	//set query param
                var t=lastWord(term);
			if ( typeof obj.url == "string")
			{
				thisUrl=obj.url.indexOf('@key')!=-1? obj.url.replace(/@key/g,t):(obj.url.concat("&k="+t));
			}else
			{
				thisUrl = obj.url(this)
			}
              
                
                var extraParams = {
                    timestamp: +new Date()
                };
                
			$($newfield).siblings('span').toggleClass("iconen").toggleClass("iconen_active");
                
                /* load data via ajax
                 *  url - url for sending request on data
                 *  request params:
                 *      k - query parameter of requested data;
                 *      n - number of results;
                 *  */
                $.ajax({
                    // try to leverage ajaxQueue plugin to abort previous requests
                    mode: "abort",
                    // limit abortion to this input
                    port: "keyword_" + newfield.name,
                    url: thisUrl,
                    data: $.extend({
                        n: obj.listitems
                    }, extraParams),
                    success: function(data) {
                        var parsed = formatResult(data);
                        dataProcessor.add(term, parsed);
                        success(term, parsed);
                        $($newfield).siblings('span').toggleClass("iconen").toggleClass("iconen_active");
                    },
                    error: function() {
                        //$($newfield).removeClass("keywordfield_active");
                        alert("!ERROR: Failed sending data to" + thisUrl);
                    }
                });
            } else {
                // if we have a failure, we need to empty the list
                selectFrame.emptyList();
                failure(term);
            }
        }
        /*parse and prepare result data which was load via ajax*/
        function formatResult(data) {
            var nData =eval(decodeURIComponent(data));
            return $.map(nData, function(row) {
                var value=row.value;
                var res = getSYMValue(value);
                 return {
                    data: row,
                    value: res,
                    result: value
                }
            });
        }
        // items list
        $moveCursorToEnd = function(field, start, end) {
            if (field.createTextRange) {
                var selRange = field.createTextRange();
                selRange.collapse(true);
                selRange.moveStart("character", start);
                selRange.moveEnd("character", end);
                selRange.select();
            } else if (field.setSelectionRange) {
                field.setSelectionRange(start, end);
            } else {
                if (field.selectionStart) {
                    field.selectionStart = start;
                    field.selectionEnd = end;
                }
            }
            field.focus();
        };
        //key events binding
        var KEYS = {
            UP: 38,
            DOWN: 40,
            ENTER: 13,
            COMMA: 188,
            BACKSPACE: 8,
            ESCAPE: 27
        };
        $newfield.bind("keydown.autocomplete", function(event) {
            switch (event.keyCode) {
                case KEYS.UP:
                    event.preventDefault();
                    if (selectFrame.visible()) {
                        selectFrame.prev();
                    } else {
                        onChange();
                    }
                    break;
                case KEYS.ENTER:
                    event.preventDefault();
                    if (selectCurrent() || $newfield.val() == "") {
                        //event.preventDefault();
                        return false;
                    }
                    break;
                case KEYS.ESCAPE:
                    selectFrame.hide();
                    break;
                case KEYS.DOWN:
                    event.preventDefault();
                    if (selectFrame.visible()) {
                        selectFrame.next();
                    } else {
                        onChange();
                    }
                    break;
                // matches also semicolon
                case obj.mulitvalue && $.trim(multSeparChar) == "," && KEYS.COMMA:
                    break;
                default:
                    clearTimeout(timeout);
                    timeout = setTimeout(onChange, 400);
                    break;
            }
        }).focus(function() {		
            // track whether the field has focus, we shouldn't process any
            // results if the field no longer has focus
		 $($newfield).parent().toggleClass("fieldWrapper_active");           
            hasFocus++;
        }).blur(function() {
		$($newfield).parent().toggleClass("fieldWrapper_active");            
            hasFocus = 0;
            if (!config.isVisibleOnblur) {
                hideResults();
                mergeSYMValues();
            }
        }).click(function() {
//			$(this).parent().addClass("active");
            // show select when clicking in a focused field
            if (hasFocus++ > 1 && !selectFrame.visible()) {
                onChange();
            }
        });
        $(newdiv).append(data);
        var w = obj.width !=null? obj.width : config.width;
        var spanWr = $("<div/>").addClass("fieldWrapper").append("<span class='iconen'>&nbsp;</span>");
	var leftInputOffset = 20;
	$(spanWr).width(w+leftInputOffset);
	$(newfield).width(w);
        $(newfield).appendTo(spanWr);
        $(newdiv).append(spanWr);
        return newdiv;
    },
    /**
     * SET single value
     * @param name - field name
     * @param value - string with value
     */
    set:function(name, value)
    {
        var $data = $("#" + name + "_data");
        var json = getJSON([value]);
        $data.attr("selectedSYMValues", json);
        $data.attr("enteredSYMValues", json);
        $("#" + name).val(getSYMValue(value));
    },
    /**
     * SAVE METHOD
     * @param name - field name
     */
    save:function(name)
    {
        return this.get(name);
    },
    /**
     * GET METHOD
     * @param name - field name
     * @return - String array with values
     */
    get:function(name)
    {
        var $data = $("#" + name + "_data");
        var selectedSYMValues = eval($data.attr("selectedSYMValues"));
        var onlyVars = [];
        $.each(selectedSYMValues, function(i, p) {
            onlyVars[i] = getSYMParam(p.value);
        });
        return onlyVars;
    },
    /**
     * delete field from dom
     * @param name - field name
     */
    deleteComponent :function(name) {
        $("#fieldwrapper_" + name).remove();
    },
    /**
     * SET VALUES
     *
     * @param name - field name
     * @param values - JSON data
     */
    setValues:function(name, values) {
        var newVals = eval(values);
        var $data = $("#" + name + "_data");
        if( typeof($data) == 'undefined')
            return false;
        var inputStr = "";
        var arra = [];
        $.each(newVals, function(i, row) {
            arra[i] = row.value;
            if (i != 0) {
                inputStr += ", ";
            }
            inputStr += getSYMValue(row.value);
        });
        $data.attr("selectedSYMValues", getJSON(arra));
        $data.attr("enteredSYMValues", getJSON(arra));
        $("#" + name).val(inputStr);
    }
}
/**
 * CALENDAR WIDGET
 */
SYM.client.ui.calendarwidget =
{
    //source data
    jsonData:[],
    //events data
    eventDates:[],
    jsonEvents:{},
    //task data
    taskDates:[],
    jsonTasks:{},
    urls:[],
    serverUrl:null,
    REQUEST_TYPE:{
        NEW:"newEv",
        EDIT:"editEv",
        DEL:"delEv"
    },
    EVENT_TYPE:{
        EVENT:"event",
        TASK:"task"
    },
    obj:null,
    currentDay:new Date(),
    targetDay:"",
    selectedEvent:null,
    WeekDays : new Array('Sunday','Monday','Tuesday','Wednesday', 'Thursday', 'Friday', 'Saturday'),
    MonthNames : new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'),
    StartTimeField:null,
    StopTimeField:null,
    setTaskDates:function(tasksDates){
       this.taskDates=tasksDates;
    },
    setEventDates:function(eventDates){
       this.eventDates=eventDates;
    },
    setTasks:function(jsonTasks){
        if (this.jsonTasks.length == undefined) {
            this.jsonTasks = jsonTasks;
        } else {
            for (var i = 0; i < jsonTasks.length; i++) {
                this.jsonTasks[this.jsonTasks.length] = jsonTasks[i];
            }
        }
    },
    setEvents:function(jsonEvents) {
        if (this.jsonEvents.length == undefined) {
            this.jsonEvents = jsonEvents;
        } else {
            for (var i = 0; i < jsonEvents.length; i++) {
                this.jsonEvents[this.jsonEvents.length] = jsonEvents[i];
            }
        }
    },
    setJSONData:function(newData){
        this.jsonData = newData;
    },
    create:function(obj, fieldObject)
    {
       // var calWidget = $("<div/>").attr("id", obj.field + "_widget");
        $("#content").remove();
        var content = $("<div/>").attr("id","content");
        this.obj=obj;
        this.urls[this.urls.length]=obj.sourceUrl;
        this.serverUrl=obj.serverUrl;
        this.StartTimeField =SYM.client.ui.field.add({
                    type: "timewidget",
                    field: obj.field+"_timeStart",
                    width:40});
        this.StopTimeField =SYM.client.ui.field.add({
                    type: "timewidget",
                    field: obj.field+"_timeStop",
                    width:40});
//SMALL CALENDAR
        var rightContent = $("<div/>").attr("id", "right_content");
        $("<h1/>").addClass("cal_sel_date_lbl").html("Select date").appendTo(rightContent);
        var calDiv = $("<div/>").attr("id", obj.field);
        $(calDiv).datepicker({
            inline: true,
            changeFirstDay:false,
            firstDay:1,
            onChangeMonthYear:function(year, month) {
                setTimeout (function(){
                    highlightEvents(calDiv,  month-1);
                    highlightTasks(calDiv,  month-1);
                }, 10);
            },
             onSelect: function(dateTxt) {
                 var dateSplit = dateTxt.split("/");
                 var m=dateSplit[0];
                 var d=dateSplit[1];
                 var y=dateSplit[2];
                 var selectedDate = new Date(y,m-1,d);
                 SYM.client.ui.calendarwidget.currentDay.setTime(selectedDate.getTime());
                 setTimeout (function(){
                    highlightEvents(calDiv, m-1);
                    highlightTasks(calDiv, m-1);
                    updateBigCalendarWeek(selectedDate);
                }, 10); 
            }
        });
        rightContent.append(calDiv);
        loading(obj.sourceUrl, obj);
// END SMALL CALENDAR
//BIG CALENDAR
        var leftContent = createBigCalendar(calDiv, this.currentDay);
        
//END BIG CALENDAR
        $(content).append(rightContent);
        $(content).append(leftContent);
        $(content).append($("<div/>").addClass("clear").html("&nbsp;"));
        $(content).appendTo($("#"+obj.parent));
         formMouseDown();
        //add close popup form by escape key
        $(content).find("input.fcs_inp").bind("keydown",function(e) {
               switch (e.keyCode) {
               //ESCAPE
                case 27:
                    closeAddEventDialog();
                    break;
            }
        });
        //move triangle cursor on calendar position
        $(".triangle").removeClass().addClass("triangle_cal");
        return content;
    },
    addSource:function(newUrl){
        this.urls[this.urls.length]=newUrl;
        loading(newUrl, this.obj);
    }
}
/* TIME WIDGET FIELD */
SYM.client.ui.field.timewidget =
{
objField:null,
selTime:new Date(),
create:function(obj, fieldObject)
	{
		fieldObject = SYM.form.getField(obj.field);
        this.objField=obj.field;
        //create root div
        var newdiv = SYM.util.dom.create(
        {
            type:"div",
            name:"fieldwrapper_"+obj.field
        });
        //add label
        if (obj.label != null)
        {
            // add a label
            Adiv = SYM.util.dom.create(
            {
                type:"div",
                attributes:[{name:"class" , value:"clientLabel"}]
            });
            Adiv.appendChild(document.createTextNode(obj.label));
            newdiv.appendChild(Adiv);
        }
    
        var cont = createTimeWidgetContent(obj, $(newdiv).attr("id"));
        $(newdiv).append(cont);
        $(cont).siblings().bind("mousedown",function(e) {
                hideTimeSelector(obj);
        });
        //set width for input field via parameter from obj.width
        if(obj.width != undefined){
          var inputInitWidth = 40;
          var timeWidgInitLeft=60;
          var timeWidgNewLeft=timeWidgInitLeft+(parseInt(obj.width)-inputInitWidth);
          $(cont).find("#inputTDiv").css("width",obj.width+"px");
          $(cont).find(".time_w").css("left",timeWidgNewLeft+"px");  
        }
        //add close popup form by escape key
        $(cont).find("input.tField").bind("keydown",function(e) {
               switch (e.keyCode) {
               //ESCAPE
                case 27:
                    hideTimeSelector(obj);
                    break;
               //ENTER
                case 13:
                    setValue(cont,SYM.client.ui.field.timewidget.selTime);
                    hideTimeSelector(obj);    
                    break;
                //Arrow up
			   case 38:
                    up($(cont).children(".time_w").html(""));
			   		break;
			   //Arrow down
			   case 40:
                    down($(cont).children(".time_w").html(""));
			   		break;
            }
        });
		return newdiv;
	},
     set:function(name, value)
    {
      $("#"+name).val(value); 
    },
    get:function(name){
        return $("#"+name).val();
    }
}
/**
 * CALENDAR WIDGET
 */
SYM.client.ui.calendarwidget =
{
    //source data
    jsonData:[],
    //events data
    eventDates:[],
    jsonEvents:{},
    //task data
    taskDates:[],
    jsonTasks:{},
    urls:[],
    serverUrl:null,
    REQUEST_TYPE:{
        NEW:"newEv",
        EDIT:"editEv",
        DEL:"delEv"
    },
    EVENT_TYPE:{
        EVENT:"event",
        TASK:"task"
    },
    obj:null,
    currentDay:new Date(),
    targetDay:"",
    selectedEvent:null,
    WeekDays : new Array('Sunday','Monday','Tuesday','Wednesday', 'Thursday', 'Friday', 'Saturday'),
    MonthNames : new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'),
    StartTimeField:null,
    StopTimeField:null,
    setTaskDates:function(tasksDates){
       this.taskDates=tasksDates;
    },
    setEventDates:function(eventDates){
       this.eventDates=eventDates;
    },
    setTasks:function(jsonTasks){
        if (this.jsonTasks.length == undefined) {
            this.jsonTasks = jsonTasks;
        } else {
            for (var i = 0; i < jsonTasks.length; i++) {
                this.jsonTasks[this.jsonTasks.length] = jsonTasks[i];
            }
        }
    },
    setEvents:function(jsonEvents) {
        if (this.jsonEvents.length == undefined) {
            this.jsonEvents = jsonEvents;
        } else {
            for (var i = 0; i < jsonEvents.length; i++) {
                this.jsonEvents[this.jsonEvents.length] = jsonEvents[i];
            }
        }
    },
    setJSONData:function(newData){
        this.jsonData = newData;
    },
    create:function(obj, fieldObject)
    {
       // var calWidget = $("<div/>").attr("id", obj.field + "_widget");
        $("#content").remove();
        var content = $("<div/>").attr("id","content");
        this.obj=obj;
        this.urls[this.urls.length]=obj.sourceUrl;
        this.serverUrl=obj.serverUrl;
        this.StartTimeField =SYM.client.ui.field.add({
                    type: "timewidget",
                    field: obj.field+"_timeStart",
                    width:40});
        this.StopTimeField =SYM.client.ui.field.add({
                    type: "timewidget",
                    field: obj.field+"_timeStop",
                    width:40});
//SMALL CALENDAR
        var rightContent = $("<div/>").attr("id", "right_content");
        $("<h1/>").addClass("cal_sel_date_lbl").html("Select date").appendTo(rightContent);
        var calDiv = $("<div/>").attr("id", obj.field);
        $(calDiv).datepicker({
            inline: true,
            changeFirstDay:false,
            firstDay:1,
            onChangeMonthYear:function(year, month) {
                setTimeout (function(){
                    highlightEvents(calDiv,  month-1);
                    highlightTasks(calDiv,  month-1);
                }, 10);
            },
             onSelect: function(dateTxt) {
                 var dateSplit = dateTxt.split("/");
                 var m=dateSplit[0];
                 var d=dateSplit[1];
                 var y=dateSplit[2];
                 var selectedDate = new Date(y,m-1,d);
                 SYM.client.ui.calendarwidget.currentDay.setTime(selectedDate.getTime());
                 setTimeout (function(){
                    highlightEvents(calDiv, m-1);
                    highlightTasks(calDiv, m-1);
                    updateBigCalendarWeek(selectedDate);
                }, 10); 
            }
        });
        rightContent.append(calDiv);
        loading(obj.sourceUrl, obj);
// END SMALL CALENDAR
//BIG CALENDAR
        var leftContent = createBigCalendar(calDiv, this.currentDay);
        
//END BIG CALENDAR
        $(content).append(rightContent);
        $(content).append(leftContent);
        $(content).append($("<div/>").addClass("clear").html("&nbsp;"));
        $(content).appendTo($("#"+obj.parent));
         formMouseDown();
        //add close popup form by escape key
        $(content).find("input.fcs_inp").bind("keydown",function(e) {
               switch (e.keyCode) {
               //ESCAPE
                case 27:
                    closeAddEventDialog();
                    break;
            }
        });
        //move triangle cursor on calendar position
        $(".triangle").removeClass().addClass("triangle_cal");
        return content;
    },
    addSource:function(newUrl){
        this.urls[this.urls.length]=newUrl;
        loading(newUrl, this.obj);
    }
}
/* DATE WIDGET FIELD */
SYM.client.ui.field.datewidget =
{
create:function(obj, fieldObject)
	{
		fieldObject = SYM.form.getField(obj.field);
        //create root div
        var newdiv = SYM.util.dom.create(
        {
            type:"div",
            name:"fieldwrapper_"+obj.field
        });
        //add label
        if (obj.label != null)
        {
            // add a label
            Adiv = SYM.util.dom.create(
            {
                type:"div",
                attributes:[{name:"class" , value:"clientLabel"}]
            });
            Adiv.appendChild(document.createTextNode(obj.label));
            newdiv.appendChild(Adiv);
        }
        var field = $("<input type='text'/>").attr("id",obj.field).attr("name",obj.field).attr("symfieldtype","datewidget").addClass("dField");
        //div wrappers for input fiald and icon img (defore datapicker creating)
        var inpWrap = $("<div id='fieldDiv'/>").addClass("inputFieldDiv").appendTo(newdiv);
        inpWrap.append($("<span/>").append(field));
        var imgWrap = $("<div id='iconDiv'/>").addClass("iconImg").html("&nbsp;").appendTo(newdiv);
        //set width of field via obj.width param 
        if(obj.width != undefined){
           inpWrap.css("width",obj.width);
        }
        //datapicker initialization
        $(field).datepicker({
            showOn: 'button',
            firstDay:1,
            buttonImage: SYM.client.images + '/calendar.png',
            buttonImageOnly: true,
            altFormat: 'yyyy.mm.dd'
        });
        //set effect
        $(field).datepicker('option', 'showAnim', 'fadeIn');
        // calculation position of calendar showing
        var inpWidth = $(inpWrap).css("width");
        inpWidth=parseInt(inpWidth.substring(0,inpWidth.length-2));
        var inpWidthInit = 80;
        var marginLeftInit = 100;
        var marginLeft = marginLeftInit + (inpWidth-inpWidthInit);
		$("#ui-datepicker-div").addClass("date-datepicker").css("margin-left",marginLeft+"px");
        //div wrappers for input fiald and icon img (after datapicker creating)
        var realImg = $(inpWrap).find("img.ui-datepicker-trigger");
        var cloneImg = $(realImg).clone();
        $(realImg).css("display","none");
        $(imgWrap).append($(cloneImg).click(function(){$(realImg).click()}));
        $(field).datepicker('option', {dateFormat: 'yy.mm.dd'});
        if(obj.value !=null){
            $(field).datepicker( 'setDate', SYM.ui.DateUtils.parseDateTime(obj.value));
        }
        return newdiv;
	},
     set:function(name, value)
    {    
       if($("#"+name).length > 0){
            $("#"+name).datepicker('setDate', SYM.ui.DateUtils.parseDateTime(value));
        }
    },
    get:function(name){
      if($("#"+name).length > 0){
          var date= $("#"+name).val();
          //return SYM.ui.DateUtils.parseDateTime(date);
          return date;
        }
    }
}
/* TOOLTIP WIDGET */
SYM.client.ui.field.tooltip =
{
    DefaultWidth:260,
    create:function(obj) {
        var tooltip;
        if (obj.parent != undefined && $("#" + obj.parent).length > 0) {
            var owner = $("#" + obj.parent);
            tooltip = addTooltip(obj, owner);
        } else if (obj.parentObj != undefined) {
            var owner = $(obj.parentObj);
            $(owner).parent();
            tooltip = addTooltip(obj, owner);
        }
        return tooltip;
    },
    hide:function(fieldName, config, beforeHide) {
        var name = "#tooltip_for_" + fieldName;
        var fullClear = config.fullClear != undefined ? config.fullClear : "true";
        if(beforeHide != undefined){
           beforeHide(name);
        }
        //remove owner class
        $(name).parent().removeClass('tooltipOwner');
        $(name).hide();
        if(fullClear == 'true'){
            $(name).children().remove();
        }        
    },
    remove:function(fieldName){
         var name = "#tooltip_for_" + fieldName;
        $(name).remove();
    }
}
SYM.client.ui.field.popup = {
    create:function(obj){
        
    }
}
    /*
    SYM.client.unique.response = function( name , obj )
    {
    }
    */
/*
SYM.client.ui.field.empty =
{
	create:function( name ,  fieldObject  )
	{
		return true;},
	
	set:function()
	{return true;},
	save:function()
	{return true;},
	get:function()
	{return true;}
}
/*
SYM.client.unique.response = function( name , obj )
{
		
}
*/
/*
SYM.client.ui.field.empty =
{
	create:function( name ,  fieldObject  )
	{
		return true;},
	
	set:function()
	{return true;},
	save:function()
	{return true;},
	get:function()
	{return true;}
}
*/	
AIM = {
	formname:"",
	frame : function(c) {
		var n = 'f' + Math.floor(Math.random() * 99999);
		AIM.formname = n;
		var d = document.createElement('DIV');
		d.innerHTML = '<iframe style="display:none;" src="about:blank" id="'+n+'" name="'+n+'" onload="AIM.loaded(\''+n+'\')"></iframe>';
		document.body.appendChild(d); 
		var i = document.getElementById(n);
		if (c && typeof(c.onComplete) == 'function') {
			i.onComplete = c.onComplete;
		}
 
		return n;
	},
 
	form : function(f, name) {
		f.setAttribute('target', name);
	},
 
	submit : function(f, c) {
		AIM.form(f, AIM.frame(c));
		if (c && typeof(c.onStart) == 'function') {
			return c.onStart( AIM.form );
		} else {
			return true;
		}
	},
 
	loaded : function(id) {
		var i = document.getElementById(id);
		if (i.contentDocument) {
			var d = i.contentDocument;
		} else if (i.contentWindow) {
			var d = i.contentWindow.document;
		} else {
			var d = window.frames[id].document;
		}
		if (d.location.href == "about:blank") {
			return;
		}
		if (typeof(i.onComplete) == 'function') {
			i.onComplete(d.body.innerHTML);
		}
	}
 
}
	
SYM.client.img = new Object();
SYM.client.img.centerPreviewMMImage = function()
{	
	var imgwidth = SYM.client.img.image.width;
	var imgheight = SYM.client.img.image.height;	
	if ( imgwidth > 200 )
	{
		$("#viewPreviewImage").css("width" , "180px");
	}
	if ( imgheight > 200 )
	{
		$("#viewPreviewImage").css("height" , "180px");
	}
	
	$("#viewPreviewImage").attr("src",SYM.client.img.image.src);
}
SYM.client.img.checkloadMMpreviewimage = function ()
{
	if (SYM.client.img.image== null){return;}
	(SYM.client.img.image.complete)? SYM.client.img.centerPreviewMMImage() : setTimeout('SYM.client.img.checkloadMMpreviewimage()', 100);
}
SYM.client.img.image = null;
SYM.client.img.viewMMPreview = function (txt,e ,obj)
{
	if ( $("#viewpreviewimage").length == 0 )
	{$(document.body).append("<div id='viewpreviewimage' style='display:none;z-index:100;position:absolute;width:200px;height:200px;border:2px solid gray;background-color:white;'><table border='0' cellpadding='0' cellspacing='0' width='100%' height='100%'><tr><td valign='middle' align='center'><img src='"+SYM.client.path + "/indicator.white.gif' id='viewPreviewImage' align=center></td></tr></table></div>");}
	e = (window.event) ? window.event : e;
	if (obj == null)
	{obj = e;}
	startY = 0;
	if (txt == null)
	{
		SYM.client.img.image = null;
		$("#viewpreviewimage").hide();			
		$("#viewPreviewImage").css("width" ,  "").css("height" , "").attr("src",SYM.client.mmpath + "/indicator.white.gif");
	}else if( txt == "" )
	{
		$("#viewpreviewimage").css("top" , (($(obj).position().top + 10)-startY) + "px")
		$("#viewpreviewimage").css("left" , ($(obj).position().left+ 10) + "px")
	}else
	{
		if (SYM.client.img.image != null) {return;}	
		SYM.client.img.image= new Image();
		SYM.client.img.image.src = SYM.client.mmpath + "/lupgraphics/" + txt + "/$file/" + txt;	
		if (document.all)
		{
			setTimeout('SYM.client.img.checkloadMMpreviewimage()', 100);
		}else
		{
			SYM.client.img.image.onload = setTimeout('SYM.client.img.checkloadMMpreviewimage()', 100);
		}
		$("#viewpreviewimage").css("top" , (($(obj).position().top + 16)-startY)+"px").css("left", ($(obj).position().left + 16)+"px").show();
	}
}
var btn = {
    init : function() {
        if (!document.getElementById || !document.createElement || !document.appendChild) return false;
        as = btn.getElementsByClassName('btn(.*)');
        for (i=0; i<as.length; i++) {
            if ( as[i].tagName == "INPUT" && ( as[i].type.toLowerCase() == "submit" || as[i].type.toLowerCase() == "button" ) ) {
                var a1 = document.createElement("a");
                a1.appendChild(document.createTextNode(as[i].value));
                a1.className = as[i].className;
                a1.id = as[i].id;
                as[i] = as[i].parentNode.replaceChild(a1, as[i]);
                as[i] = a1;
                as[i].style.cursor = "pointer";
            }
            else if (as[i].tagName == "A") {
                var tt = as[i].childNodes;
            }
            else { return false };
            var i1 = document.createElement('i');
            var i2 = document.createElement('i');
            var s1 = document.createElement('span');
            var s2 = document.createElement('span');
            s1.appendChild(i1);
            s1.appendChild(s2);
            while (as[i].firstChild) {
              s1.appendChild(as[i].firstChild);
            }
            as[i].appendChild(s1);
            as[i] = as[i].insertBefore(i2, s1);
        }
        // The following lines submits the form if the button id is "submit_btn"
        btn.addEvent(document.getElementById('submit_btn'),'click',function() {
            var form = btn.findForm(this);
            form.submit();
        });
        // The following lines resets the form if the button id is "reset_btn"
        btn.addEvent(document.getElementById('reset_btn'),'click',function() {
            var form = btn.findForm(this);
            form.reset();
        });
    },
    findForm : function(f) {
        while(f.tagName != "FORM") {
            f = f.parentNode;
        }
        return f;
    },
    addEvent : function(obj, type, fn) {
	if (obj == null){return;}
        if (obj.addEventListener) {
            obj.addEventListener(type, fn, false);
        }
        else if (obj.attachEvent) {
            obj["e"+type+fn] = fn;
            obj[type+fn] = function() { obj["e"+type+fn]( window.event ); }
            obj.attachEvent("on"+type, obj[type+fn]);
        }
    },
    getElementsByClassName : function(className, tag, elm) {
        var testClass = new RegExp("(^|\s)" + className + "(\s|$)");
        var tag = tag || "*";
        var elm = elm || document;
        var elements = (tag == "*" && elm.all)? elm.all : elm.getElementsByTagName(tag);
        var returnElements = [];
        var current;
        var length = elements.length;
        for(var i=0; i<length; i++){
            current = elements[i];
            if(testClass.test(current.className)){
                returnElements.push(current);
            }
        }
        return returnElements;
    }
}

