Merge with fefd3a8e0cbd694158aa6a9ba502ac6f9fe98ae2
authorymh <ymh.work@gmail.com>
Sat, 11 Sep 2010 01:18:28 +0200
changeset 46 857830e09b0d
parent 45 db4e163c7c8e (diff)
parent 38 fefd3a8e0cbd (current diff)
child 47 699be5c7b4ac
Merge with fefd3a8e0cbd694158aa6a9ba502ac6f9fe98ae2
web/franceculture/.htaccess.tmpl
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sql/update_db_0_10_to_0_11.sql	Sat Sep 11 01:18:28 2010 +0200
@@ -0,0 +1,2 @@
+ALTER TABLE ldt_utils_content ALTER COLUMN src DROP NOT NULL;
+ALTER TABLE ldt_utils_content ADD COLUMN content_creation_date timestamp with time zone;
--- a/web/franceculture/settings.py	Fri Sep 10 17:41:12 2010 +0200
+++ b/web/franceculture/settings.py	Sat Sep 11 01:18:28 2010 +0200
@@ -82,6 +82,7 @@
 )
 
 TEMPLATE_CONTEXT_PROCESSORS = ( 
+    "django.core.context_processors.request",
     "django.core.context_processors.auth",
     "django.core.context_processors.debug",
     "django.core.context_processors.i18n",
@@ -137,5 +138,6 @@
 
 LOGIN_URL = BASE_URL + 'franceculture/accounts/login/'
 LOGOUT_URL = BASE_URL + 'franceculture'
+LOGIN_REDIRECT_URL = BASE_URL + 'franceculture'
 
 
--- a/web/franceculture/templates/base.html	Fri Sep 10 17:41:12 2010 +0200
+++ b/web/franceculture/templates/base.html	Sat Sep 11 01:18:28 2010 +0200
@@ -1,39 +1,29 @@
+{% extends "raw_base.html" %}
 {% load i18n %}
 {% load logintag %}
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
-    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="{{LANGUAGE_CODE}}" lang="{{LANGUAGE_CODE}}">
-<head>
-    <meta http-equiv="content-language" content="{{LANGUAGE_CODE}}" />
-    <title>{% block title %}France Culture{% endblock %}</title>
-    {% block js_import %}
-    <script type="text/javascript" src="{{MEDIA_URL}}js/jquery.min.js"></script>
-    <script type="text/javascript" src="{{MEDIA_URL}}js/jquery.nyroModal.min.js"></script>
-    <script type="text/javascript" src="{{LDT_MEDIA_PREFIX}}js/jquery.validate.js" ></script>
-    {% endblock %}
-    {% block css_import %}
-    <link rel="stylesheet" href="{{BASE_URL}}static/css/blueprint/screen.css" type="text/css" media="screen, projection" />
-    <link rel="stylesheet" href="{{BASE_URL}}static/css/blueprint/print.css" type="text/css" media="print" />
-    <!--[if lt IE 8]>
-    <link rel="stylesheet" href="{{BASE_URL}}static/css/blueprint/ie.css" type="text/css" media="screen, projection" />
-    <![endif]-->
-    <link rel="stylesheet" href="{{BASE_URL}}static/css/style.css" type="text/css"/>
-    <link rel="stylesheet" href="{{BASE_URL}}static/css/nyroModal.css" type="text/css"/>
-    <link rel="stylesheet" href="{{LDT_MEDIA_PREFIX}}/css/style.css" type="text/css"/>
-    <link rel="stylesheet" href="{{LDT_MEDIA_PREFIX}}/js/login_ajax/login_ajax.css" type="text/css"/>
-    {% endblock %}
+{% load navigation %}
+
+{% block js_import %}
+	{{ block.super }}
+	<script type="text/javascript" src="{{MEDIA_URL}}js/jquery.nyroModal.min.js"></script>
+	<script type="text/javascript" src="{{MEDIA_URL}}js/jquery.qtip.min.js"></script>
+	<script type="text/javascript" src="{{LDT_MEDIA_PREFIX}}js/jquery.validate.js" ></script>
+{% endblock %}
+        
+{% block css_import %}
+	{{ block.super }}
+	<link rel="stylesheet" href="{{BASE_URL}}static/css/tabs.css" type="text/css" media="screen, projection" />
+	<link rel="stylesheet" href="{{BASE_URL}}static/css/nyroModal.css" type="text/css"/>
+	<link rel="stylesheet" href="{{LDT_MEDIA_PREFIX}}/js/login_ajax/login_ajax.css" type="text/css"/>
+{% endblock %}
     
-    {% block js_declaration %}
-    {% endblock %}
-    
-</head>
-<body>
+{% block body %}
+	{{ block.super }}
     <div class="container">
 	<div id="header" class="span-24 last">      
 		{% block header %}
-		<div id="header_left">
-                   <a href="{% url franceculture.views.workspace %}">France Culture</a>
+		<div id="header_left" class="span-24 last">
+                   <a href="{% url franceculture.views.workspace %}">France&nbsp;Culture</a>
 		</div>
 		{% endblock %}
 	</div>
@@ -43,10 +33,28 @@
     
         <div id="toolbar" class="span-24 last">
         {% block toolbar %}
-          <table>
-            <tr>
-            <td>{% block login %}{% loginAjax user%}{% endblock %}</td>
-            <td>
+            <div class="block span-24 last">
+				<div id="tabsdiv" class="block span-20">
+				{% if user.is_authenticated %}
+				{% url franceculture.views.workspace as workspace_url %}
+				{% url ldt.ldt_utils.views.list_ldt as space_url %}
+				{% url ldt.ldt_utils.views.list_content as content_url %}
+				{% url ldt.user.views.profile  as profile_url %}
+				    <ul class="tabs">
+						<li class='{% active request "active" workspace_url %}'><a href="{{ workspace_url }}" >{% trans "home" %}</a></li>
+						<li class='{% active request "active" content_url %}'><a href="{{ content_url }}">{% trans "contents" %}</a></li>
+						<li class='{% active request "active" space_url %}'><a href="{{ space_url }}">{% trans "indexation projects" %}</a></li>
+						<li class='{% active request "active" "" %}'><a href="#">{% trans "accounts" %}</a></li>
+			            <li class='{% active request "active" profile_url %}'><a href="{{ profile_url }}" >{% trans "Profiles" %}</a> </li>
+				    </ul>
+				{% endif %}
+				</div>
+				<div id="loginstate" class="block span-4 last">
+				{% if user.is_authenticated %}
+				{{user.username}}&nbsp;|&nbsp;<a href="{% url ldt.user.views.logout_view %}" >{% trans "Log out" %}</a>
+				{% endif %}
+				</div>
+            </div>
             {% if LANGUAGES.1 %}
               <div id="language_chooser">            
                 <form action="{{BASE_URL}}enmi/i18n/setlang/" method="post">
@@ -59,11 +67,8 @@
                 </select>        
                 </form>            
               </div>  
-              {% endif %}
-              </td>
-              </tr>
-              </table>
-            {% endblock %}
+            {% endif %}
+        {% endblock %}
         </div>
         <div id="inner_content" class="span-24 last">
 		{% block content %}{% endblock %}
@@ -79,5 +84,4 @@
 		{% endblock %}
 	</div>
     </div>
-</body>
-</html>
+{% endblock %}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/franceculture/templates/franceculture/partial/contentslist.html	Sat Sep 11 01:18:28 2010 +0200
@@ -0,0 +1,23 @@
+{% load i18n %}
+<div class="projectscontentsheader span-12 last" id="contentsheader">
+{% trans "name" %}
+</div>
+<div class="span-12 last projectscontentstablewrapperdiv">
+<div class="span-12 last projectscontentstablediv" id="contentstablediv">
+	<table class="projectscontentstable">
+	    <tbody class="projectscontentsbody">
+	{% for content in contents %}
+		<tr class="imageline {% cycle 'projectscontentsoddline' 'projectscontentsevenline'%}">
+		    <td class="cellimg"><div class="cellimgdiv"><img src="{{MEDIA_URL}}/img/document_add.gif" title="{% trans 'create project' %}" alt="{% trans 'create project' %}" href="{% url ldt.ldt_utils.views.create_project content.iri_id %}" class="ldt_link_create"/></div></td>
+		    <td class="cellimg"><div class="cellimgdiv"><img  alt="{% trans 'preview media'%}" title="{% trans 'preview media'%}" src="{{MEDIA_URL}}/img/control_play.gif" href="{% url ldt.ldt_utils.views.index content.iri_id %}" class="ldt_link"/></div></td>
+		    <td class="contenttitle">{{ content.title }}</td>
+		</tr>
+	{% endfor %}
+		</tbody>
+	</table>
+</div>
+</div>
+<div class="projectscontentsfooter span-12 last">
++&nbsp;<a class='content_link_create' href="{% url ldt.ldt_utils.views.write_content %}">{% trans "Create content" %}</a>
+</div>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/franceculture/templates/franceculture/partial/projectslist.html	Sat Sep 11 01:18:28 2010 +0200
@@ -0,0 +1,32 @@
+{% load i18n %}
+<div class="projectscontentsheader span-12 last" id="projectsheader">
+{% trans "name" %}
+</div>
+<div class="span-12 last projectscontentstablewrapperdiv">
+<div class="span-12 last projectscontentstablediv" id="projectstablediv">
+<table class="projectscontentstable">
+    <tbody class="projectscontentsbody">
+{% for project in projects %}
+    <tr class="imageline {% cycle 'projectscontentsoddline' 'projectscontentsevenline'%}" >
+        {% url ldt.ldt_utils.views.project_json_id project.ldt_id as json_url_id %}
+        <td class="cellimg"><div class="cellimgdiv">
+        {% ifequal project.state 2 %}
+        <img src="{{BASE_URL}}static/admin/img/admin/icon-yes.gif" alt="{% trans 'Project published, click to unpublish' %}" title="{% trans 'Project published, click to unpublish' %}" class="publishedproject" id="project_{{project.ldt_id}}" />
+        {% else %}
+        <img src="{{BASE_URL}}static/admin/img/admin/icon-no.gif" alt="{% trans 'Project not published, click to publish' %}" title="{% trans 'Project not published, click to publish' %}" class="unpublishedproject" id="project_{{project.ldt_id}}" />
+        {% endifequal %}
+        </div>
+        </td>
+        <td class="cellimg"><div class="cellimgdiv"><img src="{{MEDIA_URL}}/img/document_edit.gif" href="{% url ldt.ldt_utils.views.indexProject project.ldt_id %}" class="ldt_link" alt="{% trans 'open ldt' %}" title="{% trans 'open ldt' %}"/></div></td>
+        <td class="cellimg"><div class="cellimgdiv"><img src="{{MEDIA_URL}}/img/documents_duplicate.gif" href="{% url ldt.ldt_utils.views.copy_project project.ldt_id %}" class="ldt_link_create" alt="{% trans 'copy project' %}" title="{% trans 'copy project' %}"/></div></td>
+        <td class="cellimg"><div class="cellimgdiv"><img src="{{MEDIA_URL}}/img/plugin.gif" href="{% url ldt.ldt_utils.views.copy_project project.ldt_id %}" id="player_project_{{project.ldt_id}}" class="ldt_link_embed" alt="{% trans 'link json by id' %}" title="{% trans 'link json by id' %}"/></div></td>
+        <td class="projecttitle">{{ project.title }}</td>
+    </tr>
+{% endfor %}
+    </tbody>
+</table>
+</div>
+</div>
+<div class="projectscontentsfooter span-12 last">
++&nbsp;<a class='ldt_link_create' href="{% url ldt.ldt_utils.views.create_ldt_view %}" >{% trans "Create project" %}</a>
+</div>
--- a/web/franceculture/templates/franceculture/workspace.html	Fri Sep 10 17:41:12 2010 +0200
+++ b/web/franceculture/templates/franceculture/workspace.html	Sat Sep 11 01:18:28 2010 +0200
@@ -1,65 +1,37 @@
 {% extends "base.html" %}
 {% load i18n %}
 
+{% block js_import %}
+{{block.super}}
+	<script type="text/javascript" src="{{MEDIA_URL}}js/projectscontents.js" ></script>
+{% endblock %}
+
+
 {% block js_declaration %}
 {{block.super}}
 <script type="text/javascript">
-$(document).ready(function(){
+
+var content_filter_url = "{% url franceculture.views.contentsfilter filter='__FILTER__' %}";
+var project_filter_url = "{% url franceculture.views.projectsfilter filter='__FILTER__' is_owner='false' %}";
+
+function init_events(base_node) {
+
+	init_events_contents(base_node);
+			
+}
 
-	$('.ldt_link').nyroModal({
-           	type: 'iframe',
-           	forceType: 'iframe',
-       		height:662, 
-       		width:1022,
-       		bgColor: 'rgb(239, 239, 239)',
-       		padding: 5,
-       		titleFromIframe: false
-          	});
-        	
-     $('.ldt_link_create').nyroModal({
-            type: 'iframe',
-            forceType: 'iframe',
-            height:662, 
-            width:1022,
-            bgColor: 'rgb(239, 239, 239)',
-            padding: 5,
-            titleFromIframe: false,
-            beforeHideContent: function(elts, settings, callback){
-	             try {
-		              var res = $('#ldtInitSwf',$('#nyroModalIframe').contents());
-		              if(res.length > 0)
-		              {
-		              	   res.get(0).forceSave();
-		              }
-	             }
-	             catch(err)
-	             {
-	              // do nothing
-	             }                   
-	             callback();
-            }
-        });
+$(document).ready(function(){	
 
- 	 $('.ldt_link_embed').click(function(e) {
- 		e.preventDefault();
- 		link = $(e.target);
- 		json_url = link.attr("href");
- 		player_id = link.attr("id");
- 		/*$.nyroModalSettings({
- 		 	ajax: { data: ({ json_url:json_url, player_id:player_id }) }
-     	});*/
- 	    $.nyroModalManual({
-            type: 'iframe',
-            forceType: 'iframe',
-            titleFromIframe: false,
- 	    	height:662, 
- 	   		width:650,
- 	   		bgColor: 'rgb(239, 239, 239)',
- 	   		padding: 5,
-	 	    url: '{% url franceculture.views.popup_embed %}?json_url='+escape(json_url)+'&player_id='+escape(player_id),
- 	    });
- 	    return false;
-      });    
+	input_list_init = [
+		{'input_selector':"#searchcontentsinput", 'container_selector':"#contentslistcontainer", 'url':content_filter_url},
+		{'input_selector':"#searchprojectsinput", 'container_selector':"#projectslistcontainer", 'url':project_filter_url}
+	];
+
+	searchFieldInit(input_list_init);
+
+	init_events(document);
+
+
 });
 </script>
 
@@ -71,36 +43,28 @@
 {% endblock %}
 
 {% block content %}
-
-<div class="span-24 last" id="contentsdiv">
-<h1>{% trans "content list" %}</h1>
-<table>
-{% for content in contents %}
-    <tr>
-        <td>{{ content.title }}</td>
-        <td><a href="{% url ldt.ldt_utils.views.index content.iri_id %}" class="ldt_link">{% trans "open ldt" %}</a></td>
-        <td><a href="{% url ldt.ldt_utils.views.create_project content.iri_id %}" class="ldt_link_create">{% trans "create project" %}</a></td>
-        {% url ldt.ldt_utils.views.project_json_externalid content.external_id as json_url_externalid %}
-        <td><a href="{{WEB_URL}}{{json_url_externalid}}" class="ldt_link_embed" id="player_project_{{content.iri_id}}">{% trans "link json by externalid" %}</a>
-        </td>
-    </tr>
-{% endfor %}
-</table>
+<div class="span-24 last" id="allcontentsdiv">
+	<div class="span-12" id="contentsdiv">
+	    <div class="span-12 last titlediv" >
+			<div class="span-8 projectscontentstitle">{% trans "content list" %}</div>
+			<div class="span-4 last searchfielddiv" >
+			    <div class="searchfield rounded"><input id="searchcontentsinput" class="searchfieldinput searchfieldinputbase" value="{% trans 'search' %}" type="text" /><img id="contentsajaxloader" class="searchajaxloader" src="{{MEDIA_URL}}/img/ajax-loader-16x16.gif" alt="loader"/></div>
+			</div>
+		</div>
+		<div class="span-12 last projectscontentsdiv" id="contentslistcontainer">
+		{% include "franceculture/partial/contentslist.html" %}
+		</div>
+	</div>		
+	<div class="span-12 last" id="projectsdiv">
+		<div class="span-12 last titlediv" >
+			<div class="span-8 projectscontentstitle" >{% trans "project list" %}</div>
+			<div class="span-4 last searchfielddiv" >
+			    <div class="searchfield rounded"><input id="searchprojectsinput" class="searchfieldinput searchfieldinputbase" value="{% trans 'search' %}" type="text" /><img id="projectsajaxloader" class="searchajaxloader" src="{{MEDIA_URL}}/img/ajax-loader-16x16.gif" alt="loader"/></div>
+			</div>
+		</div>
+		<div class="span-12 last projectscontentsdiv" id="projectslistcontainer">
+		{% include "franceculture/partial/projectslist.html" %}
+		</div>
+	</div>
 </div>
-
-<div class="span-24 last" id="projectsdiv">
-<h1>{% trans "project list" %}</h1>
-<table>
-{% for project in projects %}
-    <tr>
-        <td>{{ project.title }}</td>
-        <td><a href="{% url ldt.ldt_utils.views.indexProject project.ldt_id %}" class="ldt_link">{% trans "open ldt" %}</a></td>
-        <td><a href="{% url ldt.ldt_utils.views.copy_project project.ldt_id %}" class="ldt_link_create">{% trans "copy project" %}</a></td>
-        {% url ldt.ldt_utils.views.project_json_id project.ldt_id as json_url_id %}
-        <td><a href="{{WEB_URL}}{{json_url_id}}" class="ldt_link_embed" id="player_project_{{project.ldt_id}}">{% trans "link json by id" %}</a>
-    </tr>
-{% endfor %}
-</table>
-</div>
-
 {% endblock %}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/franceculture/templates/ldt/ldt_utils/content_list.html	Sat Sep 11 01:18:28 2010 +0200
@@ -0,0 +1,62 @@
+{% extends "base.html" %}
+{% load i18n %}
+
+{% block js_import %}
+{{block.super}}
+	<script type="text/javascript" src="{{MEDIA_URL}}js/projectscontents.js" ></script>
+{% endblock %}
+
+{% block js_declaration %}
+{{block.super}}
+<script type="text/javascript">
+
+content_filter_url = "{% url franceculture.views.contentsfilter filter='__FILTER__' %}";
+
+function init_events(base_node) {
+
+	init_events_contents(base_node);		
+}
+
+$(document).ready(function(){
+
+	input_list_init = [
+		{'input_selector':"#searchcontentsinput", 'container_selector':"#contentslistcontainer", 'url':content_filter_url},
+	];
+	           	
+	
+	searchFieldInit(input_list_init);
+
+	$("#searchcontentsinput").keyup(function (e) {
+		var container_selector="#contentslistcontainer";
+		searchCallback(e.target, container_selector, searchcontentfilterurl);		
+	});
+	
+	init_events(document);
+
+});
+</script>
+
+{% endblock %}
+
+{% block css_import %}
+{{block.super}}
+    <link rel="stylesheet" href="{{BASE_URL}}static/css/workspace.css" type="text/css"/>
+{% endblock %}
+
+{% block content %}
+<div class="span-24" id="allcontentsdiv">
+	<div class="span-12" id="contentsdiv">
+	    <div class="span-12 last titlediv" >
+			<div class="span-8 projectscontentstitle">{% trans "content list" %}</div>
+			<div class="span-4 last searchfielddiv" >
+			    <div class="searchfield rounded"><input id="searchcontentsinput" class="searchfieldinput searchfieldinputbase" value="{% trans 'search' %}" type="text" /><img id="contentsajaxloader" class="searchajaxloader" src="{{MEDIA_URL}}/img/ajax-loader-16x16.gif" alt="loader"/></div>
+			</div>
+		</div>
+		<div class="span-12 last projectscontentsdiv" id="contentslistcontainer">
+		{% include "franceculture/partial/contentslist.html" %}
+		</div>
+	</div>		
+	<div class="span-12 last" id="createcontentsdiv">
+	</div>		
+</div>
+{% endblock %}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/franceculture/templates/ldt/ldt_utils/create_content.html	Sat Sep 11 01:18:28 2010 +0200
@@ -0,0 +1,58 @@
+{% extends "raw_base.html" %}
+
+{% load i18n %} {# form of creation of content #}
+{% load adminmedia %}
+
+{% block js_import %}
+	{{ block.super }}
+    <script type="text/javascript" src="{{MEDIA_URL}}admin/js/core.js" ></script>
+    <script type="text/javascript" src="{% url jsi18n %}" } ></script>
+    <script type="text/javascript" src="{{MEDIA_URL}}js/jquery.nyroModal.min.js"></script>    
+	{{ content_form.media.js }}
+{% endblock %}
+
+{% block css_import %}
+	{{ block.super }}
+	{{ content_form.media.css }}
+	<link rel="stylesheet" href="{{BASE_URL}}static/ldt/css/ldt.css" />
+	<link rel="stylesheet" href="{{MEDIA_URL}}css/ldtform.css" />
+{% endblock %}
+
+
+{% block js_declaration %}
+	<script type="text/javascript">
+	window.__admin_media_prefix__ = "{% filter escapejs %}{% admin_media_prefix %}{% endfilter %}";
+	
+    </script>
+{% endblock %}
+
+{% block body %}
+	<div id="add_content" class="span-18 last">
+	<div class="projectscontentstitle">{% trans "Create content" %}</div>
+	<form action="{{create_content_action}}" method="POST">
+	<div id="contentformhidden">
+		{% csrf_token %}
+		<input type="hidden" name="form_status" value="{{form_status}}" id="content_form_status" />
+		{% for hidden in form.hidden_fields %}
+	    	{{ hidden }}
+	    {% endfor %}
+    </div>
+    <div id="contentformfields" class="span-18 last">
+	<div id="contentleft" class="span-9">
+		<div>{{ content_form.src.errors }}{{ content_form.src.label_tag }}{{content_form.src}}</div>
+		<div>{{ content_form.videopath.errors }}{{ content_form.videopath.label_tag }}{{content_form.videopath}}</div>
+		<div>{{ content_form.title.errors }}{{ content_form.title.label_tag }}{{content_form.title}}</div>
+		<div>{{ content_form.description.errors }}{{ content_form.description.label_tag }}{{content_form.description}}</div>
+	</div>
+	<div id="contentright" class="span-9 last" >
+		<div>{{ content_form.external_id.errors }}{{ content_form.external_id.label_tag }}{{content_form.external_id}}</div>
+		<div>{{ content_form.duration.errors }}{{ content_form.duration.label_tag }}{{content_form.duration}}</div>
+		<div>{{ content_form.content_creation_date.errors }}{{ content_form.content_creation_date.label_tag }}{{content_form.content_creation_date}}</div>
+	</div>
+	</div>
+	<div id="submitcontent" class="span-18 last">
+		<input type="submit"/>
+	</div> 
+	</form>
+	</div>
+{% endblock %}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/franceculture/templates/ldt/ldt_utils/create_ldt.html	Sat Sep 11 01:18:28 2010 +0200
@@ -0,0 +1,53 @@
+{% extends "raw_base.html" %}
+
+{% load i18n %} {# form of creation of content #}
+{% load adminmedia %}
+
+{% block js_import %}
+	{{ block.super }}
+    <script type="text/javascript" src="{{MEDIA_URL}}js/jquery.nyroModal.min.js"></script>    
+	{{ content_form.media.js }}
+{% endblock %}
+
+{% block css_import %}
+	{{ block.super }}
+	{{ content_form.media.css }}
+	<link rel="stylesheet" href="{{BASE_URL}}static/ldt/css/ldt.css" />
+	<link rel="stylesheet" href="{{MEDIA_URL}}css/ldtform.css" />
+	<link rel="stylesheet" href="{{MEDIA_URL}}css/workspace.css" />
+{% endblock %}
+
+
+{% block body %}
+	<div id="add_contribution" class="span-12 last">
+	<div class="projectscontentstitle span-12 last">{% trans "Create your project" %}</div>
+	<form action="{{create_project_action}}" method="POST">
+	{% csrf_token %} 
+	<label for="title">{% trans "Title" %}:</label>
+	<input class="inputbox required" type="text" name="title" size="80" ; value="" id="title" />
+	<label>{% trans "List of contents" %}</label>
+	<div class="span-12 last projectscontentsdiv" id="ldtcreatecontentslistcontainer">
+		<div class="projectscontentsheader span-12 last" id="contentslistheader">{% trans "name" %}</div>
+		<div class="span-12 last projectscontentstablewrapperdiv" id="ldtcreatetablewrapperdiv">
+			<div class="span-12 last projectscontentstablediv" id="ldtcreatecontentstablediv">
+				<table class="projectscontentstable">
+				    <tbody class="projectscontentsbody">
+				{% for content in contents %}
+					<tr class="imageline {% cycle 'projectscontentsoddline' 'projectscontentsevenline'%}">
+					    <td class="cellcheckbox"><input type="checkbox" name="contents" value="{{ content.id }}" checked="true" /></td>
+					    <td class="contenttitle">{{ content.title }}</td>
+					</tr>
+				{% endfor %}
+					</tbody>
+				</table>
+			</div>
+		</div>
+	</div>
+	<div id="submitcontent" class="span-12 last">
+		<input class="button" id="ldt_submit" type="submit" value="{% trans 'Create' %}" />
+	</div>
+	</form>
+	</div>
+		
+{% endblock %}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/franceculture/templates/ldt/ldt_utils/ldt_list.html	Sat Sep 11 01:18:28 2010 +0200
@@ -0,0 +1,89 @@
+{% extends "base.html" %}
+{% load i18n %}
+
+{% block js_import %}
+{{block.super}}
+	<script type="text/javascript" src="{{MEDIA_URL}}js/projectscontents.js" ></script>
+{% endblock %}
+
+
+{% block js_declaration %}
+{{block.super}}
+<script type="text/javascript">
+
+searchprojectfilterurl = "{% url franceculture.views.projectsfilter filter='__FILTER__' is_owner='true' %}";
+publishprojecturl = "{% url ldt.ldt_utils.views.publish '__PROJECT_ID__' 'false' %}";
+unpublishprojecturl = "{% url ldt.ldt_utils.views.unpublish '__PROJECT_ID__' 'false' %}";
+
+function init_events(base_node) {
+
+	init_events_base(base_node);
+
+	$('.publishedproject', base_node).click(function(e) {
+		e.preventDefault();
+		var target = $(e.target);
+		var project_id = target.attr('id').replace('project_','');
+		var url = unpublishprojecturl.replace('__PROJECT_ID__', project_id);
+
+		$.getJSON(url, function(json){
+			if(json.res) {
+				searchCallback($('#searchprojectsinput'), "#projectslistcontainer", searchprojectfilterurl, 0);
+			}
+		});
+
+	});
+
+	$('.unpublishedproject', base_node).click(function(e) {
+		e.preventDefault();
+		var target = $(e.target);
+		var project_id = target.attr('id').replace('project_','');
+		var url = publishprojecturl.replace('__PROJECT_ID__', project_id);
+
+		$.getJSON(url, {}, function(json){
+			if(json.res) {
+				searchCallback($('#searchprojectsinput'), "#projectslistcontainer", searchprojectfilterurl, 0);
+			}
+		});
+
+	});
+	
+		
+}
+
+$(document).ready(function(){
+
+	input_list_init = [
+		{'input_selector':"#searchprojectsinput", 'container_selector':"#projectslistcontainer", 'url':searchprojectfilterurl}
+	];
+
+	searchFieldInit(input_list_init);
+	
+	init_events(document);
+
+});
+</script>
+
+{% endblock %}
+
+{% block css_import %}
+{{block.super}}
+    <link rel="stylesheet" href="{{BASE_URL}}static/css/workspace.css" type="text/css"/>
+{% endblock %}
+
+{% block content %}
+<div class="span-24" id="allcontentsdiv">
+	<div class="span-12 last" id="projectsdiv">
+		<div class="span-12 last titlediv" >
+			<div class="span-8 projectscontentstitle" >{% trans "project list" %}</div>
+			<div class="span-4 last searchfielddiv" >
+			    <div class="searchfield rounded"><input id="searchprojectsinput" class="searchfieldinput searchfieldinputbase" value="{% trans 'search' %}" type="text" /><img id="projectsajaxloader" class="searchajaxloader" src="{{MEDIA_URL}}/img/ajax-loader-16x16.gif"/></div>
+			</div>
+		</div>
+		<div class="span-12 last projectscontentsdiv" id="projectslistcontainer">
+		{% include "franceculture/partial/projectslist.html" %}
+		</div>
+	</div>
+	<div class="span-12 last" id="createprojectdiv">
+	</div>		
+</div>
+{% endblock %}
--- a/web/franceculture/templates/ldt/user/login_form.html	Fri Sep 10 17:41:12 2010 +0200
+++ b/web/franceculture/templates/ldt/user/login_form.html	Sat Sep 11 01:18:28 2010 +0200
@@ -25,22 +25,7 @@
 {% block css_import %}
 {{block.super}}
 {% endblock %}
-<div id="loginstate" class="block span-24 last">
-    <ul class="usertool">
-        {% if user.is_authenticated %}    
-            <li id="user">{{user.username}}</li>
-            <li><a href="{% url ldt.user.views.profile  %}" >{% trans "Profiles" %}</a> </li>
-            <li><a href="{% url ldt.user.views.space %}">{% trans "Space" %}</a></li>
-            {% if user.is_superuser %}
-            <li><a href="{% url registration.views.register  %}" >{% trans "Create an account" %}</a></li>
-            {% endif %}
-            <li><a href="{% url ldt.user.views.logout_view %}" >{% trans "Log out" %}</a></li>  
-        
-        {% else %}     
-            <li><a href="#inlineContent" class="login_link">{% trans "Log in" %}</li>
-        {% endif %}
-    </ul>
-</div>
+
 <div id="inlineContent" style="display: none;">
     <div id="loginform">
             <div class="title">
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/franceculture/templates/raw_base.html	Sat Sep 11 01:18:28 2010 +0200
@@ -0,0 +1,45 @@
+{% load i18n %}
+{% load logintag %}
+{% load navigation %}
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="{{LANGUAGE_CODE}}" lang="{{LANGUAGE_CODE}}">
+<head>
+{% block head %}
+	<meta http-equiv="Content-type" content="text/html;charset=UTF-8" />
+    <meta http-equiv="content-language" content="{{LANGUAGE_CODE}}" />
+    <link rel="SHORTCUT ICON" href="{{MEDIA_URL}}/img/favicon.ico" />
+    <title>{% block title %}France Culture{% endblock %}</title>
+    {% block js_import %}
+    <script type="text/javascript" src="{{MEDIA_URL}}js/jquery.min.js"></script>
+    {% endblock %}
+    
+    {% block css_declaration %}
+    <style type="text/css">
+		.rounded {
+			behavior:url("{{MEDIA_URL}}css/border-radius.htc");
+		}
+	</style>
+	{% endblock %}
+    
+    {% block css_import %}
+    
+    <link rel="stylesheet" href="{{BASE_URL}}static/css/blueprint/screen.css" type="text/css" media="screen, projection" />
+    <link rel="stylesheet" href="{{BASE_URL}}static/css/blueprint/print.css" type="text/css" media="print" />
+    <!--[if lt IE 8]>
+    <link rel="stylesheet" href="{{BASE_URL}}static/css/blueprint/ie.css" type="text/css" media="screen, projection" />
+    <![endif]-->
+    <link rel="stylesheet" href="{{BASE_URL}}static/css/style.css" type="text/css"/>
+    <link rel="stylesheet" href="{{LDT_MEDIA_PREFIX}}/css/style.css" type="text/css"/>
+    {% endblock %}
+    
+    {% block js_declaration %}
+    {% endblock %}
+{% endblock %}    
+</head>
+<body>
+{% block body %}
+{% endblock %}
+</body>
+</html>
--- a/web/franceculture/urls.py	Fri Sep 10 17:41:12 2010 +0200
+++ b/web/franceculture/urls.py	Sat Sep 11 01:18:28 2010 +0200
@@ -1,4 +1,4 @@
-from django.conf.urls.defaults import patterns ,include
+from django.conf.urls.defaults import patterns ,include, url
 from django.contrib import admin
 
 
@@ -20,8 +20,10 @@
     (r'^ldt/', include('ldt.ldt_utils.urls')),
     (r'^user/', include('ldt.user.urls')),
 
-    (r'^accounts/', include('registration.backends.default.urls')),
+    (r'^accounts/', include('registration.backends.simple.urls')),
 
-    (r'^/?$', "franceculture.views.workspace"),
+    url(r'^/?$', "franceculture.views.workspace", name="root-view"),
+    url(r'^filterprojects/(?P<filter>\w*)/(?P<is_owner>true|false)/$', "franceculture.views.projectsfilter", ),
+    url(r'^filtercontents/(?P<filter>\w*)/$', "franceculture.views.contentsfilter", ),
     (r'^embedpopup/?$', "franceculture.views.popup_embed"),
 )
--- a/web/franceculture/views.py	Fri Sep 10 17:41:12 2010 +0200
+++ b/web/franceculture/views.py	Sat Sep 11 01:18:28 2010 +0200
@@ -3,7 +3,9 @@
 from django.template import RequestContext
 from django.utils.html import escape
 from django.template.loader import render_to_string
-from ldt.ldt_utils.models import Content, Project
+from ldt.ldt_utils.models import Content, Project, Owner
+from ldt.ldt_utils.utils import boolean_convert
+from django.http import HttpResponseServerError
 
 
 @login_required
@@ -19,6 +21,44 @@
     return render_to_response("franceculture/workspace.html", 
                               {'contents': content_list, 'projects': project_list},
                               context_instance=RequestContext(request))
+
+@login_required
+def projectsfilter(request, filter, is_owner=False):
+    
+    project_list = None
+    is_owner = boolean_convert(is_owner)
+    
+    if is_owner:
+        owner = None
+        try:
+            owner = Owner.objects.get(user=request.user)
+        except:
+            return HttpResponseServerError("<h1>User not found</h1>")
+
+        project_list = Project.objects.filter(owner=owner)
+    else:
+        project_list = Project.objects.filter(state=2)
+    
+    if filter:
+        project_list = project_list.filter(title__icontains=filter)
+        
+    return render_to_response("franceculture/partial/projectslist.html", 
+                              {'projects': project_list},
+                              context_instance=RequestContext(request))
+
+
+@login_required
+def contentsfilter(request, filter):
+    if filter:
+        content_list = Content.objects.filter(title__icontains=filter)
+    else:
+        content_list = Content.objects.all()
+        
+    return render_to_response("franceculture/partial/contentslist.html", 
+                              {'contents': content_list},
+                              context_instance=RequestContext(request))
+
+     
     
 def popup_embed(request):
     
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/forms/widgets.py	Sat Sep 11 01:18:28 2010 +0200
@@ -0,0 +1,17 @@
+"""
+Some useful form widgets
+"""
+
+from django.contrib.admin.widgets import AdminSplitDateTime
+from django.utils.safestring import mark_safe
+from django.utils.translation import ugettext as _
+
+
+class LdtSplitDateTime(AdminSplitDateTime):
+    """
+    A widget that extend the AdminSplitDateTime to improve the html outputted
+    """
+    
+    def format_output(self, rendered_widgets):
+        return mark_safe(u'<div class="ldtdatetime"><div class="ldtdate"><div class="ldtdatetitle">%s</div> <div class="ldtdatefield">%s</div></div><div class="ldttime"><div class="ldttimetitle">%s</div> <div class="ldttimefield">%s</div></div></div>' % \
+            (_('Date'), rendered_widgets[0],  _('Time'), rendered_widgets[1]))
--- a/web/ldt/ldt_utils/forms.py	Fri Sep 10 17:41:12 2010 +0200
+++ b/web/ldt/ldt_utils/forms.py	Sat Sep 11 01:18:28 2010 +0200
@@ -1,6 +1,12 @@
 from django import forms
 from models import Project, Content
 import uuid
+from utils import generate_uuid
+from django.forms.widgets import Widget
+from django.contrib.admin import widgets as admin_widgets
+from django.core.urlresolvers import reverse
+from ldt.settings import BASE_URL
+from ldt.forms import widgets as ldt_widgets
 
 class LdtImportForm(forms.Form):
     importFile = forms.FileField()
@@ -27,3 +33,37 @@
 
 class CopyProjectForm (forms.Form):
     title = forms.CharField()
+    
+
+class ContentForm(forms.ModelForm):
+
+    #iri_id = forms.CharField(max_length=1024, widget=forms.HiddenInput, initial=generate_uuid)
+    iriurl = forms.CharField(max_length=1024, widget=forms.HiddenInput, required=False)
+    content_creation_date = forms.SplitDateTimeField(widget=ldt_widgets.LdtSplitDateTime, required=False)
+    
+    def clean_iri_id(self):
+        data = self.cleaned_data.get('iri_id')
+        if not data:
+            data = generate_uuid()
+        return data
+    
+    def clean(self):
+        cleaned_data = self.cleaned_data
+        iriurl_data = cleaned_data.get('iriurl')
+        iri_id_data = cleaned_data['iri_id']
+        if not iriurl_data:
+            iriurl_data = "%s/%s.iri" % (iri_id_data, iri_id_data)    
+        cleaned_data['iriurl'] = iriurl_data
+        return cleaned_data
+    
+    class Meta:
+        model = Content
+        exclude = ("creation_date", "update_date", "authors")
+        widgets = {
+                   'iri_id': forms.HiddenInput,
+        }
+        
+    class Media:
+        css = {
+            'all' : ('admin/css/forms.css','admin/css/base.css', 'admin/css/base.css', 'admin/css/widgets.css')
+               }
--- a/web/ldt/ldt_utils/models.py	Fri Sep 10 17:41:12 2010 +0200
+++ b/web/ldt/ldt_utils/models.py	Sat Sep 11 01:18:28 2010 +0200
@@ -2,7 +2,7 @@
 from django.db import models
 from django.utils.translation import ugettext_lazy as _
 from ldt.core.models import Document, Owner
-from utils import create_ldt, copy_ldt, create_empty_iri, update_iri
+from utils import create_ldt, copy_ldt, create_empty_iri, update_iri, generate_uuid
 import lxml.etree
 import os.path
 import uuid
@@ -19,17 +19,18 @@
 
 
 class Content(models.Model):
-    iri_id = models.CharField(max_length=1024, unique=True)
-    iriurl = models.CharField(max_length=1024)
-    src = models.CharField(max_length=1024)
-    videopath = models.CharField(max_length=1024, null=True, blank=True)
-    creation_date = models.DateTimeField(auto_now_add=True)
-    update_date = models.DateTimeField(auto_now=True)
-    title = models.CharField(max_length=1024, null=True, blank=True)
-    description = models.TextField(null=True, blank=True)
-    external_id = models.CharField(max_length=1024, null=True, blank=True)
-    authors = models.ManyToManyField(Author, blank=True)
-    duration = models.IntegerField(null=True, blank=True)
+    iri_id = models.CharField(max_length=1024, unique=True, default=generate_uuid, verbose_name=_('content.iri_id'))
+    iriurl = models.CharField(max_length=1024, verbose_name=_('content.iriurl'))
+    src = models.CharField(max_length=1024, null=True, blank=True, verbose_name=_('content.src'))
+    videopath = models.CharField(max_length=1024, null=True, blank=True, verbose_name=_('content.videopath'))
+    creation_date = models.DateTimeField(auto_now_add=True, verbose_name=_('content.creation_date'))
+    update_date = models.DateTimeField(auto_now=True, verbose_name=_('content.update_date'))
+    title = models.CharField(max_length=1024, null=True, blank=True, verbose_name=_('content.title'))
+    description = models.TextField(null=True, blank=True, verbose_name=_('content.description'))
+    external_id = models.CharField(max_length=1024, null=True, blank=True, verbose_name=_('content.external_id'))
+    authors = models.ManyToManyField(Author, blank=True, verbose_name=_('content.authors'))
+    duration = models.IntegerField(null=True, blank=True, verbose_name=_('content.duration'))
+    content_creation_date = models.DateTimeField(null=True, blank=True, verbose_name=_('content.content_creation_date'))
 
     def get_duration(self):
         if self.duration is None:
@@ -47,6 +48,7 @@
         
     #TODO: better manage the change in .iri name and error scenario (save in temp file + rename
     def save(self, *args, **kwargs):
+        
         # create iri file if needed
         created = False
         try:
@@ -67,6 +69,7 @@
                 if os.path.exists(iri_file_path):
                     os.remove(iri_file_path)
             raise e
+        
         # update it 
         super(Content, self).save(*args, **kwargs)
     
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/ldt_utils/templates/ldt/ldt_utils/content_list.html	Sat Sep 11 01:18:28 2010 +0200
@@ -0,0 +1,84 @@
+{% extends "ldt/user/user_base.html" %}
+{% load i18n %}
+
+{% block js_declaration %}
+{{block.super}}
+<script type="text/javascript">
+$(document).ready(function(){
+
+	$('.ldt_link').nyroModal({
+           	type: 'iframe',
+           	forceType: 'iframe',
+       		height:662, 
+       		width:1022,
+       		bgColor: 'rgb(239, 239, 239)',
+       		padding: 5,
+       		titleFromIframe: false
+          	});
+        	
+     $('.ldt_link_create').nyroModal({
+            type: 'iframe',
+            forceType: 'iframe',
+            height:662, 
+            width:1022,
+            bgColor: 'rgb(239, 239, 239)',
+            padding: 5,
+            titleFromIframe: false,
+            beforeHideContent: function(elts, settings, callback){
+	             try {
+		              var res = $('#ldtInitSwf',$('#nyroModalIframe').contents());
+		              if(res.length > 0)
+		              {
+		              	   res.get(0).forceSave();
+		              }
+	             }
+	             catch(err)
+	             {
+	              // do nothing
+	             }                   
+	             callback();
+            }
+        });
+
+});
+</script>
+
+{% endblock %}
+
+{% block css_import %}
+{{block.super}}
+    <link rel="stylesheet" type="text/css" href="{{ BASE_URL }}static/ldt/css/ldt.css" />
+{% endblock %}
+
+{% block breadcrumb %}
+<li></li>
+<li><a href="{% url ldt.userpanel.views.space %}">{% trans "Space" %}</a></li>
+<li>{% trans "Ldt Project" %}</li>
+{% endblock %}
+
+{% block content_title %}{% trans "Contents" %}{%endblock %}
+
+{% block iricontent %}
+<div id='contentlist'><a
+	href="#" class="create_content_link">{% trans 'Create new content'%}</a>
+
+<table>
+<caption>{% trans "Content" %}</caption>
+	<thead>
+		<tr>
+			<th width="170">{% trans "title" %}</th>
+			<th width="20">{% trans "create project" %}</th>
+		</tr>
+	</thead>
+	<tbody>
+{% for content in contents %}
+    <tr>
+        <td><a href="{% url ldt.ldt_utils.views.index content.iri_id %}" class="ldt_link">{{ content.title }}</a></td>
+        <td><a href="{% url ldt.ldt_utils.views.create_project content.iri_id %}" class="ldt_link_create">{% trans "create project" %}</a></td>
+    </tr>
+{% endfor %}
+    </tbody>
+</table>
+</div>
+
+{% endblock %}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/ldt_utils/templates/ldt/ldt_utils/create_content.html	Sat Sep 11 01:18:28 2010 +0200
@@ -0,0 +1,31 @@
+{% load i18n %} {# form of creation of content #}
+{% load adminmedia %}
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<?xml version="1.0" encoding="UTF-8"?>
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+    <script type="text/javascript" src="{{MEDIA_URL}}admin/js/core.js" ></script>
+    <script type="text/javascript" src="{% url jsi18n %}" } ></script>
+    <script type="text/javascript" src="{{MEDIA_URL}}js/jquery.min.js"></script>
+    <script type="text/javascript" src="{{MEDIA_URL}}js/jquery.nyroModal.min.js"></script>    
+	<link rel="stylesheet" href="{{BASE_URL}}static/ldt/css/ldt.css" />
+	<link rel="stylesheet" href="{{MEDIA_URL}}css/ldtform.css" />
+	{{content_form.media }}
+	<script type="text/javascript">
+	window.__admin_media_prefix__ = "{% filter escapejs %}{% admin_media_prefix %}{% endfilter %}";
+	
+    </script>
+</head>
+<body>
+<div id="add_content">
+<div class="title">{% trans "Create content" %}</div>
+<form action="{{create_content_action}}" method="POST">
+{% csrf_token %}
+{{ content_form.as_ul }}
+<input type="hidden" name="form_status" value="{{form_status}}" id="content_form_status" />
+<input type="submit"/> 
+</form>
+</div>
+</body>
+</html>
--- a/web/ldt/ldt_utils/templates/ldt/ldt_utils/ldt_list.html	Fri Sep 10 17:41:12 2010 +0200
+++ b/web/ldt/ldt_utils/templates/ldt/ldt_utils/ldt_list.html	Sat Sep 11 01:18:28 2010 +0200
@@ -66,16 +66,16 @@
 		</tr>
 	</thead>
 	<tbody>
-		{% for ldt in ldtProjects %}
+		{% for ldt in projects %}
 		<tr>
 			<th><a href="{% url ldt.ldt_utils.views.indexProject ldt.ldt_id %}"
 				class="ldt_link">{{ ldt.title }}</a></th>
 			{% ifequal ldt.state 2%}
 			<td><a href="{% url ldt.ldt_utils.views.unpublish ldt.ldt_id%}"><img
-				alt="True" src="{{BASE_URL}}static/admin/img/admin/icon-yes.gif" /></td>
+				alt="True" src="{{BASE_URL}}static/admin/img/admin/icon-yes.gif" /></a></td>
 			{% else %}
 			<td><a href="{% url ldt.ldt_utils.views.publish ldt.ldt_id %}"><img
-				alt="False" src="{{BASE_URL}}static/admin/img/admin/icon-no.gif" /></td>
+				alt="False" src="{{BASE_URL}}static/admin/img/admin/icon-no.gif" /></a></td>
 			{% endifequal %}
 		</tr>
 		{% endfor %}
--- a/web/ldt/ldt_utils/urls.py	Fri Sep 10 17:41:12 2010 +0200
+++ b/web/ldt/ldt_utils/urls.py	Sat Sep 11 01:18:28 2010 +0200
@@ -22,8 +22,15 @@
     url(r'^cljson/externalid/(?P<id>.*)$', 'views.project_json_externalid'),
 )
 
+urlpatterns += patterns('',
+    url('^jsi18n','django.views.i18n.javascript_catalog', name='jsi18n'),
+)
+
+
 if test_ldt():
     urlpatterns += patterns('ldt.ldt_utils',
+        url(r'^space/content/$', 'views.list_content'),
+        url(r'^space/content/create/$', 'views.write_content'),
         url(r'^space/ldt/$', 'views.list_ldt'),
         url(r'^space/ldt/indexproject/(?P<id>.*)$', 'views.indexProject'),
         url(r'^space/ldt/init/(?P<method>.*)/(?P<url>.+)$', 'views.init', name='space_ldt_init'),
@@ -31,7 +38,7 @@
         url(r'^space/ldt/create/$', 'views.create_ldt_view'),
         url(r'^space/ldt/created_done/$', 'views.created_ldt'),
         url(r'^space/ldt/save/$', 'views.save_ldtProject'),
-        url(r'^space/ldt/publish/(?P<id>.*)$', 'views.publish'),
-        url(r'^space/ldt/unpublish/(?P<id>.*)$', 'views.unpublish'),
+        url(r'^space/ldt/publish/(?P<id>[\w-]*)(?:/(?P<redirect>true|false))?$', 'views.publish'),
+        url(r'^space/ldt/unpublish/(?P<id>[\w-]*)(?:/(?P<redirect>true|false))?$', 'views.unpublish'),
 
 )
--- a/web/ldt/ldt_utils/utils.py	Fri Sep 10 17:41:12 2010 +0200
+++ b/web/ldt/ldt_utils/utils.py	Sat Sep 11 01:18:28 2010 +0200
@@ -14,6 +14,26 @@
 import Ft
 import lxml.etree
 
+__BOOLEAN_DICT = {
+    'false':False,
+    'true':True,
+    '0':False,
+    '1':True,
+    't': True,
+    'f':False
+}
+
+def boolean_convert(bool):
+    if bool is None:
+        return False
+    if bool is True or bool is False:
+        return bool
+    key = str(bool).lower()
+    return __BOOLEAN_DICT.get(key, False)
+
+def generate_uuid():
+    return unicode(uuid.uuid1())
+
 class LdtSearch(object):
 
     def query(self, field, query):
--- a/web/ldt/ldt_utils/views.py	Fri Sep 10 17:41:12 2010 +0200
+++ b/web/ldt/ldt_utils/views.py	Sat Sep 11 01:18:28 2010 +0200
@@ -9,7 +9,7 @@
 from django.utils import simplejson
 from django.utils.html import escape
 from fileimport import *
-from forms import LdtImportForm, LdtAddForm, SearchForm, AddProjectForm, CopyProjectForm
+from forms import LdtImportForm, LdtAddForm, SearchForm, AddProjectForm, CopyProjectForm, ContentForm
 from ldt.core.models import Owner
 from models import *
 from utils import *
@@ -133,10 +133,19 @@
     ldtProjects = Project.objects.filter(owner=owner)
     context={
     'contents': contents,
-    'ldtProjects': ldtProjects.reverse(),
+    'projects': ldtProjects.reverse(),
     }
     return render_to_response('ldt/ldt_utils/ldt_list.html', context, context_instance=RequestContext(request))
 
+@login_required         
+def list_content(request):
+    contents = Content.objects.all()
+    context={
+        'contents': contents,
+    }
+    return render_to_response('ldt/ldt_utils/content_list.html', context, context_instance=RequestContext(request))
+
+@login_required
 def create_ldt_view(request):
     if request.method == "POST" :
         form = LdtAddForm(request.POST)
@@ -276,18 +285,26 @@
     return render_to_response('ldt/ldt_utils/save_done.html', {'ldt': ldt, 'id':id, 'title':title, 'contents': new_contents}, context_instance=RequestContext(request))
     
 @login_required    
-def publish(request, id):
+def publish(request, id, redirect=True):
     ldt = get_object_or_404(Project, ldt_id=id)
     ldt.state = 2 #published
     ldt.save()
-    return HttpResponseRedirect(reverse("ldt.ldt_utils.views.list_ldt"))
+    redirect = boolean_convert(redirect)
+    if redirect:
+        return HttpResponseRedirect(reverse("ldt.ldt_utils.views.list_ldt"))
+    else:
+        return HttpResponse(simplejson.dumps({'res':True, 'ldt': {'id': ldt.id, 'state':ldt.state,'ldt_id': ldt.ldt_id}}, ensure_ascii=False),mimetype='application/json')
     
 @login_required    
-def unpublish(request, id):
+def unpublish(request, id, redirect=True):
     ldt = get_object_or_404(Project, ldt_id=id)
     ldt.state = 1 #edition
     ldt.save()
-    return HttpResponseRedirect(reverse("ldt.ldt_utils.views.list_ldt"))
+    redirect = boolean_convert(redirect)
+    if redirect:
+        return HttpResponseRedirect(reverse("ldt.ldt_utils.views.list_ldt"))
+    else:
+        return HttpResponse(simplejson.dumps({'res':True, 'ldt': {'id': ldt.id, 'state':ldt.state,'ldt_id': ldt.ldt_id}}, ensure_ascii=False),mimetype='application/json')
     
 
 def index(request, url):
@@ -347,3 +364,35 @@
         form = CopyProjectForm
     return render_to_response('ldt/ldt_utils/copy_ldt.html', {'form':form, 'project':project}, context_instance=RequestContext(request))
 
+
+def write_content_base(request):
+    
+    form_status= 'none'        
+    if request.method =="POST":
+        form = ContentForm(request.POST)
+        if form.is_valid():
+            content, created = Content.objects.get_or_create(iri_id = form.cleaned_data['iri_id'], defaults = form.cleaned_data)
+            if not created:
+                form =  ContentForm(request.POST, instance=content)
+                form.save()
+            else:
+                content.save()
+            form_status = 'saved'
+            form = ContentForm(instance=content)
+        else:
+            form_status = 'error'
+    else:
+        form_status = 'empty'
+        form = ContentForm()
+    
+    return form, form_status
+
+
+def write_content(request):
+    
+    content_form, form_status = write_content_base(request)
+    
+    return render_to_response('ldt/ldt_utils/create_content.html', {'content_form': content_form, 'form_status': form_status,'create_content_action': reverse(write_content)}, context_instance=RequestContext(request))
+
+
+    
\ No newline at end of file
--- a/web/ldt/media/css/dashboard.css	Fri Sep 10 17:41:12 2010 +0200
+++ b/web/ldt/media/css/dashboard.css	Sat Sep 11 01:18:28 2010 +0200
@@ -1,3 +1,4 @@
+@charset "UTF-8";
 
 #content-main-app-ldt-utils {
     float: left;
--- a/web/ldt/media/css/ldt.css	Fri Sep 10 17:41:12 2010 +0200
+++ b/web/ldt/media/css/ldt.css	Sat Sep 11 01:18:28 2010 +0200
@@ -1,3 +1,5 @@
+@charset "UTF-8";
+
 #addldtform
 {
     font-size: 16px;
--- a/web/ldt/media/css/style.css	Fri Sep 10 17:41:12 2010 +0200
+++ b/web/ldt/media/css/style.css	Sat Sep 11 01:18:28 2010 +0200
@@ -1,3 +1,5 @@
+@charset "UTF-8";
+
 #loginstate a, #loginstate a:hover, #loginstate a:visited, #loginstate a:link, #loginstate a:active {
     color:#0063DC;
     margin-right:4px;
--- a/web/ldt/media/css/style_base.css	Fri Sep 10 17:41:12 2010 +0200
+++ b/web/ldt/media/css/style_base.css	Sat Sep 11 01:18:28 2010 +0200
@@ -1,3 +1,5 @@
+@charset "UTF-8";
+
 body
 {   font-family: Arial, Helvetica, sans serif;
     padding: 0px;
--- a/web/ldt/settings.py	Fri Sep 10 17:41:12 2010 +0200
+++ b/web/ldt/settings.py	Sat Sep 11 01:18:28 2010 +0200
@@ -13,6 +13,7 @@
 #SERVER_EMAIL = "admin@domain.com"
 
 WEB_URL = getattr(settings, 'WEB_URL', '')
+BASE_URL = getattr(settings, 'BASE_URL', '')
 MEDIA_URL = getattr(settings, 'MEDIA_URL', '')
 MEDIA_ROOT = getattr(settings, 'MEDIA_ROOT', '')
 SITE_ID = getattr(settings, 'SITE_ID', 1)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/ldt/templatetags/navigation.py	Sat Sep 11 01:18:28 2010 +0200
@@ -0,0 +1,19 @@
+from django.template import Library
+import re
+
+register = Library()
+
+
+@register.simple_tag
+def active(request, css_class, pattern, exact=True):
+    """
+    a simple tag to test the current path and return a given css class.
+    Useful for navigation tabs
+    """
+    if pattern:
+        if exact:
+            pattern = "^%s$" % pattern.lstrip("^").rstrip("$")
+     
+        if re.search(pattern, request.path):
+            return css_class
+    return ''
\ No newline at end of file
--- a/web/static/css/LdtPlayer.css	Fri Sep 10 17:41:12 2010 +0200
+++ b/web/static/css/LdtPlayer.css	Sat Sep 11 01:18:28 2010 +0200
@@ -1,105 +1,105 @@
-		#demo-frame > div.demo { padding: 5px !important; };
-		
-		button.ui-button-icon-only  {
-			height:1.5em;
-			width:1.5em;
-		}
-		
-		#Ldt-controler {
-			font-size: 62.5%;
-			font-family: "Trebuchet MS", "Helvetica", "Arial",  "Verdana", "sans-serif";
-		}
+@charset "UTF-8";
 
-		.Ldt-iri-chapter{
-			padding-top:10px;
-			padding-bottom:5px;
-			border-left:solid 1px #000;
-			border-right:solid 1px #000;
-		}
-		
-		.tooltip {
-			display:none;
-			background:transparent url(../css/jq-css/imgs/white_arrow_mini.png);
-			font-size:12px;
-			height:55px;
-			width:180px;
-			padding:10px;
-			padding-left:15px;
-			padding-top:15px;
-			padding-right:15px;
-			color:#000;	
-			font-family: "Trebuchet MS", "Helvetica", "Arial",  "Verdana", "sans-serif";
-		}
+#demo-frame > div.demo { padding: 5px !important; };
 		
-		#Ldt-Annotations{
-			padding-left:5px;
-			width:470px;
-			float:left;
-			font-size: 62.5%;
-		}
-		#Ldt-SaTitle{
-			padding-top:2px;
-			padding-bottom:5px;
-			font-size:18px;
-			color:#FFF;	
-			height:22p;
-		}
-		#Ldt-SaDescription{
-			font-size:12px;	
-			color:#FFF;	
-		}
-		#Ldt-ShowAnnotation{
-			position:absolute;
-			z-index: 999;
-			padding:5px;
-			background:url(../css/jq-css/imgs/transBlack.png);
-			font-family: "Trebuchet MS", "Helvetica", "Arial",  "Verdana", "sans-serif";
-		}
-		
-		#Ldt-PlaceHolder{
-			position:absolue;
-			float:none;
-		}
-		.Ldt-Control1{
-			width:70px;
-			float:left;
-		}
-		.Ldt-Control2{
-			padding-left:10px;
-			width:70px;
-			float:left;
-		}
-		.Ldt-cleaner {
-			clear:both;
-		} 
-		.share {
-			background:url('../css/jq-css/imgs/widget20.png') no-repeat scroll 0 0 transparent ;
-			display:block;
-			height:16px;
-			line-height:16px !important;
-			overflow:hidden;
-			width:16px;
-			float:left;
-			cursor:pointer;
-			margin:2px;
-		}
-		.shareFacebook{
-			background-position:0 -704px;
-		}
-		.shareMySpace{
-			background-position:0 -736px;
-		}
-		.shareTwitter{
-			background-position:0 -1072px;
-		}
-		.shareGoogle{
-			background-position:0 -752px;
-		}
-		.shareDelicious{
-			background-position:0 -672px;
-		}
-		.shareJamesPot{
-			background-position:0 -1808px;
-		}
-		
-		
\ No newline at end of file
+button.ui-button-icon-only  {
+	height:1.5em;
+	width:1.5em;
+}
+
+#Ldt-controler {
+	font-size: 62.5%;
+	font-family: "Trebuchet MS", "Helvetica", "Arial",  "Verdana", "sans-serif";
+}
+
+.Ldt-iri-chapter{
+	padding-top:10px;
+	padding-bottom:5px;
+	border-left:solid 1px #000;
+	border-right:solid 1px #000;
+}
+
+.tooltip {
+	display:none;
+	background:transparent url(../css/jq-css/imgs/white_arrow_mini.png);
+	font-size:12px;
+	height:55px;
+	width:180px;
+	padding:10px;
+	padding-left:15px;
+	padding-top:15px;
+	padding-right:15px;
+	color:#000;	
+	font-family: "Trebuchet MS", "Helvetica", "Arial",  "Verdana", "sans-serif";
+}
+
+#Ldt-Annotations{
+	padding-left:5px;
+	width:470px;
+	float:left;
+	font-size: 62.5%;
+}
+#Ldt-SaTitle{
+	padding-top:2px;
+	padding-bottom:5px;
+	font-size:18px;
+	color:#FFF;	
+	height:22p;
+}
+#Ldt-SaDescription{
+	font-size:12px;	
+	color:#FFF;	
+}
+#Ldt-ShowAnnotation{
+	position:absolute;
+	z-index: 999;
+	padding:5px;
+	background:url(../css/jq-css/imgs/transBlack.png);
+	font-family: "Trebuchet MS", "Helvetica", "Arial",  "Verdana", "sans-serif";
+}
+
+#Ldt-PlaceHolder{
+	position:absolue;
+	float:none;
+}
+.Ldt-Control1{
+	width:70px;
+	float:left;
+}
+.Ldt-Control2{
+	padding-left:10px;
+	width:70px;
+	float:left;
+}
+.Ldt-cleaner {
+	clear:both;
+} 
+.share {
+	background:url('../css/jq-css/imgs/widget20.png') no-repeat scroll 0 0 transparent ;
+	display:block;
+	height:16px;
+	line-height:16px !important;
+	overflow:hidden;
+	width:16px;
+	float:left;
+	cursor:pointer;
+	margin:2px;
+}
+.shareFacebook{
+	background-position:0 -704px;
+}
+.shareMySpace{
+	background-position:0 -736px;
+}
+.shareTwitter{
+	background-position:0 -1072px;
+}
+.shareGoogle{
+	background-position:0 -752px;
+}
+.shareDelicious{
+	background-position:0 -672px;
+}
+.shareJamesPot{
+	background-position:0 -1808px;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/static/css/border-radius.htc	Sat Sep 11 01:18:28 2010 +0200
@@ -0,0 +1,143 @@
+--Do not remove this if you are using--
+Original Author: Remiz Rahnas
+Original Author URL: http://www.htmlremix.com
+Published date: 2008/09/24
+
+Changes by Nick Fetchak:
+- IE8 standards mode compatibility
+- VML elements now positioned behind original box rather than inside of it - should be less prone to breakage
+Published date : 2009/11/18
+
+
+<public:attach event="oncontentready" onevent="oncontentready('v08vnSVo78t4JfjH')" />
+<script type="text/javascript">
+
+// findPos() borrowed from http://www.quirksmode.org/js/findpos.html
+function findPos(obj) {
+	var curleft = curtop = 0;
+
+	if (obj.offsetParent) {
+		do {
+			curleft += obj.offsetLeft;
+			curtop += obj.offsetTop;
+		} while (obj = obj.offsetParent);
+	}
+
+	return({
+		'x': curleft,
+		'y': curtop
+	});
+}
+
+function oncontentready(classID) {
+  if (this.className.match(classID)) { return(false); }
+
+	if (!document.namespaces.v) { document.namespaces.add("v", "urn:schemas-microsoft-com:vml"); }
+
+	this.className = this.className.concat(' ', classID);
+	var arcSize = Math.min(parseInt(this.currentStyle['-moz-border-radius'] ||
+	                                this.currentStyle['-webkit-border-radius'] ||
+	                                this.currentStyle['border-radius'] ||
+	                                this.currentStyle['-khtml-border-radius']) /
+	                       Math.min(this.offsetWidth, this.offsetHeight), 1);
+	var fillColor = this.currentStyle.backgroundColor;
+	var fillSrc = this.currentStyle.backgroundImage.replace(/^url\("(.+)"\)$/, '$1');
+	var strokeColor = this.currentStyle.borderColor;
+	var strokeWeight = parseInt(this.currentStyle.borderWidth);
+	var stroked = 'true';
+	if (isNaN(strokeWeight)) {
+		strokeWeight = 0;
+		strokeColor = fillColor;
+		stroked = 'false';
+	}
+
+	this.style.background = 'transparent';
+	this.style.borderColor = 'transparent';
+
+	// Find which element provides position:relative for the target element (default to BODY)
+	var el = this;
+	var limit = 100, i = 0;
+	while ((typeof(el) != 'unknown') && (el.currentStyle.position != 'relative') && (el.tagName != 'BODY')) {
+		el = el.parentElement;
+		i++;
+		if (i >= limit) { return(false); }
+	}
+	var el_zindex = parseInt(el.currentStyle.zIndex);
+	if (isNaN(el_zindex)) { el_zindex = 0; }
+	//alert('got tag '+ el.tagName +' with pos '+ el.currentStyle.position);
+
+	var rect_size = {
+		'width': this.offsetWidth - strokeWeight,
+		'height': this.offsetHeight - strokeWeight
+	};
+	var el_pos = findPos(el);
+	var this_pos = findPos(this);
+	this_pos.y = this_pos.y + (0.5 * strokeWeight) - el_pos.y;
+	this_pos.x = this_pos.x + (0.5 * strokeWeight) - el_pos.x;
+
+	var rect = document.createElement('v:roundrect');
+	rect.arcsize = arcSize +'px';
+	rect.strokecolor = strokeColor;
+	rect.strokeWeight = strokeWeight +'px';
+	rect.stroked = stroked;
+	rect.style.display = 'block';
+	rect.style.position = 'absolute';
+	rect.style.top = this_pos.y +'px';
+	rect.style.left = this_pos.x +'px';
+	rect.style.width = rect_size.width +'px';
+	rect.style.height = rect_size.height +'px';
+	rect.style.antialias = true;
+	rect.style.zIndex = el_zindex - 1;
+
+	var fill = document.createElement('v:fill');
+	fill.color = fillColor;
+	fill.src = fillSrc;
+	fill.type = 'tile';
+
+	rect.appendChild(fill);
+	el.appendChild(rect);
+
+	var css = el.document.createStyleSheet();
+	css.addRule("v\\:roundrect", "behavior: url(#default#VML)");
+	css.addRule("v\\:fill", "behavior: url(#default#VML)");
+
+	isIE6 = /msie|MSIE 6/.test(navigator.userAgent);
+	// IE6 doesn't support transparent borders, use padding to offset original element
+	if (isIE6 && (strokeWeight > 0)) {
+		this.style.borderStyle = 'none';
+		this.style.paddingTop = parseInt(this.currentStyle.paddingTop || 0) + strokeWeight;
+		this.style.paddingBottom = parseInt(this.currentStyle.paddingBottom || 0) + strokeWeight;
+	}
+
+	if (typeof(window.rounded_elements) == 'undefined') {
+		window.rounded_elements = new Array();
+
+		if (typeof(window.onresize) == 'function') { window.previous_onresize = window.onresize; }
+		window.onresize = window_resize;
+	}
+	this.element.vml = rect;
+	window.rounded_elements.push(this.element);
+}
+
+function window_resize() {
+	if (typeof(window.rounded_elements) == 'undefined') { return(false); }
+
+	for (var i in window.rounded_elements) {
+		var el = window.rounded_elements[i];
+
+		var strokeWeight = parseInt(el.currentStyle.borderWidth);
+		if (isNaN(strokeWeight)) { strokeWeight = 0; }
+
+		var parent_pos = findPos(el.vml.parentNode);
+		var pos = findPos(el);
+		pos.y = pos.y + (0.5 * strokeWeight) - parent_pos.y;
+		pos.x = pos.x + (0.5 * strokeWeight) - parent_pos.x;
+
+		el.vml.style.top = pos.y +'px';
+		el.vml.style.left = pos.x +'px';
+	}
+
+	if (typeof(window.previous_onresize) == 'function') { window.previous_onresize(); }
+}
+</script>
+
--- a/web/static/css/custom_player.css	Fri Sep 10 17:41:12 2010 +0200
+++ b/web/static/css/custom_player.css	Sat Sep 11 01:18:28 2010 +0200
@@ -1,3 +1,5 @@
+@charset "UTF-8";
+
 #demo-frame > div.demo { padding: 5px !important; };
 .iri-chapter{
 	padding-top:10px;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/static/css/ldtform.css	Sat Sep 11 01:18:28 2010 +0200
@@ -0,0 +1,103 @@
+@charset "UTF-8";
+
+#add_content, #add_contribution {
+	padding: 10px;	
+}
+
+
+#add_content input, #add_content textarea, #add_content select,
+#add_contribution input, #add_contribution textarea, #add_contribution select
+{
+	background: #ededed;
+	width: 250px;
+}
+
+#add_contribution input[type="checkbox"] {
+	width: auto;
+}
+
+
+#add_content textarea {
+	height : 125px;
+}
+
+#add_content li {
+	list-style: none;
+}
+
+
+label {
+	display: block;
+	margin-top: 0.5em;
+}
+
+#add_content .vDateField,#add_content .vTimeField {
+	width: 90px;
+	float: left;
+}
+
+.projectscontentstitle {
+	border-bottom: 1px solid black;
+}
+
+#submitcontent {
+	border-top: 1px solid black;
+	padding : 10px;
+	text-align: right;
+}
+
+#add_content input[type="submit"], #add_contribution input[type="submit"] {
+	background-color: #656565;
+	color: white;
+	width:auto;
+	font-weight: bold;
+	padding: 5px 10px;
+}
+
+.datetimeshortcuts {
+	float: left;
+}
+
+.ldtdatetime {
+	float: left;
+	width: 350px;
+}
+
+.ldtdate,.ldttime {
+	float: left;
+	width: 150px;
+}
+
+.ldtdatetitle,.ldttimetitle {
+	color: #666;
+}
+
+#contentformhidden {
+	display: none;
+}
+
+#contentformfields {
+	margin: 10px 0px;
+}
+
+.cellcheckbox {
+	text-align: center;
+	width: 70 px;
+}
+
+#contentslistheader {
+	padding: 1px 10px 1px 36px;	
+}
+
+#ldtcreatetablewrapperdiv {
+	height: 282px;
+}
+
+#ldtcreatecontentstablediv {
+	max-height: 280px;
+}
+
+#ldtcreatecontentslistcontainer {
+	padding: 5px 0px 20px 0px;
+	height: 300px;
+}
--- a/web/static/css/nyroModal.css	Fri Sep 10 17:41:12 2010 +0200
+++ b/web/static/css/nyroModal.css	Sat Sep 11 01:18:28 2010 +0200
@@ -1,3 +1,5 @@
+@charset "UTF-8";
+
 div#nyroModalFull {
 	font-size: 12px;
 	color: #777;
