(function()
{
SYM.client = 
{	
	path : "/kunder/ntf/cms.nsf",
	mmpath : "/kunder/ntf/mm.nsf",
	language: "ENG",
	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-829JHT: Level ( enter 3 chars. or more - seperate levels with / );3-DDAG-83ES9T: No more than 3 levels are allowed;3-DDAG-83ESFC: File $filename$ uploaded. Do you want to add to your content ;3-DDAG-83ESAW: Do you want to use this image?;3-DDAG-83ESDP: Filename already exist, please rename your file before uploading.;3-DDAG-6PEGXE: Edit;3-DDAG-6PEGXF: Delete;3-DDAG-6PEGXG: Template;3-DDAG-83SHFK: Move;3-DDAG-83GFAN: Add new image;3-DDAG-6PEGXH: Registration;3-DDAG-6PEGXJ: Mailing category;3-DDAG-6PEGXK: Image scheme;3-DDAG-6PEGXL: Image Format;3-DDAG-6PEGXM: New Poll;3-DDAG-6PEGXN: Search database;3-DDAG-6PEGXP: Poll Resource;3-DDAG-6PEGXQ: Configuration;3-DDAG-6PEGXR: Recipient;3-DDAG-6PEGXS: Keyword;3-DDAG-6PEGXT: Media resource;3-DDAG-6PEGXU: New...;3-DDAG-6PEGXV: Document;3-DDAG-6PEGXW: Preview site;3-DDAG-6PEGXX: Preview;3-DDAG-6PEGXY: Remove from web;3-DDAG-6PEGXZ: Approve;3-DDAG-6PEGY2: Reject document;3-DDAG-6PEGY3: Roll back;3-DDAG-6PEGY4: Preview list;3-DDAG-6PEGY5: Send list;3-DDAG-6PEGY6: Delete the current document?;3-DDAG-6PEGY7: -Select Value-;3-DDAG-6PEGY8: No description;3-DDAG-6PEGY9: Remove selected image from page;3-DDAG-6PEGYA: All documents;3-DDAG-6PEGYC: Compose document;3-DDAG-6PEGYD: Settings;3-DDAG-6PEGYE: Cannot delete documents that have sub levels or documents attached to them;3-DDAG-77PALX: Link resource;3-DDAG-7X8D97: Copying documents....;3-DDAG-7X8D9B: No documents where copied, only content documents can be copied;3-DDAG-7X8D9E: System copied xxx document(s);3-DDAG-7X8D9T: Copy;3-DDAG-7Y2M84: Loading;3-DDAG-7Y2MLH: Deleting document;3-DDAG-7Y2MLJ: Moving document;3-DDAG-7Y2MLK: Processing;3-DDAG-7Y2MLL: CMS;3-DDAG-7Y2PN8: Please wait;3-DDAG-7Y2MLM: Error processing the request;3-DDAG-7Y2MLN: System moved xxx document(s);3-DDAG-7Y2MLP: System deleted xxx document(s);3-DDAG-7Y2PLR: System changed layout on xxx document(s);3-DDAG-7Y2PJ2: No documents where processed.;3-DDAG-83KESW: Access google accounts;3-DDAG-83KEU6: Logout google accounts;3-DDAG-83KG8Y: Visits/Visitors;3-DDAG-83KG8Z: Change;3-DDAG-83KG92: Average time;3-DDAG-83KG93: Top 5 pages;3-DDAG-83KGAP: Date range;3-DDAG-83KG94: Today;3-DDAG-83KG95: Yesterday;3-DDAG-83KG96: Last 7 days;3-DDAG-83KG97: Last 30 days;3-DDAG-83KGM3: Open GA;3-DDAG-83KGML: Logout google;3-DDAG-7NBL8G: The page title is not unique, please change the title.;3-MOLR-8FWBKC: Add new file;3-MOLR-8FWFJB: Do you want to use this file?;3-DDAG-6PEGYB: DO NOT CHANGE WCM.JS ENDS;3-DDAG-6PEHVK: DO NOT CHANGE INPSITEMAP.JS STARTS;3-DDAG-6PEHVL: Enter search word;3-DDAG-829JHU: Saving content;3-DDAG-6PEHVM: Loading;3-DDAG-6PEHVN: Problem connecting to server;3-DDAG-6PEHVX: DO NOT CHANGE INPSITEMAP.JS ENDS;3-DDAG-6PEHWK: DO NOT CHANGE INPCONTENTDOCUMENTATTRIBUTES.JS STARTS;3-DDAG-6PEHWL: -Select Value-;3-DDAG-6PEHWM: [Full Access];3-DDAG-6PEHWQ: DO NOT CHANGE INPCONTENTDOCUMENTATTRIBUTES.JS ENDS;3-DDAG-6PEHWR: DO NOT CHANGE DATECONTROL.JS STARTS;3-DDAG-6PEHWS: Mo;3-DDAG-6PEHXR: Tu;3-DDAG-6PEHXS: We;3-DDAG-6PEHXT: Th;3-DDAG-6PEHXU: Fr;3-DDAG-6PEHXV: Sa;3-DDAG-6PEHXW: Su;3-DDAG-6PEHXX: January;3-DDAG-6PEHXZ: February;3-DDAG-6PEHY2: March;3-DDAG-6PEHY3: April;3-DDAG-6PEHY4: May;3-DDAG-6PEHY5: June;3-DDAG-6PEHY6: July;3-DDAG-6PEHY7: August;3-DDAG-6PEHY8: September;3-DDAG-6PEHY9: October;3-DDAG-6PEHYA: November;3-DDAG-6PEHYB: December;3-DDAG-6PEHYH: DO NOT CHANGE DATECONTROL.JS ENDS;3-DDAG-6PFPZ7: DO NOT CHANGE CONTENTDOCUMENT STARTS;3-DDAG-6PFPZ8: The document will be sent to the chosen person for comments. Please choose another person if you want;3-DDAG-6PFPZ9: There is no commentator chosen for this document. Please choose one from the list;3-DDAG-6PFPZA: You must write a comment before the document can be returned;3-DDAG-6PFPZB: The document will be returned with the comments above. Please alter the comments if you want;3-DDAG-6PFPZC: Please write a comment on why the document will be rejected;3-DDAG-6PFPZD: -Select Value-;3-DDAG-6PFPZY: The document will be sent to the chosen approver above. Please choose another person if you want;3-DDAG-6PFPZZ: There is no approver chosen for this document. If you don't choose a person from the list above the document will be sent to the default approver;3-DDAG-6PFQ22: The document will be sent to the chosen web editor above. Please choose another person if you want;3-DDAG-6PFQ23: There is no web editor chosen for this document. If you don't choose a person from the list above the document will be sent to the default web editor;3-DDAG-6PFQ24: Do you want to finally approve the document?;3-DDAG-6PFQ25: DO NOT CHANGE CONTENTDOCUMENT ENDS;3-DDAG-6PMDZF: DO NOT CHANGE OTHER STARTS;3-DDAG-6PGFRC: Are you sure you want to remove this object?;3-DDAG-6PGFRL: You must enter a name of the object!;3-DDAG-6PGFRM: You need to enter a Menu title before saving.;3-DDAG-6PGFRN: Please enter Web Editor(s).;3-DDAG-6PGFRP: Please enter default Web Editor.;3-DDAG-6PGFRQ: Please enter Approver(s).;3-DDAG-6PGFRR: Please enter default Approver.;3-DDAG-6PGFRS: You have done changes under the Workflow tab!;3-DDAG-6PMDZ4: You have set 'Use Approver' to 'No'.;3-DDAG-6PMDZ5: The following content documents under this menu entry;3-DDAG-6PMDZ6: will be set back to status '0' (Draft):;3-DDAG-6PMDZ7: all in status '2' (Approver);3-DDAG-6PMDZ8: all rejected from status '2';3-DDAG-6PMDZ9: Content documents on hearing from status '2' and on hearing from the rejected status will be set back to status '0' \nwhen they are returned from the hearing.;3-DDAG-6PMDZA: Would you like to continue?;3-DDAG-6PMDZB: This requires that you resave the CSS class continue?;3-DDAG-6PMDZC: Are you sure that you want to remove this item?;3-DDAG-6PMDZD: Unable to save without any class name;3-DDAG-6PMDZE: Unable to save, class name must be unique;3-DDAG-6PPFLQ: You must specify a Link;3-DDAG-6PPFLR: Quotes are not allowed in attributes.\nThey area allowed for Events only;3-DDAG-6PPFLS: Please enter a name in the 'Enter a new document creator' field.;3-DDAG-6PPFLT: Please select a name in the 'Choose a new commentator' field.;3-DDAG-6PPFLU: Please select a name in the 'Choose a new approver' field.;3-DDAG-6PPFLV: Please select a name in the 'Choose a new web editor' field.;3-DDAG-6PSPJD: To make changes to this document you need use the action 'Remove from web' \n OR you can make a copy of this document, this will replace the public document when it's published. \n Do you want to create a copy of this document?;3-DDAG-6PSPJE: Depending on the workflow state of the document you can here select a new person in the fields 'DocCreatedBy', 'Commentator', 'Approver' or 'Web editor'. A name must be in hierarchical format.;3-DDAG-6PSPJF: Please write a comment on why the document must be removed from web.;3-DDAG-6PSPJG: Do you want to remove this document from 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-6UTQ4H: Version;3-DDAG-6UTQ4J: Last modified;3-DDAG-6UWBED: Author;3-DDAG-6UWBEE: Status;3-DDAG-6UWBJL: Installed;3-DDAG-6UWBJN: Uninstalled;3-DDAG-6UWBJQ: New version available;3-DDAG-6UWBKF: Not downloaded;3-DDAG-6PSENR: Settings;3-DDAG-6PSENS: Customized Information;3-DDAG-6PSENT: Search Databases;3-DDAG-6PSENU: Edit search settings;3-DDAG-6PSENV: All Servers;3-DDAG-6PSENW: [copy];3-DDAG-6PSEQ8: Content page;3-DDAG-6UFAS4: Form;3-DDAG-6PSEQ9: List page;3-DDAG-6PSEQA: Portal page;3-DDAG-6PSEQB: Folder;3-DDAG-6PSEQC: Connector;3-DDAG-6PSEQD: New document;3-DDAG-6PSEQE: Draft;3-DDAG-6PSEQF: On Hearing;3-DDAG-6PSEQG: For approval;3-DDAG-6PSEQH: For final approval;3-DDAG-6PSEQJ: Rejected;3-DDAG-6PSEQK: Public;3-DDAG-6PSEQL: Archive;3-DDAG-6PSEQM: Pending;3-DDAG-6PSEQN: Out of date;3-DDAG-6PSEQP: Edit CSS Files;3-DDAG-6PSEQQ: Web configuration document;3-DDAG-6PSEQR: Configurators;3-DDAG-6PSEQS: Edit configuration document;3-DDAG-6PSEQT: Edit Startpage;3-DDAG-6PSEQU: Edit Site configuration;3-DDAG-6PSEQV: Shared;3-DDAG-6PSEQW: Private templates;3-DDAG-6PSEQX: Only users;3-DDAG-6PSEQY: Day(s);3-DDAG-6PSEQZ: Week(s);3-DDAG-6PSER2: Month(s);3-DDAG-6PSER3: Unlimited;3-DDAG-6PSER4: In progress;3-DDAG-6PSER5: working copy;3-DDAG-6PSER6: Content document is proctected;3-DDAG-6PSER7: Edit settings;3-DDAG-6PSER8: Registration;3-DDAG-6PSER9: Keywords;3-DDAG-6PSERA: Recipients;3-DDAG-6PSERB: Customized information;3-DDAG-6PSERF: Other;3-DDAG-6PSERC: More from author;3-DDAG-6PSERD: Edit default values;3-DDAG-6PSERE: Feedback to author;3-DDAG-6PSP54: Subscribe;3-DDAG-6PSP55: Unsubscribe;3-DDAG-6PSP56: Mailinglist categories;3-DDAG-6PSP57: Preview mailinglist;3-DDAG-6PSP58: Sendt from mailing list;3-DDAG-6PSP59: Documents in mailing list;3-DDAG-6PSP5A: Jan;3-DDAG-6PSP5B: Feb;3-DDAG-6PSP9P: Mars;3-DDAG-6PSP9Q: April;3-DDAG-6PSP9R: May;3-DDAG-6PSP9S: Jun;3-DDAG-6PSP9T: July;3-DDAG-6PSP9U: Aug;3-DDAG-6PSP9V: Sept;3-DDAG-6PSP9W: Oct;3-DDAG-6PSP9X: Nov;3-DDAG-6PSP9Y: Dec;3-DDAG-6PSP9Z: Text mail;3-DDAG-6PSPA2: Html mail;3-DDAG-6VPRDU: Setup;3-DDAG-6PSPA3: ;3-DDAG-6PSPA4: ;3-DDAG-72KDEA: 404 Settings;3-DDAG-7NNKHJ: Multi-upload;3-DDAG-7RBESN: Search: enter 3 letters or more;3-DDAG-7RBESP: Unable to find any documents;3-DDAG-7RBESQ: Searching;3-DDAG-83NM7M: You will need to save content to change layout, would you like to save and proceed?;3-DDAG-6PSERG: DO NOT CHANGE VIEW TEXTS STARTS;3-MOLR-8FADQ7: Delete from Facebook ?;3-MOLR-8FMCJC: Views;3-MOLR-8FMCJH: Plays;3-MOLR-8FMCJK: End views;3-MOLR-8FMCJN: Uploaded;3-MOLR-8FMCJS: Get embed code;3-MOLR-8FMCJV: Waiting for decoder;3-MOLR-8FMCSU: Complete;3-MOLR-8FMJWE: Processing;3-MOLR-8FQGEC: This video has been scaled to fit window;3-MOLR-8FQH5G: This document have already been posted to facebook once. Are you sure you want to post it again ?;3-MOLR-8FQH63: Saving to facebook;3-MOLR-8FQH8C: Cancelled",
	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;
    }
}