@@ -7,7 +9,7 @@
 	width: 150px;
 	height: 150px;
 	text-indent: -9999em;
-	background: #fff url(../img/ajaxLoader.gif) no-repeat;
+	background: #fff url(../img/ajax-loader-43x43.gif) no-repeat;
 	background-position: center;
 }
 div#nyroModalLoading.error {
--- a/web/static/css/style.css	Fri Sep 10 17:41:12 2010 +0200
+++ b/web/static/css/style.css	Sat Sep 11 01:18:28 2010 +0200
@@ -1,3 +1,5 @@
+@charset "UTF-8";
+
 body {
 
  	font-family: Arial, Helvetica, sans serif;
@@ -213,4 +215,24 @@
 	display: inline;
 }
 
+#toolbar {
+	margin-top: 10px;
+	border-bottom: 3px solid #707070;
+}
 
+#inner_content {
+	padding: 40px 0px 50px 0px; 	
+}
+
+#loginstate {
+	text-align: right;
+}
+
+.projectscontentstitle {
+	color: #949494;
+	font-family: Verdana;
+	font-weight: lighter;
+	font-size: 2.0em;
+	font-style: normal;
+	text-align: left;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/static/css/tabs.css	Sat Sep 11 01:18:28 2010 +0200
@@ -0,0 +1,72 @@
+/* -----------------------------------------------------------------------
+ Taken from:
+
+ Tabs Plugin 0.2 for the Blueprint CSS Framework
+ http://blueprintcss.org
+
+   * Copyright (c) 2008-Present. Refer to the main Blueprint license.
+   * See README for instructions on how to use this plugin.
+   * For credits and origins, see AUTHORS.
+
+----------------------------------------------------------------------- */
+@charset "UTF-8";
+
+.tabs { 
+	height:auto; 
+	margin:0;
+	overflow:hidden;
+	padding-left:0; 
+}
+* html .tabs { height:1%; /* fixing IE 6 */ }
+.tabs li {
+  background: #707070 url("../img/tabsright_normal.png") no-repeat right center;
+  border-bottom:none;
+  float:left;
+  line-height:1.5; 
+  list-style-type:none;
+  margin:0 ;
+  padding: 0 9px 0 0;
+  height: 29px;
+  
+}
+.tabs li a { 
+  border-bottom:none;
+  color: #ffffff;
+  cursor:pointer;
+  display:block;
+  float:left;
+  margin: .5em 2em .5em 2em;
+  text-transform: capitalize;
+  font-weight: lighter;
+}
+
+.tabs li.active { 
+  background:#29aae3 url("../img/tabsright_active.png") no-repeat right center;
+}
+
+
+.tabs li a.selected { 
+  background:#666;
+  border:1px solid #666;
+  border-bottom:none;
+  color:#fff;
+  cursor:default;
+}
+.tabs li a, .tabs li a:focus, .tabs li a:hover { 
+  text-decoration:none;
+}
+.tabs li a:focus, .tabs li a:hover { 
+  color:#555;
+  outline:none;
+}
+.tabs li a.selected:focus, .tabs li a.selected:hover { 
+  color:#fafafa;
+}	
+.tabs li.label { 
+	border:none;
+	font-weight:bold;
+	line-height:1.5; 
+	margin-right:.5em; 
+	padding:.25em .33em .25em .33em;
+}
+
--- a/web/static/css/workspace.css	Fri Sep 10 17:41:12 2010 +0200
+++ b/web/static/css/workspace.css	Sat Sep 11 01:18:28 2010 +0200
@@ -1,18 +1,9 @@
-#contentsdiv h1 {
-    text-decoration : underline;
-}
+@charset "UTF-8";
 
-#contentsdiv table {
-    border: 1px solid black;
+.titlediv {
+	margin: 0px 0px 25px 0px;
 }
 
-#projectsdiv h1 {
-    text-decoration : underline;
-}
-
-#projectsdiv table {
-    border: 1px solid black;
-}
 
 .ldt_player_code {
 	width: 580px;
@@ -23,3 +14,144 @@
 	padding: 2px;
 }
 
+.searchfielddiv {
+	top: 50%;
+	margin-top: 12px;
+}
+
+.searchfield {
+	background: white;
+	border: 1px solid #b8b8b8;
+	-moz-border-radius: 15px;
+	-webkit-border-radius:15px;
+	-khtml-border-radius:15px;
+	border-radius: 15px;
+	padding: 2px 5px;
+}
+
+.searchfield img {
+	vertical-align: top;
+}
+
+.searchfieldinput {
+	color: graytext;
+	font-style: italic;
+}
+
+
+input[type="text"].searchfieldinputbase {
+	border: none;
+}
+
+.searchfieldinputbase {
+	background: #ffffff url("../img/search.gif") no-repeat left center;
+	width: 99px;
+	height: 14px;
+	margin: 0px 2px 0px 0px;
+	vertical-align: top;
+	padding-left: 20px;
+}
+
+
+.projectscontentsdiv {
+	overflow: hidden;
+	height: 570px;
+	
+}
+div.projectscontentsdiv table {
+	width: 470px;
+	height: 100%;
+	margin-bottom: 0;
+}
+
+tr.projectscontentsoddline {
+	background: #ededed;
+}
+
+tr.projectscontentsevenline {
+	background: white;	
+}
+
+
+/* make the TH elements pretty */
+.projectscontentsheader {
+	background: #b5b5b5;
+	font-weight: bold;
+	text-transform:capitalize;
+	color: white;
+	padding: 1px 2px;
+	text-align: left;
+}
+
+
+#contentsheader {
+	padding: 1px 10px 1px 49px;
+}
+
+
+#projectsheader {
+	padding: 1px 10px 1px 93px;
+}
+
+tbody .contenttitle {
+	width: 411px;
+	padding: 4px 10px 4px 5px;
+}
+
+tbody .projecttitle {
+	width: 367px;
+	padding: 4px 10px 4px 5px;	
+}
+
+.projectscontentsfooter {
+	background: #8c8c8c;
+	color: #ffffff;
+	margin-top: 18px;
+	font-size: 1.25em;
+	font-style: normal;
+	padding : 5px 5px;
+}
+
+.projectscontentstablediv {
+	max-height: 500px;
+	overflow: auto; overflow-x: hidden;
+	border-bottom: 2px solid #b5b5b5 ;
+	float: left;
+}
+.projectscontentstablewrapperdiv {
+	height: 502px;
+}
+
+.projectscontentsbody tr {
+	padding-right: 16px;
+}
+
+.titlediv {
+	vertical-align: middle;	
+}
+
+.cellimg {
+	width: 18px;
+	text-align: center;
+	padding: 4px 2px 4px 2px;
+	cursor: pointer; cursor: hand;
+}
+
+.cellimgdiv {
+	visibility: hidden;
+}
+
+.searchajaxloader {
+	display: none;
+}
+
+a.content_link_create:link, a.content_link_create:visited,
+a.ldt_link_create:link, a.ldt_link_create:visited {
+	color: white;
+	text-decoration: none;
+}
+
+a.project_link_create:link, a.project_link_create:visited {
+	color: white;
+}
+
Binary file web/static/img/ajax-loader-16x16.gif has changed
Binary file web/static/img/ajax-loader-43x43.gif has changed
Binary file web/static/img/ajaxLoader.gif has changed
Binary file web/static/img/control_play.gif has changed
Binary file web/static/img/document_add.gif has changed
Binary file web/static/img/document_edit.gif has changed
Binary file web/static/img/documents_duplicate.gif has changed
Binary file web/static/img/favicon.ico has changed
Binary file web/static/img/plugin.gif has changed
Binary file web/static/img/search.gif has changed
Binary file web/static/img/tabsright_active.png has changed
Binary file web/static/img/tabsright_normal.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/static/js/jquery.qtip.css	Sat Sep 11 01:18:28 2010 +0200
@@ -0,0 +1,337 @@
+/*
+* qTip - The jQuery tooltip plugin
+* http://craigsworks.com/projects/qtip/
+*
+* Version: 2.0.0pre
+* Copyright 2009 Craig Michael Thompson - http://craigsworks.com
+*
+* Dual licensed under MIT or GPL Version 2 licenses
+*   http://en.wikipedia.org/wiki/MIT_License
+*   http://en.wikipedia.org/wiki/GNU_General_Public_License
+*
+* Date: Mon Sep 6 15:10:26 2010 +0100
+*/
+
+.ui-tooltip-accessible{
+	left: -10000em !important;
+	top: -10000em !important;
+	display: block !important;
+	visibility: hidden !important;
+}
+
+	/* IE6 ONLY - Width detection fix */
+	* html .ui-tooltip-accessible{
+		position: static !important;
+		float: left !important;
+	}
+
+.ui-tooltip, .qtip{
+	position: absolute;
+	display: none;
+
+	max-width: 280px;
+	min-width: 50px;
+}
+
+	.ui-tooltip .ui-tooltip-wrapper{
+		position: relative;
+		overflow: hidden;
+
+		border-width: 3px;
+		border-style: solid;
+	}
+
+	.ui-tooltip .ui-tooltip-content{
+		position: relative;
+		padding: 5px 9px;
+
+		text-align: left;
+		word-wrap: break-word;
+		overflow: hidden;
+	}
+
+	.ui-tooltip .ui-tooltip-titlebar{
+		position: relative;
+		padding: 6px 35px 6px 10px;
+
+		font-weight: bold;
+	}
+
+		/*! Default close button class */
+		.ui-tooltip .ui-tooltip-close{
+			position: absolute;
+			height: 16px;
+			width: 16px;
+			padding: 1px;
+			right: 5px;
+			top: 5px;
+
+			cursor: pointer;
+			line-height: 0px;
+			font-size: 0px;
+		}
+
+			.ui-tooltip .ui-tooltip-close .ui-icon{
+				height: 16px;
+				width: 16px;
+				display: block;
+
+				opacity: 0.8;
+				-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=80)";
+				filter: alpha(opacity=80);
+			}
+			.ui-tooltip .ui-tooltip-close:hover .ui-icon{
+				opacity: 1;
+				-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
+				filter: alpha(opacity=100);
+			}
+
+		/*! Custom button class */
+		.ui-tooltip .ui-tooltip-button{
+			float: right;
+		}
+
+	/* Applied to 'focused' tooltips e.g. most recently displayed/interacted with */
+	.ui-tooltip-focus{
+
+	}
+
+
+/*! Default tooltip style */
+.ui-tooltip-wrapper{
+	border-color: #F9E98E;
+	background-color: #FBF7AA;
+	color: #A27D35;
+}
+
+	.ui-tooltip .ui-tooltip-titlebar{
+		background-color: #F0DE7D;
+	}
+
+	.ui-tooltip .ui-tooltip-close .ui-icon{
+		background: #A27D35 url('images/close.png') no-repeat 50% 50%;
+	}
+
+/*! Plain tooltip style */
+.ui-tooltip-plain .ui-tooltip-wrapper{
+	border-color: black;
+	border-width: 1px;
+
+	background-color: white;
+	color: black;
+}
+
+	.ui-tooltip-plain .ui-tooltip-titlebar{
+		background-color: white;
+	}
+
+	.ui-tooltip-plain .ui-tooltip-close .ui-icon{
+		background: black;
+	}
+
+/*! Light tooltip style */
+.ui-tooltip-light .ui-tooltip-wrapper{
+	border-color: #E2E2E2;
+	background-color: white;
+	color: #454545;
+}
+
+	.ui-tooltip-light .ui-tooltip-titlebar{
+		background-color: #f1f1f1;
+	}
+
+	.ui-tooltip-light .ui-tooltip-close .ui-icon{
+		background: #454545 url('images/close-light.png') no-repeat 50% 50%;
+	}
+
+
+/*! Dark tooltip style */
+.ui-tooltip-dark .ui-tooltip-wrapper{
+	border-color: #303030;
+	background-color: #505050;
+	color: #f3f3f3;
+}
+
+	.ui-tooltip-dark .ui-tooltip-titlebar{
+		background-color: #404040;
+	}
+
+	.ui-tooltip-dark .ui-tooltip-close .ui-icon{
+		background: #f3f3f3 url('images/close-dark.png') no-repeat 50% 50%;
+	}
+
+
+/*! Red tooltip style */
+.ui-tooltip-red .ui-tooltip-wrapper{
+	border-color: #D95252;
+	background-color: #F78B83;
+	color: #912323;
+}
+
+	.ui-tooltip-red .ui-tooltip-titlebar{
+		background-color: #F06D65;
+	}
+
+	.ui-tooltip-red .ui-tooltip-close .ui-icon{
+		background: #9C2F2F url('images/close-red.png') no-repeat 50% 50%;
+	}
+
+
+/*! Green tooltip style */
+.ui-tooltip-green .ui-tooltip-wrapper{
+	border-color: #90D93F;
+	background-color: #CAED9E;
+	color: #3F6219;
+}
+
+	.ui-tooltip-green .ui-tooltip-titlebar{
+		background-color: #B0DE78;
+	}
+
+	.ui-tooltip-green .ui-tooltip-close .ui-icon{
+		background: #58792E url('images/close-green.png') no-repeat 50% 50%;
+	}
+
+
+/*! Blue tooltip style */
+.ui-tooltip-blue .ui-tooltip-wrapper{
+	border-color: #ADD9ED;
+	background-color: #E5F6FE;
+	color: #5E99BD;
+}
+
+	.ui-tooltip-blue .ui-tooltip-titlebar{
+		background-color: #D0E9F5;
+	}
+
+	.ui-tooltip-blue .ui-tooltip-close .ui-icon{
+		background: #4D9FBF url('images/close-blue.png') no-repeat 50% 50%;
+	}
+
+
+/*! Add shadows to your tooltips in all supported browsers */
+.ui-tooltip-shadow{
+  -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.3);
+  -moz-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.3);
+  box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.3);
+
+  filter:progid:DXImageTransform.Microsoft.dropshadow(OffX=5, OffY=5, Color='gray');
+  -ms-filter:"progid:DXImageTransform.Microsoft.dropshadow(OffX=5, OffY=5, Color='gray')";
+}
+
+div.ui-tooltip-tip{
+	position: absolute;
+	margin: 0 auto;
+	overflow: hidden;
+
+	line-height: 0.1px;
+	font-size: 1px;
+
+	background: transparent !important;
+	border: 0px !important;
+	z-index: 10;
+}
+
+	div.ui-tooltip-tip *{
+		line-height: 0.1px;
+		font-size: 0.1px;
+	}
+
+	div.ui-tooltip-tip div{
+		background: transparent !important;
+		border: 0px dashed transparent;
+	}
+
+#qtip-overlay{
+	position: absolute;
+	left: -10000em;
+	top: -10000em;
+
+	background-color: black;
+	cursor: pointer;
+
+	/* Set this to any below 15000 (default starting z-index for qTips) */
+	z-index: 14999;
+}
+
+/*! Youtube tooltip style */
+div.ui-tooltip-youtube .ui-tooltip-wrapper{
+	-moz-border-radius: 5px;
+	-webkit-border-radius: 5px;
+	border-radius: 5px;
+
+	-webkit-box-shadow: 0 0 3px #333;
+	-moz-box-shadow: 0 0 3px #333;
+	box-shadow: 0 0 3px #333;
+
+	border-color: #CCCCCC;
+	border-width: 1px;
+
+	color: white;
+}
+
+	div.ui-tooltip-youtube .ui-tooltip-close .ui-icon{
+		background: #4D9FBF url('images/close-dark.png') no-repeat 50% 50%;
+	}
+
+	div.ui-tooltip-youtube .ui-tooltip-titlebar,
+	div.ui-tooltip-youtube .ui-tooltip-content{
+		background-color: rgba(0, 0, 0, 0.85);
+	}
+
+	/* IE6 Fallback */
+	* html div.ui-tooltip-youtube-wrapper{
+		background-color: black;
+	}
+
+
+/* jQuery TOOLS Tooltip style */
+div.ui-tooltip-jtools .ui-tooltip-wrapper{
+	-moz-border-radius: 2px;
+	-webkit-border-radius: 2px;
+	border-radius: 2px;
+
+	border-color: white;
+	border-width: 2px;
+
+	-webkit-box-shadow: 0 0 12px #333;
+	-moz-box-shadow: 0 0 12px #333;
+	box-shadow: 0 0 12px #333;
+
+	background-color: rgba(0, 0, 0, 0.7);
+	background-image: -moz-linear-gradient(top, #717171, #232323);
+	background-image: -webkit-gradient(linear, left top, left bottom, from(#717171), to(#232323));
+	filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#717171,endColorstr=#232323);
+	-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#717171,endColorstr=#232323)";
+
+	color: white;
+}
+
+	div.ui-tooltip-jtools .ui-tooltip-titlebar,
+	div.ui-tooltip-jtools .ui-tooltip-content{
+		background: none;
+	}
+
+	div.ui-tooltip-jtools .ui-tooltip-close .ui-icon{
+		background: black url('images/close-dark.png') no-repeat 50% 50%;
+	}
+
+
+/* Cluetip style */
+div.ui-tooltip-cluetip .ui-tooltip-wrapper{
+	border-width: 0;
+
+	-webkit-box-shadow: 4px 4px 5px rgba(0, 0, 0, 0.4);
+	-moz-box-shadow: 4px 4px 5px rgba(0, 0, 0, 0.4);
+	box-shadow: 4px 4px 5px rgba(0, 0, 0, 0.4);
+}
+
+	div.ui-tooltip-cluetip .ui-tooltip-titlebar{
+		background-color: #87876A;
+		color: white;
+	}
+	div.ui-tooltip-cluetip .ui-tooltip-content{
+		background-color: #D9D9C2;
+		color: #111;
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/static/js/jquery.qtip.min.js	Sat Sep 11 01:18:28 2010 +0200
@@ -0,0 +1,1 @@
+eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('"6t 6u";(j($){$(31).3x(j(){R i;$(2e).1J(\'3L 3E\',j(r){1V(i=0;i<$.18.g.O.Q;i++){R T=$.18.g.O[i];c(T&&T.V&&T.V.1b&&T.8.k.17!==\'29\'&&T.d.h.2r(\':28\')&&(T.8.k.1e.3E&&r.17===\'3E\'||T.8.k.1e.3L&&r.17===\'3L\')){T.2h(r,H)}}});$(31).1J(\'5j.g\',j(r){c($(r.s).5g(\'12.g\').Q===0){R h=$(\'.6w\'),T=h.g(\'T\');c(h.2r(\':28\')&&T&&T.V&&!T.V.23&&$(r.s).2m(T.d.s).Q>1){T.D(r)}}})});j 2D(w){c(!w){B p}A.x=5a(w).3l(/5x/i,\'1j\').5y(/M|25|1j/i)[0].2F();A.y=5a(w).3l(/5x/i,\'1j\').5y(/K|26|1j/i)[0].2F();A.1k={M:0,K:0};A.2y=(w.2H(0).6L(/^(t|b)/)>-1)?\'y\':\'x\';A.1w=j(){B(A.2y===\'y\')?A.y+A.x:A.x+A.y}}j 4t(w,o,G){R 1N={5B:[[0,0],[o,G],[o,0]],6a:[[0,0],[o,0],[0,G]],5K:[[0,G],[o,0],[o,G]],5N:[[0,0],[0,G],[o,G]],6y:[[0,G],[o/2,0],[o,G]],6v:[[0,0],[o,0],[o/2,G]],6i:[[0,0],[o,G/2],[0,G]],6J:[[o,0],[o,G],[0,G/2]]};1N.6M=1N.5B;1N.6z=1N.6a;1N.6x=1N.5K;1N.6C=1N.5N;B 1N[w]}j 4e(E){R 2j;c($(\'<1f />\').1q(0).1E){2j={3K:[E,E],40:[0,E],4I:[E,0],3P:[0,0]}}C c($.16.1d){2j={3K:[-2z,2z,0],40:[-2z,2z,-E],4I:[2z,5D,0],3P:[2z,5D,-E]}}B 2j}j 2G(e,4b){R 2U,i;2U=$.2p(H,{},e);1V(i 5R 2U){c(4b===H&&(/(f|1g)/i).1Y(i)){3z 2U[i]}C c(!4b&&(/(o|I|f|U|1g|4v)/i).1Y(i)){3z 2U[i]}}B 2U}j 4i(e){c(P e.f!==\'19\'){e.f={w:e.f}}c(P e.f.N!==\'19\'){e.f.N={o:e.f.N,G:e.f.N}}c(P e.I!==\'19\'){e.I={o:e.I}}c(P e.o!==\'19\'){e.o={2Z:e.o}}c(P e.o.1H===\'1w\'){e.o.1H=1A(e.o.1H.3l(/([0-9]+)/i,"$1"),10)}c(P e.o.2b===\'1w\'){e.o.2b=1A(e.o.2b.3l(/([0-9]+)/i,"$1"),10)}c(P e.f.N.x===\'2s\'){e.f.N.o=e.f.N.x;3z e.f.N.x}c(P e.f.N.y===\'2s\'){e.f.N.G=e.f.N.y;3z e.f.N.y}B e}j 4l(){R 7,i,3A,2v,1D,1P;7=A;3A=[H,{}];1V(i=0;i<3b.Q;i++){3A.5h(3b[i])}2v=[$.2p.4s($,3A)];6F(P 2v[0].21===\'1w\'){2v.5O(4i($.18.g.3c[2v[0].21]))}2v.5O(H,{1g:{h:\'g-\'+(3b[0].21||\'39\')}},$.18.g.3c.39);1D=$.2p.4s($,2v);1P=($.16.1d)?1:0;1D.f.N.o+=1P;1D.f.N.G+=1P;c(1D.f.N.o%2>0){1D.f.N.o+=1}c(1D.f.N.G%2>0){1D.f.N.G+=1}c(1D.f.w===H){c(7.8.k.w.h===\'1j\'&&7.8.k.w.s===\'1j\'){1D.f.w=p}C{1D.f.w=7.8.k.w.h}}B 1D}j 46(1f,X,E,J){R 1n=1f.1q(0).1E(\'2d\');1n.5G=J;1n.5U();1n.3p(X[0],X[1],E,0,1u.6N*2,p);1n.5Y()}j 59(){R 7,i,o,E,J,X,1Q,N,4O,2k,3e,3i,4g,4q,4G;7=A;7.d.1t.1M(\'.g-3i, .g-3e\').3W();o=7.8.e.I.o;E=7.8.e.I.E;J=7.8.e.I.J||7.8.e.f.J;X=4e(E);1Q={};1V(i 5R X){1Q[i]=\'<12 1S="\'+i+\'" e="\'+((/6n/).1Y(i)?\'M\':\'25\')+\':0; \'+\'k:34; G:\'+E+\'1a; o:\'+E+\'1a; 2u:1F; 2S-G:0.1B; 2Y-N:1B">\';c($(\'<1f />\').1q(0).1E){1Q[i]+=\'<1f G="\'+E+\'" o="\'+E+\'" e="4Q-3o: K"></1f>\'}C c($.16.1d){N=E*2+3;1Q[i]+=\'<v:3p 6f="p" 3t="\'+J+\'" 6s="\'+X[i][0]+\'" 6r="\'+X[i][1]+\'" \'+\'e="o:\'+N+\'1a; G:\'+N+\'1a; 2q-K:\'+((/26/).1Y(i)?-2:-1)+\'1a; \'+\'2q-M:\'+((/6m/).1Y(i)?X[i][2]-3.5:-1)+\'1a; \'+\'4Q-3o:K; 2a:53-4E; 3I:1x(#2L#3R)"></v:3p>\'}1Q[i]+=\'</12>\'}4O=7.3d().o-(1u.1H(o,E)*2);2k=\'<12 1I="g-2k" e="G:\'+E+\'1a; o:\'+4O+\'1a; \'+\'2u:1F; 1s-J:\'+J+\'; 2S-G:0.1B; 2Y-N:1B;">\';3e=\'<12 1I="g-3e" 4k="4f" e="G:\'+E+\'1a; \'+\'2q-M:\'+E+\'1a; 2S-G:0.1B; 2Y-N:1B; 2x:0;">\'+1Q.3K+1Q.40+2k;7.d.1t.3B(3e);3i=\'<12 1I="g-3i" 4k="4f" e="G:\'+E+\'1a; \'+\'2q-M:\'+E+\'1a; 2S-G:0.1B; 2Y-N:1B; 2x:0;">\'+1Q.4I+1Q.3P+2k;7.d.1t.5s(3i);c($(\'<1f />\').1q(0).1E){7.d.1t.1M(\'1f\').1L(j(){4g=X[$(A).3O(\'[1S]:1R\').W(\'1S\')];46.S(7,$(A),4g,E,J)})}C c($.16.1d){7.d.h.5s(\'<v:3C e="3I:1x(#2L#3R);"></v:3C>\')}4q=1u.1H(E,(E+(o-E)));4G=1u.1H(o-E,0);7.d.1y.F({I:\'6D 3q \'+J,6H:4G+\'1a \'+4q+\'1a\'})}j 4u(1f,X,J){R 1n=1f.1q(0).1E(\'2d\');1n.5G=J;1n.5U();1n.6o(X[0][0],X[0][1]);1n.5Q(X[1][0],X[1][1]);1n.5Q(X[2][0],X[2][1]);1n.5Y()}j 42(w){R 7,1P,24,4n,4h,3Q;7=A;c(7.8.e.f.w===p||!7.d.f){B}c(!w){w=2T 2D(7.d.f.W(\'1S\'))}1P=24=($.16.1d)?1:0;7.d.f.F(w[w.2y],0);c(w.2y===\'y\'){c($.16.1d){c(1A($.16.2X.2H(0),10)===6){24=w.y===\'K\'?-3:1}C{24=w.y===\'K\'?1:2}}c(w.x===\'1j\'){7.d.f.F({M:\'50%\',6K:-(7.8.e.f.N.o/2)})}C c(w.x===\'M\'){7.d.f.F({M:7.8.e.I.E-1P})}C{7.d.f.F({25:7.8.e.I.E+1P})}c(w.y===\'K\'){7.d.f.F({K:-24})}C{7.d.f.F({26:24})}}C{c($.16.1d){24=(1A($.16.2X.2H(0),10)===6)?1:(w.x===\'M\'?1:2)}c(w.y===\'1j\'){7.d.f.F({K:\'50%\',49:-(7.8.e.f.N.G/2)})}C c(w.y===\'K\'){7.d.f.F({K:7.8.e.I.E-1P})}C{7.d.f.F({26:7.8.e.I.E+1P})}c(w.x===\'M\'){7.d.f.F({M:-24})}C{7.d.f.F({25:24})}}4n=\'2x-\'+w[w.2y];4h=7.8.e.f.N[w.2y===\'x\'?\'o\':\'G\'];7.d.h.F(\'2x\',0).F(4n,4h);c($.16.1d&&1A($.16.2X.2H(0),6)===6){3Q=1A(7.d.f.F(\'2q-K\'),10)||0;3Q+=1A(7.d.u.F(\'2q-K\'),10)||0;7.d.f.F({49:3Q})}}j 44(w){R 7,J,X,3J,2o,f;7=A;c(7.d.f!==1z){7.d.f.3W()}J=7.8.e.f.J||7.8.e.I.J;c(7.8.e.f.w===p){B}C c(!w){w=2T 2D(7.8.e.f.w)}X=4t(w.1w(),7.8.e.f.N.o,7.8.e.f.N.G);7.d.f=\'<12 1I="\'+7.8.e.1g.f+\'" 4k="4f" 1S="\'+w.1w()+\'" e="k:34; \'+\'G:\'+7.8.e.f.N.G+\'1a; o:\'+7.8.e.f.N.o+\'1a; \'+\'2q:0 6e; 2S-G:0.1B; 2Y-N:1B;"></12>\';7.d.h.3B(7.d.f);c($(\'<1f />\').1q(0).1E){f=\'<1f G="\'+7.8.e.f.N.G+\'" o="\'+7.8.e.f.N.o+\'"></1f>\'}C c($.16.1d){3J=7.8.e.f.N.o+\',\'+7.8.e.f.N.G;2o=\'m\'+X[0][0]+\',\'+X[0][1];2o+=\' l\'+X[1][0]+\',\'+X[1][1];2o+=\' \'+X[2][0]+\',\'+X[2][1];2o+=\' 6I\';f=\'<v:3M 3t="\'+J+\'" 6f="p" 6p="H" 2o="\'+2o+\'" 3J="\'+3J+\'" \'+\'e="o:\'+7.8.e.f.N.o+\'1a; G:\'+7.8.e.f.N.G+\'1a; \'+\'2S-G:0.1B; 2a:53-4E; 3I:1x(#2L#3R); \'+\'4Q-3o:\'+(w.y===\'K\'?\'26\':\'K\')+\'"></v:3M>\';f+=\'<v:3C e="3I:1x(#2L#3R);"></v:3C>\';7.d.1y.F(\'k\',\'4y\')}7.d.f=7.d.h.1M(\'.\'+7.8.e.1g.f).6B(0);7.d.f.2l(f);c($(\'<1f  />\').1q(0).1E){4u.S(7,7.d.f.1M(\'1f:1R\'),X,J)}c(w.y===\'K\'&&$.16.1d&&1A($.16.2X.2H(0),10)===6){7.d.f.F({49:-4})}42.S(7,w)}j 5b(){R 7=A;c(7.d.U!==1z){7.d.U.3W()}7.d.h.W(\'3r-6E\',\'g-\'+7.11+\'-U\');7.d.U=$(\'<12 11="g-\'+7.11+\'-U" 1I="\'+7.8.e.1g.U+\'"></12>\').F(2G(7.8.e.U,H)).F({2f:($.16.1d)?1:0}).58(7.d.1y);c(7.8.u.U.1m){7.5W.S(7,7.8.u.U.1m)}c(7.8.u.U.1i!==p&&P 7.8.u.U.1i===\'1w\'){7.d.1i=$(\'<a 1I="\'+7.8.e.1g.1i+\'" 5e="1i" e="6G:25; k: 4y"></a>\').F(2G(7.8.e.1i,H)).2l(7.8.u.U.1i).58(7.d.U).5d(j(r){c(!7.V.23){7.D(r)}})}}j 5l(){R 7,3h,2i,3u;7=A;3h=7.8.q.L.s;2i=7.8.D.L.s;c(7.8.D.3g){2i=2i.2m(7.d.h)}3u=[\'5d\',\'6h\',\'6k\',\'6j\',\'4C\',\'4x\',\'5j\',\'6l\',\'35\'];j 3v(r){c(7.V.23===H){B}2g(7.1G.1W);7.1G.1W=4M(j(){$(3u).1L(j(){2i.1O(A+\'.g-1W\');7.d.u.1O(A+\'.g-1W\')});7.D(r)},7.8.D.2V)}c(7.8.D.3g===H){7.d.h.1J(\'35.g\',j(){c(7.V.23===H){B}2g(7.1G.D)})}j 4S(r){c(7.V.23===H){B}c(7.8.D.L.r===\'1W\'){$(3u).1L(j(){2i.1J(A+\'.g-1W\',3v);7.d.u.1J(A+\'.g-1W\',3v)});3v()}2g(7.1G.q);2g(7.1G.D);c(7.8.q.2V>0){7.1G.q=4M(j(){7.q(r)},7.8.q.2V)}C{7.q(r)}}j 4P(r){c(7.V.23===H){B}c(7.8.D.3g===H&&(/1K(6q|6A)/i).1Y(7.8.D.L.r)&&$(r.70).5g(\'12.g[11^="g"]\').Q>0){r.7L();r.7K();2g(7.1G.D);B p}2g(7.1G.q);2g(7.1G.D);7.d.h.3S(H,H);7.1G.D=4M(j(){7.D(r)},7.8.D.2V)}c(7.8.k.s===\'1K\'&&7.8.k.17!==\'29\'){3h.1J(\'4C.g\',j(r){7.1v.1K={M:r.3Y,K:r.4c};c(7.V.23===p&&7.8.k.1e.1K===H&&7.8.k.17!==\'29\'&&7.d.h.F(\'2a\')!==\'3a\'){7.2h(r)}})}c((7.8.q.L.s.2m(7.8.D.L.s).Q===1&&7.8.q.L.r===7.8.D.L.r&&7.8.D.L.r!==\'1W\')||7.8.D.L.r===\'4R\'){7.1v.2I=0;3h.1J(7.8.q.L.r+\'.g\',j(r){c(7.1v.2I===0){4S(r)}C{4P(r)}})}C{3h.1J(7.8.q.L.r+\'.g\',4S);c(7.8.D.L.r!==\'1W\'){2i.1J(7.8.D.L.r+\'.g\',4P)}}c((/(3g|34)/).1Y(7.8.k.17)){7.d.h.1J(\'35.g\',7.2E)}}j 22(){R 7,2l,2t;7=A;2t=7.3d();2l=\'<7J 1I="g-22" 7I="0" 7M="-1" 4T="7N:p" \'+\'e="2a:4E; k:34; z-3s:-1; 5m:7R(2B=\\\'0\\\'); I: 1B 3q 4H; \'+\'G:\'+2t.G+\'1a; o:\'+2t.o+\'1a" />\';7.d.22=7.d.1t.3B(2l).2w(\'.g-22:1R\')}j 4w(){R 7,u,1x,Y,2A;7=A;7.5J.S(7);7.V.1b=2;7.d.h=\'<12 g="\'+7.11+\'" 11="g-\'+7.11+\'" 5e="h" \'+\'3r-7Q="g-\'+7.11+\'-u" 1I="g \'+(7.8.e.1g.h||7.8.e)+\'" \'+\'e="2a:3a; -7P-I-E:0; -7O-I-E:0; I-E:0; k:\'+7.8.k.17+\';"> \'+\'  <12 1I="g-1t" e="k:4y; 2u:1F; 1m-3o:M;"> \'+\'    <12 1I="g-1y" e="2u:1F;"> \'+\'       <12 11="g-\'+7.11+\'-u" 1I="g-u \'+7.8.e.1g.u+\'"></12> \'+\'</12></12></12>\';7.d.h=$(7.d.h);7.d.h.5P(7.8.k.3U);7.d.h.Y(\'g\',{3k:0,O:[7]});7.d.1t=7.d.h.2w(\'12:1R\');7.d.1y=7.d.1t.2w(\'12:1R\');7.d.u=7.d.1y.2w(\'12:1R\').F(2G(7.8.e));c($.16.1d){7.d.1t.2m(7.d.u).F({2f:1})}c(7.8.D.L.r===\'4R\'){7.d.h.W(\'4R\',H)}c(P 7.8.e.o.2Z===\'2s\'){7.4d()}c($(\'<1f />\').1q(0).1E||$.16.1d){c(7.8.e.I.E>0){59.S(7)}C{7.d.1y.F({I:7.8.e.I.o+\'1a 3q \'+7.8.e.I.J})}c(7.8.e.f.w!==p){44.S(7)}}C{7.d.1y.F({I:7.8.e.I.o+\'1a 3q \'+7.8.e.I.J});7.8.e.I.E=0;7.8.e.f.w=p}c((P 7.8.u.1m===\'1w\'&&7.8.u.1m.Q>0)||(7.8.u.1m.4r&&7.8.u.1m.Q>0)){u=7.8.u.1m}C{u=\' \'}c(7.8.u.U.1m!==p){5b.S(7)}7.4A(u,p);5l.S(7);c(7.8.q.3x===H){7.q()}c(7.8.u.1x!==p){1x=7.8.u.1x;Y=7.8.u.Y;2A=7.8.u.2A||\'1q\';7.5Z(1x,Y,2A)}7.V.1b=H;7.5f.S(7)}j 56(s,8,11){R 7=A;7.11=11;7.8=8;7.V={4j:p,1b:p,23:p,3Z:p};7.d={s:s.5v(7.8.e.1g.s),h:1z,1t:1z,u:1z,1y:1z,U:1z,1i:1z,f:1z,22:1z};7.1v={W:p,1K:{},2I:0,2u:{M:p,K:p}};7.1G={};$.2p(7,7.8.T,{q:j(r){R 1c,1X;c(!7.V.1b){B p}c(7.d.h.F(\'2a\')!==\'3a\'){B 7}7.d.h.3S(H,p);1c=7.5n.S(7,r);c(1c===p){B 7}j 2M(){7.d.h.W(\'3r-1F\',H);c(7.8.k.17!==\'29\'){7.2E()}7.5q.S(7,r);c($.16.1d){R 4a=7.d.h.1q(0).e;4a.43(\'5m\');4a.43(\'2B\')}C{7.d.h.F({2B:\'\'})}}7.1v.2I=1;c(7.8.k.17!==\'29\'){7.2h(r,(7.8.q.Z.Q>0&&7.1b!==2))}c(P 7.8.q.1X===\'19\'){1X=$(7.8.q.1X)}C c(7.8.q.1X===H){1X=$(\'12.g\').5S(7.d.h)}c(1X){1X.1L(j(){c($(A).g(\'T\').V.1b===H){$(A).g(\'T\').D()}})}c(P 7.8.q.Z.17===\'j\'){7.8.q.Z.17.S(7.d.h,7.8.q.Z.Q);7.d.h.5u(j(){2M();$(A).5t()})}C{4N(7.8.q.Z.17.2F()){1Z\'3w\':7.d.h.7H(7.8.q.Z.Q,2M);1C;1Z\'5o\':7.d.h.7G(7.8.q.Z.Q,j(){2M();c(7.8.k.17!==\'29\'){7.2h(r,H)}});1C;1Z\'5p\':7.d.h.q(7.8.q.Z.Q,2M);1C;2L:7.d.h.q(1z,2M);1C}7.d.h.5v(7.8.e.1g.3T)}B 7},D:j(r){R 1c;c(!7.V.1b){B p}C c(7.d.h.F(\'2a\')===\'3a\'){B 7}2g(7.1G.q);7.d.h.3S(H,p);1c=7.5A.S(7,r);c(1c===p){B 7}j 2K(){7.d.h.W(\'3r-1F\',H);c($.16.1d){7.d.h.1q(0).e.43(\'2B\')}C{7.d.h.F({2B:\'\'})}7.4Z.S(7,r)}7.1v.2I=0;c(P 7.8.D.Z.17===\'j\'){7.8.D.Z.17.S(7.d.h,7.8.D.Z.Q);7.d.h.5u(j(){2K();$(A).5t()})}C{4N(7.8.D.Z.17.2F()){1Z\'3w\':7.d.h.7z(7.8.D.Z.Q,2K);1C;1Z\'5o\':7.d.h.7y(7.8.D.Z.Q,2K);1C;1Z\'5p\':7.d.h.D(7.8.D.Z.Q,2K);1C;2L:7.d.h.D(1z,2K);1C}7.d.h.7x(7.8.e.1g.3T)}B 7},2I:j(r,38){R 5r=/7w|2s/.1Y(P 38)?38:!7.d.h.2r(\':28\');7[5r?\'q\':\'D\'](r);B 7},2h:j(r,4o){c(!7.V.1b){B p}R 1U=8.k,s=$(1U.s),2Q=7.d.h.47(),2P=7.d.h.48(),1p,1l,k,1o=1U.w.h,2R=1U.w.s,1c,14,i,4L,27,45={M:j(){R 3j=$(2e).3D(),3n=$(2e).o()+$(2e).3D(),2J=1o.x===\'1j\'?2Q/2:2Q,2N=1o.x===\'1j\'?1p/2:1p,2O=(1o.x===\'1j\'?1:2)*7.8.e.I.E,1k=-2*1U.1e.x,3m=k.M+2Q,1h;c(3m>3n){1h=1k-2J-2N+2O;c(k.M+1h>3j||3j-(k.M+1h)<3m-3n){B{1e:1h,f:\'25\'}}}c(k.M<3j){1h=1k+2J+2N-2O;c(3m+1h<3n||3m+1h-3n<3j-k.M){B{1e:1h,f:\'M\'}}}B{1e:0,f:1o.x}},K:j(){R 30=$(2e).3G(),33=$(2e).G()+$(2e).3G(),2J=1o.y===\'1j\'?2P/2:2P,2N=1o.y===\'1j\'?1l/2:1l,2O=(1o.y===\'1j\'?1:2)*7.8.e.I.E,1k=-2*1U.1e.y,32=k.K+2P,1h;c(32>33){1h=1k-2J-2N+2O;c(k.K+1h>30||30-(k.K+1h)<32-33){B{1e:1h,f:\'26\'}}}c(k.K<30){1h=1k+2J+2N-2O;c(32+1h<33||32+1h-33<30-k.K){B{1e:1h,f:\'K\'}}}B{1e:0,f:1o.y}}};c(r&&8.k.s===\'1K\'){2R={x:\'M\',y:\'K\'};1p=1l=0;c(!r.3Y){k=7.1v.1K}C{k={K:r.4c,M:r.3Y}}}C{c(s[0]===31){1p=s.o();1l=s.G();k={K:0,M:0}}C c(s[0]===2e){1p=s.o();1l=s.G();k={K:s.3G(),M:s.3D()}}C c(s.2r(\'7A\')){14=7.8.k.s.W(\'14\').7B(\',\');1V(i=0;i<14.Q;i++){14[i]=1A(14[i],10)}4L=7.8.k.s.3O(\'7F\').W(\'21\');27=$(\'4U[7E="#\'+4L+\'"]:1R\').1k();k={M:1u.3H(27.M+14[0]),K:1u.3H(27.K+14[1])};4N(7.8.k.s.W(\'3M\').2F()){1Z\'7T\':1p=1u.4V(1u.5z(14[2]-14[0]));1l=1u.4V(1u.5z(14[3]-14[1]));1C;1Z\'7C\':1p=14[2]+1;1l=14[2]+1;1C;1Z\'7S\':1p=14[0];1l=14[1];1V(i=0;i<14.Q;i++){c(i%2===0){c(14[i]>1p){1p=14[i]}c(14[i]<14[0]){k.M=1u.3H(27.M+14[i])}}C{c(14[i]>1l){1l=14[i]}c(14[i]<14[1]){k.K=1u.3H(27.K+14[i])}}}1p=1p-(k.M-27.M);1l=1l-(k.K-27.K);1C}1p-=2;1l-=2}C{1p=s.47();1l=s.48();c(!7.d.h.2r(\':28\')){7.d.h.F({M:\'-81\'}).q()}c(!1U.1e.1k||7.d.h.4F()[0]===31.4X){k=s.1k()}C{k=s.k();k.K+=s.4F().3G();k.M+=s.4F().3D()}}k.M+=2R.x===\'25\'?1p:2R.x===\'1j\'?1p/2:0;k.K+=2R.y===\'26\'?1l:2R.y===\'1j\'?1l/2:0}k.M+=1U.1e.x+(1o.x===\'25\'?-2Q:1o.x===\'1j\'?-2Q/2:0);k.K+=1U.1e.y+(1o.y===\'26\'?-2P:1o.y===\'1j\'?-2P/2:0);c(7.8.e.I.E>0){c(1o.x===\'M\'){k.M-=7.8.e.I.E}C c(1o.x===\'25\'){k.M+=7.8.e.I.E}c(1o.y===\'K\'){k.K-=7.8.e.I.E}C c(1o.y===\'26\'){k.K+=7.8.e.I.E}}c(1U.1e.55){(j(){R 2W={x:0,y:0},2n={x:45.M(),y:45.K()},f=2T 2D(8.e.f.w);c(7.d.f&&f){c(2n.y.1e!==0){k.K+=2n.y.1e;f.y=2W.y=2n.y.f}c(2n.x.1e!==0){k.M+=2n.x.1e;f.x=2W.x=2n.x.f}7.1v.2u={M:2W.x===p,K:2W.y===p};c(7.d.f.W(\'1S\')!==f.1w()){44.S(7,f)}}}())}c(!7.d.22&&$.16.1d&&1A($.16.2X.2H(0),10)===6){22.S(7)}1c=7.57.S(7,r);c(1c===p){B 7}c(8.k.s!==\'1K\'&&4o===H){7.V.4j=H;7.d.h.3S().4o(k,7V,\'80\',j(){7.V.4j=p})}C{7.d.h.F(k)}7.5c.S(7,r);B 7},4d:j(1r){c(!7.V.1b||(1r&&P 1r!==\'2s\')){B p}R 1F=7.d.1y.7W().2m(7.d.f).2m(7.d.1i),2f=7.d.1t.2m(7.d.1y.2w()),h=7.d.h,1H=7.8.e.o.1H,2b=7.8.e.o.2b;c(!1r){c(P 7.8.e.o.2Z===\'2s\'){1r=7.8.e.o.2Z}C{7.d.h.F({o:\'6e\'});1F.D();h.o(1r);c($.16.1d){2f.F({2f:\'\'})}1r=7.3d().o;c(!7.8.e.o.2Z){1r=1u.2b(1u.1H(1r,2b),1H)}}}c(1r%2){1r+=1}7.d.h.o(1r);1F.q();c(7.8.e.I.E){7.d.h.1M(\'.g-2k\').1L(j(i){$(A).o(1r-(7.8.e.I.E*2))})}c($.16.1d){2f.F({2f:1});7.d.1t.o(1r);c(7.d.22){7.d.22.o(1r).G(7.3d.G)}}B 7},7Y:j(21){R f,2j,1n,w,X;c(!7.V.1b||P 21!==\'1w\'||!$.18.g.3c[21]){B p}7.8.e=4l.S(7,$.18.g.3c[21],7.8.4v.e);7.d.u.F(2G(7.8.e));c(7.8.u.U.1m!==p){7.d.U.F(2G(7.8.e.U,H))}7.d.1y.F({7U:7.8.e.I.J});c(7.8.e.f.w!==p){c($(\'<1f />\').1q(0).1E){f=7.d.h.1M(\'.g-f 1f:1R\');1n=f.1q(0).1E(\'2d\');1n.5I(0,0,3N,3N);w=f.3O(\'12[1S]:1R\').W(\'1S\');X=4t(w,7.8.e.f.N.o,7.8.e.f.N.G);4u.S(7,f,X,7.8.e.f.J||7.8.e.I.J)}C c($.16.1d){f=7.d.h.1M(\'.g-f [5E="3M"]\');f.W(\'3t\',7.8.e.f.J||7.8.e.I.J)}}c(7.8.e.I.E>0){7.d.h.1M(\'.g-2k\').F({7X:7.8.e.I.J});c($(\'<1f />\').1q(0).1E){2j=4e(7.8.e.I.E);7.d.h.1M(\'.g-1t 1f\').1L(j(){1n=$(A).1q(0).1E(\'2d\');1n.5I(0,0,3N,3N);w=$(A).3O(\'12[1S]:1R\').W(\'1S\');46.S(7,$(A),2j[w],7.8.e.I.E,7.8.e.I.J)})}C c($.16.1d){7.d.h.1M(\'.g-1t [5E="3p"]\').1L(j(){$(A).W(\'3t\',7.8.e.I.J)})}}B 7},4A:j(u,5F){R 36,37,4K;j 4J(){7.4d();c(5F!==p){c(7.8.k.17!==\'29\'){7.2h(7.d.h.2r(\':28\'),H)}c(7.8.e.f.w!==p){42.S(7)}}}c(!u){B p}36=7.54.S(7,u);c(P 36===\'1w\'){u=36}C c(36===p){B}c(7.V.1b){c($.16.1d){7.d.1y.2w().F({2f:\'7Z\'})}c(u.4r&&u.Q>0){u.5V(H).5P(7.d.u).q()}C{7.d.u.2l(u)}37=7.d.u.1M(\'4U[6O=p]\');c(37.Q>0){4K=0;37.1L(j(i){$(\'<4U 4T="\'+$(A).W(\'4T\')+\'" />\').7D(j(){c(++4K===37.Q){4J()}})})}C{4J()}}C{7.8.u.1m=u}7.4Y.S(7);B 7},5Z:j(1x,Y,2A){R 1c;j 4D(u){7.63.S(7);7.4A(u)}c(!7.V.1b){B p}1c=7.51.S(7);c(1c===p){B 7}c(2A===\'60\'){$.60(1x,Y,4D)}C{$.1q(1x,Y,4D)}B 7},5W:j(u){R 1c;c(!7.V.1b||!u){B p}1c=7.64.S(7);c(1c===p){B 7}c(7.d.1i){7.d.1i=7.d.1i.5V(H)}7.d.U.2l(u);c(7.d.1i){7.d.U.3B(7.d.1i)}7.65.S(7);B 7},2E:j(r){R 4B,3F,3y,1c;c(!7.V.1b||7.8.k.17===\'29\'){B p}4B=1A(7.d.h.F(\'z-3s\'),10);3F=7u+$(\'12.g[11^="g"]\').Q-1;c(!7.V.3Z&&4B!==3F){1c=7.5H.S(7,r);c(1c===p){B 7}$(\'12.g[11^="g"]\').5S(7.d.h).1L(j(){c($(A).g(\'T\').V.1b===H){3y=1A($(A).F(\'z-3s\'),10);c(P 3y===\'2s\'&&3y>-1){$(A).F({68:1A($(A).F(\'z-3s\'),10)-1})}$(A).g(\'T\').V.3Z=p}});7.d.h.F({68:3F});7.V.3Z=H;7.5C.S(7,r)}B 7},3X:j(38){7.V.23=38?H:p;B 7},3f:j(){R i,1c,O,4z=7.d.s.Y(\'4p\'+7.1v.W[0]);1c=7.61.S(7);c(1c===p){B 7}c(7.V.1b){7.8.q.L.s.1O(\'4C.g\',7.2h);7.8.q.L.s.1O(\'4x.g\',7.D);7.8.q.L.s.1O(7.8.q.L.r+\'.g\');7.8.D.L.s.1O(7.8.D.L.r+\'.g\');7.d.h.1O(7.8.D.L.r+\'.g\');7.d.h.1O(\'35.g\',7.2E);7.d.h.3W()}C{7.8.q.L.s.1O(7.8.q.L.r+\'.g-\'+7.11+\'-4m\')}c(P 7.d.s.Y(\'g\')===\'19\'){O=7.d.s.Y(\'g\').O;c(P O===\'19\'&&O.Q>0){1V(i=0;i<O.Q-1;i++){c(O[i].11===7.11){O.5X(i,1)}}}}$.18.g.O.5X(7.11,1);c(P O===\'19\'&&O.Q>0){7.d.s.Y(\'g\').3k=O.Q-1}C{7.d.s.73(\'g\')}c(4z){7.d.s.W(7.1v.W[0],4z)}7.62.S(7);B 7.d.s},72:j(){R q,1k;c(!7.V.1b){B p}q=(7.d.h.F(\'2a\')!==\'3a\')?p:H;c(q){7.d.h.F({3V:\'1F\'}).q()}1k=7.d.h.1k();c(q){7.d.h.F({3V:\'28\'}).D()}B 1k},3d:j(){R q,2t;c(!7.V.1b){B p}q=(!7.d.h.2r(\':28\'))?H:p;c(q){7.d.h.F({3V:\'1F\'}).q()}2t={G:7.d.h.48(),o:7.d.h.47()};c(q){7.d.h.F({3V:\'28\'}).D()}B 2t}})}$.18.g=j(8,41){R i,11,O,20,2c,1T,15,T;c(P 8===\'1w\'){c($(A).Y(\'g\')){c(8===\'T\'){B $(A).Y(\'g\').O[$(A).Y(\'g\').3k]}C c(8===\'O\'){B $(A).Y(\'g\').O}}C{B $(A)}}C{c(!8){8={}}c(P 8.u!==\'19\'||(8.u.4r&&8.u.Q>0)){8.u={1m:8.u}}c(P 8.u.U!==\'19\'){8.u.U={1m:8.u.U}}c(P 8.k!==\'19\'){8.k={w:8.k}}c(P 8.k.w!==\'19\'){8.k.w={s:8.k.w,h:8.k.w}}c(P 8.q!==\'19\'){8.q={L:8.q}}c(P 8.q.L!==\'19\'){8.q.L={r:8.q.L}}c(P 8.q.Z!==\'19\'){8.q.Z={17:8.q.Z}}c(P 8.D!==\'19\'){8.D={L:8.D}}c(P 8.D.L!==\'19\'){8.D.L={r:8.D.L}}c(P 8.D.Z!==\'19\'){8.D.Z={17:8.D.Z}}c(P 8.e!==\'19\'){8.e={21:8.e}}8.e=4i(8.e);20=$.2p(H,{},$.18.g.39,8);20.e=4l.S({8:20},20.e);20.4v=$.2p(H,{},8)}B $(A).1L(j(){R 7=$(A),u=p;c(P 8===\'1w\'){1T=8.2F();O=$(A).g(\'O\');c(P O===\'19\'){c(41===H&&1T===\'3f\'){1V(i=O.Q-1;i>-1;i--){c(\'19\'===P O[i]){O[i].3f()}}}C{c(41!==H){O=[$(A).g(\'T\')]}1V(i=0;i<O.Q;i++){c(1T===\'3f\'){O[i].3f()}C c(O[i].V.1b===H){c(1T===\'q\'){O[i].q()}C c(1T===\'D\'){O[i].D()}C c(1T===\'2E\'){O[i].2E()}C c(1T===\'3X\'){O[i].3X(H)}C c(1T===\'71\'){O[i].3X(p)}C c(1T===\'7v\'){O[i].2h()}}}}}}C{15=$.2p(H,{},20);15.D.Z.Q=20.D.Z.Q;15.q.Z.Q=20.q.Z.Q;c(15.k.3U===p){15.k.3U=$(31.4X)}c(15.k.s===p){15.k.s=$(A)}c(15.q.L.s===p){15.q.L.s=$(A)}c(15.D.L.s===p){15.D.L.s=$(A)}15.k.w.h=2T 2D(15.k.w.h);15.k.w.s=2T 2D(15.k.w.s);c(!15.u.1m.Q){$([\'U\',\'6b\']).1L(j(i,W){R 2C=7.W(W);c(2C&&2C.Q){u=[W,2C];7.Y(\'4p\'+W,2C).74(W);15.u.1m=2C.3l(/\\n/75,\'<78 />\');B p}})}11=$.18.g.O.Q;1V(i=0;i<11;i++){c(P $.18.g.O[i]===\'5i\'){11=i;1C}}2c=2T 56($(A),15,11);$.18.g.O[11]=2c;2c.1v.W=u;c(P $(A).Y(\'g\')===\'19\'&&$(A).Y(\'g\')){c(P $(A).W(\'g\')===\'5i\'){$(A).Y(\'g\').3k=$(A).Y(\'g\').O.Q}$(A).Y(\'g\').O.5h(2c)}C{$(A).Y(\'g\',{3k:0,O:[2c]})}c(15.u.5w===p&&15.q.L.r!==p&&15.q.3x!==H){15.q.L.s.1J(15.q.L.r+\'.g-\'+11+\'-4m\',{g:11},j(r){T=$.18.g.O[r.Y.g];T.8.q.L.s.1O(T.8.q.L.r+\'.g-\'+r.Y.g+\'-4m\');T.1v.1K={M:r.3Y,K:r.4c};4w.S(T);T.8.q.L.s.77(T.8.q.L.r)})}C{2c.1v.1K={M:15.q.L.s.1k().M,K:15.q.L.s.1k().K};4w.S(2c)}}})};$.18.g.O=[];$.18.g.18={W:$.18.W};$.18.W=j(W){R T=$(A).g(\'T\');B(3b.Q===1&&(/U|6b/i).1Y(W)&&T.V&&T.V.1b===H)?$(A).Y(\'4p\'+T.1v.W[0]):$.18.g.18.W.4s(A,3b)};$.18.g.39={u:{5w:p,1m:p,1x:p,Y:1z,U:{1m:p,1i:p}},k:{s:p,w:{s:\'3P\',h:\'3K\'},1e:{x:0,y:0,1K:H,55:p,3E:H,3L:H,1k:p},17:\'34\',3U:p},q:{L:{s:p,r:\'35\'},Z:{17:\'3w\',Q:5T},2V:76,1X:p,3x:p},D:{L:{s:p,r:\'4x\'},Z:{17:\'3w\',Q:5T},2V:0,3g:p},T:{5J:j(){},5f:j(){},57:j(){},5c:j(){},5n:j(){},5q:j(){},5A:j(){},4Z:j(){},54:j(){},4Y:j(){},51:j(){},63:j(){},64:j(){},65:j(){},61:j(){},62:j(){},5H:j(){},5C:j(){}}};$.18.g.3c={39:{1s:\'66\',J:\'#6Z\',2u:\'1F\',6Y:\'M\',o:{2b:0,1H:6S},2x:\'6R 6Q\',I:{o:1,E:0,J:\'#6P\'},f:{w:p,J:p,N:{o:13,G:13},2B:1},U:{1s:\'#6T\',6U:\'6X\',2x:\'6W 6V\'},1i:{79:\'7a\'},1g:{s:\'\',f:\'g-f\',U:\'g-U\',1i:\'g-1i\',u:\'g-u\',3T:\'g-3T\'}},5L:{I:{o:3,E:0,J:\'#7o\'},U:{1s:\'#7n\',J:\'#5M\'},1s:\'#7m\',J:\'#5M\',1g:{h:\'g-5L\'}},6d:{I:{o:3,E:0,J:\'#7p\'},U:{1s:\'#7q\',J:\'#6c\'},1s:\'66\',J:\'#6c\',1g:{h:\'g-6d\'}},69:{I:{o:3,E:0,J:\'#7t\'},U:{1s:\'#7s\',J:\'#67\'},1s:\'#7r\',J:\'#67\',1g:{h:\'g-69\'}},4H:{I:{o:3,E:0,J:\'#7l\'},U:{1s:\'#7k\',J:\'#6g\'},1s:\'#7e\',J:\'#6g\',1g:{h:\'g-4H\'}},52:{I:{o:3,E:0,J:\'#7d\'},U:{1s:\'#7c\',J:\'#4W\'},1s:\'#7b\',J:\'#4W\',1g:{h:\'g-52\'}},5k:{I:{o:3,E:0,J:\'#7f\'},U:{1s:\'#7g\',J:\'#7j\'},1s:\'#7i\',J:\'#7h\',1g:{h:\'g-5k\'}}}}(82));',62,499,'|||||||self|options||||if|elements|style|tip|qtip|tooltip||function|position||||width|false|show|event|target||content||corner||||this|return|else|hide|radius|css|height|true|border|color|top|when|left|size|interfaces|typeof|length|var|call|api|title|status|attr|coordinates|data|effect||id|div||coords|config|browser|type|fn|object|px|rendered|returned|msie|adjust|canvas|classes|adj|button|center|offset|targetHeight|text|context|my|targetWidth|get|newWidth|background|wrapper|Math|cache|string|url|contentWrapper|null|parseInt|1px|break|finalStyle|getContext|hidden|timers|max|class|bind|mouse|each|find|tips|unbind|ieAdjust|containers|first|rel|command|posOptions|for|inactive|solo|test|case|opts|name|bgiframe|disabled|positionAdjust|right|bottom|imagePos|visible|static|display|min|obj||window|zoom|clearTimeout|updatePosition|hideTarget|borders|betweenCorners|html|add|adapted|path|extend|margin|is|number|dimensions|overflow|styleExtend|children|padding|precedance|90|method|opacity|val|Corner|focus|toLowerCase|jQueryStyle|charAt|toggle|myOffset|afterHide|default|afterShow|atOffset|borderAdjust|elemHeight|elemWidth|at|line|new|styleObj|delay|adjusted|version|font|value|topEdge|document|pBottom|bottomEdge|absolute|mouseover|parsedContent|images|state|defaults|none|arguments|styles|getDimensions|borderTop|destroy|fixed|showTarget|borderBottom|leftEdge|current|replace|pRight|rightEdge|align|arc|solid|aria|index|fillcolor|inactiveEvents|inactiveMethod|fade|ready|elemIndex|delete|styleArray|prepend|image|scrollLeft|scroll|newIndex|scrollTop|floor|behavior|coordsize|topLeft|resize|shape|300|parent|bottomRight|newMargin|VML|stop|active|container|visiblity|remove|disable|pageX|focused|topRight|blanket|positionTip|removeAttribute|createTip|adapt|drawBorder|outerWidth|outerHeight|marginTop|ieStyle|sub|pageY|updateWidth|calculateBorders|ltr|borderCoord|paddingSize|sanitizeStyle|animated|dir|buildStyle|create|paddingCorner|animate|old|sideWidth|jquery|apply|calculateTip|drawTip|user|construct|mouseout|relative|oldattr|updateContent|curIndex|mousemove|setupContent|block|offsetParent|vertWidth|red|bottomLeft|afterLoad|loadedImages|mapName|setTimeout|switch|betweenWidth|hideMethod|vertical|unfocus|showMethod|src|img|ceil|58792E|body|onContentUpdate|onHide||beforeContentLoad|green|inline|beforeContentUpdate|screen|QTip|beforePositionUpdate|prependTo|createBorder|String|createTitle|onPositionUpdate|click|role|onRender|parents|push|undefined|mouseenter|blue|assignEvents|filter|beforeShow|slide|grow|onShow|condition|append|dequeue|queue|addClass|prerender|middle|match|abs|beforeHide|bottomright|onFocus|270|nodeName|reposition|fillStyle|beforeFocus|clearRect|beforeRender|topright|cream|A27D35|topleft|unshift|appendTo|lineTo|in|not|100|beginPath|clone|updateTitle|splice|fill|loadContent|post|beforeDestroy|onDestroy|onContentLoad|beforeTitleUpdate|onTitleUpdate|white|f3f3f3|zIndex|dark|bottomleft|alt|454545|light|auto|stroked|9C2F2F|dblclick|rightcenter|mouseup|mousedown|mouseleave|Right|Left|moveTo|filled|out|endangle|startangle|use|strict|bottomcenter|qtipSelector|leftbottom|topcenter|righttop|leave|eq|rightbottom|0px|labelledby|while|float|borderWidth|xe|leftcenter|marginLeft|search|lefttop|PI|complete|d3d3d3|9px|5px|250|e1e1e1|fontWeight|12px|7px|bold|textAlign|111|relatedTarget|enable|getPosition|removeData|removeAttr|gi|140|trigger|br|cursor|pointer|CDE6AC|b9db8c|A9DB66|F79992|ADD9ED|D0E9F5|4D9FBF|E5F6FE|5E99BD|f28279|CE6F6F|FBF7AA|F0DE7D|F9E98E|E2E2E2|f1f1f1|505050|404040|303030|15000|update|boolean|removeClass|slideUp|fadeOut|area|split|circle|load|usemap|map|slideDown|fadeIn|frameborder|iframe|preventDefault|stopPropagation|tabindex|javascript|webkit|moz|describedby|alpha|poly|rect|borderColor|200|siblings|backgroundColor|updateStyle|normal|swing|10000000em|jQuery'.split('|'),0,{}))
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/static/js/projectscontents.js	Sat Sep 11 01:18:28 2010 +0200
@@ -0,0 +1,194 @@
+$.fn.realVal = function() {
+	var obj = $(this[0]);
+	if(obj.val) {
+		if(obj.val() == obj.attr('defaultText')) {
+			return '';
+		}
+		else {
+			return obj.val();
+		}
+	}
+	else {
+		return null;
+	}
+};
+
+function init_events_base(base_node) {
+
+	$('.ldt_link',base_node).nyroModal({
+       	type: 'iframe',
+       	forceType: 'iframe',
+   		height:662, 
+   		width:1022,
+   		bgColor: 'rgb(239, 239, 239)',
+   		padding: 5,
+   		titleFromIframe: false
+      	});
+    	
+ 	$('.ldt_link_create',base_node).nyroModal({
+        type: 'iframe',
+        forceType: 'iframe',
+        height:680, 
+        width:500,
+        bgColor: 'rgb(239, 239, 239)',
+        padding: 5,
+        titleFromIframe: false,
+        beforeHideContent: function(elts, settings, callback){
+             try {
+	              var res = $('#ldtInitSwf',$('#nyroModalIframe').contents());
+	              if(res.length > 0)
+	              {
+	              	   res.get(0).forceSave();
+	              }
+             }
+             catch(err)
+             {
+              // do nothing
+             }                   
+             callback();
+        	}
+    	});
+
+	$('.ldt_link_embed',base_node).click(function(e) {
+		e.preventDefault();
+		var link = $(e.target);
+		var json_url = link.attr("href");
+		var player_id = link.attr("id");
+		/*$.nyroModalSettings({
+		 	ajax: { data: ({ json_url:json_url, player_id:player_id }) }
+		  	});*/
+		   $.nyroModalManual({
+		         type: 'iframe',
+		         forceType: 'iframe',
+		         titleFromIframe: false,
+		   	height:662, 
+		  		width:650,
+		  		bgColor: 'rgb(239, 239, 239)',
+		  		padding: 5,
+		    url: '{% url franceculture.views.popup_embed %}?json_url='+escape(json_url)+'&player_id='+escape(player_id),
+		   });
+		   return false;
+	});
+
+
+	$('.imageline',base_node).each(function(i) {
+	    var tr = $(this);
+		tr.mouseover(function() {
+	    	$('.cellimgdiv',this).css('visibility', 'visible');
+		}); 
+		tr.mouseout(function() {
+	    	$('.cellimgdiv',this).css('visibility', 'hidden');
+		});
+	});
+	
+	$('.cellimgdiv img').qtip({ 
+		style: { 
+			'name': 'dark',
+			'filter':'alpha(opacity=70)',
+			'-moz-opacity':'0.7',
+			'-khtml-opacity': '0.7',
+			'opacity': '0.7',
+			'border': {
+				'width' : '0',
+				'color': '#505050',
+			}, 
+			'tip': true
+		} 
+	});
+	
+
+};
+
+
+function searchCallback(target, container_selector, url, timeout) {
+
+	timeout = typeof(timeout) != 'undefined' ? timeout : 0;
+	var target = $(target); 
+
+	if(target.attr('timer')) {
+		clearTimeout(target.attr('timer'));
+	}
+	
+	target.attr('timer',setTimeout(function() {
+		target.next(".searchajaxloader").show();
+		url = url.replace('__FILTER__',escape($(target).realVal()));
+		$(container_selector).load(url, null, function() {
+			target.next(".searchajaxloader").hide();
+			init_events($(container_selector));
+			target.removeAttr('timer');
+		});
+	},
+	300));
+};
+
+
+function init_events_contents(base_node) {
+
+	init_events_base(base_node);
+	
+	$('.content_link_create').nyroModal({
+	    type: 'iframe',
+	    forceType: 'iframe',
+	    height:500, 
+	    width:765,
+	    bgColor: 'rgb(239, 239, 239)',
+	    padding: 5,
+	    titleFromIframe: false,
+	    endRemove: function(elts, settings) {
+	    	searchCallback($("#searchcontentsinput"),"#contentslistcontainer",content_filter_url)
+		},
+	  	endShowContent: function(elts, settings) {
+		  	$('#nyroModalIframe', elts.content).load(function() {
+			  	var form_status = $(this).contents().find("#content_form_status").val(); 
+			  	if(form_status == 'saved') {
+			  		$.nyroModalRemove();
+			  	}
+		  	});
+		}
+	});
+
+}
+
+
+
+function searchFieldInit(input_list_init) {
+
+	$(".searchfieldinputbase").keydown(function (e) {
+	 	if(e.which == 27) {
+	 	 	$(e.target).blur();
+	 	 	$(e.target).next(".searchajaxloader").hide();
+	 	}
+	});
+	
+	 
+	$('.searchfieldinput').each(function(i) {
+	     var sbox = $(this);
+	     if(sbox.val() != '') {
+	    	 sbox.attr('defaultText', sbox.val());
+	     }
+	
+	     sbox.focus(function() {
+	         box = $(this);
+	         if(box.val() == box.attr('defaultText')) {
+	             box.val('');
+	             box.toggleClass("searchfieldinput");
+	         }
+	     });
+	
+	     sbox.blur(function() {
+	         var box = $(this);
+	         if(box.val() == '' && box.attr('defaultText')) {
+	             box.val(box.attr('defaultText'));
+	             box.toggleClass("searchfieldinput");
+	         }
+	     });
+	     
+	});
+
+	$.each(input_list_init, function(index, value) {
+		$(value['input_selector']).keyup(function (e) {
+			searchCallback(e.target, value['container_selector'], value['url']);
+		});
+	});
+
+}