Merge with b6d17223140ff462ee13c178855d63131f063752 chunked_upload
authorrougeronj
Tue, 12 Feb 2013 17:30:41 +0100
branchchunked_upload
changeset 1103 ce34461a47b6
parent 1102 946a601ab64a (current diff)
parent 1100 b6d17223140f (diff)
child 1104 d8c1a909910c
Merge with b6d17223140ff462ee13c178855d63131f063752
src/ldt/ldt/ldt_utils/urls.py
src/ldt/ldt/static/ldt/css/ldtform.css
--- a/.hgtags	Tue Feb 12 17:29:41 2013 +0100
+++ b/.hgtags	Tue Feb 12 17:30:41 2013 +0100
@@ -139,3 +139,11 @@
 0897d4ffdbc96f9cfb4b9c9b6e4f27dbebf8331a V01.39
 7fa1389a1d1da6f78f1509733874baf13647e960 V01.40
 57bb8c9fe1ff60b3a3e5d21a647e724b8cb18a45 V01.41
+726f2cf3f020c6d4dd1075acb6b94de2dbec5685 V01.42
+c4d6ddd5f718d1e55441247aa4c4366a5d7be470 V01.43
+996bb5b1adbc920f8ecb49f9d7b45f51a8aa3c04 V01.44
+62be1eedf90855ab3cef1ab8a9f0c66130638673 V01.45
+e1b6be4d85a47f4cecce2cf6e88ff190301bd8dc V01.46
+86dbc665226d08c082a559b2c218efcd56105c69 V01.47
+56c6497c0785d20c3c17da90446d030eba3c78f3 V01.48
+e590a85b91cccd905ddd25db54357f4f584e83fa V01.49
--- a/.settings/org.eclipse.core.resources.prefs	Tue Feb 12 17:29:41 2013 +0100
+++ b/.settings/org.eclipse.core.resources.prefs	Tue Feb 12 17:30:41 2013 +0100
@@ -1,42 +1,45 @@
-eclipse.preferences.version=1
-encoding//src/ldt/ldt/core/migrations/0001_initial.py=utf-8
-encoding//src/ldt/ldt/core/migrations/0002_auto__del_owner.py=utf-8
-encoding//src/ldt/ldt/indexation/backends/elasticsearch_backend.py=utf-8
-encoding//src/ldt/ldt/indexation/highlighter.py=utf-8
-encoding//src/ldt/ldt/indexation/models.py=utf-8
-encoding//src/ldt/ldt/indexation/query_parser.py=utf-8
-encoding//src/ldt/ldt/indexation/search_indexes.py=utf-8
-encoding//src/ldt/ldt/indexation/tests.py=utf-8
-encoding//src/ldt/ldt/ldt_utils/migrations/0001_initial.py=utf-8
-encoding//src/ldt/ldt/ldt_utils/migrations/0002_auto__add_field_media_mimetype_field__chg_field_media_external_src_url.py=utf-8
-encoding//src/ldt/ldt/ldt_utils/migrations/0003_auto__chg_field_project_owner.py=utf-8
-encoding//src/ldt/ldt/ldt_utils/migrations/0004_auto__add_field_project_description.py=utf-8
-encoding//src/ldt/ldt/ldt_utils/migrations/0005_add_permissions.py=utf-8
-encoding//src/ldt/ldt/ldt_utils/migrations/0006_auto__add_field_media_image.py=utf-8
-encoding//src/ldt/ldt/ldt_utils/migrations/0007_auto__add_field_content_image__del_field_media_image.py=utf-8
-encoding//src/ldt/ldt/ldt_utils/migrations/0008_auto__add_field_project_image.py=utf-8
-encoding//src/ldt/ldt/ldt_utils/migrations/0009_auto__chg_field_content_image__chg_field_project_image.py=utf-8
-encoding//src/ldt/ldt/ldt_utils/migrations/0010_auto__add_annotationstat.py=utf-8
-encoding//src/ldt/ldt/ldt_utils/migrations/0011_gen_stat_annotation.py=utf-8
-encoding//src/ldt/ldt/ldt_utils/migrations/0012_auto__add_field_content_last_annotated.py=utf-8
-encoding//src/ldt/ldt/ldt_utils/migrations/0013_auto__add_field_content_front_project__chg_field_content_last_annotate.py=utf-8
-encoding//src/ldt/ldt/ldt_utils/migrations/0014_auto__del_annotationstat__chg_field_content_last_annotated.py=utf-8
-encoding//src/ldt/ldt/ldt_utils/migrations/0015_auto__add_contentstat__del_field_content_last_annotated__del_field_con.py=utf-8
-encoding//src/ldt/ldt/ldt_utils/migrations/0016_one_to_one_stat_annotation.py=utf-8
-encoding//src/ldt/ldt/ldt_utils/migrations/0017_correct_image_path.py=utf-8
-encoding//src/ldt/ldt/ldt_utils/migrations/0018_auto__chg_field_content_iri_id__chg_field_project_ldt_id__chg_field_au.py=utf-8
-encoding//src/ldt/ldt/ldt_utils/migrations/0019_recalculate_media_hash_src.py=utf-8
-encoding//src/ldt/ldt/ldt_utils/migrations/0020_auto__add_field_segment_id_hash__chg_field_segment_iri_id__chg_field_s.py=utf-8
-encoding//src/ldt/ldt/ldt_utils/migrations/0021_recalculate_segment_id_hash_script.py=utf-8
-encoding//src/ldt/ldt/ldt_utils/migrations/0022_auto__add_unique_media_src_hash__chg_field_segment_cutting_id__chg_fie.py=utf-8
-encoding//src/ldt/ldt/ldt_utils/migrations/0023_auto__add_field_segment_audio_src__add_field_segment_audio_href.py=utf-8
-encoding//src/ldt/ldt/ldt_utils/migrations/0024_auto__chg_field_tag_name.py=utf-8
-encoding//src/ldt/ldt/ldt_utils/migrations/0025_chg_site_domain.py=utf-8
-encoding//src/ldt/ldt/ldt_utils/views/json.py=utf-8
-encoding//src/ldt/ldt/management/utils.py=utf-8
-encoding//src/ldt/ldt/test/test_runner.py=utf-8
-encoding//src/ldt/ldt/text/migrations/0001_initial.py=utf-8
-encoding//src/ldt/ldt/user/migrations/0001_initial.py=utf-8
-encoding//src/ldt/ldt/user/migrations/0008_auto__chg_field_groupprofile_image__chg_field_groupprofile_group__chg_.py=utf-8
-encoding//virtualenv/web/env/guardianenv/Lib/site-packages/guardian/migrations/0001_initial.py=utf-8
-encoding/<project>=UTF-8
+eclipse.preferences.version=1
+encoding//src/ldt/ldt/core/migrations/0001_initial.py=utf-8
+encoding//src/ldt/ldt/core/migrations/0002_auto__del_owner.py=utf-8
+encoding//src/ldt/ldt/indexation/backends/elasticsearch_backend.py=utf-8
+encoding//src/ldt/ldt/indexation/highlighter.py=utf-8
+encoding//src/ldt/ldt/indexation/models.py=utf-8
+encoding//src/ldt/ldt/indexation/query_parser.py=utf-8
+encoding//src/ldt/ldt/indexation/search_indexes.py=utf-8
+encoding//src/ldt/ldt/indexation/tests.py=utf-8
+encoding//src/ldt/ldt/ldt_utils/events.py=utf-8
+encoding//src/ldt/ldt/ldt_utils/migrations/0001_initial.py=utf-8
+encoding//src/ldt/ldt/ldt_utils/migrations/0002_auto__add_field_media_mimetype_field__chg_field_media_external_src_url.py=utf-8
+encoding//src/ldt/ldt/ldt_utils/migrations/0003_auto__chg_field_project_owner.py=utf-8
+encoding//src/ldt/ldt/ldt_utils/migrations/0004_auto__add_field_project_description.py=utf-8
+encoding//src/ldt/ldt/ldt_utils/migrations/0005_add_permissions.py=utf-8
+encoding//src/ldt/ldt/ldt_utils/migrations/0006_auto__add_field_media_image.py=utf-8
+encoding//src/ldt/ldt/ldt_utils/migrations/0007_auto__add_field_content_image__del_field_media_image.py=utf-8
+encoding//src/ldt/ldt/ldt_utils/migrations/0008_auto__add_field_project_image.py=utf-8
+encoding//src/ldt/ldt/ldt_utils/migrations/0009_auto__chg_field_content_image__chg_field_project_image.py=utf-8
+encoding//src/ldt/ldt/ldt_utils/migrations/0010_auto__add_annotationstat.py=utf-8
+encoding//src/ldt/ldt/ldt_utils/migrations/0011_gen_stat_annotation.py=utf-8
+encoding//src/ldt/ldt/ldt_utils/migrations/0012_auto__add_field_content_last_annotated.py=utf-8
+encoding//src/ldt/ldt/ldt_utils/migrations/0013_auto__add_field_content_front_project__chg_field_content_last_annotate.py=utf-8
+encoding//src/ldt/ldt/ldt_utils/migrations/0014_auto__del_annotationstat__chg_field_content_last_annotated.py=utf-8
+encoding//src/ldt/ldt/ldt_utils/migrations/0015_auto__add_contentstat__del_field_content_last_annotated__del_field_con.py=utf-8
+encoding//src/ldt/ldt/ldt_utils/migrations/0016_one_to_one_stat_annotation.py=utf-8
+encoding//src/ldt/ldt/ldt_utils/migrations/0017_correct_image_path.py=utf-8
+encoding//src/ldt/ldt/ldt_utils/migrations/0018_auto__chg_field_content_iri_id__chg_field_project_ldt_id__chg_field_au.py=utf-8
+encoding//src/ldt/ldt/ldt_utils/migrations/0019_recalculate_media_hash_src.py=utf-8
+encoding//src/ldt/ldt/ldt_utils/migrations/0020_auto__add_field_segment_id_hash__chg_field_segment_iri_id__chg_field_s.py=utf-8
+encoding//src/ldt/ldt/ldt_utils/migrations/0021_recalculate_segment_id_hash_script.py=utf-8
+encoding//src/ldt/ldt/ldt_utils/migrations/0022_auto__add_unique_media_src_hash__chg_field_segment_cutting_id__chg_fie.py=utf-8
+encoding//src/ldt/ldt/ldt_utils/migrations/0023_auto__add_field_segment_audio_src__add_field_segment_audio_href.py=utf-8
+encoding//src/ldt/ldt/ldt_utils/migrations/0024_auto__chg_field_tag_name.py=utf-8
+encoding//src/ldt/ldt/ldt_utils/migrations/0025_chg_site_domain.py=utf-8
+encoding//src/ldt/ldt/ldt_utils/migrations/0026_set_relative_ldtproject.py=utf-8
+encoding//src/ldt/ldt/ldt_utils/views/json.py=utf-8
+encoding//src/ldt/ldt/management/commands/synciri.py=utf-8
+encoding//src/ldt/ldt/management/utils.py=utf-8
+encoding//src/ldt/ldt/test/test_runner.py=utf-8
+encoding//src/ldt/ldt/text/migrations/0001_initial.py=utf-8
+encoding//src/ldt/ldt/user/migrations/0001_initial.py=utf-8
+encoding//src/ldt/ldt/user/migrations/0008_auto__chg_field_groupprofile_image__chg_field_groupprofile_group__chg_.py=utf-8
+encoding//virtualenv/web/env/guardianenv/Lib/site-packages/guardian/migrations/0001_initial.py=utf-8
+encoding/<project>=UTF-8
--- a/src/ldt/ldt/__init__.py	Tue Feb 12 17:29:41 2013 +0100
+++ b/src/ldt/ldt/__init__.py	Tue Feb 12 17:30:41 2013 +0100
@@ -1,4 +1,4 @@
-VERSION = (1, 41, 0, "final", 0)
+VERSION = (1, 49, 0, "final", 0)
 
 
 def get_version():
--- a/src/ldt/ldt/api/ldt/authentication.py	Tue Feb 12 17:29:41 2013 +0100
+++ b/src/ldt/ldt/api/ldt/authentication.py	Tue Feb 12 17:30:41 2013 +0100
@@ -2,6 +2,12 @@
 from django.middleware.csrf import _sanitize_token, constant_time_compare
 from django.utils.http import same_origin
 from tastypie.authentication import Authentication
+from tastypie.http import HttpUnauthorized
+from django.contrib.auth.models import User
+from django.contrib.auth import login
+from ldt.security import set_current_user
+
+
 
 # imported from tastypie's next version 0.9.12
 class SessionAuthentication(Authentication):
@@ -58,4 +64,138 @@
         if request.user:
             return request.user.username
         else:
-            return "anon."
\ No newline at end of file
+            return "anon."
+        
+# imported from tastypie's next version 1.0.0
+class MultiAuthentication(object):
+    """
+    An authentication backend that tries a number of backends in order.
+    """
+    def __init__(self, *backends, **kwargs):
+        super(MultiAuthentication, self).__init__(**kwargs)
+        self.backends = backends
+
+    def is_authenticated(self, request, **kwargs):
+        """
+        Identifies if the user is authenticated to continue or not.
+
+        Should return either ``True`` if allowed, ``False`` if not or an
+        ``HttpResponse`` if you need something custom.
+        """
+        unauthorized = False
+
+        for backend in self.backends:
+            check = backend.is_authenticated(request, **kwargs)
+
+            if check:
+                if isinstance(check, HttpUnauthorized):
+                    unauthorized = unauthorized or check
+                else:
+                    request._authentication_backend = backend
+                    return check
+
+        return unauthorized
+
+    def get_identifier(self, request):
+        """
+        Provides a unique string identifier for the requestor.
+
+        This implementation returns a combination of IP address and hostname.
+        """
+        try:
+            return request._authentication_backend.get_identifier(request)
+        except AttributeError:
+            return 'anon.'
+
+class ApiKeyAuthentication(Authentication):
+    """
+    Handles API key auth, in which a user provides a username & API key.
+
+    Uses the ``ApiKey`` model that ships with tastypie. If you wish to use
+    a different model, override the ``get_key`` method to perform the key check
+    as suits your needs.
+    """
+    def __init__(self, require_active=True):
+        self.require_active = require_active
+        
+    def _unauthorized(self):
+        return HttpUnauthorized()
+
+    def extract_credentials(self, request):
+        if request.META.get('HTTP_AUTHORIZATION') and request.META['HTTP_AUTHORIZATION'].lower().startswith('apikey '):
+            (auth_type, data) = request.META['HTTP_AUTHORIZATION'].split()
+
+            if auth_type.lower() != 'apikey':
+                raise ValueError("Incorrect authorization header.")
+
+            username, api_key = data.split(':', 1)
+        else:
+            username = request.GET.get('username') or request.POST.get('username')
+            api_key = request.GET.get('api_key') or request.POST.get('api_key')
+
+        return username, api_key
+
+    def is_authenticated(self, request, **kwargs):
+        """
+        Finds the user and checks their API key.
+
+        Should return either ``True`` if allowed, ``False`` if not or an
+        ``HttpResponse`` if you need something custom.
+        """
+
+        try:
+            username, api_key = self.extract_credentials(request)
+        except ValueError:
+            return self._unauthorized()
+
+        if not username or not api_key:
+            return self._unauthorized()
+
+        try:
+            user = User.objects.get(username=username)
+        except (User.DoesNotExist, User.MultipleObjectsReturned):
+            return self._unauthorized()
+
+        if not self.check_active(user):
+            return False
+        user.backend = "django.contrib.auth.backends.ModelBackend"
+        request.user = user
+        login(request,user)
+        set_current_user(user)
+        return self.get_key(user, api_key)
+
+    def check_active(self, user):
+        """
+        Ensures the user has an active account.
+
+        Optimized for the ``django.contrib.auth.models.User`` case.
+        """
+        if not self.require_active:
+            # Ignore & move on.
+            return True
+
+        return user.is_active
+
+
+    def get_key(self, user, api_key):
+        """
+        Attempts to find the API key for the user. Uses ``ApiKey`` by default
+        but can be overridden.
+        """
+        from tastypie.models import ApiKey
+
+        try:
+            ApiKey.objects.get(user=user, key=api_key)
+        except ApiKey.DoesNotExist:
+            return self._unauthorized()
+
+        return True
+
+    def get_identifier(self, request):
+        """
+        Provides a unique string identifier for the requestor.
+
+        This implementation returns the user's username.
+        """
+        username, api_key = self.extract_credentials(request)
+        return username or 'nouser'        
\ No newline at end of file
--- a/src/ldt/ldt/api/ldt/resources/annotation.py	Tue Feb 12 17:29:41 2013 +0100
+++ b/src/ldt/ldt/api/ldt/resources/annotation.py	Tue Feb 12 17:30:41 2013 +0100
@@ -7,14 +7,16 @@
 from tastypie.exceptions import NotFound, BadRequest
 from tastypie.resources import Resource
 import logging #@UnresolvedImport
+from ldt.ldt_utils.contentindexer import add_segment
 
 
 class AnnotationObject(object):
-    def __init__(self, id="", project = "", type = "", type_title = "", media = "", begin = 0, end = 0, content = {"title":"", "description":""}, tags = [], meta = {"creator":"","created":""}):
+    def __init__(self, id="", project = "", type = "", type_title = "", ensemble="", media = "", begin = 0, end = 0, content = {"title":"", "description":""}, tags = [], meta = {"creator":"","created":""}):
         self.id = id
         self.project = project
         self.type = type
         self.type_title = type_title
+        self.ensemble = ensemble
         self.media = media
         self.begin = begin
         self.end = end
@@ -86,25 +88,44 @@
         author = meta['creator']
         date = meta['created']
         #                       add(media,      cutting_id, cutting_title,  title,               text,                         tags_list,  begin, dur, author, date
-        type_id, new_id = adder.add(a['media'], a['type'], a['type_title'], a['content']['title'], a['content']['description'], a['tags'], begin, dur, author, date, None, "2194379", audio_src, audio_href)
+        type_id, new_id, ensemble_id = adder.add(a['media'], a['type'], a['type_title'], a['content']['title'], a['content']['description'], a['tags'], begin, dur, author, date, None, "2194379", audio_src, audio_href)
         if not new_id:
             protect_models()
             raise BadRequest
                         
         content = project.contents.get(iri_id=a['media'])
-        add_annotation_to_stat(content, a['begin'], a['end'])
         
         # We update the ids
         a['type'] = type_id
+        a['ensemble'] = ensemble_id
         a['id'] = new_id
         if not a['content'].has_key('audio') :
             a['content']['audio'] = {'src':audio_src, 'href':audio_href}
+        
+        #add segment
+        add_segment({
+            "project" : project,
+            "content" : content,
+            "ensemble_id" : ensemble_id,
+            "cutting_id" :  a['type'],            
+            "element_id" : new_id,
+            "title" : a['content']['title'],
+            "abstract" : a['content']['description'],
+            "tags" : ",".join(a['tags']),
+            "start_ts" : begin,
+            "duration" :  dur,
+            "author" : author,
+            "date" : date, 
+            "audio_src" : audio_src,            
+            "audio_href" : audio_href,
+            "polemics": adder.get_polemic_syntax(a['content']['title'])
+        })
             
         # We save the added annotation and reprotect the contents and projects
-        adder.save()
+        adder.save(must_reindex=False)
         protect_models()
         # We update the AnnotationObject for the returned datas to be correct.
-        bundle.obj = AnnotationObject(id = a["id"], project = a["project"], type = a["type"], type_title = a["type_title"], media = a["media"], begin = a["begin"], end = a["end"], content = a['content'], tags = a['tags'], meta = a['meta'])
+        bundle.obj = AnnotationObject(id = a["id"], project = a["project"], type = a["type"], type_title = a["type_title"], ensemble=a['ensemble'], media = a["media"], begin = a["begin"], end = a["end"], content = a['content'], tags = a['tags'], meta = a['meta'])
         return bundle
     
     def get_resource_uri(self, bundle_or_obj):
--- a/src/ldt/ldt/api/ldt/resources/content.py	Tue Feb 12 17:29:41 2013 +0100
+++ b/src/ldt/ldt/api/ldt/resources/content.py	Tue Feb 12 17:30:41 2013 +0100
@@ -26,7 +26,7 @@
     class Meta:
         allowed_methods = ['get']
         resource_name = 'contents'
-        queryset = Content.objects.select_related('front_project').all()
+        queryset = Content.objects.select_related('front_project','media_obj').all()
         filtering = {
             'tags' : ALL_WITH_RELATIONS,
             'title' : ALL,
@@ -34,7 +34,7 @@
         ordering = ['title', 'creation_date', 'content_creation_date']
     
     def get_object_list(self, request):
-        return Content.safe_objects.all()
+        return Content.safe_objects.select_related('front_project', 'media_obj').all()
 
     def override_urls(self):
         # WARNING : in tastypie <= 1.0, override_urls is used instead of prepend_urls. From 1.0.0, prepend_urls will be prefered and override_urls deprecated 
--- a/src/ldt/ldt/api/ldt/resources/project.py	Tue Feb 12 17:29:41 2013 +0100
+++ b/src/ldt/ldt/api/ldt/resources/project.py	Tue Feb 12 17:30:41 2013 +0100
@@ -3,7 +3,7 @@
 from django.contrib.auth.models import Group
 from guardian.shortcuts import assign
 from ldt.ldt_utils.models import Project
-from ldt.api.ldt.authentication import SessionAuthentication
+from ldt.api.ldt.authentication import SessionAuthentication, MultiAuthentication, ApiKeyAuthentication
 from ldt.api.ldt.serializers.cinelabserializer import CinelabSerializer
 from ldt.api.ldt.resources import ContentResource
 from ldt.api.ldt.resources.user import UserResource
@@ -11,21 +11,23 @@
 from tastypie.authorization import Authorization
 from tastypie.resources import Bundle, ModelResource, ALL
 from tastypie import fields
+from tastypie.exceptions import BadRequest
 
 
 class ProjectResource(ModelResource):
     contents = fields.ManyToManyField(ContentResource, 'contents')
     owner = fields.ForeignKey(UserResource, 'owner')
     class Meta:
-        allowed_methods = ['get', 'post']
+        allowed_methods = ['get', 'post', 'put']
         authorization = Authorization() # BE CAREFUL WITH THAT, it's unsecure
-        authentication = SessionAuthentication()
+        authentication = MultiAuthentication(ApiKeyAuthentication(), SessionAuthentication())
         resource_name = 'projects'
         queryset = Project.objects.all()
         serializer = CinelabSerializer()
         filtering = {
             'state' : ALL,
-            'ldt_id' : ALL
+            'ldt_id' : ALL,
+            'title' : ALL
         }
         # In the future version :
         # detail_uri_name = 'ldt_id'
@@ -62,4 +64,7 @@
         assign('ldt_utils.view_project', everyone, bundle.obj)
         protect_models()
         return bundle
+    
+    def obj_delete_list(self, request=None, **kwargs):
+        raise BadRequest("PUT with a list of projects is forbidden.")
     
\ No newline at end of file
--- a/src/ldt/ldt/api/ldt/resources/segment.py	Tue Feb 12 17:29:41 2013 +0100
+++ b/src/ldt/ldt/api/ldt/resources/segment.py	Tue Feb 12 17:30:41 2013 +0100
@@ -9,7 +9,9 @@
 from tastypie.http import HttpNotFound
 from tastypie.resources import ModelResource
 from tastypie.utils import trailing_slash
+import logging
 
+logger = logging.getLogger(__name__)
 
 class SegmentResource(ModelResource):
     class Meta:
@@ -84,7 +86,7 @@
         begin = int(begin)
         end = int(end)
         
-        content = Content.objects.filter(iri_id=iri_id)
+        content = Content.objects.filter(iri_id=iri_id).select_related('media_obj', 'stat_annotation')
         if not content:
             return HttpNotFound("Content does not exist or id is not correct.")
         content = content[0]
@@ -93,7 +95,7 @@
                     Q(start_ts__gte=begin, start_ts__lte=end) |                            # segment starts between begin and end
                     Q(start_ts__gte=begin-F('duration'), start_ts__lte=end-F('duration')) |# segment ends between begin and end
                     Q(start_ts__lte=begin, start_ts__gte=end-F('duration'))                # period [begin:end] is included in the segment
-                    )
+                    ).select_related("project_obj")
         
         a = SegmentSerializer(content, segments)
         return self.create_response(request, a.serialize_to_cinelab())
--- a/src/ldt/ldt/forms/fields.py	Tue Feb 12 17:29:41 2013 +0100
+++ b/src/ldt/ldt/forms/fields.py	Tue Feb 12 17:30:41 2013 +0100
@@ -4,6 +4,7 @@
 
 from django import forms
 from django.utils.translation import ugettext_lazy as _
+from django.core.exceptions import ValidationError
 import logging
 import time
 import math
@@ -13,16 +14,21 @@
 )
 
 class LdtDurationField (forms.TimeField):
+    """
+    A field allowing to enter the duration format (eg: XhMM, XXhMM, HH:MM:SS)
+    """
+    
     default_error_messages = {
-        'invalid': _(u'Enter a valid duration format'),
+        'required': _(u'The duration field can not be empty.'),
+        'invalid': _(u'Enter a valid duration format;'),
     }
     
     def __init__(self, formats, *args, **kwargs):
         self.formats = formats
         super(LdtDurationField, self).__init__(*args, **kwargs)
     
-    def clean(self, data):
-        dur = data
+    def to_python(self, value):
+        dur = value
         for format in self.formats:
             try:
                 dur = time.strptime(dur, format)
@@ -30,5 +36,15 @@
                 dur = dur*1000
                 break
             except:
-                logging.debug("trying next format")
-        return dur
\ No newline at end of file
+                pass
+        return dur
+    
+    def validate(self, value):
+        if value==None or value=="":
+            raise ValidationError(self.default_error_messages['required'])
+        else:
+            try:
+                int(value)
+            except (ValueError, TypeError):
+                raise ValidationError(self.default_error_messages['invalid'])
+            
\ No newline at end of file
--- a/src/ldt/ldt/forms/widgets.py	Tue Feb 12 17:29:41 2013 +0100
+++ b/src/ldt/ldt/forms/widgets.py	Tue Feb 12 17:30:41 2013 +0100
@@ -18,22 +18,4 @@
     
     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]))
-
-
-class LdtParseVideoDuration(TimeInput):
-    """
-    A widget allowing to enter the duration format (eg: XhMM, XXhMM, HH:MM:SS)
-    """
-
-    def value_from_datadict(self, data, files, name):
-        dur = data['content-duration']
-        for format in self.format:
-            try:
-                dur = time.strptime(dur, format)
-                dur = dur.tm_hour*3600 + dur.tm_min*60 + dur.tm_sec
-                dur = dur*1000
-                break
-            except:
-                logging.debug("trying next format")
-        return dur
\ No newline at end of file
+            (_('Date'), rendered_widgets[0], _('Time'), rendered_widgets[1]))
\ No newline at end of file
--- a/src/ldt/ldt/ldt_utils/contentindexer.py	Tue Feb 12 17:29:41 2013 +0100
+++ b/src/ldt/ldt/ldt_utils/contentindexer.py	Tue Feb 12 17:30:41 2013 +0100
@@ -1,8 +1,8 @@
-from django.db.models.signals import post_save
 from django.dispatch import receiver
 from ldt import settings
 from ldt.ldt_utils.models import Segment, Content, Project
-from ldt.ldt_utils.stat import update_stat_project
+from ldt.ldt_utils.events import post_project_save
+from ldt.ldt_utils.stat import update_stat_project, add_annotation_to_stat
 from ldt.ldt_utils.utils import reduce_text_node
 from tagging import settings as tagging_settings
 import logging
@@ -71,9 +71,11 @@
                 
                 if tags is None:
                     tags = u""
-                    
+                
                 tags_list = [tag[:tagging_settings.MAX_TAG_LENGTH] for tag in tagging.utils.parse_tag_input(tags)]
                 tags = u",".join(tags_list)
+                if u"," not in tags:
+                    tags = u"," + tags
                 
 
                 title = reduce_text_node(elementNode, "title/text()")                
@@ -175,14 +177,66 @@
             for ensemble in content.getchildren():
                 self.index_ensemble(ensemble, content_obj, project)
 
-@receiver(post_save, sender=Project)
-def index_project(sender, **kwargs):
-    if settings.AUTO_INDEX_AFTER_SAVE:
+@receiver(post_project_save)
+def index_project(**kwargs):
+    must_reindex = kwargs.get("must_reindex", True)
+    if must_reindex and settings.AUTO_INDEX_AFTER_SAVE:
         instance = kwargs['instance']
-        if instance.state != 2:
+        if instance.state != Project.PUBLISHED:
             Segment.objects.filter(project_obj__ldt_id=instance.ldt_id).delete() #@UndefinedVariable
             update_stat_project(instance)
         else:
             projectIndexer = ProjectIndexer([instance])
             projectIndexer.index_all()
             update_stat_project(instance)
+
+
+
+def add_segment(params):
+                                
+    project = params.get("project",None)
+    content = params.get("content",None)
+    ensemble_id = params.get("ensemble_id", "")
+    cutting_id = params.get("cutting_id", "")
+    element_id = params.get("element_id", "")
+    title = params.get("title", "")
+    abstract = params.get("abstract", "")
+    tags_str = params.get("tags", "")
+    start_ts = params.get("start_ts", 0)
+    duration = params.get("duration", 0)
+    author = params.get("author", "")
+    date_str = params.get("date", "")
+    audio_src = params.get("audio_src", "")
+    audio_href = params.get("audio_href", "")
+    polemics = params.get("polemics", "")
+    
+    seg = Segment(content=content,
+              iri_id=content.iri_id if content is not None else "",
+              ensemble_id=ensemble_id,
+              cutting_id=cutting_id,
+              element_id=element_id,
+              tags=tags_str,
+              title=title,
+              abstract=abstract,
+              duration=duration,
+              author=author,
+              start_ts=start_ts,
+              date=date_str,
+              project_obj=project,
+              project_id=project.ldt_id if project is not None else "",
+              audio_src=audio_src,
+              audio_href=audio_href)
+    seg.polemics = seg.get_polemic(polemics)
+    seg.save()
+    add_annotation_to_stat(seg.content, seg.start_ts, seg.start_ts+seg.duration)
+
+
+def delete_segment(project, project_id, iri_id, ensemble_id, cutting_id, element_id):
+
+    # delete Segment
+    for seg in Segment.objects.filter(project_id=project_id, iri_id=iri_id, ensemble_id=ensemble_id, cutting_id=cutting_id, element_id=element_id):        
+        seg.delete()
+        add_annotation_to_stat(seg.content, seg.start_ts, seg.start_ts+seg.duration)
+    
+    
+    
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/ldt/ldt/ldt_utils/events.py	Tue Feb 12 17:30:41 2013 +0100
@@ -0,0 +1,9 @@
+# -*- coding: utf-8 -*-
+'''
+Created on Jan 22, 2013
+
+@author: ymh
+'''
+import django.dispatch
+
+post_project_save = django.dispatch.Signal(["instance","must_reindex"])
\ No newline at end of file
--- a/src/ldt/ldt/ldt_utils/forms.py	Tue Feb 12 17:29:41 2013 +0100
+++ b/src/ldt/ldt/ldt_utils/forms.py	Tue Feb 12 17:30:41 2013 +0100
@@ -84,7 +84,7 @@
         
     class Media:
         css = {
-            'all' : ('admin/css/forms.css', 'admin/css/base.css', 'admin/css/widgets.css')
+            'all' : ('admin/css/forms.css', 'admin/css/widgets.css')
                }
         
 class MediaForm(forms.ModelForm):
@@ -100,7 +100,7 @@
     
     class Media:
         css = {
-            'all' : ('admin/css/forms.css', 'admin/css/base.css', 'admin/css/widgets.css')
+            'all' : ('admin/css/forms.css', 'admin/css/widgets.css')
                }
         
 class GroupAddForm(ShareForm):
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/ldt/ldt/ldt_utils/migrations/0026_set_relative_ldtproject.py	Tue Feb 12 17:30:41 2013 +0100
@@ -0,0 +1,146 @@
+# -*- coding: utf-8 -*-
+from django.core.management import call_command
+from south.v2 import DataMigration
+
+
+class Migration(DataMigration):
+
+    def forwards(self, orm):
+        call_command('setprojectldtiri')
+
+    def backwards(self, orm):
+        #do nothing
+        pass
+
+    models = {
+        'auth.group': {
+            'Meta': {'object_name': 'Group'},
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
+            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
+        },
+        'auth.permission': {
+            'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
+            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+        },
+        'auth.user': {
+            'Meta': {'object_name': 'User'},
+            'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
+            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+            'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+            'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
+            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
+        },
+        'contenttypes.contenttype': {
+            'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
+            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
+        },
+        'ldt_utils.author': {
+            'Meta': {'object_name': 'Author'},
+            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'null': 'True', 'blank': 'True'}),
+            'firstname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
+            'handle': ('django.db.models.fields.CharField', [], {'max_length': '255', 'unique': 'True', 'null': 'True', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'lastname': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'})
+        },
+        'ldt_utils.content': {
+            'Meta': {'ordering': "['title']", 'object_name': 'Content'},
+            'authors': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['ldt_utils.Author']", 'symmetrical': 'False', 'blank': 'True'}),
+            'content_creation_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+            'creation_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+            'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'duration': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+            'front_project': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ldt_utils.Project']", 'null': 'True', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'image': ('sorl.thumbnail.fields.ImageField', [], {'default': "'thumbnails/contents/content_default_icon.png'", 'max_length': '200'}),
+            'iri_id': ('django.db.models.fields.CharField', [], {'default': "u'75d885e1-4446-11e2-a1e1-00161798aedb'", 'unique': 'True', 'max_length': '255'}),
+            'iriurl': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
+            'media_obj': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ldt_utils.Media']", 'null': 'True', 'blank': 'True'}),
+            'tags': ('tagging.fields.TagField', [], {'max_length': '2048', 'null': 'True'}),
+            'title': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+            'update_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'})
+        },
+        'ldt_utils.contentstat': {
+            'Meta': {'object_name': 'ContentStat'},
+            'annotation_volume_str': ('django.db.models.fields.CommaSeparatedIntegerField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+            'content': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'stat_annotation'", 'unique': 'True', 'to': "orm['ldt_utils.Content']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'last_annotated': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now', 'null': 'True', 'blank': 'True'}),
+            'nb_annotations': ('django.db.models.fields.IntegerField', [], {'default': '0', 'db_index': 'True'}),
+            'polemics_volume_str': ('django.db.models.fields.CommaSeparatedIntegerField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'})
+        },
+        'ldt_utils.media': {
+            'Meta': {'object_name': 'Media'},
+            'creation_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+            'creator': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}),
+            'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'duration': ('django.db.models.fields.IntegerField', [], {'null': 'True', 'blank': 'True'}),
+            'external_id': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+            'external_permalink': ('django.db.models.fields.URLField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+            'external_publication_url': ('django.db.models.fields.URLField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+            'external_src_url': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'media_creation_date': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+            'mimetype_field': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
+            'src': ('django.db.models.fields.CharField', [], {'max_length': '1024'}),
+            'src_hash': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128', 'blank': 'True'}),
+            'title': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+            'update_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
+            'videopath': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'})
+        },
+        'ldt_utils.project': {
+            'Meta': {'ordering': "['title']", 'object_name': 'Project'},
+            'changed_by': ('django.db.models.fields.CharField', [], {'max_length': '70'}),
+            'contents': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['ldt_utils.Content']", 'symmetrical': 'False'}),
+            'created_by': ('django.db.models.fields.CharField', [], {'max_length': '70'}),
+            'creation_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+            'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'image': ('sorl.thumbnail.fields.ImageField', [], {'default': "'thumbnails/projects/project_default_icon.png'", 'max_length': '200'}),
+            'ldt': ('django.db.models.fields.TextField', [], {'null': 'True'}),
+            'ldt_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),
+            'modification_date': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'blank': 'True'}),
+            'owner': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}),
+            'state': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+            'title': ('django.db.models.fields.CharField', [], {'max_length': '1024'})
+        },
+        'ldt_utils.segment': {
+            'Meta': {'object_name': 'Segment'},
+            'abstract': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
+            'audio_href': ('django.db.models.fields.CharField', [], {'max_length': '512', 'null': 'True', 'blank': 'True'}),
+            'audio_src': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True', 'blank': 'True'}),
+            'author': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}),
+            'content': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ldt_utils.Content']"}),
+            'cutting_id': ('django.db.models.fields.CharField', [], {'max_length': '512', 'db_index': 'True'}),
+            'date': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'}),
+            'duration': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
+            'element_id': ('django.db.models.fields.CharField', [], {'max_length': '512', 'db_index': 'True'}),
+            'ensemble_id': ('django.db.models.fields.CharField', [], {'max_length': '512', 'db_index': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'id_hash': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128', 'blank': 'True'}),
+            'iri_id': ('django.db.models.fields.CharField', [], {'max_length': '255', 'db_index': 'True'}),
+            'polemics': ('django.db.models.fields.IntegerField', [], {'default': '0', 'null': 'True', 'blank': 'True'}),
+            'project_id': ('django.db.models.fields.CharField', [], {'db_index': 'True', 'max_length': '255', 'null': 'True', 'blank': 'True'}),
+            'project_obj': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['ldt_utils.Project']", 'null': 'True'}),
+            'start_ts': ('django.db.models.fields.IntegerField', [], {'null': 'True'}),
+            'tags': ('tagging.fields.TagField', [], {'max_length': '2048', 'null': 'True'}),
+            'title': ('django.db.models.fields.CharField', [], {'max_length': '2048', 'null': 'True', 'blank': 'True'})
+        }
+    }
+
+    complete_apps = ['ldt_utils']
+    symmetrical = True
--- a/src/ldt/ldt/ldt_utils/models.py	Tue Feb 12 17:29:41 2013 +0100
+++ b/src/ldt/ldt/ldt_utils/models.py	Tue Feb 12 17:30:41 2013 +0100
@@ -24,7 +24,7 @@
 import uuid
 from shutil import move
 from django.core.files.storage import default_storage
-#from ldt.core.models import Document, Owner
+from .events import post_project_save
 
 
 class Author(SafeModel):
@@ -311,6 +311,10 @@
             if not url_utils.is_absolute(res_url):
                 res_url = unicode(web_url) + res_url
             return res_url 
+        
+    def relative_iri_url(self): #this function is called when we create a project 
+        res_url =  u"ldt/" + unicode(self.iriurl)
+        return res_url 
     
     def iri_file_path(self):
         return os.path.join(os.path.join(os.path.join(settings.MEDIA_ROOT, "ldt"), self.iri_id), os.path.basename(self.iriurl))
@@ -567,17 +571,22 @@
         return locals()
     
     polemics_volume = property(**polemics_volume())
-
-
     
     
-class Project(Document, SafeModel):  
+class Project(Document, SafeModel):
+    
+    EDITION = 1
+    PUBLISHED = 2
+    MODERATED = 3
+    REJECTED = 4
+    DELETED = 5
+      
     STATE_CHOICES = (
-    (1, 'edition'),
-    (2, 'published'),
-    (3, 'moderated'),
-    (4, 'rejected'),
-    (5, 'deleted')
+    (EDITION, 'edition'),
+    (PUBLISHED, 'published'),
+    (MODERATED, 'moderated'),
+    (REJECTED, 'rejected'),
+    (DELETED, 'deleted')
     )
     ldt_id = models.CharField(max_length=255, unique=True)
     ldt = models.TextField(null=True)
@@ -641,7 +650,15 @@
         return locals()
     
     stream_mode = property(**stream_mode())
-
+    
+    def save(self, *args, **kwargs):
+        
+        must_reindex = kwargs.pop("must_reindex", True)
+        super(Project, self).save(*args, **kwargs)
+        
+        post_project_save.send(self, instance=self, must_reindex = must_reindex)
+            
+            
     @staticmethod
     def create_project(user, title, contents, description='', groups=[], set_icon=True, cuttings=[]):
 #        owner = Owner.objects.get(user=user) #@UndefinedVariable
--- a/src/ldt/ldt/ldt_utils/projectserializer.py	Tue Feb 12 17:29:41 2013 +0100
+++ b/src/ldt/ldt/ldt_utils/projectserializer.py	Tue Feb 12 17:30:41 2013 +0100
@@ -1,17 +1,17 @@
+from datetime import datetime
 from django.conf import settings
-from datetime import datetime
+from django.contrib.contenttypes.models import ContentType
 from django.utils.datastructures import SortedDict
-from ldt.ldt_utils.models import Content
+from ldt.ldt_utils.models import Content, User, Project
+from ldt.ldt_utils.stat import get_string_from_buckets
 from ldt.ldt_utils.utils import reduce_text_node
-from ldt.ldt_utils.models import User, Project
-from ldt.ldt_utils.stat import get_string_from_buckets
-from ldt.security.utils import use_forbidden_url
 import logging
 import lxml.etree
 import uuid
 
 DATE_FORMATS = ["%d/%m/%Y", "%Y-%m-%d"]
 
+logger = logging.getLogger(__name__)
 
 """
 Serialize a project object to a cinelab compatible array
@@ -40,6 +40,7 @@
         
         
     def __parse_views(self, display_node_list):
+        logger.debug("__parse_views start")
         for display_node in display_node_list:
             display_id = display_node.get(u"id", None)
             if not display_id:
@@ -90,11 +91,13 @@
                 new_display['annotation_types'] = [new_display['annotation_types'][0]] 
             
             self.views_dict[display_id] = new_display
-            
+        logger.debug("__parse_views done")        
     
     def __parse_ensemble(self, ensemble_node, content, cutting_only=None):
+                
+        ensemble_id = ensemble_node.attrib[u"id"]
+        logger.debug("__parse_ensemble %s start" % ensemble_id)
         
-        ensemble_id = ensemble_node.attrib[u"id"]
         ensemble_author = ensemble_node.attrib[u"author"]
         ensemble_title = ensemble_node.attrib[u"title"]
         ensemble_description = ensemble_node.attrib[u"abstract"]
@@ -280,10 +283,13 @@
         if not list_items:
             new_list["items"] = None
         self.lists_dict[ensemble_id] = new_list
+        
+        logger.debug("__parse_ensemble %s done" % ensemble_id)
 
 
     def __parse_ldt(self):
         
+        logger.debug("__parse_ldt start")
         self.ldt_doc = lxml.etree.fromstring(self.project.ldt_encoded)
         
         if self.from_display:
@@ -293,20 +299,35 @@
             
             self.__parse_views(self.ldt_doc.xpath(xpath_str))
         
+        #getting all contents at once
+        contents_iri_id = list(
+            set(self.ldt_doc.xpath("/iri/medias/media/@id")) |
+            set(self.ldt_doc.xpath("/iri/annotations/content/@id")) |
+            (set(self.ldt_doc.xpath('/iri/annotations/content[ensemble/decoupage/@id=\'%s\']/@id' % self.first_cutting)) if self.first_cutting and self.first_cutting not in self.display_cuttings_list else set())
+        )
+        
+        logger.debug(contents_iri_id)
+        
+        contents =  dict([ (c.iri_id, c) for c in Content.objects.filter(iri_id__in=contents_iri_id).select_related('media_obj', 'stat_annotation').prefetch_related("authors")])
+        m_cls = ContentType.objects.get(model='media')
+        m_cls = m_cls.model_class()
+        medias = dict([ (m.id, m) for m in m_cls.safe_objects.filter(id__in = [c.media_obj.id for c in contents.values() if c.media_obj])])
+          
+        
         res = self.ldt_doc.xpath("/iri/medias/media")
         for mediaNode in res:
             iri_id = mediaNode.attrib[u"id"]
             if self.from_display and iri_id not in self.display_contents_list:
                 continue
-            content = Content.objects.get(iri_id=iri_id) #@UndefinedVariable
-            self.__parse_content(content)
+            content = contents[iri_id]#Content.objects.get(iri_id=iri_id) #@UndefinedVariable
+            self.__parse_content(content, medias)
             
         res = self.ldt_doc.xpath("/iri/annotations/content")
         for content_node in res:
             content_id = content_node.attrib[u"id"]
             if self.from_display and content_id not in self.display_contents_list:
                 continue
-            content = Content.objects.get(iri_id=content_id) #@UndefinedVariable
+            content = contents[content_id]#Content.objects.get(iri_id=content_id) #@UndefinedVariable
             for ensemble_node in content_node:
                 if ensemble_node.tag != "ensemble" :
                     continue
@@ -320,7 +341,7 @@
             ensemble_node = cutting_node.xpath('..')[0]
             content_node = ensemble_node.xpath('..')[0]
             iri_id = content_node.get("id")
-            content = Content.objects.get(iri_id=iri_id)
+            content = contents[iri_id]#Content.objects.get(iri_id=iri_id)
             self.__parse_ensemble(ensemble_node, content, cutting_only=[cutting_node])
             
         
@@ -341,9 +362,11 @@
         self.__parse_edits()
                                
         self.parsed = True
+        logger.debug("__parse_ldt done")
         
     
     def __parse_edits(self):
+        logger.debug("__parse_edits start")
         editings = self.ldt_doc.xpath("/iri/edits/editing")
         if not editings:
             return False
@@ -378,10 +401,11 @@
                 }
             }
             self.lists_dict[e_id] = new_list
-        
+        logger.debug("__parse_edits done")    
     
-    def __parse_content(self, content):
+    def __parse_content(self, content, medias):
         
+        logger.debug("__parse_content %s start" % content.iri_id)
         doc = lxml.etree.parse(content.iri_file_path())
         
         authors = content.authors.all()
@@ -412,7 +436,7 @@
         url = ""
         meta_item_value = ""
         
-        if use_forbidden_url(content):   
+        if content.media_obj and content.media_obj.id not in medias:   
             url = settings.FORBIDDEN_STREAM_URL
         elif content.videopath:
             url = content.videopath.rstrip('/') + "/" + content.src
@@ -459,15 +483,20 @@
             res = doc.xpath("/iri/body/ensembles/ensemble")
             for ensemble_node in res:
                 self.__parse_ensemble(ensemble_node, content)
+                
+        logger.debug("__parse_content %s done" % content.iri_id)
 
     
     def serialize_to_cinelab(self):
     
         res = {}
-        
+
+        logger.debug("serialize_to_cinelab before parse ldt")
+                
         if not self.parsed:
             self.__parse_ldt()    
 
+            logger.debug("serialize_to_cinelab parse ldt done")
         
         project_main_media = ""
         if len(self.medias_dict) > 0:
--- a/src/ldt/ldt/ldt_utils/searchutils.py	Tue Feb 12 17:29:41 2013 +0100
+++ b/src/ldt/ldt/ldt_utils/searchutils.py	Tue Feb 12 17:30:41 2013 +0100
@@ -3,7 +3,9 @@
 from ldt.ldt_utils.utils import LdtUtils
 from ldt.security.utils import set_forbidden_stream
 import base64
+import logging
 
+logger = logging.getLogger(__name__)
 
 def search_generate_ldt(request, field, query, query_encoded=True): 
     
@@ -28,13 +30,21 @@
         id_list = ids.keys()
         projId_list = projIds.keys()
         typesId_list = typesIds.keys()
-            
-        contentList = Content.objects.filter(iri_id__in=id_list)        #@UndefinedVariable
-        projectList = Project.safe_objects.filter(ldt_id__in=projId_list)    
+        
+        logger.debug("search_generate_ldt : getting content list")    
+        contentList = Content.objects.filter(iri_id__in=id_list).select_related("front_project", "media_obj")        #@UndefinedVariable
+        logger.debug("search_generate_ldt : getting project list")
+        projectList = Project.safe_objects.filter(ldt_id__in=projId_list)
+        
+        
           
     ldtgen = LdtUtils()
     #            generate_ldt(contentList, title=u"", author=u"IRI Web", web_url=u"", startSegment=None, projects=None):
+    logger.debug("search_generate_ldt : generate ldt")
     doc = ldtgen.generate_ldt(contentList, title=u"Recherche : " + queryStr, projects=projectList, types_id_list=typesId_list)
+    
+    logger.debug("search_generate_ldt : set forbidden streams")
     doc = set_forbidden_stream(doc, request.user)
     
+    logger.debug("search_generate_ldt : done")
     return doc, results
\ No newline at end of file
--- a/src/ldt/ldt/ldt_utils/segmentserializer.py	Tue Feb 12 17:29:41 2013 +0100
+++ b/src/ldt/ldt/ldt_utils/segmentserializer.py	Tue Feb 12 17:30:41 2013 +0100
@@ -3,9 +3,12 @@
 from ldt.ldt_utils.stat import get_string_from_buckets
 from ldt.security.utils import use_forbidden_url
 from tagging.utils import parse_tag_input
+import logging
 import lxml.etree
 import uuid
 
+logger = logging.getLogger(__name__)
+
 DATE_FORMATS = ["%d/%m/%Y", "%Y-%m-%d"]
 
 class SegmentSerializer(object):
@@ -30,13 +33,11 @@
                
         self.xml_docs = {}
         
-    def __get_cutting_title(self, project_id, content_id, ensemble_id, cutting_id):
+    def __get_cutting_title(self, project_id, content_id, ensemble_id, cutting_id, project):
         
         if not self.xml_docs.has_key(project_id):
-            project = Project.objects.filter(ldt_id=project_id)
             if not project:
                 return None
-            project = project[0]
             doc = lxml.etree.fromstring(project.ldt_encoded)
             self.xml_docs[project_id] = doc
         else:
@@ -74,7 +75,7 @@
 
         annotation_types = []        
         for seg in self.segments:
-            title = self.__get_cutting_title(seg.project_id, seg.iri_id, seg.ensemble_id, seg.cutting_id)
+            title = self.__get_cutting_title(seg.project_id, seg.iri_id, seg.ensemble_id, seg.cutting_id, seg.project_obj)
             annotation_types.append({'id': seg.cutting_id, 'title': title})
         
         for a in annotation_types:
@@ -98,7 +99,8 @@
         
         url = ""
         meta_item_value = ""
-            
+         
+        logger.debug("__parse_content start")   
         if use_forbidden_url(self.content):
             url = settings.FORBIDDEN_STREAM_URL
         elif self.content.videopath:
@@ -107,6 +109,8 @@
         else:
             url = self.content.src
         
+        logger.debug("__parse_content url %s " % url)
+        
         media = {
              "http://advene.liris.cnrs.fr/ns/frame_of_reference/ms" : "o=0",
              "id" : self.content.iri_id,
@@ -192,12 +196,16 @@
     
     def serialize_to_cinelab(self):
         
+        logger.debug("serialize_to_cinelab start")
         if not self.segments:
             return None
         
         self.__parse_content()
+        logger.debug("serialize_to_cinelab parse content done")
         self.__parse_segments()
+        logger.debug("serialize_to_cinelab parse segments done")
         self.__parse_views()
+        logger.debug("serialize_to_cinelab parse views done")
         
         res = {}
         res['views'] = self.views 
@@ -207,5 +215,7 @@
         res['annotations'] = self.annotations
         res['annotation-types'] = self.annotation_types
         
+        logger.debug("serialize_to_cinelab done")
+        
         return res
     
\ No newline at end of file
--- a/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/embed_iframe.html	Tue Feb 12 17:29:41 2013 +0100
+++ b/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/embed_iframe.html	Tue Feb 12 17:30:41 2013 +0100
@@ -70,7 +70,7 @@
 			                    },
 			            {% endif %}
 			            height: '{{ player_height }}',
-			            autostart: true
+			            autostart: {% if autostart %} true {% else %} false {% endif %}
 			        }  {% if polemic == 'all' or polemic == 'tweet' %},
 			        {
 			            type: "Polemic",
--- a/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/embed_popup.html	Tue Feb 12 17:29:41 2013 +0100
+++ b/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/embed_popup.html	Tue Feb 12 17:30:41 2013 +0100
@@ -111,6 +111,9 @@
 							<span class="title">{% trans 'Create your own configuration' %}</span>
 						</a><br>
 							<div id="embed_personnalisation" class="embedPersonnalisation">
+								<input type="checkbox" id="autostart_checkbox" value="autostart" onClick="put_new_code()">
+									<span class="infostooltip title" data-title="AutoStart" data-desc="{% trans 'The video starts automatically' %}">Autostart</span>	
+								</input><br>
 								<div id="createannotation_block">
 									<input type="checkbox" id="createannotation_checkbox" value="createannotation" onClick="put_new_code(); display_createannotation();" > 
 										<span class="infostooltip title" data-title="createAnnotation" data-desc="{% trans 'Displays a form to create a new annotation' %}">CreateAnnotation</span>
--- a/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/partial/publishedprojectslist.html	Tue Feb 12 17:29:41 2013 +0100
+++ b/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/partial/publishedprojectslist.html	Tue Feb 12 17:30:41 2013 +0100
@@ -24,7 +24,11 @@
             <td class="cellimg"><div class="cellimgdiv"><a href="{% url index_project project.ldt_id %}" class="ldt_link_open_ldt"><img src='{% absstatic "ldt/img/page_eye.png" %}'  alt="{% trans 'open ldt' %}" title="{% trans 'open ldt' %}"/></a></div></td>
         {% endif %}
         <td class="cellimg"><div class="cellimgdiv"><img src='{% absstatic "ldt/img/page_copy.png" %}' href="{% url ldt.ldt_utils.views.project.copy_project project.ldt_id %}" class="ldt_link_copy_project" alt="{% trans 'copy the project' %}" title="{% trans 'copy the project' %}"/></div></td>
-        <td class="cellimg"><div class="cellimgdiv"><img src='{% absstatic "ldt/img/plugin.png" %}' href="{{WEB_URL}}{{json_url_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="cellimg"><div class="cellimgdiv">
+        	<a href='{% url ldt.ldt_utils.views.workspace.popup_embed %}?json_url={{WEB_URL}}{{json_url_id}}&player_id=player_project_{{project.ldt_id}}&ldt_id={{project.ldt_id}}'>
+        		<img src='{% absstatic "ldt/img/plugin.png" %}' id="player_project_{{project.ldt_id}}" class="ldt_link_embed" alt="{% trans 'link json by id' %}" title="{% trans 'link json by id' %}"/></div>
+       	 	</a>
+        </td>
         <td class="cellimg">
         <img src='{% absstatic "ldt/img/icon-yes.gif" %}' alt="{% trans 'Project published' %}" id="project_{{project.ldt_id}}" />
         </td>
--- a/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/search_results.html	Tue Feb 12 17:29:41 2013 +0100
+++ b/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/search_results.html	Tue Feb 12 17:30:41 2013 +0100
@@ -73,7 +73,11 @@
 			
 			<ul class="listsegments">
 			{% for segment in res.list %}
-				<li class="segmentinfos" ><span  class="" title="{% trans 'open ldt' %}"><a class="ldt_link_open_ldt" href="{% url ldt.ldt_utils.views.lignesdetemps.index_segment segment.project_id segment.iri_id segment.ensemble_id segment.cutting_id segment.element_id %}">
+				<li class="segmentinfos" >
+                {% if user.is_staff %}
+                <a style="float:right;" onclick="return confirm('{% trans "Are you sure you want to delete this annotation ? You cannot undo this action." %}');" href="{% url delete_segment segment.project_id segment.iri_id segment.ensemble_id segment.cutting_id segment.element_id %}" title='{% trans "Delete permantly the current annotation" %}'><img src='{% absstatic "ldt/img/close.png" %}'/></a>
+                {% endif %}
+				<span  class="" title="{% trans 'open ldt' %}"><a class="ldt_link_open_ldt" href="{% url ldt.ldt_utils.views.lignesdetemps.index_segment segment.project_id segment.iri_id segment.ensemble_id segment.cutting_id segment.element_id %}">
 				{% if segment.title %}
 					{{ segment.title }}
 				{% else %}
--- a/src/ldt/ldt/ldt_utils/tests/content_tests.py	Tue Feb 12 17:29:41 2013 +0100
+++ b/src/ldt/ldt/ldt_utils/tests/content_tests.py	Tue Feb 12 17:30:41 2013 +0100
@@ -5,19 +5,13 @@
 Replace these with more appropriate tests for your application.
 """
 
-from ldt.test.testcases import OAuthWebTestCase, TestCase
 from django.conf import settings
-from django.test import TestCase
-from ldt.ldt_utils.models import User, Project, Content, Media
-from ldt.ldt_utils.utils import LdtUtils, LdtAnnotation, create_ldt, create_empty_iri, copy_ldt
+from django.utils._os import WindowsError
+from ldt.ldt_utils.models import User, Content, Media
 from ldt.test.client import Client
-import lxml.etree
-import tempfile
-import unittest
-import uuid
+from ldt.test.testcases import TestCase
 import logging
 import os
-import exceptions
 
 class ContentTest(TestCase):
     
@@ -27,7 +21,7 @@
         self.client = Client()
         User.objects.create_superuser('blop', 'blop@blop.com', 'blop')
         
-        client = self.client.login(username='blop', password='blop')
+        _ = self.client.login(username='blop', password='blop')
         
         self.user = User()
         self.user.username = 'blop'
--- a/src/ldt/ldt/ldt_utils/tests/ldt_tests.py	Tue Feb 12 17:29:41 2013 +0100
+++ b/src/ldt/ldt/ldt_utils/tests/ldt_tests.py	Tue Feb 12 17:30:41 2013 +0100
@@ -5,17 +5,15 @@
 Replace these with more appropriate tests for your application.
 """
 
-from ldt.test.testcases import OAuthWebTestCase, TestCase
-from django.conf import settings
-from django.test import TestCase
-from ldt.ldt_utils.models import User, Project, Content, Media
-from ldt.ldt_utils.utils import LdtUtils, LdtAnnotation, create_ldt, create_empty_iri, copy_ldt
+from ldt.ldt_utils.models import User, Project, Content
+from ldt.ldt_utils.utils import (LdtUtils, LdtAnnotation, create_ldt, 
+    create_empty_iri, copy_ldt)
 from ldt.test.client import Client
+from ldt.test.testcases import TestCase
+import base64
 import lxml.etree
 import tempfile
-import unittest
 import uuid
-import logging
 
 class UtilsTest(TestCase):
     
@@ -25,7 +23,7 @@
         self.client = Client()
         User.objects.create_superuser('blop', 'blop@blop.com', 'blop')
         
-        client = self.client.login(username='blop', password='blop')
+        _ = self.client.login(username='blop', password='blop')
         
         self.user = User()
         self.user.username = 'blop'
@@ -77,11 +75,14 @@
         self.cont4.iri_id = "id4"
         self.cont4.save()
         
+        search=''
+        field='all'
+        query = base64.urlsafe_b64encode(search.encode('utf8'))
+
         self.project.contents.add(self.cont3, self.cont4)
-        ldoc = self.LU.generate_init([], 'ldt.ldt_utils.views.search_ldt')
+        ldoc = self.LU.generate_init([field, query], 'ldt.ldt_utils.views.lignesdetemps.search_ldt', 'ldt.ldt_utils.views.lignesdetemps.search_segments')
         self.assertEqual(ldoc.xpath("/iri/files/init")[0].tag, "init")
-        self.assertEqual(ldoc.xpath("/iri/files/library")[0].tag, "library")
-    
+        self.assertEqual(ldoc.xpath("/iri/files/library")[0].tag, "library")    
     def test_create_ldt(self):
         self.cont5 = Content(iriurl="id5/iriurl5", duration=111)
         self.cont5.iri_id = "id5"
@@ -97,7 +98,7 @@
         ldt = lxml.etree.fromstring(self.project.ldt_encoded)
         self.assertEqual(ldt.xpath("/iri")[0].tag, "iri")
         self.assertEqual(ldt.xpath("/iri/project")[0].get("title"), self.project.title)
-        self.assertEqual(ldt.xpath("/iri/medias/media")[0].get("src"), self.cont5.iri_url())
+        self.assertEqual(ldt.xpath("/iri/medias/media")[0].get("src"), self.cont5.relative_iri_url())
         self.assertEqual(ldt.xpath("/iri/medias/media")[1].get("id"), self.cont6.iri_id)
 
     def test_copy_ldt(self):
--- a/src/ldt/ldt/ldt_utils/tests/media_tests.py	Tue Feb 12 17:29:41 2013 +0100
+++ b/src/ldt/ldt/ldt_utils/tests/media_tests.py	Tue Feb 12 17:30:41 2013 +0100
@@ -5,18 +5,9 @@
 Replace these with more appropriate tests for your application.
 """
 
-from ldt.test.testcases import OAuthWebTestCase, TestCase
-from django.conf import settings
-from django.test import TestCase
-from ldt.ldt_utils.models import User, Project, Content, Media
-from ldt.ldt_utils.utils import LdtUtils, LdtAnnotation, create_ldt, create_empty_iri, copy_ldt
+from ldt.ldt_utils.models import User, Media
 from ldt.test.client import Client
-from django.core.exceptions import ObjectDoesNotExist
-import lxml.etree
-import tempfile
-import unittest
-import uuid
-import logging
+from ldt.test.testcases import TestCase
 
 class MediaTest(TestCase):
     
@@ -26,13 +17,13 @@
         self.client = Client()
         User.objects.create_superuser('blop', 'blop@blop.com', 'blop')
         
-        client = self.client.login(username='blop', password='blop')
+        _ = self.client.login(username='blop', password='blop')
         
         self.user = User()
         self.user.username = 'blop'
     
     def test_create_media(self):
-        self.media1, created = Media.objects.get_or_create(src = "http://www.youtube.com/watch?v=O2G-PEtyKSY")
+        self.media1, _ = Media.objects.get_or_create(src = "http://www.youtube.com/watch?v=O2G-PEtyKSY")
         self.media1.id = 1
         self.media1.save()        
         
--- a/src/ldt/ldt/ldt_utils/tests/project_tests.py	Tue Feb 12 17:29:41 2013 +0100
+++ b/src/ldt/ldt/ldt_utils/tests/project_tests.py	Tue Feb 12 17:30:41 2013 +0100
@@ -5,17 +5,14 @@
 Replace these with more appropriate tests for your application.
 """
 
-from ldt.test.testcases import OAuthWebTestCase, TestCase
-from django.conf import settings
-from django.test import TestCase
-from ldt.ldt_utils.models import User, Project, Content, Media
-from ldt.ldt_utils.utils import LdtUtils, LdtAnnotation, create_ldt, create_empty_iri, copy_ldt
+from django.core.management import call_command
+from ldt.ldt_utils.models import User, Project, Content
+from ldt.ldt_utils.utils import LdtUtils, LdtAnnotation, create_ldt
 from ldt.test.client import Client
+from ldt.test.testcases import TestCase
 import lxml.etree
-import tempfile
-import unittest
 import uuid
-import logging
+
 
 class ProjectTest(TestCase):
     
@@ -25,14 +22,29 @@
         self.client = Client()
         User.objects.create_superuser('blop', 'blop@blop.com', 'blop')
         
-        client = self.client.login(username='blop', password='blop')
-        
+        _ = self.client.login(username='blop', password='blop')
         self.user = User()
         self.user.username = 'blop'
+        self.LU = LdtUtils()
+        self.project = Project(title="titleproj1", owner=self.user)
+        self.project.ldt = '<iri ldtversion="1.0.3" xmlns:dc="http://dublincore.org/documents/dcmi-namespace/"><project id="af3b99e4-b695-11df-bfde-00145ea4a2be" user="admin" title="CA:reponse a TC" abstract=""/> <medias> <media extra="" id="laurentcantet_entrelesmurs" pict="" src="http://amateur.iri.centrepompidou.fr//atelier/static/media/ldt/laurentcantet_entrelesmurs/laurentcantet_entrelesmurs.iri" video="rtmp://media.iri.centrepompidou.fr/ddc_player/video/regardssignes/"/> </medias> <annotations> <content id="laurentcantet_entrelesmurs"> <ensemble id="ens_perso" idProject="fe0d5d4c-2201-11df-8a24-00145ea4a2be" title="Decoupages personnels" author="perso" abstract=""> <decoupage id="c_EFC3FFE7-0204-A086-EBEC-D2A03A0E56CB" author="perso"> <title>CA: prof et admin</title> <abstract/> <elements> <element id="s_442AAB3A-42DA-F9BF-75E7-D2A0663FD5FF" begin="985690" dur="373222" author="" date="2010/09/02" color="16711680" src=""> <title/> <abstract/> <audio source=""/> <tags/> </element> <element id="s_0050F043-3AD2-0A7C-6699-D2A03A1EBA02" begin="5052858" dur="124407" author="" date="2010/09/02" color="10053375" src=""> <title>conseil de classe</title> <abstract>Reprise de la figure precedente</abstract> <audio source="undefined"/> <tags/> </element> </elements> </decoupage> <decoupage id="c_EEEF5C29-86E1-4AAE-E068-04EB5B00E492" author="perso"> <title>TC: prof et admin</title> <abstract/> <elements> <element id="s_880D9D4B-8BC0-BA43-5ECA-04EBA9FC9E59" begin="2426894" dur="141478" author="" date="2010/02/25" color="10053375" src=""> <title>Conseil de classe</title> <abstract/> <audio source=""/> <tags> <tag>Argumentation</tag> </tags> </element> <element id="s_D568A57C-7110-DED2-3165-04EC54387060" begin="5052858" dur="124407" author="" date="2010/02/25" color="10053375" src=""> <title>conseil de classe</title> <abstract>Reprise de la figure precedente</abstract> <audio source="undefined"/> <tags/> </element> </elements> </decoupage> </ensemble> </content> </annotations> <displays> <display id="0" title="Init view" idsel="laurentcantet_entrelesmurs" tc="2426424" zoom="0" scroll="0" infoBAB=""> <audio source=""/> <content id="laurentcantet_entrelesmurs"> <decoupage idens="en_2" id="de_PPP" tagsSelect=""/> <decoupage idens="laurentcantet_entrelesmurs" id="c_14A2E638-1936-97DC-E303-2DBA6A82A8B3" tagsSelect=""/> <decoupage idens="ens_perso" id="c_EEEF5C29-86E1-4AAE-E068-04EB5B00E492" tagsSelect=""/> <decoupage idens="ens_perso" id="c_EFC3FFE7-0204-A086-EBEC-D2A03A0E56CB" tagsSelect=""/> </content> </display> </displays> <edits> <editing id="0" tags=""> <title>Bout a bout 1</title> <abstract/> <edit id="edit1" tags=""> <eList/> <caption/> <audio/> <mList/> </edit> <edit id="edit2" tags=""> <eList/> <caption/> <audio/> <mList/> </edit> </editing> </edits> </iri>'
+        self.project.id = "11321"
+        self.project.ldt_id = str(uuid.uuid1())
+        self.project.description = "proj1description"
+        self.project.save()
         
-    def test_create_project(self):       
+    def test_create_project(self):   
+        self.cont1 = Content(iriurl="cont1_id/iriurl1", duration=123)
+        self.cont1.iri_id = "cont1_id"
+        self.cont1.save()
+        
+        self.cont2 = Content(iriurl="cont2_id/iriurl2", duration=100)
+        self.cont2.iri_id = "cont2_id"
+        self.cont2.save()
+        
         self.project2 = Project(title="titleproj2", owner=self.user)
-        self.project2.ldt = '<iri ldtversion="1.0.3" xmlns:dc="http://dublincore.org/documents/dcmi-namespace/"><project id="af3b99e4-b695-11df-bfde-00145ea4a212" user="admin" title="CA:reponse a TC" abstract=""/> <medias> <media extra="" id="laurentcantet_entrelesmurs" pict="" src="http://amateur.iri.centrepompidou.fr//atelier/static/media/ldt/laurentcantet_entrelesmurs/laurentcantet_entrelesmurs.iri" video="rtmp://media.iri.centrepompidou.fr/ddc_player/video/regardssignes/"/> </medias> <annotations> <content id="laurentcantet_entrelesmurs"> <ensemble id="ens_perso" idProject="fe0d5d4c-2201-11df-8a24-00145ea4a2be" title="Decoupages personnels" author="perso" abstract=""> <decoupage id="c_EFC3FFE7-0204-A086-EBEC-D2A03A0E56CB" author="perso"> <title>CA: prof et admin</title> <abstract/> <elements> <element id="s_442AAB3A-42DA-F9BF-75E7-D2A0663FD5FF" begin="985690" dur="373222" author="" date="2010/09/02" color="16711680" src=""> <title/> <abstract/> <audio source=""/> <tags/> </element> <element id="s_0050F043-3AD2-0A7C-6699-D2A03A1EBA02" begin="5052858" dur="124407" author="" date="2010/09/02" color="10053375" src=""> <title>conseil de classe</title> <abstract>Reprise de la figure precedente</abstract> <audio source="undefined"/> <tags/> </element> </elements> </decoupage> <decoupage id="c_EEEF5C29-86E1-4AAE-E068-04EB5B00E492" author="perso"> <title>TC: prof et admin</title> <abstract/> <elements> <element id="s_880D9D4B-8BC0-BA43-5ECA-04EBA9FC9E59" begin="2426894" dur="141478" author="" date="2010/02/25" color="10053375" src=""> <title>Conseil de classe</title> <abstract/> <audio source=""/> <tags> <tag>Argumentation</tag> </tags> </element> <element id="s_D568A57C-7110-DED2-3165-04EC54387060" begin="5052858" dur="124407" author="" date="2010/02/25" color="10053375" src=""> <title>conseil de classe</title> <abstract>Reprise de la figure precedente</abstract> <audio source="undefined"/> <tags/> </element> </elements> </decoupage> </ensemble> </content> </annotations> <displays> <display id="0" title="Init view" idsel="laurentcantet_entrelesmurs" tc="2426424" zoom="0" scroll="0" infoBAB=""> <audio source=""/> <content id="laurentcantet_entrelesmurs"> <decoupage idens="en_2" id="de_PPP" tagsSelect=""/> <decoupage idens="laurentcantet_entrelesmurs" id="c_14A2E638-1936-97DC-E303-2DBA6A82A8B3" tagsSelect=""/> <decoupage idens="ens_perso" id="c_EEEF5C29-86E1-4AAE-E068-04EB5B00E492" tagsSelect=""/> <decoupage idens="ens_perso" id="c_EFC3FFE7-0204-A086-EBEC-D2A03A0E56CB" tagsSelect=""/> </content> </display> </displays> <edits> <editing id="0" tags=""> <title>Bout a bout 1</title> <abstract/> <edit id="edit1" tags=""> <eList/> <caption/> <audio/> <mList/> </edit> <edit id="edit2" tags=""> <eList/> <caption/> <audio/> <mList/> </edit> </editing> </edits> </iri>'
+    
+        self.project2.ldt = self.LU.generate_ldt(Content.objects.all())    
         self.project2.ldt_id = str(uuid.uuid1())
         self.project2.description = "proj2description"
         self.project2.save()
@@ -41,8 +53,12 @@
         
     #test deletion of project without annotation
     def test_del_project_v1(self):
+        self.cont3 = Content(iriurl="cont3_id/iriurl3", duration=100)
+        self.cont3.iri_id = "cont3_id"
+        self.cont3.save()
+        
         self.project3 = Project(title="titleproj3", owner=self.user)
-        self.project3.ldt = '<iri ldtversion="1.0.3" xmlns:dc="http://dublincore.org/documents/dcmi-namespace/"><project id="af3b99e4-b695-11df-bfde-00145ea4a333" user="admin" title="CA:reponse a TC" abstract=""/> <medias> <media extra="" id="laurentcantet_entrelesmurs" pict="" src="http://amateur.iri.centrepompidou.fr//atelier/static/media/ldt/laurentcantet_entrelesmurs/laurentcantet_entrelesmurs.iri" video="rtmp://media.iri.centrepompidou.fr/ddc_player/video/regardssignes/"/> </medias> <annotations> <content id="laurentcantet_entrelesmurs"> <ensemble id="ens_perso" idProject="fe0d5d4c-2201-11df-8a24-00145ea4a2be" title="Decoupages personnels" author="perso" abstract=""> <decoupage id="c_EFC3FFE7-0204-A086-EBEC-D2A03A0E56CB" author="perso"> <title>CA: prof et admin</title> <abstract/> <elements> <element id="s_442AAB3A-42DA-F9BF-75E7-D2A0663FD5FF" begin="985690" dur="373222" author="" date="2010/09/02" color="16711680" src=""> <title/> <abstract/> <audio source=""/> <tags/> </element> <element id="s_0050F043-3AD2-0A7C-6699-D2A03A1EBA02" begin="5052858" dur="124407" author="" date="2010/09/02" color="10053375" src=""> <title>conseil de classe</title> <abstract>Reprise de la figure precedente</abstract> <audio source="undefined"/> <tags/> </element> </elements> </decoupage> <decoupage id="c_EEEF5C29-86E1-4AAE-E068-04EB5B00E492" author="perso"> <title>TC: prof et admin</title> <abstract/> <elements> <element id="s_880D9D4B-8BC0-BA43-5ECA-04EBA9FC9E59" begin="2426894" dur="141478" author="" date="2010/02/25" color="10053375" src=""> <title>Conseil de classe</title> <abstract/> <audio source=""/> <tags> <tag>Argumentation</tag> </tags> </element> <element id="s_D568A57C-7110-DED2-3165-04EC54387060" begin="5052858" dur="124407" author="" date="2010/02/25" color="10053375" src=""> <title>conseil de classe</title> <abstract>Reprise de la figure precedente</abstract> <audio source="undefined"/> <tags/> </element> </elements> </decoupage> </ensemble> </content> </annotations> <displays> <display id="0" title="Init view" idsel="laurentcantet_entrelesmurs" tc="2426424" zoom="0" scroll="0" infoBAB=""> <audio source=""/> <content id="laurentcantet_entrelesmurs"> <decoupage idens="en_2" id="de_PPP" tagsSelect=""/> <decoupage idens="laurentcantet_entrelesmurs" id="c_14A2E638-1936-97DC-E303-2DBA6A82A8B3" tagsSelect=""/> <decoupage idens="ens_perso" id="c_EEEF5C29-86E1-4AAE-E068-04EB5B00E492" tagsSelect=""/> <decoupage idens="ens_perso" id="c_EFC3FFE7-0204-A086-EBEC-D2A03A0E56CB" tagsSelect=""/> </content> </display> </displays> <edits> <editing id="0" tags=""> <title>Bout a bout 1</title> <abstract/> <edit id="edit1" tags=""> <eList/> <caption/> <audio/> <mList/> </edit> <edit id="edit2" tags=""> <eList/> <caption/> <audio/> <mList/> </edit> </editing> </edits> </iri>'
+        self.project3.ldt = self.LU.generate_ldt(Content.objects.all())  
         self.project3.id = "333"
         self.project3.ldt_id = str(uuid.uuid1())
         self.project3.description = "proj3description"
@@ -55,9 +71,12 @@
     
     #test deletion of project with annotations  
     def test_del_project_v2(self):
+        self.cont4 = Content(iriurl="cont4_id/iriurl4", duration=100)
+        self.cont4.iri_id = "cont4_id"
+        self.cont4.save()
         
-        self.project4 = Project(title="titleproj3", owner=self.user)
-        self.project4.ldt = '<iri ldtversion="1.0.3" xmlns:dc="http://dublincore.org/documents/dcmi-namespace/"><project id="af3b99e4-b695-11df-bfde-00145ea4a333" user="admin" title="CA:reponse a TC" abstract=""/> <medias> <media extra="" id="laurentcantet_entrelesmurs" pict="" src="http://amateur.iri.centrepompidou.fr//atelier/static/media/ldt/laurentcantet_entrelesmurs/laurentcantet_entrelesmurs.iri" video="rtmp://media.iri.centrepompidou.fr/ddc_player/video/regardssignes/"/> </medias> <annotations> <content id="laurentcantet_entrelesmurs"> <ensemble id="ens_perso" idProject="fe0d5d4c-2201-11df-8a24-00145ea4a2be" title="Decoupages personnels" author="perso" abstract=""> <decoupage id="c_EFC3FFE7-0204-A086-EBEC-D2A03A0E56CB" author="perso"> <title>CA: prof et admin</title> <abstract/> <elements> <element id="s_442AAB3A-42DA-F9BF-75E7-D2A0663FD5FF" begin="985690" dur="373222" author="" date="2010/09/02" color="16711680" src=""> <title/> <abstract/> <audio source=""/> <tags/> </element> <element id="s_0050F043-3AD2-0A7C-6699-D2A03A1EBA02" begin="5052858" dur="124407" author="" date="2010/09/02" color="10053375" src=""> <title>conseil de classe</title> <abstract>Reprise de la figure precedente</abstract> <audio source="undefined"/> <tags/> </element> </elements> </decoupage> <decoupage id="c_EEEF5C29-86E1-4AAE-E068-04EB5B00E492" author="perso"> <title>TC: prof et admin</title> <abstract/> <elements> <element id="s_880D9D4B-8BC0-BA43-5ECA-04EBA9FC9E59" begin="2426894" dur="141478" author="" date="2010/02/25" color="10053375" src=""> <title>Conseil de classe</title> <abstract/> <audio source=""/> <tags> <tag>Argumentation</tag> </tags> </element> <element id="s_D568A57C-7110-DED2-3165-04EC54387060" begin="5052858" dur="124407" author="" date="2010/02/25" color="10053375" src=""> <title>conseil de classe</title> <abstract>Reprise de la figure precedente</abstract> <audio source="undefined"/> <tags/> </element> </elements> </decoupage> </ensemble> </content> </annotations> <displays> <display id="0" title="Init view" idsel="laurentcantet_entrelesmurs" tc="2426424" zoom="0" scroll="0" infoBAB=""> <audio source=""/> <content id="laurentcantet_entrelesmurs"> <decoupage idens="en_2" id="de_PPP" tagsSelect=""/> <decoupage idens="laurentcantet_entrelesmurs" id="c_14A2E638-1936-97DC-E303-2DBA6A82A8B3" tagsSelect=""/> <decoupage idens="ens_perso" id="c_EEEF5C29-86E1-4AAE-E068-04EB5B00E492" tagsSelect=""/> <decoupage idens="ens_perso" id="c_EFC3FFE7-0204-A086-EBEC-D2A03A0E56CB" tagsSelect=""/> </content> </display> </displays> <edits> <editing id="0" tags=""> <title>Bout a bout 1</title> <abstract/> <edit id="edit1" tags=""> <eList/> <caption/> <audio/> <mList/> </edit> <edit id="edit2" tags=""> <eList/> <caption/> <audio/> <mList/> </edit> </editing> </edits> </iri>'
+        self.project4 = Project(title="titleproj4", owner=self.user)
+        self.project4.ldt=self.LU.generate_ldt(Content.objects.all())  
         self.project4.id = "444"
         self.project4.ldt_id = str(uuid.uuid1())
         self.project4.description = "proj4description"
@@ -74,4 +93,76 @@
         self.project4.delete()
 
         with self.assertRaises(Project.DoesNotExist):
-            Project.objects.get(ldt_id=self.project4.ldt_id)
\ No newline at end of file
+            Project.objects.get(ldt_id=self.project4.ldt_id)
+    
+    def test_clean_database_project(self) :
+        self.cont5 = Content(iriurl="cont5_id/iriurl5", duration=123)
+        self.cont5.iri_id = "cont5_id"
+        self.cont5.save()
+        
+        self.cont6 = Content(iriurl="cont6_id/iriurl6", duration=100)
+        self.cont6.iri_id = "cont6_id"
+        self.cont6.save()
+        
+        self.cont7 = Content(iriurl="cont7_id/iriurl7", duration=100)
+        self.cont7.iri_id = "cont7_id"
+        self.cont7.save()
+        
+        self.project.contents.add(self.cont5, self.cont6)
+    
+        doc = self.LU.generate_ldt(Content.objects.all())
+        
+        #project5 : valid project
+        self.project5 = Project(title="titleproj5", owner=self.user)
+        ldt = lxml.etree.tostring(doc, pretty_print = False)
+        self.project5.ldt = ldt
+        self.project5.id = "555"
+        self.project5.ldt_id = str(uuid.uuid1())
+        self.project5.description = "proj5description"
+        self.project5.save()
+        
+        #project6 : project with empty ldt
+        self.project6 = Project(title="titleproj5", owner=self.user)
+        self.project6.id = "666"
+        self.project6.ldt_id = str(uuid.uuid1())
+        self.project6.description = "proj6description"
+        self.project6.save()
+        
+        #project7 : project with a non-existing media
+        
+        self.project7 = Project(title="titleproj7", owner=self.user)
+        self.project7.id = "777"
+        self.project7.ldt_id = str(uuid.uuid1())
+        self.project7.ldt = '<iri><project id="a18ec3de-49c1-11e2-8e5d-00161798aedb" title="" user="IRI Web" abstract=""/><medias><media id="non_existing_media" src="ldt/non_existing_media/non_existing_media_iri_url" video="%(stream_url)s" pict="" extra=""/></medias><annotations/><displays><display id="0" title="generated" idsel="cont5_id" tc="0"><content id="cont5_id"/><content id="cont6_id"/><content id="cont7_id"/></display></displays><edits/></iri>'
+        self.project7.description = "proj7description"
+        self.project7.save()
+        
+        #project8 : project with multiple medias some valid and some that don't exist
+        self.project8 = Project(title="titleproj8", owner=self.user)
+        self.project8.id = "888"
+        self.project8.ldt_id = str(uuid.uuid1())
+        self.project8.ldt = '<iri><project id="a18ec3de-49c1-11e2-8e5d-00161798aedb" title="" user="IRI Web" abstract=""/><medias><media id="cont5_id" src="ldt/cont5_id/iriurl5" video="%(stream_url)s" pict="" extra=""/><media id="non_existing_media" src="ldt/non_existing_media/non_existing_media_iri_url" video="%(stream_url)s" pict="" extra=""/><media id="cont6_id" src="ldt/cont6_id/iriurl6" video="%(stream_url)s" pict="" extra=""/><media id="cont7_id" src="ldt/cont7_id/iriurl7" video="%(stream_url)s" pict="" extra=""/></medias><annotations/><displays><display id="0" title="generated" idsel="cont5_id" tc="0"><content id="cont5_id"/><content id="cont6_id"/><content id="cont7_id"/></display></displays><edits/></iri>'
+        self.project8.description = "proj8description"
+        self.project8.save()
+        
+        #project9 : project without any media
+        self.project9 = Project(title="titleproj9", owner=self.user)
+        self.project9.id = "999"
+        self.project9.ldt_id = str(uuid.uuid1())
+        self.project9.ldt = '<iri><project id="a18ec3de-49c1-11e2-8e5d-00161798aedb" title="" user="IRI Web" abstract=""/><medias></medias><annotations/><displays><display id="0" title="generated" idsel="cont5_id" tc="0"><content id="cont5_id"/><content id="cont6_id"/><content id="cont7_id"/></display></displays><edits/></iri>'
+        self.project9.description = "proj9description"
+        self.project9.save()
+        
+        call_command('set_projectldtiri')
+
+        with self.assertRaises(Project.DoesNotExist):
+            Project.objects.get(ldt_id=self.project6.ldt_id)
+        
+        with self.assertRaises(Project.DoesNotExist):
+            Project.objects.get(ldt_id=self.project7.ldt_id)
+        
+        with self.assertRaises(Project.DoesNotExist):
+            Project.objects.get(ldt_id=self.project9.ldt_id)
+        
+        self.assertEqual(ldt, self.project5.ldt)    
+        
\ No newline at end of file
--- a/src/ldt/ldt/ldt_utils/tests/view_tests.py	Tue Feb 12 17:29:41 2013 +0100
+++ b/src/ldt/ldt/ldt_utils/tests/view_tests.py	Tue Feb 12 17:30:41 2013 +0100
@@ -5,17 +5,8 @@
 Replace these with more appropriate tests for your application.
 """
 
-from ldt.test.testcases import OAuthWebTestCase, TestCase
-from django.conf import settings
-from django.test import TestCase
-from ldt.ldt_utils.models import User, Project, Content, Media
-from ldt.ldt_utils.utils import LdtUtils, LdtAnnotation, create_ldt, create_empty_iri, copy_ldt
-from ldt.test.client import Client
-import lxml.etree
-import tempfile
+from ldt.ldt_utils.models import Project, Content
 import unittest
-import uuid
-import logging
 
 class ViewsTest(unittest.TestCase):
     def setUp(self):
--- a/src/ldt/ldt/ldt_utils/urls.py	Tue Feb 12 17:29:41 2013 +0100
+++ b/src/ldt/ldt/ldt_utils/urls.py	Tue Feb 12 17:30:41 2013 +0100
@@ -48,6 +48,7 @@
     url(r'^front/search/$', 'views.front.search_index'),
     url(r'^front/medias', 'views.front.all_contents'),
     url(r'^mashupbytag/$', 'views.json.mashup_by_tag'),
+    url(r'^deletesegment/(?P<project_id>.*)/(?P<content_id>.*)/(?P<ensemble_id>.*)/(?P<cutting_id>.*)/(?P<segment_id>.*)/$', 'views.workspace.delete_segment', name="delete_segment"),
 )
 
 urlpatterns += patterns('',
--- a/src/ldt/ldt/ldt_utils/utils.py	Tue Feb 12 17:29:41 2013 +0100
+++ b/src/ldt/ldt/ldt_utils/utils.py	Tue Feb 12 17:30:41 2013 +0100
@@ -8,7 +8,6 @@
 import uuid
 from ldt.utils.url import request_with_auth
 from ldt.utils.url import absurl_norequest
-import logging
 
 __BOOLEAN_DICT = {
     'false':False,
@@ -58,7 +57,7 @@
                 videopath = unicode(content.videopath)
             media = lxml.etree.SubElement(medias, "media")
             media.set(u"id", content.iri_id)
-            media.set(u"src", content.iri_url(web_url))
+            media.set(u"src", content.relative_iri_url())
             media.set(u"video", videopath)
             media.set(u"pict", u"")
             media.set(u"extra", u"")
@@ -277,12 +276,12 @@
             tag_node = lxml.etree.SubElement(tags, 'tag')
             tag_node.text = tag
         
-        return cutting_id, id_annotation
+        return cutting_id, id_annotation, ensemble_id
     
-    def save(self):
+    def save(self, must_reindex=True):
         if self.to_add:
             self.project.ldt = lxml.etree.tostring(self.ldtdoc, pretty_print=True)
-            self.project.save()
+            self.project.save(must_reindex=must_reindex)
        
     def get_polemic_syntax(self, text):
         polemics = []
@@ -322,7 +321,7 @@
             idsel = content.iri_id
         elementMedia = lxml.etree.SubElement(elementMedias, 'media')
         elementMedia.set('id', content.iri_id)
-        elementMedia.set('src', content.iri_url())
+        elementMedia.set('src', content.relative_iri_url())
         
         if content.videopath != None :
             elementMedia.set('video', content.videopath)
--- a/src/ldt/ldt/ldt_utils/views/json.py	Tue Feb 12 17:29:41 2013 +0100
+++ b/src/ldt/ldt/ldt_utils/views/json.py	Tue Feb 12 17:30:41 2013 +0100
@@ -14,6 +14,8 @@
 import lxml.etree
 import logging
 
+logger = logging.getLogger(__name__)
+
 
 def project_json_id(request, id): 
     
@@ -93,6 +95,11 @@
     escape_bool = False
     if escape_str:
         escape_bool = {'true': True, 'false': False, "0": False, "1": True}.get(escape_str.lower())
+    # do we remove annotations from mashup if the have duration=0 ? (yes by default)
+    remove_zero_dur_str = request.REQUEST.get("removezeroduration")
+    remove_zero_dur = True
+    if remove_zero_dur_str:
+        remove_zero_dur = {'true': True, 'false': False, "0": False, "1": True}.get(remove_zero_dur_str.lower())
     
     # We search
     s = request.REQUEST.get("tag")
@@ -100,14 +107,23 @@
     if s:
         # We get the projects with all the segments
         project_xml, results = search_generate_ldt(request, "tags", s, False)
+        
+        logger.debug("mashup_by_tag : search_generate_ldt done")
+        
         project = Project()
         project.ldt = lxml.etree.tostring(project_xml, pretty_print=True)
         # Needed datas for jsonification
         now = datetime.now()
         project.modification_date = project.creation_date = now
         #return HttpResponse(lxml.etree.tostring(project_xml, pretty_print=True), mimetype="text/xml;charset=utf-8")
+        logger.debug("mashup_by_tag : serialize_to_cinelab prepare")
+        
         ps = ProjectJsonSerializer(project, from_contents=False)
+        logger.debug("mashup_by_tag : serialize_to_cinelab serializer ready")        
         mashup_dict = ps.serialize_to_cinelab()
+
+        logger.debug("mashup_by_tag : serialize_to_cinelab done")
+        
         # Now we build the mashup with the good segments (the ones between in and out)
         if results:
             tc_in = 0
@@ -160,18 +176,34 @@
                 for res in highest_weighted:
                     cur_in = res["start_ts"]
                     cur_out = cur_in + res["duration"]
-                    if tc_in<=cur_in and cur_out<=tc_out:
+                    if tc_in<=cur_in and cur_out<=tc_out and ((not remove_zero_dur) or (remove_zero_dur and res["duration"]>0.0)) and (res["element_id"] not in mashup_list["items"]):
                         #mashup_list["items"].append(res["iri_id"] + ", " + res["element_id"] + ", " + str(res["start_ts"]) + ", " + str(res["duration"]) + ", " + str(res["weight"]))
+                        #mashup_list["items"].append(res["element_id"] + ", " + str(res["weight"]) + ", " + res["title"])
                         mashup_list["items"].append(res["element_id"])
             else:
                 # no particular sorting
                 for res in results:
                     cur_in = float(res["start_ts"])
-                    cur_out = cur_in + float(res["duration"])
-                    if tc_in<=cur_in and cur_out<=tc_out:
+                    dur = float(res["duration"])
+                    cur_out = cur_in + dur
+                    if tc_in<=cur_in and cur_out<=tc_out and ((not remove_zero_dur) or (remove_zero_dur and dur>0.0)):
                         mashup_list["items"].append(res["element_id"])
+            if mashup_dict["lists"] is None:
+                mashup_dict["lists"] = []
             mashup_dict["lists"].append(mashup_list)
     
+            # If asked, we remove the annotations not used in the mashup.
+            # It enabled a lighter response 
+            remove_not_used_str = request.REQUEST.get("removenotused")
+            remove_not_used = False
+            if remove_not_used_str:
+                remove_not_used = {'true': True, 'false': False, "0": False, "1": True}.get(remove_not_used_str.lower())
+            if remove_not_used:
+                for a in mashup_dict["annotations"]:
+                    if a["id"] not in mashup_list["items"]:
+                        mashup_dict["annotations"].remove(a)
+    
+    
     json_str = simplejson.dumps(mashup_dict, ensure_ascii=False, indent=indent)
     if escape_bool:
         json_str = escape(json_str)
@@ -182,8 +214,6 @@
         json_str = "%s(%s)" % (callback, json_str)
     
     resp = HttpResponse(mimetype="application/json; charset=utf-8")
-    resp['Cache-Control'] = 'no-cache, must-revalidate'
-    resp['Pragma'] = 'no-cache'
     resp.write(json_str)
     
     return resp
--- a/src/ldt/ldt/ldt_utils/views/lignesdetemps.py	Tue Feb 12 17:29:41 2013 +0100
+++ b/src/ldt/ldt/ldt_utils/views/lignesdetemps.py	Tue Feb 12 17:30:41 2013 +0100
@@ -4,20 +4,18 @@
 from django.http import HttpResponse, HttpResponseRedirect
 from django.shortcuts import render_to_response, get_object_or_404
 from django.template import RequestContext
+from ldt.indexation import SimpleSearch
 from ldt.ldt_utils.models import Content, Project, Media
+from ldt.ldt_utils.searchutils import search_generate_ldt
+from ldt.ldt_utils.stat import update_stat_project
 from ldt.ldt_utils.utils import LdtUtils, clean_description
-from ldt.indexation import SimpleSearch
 from ldt.security.utils import set_forbidden_stream
-from ldt.ldt_utils.stat import update_stat_project
-from ldt.ldt_utils.searchutils import search_generate_ldt
+from ldt.utils.projectldt_parser import absolute_src_xml, relative_src_xml
 from ldt.utils.url import absstatic, absurl
 from ldt.utils.web_url_management import get_web_url
 import base64
-import django.core.urlresolvers
 import lxml.etree
-from django.contrib.sites.models import Site
-from django.template import Context, Template
-  
+
 def search_index_get(request, field, query):
     
     language_code = request.LANGUAGE_CODE[:2]
@@ -43,6 +41,7 @@
     
     resp = HttpResponse(mimetype="text/xml")
     doc, _ = search_generate_ldt(request, field, query)
+    doc = absolute_src_xml(doc)
     doc.write(resp, pretty_print=True)
     
     return resp
@@ -100,7 +99,6 @@
     
     ldtgen = LdtUtils()
     doc = ldtgen.generate_init([project_id, content_id, ensemble_id, cutting_id, segment_id], 'ldt.ldt_utils.views.lignesdetemps.ldt_segment', 'ldt.ldt_utils.views.lignesdetemps.highlight_segment')
-    
     return HttpResponse(lxml.etree.tostring(lxml.etree.ElementTree(doc), pretty_print=True), mimetype="text/xml;charset=utf-8")
 
 def highlight_segment(request, project_id, content_id, ensemble_id, cutting_id, segment_id):
@@ -130,10 +128,11 @@
     if project_id and project_id != "_" :
         project = Project.safe_objects.get(ldt_id=project_id) #@UndefinedVariable
         ldtdoc = lxml.etree.fromstring(project.ldt_encoded)
+        ldtdoc = absolute_src_xml(ldtdoc)
         ldtdoc = set_forbidden_stream(ldtdoc, request.user)
         displays_node = ldtdoc.find("displays")
         if not displays_node:
-            displays_node = lxml.etree.SubElement(ldtdoc, u"displays")        
+            displays_node = lxml.etree.SubElement(ldtdoc, u"displays")
         res = displays_node.xpath("display")
         if len(res) > 0:
             display_node = res[0]
@@ -175,6 +174,7 @@
         }        
         
         doc = ldtgen.generate_ldt(content_list, "segment : ", author=username, startSegment=start_segment)
+        doc = absolute_src_xml(doc)
         doc = set_forbidden_stream(doc, request.user)
         doc.write(resp, pretty_print=('DEBUG' in dir(settings) and settings.DEBUG))
         
@@ -243,6 +243,7 @@
     
     doc = lxml.etree.fromstring(project.ldt_encoded)
     doc = set_forbidden_stream(doc, request.user)
+    doc = absolute_src_xml(doc)
     resp.write(lxml.etree.tostring(doc, pretty_print=True, xml_declaration=True, encoding="utf-8")) 
 
     return resp
@@ -252,10 +253,12 @@
 def save_ldt_project(request):
     if request.method == "POST":
         ldt = request.POST['ldt']
-        id = request.POST['id']
-        ldtproject = Project.safe_objects.select_related().get(ldt_id=id) #@UndefinedVariable
-
+        ldt_id = request.POST['id']
+        ldtproject = Project.safe_objects.select_related().get(ldt_id=ldt_id) #@UndefinedVariable
+        ldtxml=lxml.etree.fromstring(ldt)
         #save xml ldt
+        ldt, _, _ = relative_src_xml(ldtxml)
+        ldt = lxml.etree.tostring(ldt, pretty_print=True)          
         ldtproject.ldt = ldt
         
         doc = lxml.etree.fromstring(ldtproject.ldt_encoded)
@@ -268,11 +271,11 @@
         new_contents = []
         result = doc.xpath("/iri/medias/media")
         for medianode in result:
-            id = medianode.get("id")
-            new_contents.append(id)
+            media_id = medianode.get("id")
+            new_contents.append(media_id)
             #Put back the video fied from "forbidden_stream_url" to the video url
             if medianode.get("video") == settings.FORBIDDEN_STREAM_URL:
-                content = Content.objects.get(iri_id=id)
+                content = Content.objects.get(iri_id=media_id)
                 media = Media.objects.get(id=content.media_obj.id)
                 medianode.set('video', media.videopath)
                 ldtproject.ldt = lxml.etree.tostring(doc, pretty_print=True)
@@ -317,7 +320,7 @@
         ldt = ''
         new_contents = []
     
-    return render_to_response('ldt/ldt_utils/save_done.html', {'ldt': ldt, 'id':id, 'title':ldtproject.title, 'contents': new_contents}, context_instance=RequestContext(request))
+    return render_to_response('ldt/ldt_utils/save_done.html', {'ldt': ldt, 'id':ldt_id, 'title':ldtproject.title, 'contents': new_contents}, context_instance=RequestContext(request))
     
 
 def index(request, url):
@@ -340,6 +343,7 @@
     ldtgen = LdtUtils()
     doc = ldtgen.generate_ldt(contentList, title=contentList[0].title, startSegment=startSegment)
     doc = set_forbidden_stream(doc, request.user)
+    doc = absolute_src_xml(doc)
     doc.write(resp, pretty_print=True)
 
     return resp
--- a/src/ldt/ldt/ldt_utils/views/project.py	Tue Feb 12 17:29:41 2013 +0100
+++ b/src/ldt/ldt/ldt_utils/views/project.py	Tue Feb 12 17:30:41 2013 +0100
@@ -105,9 +105,10 @@
     member_list, admin_list = get_userlist_model(project, request.user)
     display_reset= False
     
-    if contents[0].front_project != None:
-        if contents[0].front_project.ldt_id == ldt_id:
-            display_reset = True        
+    if contents and len(contents)>0:
+        if contents[0].front_project != None:
+            if contents[0].front_project.ldt_id == ldt_id:
+                display_reset = True        
     
     if request.method == "POST" :
         submit_action = request.REQUEST.get("submit_button", False)
--- a/src/ldt/ldt/ldt_utils/views/workspace.py	Tue Feb 12 17:29:41 2013 +0100
+++ b/src/ldt/ldt/ldt_utils/views/workspace.py	Tue Feb 12 17:30:41 2013 +0100
@@ -1,32 +1,34 @@
 from django.conf import settings
 from django.contrib.auth.decorators import login_required
 from django.contrib.auth.models import Group
-from django.core.urlresolvers import reverse#, resolve
 from django.core.paginator import Paginator, InvalidPage, EmptyPage
-from django.http import HttpResponseForbidden, HttpResponse
-from ldt.indexation import get_results_with_context, highlight_documents
+from django.core.urlresolvers import reverse #, resolve
+from django.db import transaction
+from django.http import (HttpResponseForbidden, HttpResponseNotFound, 
+    HttpResponseRedirect)
 from django.shortcuts import render_to_response
 from django.template import RequestContext
 from django.template.loader import render_to_string
 from django.utils.html import escape
+from django.utils.safestring import mark_safe
 from django.utils.translation import ugettext as _
+from itertools import groupby
+from ldt.indexation import get_results_with_context, highlight_documents
+from ldt.ldt_utils import contentindexer
 from ldt.ldt_utils.forms import SearchForm
+from ldt.ldt_utils.models import Content, Project, Segment
+from ldt.ldt_utils.projectserializer import ProjectJsonSerializer
+from ldt.ldt_utils.utils import boolean_convert
+from ldt.ldt_utils.views.content import get_contents_page, get_content_tags
+from ldt.ldt_utils.views.project import (get_projects_page, 
+    get_published_projects_page)
+from ldt.security.utils import add_change_attr, get_userlist
 from ldt.utils.url import absstatic, absurl
 from ldt.utils.web_url_management import get_web_url
-from ldt.ldt_utils.models import Content, Project, Segment
-from ldt.ldt_utils.utils import boolean_convert
-from ldt.ldt_utils.projectserializer import ProjectJsonSerializer
-from ldt.ldt_utils.views.content import get_contents_page, get_content_tags
-from ldt.ldt_utils.views.project import get_projects_page, get_published_projects_page
-from ldt.security.utils import add_change_attr, get_userlist
 from operator import itemgetter
-from itertools import groupby
 import base64
-import django.core.urlresolvers
 import ldt.auth as ldt_auth
-from django.utils.safestring import mark_safe
-from django.contrib.sites.models import Site
-from django.template import Context, Template
+import lxml.etree
 
 
 @login_required
@@ -161,7 +163,10 @@
         else:
             rend_dict["polemic_qColor"] = "036aae"
             
-
+    if request.GET.has_key("autostart"):
+        rend_dict["autostart"] = {'true': True, 'false': False, "0": False, "1": True}.get(request.GET.get("autostart").lower())
+    else : 
+        rend_dict["autostart"] = True
     if request.GET.has_key("createannotation"):
         rend_dict["createannotation"] = {'true': True, 'false': False, "0": False, "1": True}.get(request.GET.get("createannotation").lower())
     if request.GET.has_key("show_mic_record"):
@@ -172,7 +177,7 @@
         rend_dict["annotations_list"] = {'true': True, 'false': False, "0": False, "1": True}.get(request.GET.get("annotations_list").lower())
         rend_dict["player_width"] = 550
     if request.GET.has_key("tag_titles"):
-       rend_dict["tag_titles"] = request.GET.get("tag_titles") 
+        rend_dict["tag_titles"] = request.GET.get("tag_titles") 
     if request.GET.has_key("sparkline"):
         rend_dict["sparkline"] = request.GET.get("sparkline")
         if request.GET.has_key("sparkline_lineColor"):
@@ -237,9 +242,6 @@
     stream_mode = project.stream_mode
     if stream_mode != "video":
         stream_mode = 'radio'
-    
-    if stream_mode == 'radio':
-        player_height = 1
         
     if not ldt_auth.check_access(request.user, project):
         return HttpResponseForbidden(_("You can not access this project"))
@@ -282,6 +284,7 @@
 def search_index(request):
     language_code = request.LANGUAGE_CODE[:2]
     nb = 0
+    nb_segment=0
     results = []
     search = ''
     field = 'all'
@@ -314,7 +317,7 @@
         if sub[-1] != u'"':
             sub = sub + u'"'
         search = u'author:' + sub
-    results = get_results_with_context(field, search, content_list)      
+    results = get_results_with_context(field, search, content_list)
     all_segments = Segment.objects.filter(element_id__in=[e['element_id'] for e in results])
     all_projects = Project.objects.filter(ldt_id__in=[e['project_id'] for e in results], state=2)
     all_contents = Content.objects.filter(iri_id__in=[e['iri_id'] for e in results])
@@ -324,18 +327,19 @@
     results.sort(key=lambda k: k['iri_id'])
            
     for iri_id, item in groupby(results, itemgetter('iri_id')):
-        content=[]
+        content=None
         content_filter = filter(lambda e: e.iri_id == iri_id, all_contents)
         if len(content_filter)>0:
-            content = filter(lambda e: e.iri_id == iri_id, all_contents)[0]
+            content = content_filter[0]
             if content.description is None:
                 content.description = ''
-                    
+        if content is None:
+            continue
         all_related_segments = list(item)
                 
         valid_segments = []
         for s in all_related_segments:
-            array_of_segs = [seg for seg in all_segments if seg.element_id == s['element_id'] and seg.project_id == s['project_id'] and seg.iri_id == s['iri_id'] and seg.cutting_id == s['cutting_id'] and seg.ensemble_id == s['ensemble_id'] ]
+            array_of_segs = [seg for seg in all_segments if (seg.element_id == s['element_id'] and seg.project_id == s['project_id'] and seg.iri_id == s['iri_id'] and seg.cutting_id == s['cutting_id'] and seg.ensemble_id == s['ensemble_id']) ]
             if len(array_of_segs)>0:
                 segment = array_of_segs[0]
                     
@@ -383,3 +387,31 @@
     return render_to_response('ldt/ldt_utils/loading.html', context_instance=RequestContext(request))
    
 
+@transaction.commit_on_success
+def delete_segment(request, project_id, content_id, ensemble_id, cutting_id, segment_id):
+    if project_id and project_id != "_" :
+        project = Project.safe_objects.get(ldt_id=project_id) #@UndefinedVariable
+        if project:
+            ldtdoc = lxml.etree.fromstring(project.ldt_encoded)
+            xstr = "/iri/annotations/content[@id='%s']/ensemble[@id='%s']/decoupage[@id='%s']/elements/element[@id='%s']" % (content_id, ensemble_id, cutting_id, segment_id)
+            element = None
+            try:
+                element = ldtdoc.xpath(xstr)
+            except:
+                return HttpResponseNotFound(_("Annotation not found in the xml"))
+            if element and len(element)>0:
+                # element[0] is the annotation to remove
+                el = element[0]
+                el.getparent().remove(el)
+                project.ldt = lxml.etree.tostring(ldtdoc)
+                project.save(must_reindex=False)
+                contentindexer.delete_segment(project, project_id, content_id, ensemble_id, cutting_id, segment_id)                
+                
+                return HttpResponseRedirect(request.META.get('HTTP_REFERER', '/'))
+            else:
+                return HttpResponseNotFound(_("Annotation not found"))
+        else:
+            return HttpResponseNotFound(_("Project not found"))
+    else:
+        return HttpResponseNotFound(_("Project not found"))
+
Binary file src/ldt/ldt/locale/fr/LC_MESSAGES/django.mo has changed
--- a/src/ldt/ldt/locale/fr/LC_MESSAGES/django.po	Tue Feb 12 17:29:41 2013 +0100
+++ b/src/ldt/ldt/locale/fr/LC_MESSAGES/django.po	Tue Feb 12 17:30:41 2013 +0100
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-12-06 16:41+0100\n"
+"POT-Creation-Date: 2013-01-14 13:21+0100\n"
 "PO-Revision-Date: 2010-03-09 15:52+0100\n"
 "Last-Translator: Yves-Marie Haussonne <ymh.work@gmail.com>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -16,8 +16,12 @@
 "Content-Transfer-Encoding: 8bit\n"
 "Language: \n"
 
-#: .\forms\fields.py:17
-msgid "Enter a valid duration format"
+#: .\forms\fields.py:23
+msgid "The duration field can not be empty."
+msgstr "La durée ne peut pas être nulle."
+
+#: .\forms\fields.py:24
+msgid "Enter a valid duration format;"
 msgstr "Entrez un format de durée valide"
 
 #: .\forms\widgets.py:21
@@ -182,31 +186,31 @@
 msgid "content.authors"
 msgstr "Auteurs"
 
-#: .\ldt_utils\models.py:533
+#: .\ldt_utils\models.py:529
 msgid "content_stat.content"
 msgstr "statistiques d'annotation"
 
-#: .\ldt_utils\models.py:534
+#: .\ldt_utils\models.py:530
 msgid "content_stat.annotations_volume"
 msgstr "Volume d'annotations"
 
-#: .\ldt_utils\models.py:535
+#: .\ldt_utils\models.py:531
 msgid "content_stat.polemics_volume"
 msgstr "Volume d'annotations"
 
-#: .\ldt_utils\models.py:536
+#: .\ldt_utils\models.py:532
 msgid "content.nb_annotation"
 msgstr "nombre d'annotations"
 
-#: .\ldt_utils\models.py:537
+#: .\ldt_utils\models.py:533
 msgid "content.last_annotated"
 msgstr "annoté pour la dernière foiss"
 
-#: .\ldt_utils\models.py:592
+#: .\ldt_utils\models.py:588
 msgid "created by"
 msgstr "créé par"
 
-#: .\ldt_utils\models.py:593
+#: .\ldt_utils\models.py:589
 msgid "changed by"
 msgstr "modifié par"
 
@@ -262,13 +266,13 @@
 
 #: .\ldt_utils\templates\front\front_all_contents.html.py:72
 #: .\ldt_utils\templates\front\front_search_results.html.py:138
-#: .\ldt_utils\templates\ldt\ldt_utils\search_results.html.py:101
+#: .\ldt_utils\templates\ldt\ldt_utils\search_results.html.py:105
 msgid "previous"
 msgstr "Précedent"
 
 #: .\ldt_utils\templates\front\front_all_contents.html.py:90
 #: .\ldt_utils\templates\front\front_search_results.html.py:158
-#: .\ldt_utils\templates\ldt\ldt_utils\search_results.html.py:111
+#: .\ldt_utils\templates\ldt\ldt_utils\search_results.html.py:115
 msgid "next"
 msgstr "Suivant"
 
@@ -463,7 +467,7 @@
 
 #: .\ldt_utils\templates\front\front_search_results.html.py:115
 #: .\ldt_utils\templates\front\front_search_results.html.py:120
-#: .\ldt_utils\templates\ldt\ldt_utils\search_results.html.py:80
+#: .\ldt_utils\templates\ldt\ldt_utils\search_results.html.py:84
 msgid "No title"
 msgstr "Sans titre"
 
@@ -724,9 +728,8 @@
 msgstr "Configuration avec widget polemic"
 
 #: .\ldt_utils\templates\ldt\ldt_utils\embed_popup.html.py:104
-#, fuzzy
 msgid "Polemic configuration with tagcloud, annotationsList and Social widgets"
-msgstr "Configuration avec widget polemic, sparkline et tagcloud"
+msgstr "Configuration avec widget social, liste d'annotations et tagcloud"
 
 #: .\ldt_utils\templates\ldt\ldt_utils\embed_popup.html.py:111
 msgid "Create your own configuration"
@@ -929,7 +932,19 @@
 msgid "Results for "
 msgstr "Résultats pour "
 
-#: .\ldt_utils\templates\ldt\ldt_utils\search_results.html.py:76
+#: .\ldt_utils\templates\ldt\ldt_utils\search_results.html.py:78
+msgid ""
+"Are you sure you want to delete this annotation ? You cannot undo this "
+"action."
+msgstr ""
+"Êtes-vous sûr de vouloir supprimer cette annotation ? Cette action est "
+"irrémédiable."
+
+#: .\ldt_utils\templates\ldt\ldt_utils\search_results.html.py:78
+msgid "Delete permantly the current annotation"
+msgstr "Supprimer définitivement cette annotation"
+
+#: .\ldt_utils\templates\ldt\ldt_utils\search_results.html.py:80
 #: .\ldt_utils\templates\ldt\ldt_utils\partial\projectslist.html.py:25
 #: .\ldt_utils\templates\ldt\ldt_utils\partial\projectslist.html.py:27
 #: .\ldt_utils\templates\ldt\ldt_utils\partial\projectslist.html.py:33
@@ -939,11 +954,11 @@
 msgid "open ldt"
 msgstr "Ouvrir sous Lignes de Temps"
 
-#: .\ldt_utils\templates\ldt\ldt_utils\search_results.html.py:87
+#: .\ldt_utils\templates\ldt\ldt_utils\search_results.html.py:91
 msgid "Tags"
 msgstr "Tags"
 
-#: .\ldt_utils\templates\ldt\ldt_utils\search_results.html.py:106
+#: .\ldt_utils\templates\ldt\ldt_utils\search_results.html.py:110
 #, python-format
 msgid "Page %(number)s of  %(num_pages)s"
 msgstr "Page %(number)s de  %(num_pages)s"
@@ -1121,11 +1136,11 @@
 msgstr "Projet publié"
 
 #: .\ldt_utils\views\content.py:345 .\ldt_utils\views\content.py:348
-#: .\ldt_utils\views\project.py:137
+#: .\ldt_utils\views\project.py:138
 msgid "confirm reset"
 msgstr "Confirmer la réinitialisation"
 
-#: .\ldt_utils\views\content.py:347 .\ldt_utils\views\project.py:136
+#: .\ldt_utils\views\content.py:347 .\ldt_utils\views\project.py:137
 #, python-format
 msgid "please confirm reseting project %(title)s"
 msgstr "Veuillez confirmer la réinitialisation du projet %(title)s"
@@ -1148,11 +1163,7 @@
 "Content '%(title)s' is referenced by %(count)d projects: %(project_titles)s. "
 "Please delete them beforehand."
 msgstr[0] ""
-"Le contenu '%(title)s' est référencé par le projet '%(project_titles)s'."
-"Veuillez l'effacer préalablement."
 msgstr[1] ""
-"Le contenu '%(title)s' est référencé par les projets suivants : '%"
-"(project_titles)s'.Veuillez les effacer préalablement."
 
 #: .\ldt_utils\views\content.py:423
 #, python-format
@@ -1161,54 +1172,66 @@
 "several annotations. Do you want to delete the content and the project "
 "anyway ?"
 msgstr ""
-"Le projet '%(project_title)s' référençant le contenu '%(title)s' comporte "
-"plusieurs annotations. Voulez vous quand même supprimer le contenu ?"
 
-#: .\ldt_utils\views\json.py:39 .\ldt_utils\views\rdf.py:15
-#: .\ldt_utils\views\workspace.py:206
+#: .\ldt_utils\views\json.py:41 .\ldt_utils\views\rdf.py:15
+#: .\ldt_utils\views\workspace.py:241
 msgid "You can not access this project"
-msgstr "vous n'avez pas l'autorisation d'accéder à ce projet"
+msgstr "vous n'avez pas l'autorisation de modifier ce projet"
 
-#: .\ldt_utils\views\project.py:117
+#: .\ldt_utils\views\project.py:118
 #, python-format
 msgid "the project %(title)s is published. please unpublish before deleting."
-msgstr "Le projet %(title)s est publié. Déplublier le avant de l'effacer."
-
-#: .\ldt_utils\views\project.py:118 .\ldt_utils\views\project.py:122
-msgid "can not delete the project. Please correct the following error"
-msgstr ""
-"Le projet ne peut pas être effacé. Veuillez corriger les erreurs suivantes."
+msgstr "Le projet %(title)s est publié. Veuillez le dépublier pour pouvoir "
+"le supprimer"
 
 #: .\ldt_utils\views\project.py:119 .\ldt_utils\views\project.py:123
+msgid "can not delete the project. Please correct the following error"
+msgstr "Le projet ne peut être effacé. Veuillez corriger les erreurs "
+"suivantes."
+
+#: .\ldt_utils\views\project.py:120 .\ldt_utils\views\project.py:124
 msgid "title error deleting project"
-msgstr "Erreur lors de l'effacement du projet"
+msgstr "Erreur lors de l'effacement du contenu"
 
-#: .\ldt_utils\views\project.py:121
+#: .\ldt_utils\views\project.py:122
 #, python-format
 msgid ""
 "the project %(title)s is the front project of %(content)s. please delete "
 "this content first."
 msgstr ""
-"Le projet %(title)s est référencé par le contenu '%(content)s'.Veuillez "
-"l'effacer préalablement."
-
-#: .\ldt_utils\views\project.py:125
-#, python-format
-msgid "please confirm deleting project %(title)s"
-msgstr "Veuillez confirmer l'effacement du contenu %(title)s"
+"Le projet %(title)s est le 'front projet' de %(content)s. Veuillez "
+"d'abord supprimer ce contenu."
 
 #: .\ldt_utils\views\project.py:126
+#, python-format
+msgid "please confirm deleting project %(title)s"
+msgstr "Veuillez confirmer la réinitialisation du projet %(title)s"
+
+#: .\ldt_utils\views\project.py:127
 msgid "confirm deletion"
-msgstr "Confirmation d'effacement"
+msgstr "Confirmation effacement contenu"
 
-#: .\ldt_utils\views\workspace.py:117
+#: .\ldt_utils\views\workspace.py:116
 msgid ""
 "The content does not exists or you are not allowed to access this content"
-msgstr "Ce contenu n'existe pas, ou vous n'êtes pas autorisé a y acceder"
+msgstr "Le contenu n'existe pas ou bien vous n'êtes pas autorisé à y accéder"
+
+#: .\ldt_utils\views\workspace.py:120
+msgid "Parameters project_id or content_id must be given in the url"
+msgstr ""
+"Les paramètres project_id ou content_id doivent être indiqués dans l'url"
 
-#: .\ldt_utils\views\workspace.py:121
-msgid "Parameters project_id or content_id must be given in the url"
-msgstr "Les paramètres project_id et content_id doivent être passés dans l'URL"
+#: .\ldt_utils\views\workspace.py:392
+msgid "Annotation not found in the xml"
+msgstr "Annotation non trouvée dans le xml"
+
+#: .\ldt_utils\views\workspace.py:401
+msgid "Annotation not found"
+msgstr "Annotation non trouvée"
+
+#: .\ldt_utils\views\workspace.py:403 .\ldt_utils\views\workspace.py:405
+msgid "Project not found"
+msgstr "Projet non trouvé"
 
 #: .\templates\403.html.py:6
 msgid "403 error"
@@ -1216,7 +1239,7 @@
 
 #: .\templates\403.html.py:9
 msgid "You don't have the right permission to access this page"
-msgstr "Vous n'avez pas l'autorisation d'accès à cette page."
+msgstr "Vous n'avez pas le droit d'accéder à cette page"
 
 #: .\templates\404.html.py:7
 msgid "404 error"
@@ -1224,7 +1247,7 @@
 
 #: .\templates\404.html.py:10
 msgid "Sorry, we couldn't find your page"
-msgstr "Désolé, votre page est introuvable"
+msgstr "Désolé, nous trouvons pas cette page"
 
 #: .\templates\admin\cms_change_form.html.py:30
 msgid "Approve page deletion"
@@ -1244,6 +1267,7 @@
 msgstr "Effacer la requête d'affacement"
 
 #: .\templates\admin\cms_change_form.html.py:52
+#, fuzzy
 msgid "Approve delete"
 msgstr "Accepter l'effacement"
 
@@ -1286,7 +1310,7 @@
 #: .\templates\admin\cms_change_form.html.py:108
 #: .\templates\admin\cms_change_form.html.py:120
 msgid "Loading..."
-msgstr "Chargement..."
+msgstr "Chargement"
 
 #: .\templates\admin\cms_change_form.html.py:119
 msgid "Page states"
@@ -1354,9 +1378,9 @@
 #: .\templates\admin\index.html.py:19
 #: .\templates\admin\page_app_index.html.py:10
 #: .\templates\admin\page_index.html.py:19
-#, python-format
+#, fuzzy, python-format
 msgid "%(name)s"
-msgstr "%(name)s"
+msgstr "Nom"
 
 #: .\templates\admin\index.html.py:29
 #: .\templates\admin\page_change_form.html.py:20
@@ -1365,6 +1389,7 @@
 msgstr "Ajouter"
 
 #: .\templates\admin\index.html.py:35 .\templates\admin\page_index.html.py:35
+#, fuzzy
 msgid "Change"
 msgstr "modifié par"
 
@@ -1377,16 +1402,18 @@
 msgstr "Actions récentes"
 
 #: .\templates\admin\index.html.py:73 .\templates\admin\page_index.html.py:54
+#, fuzzy
 msgid "My Actions"
-msgstr "Mes actions"
+msgstr "Plus d'options"
 
 #: .\templates\admin\index.html.py:77 .\templates\admin\page_index.html.py:58
 msgid "None available"
 msgstr "Aucune disponible"
 
 #: .\templates\admin\index.html.py:91 .\templates\admin\page_index.html.py:72
+#, fuzzy
 msgid "Unknown content"
-msgstr "Contenu inconnu"
+msgstr "Créer un nouveau contenu"
 
 #: .\templates\admin\page_base.html.py:20
 #: .\templates\admin\page_index.html.py:11
@@ -1394,16 +1421,18 @@
 msgstr "Pages"
 
 #: .\templates\admin\page_base_site.html.py:7
+#, fuzzy
 msgid "Django administration"
-msgstr "Administration de Django"
+msgstr "Administration Django"
 
 #: .\templates\admin\page_login.html.py:8
 msgid "Connexion"
 msgstr "Connexion"
 
 #: .\templates\admin\page_login.html.py:20
+#, fuzzy
 msgid "Username:"
-msgstr "Nom de utilisateur :"
+msgstr "Nom d'utilisateur :"
 
 #: .\templates\admin\page_login.html.py:24
 msgid "Password:"
@@ -1411,15 +1440,17 @@
 
 #: .\templates\admin\page_login.html.py:29
 #: .\user\templates\registration\login.html.py:40
+#, fuzzy
 msgid "Create an account"
-msgstr "Créer un compte"
+msgstr "Créer un nouveau compte"
 
 #: .\templates\admin\page_login.html.py:30
 #: .\user\templates\registration\login.html.py:41
 msgid "Forget password?"
-msgstr "mot de pass oublié ?"
+msgstr "Mot de passe oublié ?"
 
 #: .\templates\cms\admin\cms\page\change_form.html.py:11
+#, fuzzy
 msgid "Documentation"
 msgstr "Documentation"
 
@@ -1429,7 +1460,7 @@
 
 #: .\templates\cms\admin\cms\page\change_form.html.py:42
 msgid "Ordering"
-msgstr "Ordre"
+msgstr "Trier"
 
 #: .\templates\cms\admin\cms\page\change_form.html.py:45
 msgid "Order:"
@@ -1437,7 +1468,7 @@
 
 #: .\templates\ldt\ldt_base.html.py:87
 msgid "header_title"
-msgstr "Plateforme&nbsp;Ldt"
+msgstr "Plateforme Ldt"
 
 #: .\templates\ldt\ldt_base.html.py:91
 msgid "Link to admin"
@@ -1457,15 +1488,16 @@
 msgstr "Modification du profil"
 
 #: .\templates\ldt\ldt_base.html.py:115 .\templates\ldt\ldt_base.html.py:116
+#, fuzzy
 msgid "home"
-msgstr "accueil"
+msgstr "Accueil"
 
 #: .\templates\ldt\ldt_base.html.py:149
 msgid "Version number"
-msgstr "Numéro de version"
+msgstr "numéro de version"
 
 #: .\templates\ldt\ldt_base.html.py:149
-#, python-format
+#, fuzzy, python-format
 msgid " web %(WEB_VERSION)s | platform %(VERSION)s"
 msgstr "web v%(WEB_VERSION)s | platform v%(VERSION)s "
 
@@ -1474,6 +1506,7 @@
 msgstr "Plateforme Ldt"
 
 #: .\text\models.py:14
+#, fuzzy
 msgid "annotation.external_id"
 msgstr "id externe"
 
@@ -1495,31 +1528,36 @@
 
 #: .\text\models.py:19
 msgid "annotation.text"
-msgstr "texte d'annotation"
+msgstr "texte"
 
 #: .\text\models.py:20
+#, fuzzy
 msgid "annotation.color"
-msgstr "couleur d'annotation"
+msgstr "couleur"
 
 #: .\text\models.py:21
+#, fuzzy
 msgid "creator.title"
 msgstr "titre"
 
 #: .\text\models.py:22
+#, fuzzy
 msgid "contributor.title"
 msgstr "titre"
 
 #: .\text\models.py:23
+#, fuzzy
 msgid "annotation.creation_date"
 msgstr "date de création"
 
 #: .\text\models.py:24
+#, fuzzy
 msgid "annotation.update_date"
 msgstr "Date de maj"
 
 #: .\user\admin.py:34
 msgid "User details"
-msgstr "Détail utilisateur"
+msgstr "Détails utilisateur"
 
 #: .\user\admin.py:35
 msgid "Groups"
@@ -1541,8 +1579,9 @@
 
 #: .\user\forms.py:29 .\user\templates\ldt\user\change_password.html.py:50
 #: .\user\templates\ldt\user\change_profile.html.py:131
+#, fuzzy
 msgid "New password confirmation"
-msgstr "Confirmation du nouveau mot de passe"
+msgstr "Confirmation de base"
 
 #: .\user\forms.py:58 .\user\forms.py:59
 msgid "E-mail"
@@ -1557,6 +1596,7 @@
 msgstr "Prénom"
 
 #: .\user\forms.py:82
+#, fuzzy
 msgid "Last name"
 msgstr "Nom"
 
@@ -1571,7 +1611,7 @@
 #: .\user\forms.py:134
 #, python-format
 msgid "Image size is limited to %s"
-msgstr "La taille de l'image est limitée à %s"
+msgstr "La taille de l'image à limitée à %s"
 
 #: .\user\views.py:26
 msgid "Your profile has been updated."
@@ -1579,11 +1619,11 @@
 
 #: .\user\views.py:49
 msgid "Your password has been updated."
-msgstr "Votre mot de passe a été changé."
+msgstr "Votre mot de passe a été mis à jour"
 
 #: .\user\views.py:73
 msgid "Your profile picture has been updated."
-msgstr "Votre image de profil a été modifiée"
+msgstr "Votre image de profil a été mise à jour"
 
 #: .\user\views.py:95 .\user\templates\registration\login.html.py:25
 msgid "Sorry, that's not a valid username or password."
@@ -1606,29 +1646,29 @@
 
 #: .\user\templates\ldt\user\change_password.html.py:61
 msgid "Your new password has been saved."
-msgstr "Votre mot de passe a été changé."
+msgstr "Votre nouveau mot de passe a été souvegardé"
 
 #: .\user\templates\ldt\user\change_profile.html.py:19
 msgid "Invalid extension ! Your file has to be JPG, JPEG or PNG."
-msgstr "extension invalide ! votre fichier doit être JPG, JPEG ou PNG"
+msgstr "Extension invalide ! votre fichier doit être JPG, JPEG ou PNG"
 
 #: .\user\templates\ldt\user\change_profile.html.py:43
 msgid "Username"
-msgstr "Nom"
+msgstr "Nom d'utilisateur"
 
 #: .\user\templates\ldt\user\change_profile.html.py:70
 msgid "Email"
-msgstr "E-mail"
+msgstr "Email"
 
 #: .\user\templates\ldt\user\change_profile.html.py:175
 msgid "Profile picture change"
-msgstr "Modification de l'image de profil"
+msgstr "Image de profil"
 
 #: .\user\templates\ldt\user\login_form.html.py:33
 #: .\user\templates\registration\password_change_done.html.py:7
 #: .\user\templates\registration\password_change_form.html.py:13
 msgid "Profiles"
-msgstr "Les profils"
+msgstr "Profils"
 
 #: .\user\templates\ldt\user\login_form.html.py:51
 msgid "create account"
@@ -1644,6 +1684,7 @@
 msgstr "Ce champs est obligatoire"
 
 #: .\user\templates\ldt\user\login_form.html.py:69
+#, fuzzy
 msgid "reset password"
 msgstr "Réinitialiser le mot de passe"
 
@@ -1658,76 +1699,77 @@
 
 #: .\user\templates\registration\activate.html.py:12
 msgid "You have activated your account"
-msgstr "Vous avez bien activé votre compte."
+msgstr "Vous avez activé votre compte"
 
 #: .\user\templates\registration\activate.html.py:13
 msgid "Go back to login page"
-msgstr "Retourner à la page de connexion"
+msgstr "Retour à la page de login"
 
 #: .\user\templates\registration\activation_complete.html.py:4
 #: .\user\templates\registration\registration_complete.html.py:8
 msgid "Sign up successfully"
-msgstr "Création de compte avec succès"
+msgstr "Succès"
 
 #: .\user\templates\registration\activation_complete.html.py:6
 msgid "activation completed"
-msgstr "Activation terminée"
+msgstr "Activation complète"
 
 #: .\user\templates\registration\logged_out.html.py:8
 msgid "Thanks for spending some quality time with the Web site today."
-msgstr "Merci de votre visite."
+msgstr ""
 
 #: .\user\templates\registration\logged_out.html.py:10
+#, fuzzy
 msgid "Log in again"
 msgstr "Se reconnecter"
 
 #: .\user\templates\registration\login.html.py:47
 msgid "login"
-msgstr "Connexion"
+msgstr "login"
 
 #: .\user\templates\registration\password_change_done.html.py:3
 #: .\user\templates\registration\password_change_done.html.py:11
 msgid "password change successful"
-msgstr "Changement de mot de passe réussi"
+msgstr "Modification de mot de passe réussi"
 
 #: .\user\templates\registration\password_change_done.html.py:8
 msgid "password change"
-msgstr "Changement de mot de passe"
+msgstr "Modification de mot de passe"
 
 #: .\user\templates\registration\password_change_done.html.py:14
 msgid "Your password has been changed."
-msgstr "Votre mot de passe a été changé."
+msgstr "Votre mot de passe a été modifié"
 
 #: .\user\templates\registration\password_change_done.html.py:15
 msgid "Go back to profiles"
-msgstr "Retourner à la page de mon profil"
+msgstr "Retour aux profiles"
 
 #: .\user\templates\registration\password_change_form.html.py:20
 msgid ""
 "Please enter your old password, for security's sake, and then enter your new "
 "password twice so we can verify you typed it in correctly."
 msgstr ""
-"Par sécurité, veuillez enter votre ancien mot de passe puis le nouveau a "
-"deux reprise afin de savoir si vous l'avez taper correctement "
+"Par sécurité, veuillez enter votre ancien mot de passe puis le nouveau à "
+"deux reprise afin de savoir si vous l'avez tapé correctement"
 
 #: .\user\templates\registration\password_change_form.html.py:26
 msgid "Old password:"
-msgstr "Ancien mot de passe :"
+msgstr "Ancien mot de passe"
 
 #: .\user\templates\registration\password_change_form.html.py:32
 #: .\user\templates\registration\password_reset_confirm.html.py:19
 msgid "New password:"
-msgstr "Nouveau mot de passe :"
+msgstr "Nouveau mot de passe"
 
 #: .\user\templates\registration\password_change_form.html.py:38
 #: .\user\templates\registration\password_reset_confirm.html.py:21
 msgid "Confirm password:"
-msgstr "Confirmer le mot de passe :"
+msgstr "Confirmer le mot de passe"
 
 #: .\user\templates\registration\password_change_form.html.py:44
 #: .\user\templates\registration\password_reset_confirm.html.py:22
 msgid "Change my password"
-msgstr "Modifier mon mot de passe"
+msgstr "Modifier le mot de passe"
 
 #: .\user\templates\registration\password_reset_complete.html.py:6
 #: .\user\templates\registration\password_reset_confirm.html.py:6
@@ -1753,11 +1795,11 @@
 "Please enter your new password twice so we can verify you typed it in "
 "correctly."
 msgstr ""
-"veuillez enter votre nouveau mot de pass deux fois afin de le vérifier."
+"Veuillez entrer votre nouveau mot de passe deux fois afin de le vérifier."
 
 #: .\user\templates\registration\password_reset_confirm.html.py:27
 msgid "Password reset unsuccessful"
-msgstr "Reinitialisation du mot de pass a échoué"
+msgstr "La réinitialisation du mot de passe a échoué"
 
 #: .\user\templates\registration\password_reset_confirm.html.py:29
 msgid ""
@@ -1783,7 +1825,7 @@
 #: .\user\templates\registration\password_reset_email.html.py:2
 msgid "You're receiving this e-mail because you requested a password reset"
 msgstr ""
-"Vous recevez ce mail car vous avez demander la réinitialisation du mot de "
+"Vous recevez ce mail car vous avez demandé la réinitialisation du mot de "
 "passe"
 
 #: .\user\templates\registration\password_reset_email.html.py:3
@@ -1857,24 +1899,3 @@
 msgstr ""
 "Nous vous avons envoyé par courriel les instructions pour activer le compte "
 "à l'adresse que vous avez indiquée. Vous devriez le recevoir rapidement."
-
-#~ msgid "Content creation failure"
-#~ msgstr "Echec lors de la creation du contenu"
-
-#~ msgid "Commit of the content creation failed"
-#~ msgstr "Echec lors du commit de la creation du contenu"
-
-#~ msgid "Content deletion failure"
-#~ msgstr "Echec lors de la suppression du contenu"
-
-#~ msgid "Commit of the content deletion failed"
-#~ msgstr "Echec lors du commit de la suppression du contenu"
-
-#~ msgid "Error 500"
-#~ msgstr "Erreur 500"
-
-#~ msgid "Internal server error"
-#~ msgstr "Erreur interne du serveur"
-
-#~ msgid "clik here to see the project content"
-#~ msgstr "cliquer ici pour voir le contenu du projet"
--- a/src/ldt/ldt/management/commands/initsitedomain.py	Tue Feb 12 17:29:41 2013 +0100
+++ b/src/ldt/ldt/management/commands/initsitedomain.py	Tue Feb 12 17:30:41 2013 +0100
@@ -1,8 +1,5 @@
 from django.core.management.base import BaseCommand
-from ldt.ldt_utils.models import Content, Project
-from ldt.ldt_utils.contentindexer import ContentIndexer, ProjectIndexer
 from django.conf import settings
-from django.db import models
 from django.contrib.sites.models import Site
 
 class Command(BaseCommand):
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/ldt/ldt/management/commands/setprojectldtiri.py	Tue Feb 12 17:30:41 2013 +0100
@@ -0,0 +1,33 @@
+from django.core.management.base import BaseCommand
+from ldt.ldt_utils.models import Project
+from ldt.utils.projectldt_parser import relative_src_xml
+import lxml.etree
+from ..utils import show_progress
+
+class Command(BaseCommand):
+    help = 'set the .iri src in relative url'
+    
+    def handle(self, *args, **options):
+        
+        writer = None
+        
+        project_list = list(Project.objects.all())
+        
+        for i,p in enumerate(project_list): #we check all the project in the database
+            
+            writer = show_progress(i+1, len(project_list), "Processing project %s" % p.title, 80, writer)
+            no_more_media = False
+            modif = False
+            try : 
+                iri = lxml.etree.fromstring(p.ldt)
+            except :
+                iri = None
+                p.delete()
+            if iri is not None :
+                new_ldt, modif, no_more_media = relative_src_xml(iri)
+                if modif and not no_more_media:
+                    new_ldt = lxml.etree.tostring(new_ldt, pretty_print=True)
+                    p.ldt= new_ldt #we write the the new xml 
+                    p.save(must_reindex=False)
+                if no_more_media :
+                    p.delete()
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/ldt/ldt/management/commands/synciri.py	Tue Feb 12 17:30:41 2013 +0100
@@ -0,0 +1,21 @@
+# -*- coding: utf-8 -*-
+'''
+Created on Jan 22, 2013
+
+@author: ymh
+'''
+
+from django.core.management.base import NoArgsCommand
+from ..utils import show_progress
+from ldt.ldt_utils.models import Content
+
+class Command(NoArgsCommand):
+    
+    def handle_noargs(self, **options):
+        
+        content_list = list(Content.objects.all())
+        writer = None
+        for i,c in enumerate(content_list):
+            writer = show_progress(i+1, len(content_list), "Processing content %s" % c.title, 80, writer)
+            c.sync_iri_file()
+        
\ No newline at end of file
--- a/src/ldt/ldt/security/utils.py	Tue Feb 12 17:29:41 2013 +0100
+++ b/src/ldt/ldt/security/utils.py	Tue Feb 12 17:30:41 2013 +0100
@@ -5,6 +5,9 @@
 from cache import get_cached_userlist, cached_assign
 from ldt.security import change_security
 import types
+import logging
+
+logger = logging.getLogger(__name__)
   
 def unprotect_instance(instance):
     if hasattr(instance, 'old_save'):
@@ -27,24 +30,28 @@
     cls = ContentType.objects.get(model='content')
     cls = cls.model_class()
     
+    m_cls = ContentType.objects.get(model='media')
+    m_cls = m_cls.model_class()
+    
+    content_ids = xml.xpath('/iri/medias/media/@id')
+    contents = dict( [(c.iri_id, c) for c in cls.safe_objects.filter(iri_id__in=content_ids).select_related("media_obj")])
+    
+    medias = dict([(m.id,m) for m in m_cls.safe_objects.filter(id__in=[c.media_obj.id for c in contents.values()])])
+            
     for elem in xml.xpath('/iri/medias/media'):
-        content = cls.safe_objects.filter(iri_id=elem.get('id'))
-        if content and use_forbidden_url(content[0]) :
+        content = contents.get(elem.get('id'), None)
+        if content and (content.media_obj and content.media_obj.id not in medias) :
             elem.set('video', settings.FORBIDDEN_STREAM_URL)
     return xml
 
 def use_forbidden_url(content):
-    c_cls = ContentType.objects.get(model='content')
-    c_cls = c_cls.model_class()
     m_cls = ContentType.objects.get(model='media')
     m_cls = m_cls.model_class()
     
-    new_content = c_cls.safe_objects.filter(iri_id=content.iri_id)
-    if new_content:
-        if new_content[0].media_obj:
-            media = m_cls.safe_objects.filter(id=new_content[0].media_obj.id)
-            if not media:
-                return True
+    if content.media_obj:
+        media = m_cls.safe_objects.filter(id=content.media_obj.id)
+        if not media:
+            return True
     return False
 
 def add_change_attr(user, obj_list):
--- a/src/ldt/ldt/static/ldt/css/ldtform.css	Tue Feb 12 17:29:41 2013 +0100
+++ b/src/ldt/ldt/static/ldt/css/ldtform.css	Tue Feb 12 17:30:41 2013 +0100
@@ -1,10 +1,26 @@
 @charset "UTF-8";
 
+input, textarea, select, .form-row p {
+    margin: 2px 0;
+    padding: 2px 3px;
+    vertical-align: middle;
+    font-family: "Lucida Grande", Verdana, Arial, sans-serif;
+    font-weight: normal;
+    font-size: 11px;
+}
+
+textarea {
+    vertical-align: top !important;
+}
+
+input[type=text], input[type=password], textarea, select, .vTextField {
+    border: 1px solid #ccc;
+}
 body {
 	min-width: 0;
 }
 
-#add_content, #add_contribution, #add_group {
+#add_contribution, #add_group {
 	padding: 10px;	
 }
 
--- a/src/ldt/ldt/static/ldt/js/embed_popup.js	Tue Feb 12 17:29:41 2013 +0100
+++ b/src/ldt/ldt/static/ldt/js/embed_popup.js	Tue Feb 12 17:30:41 2013 +0100
@@ -40,6 +40,8 @@
 	$j("#sparkline_fill_color").val("#aeaeb8");
 	var type_embed=document.getElementById("type_embed_div");
 	type_embed.checked=true;
+	var autostart_val = document.getElementById("autostart_checkbox");
+	autostart_val.checked = true;
 	$j("#createannotation_options").toggle(false);
 	mode1();
 	
@@ -194,6 +196,7 @@
 
 function generate_widget_code(){
 	var annotationslist_val=document.getElementById('annotations_list_checkbox');
+	var autostart_val = document.getElementById('autostart_checkbox');
 	var slideshare_val=document.getElementById('slideshare_checkbox');
 	var social_val=document.getElementById('social_checkbox');
 	var annotation_val=document.getElementById('annotation_checkbox');
@@ -225,9 +228,17 @@
 	}
 	
 	widget_code+='\
-			height: '+player_height_val+',\n\
+			height: '+player_height_val+',\n';
+	if (autostart_val.checked){
+		widget_code+='\
 	        autostart: true\n\
 	    }';
+	}
+	else{
+		widget_code+='\
+	        autostart: false\n\
+	    }';
+	}
 	if (polemic_val.checked){	
 		defaultcolor= $j("#polemic_default_color").val();
 		foundcolor=$j("#polemic_found_color").val();
@@ -640,6 +651,7 @@
 
 function generate_iframeUrl(){
 	var createannotation_val=document.getElementById('createannotation_checkbox');
+	var autostart_val = document.getElementById('autostart_checkbox');
 	var annotationslist_val=document.getElementById('annotations_list_checkbox');
 	var slideshare_val=document.getElementById('slideshare_checkbox');
 	var social_val=document.getElementById('social_checkbox');
@@ -655,7 +667,9 @@
 		iframeUrl+="&player_height="+$j("#player_height").val();
 	if ($j("#player_width").val()!=550)
 		iframeUrl+="&player_width="+$j("#player_width").val();
-		
+	if(!autostart_val.checked){
+		iframeUrl+="&autostart=False";
+	}	
 	if(createannotation_val.checked){
 		iframeUrl+="&createannotation=True";
 		var show_mic_record_val = document.getElementById('show_mic_record_checkbox');
--- a/src/ldt/ldt/static/ldt/js/popcorn-complete.min.js	Tue Feb 12 17:29:41 2013 +0100
+++ b/src/ldt/ldt/static/ldt/js/popcorn-complete.min.js	Tue Feb 12 17:30:41 2013 +0100
@@ -1,200 +1,160 @@
 /*
- * popcorn.js version 1.2
+ * popcorn.js version 1.3
  * http://popcornjs.org
  *
  * Copyright 2011, Mozilla Foundation
  * Licensed under the MIT license
  */
 
-(function(g,b){function d(e,m){return function(){if(n.plugin.debug)return e.apply(this,arguments);try{return e.apply(this,arguments)}catch(q){n.plugin.errors.push({plugin:m,thrown:q,source:e.toString()});this.emit("error",n.plugin.errors)}}}if(b.addEventListener){var a=Array.prototype,c=Object.prototype,f=a.forEach,h=a.slice,p=c.hasOwnProperty,o=c.toString,l=g.Popcorn,i=/^(#([\w\-\_\.]+))$/,r=[],k=false,j={events:{hash:{},apis:{}}},v=function(){return g.requestAnimationFrame||g.webkitRequestAnimationFrame||
-g.mozRequestAnimationFrame||g.oRequestAnimationFrame||g.msRequestAnimationFrame||function(e){g.setTimeout(e,16)}}(),w=function(e){var m=e.media.currentTime,q=e.options.frameAnimation,s=e.data.disabled,t=e.data.trackEvents,u=t.animating,x=t.startIndex,A=n.registryByName,B=0,D,E;for(x=Math.min(x+1,t.byStart.length-2);x>0&&t.byStart[x];){B=t.byStart[x];E=(D=B._natives)&&D.type;if(!D||A[E]||e[E])if(B.start<=m&&B.end>m&&s.indexOf(E)===-1){if(!B._running){B._running=true;D.start.call(e,null,B);q&&B&&B._running&&
-B.natives.frame&&D.frame.call(e,null,B,m)}}else if(B._running===true){B._running=false;D.end.call(e,null,B);if(q&&B._natives.frame){B=u.indexOf(B);B>=0&&u.splice(B,1)}}x--}},n=function(e,m){return new n.p.init(e,m||null)};n.version="1.2";n.isSupported=true;n.instances=[];n.p=n.prototype={init:function(e,m){var q,s=this;if(typeof e==="function")if(b.readyState==="complete")e(b,n);else{r.push(e);if(!k){k=true;var t=function(){b.removeEventListener("DOMContentLoaded",t,false);for(var x=0,A=r.length;x<
-A;x++)r[x].call(b,n);r=null};b.addEventListener("DOMContentLoaded",t,false)}}else{this.media=(q=i.exec(e))&&q.length&&q[2]?b.getElementById(q[2]):e;this[this.media.nodeName&&this.media.nodeName.toLowerCase()||"video"]=this.media;n.instances.push(this);this.options=m||{};this.isDestroyed=false;this.data={timeUpdate:n.nop,disabled:[],events:{},hooks:{},history:[],state:{volume:this.media.volume},trackRefs:{},trackEvents:{byStart:[{start:-1,end:-1}],byEnd:[{start:-1,end:-1}],animating:[],startIndex:0,
-endIndex:0,previousUpdateTime:-1}};var u=function(){s.media.removeEventListener("loadeddata",u,false);var x;x=s.media.duration;x=x!=x?Number.MAX_VALUE:x+1;n.addTrackEvent(s,{start:x,end:x});if(s.options.frameAnimation){s.data.timeUpdate=function(){n.timeUpdate(s,{});s.emit("timeupdate");!s.isDestroyed&&v(s.data.timeUpdate)};!s.isDestroyed&&v(s.data.timeUpdate)}else{s.data.timeUpdate=function(A){n.timeUpdate(s,A)};s.isDestroyed||s.media.addEventListener("timeupdate",s.data.timeUpdate,false)}};s.media.readyState>=
-2?u():s.media.addEventListener("loadeddata",u,false);return this}}};n.p.init.prototype=n.p;n.forEach=function(e,m,q){if(!e||!m)return{};q=q||this;var s,t;if(f&&e.forEach===f)return e.forEach(m,q);if(o.call(e)==="[object NodeList]"){s=0;for(t=e.length;s<t;s++)m.call(q,e[s],s,e);return e}for(s in e)p.call(e,s)&&m.call(q,e[s],s,e);return e};n.extend=function(e){var m=h.call(arguments,1);n.forEach(m,function(q){for(var s in q)e[s]=q[s]});return e};n.extend(n,{noConflict:function(e){if(e)g.Popcorn=l;return n},
-error:function(e){throw Error(e);},guid:function(e){n.guid.counter++;return(e?e:"")+(+new Date+n.guid.counter)},sizeOf:function(e){var m=0,q;for(q in e)m++;return m},isArray:Array.isArray||function(e){return o.call(e)==="[object Array]"},nop:function(){},position:function(e){e=e.getBoundingClientRect();var m={},q=b.documentElement,s=b.body,t,u,x;t=q.clientTop||s.clientTop||0;u=q.clientLeft||s.clientLeft||0;x=g.pageYOffset&&q.scrollTop||s.scrollTop;q=g.pageXOffset&&q.scrollLeft||s.scrollLeft;t=Math.ceil(e.top+
-x-t);u=Math.ceil(e.left+q-u);for(var A in e)m[A]=Math.round(e[A]);return n.extend({},m,{top:t,left:u})},disable:function(e,m){var q=e.data.disabled;q.indexOf(m)===-1&&q.push(m);w(e);return e},enable:function(e,m){var q=e.data.disabled,s=q.indexOf(m);s>-1&&q.splice(s,1);w(e);return e},destroy:function(e){var m=e.data.events,q,s,t;for(s in m){q=m[s];for(t in q)delete q[t];m[s]=null}if(!e.isDestroyed){e.data.timeUpdate&&e.media.removeEventListener("timeupdate",e.data.timeUpdate,false);e.isDestroyed=
-true}}});n.guid.counter=1;n.extend(n.p,function(){var e={};n.forEach("load play pause currentTime playbackRate volume duration preload playbackRate autoplay loop controls muted buffered readyState seeking paused played seekable ended".split(/\s+/g),function(m){e[m]=function(q){if(typeof this.media[m]==="function"){if(q!=null&&/play|pause/.test(m))this.media.currentTime=n.util.toSeconds(q);this.media[m]();return this}if(q!=null){this.media[m]=q;return this}return this.media[m]}});return e}());n.forEach("enable disable".split(" "),
-function(e){n.p[e]=function(m){return n[e](this,m)}});n.extend(n.p,{roundTime:function(){return-~this.media.currentTime},exec:function(e,m){n.addTrackEvent(this,{start:e,end:e+1,_running:false,_natives:{start:m||n.nop,end:n.nop,type:"cue"}});return this},mute:function(e){e=e==null||e===true?"muted":"unmuted";if(e==="unmuted"){this.media.muted=false;this.media.volume=this.data.state.volume}if(e==="muted"){this.data.state.volume=this.media.volume;this.media.muted=true}this.emit(e);return this},unmute:function(e){return this.mute(e==
-null?false:!e)},position:function(){return n.position(this.media)},toggle:function(e){return n[this.data.disabled.indexOf(e)>-1?"enable":"disable"](this,e)},defaults:function(e,m){if(n.isArray(e)){n.forEach(e,function(q){for(var s in q)this.defaults(s,q[s])},this);return this}if(!this.options.defaults)this.options.defaults={};this.options.defaults[e]||(this.options.defaults[e]={});n.extend(this.options.defaults[e],m);return this}});n.Events={UIEvents:"blur focus focusin focusout load resize scroll unload",
-MouseEvents:"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave click dblclick",Events:"loadstart progress suspend emptied stalled play pause loadedmetadata loadeddata waiting playing canplay canplaythrough seeking seeked timeupdate ended ratechange durationchange volumechange"};n.Events.Natives=n.Events.UIEvents+" "+n.Events.MouseEvents+" "+n.Events.Events;j.events.apiTypes=["UIEvents","MouseEvents","Events"];(function(e,m){for(var q=j.events.apiTypes,s=e.Natives.split(/\s+/g),
-t=0,u=s.length;t<u;t++)m.hash[s[t]]=true;q.forEach(function(x){m.apis[x]={};for(var A=e[x].split(/\s+/g),B=A.length,D=0;D<B;D++)m.apis[x][A[D]]=true})})(n.Events,j.events);n.events={isNative:function(e){return!!j.events.hash[e]},getInterface:function(e){if(!n.events.isNative(e))return false;var m=j.events,q=m.apiTypes;m=m.apis;for(var s=0,t=q.length,u,x;s<t;s++){x=q[s];if(m[x][e]){u=x;break}}return u},all:n.Events.Natives.split(/\s+/g),fn:{trigger:function(e,m){var q;if(this.data.events[e]&&n.sizeOf(this.data.events[e])){if(q=
-n.events.getInterface(e)){q=b.createEvent(q);q.initEvent(e,true,true,g,1);this.media.dispatchEvent(q);return this}n.forEach(this.data.events[e],function(s){s.call(this,m)},this)}return this},listen:function(e,m){var q=this,s=true,t=n.events.hooks[e],u;if(!this.data.events[e]){this.data.events[e]={};s=false}if(t){t.add&&t.add.call(this,{},m);if(t.bind)e=t.bind;if(t.handler){u=m;m=function(x){t.handler.call(q,x,u)}}s=true;if(!this.data.events[e]){this.data.events[e]={};s=false}}this.data.events[e][m.name||
-m.toString()+n.guid()]=m;!s&&n.events.all.indexOf(e)>-1&&this.media.addEventListener(e,function(x){n.forEach(q.data.events[e],function(A){typeof A==="function"&&A.call(q,x)})},false);return this},unlisten:function(e,m){if(this.data.events[e]&&this.data.events[e][m]){delete this.data.events[e][m];return this}this.data.events[e]=null;return this}},hooks:{canplayall:{bind:"canplaythrough",add:function(e,m){var q=false;if(this.media.readyState){m.call(this,e);q=true}this.data.hooks.canplayall={fired:q}},
-handler:function(e,m){if(!this.data.hooks.canplayall.fired){m.call(this,e);this.data.hooks.canplayall.fired=true}}}}};n.forEach([["trigger","emit"],["listen","on"],["unlisten","off"]],function(e){n.p[e[0]]=n.p[e[1]]=n.events.fn[e[0]]});n.addTrackEvent=function(e,m){if(m&&m._natives&&m._natives.type&&e.options.defaults&&e.options.defaults[m._natives.type])m=n.extend({},e.options.defaults[m._natives.type],m);if(m._natives){m._id=!m.id?n.guid(m._natives.type):m.id;e.data.history.push(m._id)}m.start=
-n.util.toSeconds(m.start,e.options.framerate);m.end=n.util.toSeconds(m.end,e.options.framerate);var q=e.data.trackEvents.byStart,s=e.data.trackEvents.byEnd,t;for(t=q.length-1;t>=0;t--)if(m.start>=q[t].start){q.splice(t+1,0,m);break}for(q=s.length-1;q>=0;q--)if(m.end>s[q].end){s.splice(q+1,0,m);break}if(m._natives&&(n.registryByName[m._natives.type]||e[m._natives.type])){s=e.media.currentTime;if(m.end>s&&m.start<=s&&e.data.disabled.indexOf(m._natives.type)===-1){m._running=true;m._natives.start.call(e,
-null,m);if(e.options.frameAnimation&&m._natives.frame){e.data.trackEvents.animating.push(m);m._natives.frame.call(e,null,m,s)}}}t<=e.data.trackEvents.startIndex&&m.start<=e.data.trackEvents.previousUpdateTime&&e.data.trackEvents.startIndex++;q<=e.data.trackEvents.endIndex&&m.end<e.data.trackEvents.previousUpdateTime&&e.data.trackEvents.endIndex++;this.timeUpdate(e,null,true);m._id&&n.addTrackEvent.ref(e,m)};n.addTrackEvent.ref=function(e,m){e.data.trackRefs[m._id]=m;return e};n.removeTrackEvent=function(e,
-m){for(var q,s,t=e.data.history.length,u=e.data.trackEvents.byStart.length,x=0,A=0,B=[],D=[],E=[],z=[];--u>-1;){q=e.data.trackEvents.byStart[x];s=e.data.trackEvents.byEnd[x];if(!q._id){B.push(q);D.push(s)}if(q._id){q._id!==m&&B.push(q);s._id!==m&&D.push(s);if(q._id===m){A=x;q._natives._teardown&&q._natives._teardown.call(e,q)}}x++}u=e.data.trackEvents.animating.length;x=0;if(u)for(;--u>-1;){q=e.data.trackEvents.animating[x];q._id||E.push(q);q._id&&q._id!==m&&E.push(q);x++}A<=e.data.trackEvents.startIndex&&
-e.data.trackEvents.startIndex--;A<=e.data.trackEvents.endIndex&&e.data.trackEvents.endIndex--;e.data.trackEvents.byStart=B;e.data.trackEvents.byEnd=D;e.data.trackEvents.animating=E;for(u=0;u<t;u++)e.data.history[u]!==m&&z.push(e.data.history[u]);e.data.history=z;n.removeTrackEvent.ref(e,m)};n.removeTrackEvent.ref=function(e,m){delete e.data.trackRefs[m];return e};n.getTrackEvents=function(e){var m=[];e=e.data.trackEvents.byStart;for(var q=e.length,s=0,t;s<q;s++){t=e[s];t._id&&m.push(t)}return m};
-n.getTrackEvents.ref=function(e){return e.data.trackRefs};n.getTrackEvent=function(e,m){return e.data.trackRefs[m]};n.getTrackEvent.ref=function(e,m){return e.data.trackRefs[m]};n.getLastTrackEventId=function(e){return e.data.history[e.data.history.length-1]};n.timeUpdate=function(e,m){var q=e.media.currentTime,s=e.data.trackEvents.previousUpdateTime,t=e.data.trackEvents,u=t.animating,x=t.endIndex,A=t.startIndex,B=0,D=t.byStart.length,E=t.byEnd.length,z=n.registryByName,F,H,G;if(s<=q){for(;t.byEnd[x]&&
-t.byEnd[x].end<=q;){F=t.byEnd[x];G=(s=F._natives)&&s.type;if(!s||z[G]||e[G]){if(F._running===true){F._running=false;s.end.call(e,m,F);e.emit("trackend",n.extend({},F,{plugin:G,type:"trackend"}))}x++}else{n.removeTrackEvent(e,F._id);return}}for(;t.byStart[A]&&t.byStart[A].start<=q;){H=t.byStart[A];G=(s=H._natives)&&s.type;if(!s||z[G]||e[G]){if(H.end>q&&H._running===false&&e.data.disabled.indexOf(G)===-1){H._running=true;s.start.call(e,m,H);e.emit("trackstart",n.extend({},H,{plugin:G,type:"trackstart"}));
-e.options.frameAnimation&&H&&H._running&&H._natives.frame&&u.push(H)}A++}else{n.removeTrackEvent(e,H._id);return}}if(e.options.frameAnimation)for(;B<u.length;){z=u[B];if(z._running){z._natives.frame.call(e,m,z,q);B++}else u.splice(B,1)}}else if(s>q){for(;t.byStart[A]&&t.byStart[A].start>q;){H=t.byStart[A];G=(s=H._natives)&&s.type;if(!s||z[G]||e[G]){if(H._running===true){H._running=false;s.end.call(e,m,H);e.emit("trackend",n.extend({},F,{plugin:G,type:"trackend"}))}A--}else{n.removeTrackEvent(e,H._id);
-return}}for(;t.byEnd[x]&&t.byEnd[x].end>q;){F=t.byEnd[x];G=(s=F._natives)&&s.type;if(!s||z[G]||e[G]){if(F.start<=q&&F._running===false&&e.data.disabled.indexOf(G)===-1){F._running=true;s.start.call(e,m,F);e.emit("trackstart",n.extend({},H,{plugin:G,type:"trackstart"}));e.options.frameAnimation&&F&&F._running&&F._natives.frame&&u.push(F)}x--}else{n.removeTrackEvent(e,F._id);return}}if(e.options.frameAnimation)for(;B<u.length;){z=u[B];if(z._running){z._natives.frame.call(e,m,z,q);B++}else u.splice(B,
-1)}}t.endIndex=x;t.startIndex=A;t.previousUpdateTime=q;t.byStart.length<D&&t.startIndex--;t.byEnd.length<E&&t.endIndex--};n.extend(n.p,{getTrackEvents:function(){return n.getTrackEvents.call(null,this)},getTrackEvent:function(e){return n.getTrackEvent.call(null,this,e)},getLastTrackEventId:function(){return n.getLastTrackEventId.call(null,this)},removeTrackEvent:function(e){n.removeTrackEvent.call(null,this,e);return this},removePlugin:function(e){n.removePlugin.call(null,this,e);return this},timeUpdate:function(e){n.timeUpdate.call(null,
-this,e);return this},destroy:function(){n.destroy.call(null,this);return this}});n.manifest={};n.registry=[];n.registryByName={};n.plugin=function(e,m,q){if(n.protect.natives.indexOf(e.toLowerCase())>=0)n.error("'"+e+"' is a protected function name");else{var s=["start","end"],t={},u=typeof m==="function",x=["_setup","_teardown","start","end","frame"],A=function(E,z){E=E||n.nop;z=z||n.nop;return function(){E.apply(this,arguments);z.apply(this,arguments)}};n.manifest[e]=q=q||m.manifest||{};x.forEach(function(E){m[E]=
-d(m[E]||n.nop,e)});var B=function(E,z){if(!z)return this;var F=z._natives={},H="",G;n.extend(F,E);z._natives.type=e;z._running=false;F.start=F.start||F["in"];F.end=F.end||F.out;F._teardown=A(function(){var I=h.call(arguments);I.unshift(null);I[1]._running&&F.end.apply(this,I)},F._teardown);z.compose=z.compose&&z.compose.split(" ")||[];z.effect=z.effect&&z.effect.split(" ")||[];z.compose=z.compose.concat(z.effect);z.compose.forEach(function(I){H=n.compositions[I]||{};x.forEach(function(J){F[J]=A(F[J],
-H[J])})});z._natives.manifest=q;if(!("start"in z))z.start=z["in"]||0;if(!z.end&&z.end!==0)z.end=z.out||Number.MAX_VALUE;if(!p.call(z,"toString"))z.toString=function(){var I=["start: "+z.start,"end: "+z.end,"id: "+(z.id||z._id)];z.target!=null&&I.push("target: "+z.target);return e+" ( "+I.join(", ")+" )"};if(!z.target){G="options"in q&&q.options;z.target=G&&"target"in G&&G.target}z._natives._setup&&z._natives._setup.call(this,z);n.addTrackEvent(this,n.extend(z,z));n.forEach(E,function(I,J){J!=="type"&&
-s.indexOf(J)===-1&&this.on(J,I)},this);return this};n.p[e]=t[e]=function(E){E=n.extend({},this.options.defaults&&this.options.defaults[e]||{},E);return B.call(this,u?m.call(this,E):m,E)};var D={fn:t[e],definition:m,base:m,parents:[],name:e};n.registry.push(n.extend(t,D,{type:e}));n.registryByName[e]=D;return t}};n.plugin.errors=[];n.plugin.debug=false;n.removePlugin=function(e,m){if(!m){m=e;e=n.p;if(n.protect.natives.indexOf(m.toLowerCase())>=0){n.error("'"+m+"' is a protected function name");return}var q=
-n.registry.length,s;for(s=0;s<q;s++)if(n.registry[s].name===m){n.registry.splice(s,1);delete n.registryByName[m];delete n.manifest[m];delete e[m];return}}q=e.data.trackEvents.byStart;s=e.data.trackEvents.byEnd;var t=e.data.trackEvents.animating,u,x;u=0;for(x=q.length;u<x;u++){if(q[u]&&q[u]._natives&&q[u]._natives.type===m){q[u]._natives._teardown&&q[u]._natives._teardown.call(e,q[u]);q.splice(u,1);u--;x--;if(e.data.trackEvents.startIndex<=u){e.data.trackEvents.startIndex--;e.data.trackEvents.endIndex--}}s[u]&&
-s[u]._natives&&s[u]._natives.type===m&&s.splice(u,1)}u=0;for(x=t.length;u<x;u++)if(t[u]&&t[u]._natives&&t[u]._natives.type===m){t.splice(u,1);u--;x--}};n.compositions={};n.compose=function(e,m,q){n.manifest[e]=q||m.manifest||{};n.compositions[e]=m};n.plugin.effect=n.effect=n.compose;var y=/\?/,C={url:"",data:"",dataType:"",success:n.nop,type:"GET",async:true,xhr:function(){return new g.XMLHttpRequest}};n.xhr=function(e){e.dataType=e.dataType&&e.dataType.toLowerCase()||null;if(e.dataType&&(e.dataType===
-"jsonp"||e.dataType==="script"))n.xhr.getJSONP(e.url,e.success,e.dataType==="script");else{e=n.extend({},C,e);e.ajax=e.xhr();if(e.ajax){if(e.type==="GET"&&e.data){e.url+=(y.test(e.url)?"&":"?")+e.data;e.data=null}e.ajax.open(e.type,e.url,e.async);e.ajax.send(e.data||null);return n.xhr.httpData(e)}}};n.xhr.httpData=function(e){var m,q=null,s,t=null;e.ajax.onreadystatechange=function(){if(e.ajax.readyState===4){try{q=JSON.parse(e.ajax.responseText)}catch(u){}m={xml:e.ajax.responseXML,text:e.ajax.responseText,
-json:q};if(!m.xml||!m.xml.documentElement){m.xml=null;try{s=new DOMParser;t=s.parseFromString(e.ajax.responseText,"text/xml");if(!t.getElementsByTagName("parsererror").length)m.xml=t}catch(x){}}if(e.dataType)m=m[e.dataType];e.success.call(e.ajax,m)}};return m};n.xhr.getJSONP=function(e,m,q){var s=b.head||b.getElementsByTagName("head")[0]||b.documentElement,t=b.createElement("script"),u=e.split("?")[1],x=false,A=[],B,D;if(u&&!q)A=u.split("&");if(A.length)D=A[A.length-1].split("=");B=A.length?D[1]?
-D[1]:D[0]:"jsonp";if(!u&&!q)e+="?callback="+B;if(B&&!q){if(window[B])B=n.guid(B);window[B]=function(E){m&&m(E);x=true};e=e.replace(D.join("="),D[0]+"="+B)}t.addEventListener("load",function(){q&&m&&m();x&&delete window[B];s.removeChild(t)},false);t.src=e;s.insertBefore(t,s.firstChild)};n.getJSONP=n.xhr.getJSONP;n.getScript=n.xhr.getScript=function(e,m){return n.xhr.getJSONP(e,m,true)};n.util={toSeconds:function(e,m){var q=/^([0-9]+:){0,2}[0-9]+([.;][0-9]+)?$/,s,t,u;if(typeof e==="number")return e;
-typeof e==="string"&&!q.test(e)&&n.error("Invalid time format");q=e.split(":");s=q.length-1;t=q[s];if(t.indexOf(";")>-1){t=t.split(";");u=0;if(m&&typeof m==="number")u=parseFloat(t[1],10)/m;q[s]=parseInt(t[0],10)+u}s=q[0];return{1:parseFloat(s,10),2:parseInt(s,10)*60+parseFloat(q[1],10),3:parseInt(s,10)*3600+parseInt(q[1],10)*60+parseFloat(q[2],10)}[q.length||1]}};n.p.cue=n.p.exec;n.protect={natives:function(e){return Object.keys?Object.keys(e):function(m){var q,s=[];for(q in m)p.call(m,q)&&s.push(q);
-return s}(e)}(n.p).map(function(e){return e.toLowerCase()})};n.forEach({listen:"on",unlisten:"off",trigger:"emit",exec:"cue"},function(e,m){var q=n.p[m];n.p[m]=function(){if(typeof console!=="undefined"&&console.warn){console.warn("Deprecated method '"+m+"', "+(e==null?"do not use.":"use '"+e+"' instead."));n.p[m]=q}return n.p[e].apply(this,[].slice.call(arguments))}});g.Popcorn=n}else{g.Popcorn={isSupported:false};for(a="removeInstance addInstance getInstanceById removeInstanceById forEach extend effects error guid sizeOf isArray nop position disable enable destroyaddTrackEvent removeTrackEvent getTrackEvents getTrackEvent getLastTrackEventId timeUpdate plugin removePlugin compose effect xhr getJSONP getScript".split(/\s+/);a.length;)g.Popcorn[a.shift()]=
-function(){}}})(window,window.document);(function(g,b){var d=g.document,a=g.location,c=/:\/\//,f=a.href.replace(a.href.split("/").slice(-1)[0],""),h=function(o,l,i){o=o||0;l=(l||o||0)+1;i=i||1;l=Math.ceil((l-o)/i)||0;var r=0,k=[];for(k.length=l;r<l;){k[r++]=o;o+=i}return k};b.sequence=function(o,l){return new b.sequence.init(o,l)};b.sequence.init=function(o,l){this.parent=d.getElementById(o);this.seqId=b.guid("__sequenced");this.queue=[];this.playlist=[];this.inOuts={ofVideos:[],ofClips:[]};this.dims={width:0,height:0};this.active=0;this.playing=
-this.cycling=false;this.times={last:0};this.events={};var i=this,r=0;b.forEach(l,function(k,j){var v=d.createElement("video");v.preload="auto";v.controls=true;v.style.display=j&&"none"||"";v.id=i.seqId+"-"+j;i.queue.push(v);var w=k["in"],n=k.out;i.inOuts.ofVideos.push({"in":w!==undefined&&w||1,out:n!==undefined&&n||0});i.inOuts.ofVideos[j].out=i.inOuts.ofVideos[j].out||i.inOuts.ofVideos[j]["in"]+2;v.src=!c.test(k.src)?f+k.src:k.src;v.setAttribute("data-sequence-owner",o);v.setAttribute("data-sequence-guid",
-i.seqId);v.setAttribute("data-sequence-id",j);v.setAttribute("data-sequence-clip",[i.inOuts.ofVideos[j]["in"],i.inOuts.ofVideos[j].out].join(":"));i.parent.appendChild(v);i.playlist.push(b("#"+v.id))});i.inOuts.ofVideos.forEach(function(k){k={"in":r,out:r+(k.out-k["in"])};i.inOuts.ofClips.push(k);r=k.out+1});b.forEach(this.queue,function(k,j){function v(){if(!j){i.dims.width=k.videoWidth;i.dims.height=k.videoHeight}k.currentTime=i.inOuts.ofVideos[j]["in"]-0.5;k.removeEventListener("canplaythrough",
-v,false);return true}k.addEventListener("canplaythrough",v,false);k.addEventListener("play",function(){i.playing=true},false);k.addEventListener("pause",function(){i.playing=false},false);k.addEventListener("timeupdate",function(w){w=w.srcElement||w.target;w=+(w.dataset&&w.dataset.sequenceId||w.getAttribute("data-sequence-id"));var n=Math.floor(k.currentTime);if(i.times.last!==n&&w===i.active){i.times.last=n;n===i.inOuts.ofVideos[w].out&&b.sequence.cycle.call(i,w)}},false)});return this};b.sequence.init.prototype=
-b.sequence.prototype;b.sequence.cycle=function(o){this.queue||b.error("Popcorn.sequence.cycle is not a public method");var l=this.queue,i=this.inOuts.ofVideos,r=l[o],k=0,j;if(l[o+1])k=o+1;if(l[o+1]){l=l[k];i=i[k];b.extend(l,{width:this.dims.width,height:this.dims.height});j=this.playlist[k];r.pause();this.active=k;this.times.last=i["in"]-1;j.currentTime(i["in"]);j[k?"play":"pause"]();this.trigger("cycle",{position:{previous:o,current:k}});if(k){r.style.display="none";l.style.display=""}this.cycling=
-false}else this.playlist[o].pause();return this};var p=["timeupdate","play","pause"];b.extend(b.sequence.prototype,{eq:function(o){return this.playlist[o]},remove:function(){this.parent.innerHTML=null},clip:function(o){return this.inOuts.ofVideos[o]},duration:function(){for(var o=0,l=this.inOuts.ofClips,i=0;i<l.length;i++)o+=l[i].out-l[i]["in"]+1;return o-1},play:function(){this.playlist[this.active].play();return this},exec:function(o,l){var i=this.active;this.inOuts.ofClips.forEach(function(r,k){if(o>=
-r["in"]&&o<=r.out)i=k});o+=this.inOuts.ofVideos[i]["in"]-this.inOuts.ofClips[i]["in"];b.addTrackEvent(this.playlist[i],{start:o-1,end:o,_running:false,_natives:{start:l||b.nop,end:b.nop,type:"exec"}});return this},listen:function(o,l){var i=this,r=this.playlist,k=r.length,j=0;if(!l)l=b.nop;if(b.Events.Natives.indexOf(o)>-1)b.forEach(r,function(v){v.listen(o,function(w){w.active=i;if(p.indexOf(o)>-1)l.call(v,w);else++j===k&&l.call(v,w)})});else{this.events[o]||(this.events[o]={});r=l.name||b.guid("__"+
-o);this.events[o][r]=l}return this},unlisten:function(){},trigger:function(o,l){var i=this;if(!(b.Events.Natives.indexOf(o)>-1)){this.events[o]&&b.forEach(this.events[o],function(r){r.call(i,{type:o},l)});return this}}});b.forEach(b.manifest,function(o,l){b.sequence.prototype[l]=function(i){var r={},k=[],j,v,w,n,y;for(j=0;j<this.inOuts.ofClips.length;j++){k=this.inOuts.ofClips[j];v=h(k["in"],k.out);w=v.indexOf(i.start);n=v.indexOf(i.end);if(w>-1)r[j]=b.extend({},k,{start:v[w],clipIdx:w});if(n>-1)r[j]=
-b.extend({},k,{end:v[n],clipIdx:n})}j=Object.keys(r).map(function(e){return+e});k=h(j[0],j[1]);for(j=0;j<k.length;j++){w={};n=k[j];var C=r[n];if(C){y=this.inOuts.ofVideos[n];v=C.clipIdx;y=h(y["in"],y.out);if(C.start){w.start=y[v];w.end=y[y.length-1]}if(C.end){w.start=y[0];w.end=y[v]}}else{w.start=this.inOuts.ofVideos[n]["in"];w.end=this.inOuts.ofVideos[n].out}this.playlist[n][l](b.extend({},i,w))}return this}})})(this,Popcorn);(function(g){document.addEventListener("DOMContentLoaded",function(){var b=document.querySelectorAll("[data-timeline-sources]");g.forEach(b,function(d,a){var c=b[a],f,h,p;if(!c.id)c.id=g.guid("__popcorn");if(c.nodeType&&c.nodeType===1){p=g("#"+c.id);f=(c.getAttribute("data-timeline-sources")||"").split(",");f[0]&&g.forEach(f,function(o){h=o.split("!");if(h.length===1){h=o.match(/(.*)[\/\\]([^\/\\]+\.\w+)$/)[2].split(".");h[0]="parse"+h[1].toUpperCase();h[1]=o}f[0]&&p[h[0]]&&p[h[0]](h[1])});p.autoplay&&
-p.play()}})},false)})(Popcorn);(function(g,b){function d(f){f=typeof f==="string"?f:[f.language,f.region].join("-");var h=f.split("-");return{iso6391:f,language:h[0]||"",region:h[1]||""}}var a=g.navigator,c=d(a.userLanguage||a.language);b.locale={get:function(){return c},set:function(f){c=d(f);b.locale.broadcast();return c},broadcast:function(f){var h=b.instances,p=h.length,o=0,l;for(f=f||"locale:changed";o<p;o++){l=h[o];f in l.data.events&&l.trigger(f)}}}})(this,this.Popcorn);(function(g){var b=Object.prototype.hasOwnProperty;g.parsers={};g.parser=function(d,a,c){if(g.protect.natives.indexOf(d.toLowerCase())>=0)g.error("'"+d+"' is a protected function name");else{if(typeof a==="function"&&!c){c=a;a=""}if(!(typeof c!=="function"||typeof a!=="string")){var f={};f[d]=function(h,p){if(!h)return this;var o=this;g.xhr({url:h,dataType:a,success:function(l){var i,r,k=0;l=c(l).data||[];if(i=l.length){for(;k<i;k++){r=l[k];for(var j in r)b.call(r,j)&&o[j]&&o[j](r[j])}p&&p()}}});
-return this};g.extend(g.p,f);return f}}}})(Popcorn);(function(g){var b=function(a,c){a=a||g.nop;c=c||g.nop;return function(){a.apply(this,arguments);c.apply(this,arguments)}},d=/^(#([\w\-\_\.]+))$/;g.player=function(a,c){if(!g[a]){c=c||{};var f=function(h,p,o){o=o||{};var l=new Date/1E3,i=l,r=0,k=0,j=1,v=false,w={},n=document.getElementById(d.exec(h)&&d.exec(h)[2])||document.getElementById(h)||h,y={};Object.prototype.__defineGetter__||(y=n||document.createElement("div"));for(var C in n)if(!(C in y))if(typeof n[C]==="object")y[C]=n[C];else if(typeof n[C]===
-"function")y[C]=function(m){return"length"in n[m]&&!n[m].call?n[m]:function(){return n[m].apply(n,arguments)}}(C);else g.player.defineProperty(y,C,{get:function(m){return function(){return n[m]}}(C),set:g.nop,configurable:true});var e=function(){l=new Date/1E3;if(!y.paused){y.currentTime+=l-i;y.dispatchEvent("timeupdate");setTimeout(e,10)}i=l};y.play=function(){this.paused=false;if(y.readyState>=4){i=new Date/1E3;y.dispatchEvent("play");e()}};y.pause=function(){this.paused=true;y.dispatchEvent("pause")};
-g.player.defineProperty(y,"currentTime",{get:function(){return r},set:function(m){r=+m;y.dispatchEvent("timeupdate");return r},configurable:true});g.player.defineProperty(y,"volume",{get:function(){return j},set:function(m){j=+m;y.dispatchEvent("volumechange");return j},configurable:true});g.player.defineProperty(y,"muted",{get:function(){return v},set:function(m){v=+m;y.dispatchEvent("volumechange");return v},configurable:true});g.player.defineProperty(y,"readyState",{get:function(){return k},set:function(m){return k=
-m},configurable:true});y.addEventListener=function(m,q){w[m]||(w[m]=[]);w[m].push(q);return q};y.removeEventListener=function(m,q){var s,t=w[m];if(t){for(s=w[m].length-1;s>=0;s--)q===t[s]&&t.splice(s,1);return q}};y.dispatchEvent=function(m){var q,s=m.type;if(!s){s=m;if(m=g.events.getInterface(s)){q=document.createEvent(m);q.initEvent(s,true,true,window,1)}}if(w[s])for(m=w[s].length-1;m>=0;m--)w[s][m].call(this,q,this)};y.src=p||"";y.duration=0;y.paused=true;y.ended=0;o&&o.events&&g.forEach(o.events,
-function(m,q){y.addEventListener(q,m,false)});if(c._canPlayType(n.nodeName,p)!==false)if(c._setup)c._setup.call(y,o);else{y.readyState=4;y.dispatchEvent("loadedmetadata");y.dispatchEvent("loadeddata");y.dispatchEvent("canplaythrough")}else y.dispatchEvent("error");y.addEventListener("loadedmetadata",function(){y.currentTime=r;y.volume=j;y.muted=v});y.addEventListener("loadeddata",function(){!y.paused&&y.play()});h=new g.p.init(y,o);if(c._teardown)h.destroy=b(h.destroy,function(){c._teardown.call(y,
-o)});return h};f.canPlayType=c._canPlayType=c._canPlayType||g.nop;g[a]=g.player.registry[a]=f}};g.player.registry={};g.player.defineProperty=Object.defineProperty||function(a,c,f){a.__defineGetter__(c,f.get||g.nop);a.__defineSetter__(c,f.set||g.nop)};g.smart=function(a,c,f){var h=d.exec(a);h=h&&h.length&&h[2]?document.getElementById(h[2]):a;if(h.nodeType==="VIDEO"&&!c){if(typeof c==="object")f=c;return g(h,f)}for(var p in g.player.registry)if(g.player.registry.hasOwnProperty(p))if(g.player.registry[p].canPlayType(h.nodeName,
-c))return g[p](a,c,f);if(h.nodeType!=="VIDEO"){a=document.createElement("video");h.appendChild(a);h=a}f&&f.events&&f.events.error&&h.addEventListener("error",f.events.error,false);h.src=c;return g(h,f)}})(Popcorn);(function(g){var b=function(d,a){var c=0,f=0,h;g.forEach(a.classes,function(p,o){h=[];if(p==="parent")h[0]=document.querySelectorAll("#"+a.target)[0].parentNode;else h=document.querySelectorAll("#"+a.target+" "+p);c=0;for(f=h.length;c<f;c++)h[c].classList.toggle(o)})};g.compose("applyclass",{manifest:{about:{name:"Popcorn applyclass Effect",version:"0.1",author:"@scottdowne",website:"scottdowne.wordpress.com"},options:{}},_setup:function(d){d.classes={};d.applyclass=d.applyclass||"";for(var a=d.applyclass.replace(/\s/g,
-"").split(","),c=[],f=0,h=a.length;f<h;f++){c=a[f].split(":");if(c[0])d.classes[c[0]]=c[1]||""}},start:b,end:b})})(Popcorn);(function(g){g.plugin("attribution",function(){var b={"cc-by":"data:image/png;base64,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",
-"cc-by-sa":"data:image/png;base64,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",
-"cc-by-nd":"data:image/png;base64,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",
-"cc-by-nc":"data:image/png;base64,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",
-"cc-by-nc-sa":"data:image/png;base64,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",
-"cc-by-nc-nd":"data:image/png;base64,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"},
-d;return{_setup:function(a){var c="",f=a.license&&b[a.license.toLowerCase()];a._container=document.createElement("div");a._container.style.display="none";d=document.getElementById(a.target);if(a.nameofworkurl)c+="<a href='"+a.nameofworkurl+"' target=_blank>";if(a.nameofwork)c+=a.nameofwork;if(a.nameofworkurl)c+="</a>";if(a.copyrightholderurl)c+="<a href='"+a.copyrightholderurl+"' target=_blank>";if(a.copyrightholder)c+=", "+a.copyrightholder;if(a.copyrightholderurl)c+="</a>";if(c==="")c=a.text;if(a.license)if(f)c=
-a.licenseurl?"<a href='"+a.licenseurl+"' target=_blank><img src='"+f+"' border='0'/></a> "+c:"<img src='"+f+"' />"+c;else{c+=", license: ";c+=a.licenseurl?"<a href='"+a.licenseurl+"' target=_blank>"+a.license+"</a> ":a.license}else if(a.licenseurl)c+=", <a href='"+a.licenseurl+"' target=_blank>license</a> ";a._container.innerHTML=c;if(!d&&g.plugin.debug)throw Error("target container doesn't exist");d&&d.appendChild(a._container)},start:function(a,c){c._container.style.display="inline"},end:function(a,
-c){c._container.style.display="none"},_teardown:function(a){(d=document.getElementById(a.target))&&d.removeChild(a._container)}}}(),{about:{name:"Popcorn Attribution Plugin",version:"0.2",author:"@rwaldron",website:"github.com/rwldrn"},options:{start:{elem:"input",type:"text",label:"In"},end:{elem:"input",type:"text",label:"Out"},nameofwork:{elem:"input",type:"text",label:"Name of Work"},nameofworkurl:{elem:"input",type:"url",label:"Url of Work",optional:true},copyrightholder:{elem:"input",type:"text",
-label:"Copyright Holder"},copyrightholderurl:{elem:"input",type:"url",label:"Copyright Holder Url",optional:true},license:{elem:"input",type:"text",label:"License type"},licenseurl:{elem:"input",type:"url",label:"License URL",optional:true},target:"attribution-container"}})})(Popcorn);(function(g){g.plugin("code",function(b){var d=false,a=function(){var c=function(f){return function(h){var p=function(){d&&h();d&&f(p)};p()}};return window.webkitRequestAnimationFrame?c(window.webkitRequestAnimationFrame):window.mozRequestAnimationFrame?c(window.mozRequestAnimationFrame):c(function(f){window.setTimeout(f,16)})}();if(!b.onStart||typeof b.onStart!=="function"){if(g.plugin.debug)throw Error("Popcorn Code Plugin Error: onStart must be a function.");b.onStart=g.nop}if(b.onEnd&&typeof b.onEnd!==
-"function"){if(g.plugin.debug)throw Error("Popcorn Code Plugin Error: onEnd  must be a function.");b.onEnd=undefined}if(b.onFrame&&typeof b.onFrame!=="function"){if(g.plugin.debug)throw Error("Popcorn Code Plugin Error: onFrame  must be a function.");b.onFrame=undefined}return{start:function(c,f){f.onStart(f);if(f.onFrame){d=true;a(f.onFrame,f)}},end:function(c,f){if(f.onFrame)d=false;f.onEnd&&f.onEnd(f)}}},{about:{name:"Popcorn Code Plugin",version:"0.1",author:"David Humphrey (@humphd)",website:"http://vocamus.net/dave"},
-options:{start:{elem:"input",type:"text",label:"In"},end:{elem:"input",type:"text",label:"Out"},onStart:{elem:"input",type:"function",label:"onStart"},onFrame:{elem:"input",type:"function",label:"onFrame",optional:true},onEnd:{elem:"input",type:"function",label:"onEnd"}}})})(Popcorn);(function(g){var b=0;g.plugin("flickr",function(d){var a,c=document.getElementById(d.target),f,h,p,o,l=d.numberofimages||4,i=d.height||"50px",r=d.width||"50px",k=d.padding||"5px",j=d.border||"0px";a=document.createElement("div");a.id="flickr"+b;a.style.width="100%";a.style.height="100%";a.style.display="none";b++;if(!c&&g.plugin.debug)throw Error("flickr target container doesn't exist");c&&c.appendChild(a);var v=function(){if(f)setTimeout(function(){v()},5);else{h="http://api.flickr.com/services/rest/?method=flickr.people.findByUsername&";
-h+="username="+d.username+"&api_key="+d.apikey+"&format=json&jsoncallback=flickr";g.getJSONP(h,function(n){f=n.user.nsid;w()})}},w=function(){h="http://api.flickr.com/services/feeds/photos_public.gne?";if(f)h+="id="+f+"&";if(d.tags)h+="tags="+d.tags+"&";h+="lang=en-us&format=json&jsoncallback=flickr";g.xhr.getJSONP(h,function(n){var y=document.createElement("div");y.innerHTML="<p style='padding:"+k+";'>"+n.title+"<p/>";g.forEach(n.items,function(C,e){if(e<l){p=document.createElement("a");p.setAttribute("href",
-C.link);p.setAttribute("target","_blank");o=document.createElement("img");o.setAttribute("src",C.media.m);o.setAttribute("height",i);o.setAttribute("width",r);o.setAttribute("style","border:"+j+";padding:"+k);p.appendChild(o);y.appendChild(p)}else return false});a.appendChild(y)})};if(d.username&&d.apikey)v();else{f=d.userid;w()}return{start:function(){a.style.display="inline"},end:function(){a.style.display="none"},_teardown:function(n){document.getElementById(n.target)&&document.getElementById(n.target).removeChild(a)}}},
-{about:{name:"Popcorn Flickr Plugin",version:"0.2",author:"Scott Downe, Steven Weerdenburg, Annasob",website:"http://scottdowne.wordpress.com/"},options:{start:{elem:"input",type:"number",label:"In"},end:{elem:"input",type:"number",label:"Out"},userid:{elem:"input",type:"text",label:"UserID",optional:true},tags:{elem:"input",type:"text",label:"Tags"},username:{elem:"input",type:"text",label:"Username",optional:true},apikey:{elem:"input",type:"text",label:"Api_key",optional:true},target:"flickr-container",
-height:{elem:"input",type:"text",label:"Height",optional:true},width:{elem:"input",type:"text",label:"Width",optional:true},padding:{elem:"input",type:"text",label:"Padding",optional:true},border:{elem:"input",type:"text",label:"Border",optional:true},numberofimages:{elem:"input",type:"text",label:"Number of Images"}}})})(Popcorn);(function(g){g.forEach(["footnote","text"],function(b){g.plugin(b,{manifest:{about:{name:"Popcorn "+b+" Plugin",version:"0.2",author:"@annasob, @rwaldron",website:"annasob.wordpress.com"},options:{start:{elem:"input",type:"text",label:"In"},end:{elem:"input",type:"text",label:"Out"},text:{elem:"input",type:"text",label:"Text"},target:b+"-container"}},_setup:function(d){var a=document.getElementById(d.target);d._container=document.createElement("div");d._container.style.display="none";d._container.innerHTML=
-d.text;if(!a&&g.plugin.debug)throw Error("target container doesn't exist");a&&a.appendChild(d._container)},start:function(d,a){a._container.style.display="inline"},end:function(d,a){a._container.style.display="none"},_teardown:function(d){document.getElementById(d.target)&&document.getElementById(d.target).removeChild(d._container)}})})})(Popcorn);(function(g,b){var d=false;g.plugin("facebook",{manifest:{about:{name:"Popcorn Facebook Plugin",version:"0.1",author:"Dan Ventura, Matthew Schranz: @mjschranz",website:"dsventura.blogspot.com, mschranz.wordpress.com"},options:{type:{elem:"select",options:["LIKE","LIKE-BOX","ACTIVITY","FACEPILE","LIVE-STREAM","SEND","COMMENTS"],label:"Type"},target:"facebook-container",start:{elem:"input",type:"number",label:"In"},end:{elem:"input",type:"number",label:"Out"},font:{elem:"input",type:"text",label:"font",
-optional:true},xid:{elem:"input",type:"text",label:"Xid",optional:true},href:{elem:"input",type:"url",label:"Href",optional:true},site:{elem:"input",type:"url",label:"Site",optional:true},height:{elem:"input",type:"text",label:"Height",optional:true},width:{elem:"input",type:"text",label:"Width",optional:true},action:{elem:"select",options:["like","recommend"],label:"Action",optional:true},stream:{elem:"select",options:["false","true"],label:"Stream",optional:true},header:{elem:"select",options:["false",
-"true"],label:"Header",optional:true},layout:{elem:"select",options:["standard","button_count","box_count"],label:"Layout",optional:true},max_rows:{elem:"input",type:"text",label:"Max_rows",optional:true},border_color:{elem:"input",type:"text",label:"Border_color",optional:true},event_app_id:{elem:"input",type:"text",label:"Event_app_id",optional:true},colorscheme:{elem:"select",options:["light","dark"],label:"Colorscheme",optional:true},show_faces:{elem:"select",options:["false","true"],label:"Showfaces",
-optional:true},recommendations:{elem:"select",options:["false","true"],label:"Recommendations",optional:true},always_post_to_friends:{elem:"input",options:["false","true"],label:"Always_post_to_friends",optional:true},num_posts:{elem:"input",type:"text",label:"Number_of_Comments",optional:true}}},_setup:function(a){var c=document.getElementById(a.target),f=a.type;if(!document.getElementById("fb-root")){var h=document.createElement("div");h.setAttribute("id","fb-root");document.body.appendChild(h)}if(!d||
-a.event_app_id){d=true;g.getScript("//connect.facebook.net/en_US/all.js");b.fbAsyncInit=function(){FB.init({appId:a.event_app_id||"",status:true,cookie:true,xfbml:true})}}f=f.toLowerCase();if(!(["like","like-box","activity","facepile","live-stream","send","comments"].indexOf(f)>-1))throw Error("Facebook plugin type was invalid.");a._container=document.createElement("div");a._container.id="facebookdiv-"+g.guid();a._facebookdiv=document.createElement("fb:"+f);a._container.appendChild(a._facebookdiv);
-a._container.style.display="none";f=f==="activity"?"site":"href";a._facebookdiv.setAttribute(f,a[f]||document.URL);f="width height layout show_faces stream header colorscheme maxrows border_color recommendations font always_post_to_friends xid num_posts".split(" ");g.forEach(f,function(p){a[p]!=null&&a._facebookdiv.setAttribute(p,a[p])});if(!c&&g.plugin.debug)throw Error("Facebook target container doesn't exist");c&&c.appendChild(a._container)},start:function(a,c){c._container.style.display=""},end:function(a,
-c){c._container.style.display="none"},_teardown:function(a){var c=document.getElementById(a.target);c&&c.removeChild(a._container)}})})(Popcorn,this);var googleCallback;
-(function(g){var b=1,d=false,a=false,c,f;googleCallback=function(h){if(typeof google!=="undefined"&&google.maps&&google.maps.Geocoder&&google.maps.LatLng){c=new google.maps.Geocoder;a=true}else setTimeout(function(){googleCallback(h)},1)};f=function(){if(document.body){d=true;g.getScript("//maps.google.com/maps/api/js?sensor=false&callback=googleCallback")}else setTimeout(function(){f()},1)};g.plugin("googlemap",function(h){var p,o,l,i=document.getElementById(h.target);d||f();p=document.createElement("div");
-p.id="actualmap"+b;p.style.width="100%";p.style.height="100%";b++;if(!i&&g.plugin.debug)throw Error("target container doesn't exist");i&&i.appendChild(p);var r=function(){if(a)if(h.location)c.geocode({address:h.location},function(k,j){if(j===google.maps.GeocoderStatus.OK){h.lat=k[0].geometry.location.lat();h.lng=k[0].geometry.location.lng();l=new google.maps.LatLng(h.lat,h.lng);o=new google.maps.Map(p,{mapTypeId:google.maps.MapTypeId[h.type]||google.maps.MapTypeId.HYBRID});o.getDiv().style.display=
-"none"}});else{l=new google.maps.LatLng(h.lat,h.lng);o=new google.maps.Map(p,{mapTypeId:google.maps.MapTypeId[h.type]||google.maps.MapTypeId.HYBRID});o.getDiv().style.display="none"}else setTimeout(function(){r()},5)};r();return{start:function(k,j){var v=this,w,n=function(){if(o){o.getDiv().style.display="block";google.maps.event.trigger(o,"resize");o.setCenter(l);if(j.zoom&&typeof j.zoom!=="number")j.zoom=+j.zoom;j.zoom=j.zoom||8;o.setZoom(j.zoom);if(j.heading&&typeof j.heading!=="number")j.heading=
-+j.heading;if(j.pitch&&typeof j.pitch!=="number")j.pitch=+j.pitch;if(j.type==="STREETVIEW"){o.setStreetView(w=new google.maps.StreetViewPanorama(p,{position:l,pov:{heading:j.heading=j.heading||0,pitch:j.pitch=j.pitch||0,zoom:j.zoom}}));var y=function(u,x){var A=google.maps.geometry.spherical.computeHeading;setTimeout(function(){var B=v.media.currentTime;if(typeof j.tween==="object"){for(var D=0,E=u.length;D<E;D++){var z=u[D];if(B>=z.interval*(D+1)/1E3&&(B<=z.interval*(D+2)/1E3||B>=z.interval*E/1E3)){s.setPosition(new google.maps.LatLng(z.position.lat,
-z.position.lng));s.setPov({heading:z.pov.heading||A(z,u[D+1])||0,zoom:z.pov.zoom||0,pitch:z.pov.pitch||0})}}y(u,u[0].interval)}else{D=0;for(E=u.length;D<E;D++){z=j.interval;if(B>=z*(D+1)/1E3&&(B<=z*(D+2)/1E3||B>=z*E/1E3)){C.setPov({heading:A(u[D],u[D+1])||0,zoom:j.zoom,pitch:j.pitch||0});C.setPosition(e[D])}}y(e,j.interval)}},x)};if(j.location&&typeof j.tween==="string"){var C=w,e=[],m=new google.maps.DirectionsService,q=new google.maps.DirectionsRenderer(C);m.route({origin:j.location,destination:j.tween,
-travelMode:google.maps.TravelMode.DRIVING},function(u,x){if(x==google.maps.DirectionsStatus.OK){q.setDirections(u);for(var A=u.routes[0].overview_path,B=0,D=A.length;B<D;B++)e.push(new google.maps.LatLng(A[B].lat(),A[B].lng()));j.interval=j.interval||1E3;y(e,10)}})}else if(typeof j.tween==="object"){var s=w;m=0;for(var t=j.tween.length;m<t;m++){j.tween[m].interval=j.tween[m].interval||1E3;y(j.tween,10)}}}}else setTimeout(function(){n()},13)};n()},end:function(){if(o)o.getDiv().style.display="none"},
-_teardown:function(k){(k=document.getElementById(k.target))&&k.removeChild(p);p=o=l=null}}},{about:{name:"Popcorn Google Map Plugin",version:"0.1",author:"@annasob",website:"annasob.wordpress.com"},options:{start:{elem:"input",type:"text",label:"In"},end:{elem:"input",type:"text",label:"Out"},target:"map-container",type:{elem:"select",options:["ROADMAP","SATELLITE","STREETVIEW","HYBRID","TERRAIN"],label:"Type",optional:true},zoom:{elem:"input",type:"text",label:"Zoom",optional:true},lat:{elem:"input",
-type:"text",label:"Lat",optional:true},lng:{elem:"input",type:"text",label:"Lng",optional:true},location:{elem:"input",type:"text",label:"Location"},heading:{elem:"input",type:"text",label:"Heading",optional:true},pitch:{elem:"input",type:"text",label:"Pitch",optional:true}}})})(Popcorn);(function(g){g.plugin("image",{manifest:{about:{name:"Popcorn image Plugin",version:"0.1",author:"Scott Downe",website:"http://scottdowne.wordpress.com/"},options:{start:{elem:"input",type:"number",label:"In"},end:{elem:"input",type:"number",label:"Out"},href:{elem:"input",type:"url",label:"anchor URL",optional:true},target:"image-container",src:{elem:"input",type:"url",label:"Source URL"},text:{elem:"input",type:"text",label:"TEXT",optional:true}}},_setup:function(b){var d=document.createElement("img"),
-a=document.getElementById(b.target);b.anchor=document.createElement("a");b.anchor.style.position="relative";b.anchor.style.textDecoration="none";b.anchor.style.display="none";if(!a&&g.plugin.debug)throw Error("target container doesn't exist");a&&a.appendChild(b.anchor);d.addEventListener("load",function(){d.style.borderStyle="none";b.anchor.href=b.href||b.src||"#";b.anchor.target="_blank";var c,f;if(b.text){c=d.height/12+"px";f=document.createElement("div");g.extend(f.style,{color:"black",fontSize:c,
-fontWeight:"bold",position:"relative",textAlign:"center",width:d.width+"px",zIndex:"10"});f.innerHTML=b.text||"";f.style.top=d.height/2-f.offsetHeight/2+"px";b.anchor.appendChild(f)}b.anchor.appendChild(d)},false);d.src=b.src},start:function(b,d){d.anchor.style.display="inline"},end:function(b,d){d.anchor.style.display="none"},_teardown:function(b){document.getElementById(b.target)&&document.getElementById(b.target).removeChild(b.anchor)}})})(Popcorn);(function(g){var b=function(d){var a=0,c=0,f=0,h=null,p=null,o=false,l=0,i=function(){},r=function(){d.background(0);c=f=0;h=p=null};d.draw=function(){i()};d.setup=function(){};d.construct=function(k,j,v){var w=function(){if(j){l=j.gml.tag.drawing.stroke;var n=(v.end-v.start)/(l.pt||function(C){for(var e=[],m=0,q=C.length;m<q;m++)e=e.concat(C[m].pt);return e}(l)).length,y=j.gml.tag;y=y.header&&y.header.client&&y.header.client.name;o=y==="Graffiti Analysis 2.0: DustTag"||y==="DustTag: Graffiti Analysis 2.0"||
-y==="Fat Tag - Katsu Edition";i=function(){if(k.currentTime<v.endDrawing){var C=(k.currentTime-v.start)/n;for(C<c&&r();c<=C;){if(!l)break;a=l[f]||l;var e=a.pt[c],m=c;if(h!=null){var q=e.x,s=e.y,t=void 0,u=void 0,x=void 0,A=void 0;if(o){t=p*d.height;u=d.width-h*d.width;x=s*d.height;A=d.width-q*d.width}else{t=h*d.width;u=p*d.height;x=q*d.width;A=s*d.height}d.stroke(0);d.strokeWeight(13);d.strokeCap(d.SQUARE);d.line(t,u,x,A);d.stroke(255);d.strokeWeight(12);d.strokeCap(d.ROUND);d.line(t,u,x,A)}h=e.x;
-p=e.y;c===m&&c++}}}}else setTimeout(w,5)};d.size(640,640);d.frameRate(60);d.smooth();r();d.noLoop();w()}};g.plugin("gml",{_setup:function(d){var a=this,c=document.getElementById(d.target);d.endDrawing=d.endDrawing||d.end;d.container=document.createElement("canvas");d.container.style.display="none";d.container.setAttribute("id","canvas"+d.gmltag);if(!c&&g.plugin.debug)throw Error("target container doesn't exist");c&&c.appendChild(d.container);c=function(){g.getJSONP("//000000book.com/data/"+d.gmltag+
-".json?callback=",function(f){d.pjsInstance=new Processing(d.container,b);d.pjsInstance.construct(a.media,f,d);d._running&&d.pjsInstance.loop()},false)};window.Processing?c():g.getScript("//cloud.github.com/downloads/processing-js/processing-js/processing-1.3.6.min.js",c)},start:function(d,a){a.pjsInstance&&a.pjsInstance.loop();a.container.style.display="block"},end:function(d,a){a.pjsInstance&&a.pjsInstance.noLoop();a.container.style.display="none"},_teardown:function(d){d.pjsInstance&&d.pjsInstance.exit();
-document.getElementById(d.target)&&document.getElementById(d.target).removeChild(d.container)}})})(Popcorn);(function(g){var b={},d=function(a){if(a.artist){var c="";c="<h3>"+a.artist.name+"</h3>";c+="<a href='"+a.artist.url+"' target='_blank' style='float:left;margin:0 10px 0 0;'><img src='"+a.artist.image[2]["#text"]+"' alt=''></a>";c+="<p>"+a.artist.bio.summary+"</p>";c+="<hr /><p><h4>Tags</h4><ul>";g.forEach(a.artist.tags.tag,function(f){c+="<li><a href='"+f.url+"'>"+f.name+"</a></li>"});c+="</ul></p>";c+="<hr /><p><h4>Similar</h4><ul>";g.forEach(a.artist.similar.artist,function(f){c+="<li><a href='"+
-f.url+"'>"+f.name+"</a></li>"});c+="</ul></p>";b[a.artist.name.toLowerCase()].htmlString=c}};g.plugin("lastfm",function(){return{_setup:function(a){a._container=document.createElement("div");a._container.style.display="none";a._container.innerHTML="";a.artist=a.artist&&a.artist.toLowerCase()||"";var c=document.getElementById(a.target);if(!c&&g.plugin.debug)throw Error("target container doesn't exist");c&&c.appendChild(a._container);if(!b[a.artist]){b[a.artist]={count:0,htmlString:"Unknown Artist"};
-g.getJSONP("//ws.audioscrobbler.com/2.0/?method=artist.getinfo&artist="+a.artist+"&api_key="+a.apikey+"&format=json&callback=lastFMcallback",d,false)}b[a.artist].count++},start:function(a,c){c._container.innerHTML=b[c.artist].htmlString;c._container.style.display="inline"},end:function(a,c){c._container.style.display="none";c._container.innerHTML=""},_teardown:function(a){--b[a.artist].count||delete b[a.artist];document.getElementById(a.target)&&document.getElementById(a.target).removeChild(a._container)}}}(),
-{about:{name:"Popcorn LastFM Plugin",version:"0.1",author:"Steven Weerdenburg",website:"http://sweerdenburg.wordpress.com/"},options:{start:{elem:"input",type:"text",label:"In"},end:{elem:"input",type:"text",label:"Out"},target:"lastfm-container",artist:{elem:"input",type:"text",label:"Artist"}}})})(Popcorn);(function(g){g.plugin("lowerthird",{manifest:{about:{name:"Popcorn lowerthird Plugin",version:"0.1",author:"Scott Downe",website:"http://scottdowne.wordpress.com/"},options:{start:{elem:"input",type:"text",label:"In"},end:{elem:"input",type:"text",label:"Out"},target:"lowerthird-container",salutation:{elem:"input",type:"text",label:"Text",optional:true},name:{elem:"input",type:"text",label:"Text"},role:{elem:"input",type:"text",label:"Text",optional:true}}},_setup:function(b){var d=document.getElementById(b.target);
-if(!this.container){this.container=document.createElement("div");this.container.style.position="absolute";this.container.style.color="white";this.container.style.textShadow="black 2px 2px 6px";this.container.style.fontSize="24px";this.container.style.fontWeight="bold";this.container.style.paddingLeft="40px";this.container.style.width=this.video.offsetWidth+"px";this.container.style.left=this.position().left+"px";this.video.parentNode.appendChild(this.container)}if(b.target&&b.target!=="lowerthird-container"){b.container=
-document.createElement("div");if(!d&&g.plugin.debug)throw Error("target container doesn't exist");d&&d.appendChild(b.container)}else b.container=this.container},start:function(b,d){d.container.innerHTML=(d.salutation?d.salutation+" ":"")+d.name+(d.role?"<br />"+d.role:"");this.container.style.top=this.position().top+this.video.offsetHeight-(40+this.container.offsetHeight)+"px"},end:function(b,d){for(;d.container.firstChild;)d.container.removeChild(d.container.firstChild)}})})(Popcorn);(function(g){var b=1,d=false;g.plugin("googlefeed",function(a){var c=function(){var o=false,l=0,i=document.getElementsByTagName("link"),r=i.length,k=document.head||document.getElementsByTagName("head")[0],j=document.createElement("link");if(window.GFdynamicFeedControl)d=true;else g.getScript("//www.google.com/uds/solutions/dynamicfeed/gfdynamicfeedcontrol.js",function(){d=true});for(;l<r;l++)if(i[l].href==="//www.google.com/uds/solutions/dynamicfeed/gfdynamicfeedcontrol.css")o=true;if(!o){j.type=
-"text/css";j.rel="stylesheet";j.href="//www.google.com/uds/solutions/dynamicfeed/gfdynamicfeedcontrol.css";k.insertBefore(j,k.firstChild)}};window.google?c():g.getScript("//www.google.com/jsapi",function(){google.load("feeds","1",{callback:function(){c()}})});var f=document.createElement("div"),h=document.getElementById(a.target),p=function(){if(d)a.feed=new GFdynamicFeedControl(a.url,f,{vertical:a.orientation.toLowerCase()==="vertical"?true:false,horizontal:a.orientation.toLowerCase()==="horizontal"?
-true:false,title:a.title=a.title||"Blog"});else setTimeout(function(){p()},5)};if(!a.orientation||a.orientation.toLowerCase()!=="vertical"&&a.orientation.toLowerCase()!=="horizontal")a.orientation="vertical";f.style.display="none";f.id="_feed"+b;f.style.width="100%";f.style.height="100%";b++;if(!h&&g.plugin.debug)throw Error("target container doesn't exist");h&&h.appendChild(f);p();return{start:function(){f.setAttribute("style","display:inline")},end:function(){f.setAttribute("style","display:none")},
-_teardown:function(o){document.getElementById(o.target)&&document.getElementById(o.target).removeChild(f);delete o.feed}}},{about:{name:"Popcorn Google Feed Plugin",version:"0.1",author:"David Seifried",website:"dseifried.wordpress.com"},options:{start:{elem:"input",type:"text",label:"In"},end:{elem:"input",type:"text",label:"Out"},target:"feed-container",url:{elem:"input",type:"url",label:"url"},title:{elem:"input",type:"text",label:"title",optional:true},orientation:{elem:"select",options:["Vertical",
-"Horizontal"],label:"orientation",optional:true}}})})(Popcorn);(function(g){var b={},d={},a={};g.plugin("rdio",function(){var c=function(f){var h=function(p){return"http://www.rdio.com/api/oembed/?format=json&url=http://www.rdio.com/%23"+{playlist:function(){return"/people/"+f.person+"/playlists/"+f.id+"/"},album:function(){return"/artist/"+f.artist+"/album/"}}[p]()+f[p]+"/&callback=_loadResults"}(f.type);g.getJSONP(h,function(p){var o=p.title,l=p.html;if(p&&o&&l)b[f.containerid].htmlString="<div>"+l+"</div>";else if(g.plugin.debug)throw Error("Did not receive data from server.");
-},false)};return{_setup:function(f){var h=f.containerid=g.guid(),p=d[h]=document.createElement("div"),o=a[h]=document.getElementById(f.target);if(!o&&g.plugin.debug)throw Error("Target container could not be found.");p.style.display="none";p.innerHTML="";o.appendChild(p);b[h]={htmlString:f.playlist||"Unknown Source"||f.album||"Unknown Source"};c(f)},start:function(f,h){var p=h.containerid,o=d[p];o.innerHTML=b[p].htmlString;o.style.display="inline"},end:function(f,h){container=d[h.containerid];container.style.display=
-"none";container.innerHTML=""},_teardown:function(f){f=f.containerid;var h=a[f];b[f]&&delete b[f];h&&h.removeChild(d[f]);delete a[f];delete d[f]}}}(),{manifest:{about:{name:"Popcorn Rdio Plugin",version:"0.1",author:"Denise Rigato"},options:{start:{elem:"input",type:"text",label:"In"},end:{elem:"input",type:"text",label:"Out"},target:"rdio",artist:{elem:"input",type:"text",label:"Artist"},album:{elem:"input",type:"text",label:"Album"},person:{elem:"input",type:"text",label:"Person"},id:{elem:"input",
-type:"text",label:"Id"},playlist:{elem:"input",type:"text",label:"Playlist"}}}})})(Popcorn);(function(g){var b=0,d=function(a,c){var f=a.container=document.createElement("div"),h=f.style,p=a.media,o=function(){var l=a.position();h.fontSize="18px";h.width=p.offsetWidth+"px";h.top=l.top+p.offsetHeight-f.offsetHeight-40+"px";h.left=l.left+"px";setTimeout(o,10)};f.id=c||g.guid();h.position="absolute";h.color="white";h.textShadow="black 2px 2px 6px";h.fontWeight="bold";h.textAlign="center";o();a.media.parentNode.appendChild(f);return f};g.plugin("subtitle",{manifest:{about:{name:"Popcorn Subtitle Plugin",
-version:"0.1",author:"Scott Downe",website:"http://scottdowne.wordpress.com/"},options:{start:{elem:"input",type:"text",label:"In"},end:{elem:"input",type:"text",label:"Out"},target:"subtitle-container",text:{elem:"input",type:"text",label:"Text"}}},_setup:function(a){var c=document.createElement("div");c.id="subtitle-"+b++;c.style.display="none";!this.container&&(!a.target||a.target==="subtitle-container")&&d(this);a.container=a.target&&a.target!=="subtitle-container"?document.getElementById(a.target)||
-d(this,a.target):this.container;document.getElementById(a.container.id)&&document.getElementById(a.container.id).appendChild(c);a.innerContainer=c;a.showSubtitle=function(){a.innerContainer.innerHTML=a.text||""}},start:function(a,c){c.innerContainer.style.display="inline";c.showSubtitle(c,c.text)},end:function(a,c){c.innerContainer.style.display="none";c.innerContainer.innerHTML=""},_teardown:function(a){a.container.removeChild(a.innerContainer)}})})(Popcorn);(function(g){var b=[],d=function(){this.name="";this.contains={};this.toString=function(){var a=[],c;for(c in this.contains)this.contains.hasOwnProperty(c)&&a.push(" "+this.contains[c]);return a.toString()}};g.plugin("tagthisperson",function(){return{_setup:function(a){var c=false;if(!document.getElementById(a.target)&&g.plugin.debug)throw Error("target container doesn't exist");for(var f=0;f<b.length;f++)if(b[f].name===a.target){a._p=b[f];c=true;break}if(!c){a._p=new d;a._p.name=a.target;b.push(a._p)}},
-start:function(a,c){c._p.contains[c.person]=c.image?"<img src='"+c.image+"'/> ":"";c._p.contains[c.person]+=c.href?"<a href='"+c.href+"' target='_blank'> "+c.person+"</a>":c.person;document.getElementById(c.target).innerHTML=c._p.toString()},end:function(a,c){delete c._p.contains[c.person];document.getElementById(c.target).innerHTML=c._p.toString()}}}(),{about:{name:"Popcorn tagthisperson Plugin",version:"0.1",author:"@annasob",website:"annasob.wordpress.com"},options:{start:{elem:"input",type:"text",
-label:"In"},end:{elem:"input",type:"text",label:"Out"},target:"tagthisperson-container",person:{elem:"input",type:"text",label:"Name"},image:{elem:"input",type:"url",label:"Image Src",optional:true},href:{elem:"input",type:"url",label:"URL",optional:true}}})})(Popcorn);(function(g){var b=false;g.plugin("twitter",{manifest:{about:{name:"Popcorn Twitter Plugin",version:"0.1",author:"Scott Downe",website:"http://scottdowne.wordpress.com/"},options:{start:{elem:"input",type:"number",label:"In"},end:{elem:"input",type:"number",label:"Out"},src:{elem:"input",type:"text",label:"Source"},target:"twitter-container",height:{elem:"input",type:"number",label:"Height",optional:true},width:{elem:"input",type:"number",label:"Width",optional:true}}},_setup:function(d){if(!window.TWTR&&
-!b){b=true;g.getScript("//widgets.twimg.com/j/2/widget.js")}var a=document.getElementById(d.target);d.container=document.createElement("div");d.container.setAttribute("id",g.guid());d.container.style.display="none";if(!a&&g.plugin.debug)throw Error("target container doesn't exist");a&&a.appendChild(d.container);var c=d.src||"";a=d.width||250;var f=d.height||200,h=/^@/.test(c),p={version:2,id:d.container.getAttribute("id"),rpp:30,width:a,height:f,interval:6E3,theme:{shell:{background:"#ffffff",color:"#000000"},
-tweets:{background:"#ffffff",color:"#444444",links:"#1985b5"}},features:{loop:true,timestamp:true,avatars:true,hashtags:true,toptweets:true,live:true,scrollbar:false,behavior:"default"}},o=function(l){if(window.TWTR)if(h){p.type="profile";(new TWTR.Widget(p)).render().setUser(c).start()}else{p.type="search";p.search=c;p.subject=c;(new TWTR.Widget(p)).render().start()}else setTimeout(function(){o(l)},1)};o(this)},start:function(d,a){a.container.style.display="inline"},end:function(d,a){a.container.style.display=
-"none"},_teardown:function(d){document.getElementById(d.target)&&document.getElementById(d.target).removeChild(d.container)}})})(Popcorn);(function(g){g.plugin("webpage",{manifest:{about:{name:"Popcorn Webpage Plugin",version:"0.1",author:"@annasob",website:"annasob.wordpress.com"},options:{id:{elem:"input",type:"text",label:"Id",optional:true},start:{elem:"input",type:"text",label:"In"},end:{elem:"input",type:"text",label:"Out"},src:{elem:"input",type:"url",label:"Src"},target:"iframe-container"}},_setup:function(b){var d=document.getElementById(b.target);b.src=b.src.replace(/^(https?:)?(\/\/)?/,"//");b._iframe=document.createElement("iframe");
-b._iframe.setAttribute("width","100%");b._iframe.setAttribute("height","100%");b._iframe.id=b.id;b._iframe.src=b.src;b._iframe.style.display="none";if(!d&&g.plugin.debug)throw Error("target container doesn't exist");d&&d.appendChild(b._iframe)},start:function(b,d){d._iframe.src=d.src;d._iframe.style.display="inline"},end:function(b,d){d._iframe.style.display="none"},_teardown:function(b){document.getElementById(b.target)&&document.getElementById(b.target).removeChild(b._iframe)}})})(Popcorn);var wikiCallback;
-(function(g){g.plugin("wikipedia",{manifest:{about:{name:"Popcorn Wikipedia Plugin",version:"0.1",author:"@annasob",website:"annasob.wordpress.com"},options:{start:{elem:"input",type:"text",label:"In"},end:{elem:"input",type:"text",label:"Out"},lang:{elem:"input",type:"text",label:"Language",optional:true},src:{elem:"input",type:"url",label:"Src"},title:{elem:"input",type:"text",label:"Title",optional:true},numberofwords:{elem:"input",type:"text",label:"Num Of Words",optional:true},target:"wikipedia-container"}},
-_setup:function(b){var d,a=g.guid();if(!b.lang)b.lang="en";b.numberofwords=b.numberofwords||200;window["wikiCallback"+a]=function(c){b._link=document.createElement("a");b._link.setAttribute("href",b.src);b._link.setAttribute("target","_blank");b._link.innerHTML=b.title||c.parse.displaytitle;b._desc=document.createElement("p");d=c.parse.text["*"].substr(c.parse.text["*"].indexOf("<p>"));d=d.replace(/((<(.|\n)+?>)|(\((.*?)\) )|(\[(.*?)\]))/g,"");d=d.split(" ");b._desc.innerHTML=d.slice(0,d.length>=
-b.numberofwords?b.numberofwords:d.length).join(" ")+" ...";b._fired=true};if(b.src)g.getScript("//"+b.lang+".wikipedia.org/w/api.php?action=parse&props=text&page="+b.src.slice(b.src.lastIndexOf("/")+1)+"&format=json&callback=wikiCallback"+a);else if(g.plugin.debug)throw Error("Wikipedia plugin needs a 'src'");},start:function(b,d){var a=function(){if(d._fired){if(d._link&&d._desc)if(document.getElementById(d.target)){document.getElementById(d.target).appendChild(d._link);document.getElementById(d.target).appendChild(d._desc);
-d._added=true}}else setTimeout(function(){a()},13)};a()},end:function(b,d){if(d._added){document.getElementById(d.target).removeChild(d._link);document.getElementById(d.target).removeChild(d._desc)}},_teardown:function(b){if(b._added){b._link.parentNode&&document.getElementById(b.target).removeChild(b._link);b._desc.parentNode&&document.getElementById(b.target).removeChild(b._desc);delete b.target}}})})(Popcorn);(function(g){var b={text:function(d){var a=d.post,c=document.createElement("a"),f=document.createTextNode(a.title),h=document.createElement("div");c.setAttribute("href",a.post_url);c.appendChild(f);h.appendChild(c);h.innerHTML+=a.body;d._container.appendChild(h)},photo:function(d){for(var a=d.width||250,c=-1,f=[d.post.photos.length],h=[d.post.photos.length],p=document.createElement("div"),o=document.createElement("img"),l=d.post,i=0,r=l.photos.length;i<r;i++){for(var k=l.photos[i],j=k.alt_sizes,v=
-0,w=j.length;v<w;v++){var n=j[v];if(n.width===a){h[i]=n.url;f[i]=k.caption;c=0;break}else if(n.width===250)c=v}c===-1&&g.error("Clearly your blog has a picture that is so tiny it isn't even 250px wide. Consider  using a bigger picture or try a smaller size.");if(v===j.length)h[i]=j[c].url}a=0;for(c=h.length;a<c;a++){p.innerHTML+=f[a]+"<br/>";o.setAttribute("src",h[a]);o.setAttribute("alt","Pic"+a);p.appendChild(o);p.innerHTML+="<br/>"}p.innerHTML+="<br/>"+l.caption;d._container.appendChild(p)},audio:function(d){var a=
-document.createElement("div"),c=document.createElement("a"),f=d.post;if(f.artist){var h=document.createElement("img");a.innerHTML+="Artist: "+f.artist+"<br/>";c.setAttribute("href",f.source_url);h.setAttribute("src",f.album_art);h.setAttribute("alt",f.album);c.appendChild(h);a.appendChild(c);a.innerHTML+="<hr/>"+f.track_number+" - "+f.track_name+"<br/>"}else{h=document.createTextNode(f.source_title);c.setAttribute("href",f.source_url);c.appendChild(h);a.appendChild(c);a.innerHTML+="<br/>"}a.innerHTML+=
-f.player+"   "+f.plays+"plays<br/>"+f.caption;d._container.appendChild(a)},video:function(d){for(var a=d.width||400,c=-1,f=d.post,h=document.createElement("div"),p,o=0,l=f.player.length;o<l;o++){var i=f.player[o];if(i.width===a){p=i.embed_code;c=0;break}else if(i.width===400)c=o}if(o===d.post.player.length)p=f.player[c].embed_code;c===-1&&g.error("Specified video size was not found and default was never found. Please try another width.");h.innerHTML+=p+"<br/>"+f.caption;d._container.appendChild(h)},
-chat:function(d){var a=d.post,c,f=document.createElement("div");f.innerHTML+="<strong><u>"+a.title+"</u></strong><br/><br/>";for(var h=0,p=a.dialogue.length;h<p;h++){c=a.dialogue[h];f.innerHTML+=c.label+" "+c.phrase+"<br/>"}d._container.appendChild(f)},quote:function(d){var a=document.createElement("div"),c=document.createElement("a"),f=d.post,h=document.createTextNode(f.text);c.setAttribute("href",f.post_url);c.appendChild(h);a.appendChild(c);a.innerHTML+="<br/><br/>Source: <b>"+f.source+"</b>";
-d._container.appendChild(a)},link:function(d){var a=document.createElement("div"),c=document.createElement("a"),f=d.post,h=document.createTextNode(f.title);c.setAttribute("href",f.post_url);c.appendChild(h);a.appendChild(c);a.innerHTML+="<br/>"+f.description;d._container.appendChild(a)},answer:function(d){var a=document.createElement("div"),c=document.createElement("a"),f=d.post,h=document.createTextNode(f.asking_name);a.innerHTML="Inquirer: ";c.setAttribute("href",f.asking_url);c.appendChild(h);
-a.appendChild(c);a.innerHTML+="<br/><br/>Question: "+f.question+"<br/>Answer: "+f.answer;d._container.appendChild(a)}};g.plugin("tumblr",{manifest:{about:{name:"Popcorn Tumblr Plugin",version:"0.1",author:"Matthew Schranz, @mjschranz",website:"mschranz.wordpress.com"},options:{requestType:{elem:"select",options:["INFO","AVATAR","BLOGPOST"],label:"Type_Of_Plugin"},target:"tumblr-container",start:{elem:"input",type:"number",label:"Start_Time"},end:{elem:"input",type:"number",label:"End_Time"},base_hostname:{elem:"input",
-type:"text",label:"User_Name"},api_key:{elem:"input",type:"text",label:"Application_Key",optional:true},size:{elem:"select",options:[16,24,30,40,48,64,96,128,512],label:"avatarSize",optional:true},blogId:{elem:"input",type:"number",label:"Blog_ID",optional:true},width:{elem:"input",type:"number",label:"Photo_Width",optional:true}}},_setup:function(d){var a=document.getElementById(d.target),c,f,h=this;d.requestType=d.requestType.toLowerCase();(!d.base_hostname||!d.api_key&&(d.requestType==="info"||
-d.requestType==="blogpost"))&&g.error("Must provide a blog URL to the plugin and an api_key for Blog Info and Blog Post requests.");!(["info","avatar","blogpost"].indexOf(d.requestType)>-1)&&g.error("Invalid tumblr plugin type.");d.requestType==="blogpost"&&d.blogId===undefined&&g.error("Error. BlogId required for blogpost requests");!a&&g.plugin.debug&&g.error("Target Tumblr container doesn't exist.");c=d.base_hostname.slice(d.base_hostname.indexOf("/")+2,d.base_hostname.length);f=d.base_hostname.slice(0,
-d.base_hostname.indexOf("/")+2);c=f==="http://"||f==="https://"?c:d.base_hostname;if(c.indexOf("/")>-1)c=c.slice(0,c.indexOf("/"));d.base_hostname=c;d._container=document.createElement("div");d._container.id="tumblrdiv-"+g.guid();if(d.requestType==="avatar")d._container.innerHTML="<img src=http://api.tumblr.com/v2/blog/"+d.base_hostname+"/avatar/"+d.size+" alt='BlogAvatar' />";else{c=d.requestType==="blogpost"?"posts":"info";c="http://api.tumblr.com/v2/blog/"+d.base_hostname+"/"+c+"?api_key="+d.api_key+
-"&id="+d.blogId+"&jsonp=tumblrCallBack";this.listen("tumblrError",function(p){g.error(p)});g.getJSONP(c,function(p){if(p.meta.msg==="OK"){var o=document.createElement("div");if(d.requestType==="blogpost"){d.post=p.response.posts[0];var l=d.post.type;p=d.post.tags;o.innerHTML="Date Published: "+d.post.date.slice(0,d.post.date.indexOf(" "))+"<br/>";if(p.length!==0){o.innerHTML+="Tags: "+p[0];for(var i=1,r=p.length;i<r;i++)o.innerHTML+=", "+p[i]}else o.innerHTML+="Tags: No Tags Used";d._container.appendChild(o);
-b[l](d)}else{l=document.createElement("a");p=p.response.blog;i=document.createTextNode(p.title);l.setAttribute("href",p.url);l.appendChild(i);o.appendChild(l);o.innerHTML+=p.description;d._container.appendChild(o)}}else h.trigger("tumblrError","Error. Request failed. Status code: "+p.meta.status+" - Message: "+p.meta.msg)},false)}d._container.style.display="none";a&&a.appendChild(d._container)},start:function(d,a){if(a._container)a._container.style.display=""},end:function(d,a){if(a._container)a._container.style.display=
-"none"},_teardown:function(d){document.getElementById(d.target)&&document.getElementById(d.target).removeChild(d._container)}})})(Popcorn,this);(function(g){g.plugin("linkedin",{manifest:{about:{name:"Popcorn LinkedIn Plugin",version:"0.1",author:"Dan Ventura",website:"dsventura.blogspot.com"},options:{type:{elem:"input",type:"text",label:"Type"},url:{elem:"input",type:"text",label:"URL"},apikey:{elem:"input",type:"text",label:"API Key"},counter:{elem:"input",type:"text",label:"Counter"},memberid:{elem:"input",type:"text",label:"Member ID",optional:true},format:{elem:"input",type:"text",label:"Format",optional:true},companyid:{elem:"input",
-type:"text",label:"Company ID",optional:true},modules:{elem:"input",type:"text",label:"Modules",optional:true},productid:{elem:"input",type:"text",label:"productid",optional:true},related:{elem:"input",type:"text",label:"related",optional:true},start:{elem:"input",type:"text",label:"In"},end:{elem:"input",type:"text",label:"Out"},target:"linkedin-container"}},_setup:function(b){var d=b.apikey,a=document.getElementById(b.target),c=document.createElement("script");g.getScript("//platform.linkedin.com/in.js");
-b._container=document.createElement("div");b._container.appendChild(c);if(d)c.innerHTML="api_key: "+d;b.type=b.type&&b.type.toLowerCase()||"";var f=function(h){return{share:function(){c.setAttribute("type","IN/Share");h.counter&&c.setAttribute("data-counter",h.counter);h.url&&c.setAttribute("data-url",h.url)},memberprofile:function(){c.setAttribute("type","IN/MemberProfile");c.setAttribute("data-id",h.memberid);c.setAttribute("data-format",h.format||"inline");h.text&&h.format.toLowerCase()!=="inline"&&
-c.setAttribute("data-text",h.text)},companyinsider:function(){c.setAttribute("type","IN/CompanyInsider");c.setAttribute("data-id",h.companyid);h.modules&&h._container.setAttribute("data-modules",h.modules)},companyprofile:function(){c.setAttribute("type","IN/CompanyProfile");c.setAttribute("data-id",h.companyid);c.setAttribute("data-format",h.format||"inline");h.text&&h.format.toLowerCase()!=="inline"&&c.setAttribute("data-text",h.text);h.related!==undefined&&c.setAttribute("data-related",h.related)},
-recommendproduct:function(){c.setAttribute("type","IN/RecommendProduct");c.setAttribute("data-company",h.companyid||"LinkedIn");c.setAttribute("data-product",h.productid||"201714");h.counter&&c.setAttribute("data-counter",h.counter)}}}(b);if(d)f[b.type]&&f[b.type]();else{b._container=document.createElement("p");b._container.innerHTML="Plugin requires a valid <a href='https://www.linkedin.com/secure/developer'>apikey</a>";if(!a&&g.plugin.debug)throw"target container doesn't exist";a&&a.appendChild(b._container)}if(!a&&
-g.plugin.debug)throw Error("target container doesn't exist");a&&a.appendChild(b._container);b._container.style.display="none"},start:function(b,d){d._container.style.display="block"},end:function(b,d){d._container.style.display="none"},_teardown:function(b){var d=document.getElementById(b.target);d&&d.removeChild(b._container)}})})(Popcorn);(function(g){g.plugin("mustache",function(b){var d,a,c,f;g.getScript("http://mustache.github.com/extras/mustache.js");var h=!!b.dynamic,p=typeof b.template,o=typeof b.data,l=document.getElementById(b.target);if(!l&&g.plugin.debug)throw Error("target container doesn't exist");b.container=l||document.createElement("div");if(p==="function")if(h)c=b.template;else f=b.template(b);else if(p==="string")f=b.template;else if(g.plugin.debug)throw Error("Mustache Plugin Error: options.template must be a String or a Function.");
-else f="";if(o==="function")if(h)d=b.data;else a=b.data(b);else if(o==="string")a=JSON.parse(b.data);else if(o==="object")a=b.data;else if(g.plugin.debug)throw Error("Mustache Plugin Error: options.data must be a String, Object, or Function.");else a="";return{start:function(i,r){var k=function(){if(window.Mustache){if(d)a=d(r);if(c)f=c(r);var j=Mustache.to_html(f,a).replace(/^\s*/mg,"");r.container.innerHTML=j}else setTimeout(function(){k()},10)};k()},end:function(i,r){r.container.innerHTML=""},
-_teardown:function(){d=a=c=f=null}}},{about:{name:"Popcorn Mustache Plugin",version:"0.1",author:"David Humphrey (@humphd)",website:"http://vocamus.net/dave"},options:{start:{elem:"input",type:"text",label:"In"},end:{elem:"input",type:"text",label:"Out"},target:"mustache-container",template:{elem:"input",type:"text",label:"Template"},data:{elem:"input",type:"text",label:"Data"},dynamic:{elem:"input",type:"text",label:"Dynamic",optional:true}}})})(Popcorn);(function(g){function b(a,c){if(a.map)a.map.div.style.display=c;else setTimeout(function(){b(a,c)},10)}var d=1;g.plugin("openmap",function(a){var c,f,h,p,o,l,i,r,k=document.getElementById(a.target);c=document.createElement("div");c.id="openmapdiv"+d;c.style.width="100%";c.style.height="100%";d++;if(!k&&g.plugin.debug)throw Error("target container doesn't exist");k&&k.appendChild(c);r=function(){if(window.OpenLayers){if(a.location){location=new OpenLayers.LonLat(0,0);g.getJSONP("//tinygeocoder.com/create-api.php?q="+
-a.location+"&callback=jsonp",function(v){f=new OpenLayers.LonLat(v[1],v[0]);a.map.setCenter(f)})}else f=new OpenLayers.LonLat(a.lng,a.lat);a.type=a.type||"ROADMAP";if(a.type==="SATELLITE"){a.map=new OpenLayers.Map({div:c,maxResolution:0.28125,tileSize:new OpenLayers.Size(512,512)});var j=new OpenLayers.Layer.WorldWind("LANDSAT","//worldwind25.arc.nasa.gov/tile/tile.aspx",2.25,4,{T:"105"});a.map.addLayer(j);p=new OpenLayers.Projection("EPSG:4326");h=new OpenLayers.Projection("EPSG:4326")}else if(a.type===
-"TERRAIN"){p=new OpenLayers.Projection("EPSG:4326");h=new OpenLayers.Projection("EPSG:4326");a.map=new OpenLayers.Map({div:c,projection:h});j=new OpenLayers.Layer.WMS("USGS Terraserver","//terraserver-usa.org/ogcmap.ashx?",{layers:"DRG"});a.map.addLayer(j)}else{h=new OpenLayers.Projection("EPSG:900913");p=new OpenLayers.Projection("EPSG:4326");f=f.transform(p,h);a.map=new OpenLayers.Map({div:c,projection:h,displayProjection:p});j=new OpenLayers.Layer.OSM;a.map.addLayer(j)}if(a.map)a.map.div.style.display=
-"none"}else setTimeout(function(){r()},50)};r();return{_setup:function(j){window.OpenLayers||g.getScript("//openlayers.org/api/OpenLayers.js");var v=function(){if(j.map){j.zoom=j.zoom||2;if(j.zoom&&typeof j.zoom!=="number")j.zoom=+j.zoom;j.map.setCenter(f,j.zoom);if(j.markers){var w=OpenLayers.Util.extend({},OpenLayers.Feature.Vector.style["default"]),n=function(u){clickedFeature=u.feature;if(clickedFeature.attributes.text){i=new OpenLayers.Popup.FramedCloud("featurePopup",clickedFeature.geometry.getBounds().getCenterLonLat(),
-new OpenLayers.Size(120,250),clickedFeature.attributes.text,null,true,function(){l.unselect(this.feature)});clickedFeature.popup=i;i.feature=clickedFeature;j.map.addPopup(i)}},y=function(u){feature=u.feature;if(feature.popup){i.feature=null;j.map.removePopup(feature.popup);feature.popup.destroy();feature.popup=null}},C=function(u){g.getJSONP("//tinygeocoder.com/create-api.php?q="+u.location+"&callback=jsonp",function(x){x=(new OpenLayers.Geometry.Point(x[1],x[0])).transform(p,h);var A=OpenLayers.Util.extend({},
-w);if(!u.size||isNaN(u.size))u.size=14;A.pointRadius=u.size;A.graphicOpacity=1;A.externalGraphic=u.icon;x=new OpenLayers.Feature.Vector(x,null,A);if(u.text)x.attributes={text:u.text};o.addFeatures([x])})};o=new OpenLayers.Layer.Vector("Point Layer",{style:w});j.map.addLayer(o);for(var e=0,m=j.markers.length;e<m;e++){var q=j.markers[e];if(q.text)if(!l){l=new OpenLayers.Control.SelectFeature(o);j.map.addControl(l);l.activate();o.events.on({featureselected:n,featureunselected:y})}if(q.location)C(q);
-else{var s=(new OpenLayers.Geometry.Point(q.lng,q.lat)).transform(p,h),t=OpenLayers.Util.extend({},w);if(!q.size||isNaN(q.size))q.size=14;t.pointRadius=q.size;t.graphicOpacity=1;t.externalGraphic=q.icon;s=new OpenLayers.Feature.Vector(s,null,t);if(q.text)s.attributes={text:q.text};o.addFeatures([s])}}}}else setTimeout(function(){v()},13)};v()},start:function(j,v){b(v,"block")},end:function(j,v){b(v,"none")},_teardown:function(){k&&k.removeChild(c);c=map=f=h=p=o=l=i=null}}},{about:{name:"Popcorn OpenMap Plugin",
-version:"0.3",author:"@mapmeld",website:"mapadelsur.blogspot.com"},options:{start:{elem:"input",type:"text",label:"In"},end:{elem:"input",type:"text",label:"Out"},target:"map-container",type:{elem:"select",options:["ROADMAP","SATELLITE","TERRAIN"],label:"Type",optional:true},zoom:{elem:"input",type:"text",label:"Zoom",optional:true},lat:{elem:"input",type:"text",label:"Lat",optional:true},lng:{elem:"input",type:"text",label:"Lng",optional:true},location:{elem:"input",type:"text",label:"Location"},
-markers:{elem:"input",type:"text",label:"List Markers",optional:true}}})})(Popcorn);document.addEventListener("click",function(g){g=g.target;if(g.nodeName==="A"||g.parentNode&&g.parentNode.nodeName==="A")Popcorn.instances.forEach(function(b){b.options.pauseOnLinkClicked&&b.pause()})},false);(function(g){var b={},d=0,a=document.createElement("span"),c=["webkit","Moz","ms","O",""],f=["Transform","TransitionDuration","TransitionTimingFunction"],h={},p;document.getElementsByTagName("head")[0].appendChild(a);for(var o=0,l=f.length;o<l;o++)for(var i=0,r=c.length;i<r;i++){p=c[i]+f[o];if(p in a.style){h[f[o].toLowerCase()]=p;break}}document.getElementsByTagName("head")[0].appendChild(a);g.plugin("wordriver",{manifest:{about:{name:"Popcorn WordRiver Plugin"},options:{start:{elem:"input",type:"text",
-label:"In"},end:{elem:"input",type:"text",label:"Out"},target:"wordriver-container",text:{elem:"input",type:"text",label:"Text"},color:{elem:"input",type:"text",label:"Color",optional:true}}},_setup:function(k){if(!document.getElementById(k.target)&&g.plugin.debug)throw Error("target container doesn't exist");k._duration=k.end-k.start;var j;if(!(j=b[k.target])){j=k.target;b[j]=document.createElement("div");var v=document.getElementById(j);v&&v.appendChild(b[j]);b[j].style.height="100%";b[j].style.position=
-"relative";j=b[j]}k._container=j;k.word=document.createElement("span");k.word.style.position="absolute";k.word.style.whiteSpace="nowrap";k.word.style.opacity=0;k.word.style.MozTransitionProperty="opacity, -moz-transform";k.word.style.webkitTransitionProperty="opacity, -webkit-transform";k.word.style.OTransitionProperty="opacity, -o-transform";k.word.style.transitionProperty="opacity, transform";k.word.style[h.transitionduration]="1s, "+k._duration+"s";k.word.style[h.transitiontimingfunction]="linear";
-k.word.innerHTML=k.text;k.word.style.color=k.color||"black"},start:function(k,j){j._container.appendChild(j.word);j.word.style[h.transform]="";j.word.style.fontSize=~~(30+20*Math.random())+"px";d%=j._container.offsetWidth-j.word.offsetWidth;j.word.style.left=d+"px";d+=j.word.offsetWidth+10;j.word.style[h.transform]="translateY("+(j._container.offsetHeight-j.word.offsetHeight)+"px)";j.word.style.opacity=1;setTimeout(function(){j.word.style.opacity=0},(j.end-j.start-1||1)*1E3)},end:function(k,j){j.word.style.opacity=
-0},_teardown:function(k){var j=document.getElementById(k.target);k.word.parentNode&&k._container.removeChild(k.word);b[k.target]&&!b[k.target].childElementCount&&j&&j.removeChild(b[k.target])&&delete b[k.target]}})})(Popcorn);(function(g){g.plugin("processing",function(b){var d=function(a){function c(f){var h=function(){a.listen("pause",function(){f.canvas.style.display==="inline"&&f.pjsInstance.noLoop()});a.listen("play",function(){f.canvas.style.display==="inline"&&f.pjsInstance.loop()})};if(f.sketch)g.xhr({url:f.sketch,dataType:"text",success:function(p){f.codeReady=false;p=Processing.compile(p);f.pjsInstance=new Processing(f.canvas,p);f.seeking=false;f._running&&!a.media.paused&&f.pjsInstance.loop()||f.pjsInstance.noLoop();
-a.listen("seeking",function(){f._running&&f.canvas.style.display==="inline"&&f.noPause&&f.pjsInstance.loop()});f.noPause=f.noPause||false;!f.noPause&&h();f.codeReady=true}});else if(g.plugin.debug)throw Error("Popcorn.Processing: options.sketch is undefined");}window.Processing?c(b):g.getScript("//cloud.github.com/downloads/processing-js/processing-js/processing-1.3.6.min.js",function(){c(b)})};return{_setup:function(a){a.codeReady=false;a.parentTarget=document.getElementById(a.target);if(!a.parentTarget&&
-g.plugin.debug)throw Error("target container doesn't exist");var c=document.createElement("canvas");c.id=g.guid(a.target+"-sketch");c.style.display="none";a.canvas=c;a.parentTarget&&a.parentTarget.appendChild(a.canvas);d(this)},start:function(a,c){c.codeReady&&!this.media.paused&&c.pjsInstance.loop();c.canvas.style.display="inline"},end:function(a,c){c.pjsInstance&&c.pjsInstance.noLoop();c.canvas.style.display="none"},_teardown:function(a){a.pjsInstance&&a.pjsInstance.exit();a.parentTarget&&a.parentTarget.removeChild(a.canvas)}}},
-{about:{name:"Popcorn Processing Plugin",version:"0.1",author:"Christopher De Cairos, Benjamin Chalovich",website:"cadecairos.blogspot.com, ben1amin.wordpress.org"},options:{start:{elem:"input",type:"text",label:"In"},end:{elem:"input",type:"text",label:"Out"},target:{elem:"input",type:"text",label:"Target"},sketch:{elem:"input",type:"url",label:"Sketch"},noPause:{elem:"select",options:["TRUE","FALSE"],label:"No Loop",optional:true}}})})(Popcorn);(function(g){var b=1;g.plugin("timeline",function(d){var a=document.getElementById(d.target),c=document.createElement("div"),f,h=true;if(a&&!a.firstChild){a.appendChild(f=document.createElement("div"));f.style.width="inherit";f.style.height="inherit";f.style.overflow="auto"}else f=a.firstChild;c.style.display="none";c.id="timelineDiv"+b;d.direction=d.direction||"up";if(d.direction.toLowerCase()==="down")h=false;if(a&&f)h?f.insertBefore(c,f.firstChild):f.appendChild(c);else if(g.plugin.debug)throw Error("target container doesn't exist");
-b++;c.innerHTML="<p><span id='big' style='font-size:24px; line-height: 130%;' >"+d.title+"</span><br /><span id='mid' style='font-size: 16px;'>"+d.text+"</span><br />"+d.innerHTML;return{start:function(p,o){c.style.display="block";if(o.direction==="down")f.scrollTop=f.scrollHeight},end:function(){c.style.display="none"},_teardown:function(){f&&c&&f.removeChild(c)&&!f.firstChild&&a.removeChild(f)}}},{about:{name:"Popcorn Timeline Plugin",version:"0.1",author:"David Seifried @dcseifried",website:"dseifried.wordpress.com"},
-options:{start:{elem:"input",type:"text",label:"In"},end:{elem:"input",type:"text",label:"Out"},target:"feed-container",title:{elem:"input",type:"text",label:"title"},text:{elem:"input",type:"text",label:"text"},innerHTML:{elem:"input",type:"text",label:"innerHTML",optional:true},direction:{elem:"input",type:"text",label:"direction",optional:true}}})})(Popcorn);(function(g,b){var d={};g.plugin("documentcloud",{manifest:{about:{name:"Popcorn Document Cloud Plugin",version:"0.1",author:"@humphd, @ChrisDeCairos",website:"http://vocamus.net/dave"},options:{start:{elem:"input",type:"text",label:"In"},end:{elem:"input",type:"text",label:"Out"},target:"documentcloud-container",width:{elem:"input",type:"text",label:"Width",optional:true},height:{elem:"input",type:"text",label:"Height",optional:true},src:{elem:"input",type:"text",label:"PDF URL"},preload:{elem:"input",
-type:"boolean",label:"Preload",optional:true},page:{elem:"input",type:"number",label:"Page Number",optional:true},aid:{elem:"input",type:"number",label:"Annotation Id",optional:true}}},_setup:function(a){function c(){function i(u){a._key=u.api.getId();a._changeView=function(x){a.aid?x.pageSet.showAnnotation(x.api.getAnnotation(a.aid)):x.api.setCurrentPage(a.page)}}function r(){d[a._key]={num:1,id:a._containerId};h.loaded=true}h.loaded=false;var k=a.url.replace(/\.html$/,".js"),j=a.target,v=b.getElementById(j),
-w=b.createElement("div"),n=g.position(v),y=a.width||n.width;n=a.height||n.height;var C=a.sidebar||true,e=a.text||true,m=a.pdf||true,q=a.showAnnotations||true,s=a.zoom||700,t=a.search||true;if(!function(u){var x=false;g.forEach(h.viewers,function(A){if(A.api.getSchema().canonicalURL===u){i(A);A=d[a._key];a._containerId=A.id;A.num+=1;x=true;h.loaded=true}});return x}(a.url)){w.id=a._containerId=g.guid(j);j="#"+w.id;v.appendChild(w);p.trigger("documentready");h.load(k,{width:y,height:n,sidebar:C,text:e,
-pdf:m,showAnnotations:q,zoom:s,search:t,container:j,afterLoad:a.page||a.aid?function(u){i(u);a._changeView(u);w.style.visibility="hidden";u.elements.pages.hide();r()}:function(u){i(u);r();w.style.visibility="hidden";u.elements.pages.hide()}})}}function f(){window.DV.loaded?c():setTimeout(f,25)}var h=window.DV=window.DV||{},p=this;if(h.loading)f();else{h.loading=true;h.recordHit="//www.documentcloud.org/pixel.gif";var o=b.createElement("link"),l=b.getElementsByTagName("head")[0];o.rel="stylesheet";
-o.type="text/css";o.media="screen";o.href="//s3.documentcloud.org/viewer/viewer-datauri.css";l.appendChild(o);h.loaded=false;g.getScript("http://s3.documentcloud.org/viewer/viewer.js",function(){h.loading=false;c()})}},start:function(a,c){var f=b.getElementById(c._containerId),h=DV.viewers[c._key];(c.page||c.aid)&&h&&c._changeView(h);if(f&&h){f.style.visibility="visible";h.elements.pages.show()}},end:function(a,c){var f=b.getElementById(c._containerId);if(f&&DV.viewers[c._key]){f.style.visibility=
-"hidden";DV.viewers[c._key].elements.pages.hide()}},_teardown:function(a){var c=b.getElementById(a._containerId);if((a=a._key)&&DV.viewers[a]&&--d[a].num===0){for(DV.viewers[a].api.unload();c.hasChildNodes();)c.removeChild(c.lastChild);c.parentNode.removeChild(c)}}})})(Popcorn,window.document);(function(g){g.parser("parseJSON","JSON",function(b){var d={title:"",remote:"",data:[]};g.forEach(b.data,function(a){d.data.push(a)});return d})})(Popcorn);(function(g){g.parser("parseSBV",function(b){var d={title:"",remote:"",data:[]},a=[],c=0,f=0,h=function(k){k=k.split(":");var j=k.length-1,v;try{v=parseInt(k[j-1],10)*60+parseFloat(k[j],10);if(j===2)v+=parseInt(k[0],10)*3600}catch(w){throw"Bad cue";}return v},p=function(k,j){var v={};v[k]=j;return v};b=b.text.split(/(?:\r\n|\r|\n)/gm);for(f=b.length;c<f;){var o={},l=[],i=b[c++].split(",");try{o.start=h(i[0]);for(o.end=h(i[1]);c<f&&b[c];)l.push(b[c++]);o.text=l.join("<br />");a.push(p("subtitle",o))}catch(r){for(;c<
-f&&b[c];)c++}for(;c<f&&!b[c];)c++}d.data=a;return d})})(Popcorn);(function(g){g.parser("parseSRT",function(b){var d={title:"",remote:"",data:[]},a=[],c=0,f=0,h=0,p,o,l,i=function(k){k=k.split(":");try{var j=k[2].split(",");if(j.length===1)j=k[2].split(".");return parseFloat(k[0],10)*3600+parseFloat(k[1],10)*60+parseFloat(j[0],10)+parseFloat(j[1],10)/1E3}catch(v){return 0}},r=function(k,j){var v={};v[k]=j;return v};b=b.text.split(/(?:\r\n|\r|\n)/gm);f=b.length;for(c=0;c<f;c++){l={};o=[];l.id=parseInt(b[c++],10);p=b[c++].split(/[\t ]*--\>[\t ]*/);l.start=i(p[0]);
-h=p[1].indexOf(" ");if(h!==-1)p[1]=p[1].substr(0,h);for(l.end=i(p[1]);c<f&&b[c];)o.push(b[c++]);l.text=o.join("\\N").replace(/\{(\\[\w]+\(?([\w\d]+,?)+\)?)+\}/gi,"");l.text=l.text.replace(/</g,"&lt;").replace(/>/g,"&gt;");l.text=l.text.replace(/&lt;(\/?(font|b|u|i|s))((\s+(\w|\w[\w\-]*\w)(\s*=\s*(?:\".*?\"|'.*?'|[^'\">\s]+))?)+\s*|\s*)(\/?)&gt;/gi,"<$1$3$7>");l.text=l.text.replace(/\\N/gi,"<br />");a.push(r("subtitle",l))}d.data=a;return d})})(Popcorn);(function(g){function b(c,f){var h=c.substr(10).split(","),p;p={start:d(h[f.start]),end:d(h[f.end])};if(p.start===-1||p.end===-1)throw"Invalid time";var o=k.call(i,/\{(\\[\w]+\(?([\w\d]+,?)+\)?)+\}/gi,""),l=o.replace,i;i=h.length;k=[];for(var r=f.text;r<i;r++)k.push(h[r]);i=k.join(",");var k=i.replace;p.text=l.call(o,/\\N/gi,"<br />");return p}function d(c){var f=c.split(":");if(c.length!==10||f.length<3)return-1;return parseInt(f[0],10)*3600+parseInt(f[1],10)*60+parseFloat(f[2],10)}function a(c,
-f){var h={};h[c]=f;return h}g.parser("parseSSA",function(c){var f={title:"",remote:"",data:[]},h=[],p=0,o;c=c.text.split(/(?:\r\n|\r|\n)/gm);for(o=c.length;p<o&&c[p]!=="[Events]";)p++;var l=c[++p].substr(8).split(", "),i={},r,k;k=0;for(r=l.length;k<r;k++)if(l[k]==="Start")i.start=k;else if(l[k]==="End")i.end=k;else if(l[k]==="Text")i.text=k;for(;++p<o&&c[p]&&c[p][0]!=="[";)try{h.push(a("subtitle",b(c[p],i)))}catch(j){}f.data=h;return f})})(Popcorn);(function(g){g.parser("parseTTML",function(b){var d={title:"",remote:"",data:[]},a,c=0,f,h=function(l,i){if(!l)return-1;var r=l.split(":"),k=r.length-1;if(k>=2)return parseInt(r[0],10)*3600+parseInt(r[k-1],10)*60+parseFloat(r[k],10);for(r=l.length-1;r>=0;r--)if(l[r]<="9"&&l[r]>="0")break;r++;k=l.substr(r);i=i||0;if(k==="h")k=3600;else if(k==="m")k=60;else if(k==="s")k=1;else if(k==="ms")k=0.0010;else return-1;return parseFloat(l.substr(0,r))*k+i},p=function(l,i){var r={};r[l]=i;return r},o=function(l,
-i){for(var r=l.firstChild,k;r;){if(r.nodeType===1)if(r.nodeName==="p"){k=r;var j=i,v={};v.text=k.textContent.replace(/^[\s]+|[\s]+$/gm,"").replace(/(?:\r\n|\r|\n)/gm,"<br />");v.id=k.getAttribute("xml:id")||k.getAttribute("id");v.start=h(k.getAttribute("begin"),j);v.end=h(k.getAttribute("end"),j);v.target=f;if(v.end<0){v.end=h(k.getAttribute("duration"),0);if(v.end>=0)v.end+=v.start;else v.end=Number.MAX_VALUE}k=v;d.data.push(p("subtitle",k));c++}else if(r.nodeName==="div"){k=h(r.getAttribute("begin"));
-if(k<0)k=i;o(r,k)}r=r.nextSibling}};if(!b.xml||!b.xml.documentElement||!(a=b.xml.documentElement.firstChild))return d;for(;a.nodeName!=="body";)a=a.nextSibling;f="";o(a,0);return d})})(Popcorn);(function(g){g.parser("parseTTXT",function(b){var d={title:"",remote:"",data:[]},a=function(o){o=o.split(":");var l=0;try{return parseFloat(o[0],10)*60*60+parseFloat(o[1],10)*60+parseFloat(o[2],10)}catch(i){l=0}return l},c=function(o,l){var i={};i[o]=l;return i};b=b.xml.lastChild.lastChild;for(var f=Number.MAX_VALUE,h=[];b;){if(b.nodeType===1&&b.nodeName==="TextSample"){var p={};p.start=a(b.getAttribute("sampleTime"));p.text=b.getAttribute("text");if(p.text){p.end=f-0.0010;h.push(c("subtitle",p))}f=
-p.start}b=b.previousSibling}d.data=h.reverse();return d})})(Popcorn);(function(g){function b(a){var c=a.split(":");a=a.length;var f;if(a!==12&&a!==9)throw"Bad cue";a=c.length-1;try{f=parseInt(c[a-1],10)*60+parseFloat(c[a],10);if(a===2)f+=parseInt(c[0],10)*3600}catch(h){throw"Bad cue";}return f}function d(a,c){var f={};f[a]=c;return f}g.parser("parseVTT",function(a){var c={title:"",remote:"",data:[]},f=[],h=0,p=0,o,l;a=a.text.split(/(?:\r\n|\r|\n)/gm);p=a.length;if(p===0||a[0]!=="WEBVTT")return c;for(h++;h<p;){o=[];try{for(var i=h;i<p&&!a[i];)i++;h=i;var r=a[h++];i=
-void 0;var k={};if(!r||r.indexOf("--\>")===-1)throw"Bad cue";i=r.replace(/--\>/," --\> ").split(/[\t ]+/);if(i.length<2)throw"Bad cue";k.id=r;k.start=b(i[0]);k.end=b(i[2]);for(l=k;h<p&&a[h];)o.push(a[h++]);l.text=o.join("<br />");f.push(d("subtitle",l))}catch(j){for(h=h;h<p&&a[h];)h++;h=h}}c.data=f;return c})})(Popcorn);(function(g){g.parser("parseXML","XML",function(b){var d={title:"",remote:"",data:[]},a={},c=function(i){i=i.split(":");if(i.length===1)return parseFloat(i[0],10);else if(i.length===2)return parseFloat(i[0],10)+parseFloat(i[1]/12,10);else if(i.length===3)return parseInt(i[0]*60,10)+parseFloat(i[1],10)+parseFloat(i[2]/12,10);else if(i.length===4)return parseInt(i[0]*3600,10)+parseInt(i[1]*60,10)+parseFloat(i[2],10)+parseFloat(i[3]/12,10)},f=function(i){for(var r={},k=0,j=i.length;k<j;k++){var v=i.item(k).nodeName,
-w=i.item(k).nodeValue;if(v==="in")r.start=c(w);else if(v==="out")r.end=c(w);else if(v==="resourceid")g.extend(r,a[w]);else r[v]=w}return r},h=function(i,r){var k={};k[i]=r;return k},p=function(i,r,k){var j={};g.extend(j,r,f(i.attributes),{text:i.textContent});r=i.childNodes;if(r.length<1||r.length===1&&r[0].nodeType===3)if(k)a[j.id]=j;else d.data.push(h(i.nodeName,j));else for(i=0;i<r.length;i++)r[i].nodeType===1&&p(r[i],j,k)};b=b.documentElement.childNodes;for(var o=0,l=b.length;o<l;o++)if(b[o].nodeType===
-1)b[o].nodeName==="manifest"?p(b[o],{},true):p(b[o],{},false);return d})})(Popcorn);(function(g,b){function d(l,i){if(l.currentStyle)return l.currentStyle[i];else if(b.getComputedStyle)return document.defaultView.getComputedStyle(l,null).getPropertyValue(i)}function a(l){return'<div><a href="'+l.user.profile+'"><img width="16px height="16px" src="'+l.user.avatar+'"></img>'+l.user.name+"</a> at "+function(i){var r=h(i/60);i=p(i%60);return r+"."+(i<10?"0":"")+i}(l.start)+" "+function(i){function r(k,j){return k+" "+j+(k>1?"s":"")+" ago"}i=((new Date).getTime()-i.getTime())/1E3;if(i<
-60)return r(p(i),"second");i/=60;if(i<60)return r(p(i),"minute");i/=60;if(i<24)return r(p(i),"hour");i/=24;if(i<30)return r(p(i),"day");if(i<365)return r(p(i/30),"month");return r(p(i/365),"year")}(l.date)+"<br />"+l.text+"</span>"}function c(l){if(b.swfobject&&b.soundcloud){var i={enable_api:true,object_id:l._playerId,url:l.src,show_comments:!l._options.api.key&&!l._options.api.commentdiv},r={id:l._playerId,name:l._playerId},k=document.createElement("div");k.setAttribute("id",l._playerId);l._container.appendChild(k);
-swfobject.embedSWF("http://player.soundcloud.com/player.swf",l._playerId,l.offsetWidth,l.height,"9.0.0","expressInstall.swf",i,{allowscriptaccess:"always",wmode:"transparent"},r)}else setTimeout(function(){c(l)},15)}var f=Math.abs,h=Math.floor,p=Math.round,o={};g.soundcloud=function(l,i,r){g.getScript("http://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js");g.getScript("http://popcornjs.org/code/players/soundcloud/lib/soundcloud.player.api.js",function(){var k=1;soundcloud.addEventListener("onPlayerReady",
-function(j,v){var w=o[j.api_getFlashId()];w.swfObj=j;w.duration=j.api_getTrackDuration();w.currentTime=j.api_getTrackPosition();w.volume=w.previousVolume=j.api_getVolume()/100;w._mediaId=v.mediaId;w.dispatchEvent("load");w.dispatchEvent("canplay");w.dispatchEvent("durationchange");w.timeupdate()});soundcloud.addEventListener("onMediaStart",function(j){j=o[j.api_getFlashId()];j.played=1;j.dispatchEvent("playing")});soundcloud.addEventListener("onMediaPlay",function(j){if(k)k=0;else o[j.api_getFlashId()].dispatchEvent("play")});
-soundcloud.addEventListener("onMediaPause",function(j){o[j.api_getFlashId()].dispatchEvent("pause")});soundcloud.addEventListener("onMediaBuffering",function(j){j=o[j.api_getFlashId()];j.dispatchEvent("progress");if(j.readyState===0){j.readyState=3;j.dispatchEvent("readystatechange")}});soundcloud.addEventListener("onMediaDoneBuffering",function(j){o[j.api_getFlashId()].dispatchEvent("canplaythrough")});soundcloud.addEventListener("onMediaEnd",function(j){j=o[j.api_getFlashId()];j.paused=1;j.dispatchEvent("ended")});
-soundcloud.addEventListener("onMediaSeek",function(j){var v=o[j.api_getFlashId()];v.setCurrentTime(j.api_getTrackPosition());v.paused&&v.dispatchEvent("timeupdate")});soundcloud.addEventListener("onPlayerError",function(j){o[j.api_getFlashId()].dispatchEvent("error")})});return new g.soundcloud.init(l,i,r)};g.soundcloud.init=function(){function l(i){var r=i._options,k=i._container,j=k.getBoundingClientRect();i.width=r.width||d(k,"width")||"100%";i.height=r.height||d(k,"height")||"81px";i.src=r.src;
-i.autoplay=r.autoplay;if(parseFloat(i.height,10)!==81)i.height="81px";i.offsetLeft=j.left;i.offsetTop=j.top;i.offsetHeight=parseFloat(i.height,10);i.offsetWidth=parseFloat(i.width,10);if(/[\d]+%/.test(i.width)){r=d(k,"width");i._container.style.width=i.width;i.offsetWidth=i._container.offsetWidth;i._container.style.width=r}if(/[\d]+%/.test(i.height)){r=d(k,"height");i._container.style.height=i.height;i.offsetHeight=i._container.offsetHeight;i._container.style.height=r}}return function(i,r,k){if(i)if(r){if(/file/.test(location.protocol))throw"Must run from a web server!";
-}else throw"Must supply a source!";else throw"Must supply an id!";if(!(this._container=document.getElementById(i)))throw"Could not find that container in the DOM!";k=k||{};k.api=k.api||{};k.target=i;k.src=r;k.api.commentformat=k.api.commentformat||a;this._mediaId=0;this._listeners={};this._playerId=g.guid(k.target);this._containerId=k.target;this._options=k;this._comments=[];this._popcorn=null;l(this);this.duration=0;this.volume=1;this.ended=this.currentTime=0;this.paused=1;this.readyState=0;this.playbackRate=
-1;this.left=this.top=0;this.autoplay=null;this.played=0;this.addEventListener("load",function(){var j=this.getBoundingClientRect();this.top=j.top;this.left=j.left;this.offsetWidth=this.swfObj.offsetWidth;this.offsetHeight=this.swfObj.offsetHeight;this.offsetLeft=this.swfObj.offsetLeft;this.offsetTop=this.swfObj.offsetTop});o[this._playerId]=this;c(this)}}();g.soundcloud.init.prototype=g.soundcloud.prototype;g.extend(g.soundcloud.prototype,{setVolume:function(l){if(!(!l&&l!==0)){if(l<0)l=-l;if(l>1)l%=
-1;this.volume=this.previousVolume=l;this.swfObj.api_setVolume(l*100);this.dispatchEvent("volumechange")}},setCurrentTime:function(l){if(!(!l&&l!==0)){this.currentTime=this.previousCurrentTime=l;this.ended=l>=this.duration;this.dispatchEvent("seeked")}},play:function(){if(this.swfObj){if(this.paused){this.paused=0;this.swfObj.api_play()}}else this.addEventListener("load",this.play)},pause:function(){if(this.swfObj){if(!this.paused){this.paused=1;this.swfObj.api_pause()}}else this.addEventListener("load",
-this.pause)},mute:function(){if(this.swfObj)if(this.muted())if(this.paused)this.setVolume(this.oldVol);else this.volume=this.oldVol;else{this.oldVol=this.volume;if(this.paused)this.setVolume(0);else this.volume=0}else this.addEventListener("load",this.mute)},muted:function(){return this.volume===0},load:function(){if(this.swfObj){this.play();this.pause()}else this.addEventListener("load",this.load)},addEventListener:function(l,i){this._listeners[l]||(this._listeners[l]=[]);this._listeners[l].push(i);
-return i},dispatchEvent:function(l){var i=this;l=l.type||l;l==="play"&&this.paused||l==="pause"&&!this.paused?this[l]():g.forEach(this._listeners[l],function(r){r.call(i)})},timeupdate:function(){var l=this,i=this.swfObj.api_getVolume()/100;if(f(this.currentTime-this.previousCurrentTime)>0.25)this.swfObj.api_seekTo(this.currentTime);else this.previousCurrentTime=this.currentTime=this.swfObj.api_getTrackPosition();if(i!==this.previousVolume)this.setVolume(i);else this.volume!==this.previousVolume&&
-this.setVolume(this.volume);this.paused||this.dispatchEvent("timeupdate");l.ended||setTimeout(function(){l.timeupdate.call(l)},33)},getBoundingClientRect:function(){var l;if(this.swfObj){l=this.swfObj.getBoundingClientRect();return{bottom:l.bottom,left:l.left,right:l.right,top:l.top,width:l.width||l.right-l.left,height:l.height||l.bottom-l.top}}else{tmp=this._container.getBoundingClientRect();return{left:tmp.left,top:tmp.top,width:this.offsetWidth,height:this.offsetHeight,bottom:tmp.top+this.width,
-right:tmp.top+this.height}}},registerPopcornWithPlayer:function(l){if(this.swfObj){this._popcorn=l;var i=this._options.api;if(i.key&&i.commentdiv){var r=this;g.xhr({url:"http://api.soundcloud.com/tracks/"+r._mediaId+"/comments.js?consumer_key="+i.key,success:function(k){g.forEach(k.json,function(j){r.addComment({start:j.timestamp/1E3,date:new Date(j.created_at),text:j.body,user:{name:j.user.username,profile:j.user.permalink_url,avatar:j.user.avatar_url}})})}})}}else this.addEventListener("load",function(){this.registerPopcornWithPlayer(l)})}});
-g.extend(g.soundcloud.prototype,{addComment:function(l,i){var r=this,k={start:l.start||0,date:l.date||new Date,text:l.text||"",user:{name:l.user.name||"",profile:l.user.profile||"",avatar:l.user.avatar||""},display:function(){return(i||r._options.api.commentformat)(k)}};this._comments.push(k);this._popcorn&&this._popcorn.subtitle({start:k.start,target:this._options.api.commentdiv,display:"inline",language:"en",text:k.display()})}})})(Popcorn,window);(function(){vimeo_player_loaded=function(g){vimeo_player_loaded[g]&&vimeo_player_loaded[g]()};vimeo_player_loaded.seek={};vimeo_player_loaded.loadProgress={};vimeo_player_loaded.play={};vimeo_player_loaded.pause={};Popcorn.player("vimeo",{_canPlayType:function(g,b){return/(?:http:\/\/www\.|http:\/\/|www\.|\.|^)(vimeo)/.test(b)&&g.toLowerCase()!=="video"},_setup:function(g){var b=this,d,a=document.createElement("div"),c=0,f=false,h=0,p,o;a.id=b.id+Popcorn.guid();b.appendChild(a);o=b.style.width?""+
-b.offsetWidth:"560";p=b.style.height?""+b.offsetHeight:"315";var l=function(){var i;i=b.src;var r=0,k=false;vimeo_player_loaded[a.id]=function(){d=document.getElementById(a.id);vimeo_player_loaded.seek[a.id]=function(w){if(w!==c){c=w;b.dispatchEvent("seeked");b.dispatchEvent("timeupdate")}};vimeo_player_loaded.play[a.id]=function(){if(b.paused){b.paused=false;b.dispatchEvent("play");b.dispatchEvent("playing");j()}};vimeo_player_loaded.pause[a.id]=function(){if(!b.paused){b.paused=true;b.dispatchEvent("pause")}};
-vimeo_player_loaded.loadProgress[a.id]=function(w){if(!k){k=true;b.dispatchEvent("loadstart")}w.percent===100&&b.dispatchEvent("canplaythrough")};d.api_addEventListener("seek","vimeo_player_loaded.seek."+a.id);d.api_addEventListener("loadProgress","vimeo_player_loaded.loadProgress."+a.id);d.api_addEventListener("play","vimeo_player_loaded.play."+a.id);d.api_addEventListener("pause","vimeo_player_loaded.pause."+a.id);var j=function(){if(!b.paused){c=d.api_getCurrentTime();b.dispatchEvent("timeupdate");
-setTimeout(j,10)}},v=function(){var w=d.api_getVolume()===0,n=d.api_getVolume();if(f!==w){f=w;b.dispatchEvent("volumechange")}if(h!==n){h=n;b.dispatchEvent("volumechange")}setTimeout(v,250)};b.play=function(){b.paused=false;b.dispatchEvent("play");b.dispatchEvent("playing");j();d.api_play()};b.pause=function(){if(!b.paused){b.paused=true;b.dispatchEvent("pause");d.api_pause()}};Popcorn.player.defineProperty(b,"currentTime",{set:function(w){if(!w)return c;c=+w;b.dispatchEvent("seeked");b.dispatchEvent("timeupdate");
-d.api_seekTo(c);return c},get:function(){return c}});Popcorn.player.defineProperty(b,"muted",{set:function(w){if(d.api_getVolume()===0!==w)if(w){r=d.api_getVolume();d.api_setVolume(0)}else d.api_setVolume(r)},get:function(){return d.api_getVolume()===0}});Popcorn.player.defineProperty(b,"volume",{set:function(w){if(!w||typeof w!=="number"||w<0||w>1)return d.api_getVolume()/100;if(d.api_getVolume()!==w){d.api_setVolume(w*100);h=d.api_getVolume();b.dispatchEvent("volumechange")}return d.api_getVolume()/
-100},get:function(){return d.api_getVolume()/100}});b.dispatchEvent("loadedmetadata");b.dispatchEvent("loadeddata");b.duration=d.api_getDuration();b.dispatchEvent("durationchange");v();b.readyState=4;b.dispatchEvent("canplaythrough")};i=/\d+$/.exec(i);i={clip_id:i?i[0]:0,api:1,js_swf_id:a.id};Popcorn.extend(i,g);swfobject.embedSWF("//vimeo.com/moogaloop.swf",a.id,o,p,"9.0.0","expressInstall.swf",i,{allowscriptaccess:"always",allowfullscreen:"true",wmode:"transparent"},{})};window.swfobject?l():Popcorn.getScript("//ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js",
-l)}})})();var onYouTubePlayerReady=function(g){onYouTubePlayerReady[g]&&onYouTubePlayerReady[g]()};onYouTubePlayerReady.stateChangeEventHandler={};onYouTubePlayerReady.onErrorEventHandler={};
-Popcorn.player("youtube",{_canPlayType:function(g,b){return/(?:http:\/\/www\.|http:\/\/|www\.|\.|^)(youtu)/.test(b)&&g.toLowerCase()!=="video"},_setup:function(g){var b=this,d=false,a=document.createElement("div"),c=0,f=0,h=true,p=false,o=false,l=100;b.paused=undefined;a.id=b.id+Popcorn.guid();g._container=a;b.appendChild(a);var i=function(){var r,k,j,v,w;onYouTubePlayerReady[a.id]=function(){g.youtubeObject=document.getElementById(a.id);onYouTubePlayerReady.stateChangeEventHandler[a.id]=function(C){if(!g.destroyed)if(C===
-2)if(p&&f===c&&f!==g.youtubeObject.getCurrentTime()){p=false;g.youtubeObject.seekTo(c)}else{c=g.youtubeObject.getCurrentTime();b.dispatchEvent("timeupdate");!b.paused&&b.pause()}else if(C===1&&!h)b.paused&&b.play();else if(C===-1)g.youtubeObject.playVideo();else if(C===1&&h){h=false;if(b.paused===true)b.pause();else if(b.paused===false)b.play();else if(d)b.play();else d||b.pause();b.duration=g.youtubeObject.getDuration();b.dispatchEvent("durationchange");y();b.dispatchEvent("loadedmetadata");b.dispatchEvent("loadeddata");
-b.readyState=4;b.dispatchEvent("canplaythrough")}else C===0&&b.dispatchEvent("ended")};onYouTubePlayerReady.onErrorEventHandler[a.id]=function(C){[2,100,101,150].indexOf(C)!==-1&&b.dispatchEvent("error")};g.youtubeObject.addEventListener("onStateChange","onYouTubePlayerReady.stateChangeEventHandler."+a.id);g.youtubeObject.addEventListener("onError","onYouTubePlayerReady.onErrorEventHandler."+a.id);var n=function(){if(!g.destroyed)if(!b.paused){c=g.youtubeObject.getCurrentTime();b.dispatchEvent("timeupdate");
-setTimeout(n,10)}},y=function(){if(!g.destroyed){if(o!==g.youtubeObject.isMuted()){o=g.youtubeObject.isMuted();b.dispatchEvent("volumechange")}if(l!==g.youtubeObject.getVolume()){l=g.youtubeObject.getVolume();b.dispatchEvent("volumechange")}setTimeout(y,250)}};b.play=function(){if(!g.destroyed){if(b.paused!==false||g.youtubeObject.getPlayerState()!==1){b.paused=false;b.dispatchEvent("play");b.dispatchEvent("playing")}n();g.youtubeObject.playVideo()}};b.pause=function(){if(!g.destroyed)if(b.paused!==
-true||g.youtubeObject.getPlayerState()!==2){b.paused=true;b.dispatchEvent("pause");g.youtubeObject.pauseVideo()}};Popcorn.player.defineProperty(b,"currentTime",{set:function(C){c=f=+C;p=true;if(g.destroyed)return c;b.dispatchEvent("seeked");b.dispatchEvent("timeupdate");g.youtubeObject.seekTo(c);return c},get:function(){return c}});Popcorn.player.defineProperty(b,"muted",{set:function(C){if(g.destroyed)return C;if(g.youtubeObject.isMuted()!==C){C?g.youtubeObject.mute():g.youtubeObject.unMute();o=
-g.youtubeObject.isMuted();b.dispatchEvent("volumechange")}return g.youtubeObject.isMuted()},get:function(){if(g.destroyed)return 0;return g.youtubeObject.isMuted()}});Popcorn.player.defineProperty(b,"volume",{set:function(C){if(g.destroyed)return C;if(g.youtubeObject.getVolume()/100!==C){g.youtubeObject.setVolume(C*100);l=g.youtubeObject.getVolume();b.dispatchEvent("volumechange")}return g.youtubeObject.getVolume()/100},get:function(){if(g.destroyed)return 0;return g.youtubeObject.getVolume()/100}})};
-g.controls=+g.controls===0||+g.controls===1?g.controls:1;g.annotations=+g.annotations===1||+g.annotations===3?g.annotations:1;r={playerapiid:a.id};k=/^.*(?:\/|v=)(.{11})/.exec(b.src)[1];w=(b.src.split("?")[1]||"").replace(/v=.{11}/,"");d=/autoplay=1/.test(w);j=b.style.width?""+b.offsetWidth:"560";v=b.style.height?""+b.offsetHeight:"315";k={id:a.id,"data-youtube-player":"//www.youtube.com/e/"+k+"?"+w+"&enablejsapi=1&playerapiid="+a.id+"&version=3"};swfobject.embedSWF(k["data-youtube-player"],a.id,
-j,v,"8",undefined,r,{wmode:"transparent",allowScriptAccess:"always"},k)};window.swfobject?i():Popcorn.getScript("//ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js",i)},_teardown:function(g){g.destroyed=true;g.youtubeObject.stopVideo();g.youtubeObject.clearVideo();this.removeChild(document.getElementById(g._container.id))}});
+(function(r,f){function n(a,g){return function(){if(d.plugin.debug)return a.apply(this,arguments);try{return a.apply(this,arguments)}catch(l){d.plugin.errors.push({plugin:g,thrown:l,source:a.toString()});this.emit("pluginerror",d.plugin.errors)}}}if(f.addEventListener){var c=Array.prototype,b=Object.prototype,e=c.forEach,h=c.slice,i=b.hasOwnProperty,j=b.toString,p=r.Popcorn,m=[],o=false,q={events:{hash:{},apis:{}}},s=function(){return r.requestAnimationFrame||r.webkitRequestAnimationFrame||r.mozRequestAnimationFrame||
+r.oRequestAnimationFrame||r.msRequestAnimationFrame||function(a){r.setTimeout(a,16)}}(),d=function(a,g){return new d.p.init(a,g||null)};d.version="1.3";d.isSupported=true;d.instances=[];d.p=d.prototype={init:function(a,g){var l,k=this;if(typeof a==="function")if(f.readyState==="complete")a(f,d);else{m.push(a);if(!o){o=true;var t=function(){f.removeEventListener("DOMContentLoaded",t,false);for(var z=0,C=m.length;z<C;z++)m[z].call(f,d);m=null};f.addEventListener("DOMContentLoaded",t,false)}}else{if(typeof a===
+"string")try{l=f.querySelector(a)}catch(u){throw Error("Popcorn.js Error: Invalid media element selector: "+a);}this.media=l||a;l=this.media.nodeName&&this.media.nodeName.toLowerCase()||"video";this[l]=this.media;this.options=g||{};this.id=this.options.id||d.guid(l);if(d.byId(this.id))throw Error("Popcorn.js Error: Cannot use duplicate ID ("+this.id+")");this.isDestroyed=false;this.data={running:{cue:[]},timeUpdate:d.nop,disabled:{},events:{},hooks:{},history:[],state:{volume:this.media.volume},trackRefs:{},
+trackEvents:{byStart:[{start:-1,end:-1}],byEnd:[{start:-1,end:-1}],animating:[],startIndex:0,endIndex:0,previousUpdateTime:-1}};d.instances.push(this);var v=function(){if(k.media.currentTime<0)k.media.currentTime=0;k.media.removeEventListener("loadeddata",v,false);var z,C,E,B,w;z=k.media.duration;z=z!=z?Number.MAX_VALUE:z+1;d.addTrackEvent(k,{start:z,end:z});if(k.options.frameAnimation){k.data.timeUpdate=function(){d.timeUpdate(k,{});d.forEach(d.manifest,function(D,F){if(C=k.data.running[F]){B=C.length;
+for(var I=0;I<B;I++){E=C[I];(w=E._natives)&&w.frame&&w.frame.call(k,{},E,k.currentTime())}}});k.emit("timeupdate");!k.isDestroyed&&s(k.data.timeUpdate)};!k.isDestroyed&&s(k.data.timeUpdate)}else{k.data.timeUpdate=function(D){d.timeUpdate(k,D)};k.isDestroyed||k.media.addEventListener("timeupdate",k.data.timeUpdate,false)}};Object.defineProperty(this,"error",{get:function(){return k.media.error}});k.media.readyState>=2?v():k.media.addEventListener("loadeddata",v,false);return this}}};d.p.init.prototype=
+d.p;d.byId=function(a){for(var g=d.instances,l=g.length,k=0;k<l;k++)if(g[k].id===a)return g[k];return null};d.forEach=function(a,g,l){if(!a||!g)return{};l=l||this;var k,t;if(e&&a.forEach===e)return a.forEach(g,l);if(j.call(a)==="[object NodeList]"){k=0;for(t=a.length;k<t;k++)g.call(l,a[k],k,a);return a}for(k in a)i.call(a,k)&&g.call(l,a[k],k,a);return a};d.extend=function(a){var g=h.call(arguments,1);d.forEach(g,function(l){for(var k in l)a[k]=l[k]});return a};d.extend(d,{noConflict:function(a){if(a)r.Popcorn=
+p;return d},error:function(a){throw Error(a);},guid:function(a){d.guid.counter++;return(a?a:"")+(+new Date+d.guid.counter)},sizeOf:function(a){var g=0,l;for(l in a)g++;return g},isArray:Array.isArray||function(a){return j.call(a)==="[object Array]"},nop:function(){},position:function(a){a=a.getBoundingClientRect();var g={},l=f.documentElement,k=f.body,t,u,v;t=l.clientTop||k.clientTop||0;u=l.clientLeft||k.clientLeft||0;v=r.pageYOffset&&l.scrollTop||k.scrollTop;l=r.pageXOffset&&l.scrollLeft||k.scrollLeft;
+t=Math.ceil(a.top+v-t);u=Math.ceil(a.left+l-u);for(var z in a)g[z]=Math.round(a[z]);return d.extend({},g,{top:t,left:u})},disable:function(a,g){if(!a.data.disabled[g]){a.data.disabled[g]=true;for(var l=a.data.running[g].length-1,k;l>=0;l--){k=a.data.running[g][l];k._natives.end.call(a,null,k)}}return a},enable:function(a,g){if(a.data.disabled[g]){a.data.disabled[g]=false;for(var l=a.data.running[g].length-1,k;l>=0;l--){k=a.data.running[g][l];k._natives.start.call(a,null,k)}}return a},destroy:function(a){var g=
+a.data.events,l=a.data.trackEvents,k,t,u,v;for(t in g){k=g[t];for(u in k)delete k[u];g[t]=null}for(v in d.registryByName)d.removePlugin(a,v);l.byStart.length=0;l.byEnd.length=0;if(!a.isDestroyed){a.data.timeUpdate&&a.media.removeEventListener("timeupdate",a.data.timeUpdate,false);a.isDestroyed=true}}});d.guid.counter=1;d.extend(d.p,function(){var a={};d.forEach("load play pause currentTime playbackRate volume duration preload playbackRate autoplay loop controls muted buffered readyState seeking paused played seekable ended".split(/\s+/g),
+function(g){a[g]=function(l){var k;if(typeof this.media[g]==="function"){if(l!=null&&/play|pause/.test(g))this.media.currentTime=d.util.toSeconds(l);this.media[g]();return this}if(l!=null){k=this.media[g];this.media[g]=l;k!==l&&this.emit("attrchange",{attribute:g,previousValue:k,currentValue:l});return this}return this.media[g]}});return a}());d.forEach("enable disable".split(" "),function(a){d.p[a]=function(g){return d[a](this,g)}});d.extend(d.p,{roundTime:function(){return Math.round(this.media.currentTime)},
+exec:function(a,g,l){var k=arguments.length,t,u;try{u=d.util.toSeconds(a)}catch(v){}if(typeof u==="number")a=u;if(typeof a==="number"&&k===2){l=g;g=a;a=d.guid("cue")}else if(k===1)g=-1;else if(t=this.getTrackEvent(a)){if(typeof a==="string"&&k===2){if(typeof g==="number")l=t._natives.start;if(typeof g==="function"){l=g;g=t.start}}}else if(k>=2){if(typeof g==="string"){try{u=d.util.toSeconds(g)}catch(z){}g=u}if(typeof g==="number")l=d.nop();if(typeof g==="function"){l=g;g=-1}}d.addTrackEvent(this,
+{id:a,start:g,end:g+1,_running:false,_natives:{start:l||d.nop,end:d.nop,type:"cue"}});return this},mute:function(a){a=a==null||a===true?"muted":"unmuted";if(a==="unmuted"){this.media.muted=false;this.media.volume=this.data.state.volume}if(a==="muted"){this.data.state.volume=this.media.volume;this.media.muted=true}this.emit(a);return this},unmute:function(a){return this.mute(a==null?false:!a)},position:function(){return d.position(this.media)},toggle:function(a){return d[this.data.disabled[a]?"enable":
+"disable"](this,a)},defaults:function(a,g){if(d.isArray(a)){d.forEach(a,function(l){for(var k in l)this.defaults(k,l[k])},this);return this}if(!this.options.defaults)this.options.defaults={};this.options.defaults[a]||(this.options.defaults[a]={});d.extend(this.options.defaults[a],g);return this}});d.Events={UIEvents:"blur focus focusin focusout load resize scroll unload",MouseEvents:"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave click dblclick",Events:"loadstart progress suspend emptied stalled play pause error loadedmetadata loadeddata waiting playing canplay canplaythrough seeking seeked timeupdate ended ratechange durationchange volumechange"};
+d.Events.Natives=d.Events.UIEvents+" "+d.Events.MouseEvents+" "+d.Events.Events;q.events.apiTypes=["UIEvents","MouseEvents","Events"];(function(a,g){for(var l=q.events.apiTypes,k=a.Natives.split(/\s+/g),t=0,u=k.length;t<u;t++)g.hash[k[t]]=true;l.forEach(function(v){g.apis[v]={};for(var z=a[v].split(/\s+/g),C=z.length,E=0;E<C;E++)g.apis[v][z[E]]=true})})(d.Events,q.events);d.events={isNative:function(a){return!!q.events.hash[a]},getInterface:function(a){if(!d.events.isNative(a))return false;var g=
+q.events,l=g.apiTypes;g=g.apis;for(var k=0,t=l.length,u,v;k<t;k++){v=l[k];if(g[v][a]){u=v;break}}return u},all:d.Events.Natives.split(/\s+/g),fn:{trigger:function(a,g){var l;if(this.data.events[a]&&d.sizeOf(this.data.events[a])){if(l=d.events.getInterface(a)){l=f.createEvent(l);l.initEvent(a,true,true,r,1);this.media.dispatchEvent(l);return this}d.forEach(this.data.events[a],function(k){k.call(this,g)},this)}return this},listen:function(a,g){var l=this,k=true,t=d.events.hooks[a],u;if(!this.data.events[a]){this.data.events[a]=
+{};k=false}if(t){t.add&&t.add.call(this,{},g);if(t.bind)a=t.bind;if(t.handler){u=g;g=function(v){t.handler.call(l,v,u)}}k=true;if(!this.data.events[a]){this.data.events[a]={};k=false}}this.data.events[a][g.name||g.toString()+d.guid()]=g;!k&&d.events.all.indexOf(a)>-1&&this.media.addEventListener(a,function(v){d.forEach(l.data.events[a],function(z){typeof z==="function"&&z.call(l,v)})},false);return this},unlisten:function(a,g){if(this.data.events[a]&&this.data.events[a][g]){delete this.data.events[a][g];
+return this}this.data.events[a]=null;return this}},hooks:{canplayall:{bind:"canplaythrough",add:function(a,g){var l=false;if(this.media.readyState){g.call(this,a);l=true}this.data.hooks.canplayall={fired:l}},handler:function(a,g){if(!this.data.hooks.canplayall.fired){g.call(this,a);this.data.hooks.canplayall.fired=true}}}}};d.forEach([["trigger","emit"],["listen","on"],["unlisten","off"]],function(a){d.p[a[0]]=d.p[a[1]]=d.events.fn[a[0]]});d.addTrackEvent=function(a,g){var l,k;if(g.id)l=a.getTrackEvent(g.id);
+if(l){k=true;g=d.extend({},l,g);a.removeTrackEvent(g.id)}if(g&&g._natives&&g._natives.type&&a.options.defaults&&a.options.defaults[g._natives.type])g=d.extend({},a.options.defaults[g._natives.type],g);if(g._natives){g._id=g.id||g._id||d.guid(g._natives.type);a.data.history.push(g._id)}g.start=d.util.toSeconds(g.start,a.options.framerate);g.end=d.util.toSeconds(g.end,a.options.framerate);var t=a.data.trackEvents.byStart,u=a.data.trackEvents.byEnd,v;for(v=t.length-1;v>=0;v--)if(g.start>=t[v].start){t.splice(v+
+1,0,g);break}for(t=u.length-1;t>=0;t--)if(g.end>u[t].end){u.splice(t+1,0,g);break}if(g.end>a.media.currentTime&&g.start<=a.media.currentTime){g._running=true;a.data.running[g._natives.type].push(g);a.data.disabled[g._natives.type]||g._natives.start.call(a,null,g)}v<=a.data.trackEvents.startIndex&&g.start<=a.data.trackEvents.previousUpdateTime&&a.data.trackEvents.startIndex++;t<=a.data.trackEvents.endIndex&&g.end<a.data.trackEvents.previousUpdateTime&&a.data.trackEvents.endIndex++;this.timeUpdate(a,
+null,true);g._id&&d.addTrackEvent.ref(a,g);if(k){k=g._natives.type==="cue"?"cuechange":"trackchange";a.emit(k,{id:g.id,previousValue:{time:l.start,fn:l._natives.start},currentValue:{time:g.start,fn:g._natives.start}})}};d.addTrackEvent.ref=function(a,g){a.data.trackRefs[g._id]=g;return a};d.removeTrackEvent=function(a,g){for(var l,k,t=a.data.history.length,u=a.data.trackEvents.byStart.length,v=0,z=0,C=[],E=[],B=[],w=[];--u>-1;){l=a.data.trackEvents.byStart[v];k=a.data.trackEvents.byEnd[v];if(!l._id){C.push(l);
+E.push(k)}if(l._id){l._id!==g&&C.push(l);k._id!==g&&E.push(k);if(l._id===g){z=v;l._natives._teardown&&l._natives._teardown.call(a,l)}}v++}u=a.data.trackEvents.animating.length;v=0;if(u)for(;--u>-1;){l=a.data.trackEvents.animating[v];l._id||B.push(l);l._id&&l._id!==g&&B.push(l);v++}z<=a.data.trackEvents.startIndex&&a.data.trackEvents.startIndex--;z<=a.data.trackEvents.endIndex&&a.data.trackEvents.endIndex--;a.data.trackEvents.byStart=C;a.data.trackEvents.byEnd=E;a.data.trackEvents.animating=B;for(u=
+0;u<t;u++)a.data.history[u]!==g&&w.push(a.data.history[u]);a.data.history=w;d.removeTrackEvent.ref(a,g)};d.removeTrackEvent.ref=function(a,g){delete a.data.trackRefs[g];return a};d.getTrackEvents=function(a){var g=[];a=a.data.trackEvents.byStart;for(var l=a.length,k=0,t;k<l;k++){t=a[k];t._id&&g.push(t)}return g};d.getTrackEvents.ref=function(a){return a.data.trackRefs};d.getTrackEvent=function(a,g){return a.data.trackRefs[g]};d.getTrackEvent.ref=function(a,g){return a.data.trackRefs[g]};d.getLastTrackEventId=
+function(a){return a.data.history[a.data.history.length-1]};d.timeUpdate=function(a,g){var l=a.media.currentTime,k=a.data.trackEvents.previousUpdateTime,t=a.data.trackEvents,u=t.endIndex,v=t.startIndex,z=t.byStart.length,C=t.byEnd.length,E=d.registryByName,B,w,D;if(k<=l){for(;t.byEnd[u]&&t.byEnd[u].end<=l;){B=t.byEnd[u];w=(k=B._natives)&&k.type;if(!k||E[w]||a[w]){if(B._running===true){B._running=false;D=a.data.running[w];D.splice(D.indexOf(B),1);if(!a.data.disabled[w]){k.end.call(a,g,B);a.emit("trackend",
+d.extend({},B,{plugin:w,type:"trackend"}))}}u++}else{d.removeTrackEvent(a,B._id);return}}for(;t.byStart[v]&&t.byStart[v].start<=l;){B=t.byStart[v];w=(k=B._natives)&&k.type;if(!k||E[w]||a[w]){if(B.end>l&&B._running===false){B._running=true;a.data.running[w].push(B);if(!a.data.disabled[w]){k.start.call(a,g,B);a.emit("trackstart",d.extend({},B,{plugin:w,type:"trackstart"}))}}v++}else{d.removeTrackEvent(a,B._id);return}}}else if(k>l){for(;t.byStart[v]&&t.byStart[v].start>l;){B=t.byStart[v];w=(k=B._natives)&&
+k.type;if(!k||E[w]||a[w]){if(B._running===true){B._running=false;D=a.data.running[w];D.splice(D.indexOf(B),1);if(!a.data.disabled[w]){k.end.call(a,g,B);a.emit("trackend",d.extend({},B,{plugin:w,type:"trackend"}))}}v--}else{d.removeTrackEvent(a,B._id);return}}for(;t.byEnd[u]&&t.byEnd[u].end>l;){B=t.byEnd[u];w=(k=B._natives)&&k.type;if(!k||E[w]||a[w]){if(B.start<=l&&B._running===false){B._running=true;a.data.running[w].push(B);if(!a.data.disabled[w]){k.start.call(a,g,B);a.emit("trackstart",d.extend({},
+B,{plugin:w,type:"trackstart"}))}}u--}else{d.removeTrackEvent(a,B._id);return}}}t.endIndex=u;t.startIndex=v;t.previousUpdateTime=l;t.byStart.length<z&&t.startIndex--;t.byEnd.length<C&&t.endIndex--};d.extend(d.p,{getTrackEvents:function(){return d.getTrackEvents.call(null,this)},getTrackEvent:function(a){return d.getTrackEvent.call(null,this,a)},getLastTrackEventId:function(){return d.getLastTrackEventId.call(null,this)},removeTrackEvent:function(a){d.removeTrackEvent.call(null,this,a);return this},
+removePlugin:function(a){d.removePlugin.call(null,this,a);return this},timeUpdate:function(a){d.timeUpdate.call(null,this,a);return this},destroy:function(){d.destroy.call(null,this);return this}});d.manifest={};d.registry=[];d.registryByName={};d.plugin=function(a,g,l){if(d.protect.natives.indexOf(a.toLowerCase())>=0)d.error("'"+a+"' is a protected function name");else{var k=["start","end"],t={},u=typeof g==="function",v=["_setup","_teardown","start","end","frame"],z=function(B,w){B=B||d.nop;w=w||
+d.nop;return function(){B.apply(this,arguments);w.apply(this,arguments)}};d.manifest[a]=l=l||g.manifest||{};v.forEach(function(B){g[B]=n(g[B]||d.nop,a)});var C=function(B,w){if(!w)return this;if(w.ranges&&d.isArray(w.ranges)){d.forEach(w.ranges,function(G){G=d.extend({},w,G);delete G.ranges;this[a](G)},this);return this}var D=w._natives={},F="",I;d.extend(D,B);w._natives.type=a;w._running=false;D.start=D.start||D["in"];D.end=D.end||D.out;if(w.once)D.end=z(D.end,function(){this.removeTrackEvent(w._id)});
+D._teardown=z(function(){var G=h.call(arguments),H=this.data.running[D.type];G.unshift(null);G[1]._running&&H.splice(H.indexOf(w),1)&&D.end.apply(this,G)},D._teardown);w.compose=w.compose&&w.compose.split(" ")||[];w.effect=w.effect&&w.effect.split(" ")||[];w.compose=w.compose.concat(w.effect);w.compose.forEach(function(G){F=d.compositions[G]||{};v.forEach(function(H){D[H]=z(D[H],F[H])})});w._natives.manifest=l;if(!("start"in w))w.start=w["in"]||0;if(!w.end&&w.end!==0)w.end=w.out||Number.MAX_VALUE;
+if(!i.call(w,"toString"))w.toString=function(){var G=["start: "+w.start,"end: "+w.end,"id: "+(w.id||w._id)];w.target!=null&&G.push("target: "+w.target);return a+" ( "+G.join(", ")+" )"};if(!w.target){I="options"in l&&l.options;w.target=I&&"target"in I&&I.target}if(w._natives)w._id=d.guid(w._natives.type);w._natives._setup&&w._natives._setup.call(this,w);d.addTrackEvent(this,w);d.forEach(B,function(G,H){H!=="type"&&k.indexOf(H)===-1&&this.on(H,G)},this);return this};d.p[a]=t[a]=function(B,w){var D;
+if(B&&!w)w=B;else if(D=this.getTrackEvent(B)){w=d.extend({},D,w);d.addTrackEvent(this,w);return this}else w.id=B;this.data.running[a]=this.data.running[a]||[];D=d.extend({},this.options.defaults&&this.options.defaults[a]||{},w);return C.call(this,u?g.call(this,D):g,D)};l&&d.extend(g,{manifest:l});var E={fn:t[a],definition:g,base:g,parents:[],name:a};d.registry.push(d.extend(t,E,{type:a}));d.registryByName[a]=E;return t}};d.plugin.errors=[];d.plugin.debug=d.version==="1.3";d.removePlugin=function(a,
+g){if(!g){g=a;a=d.p;if(d.protect.natives.indexOf(g.toLowerCase())>=0){d.error("'"+g+"' is a protected function name");return}var l=d.registry.length,k;for(k=0;k<l;k++)if(d.registry[k].name===g){d.registry.splice(k,1);delete d.registryByName[g];delete d.manifest[g];delete a[g];return}}l=a.data.trackEvents.byStart;k=a.data.trackEvents.byEnd;var t=a.data.trackEvents.animating,u,v;u=0;for(v=l.length;u<v;u++){if(l[u]&&l[u]._natives&&l[u]._natives.type===g){l[u]._natives._teardown&&l[u]._natives._teardown.call(a,
+l[u]);l.splice(u,1);u--;v--;if(a.data.trackEvents.startIndex<=u){a.data.trackEvents.startIndex--;a.data.trackEvents.endIndex--}}k[u]&&k[u]._natives&&k[u]._natives.type===g&&k.splice(u,1)}u=0;for(v=t.length;u<v;u++)if(t[u]&&t[u]._natives&&t[u]._natives.type===g){t.splice(u,1);u--;v--}};d.compositions={};d.compose=function(a,g,l){d.manifest[a]=l||g.manifest||{};d.compositions[a]=g};d.plugin.effect=d.effect=d.compose;var A=/^(?:\.|#|\[)/;d.dom={debug:false,find:function(a,g){var l=null;a=a.trim();g=
+g||f;if(a){if(!A.test(a)){l=f.getElementById(a);if(l!==null)return l}try{l=g.querySelector(a)}catch(k){if(d.dom.debug)throw Error(k);}}return l}};var y=/\?/,x={url:"",data:"",dataType:"",success:d.nop,type:"GET",async:true,xhr:function(){return new r.XMLHttpRequest}};d.xhr=function(a){a.dataType=a.dataType&&a.dataType.toLowerCase()||null;if(a.dataType&&(a.dataType==="jsonp"||a.dataType==="script"))d.xhr.getJSONP(a.url,a.success,a.dataType==="script");else{a=d.extend({},x,a);a.ajax=a.xhr();if(a.ajax){if(a.type===
+"GET"&&a.data){a.url+=(y.test(a.url)?"&":"?")+a.data;a.data=null}a.ajax.open(a.type,a.url,a.async);a.ajax.send(a.data||null);return d.xhr.httpData(a)}}};d.xhr.httpData=function(a){var g,l=null,k,t=null;a.ajax.onreadystatechange=function(){if(a.ajax.readyState===4){try{l=JSON.parse(a.ajax.responseText)}catch(u){}g={xml:a.ajax.responseXML,text:a.ajax.responseText,json:l};if(!g.xml||!g.xml.documentElement){g.xml=null;try{k=new DOMParser;t=k.parseFromString(a.ajax.responseText,"text/xml");if(!t.getElementsByTagName("parsererror").length)g.xml=
+t}catch(v){}}if(a.dataType)g=g[a.dataType];a.success.call(a.ajax,g)}};return g};d.xhr.getJSONP=function(a,g,l){var k=f.head||f.getElementsByTagName("head")[0]||f.documentElement,t=f.createElement("script"),u=false,v=[];v=/(=)\?(?=&|$)|\?\?/;var z,C;if(!l){C=a.match(/(callback=[^&]*)/);if(C!==null&&C.length){v=C[1].split("=")[1];if(v==="?")v="jsonp";z=d.guid(v);a=a.replace(/(callback=[^&]*)/,"callback="+z)}else{z=d.guid("jsonp");if(v.test(a))a=a.replace(v,"$1"+z);v=a.split(/\?(.+)?/);a=v[0]+"?";if(v[1])a+=
+v[1]+"&";a+="callback="+z}window[z]=function(E){g&&g(E);u=true}}t.addEventListener("load",function(){l&&g&&g();u&&delete window[z];k.removeChild(t)},false);t.src=a;k.insertBefore(t,k.firstChild)};d.getJSONP=d.xhr.getJSONP;d.getScript=d.xhr.getScript=function(a,g){return d.xhr.getJSONP(a,g,true)};d.util={toSeconds:function(a,g){var l=/^([0-9]+:){0,2}[0-9]+([.;][0-9]+)?$/,k,t,u;if(typeof a==="number")return a;typeof a==="string"&&!l.test(a)&&d.error("Invalid time format");l=a.split(":");k=l.length-
+1;t=l[k];if(t.indexOf(";")>-1){t=t.split(";");u=0;if(g&&typeof g==="number")u=parseFloat(t[1],10)/g;l[k]=parseInt(t[0],10)+u}k=l[0];return{1:parseFloat(k,10),2:parseInt(k,10)*60+parseFloat(l[1],10),3:parseInt(k,10)*3600+parseInt(l[1],10)*60+parseFloat(l[2],10)}[l.length||1]}};d.p.cue=d.p.exec;d.protect={natives:function(a){return Object.keys?Object.keys(a):function(g){var l,k=[];for(l in g)i.call(g,l)&&k.push(l);return k}(a)}(d.p).map(function(a){return a.toLowerCase()})};d.forEach({listen:"on",unlisten:"off",
+trigger:"emit",exec:"cue"},function(a,g){var l=d.p[g];d.p[g]=function(){if(typeof console!=="undefined"&&console.warn){console.warn("Deprecated method '"+g+"', "+(a==null?"do not use.":"use '"+a+"' instead."));d.p[g]=l}return d.p[a].apply(this,[].slice.call(arguments))}});r.Popcorn=d}else{r.Popcorn={isSupported:false};for(c="byId forEach extend effects error guid sizeOf isArray nop position disable enable destroyaddTrackEvent removeTrackEvent getTrackEvents getTrackEvent getLastTrackEventId timeUpdate plugin removePlugin compose effect xhr getJSONP getScript".split(/\s+/);c.length;)r.Popcorn[c.shift()]=
+function(){}}})(window,window.document);(function(r,f){var n=r.document,c=r.location,b=/:\/\//,e=c.href.replace(c.href.split("/").slice(-1)[0],""),h=function(j,p,m){j=j||0;p=(p||j||0)+1;m=m||1;p=Math.ceil((p-j)/m)||0;var o=0,q=[];for(q.length=p;o<p;){q[o++]=j;j+=m}return q};f.sequence=function(j,p){return new f.sequence.init(j,p)};f.sequence.init=function(j,p){this.parent=n.getElementById(j);this.seqId=f.guid("__sequenced");this.queue=[];this.playlist=[];this.inOuts={ofVideos:[],ofClips:[]};this.dims={width:0,height:0};this.active=0;this.playing=
+this.cycling=false;this.times={last:0};this.events={};var m=this,o=0;f.forEach(p,function(q,s){var d=n.createElement("video");d.preload="auto";d.controls=true;d.style.display=s&&"none"||"";d.id=m.seqId+"-"+s;m.queue.push(d);var A=q["in"],y=q.out;m.inOuts.ofVideos.push({"in":A!==undefined&&A||1,out:y!==undefined&&y||0});m.inOuts.ofVideos[s].out=m.inOuts.ofVideos[s].out||m.inOuts.ofVideos[s]["in"]+2;d.src=!b.test(q.src)?e+q.src:q.src;d.setAttribute("data-sequence-owner",j);d.setAttribute("data-sequence-guid",
+m.seqId);d.setAttribute("data-sequence-id",s);d.setAttribute("data-sequence-clip",[m.inOuts.ofVideos[s]["in"],m.inOuts.ofVideos[s].out].join(":"));m.parent.appendChild(d);m.playlist.push(f("#"+d.id))});m.inOuts.ofVideos.forEach(function(q){q={"in":o,out:o+(q.out-q["in"])};m.inOuts.ofClips.push(q);o=q.out+1});f.forEach(this.queue,function(q,s){function d(){if(!s){m.dims.width=q.videoWidth;m.dims.height=q.videoHeight}q.currentTime=m.inOuts.ofVideos[s]["in"]-0.5;q.removeEventListener("canplaythrough",
+d,false);return true}q.addEventListener("canplaythrough",d,false);q.addEventListener("play",function(){m.playing=true},false);q.addEventListener("pause",function(){m.playing=false},false);q.addEventListener("timeupdate",function(A){A=A.srcElement||A.target;A=+(A.dataset&&A.dataset.sequenceId||A.getAttribute("data-sequence-id"));var y=Math.floor(q.currentTime);if(m.times.last!==y&&A===m.active){m.times.last=y;y===m.inOuts.ofVideos[A].out&&f.sequence.cycle.call(m,A)}},false)});return this};f.sequence.init.prototype=
+f.sequence.prototype;f.sequence.cycle=function(j){this.queue||f.error("Popcorn.sequence.cycle is not a public method");var p=this.queue,m=this.inOuts.ofVideos,o=p[j],q=0,s;if(p[j+1])q=j+1;if(p[j+1]){p=p[q];m=m[q];f.extend(p,{width:this.dims.width,height:this.dims.height});s=this.playlist[q];o.pause();this.active=q;this.times.last=m["in"]-1;s.currentTime(m["in"]);s[q?"play":"pause"]();this.trigger("cycle",{position:{previous:j,current:q}});if(q){o.style.display="none";p.style.display=""}this.cycling=
+false}else this.playlist[j].pause();return this};var i=["timeupdate","play","pause"];f.extend(f.sequence.prototype,{eq:function(j){return this.playlist[j]},remove:function(){this.parent.innerHTML=null},clip:function(j){return this.inOuts.ofVideos[j]},duration:function(){for(var j=0,p=this.inOuts.ofClips,m=0;m<p.length;m++)j+=p[m].out-p[m]["in"]+1;return j-1},play:function(){this.playlist[this.active].play();return this},exec:function(j,p){var m=this.active;this.inOuts.ofClips.forEach(function(o,q){if(j>=
+o["in"]&&j<=o.out)m=q});j+=this.inOuts.ofVideos[m]["in"]-this.inOuts.ofClips[m]["in"];f.addTrackEvent(this.playlist[m],{start:j-1,end:j,_running:false,_natives:{start:p||f.nop,end:f.nop,type:"exec"}});return this},listen:function(j,p){var m=this,o=this.playlist,q=o.length,s=0;if(!p)p=f.nop;if(f.Events.Natives.indexOf(j)>-1)f.forEach(o,function(d){d.listen(j,function(A){A.active=m;if(i.indexOf(j)>-1)p.call(d,A);else++s===q&&p.call(d,A)})});else{this.events[j]||(this.events[j]={});o=p.name||f.guid("__"+
+j);this.events[j][o]=p}return this},unlisten:function(){},trigger:function(j,p){var m=this;if(!(f.Events.Natives.indexOf(j)>-1)){this.events[j]&&f.forEach(this.events[j],function(o){o.call(m,{type:j},p)});return this}}});f.forEach(f.manifest,function(j,p){f.sequence.prototype[p]=function(m){var o={},q=[],s,d,A,y,x;for(s=0;s<this.inOuts.ofClips.length;s++){q=this.inOuts.ofClips[s];d=h(q["in"],q.out);A=d.indexOf(m.start);y=d.indexOf(m.end);if(A>-1)o[s]=f.extend({},q,{start:d[A],clipIdx:A});if(y>-1)o[s]=
+f.extend({},q,{end:d[y],clipIdx:y})}s=Object.keys(o).map(function(g){return+g});q=h(s[0],s[1]);for(s=0;s<q.length;s++){A={};y=q[s];var a=o[y];if(a){x=this.inOuts.ofVideos[y];d=a.clipIdx;x=h(x["in"],x.out);if(a.start){A.start=x[d];A.end=x[x.length-1]}if(a.end){A.start=x[0];A.end=x[d]}}else{A.start=this.inOuts.ofVideos[y]["in"];A.end=this.inOuts.ofVideos[y].out}this.playlist[y][p](f.extend({},m,A))}return this}})})(this,Popcorn);(function(r){document.addEventListener("DOMContentLoaded",function(){var f=document.querySelectorAll("[data-timeline-sources]");r.forEach(f,function(n,c){var b=f[c],e,h,i;if(!b.id)b.id=r.guid("__popcorn");if(b.nodeType&&b.nodeType===1){i=r("#"+b.id);e=(b.getAttribute("data-timeline-sources")||"").split(",");e[0]&&r.forEach(e,function(j){h=j.split("!");if(h.length===1){h=j.match(/(.*)[\/\\]([^\/\\]+\.\w+)$/)[2].split(".");h[0]="parse"+h[1].toUpperCase();h[1]=j}e[0]&&i[h[0]]&&i[h[0]](h[1])});i.autoplay()&&
+i.play()}})},false)})(Popcorn);(function(r,f){function n(e){e=typeof e==="string"?e:[e.language,e.region].join("-");var h=e.split("-");return{iso6391:e,language:h[0]||"",region:h[1]||""}}var c=r.navigator,b=n(c.userLanguage||c.language);f.locale={get:function(){return b},set:function(e){b=n(e);f.locale.broadcast();return b},broadcast:function(e){var h=f.instances,i=h.length,j=0,p;for(e=e||"locale:changed";j<i;j++){p=h[j];e in p.data.events&&p.trigger(e)}}}})(this,this.Popcorn);(function(r){var f=Object.prototype.hasOwnProperty;r.parsers={};r.parser=function(n,c,b){if(r.protect.natives.indexOf(n.toLowerCase())>=0)r.error("'"+n+"' is a protected function name");else{if(typeof c==="function"&&!b){b=c;c=""}if(!(typeof b!=="function"||typeof c!=="string")){var e={};e[n]=function(h,i){if(!h)return this;var j=this;r.xhr({url:h,dataType:c,success:function(p){var m,o,q=0;p=b(p).data||[];if(m=p.length){for(;q<m;q++){o=p[q];for(var s in o)f.call(o,s)&&j[s]&&j[s](o[s])}i&&i()}}});
+return this};r.extend(r.p,e);return e}}}})(Popcorn);(function(r){var f=function(b,e){b=b||r.nop;e=e||r.nop;return function(){b.apply(this,arguments);e.apply(this,arguments)}},n=/^.*\.(ogg|oga|aac|mp3|wav)($|\?)/,c=/^.*\.(ogg|oga|aac|mp3|wav|ogg|ogv|mp4|webm)($|\?)/;r.player=function(b,e){if(!r[b]){e=e||{};var h=function(i,j,p){p=p||{};var m=new Date/1E3,o=m,q=0,s=0,d=1,A=false,y={},x=typeof i==="string"?r.dom.find(i):i,a={};Object.prototype.__defineGetter__||(a=x||document.createElement("div"));for(var g in x)if(!(g in a))if(typeof x[g]==="object")a[g]=
+x[g];else if(typeof x[g]==="function")a[g]=function(k){return"length"in x[k]&&!x[k].call?x[k]:function(){return x[k].apply(x,arguments)}}(g);else r.player.defineProperty(a,g,{get:function(k){return function(){return x[k]}}(g),set:r.nop,configurable:true});var l=function(){m=new Date/1E3;if(!a.paused){a.currentTime+=m-o;a.dispatchEvent("timeupdate");setTimeout(l,10)}o=m};a.play=function(){this.paused=false;if(a.readyState>=4){o=new Date/1E3;a.dispatchEvent("play");l()}};a.pause=function(){this.paused=
+true;a.dispatchEvent("pause")};r.player.defineProperty(a,"currentTime",{get:function(){return q},set:function(k){q=+k;a.dispatchEvent("timeupdate");return q},configurable:true});r.player.defineProperty(a,"volume",{get:function(){return d},set:function(k){d=+k;a.dispatchEvent("volumechange");return d},configurable:true});r.player.defineProperty(a,"muted",{get:function(){return A},set:function(k){A=+k;a.dispatchEvent("volumechange");return A},configurable:true});r.player.defineProperty(a,"readyState",
+{get:function(){return s},set:function(k){return s=k},configurable:true});a.addEventListener=function(k,t){y[k]||(y[k]=[]);y[k].push(t);return t};a.removeEventListener=function(k,t){var u,v=y[k];if(v){for(u=y[k].length-1;u>=0;u--)t===v[u]&&v.splice(u,1);return t}};a.dispatchEvent=function(k){var t,u=k.type;if(!u){u=k;if(k=r.events.getInterface(u)){t=document.createEvent(k);t.initEvent(u,true,true,window,1)}}if(y[u])for(k=y[u].length-1;k>=0;k--)y[u][k].call(this,t,this)};a.src=j||"";a.duration=0;a.paused=
+true;a.ended=0;p&&p.events&&r.forEach(p.events,function(k,t){a.addEventListener(t,k,false)});if(e._canPlayType(x.nodeName,j)!==false)if(e._setup)e._setup.call(a,p);else{a.readyState=4;a.dispatchEvent("loadedmetadata");a.dispatchEvent("loadeddata");a.dispatchEvent("canplaythrough")}else setTimeout(function(){a.dispatchEvent("error")},0);i=new r.p.init(a,p);if(e._teardown)i.destroy=f(i.destroy,function(){e._teardown.call(a,p)});return i};h.canPlayType=e._canPlayType=e._canPlayType||r.nop;r[b]=r.player.registry[b]=
+h}};r.player.registry={};r.player.defineProperty=Object.defineProperty||function(b,e,h){b.__defineGetter__(e,h.get||r.nop);b.__defineSetter__(e,h.set||r.nop)};r.player.playerQueue=function(){var b=[],e=false;return{next:function(){e=false;b.shift();b[0]&&b[0]()},add:function(h){b.push(function(){e=true;h&&h()});!e&&b[0]()}}};r.smart=function(b,e,h){var i=["AUDIO","VIDEO"],j,p=r.dom.find(b),m;j=document.createElement("video");var o={ogg:"video/ogg",ogv:"video/ogg",oga:"audio/ogg",webm:"video/webm",
+mp4:"video/mp4",mp3:"audio/mp3"};if(p){if(i.indexOf(p.nodeName)>-1&&!e){if(typeof e==="object")h=e;return r(p,h)}if(typeof e==="string")e=[e];b=0;for(srcLength=e.length;b<srcLength;b++){m=c.exec(e[b]);m=!m||!m[1]?false:j.canPlayType(o[m[1]]);if(m){e=e[b];break}for(var q in r.player.registry)if(r.player.registry.hasOwnProperty(q))if(r.player.registry[q].canPlayType(p.nodeName,e[b]))return r[q](p,e[b],h)}if(i.indexOf(p.nodeName)===-1){j=typeof e==="string"?e:e.length?e[0]:e;b=document.createElement(n.exec(j)?
+i[0]:i[1]);b.controls=true;p.appendChild(b);p=b}h&&h.events&&h.events.error&&p.addEventListener("error",h.events.error,false);p.src=e;return r(p,h)}else r.error("Specified target "+b+" was not found.")}})(Popcorn);(function(r){var f=function(n,c){var b=0,e=0,h;r.forEach(c.classes,function(i,j){h=[];if(i==="parent")h[0]=document.querySelectorAll("#"+c.target)[0].parentNode;else h=document.querySelectorAll("#"+c.target+" "+i);b=0;for(e=h.length;b<e;b++)h[b].classList.toggle(j)})};r.compose("applyclass",{manifest:{about:{name:"Popcorn applyclass Effect",version:"0.1",author:"@scottdowne",website:"scottdowne.wordpress.com"},options:{}},_setup:function(n){n.classes={};n.applyclass=n.applyclass||"";for(var c=n.applyclass.replace(/\s/g,
+"").split(","),b=[],e=0,h=c.length;e<h;e++){b=c[e].split(":");if(b[0])n.classes[b[0]]=b[1]||""}},start:f,end:f})})(Popcorn);(function(r){var f=/(?:http:\/\/www\.|http:\/\/|www\.|\.|^)(youtu|vimeo|soundcloud|baseplayer)/,n={},c={vimeo:false,youtube:false,soundcloud:false,module:false};Object.defineProperty(n,void 0,{get:function(){return c[void 0]},set:function(b){c[void 0]=b}});r.plugin("mediaspawner",{manifest:{about:{name:"Popcorn Media Spawner Plugin",version:"0.1",author:"Matthew Schranz, @mjschranz",website:"mschranz.wordpress.com"},options:{source:{elem:"input",type:"text",label:"Media Source","default":"http://www.youtube.com/watch?v=CXDstfD9eJ0"},
+caption:{elem:"input",type:"text",label:"Media Caption","default":"Popcorn Popping",optional:true},target:"mediaspawner-container",start:{elem:"input",type:"number",label:"Start"},end:{elem:"input",type:"number",label:"End"},autoplay:{elem:"input",type:"checkbox",label:"Autoplay Video",optional:true},width:{elem:"input",type:"number",label:"Media Width","default":400,units:"px",optional:true},height:{elem:"input",type:"number",label:"Media Height","default":200,units:"px",optional:true}}},_setup:function(b){function e(){function o(){if(j!==
+"HTML5"&&!window.Popcorn[j])setTimeout(function(){o()},300);else{b.id=b._container.id;b._container.style.width=b.width+"px";b._container.style.height=b.height+"px";b.popcorn=r.smart("#"+b.id,b.source);j==="HTML5"&&b.popcorn.controls(true);b._container.style.width="0px";b._container.style.height="0px";b._container.style.visibility="hidden";b._container.style.overflow="hidden"}}if(j!=="HTML5"&&!window.Popcorn[j]&&!n[j]){n[j]=true;r.getScript("http://popcornjs.org/code/players/"+j+"/popcorn."+j+".js",
+function(){o()})}else o()}function h(){window.Popcorn.player?e():setTimeout(function(){h()},300)}var i=document.getElementById(b.target)||{},j,p,m;if(p=f.exec(b.source)){j=p[1];if(j==="youtu")j="youtube"}else j="HTML5";b._type=j;b._container=document.createElement("div");p=b._container;p.id="mediaSpawnerdiv-"+r.guid();b.width=b.width||400;b.height=b.height||200;if(b.caption){m=document.createElement("div");m.innerHTML=b.caption;m.style.display="none";b._capCont=m;p.appendChild(m)}i&&i.appendChild(p);
+if(!window.Popcorn.player&&!n.module){n.module=true;r.getScript("http://popcornjs.org/code/modules/player/popcorn.player.js",h)}else h()},start:function(b,e){if(e._capCont)e._capCont.style.display="";e._container.style.width=e.width+"px";e._container.style.height=e.height+"px";e._container.style.visibility="visible";e._container.style.overflow="visible";e.autoplay&&e.popcorn.play()},end:function(b,e){if(e._capCont)e._capCont.style.display="none";e._container.style.width="0px";e._container.style.height=
+"0px";e._container.style.visibility="hidden";e._container.style.overflow="hidden";e.popcorn.pause()},_teardown:function(b){b.popcorn&&b.popcorn.destory&&b.popcorn.destroy();document.getElementById(b.target)&&document.getElementById(b.target).removeChild(b._container)}})})(Popcorn,this);(function(r){r.plugin("code",function(f){var n=false,c=this,b=function(){var e=function(h){return function(i,j){var p=function(){n&&i.call(c,j);n&&h(p)};p()}};return window.webkitRequestAnimationFrame?e(window.webkitRequestAnimationFrame):window.mozRequestAnimationFrame?e(window.mozRequestAnimationFrame):e(function(h){window.setTimeout(h,16)})}();if(!f.onStart||typeof f.onStart!=="function")f.onStart=r.nop;if(f.onEnd&&typeof f.onEnd!=="function")f.onEnd=undefined;if(f.onFrame&&typeof f.onFrame!==
+"function")f.onFrame=undefined;return{start:function(e,h){h.onStart.call(c,h);if(h.onFrame){n=true;b(h.onFrame,h)}},end:function(e,h){if(h.onFrame)n=false;h.onEnd&&h.onEnd.call(c,h)}}},{about:{name:"Popcorn Code Plugin",version:"0.1",author:"David Humphrey (@humphd)",website:"http://vocamus.net/dave"},options:{start:{elem:"input",type:"number",label:"Start"},end:{elem:"input",type:"number",label:"End"},onStart:{elem:"input",type:"function",label:"onStart"},onFrame:{elem:"input",type:"function",label:"onFrame",
+optional:true},onEnd:{elem:"input",type:"function",label:"onEnd"}}})})(Popcorn);(function(r){var f=0;r.plugin("flickr",function(n){var c,b=document.getElementById(n.target),e,h,i,j,p=n.numberofimages||4,m=n.height||"50px",o=n.width||"50px",q=n.padding||"5px",s=n.border||"0px";c=document.createElement("div");c.id="flickr"+f;c.style.width="100%";c.style.height="100%";c.style.display="none";f++;b&&b.appendChild(c);var d=function(){if(e)setTimeout(function(){d()},5);else{h="http://api.flickr.com/services/rest/?method=flickr.people.findByUsername&";h+="username="+n.username+"&api_key="+
+n.apikey+"&format=json&jsoncallback=flickr";r.getJSONP(h,function(y){e=y.user.nsid;A()})}},A=function(){h="http://api.flickr.com/services/feeds/photos_public.gne?";if(e)h+="id="+e+"&";if(n.tags)h+="tags="+n.tags+"&";h+="lang=en-us&format=json&jsoncallback=flickr";r.xhr.getJSONP(h,function(y){var x=document.createElement("div");x.innerHTML="<p style='padding:"+q+";'>"+y.title+"<p/>";r.forEach(y.items,function(a,g){if(g<p){i=document.createElement("a");i.setAttribute("href",a.link);i.setAttribute("target",
+"_blank");j=document.createElement("img");j.setAttribute("src",a.media.m);j.setAttribute("height",m);j.setAttribute("width",o);j.setAttribute("style","border:"+s+";padding:"+q);i.appendChild(j);x.appendChild(i)}else return false});c.appendChild(x)})};if(n.username&&n.apikey)d();else{e=n.userid;A()}return{start:function(){c.style.display="inline"},end:function(){c.style.display="none"},_teardown:function(y){document.getElementById(y.target)&&document.getElementById(y.target).removeChild(c)}}},{about:{name:"Popcorn Flickr Plugin",
+version:"0.2",author:"Scott Downe, Steven Weerdenburg, Annasob",website:"http://scottdowne.wordpress.com/"},options:{start:{elem:"input",type:"number",label:"Start"},end:{elem:"input",type:"number",label:"End"},userid:{elem:"input",type:"text",label:"User ID",optional:true},tags:{elem:"input",type:"text",label:"Tags"},username:{elem:"input",type:"text",label:"Username",optional:true},apikey:{elem:"input",type:"text",label:"API Key",optional:true},target:"flickr-container",height:{elem:"input",type:"text",
+label:"Height","default":"50px",optional:true},width:{elem:"input",type:"text",label:"Width","default":"50px",optional:true},padding:{elem:"input",type:"text",label:"Padding",optional:true},border:{elem:"input",type:"text",label:"Border","default":"5px",optional:true},numberofimages:{elem:"input",type:"number","default":4,label:"Number of Images"}}})})(Popcorn);(function(r){r.plugin("footnote",{manifest:{about:{name:"Popcorn Footnote Plugin",version:"0.2",author:"@annasob, @rwaldron",website:"annasob.wordpress.com"},options:{start:{elem:"input",type:"number",label:"Start"},end:{elem:"input",type:"number",label:"End"},text:{elem:"input",type:"text",label:"Text"},target:"footnote-container"}},_setup:function(f){var n=r.dom.find(f.target);f._container=document.createElement("div");f._container.style.display="none";f._container.innerHTML=f.text;n.appendChild(f._container)},
+start:function(f,n){n._container.style.display="inline"},end:function(f,n){n._container.style.display="none"},_teardown:function(f){var n=r.dom.find(f.target);n&&n.removeChild(f._container)}})})(Popcorn);(function(r){function f(b){return String(b).replace(/&(?!\w+;)|[<>"']/g,function(e){return c[e]||e})}function n(b,e){var h=b.container=document.createElement("div"),i=h.style,j=b.media,p=function(){var m=b.position();i.fontSize="18px";i.width=j.offsetWidth+"px";i.top=m.top+j.offsetHeight-h.offsetHeight-40+"px";i.left=m.left+"px";setTimeout(p,10)};h.id=e||"";i.position="absolute";i.color="white";i.textShadow="black 2px 2px 6px";i.fontWeight="bold";i.textAlign="center";p();b.media.parentNode.appendChild(h);
+return h}var c={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"};r.plugin("text",{manifest:{about:{name:"Popcorn Text Plugin",version:"0.1",author:"@humphd"},options:{start:{elem:"input",type:"number",label:"Start"},end:{elem:"input",type:"number",label:"End"},text:{elem:"input",type:"text",label:"Text","default":"Popcorn.js"},escape:{elem:"input",type:"checkbox",label:"Escape"},multiline:{elem:"input",type:"checkbox",label:"Multiline"}}},_setup:function(b){var e,h,i=b._container=document.createElement("div");
+i.style.display="none";if(b.target)if(e=r.dom.find(b.target)){if(["VIDEO","AUDIO"].indexOf(e.nodeName)>-1)e=n(this,b.target+"-overlay")}else e=n(this,b.target);else e=this.container?this.container:n(this);b._target=e;h=b.escape?f(b.text):b.text;h=b.multiline?h.replace(/\r?\n/gm,"<br>"):h;i.innerHTML=h||"";e.appendChild(i)},start:function(b,e){e._container.style.display="inline"},end:function(b,e){e._container.style.display="none"},_teardown:function(b){var e=b._target;e&&e.removeChild(b._container)}})})(Popcorn);var googleCallback;
+(function(r){function f(i,j,p){i=i.type?i.type.toUpperCase():"HYBRID";var m;if(i==="STAMEN-WATERCOLOR"||i==="STAMEN-TERRAIN"||i==="STAMEN-TONER")m=i.replace("STAMEN-","").toLowerCase();p=new google.maps.Map(p,{mapTypeId:m?m:google.maps.MapTypeId[i],mapTypeControlOptions:{mapTypeIds:[]}});m&&p.mapTypes.set(m,new google.maps.StamenMapType(m));p.getDiv().style.display="none";return p}var n=1,c=false,b=false,e,h;googleCallback=function(i){if(typeof google!=="undefined"&&google.maps&&google.maps.Geocoder&&
+google.maps.LatLng){e=new google.maps.Geocoder;r.getScript("//maps.stamen.com/js/tile.stamen.js",function(){b=true})}else setTimeout(function(){googleCallback(i)},1)};h=function(){if(document.body){c=true;r.getScript("//maps.google.com/maps/api/js?sensor=false&callback=googleCallback")}else setTimeout(function(){h()},1)};r.plugin("googlemap",function(i){var j,p,m,o=document.getElementById(i.target);i.type=i.type||"ROADMAP";i.zoom=i.zoom||1;i.lat=i.lat||0;i.lng=i.lng||0;c||h();j=document.createElement("div");
+j.id="actualmap"+n;j.style.width=i.width||"100%";j.style.height=i.height?i.height:o&&o.clientHeight?o.clientHeight+"px":"100%";n++;o&&o.appendChild(j);var q=function(){if(b){if(j)if(i.location)e.geocode({address:i.location},function(s,d){if(j&&d===google.maps.GeocoderStatus.OK){i.lat=s[0].geometry.location.lat();i.lng=s[0].geometry.location.lng();m=new google.maps.LatLng(i.lat,i.lng);p=f(i,m,j)}});else{m=new google.maps.LatLng(i.lat,i.lng);p=f(i,m,j)}}else setTimeout(function(){q()},5)};q();return{start:function(s,
+d){var A=this,y,x=function(){if(p){d._map=p;p.getDiv().style.display="block";google.maps.event.trigger(p,"resize");p.setCenter(m);if(d.zoom&&typeof d.zoom!=="number")d.zoom=+d.zoom;p.setZoom(d.zoom);if(d.heading&&typeof d.heading!=="number")d.heading=+d.heading;if(d.pitch&&typeof d.pitch!=="number")d.pitch=+d.pitch;if(d.type==="STREETVIEW"){p.setStreetView(y=new google.maps.StreetViewPanorama(j,{position:m,pov:{heading:d.heading=d.heading||0,pitch:d.pitch=d.pitch||0,zoom:d.zoom}}));var a=function(z,
+C){var E=google.maps.geometry.spherical.computeHeading;setTimeout(function(){var B=A.media.currentTime;if(typeof d.tween==="object"){for(var w=0,D=z.length;w<D;w++){var F=z[w];if(B>=F.interval*(w+1)/1E3&&(B<=F.interval*(w+2)/1E3||B>=F.interval*D/1E3)){u.setPosition(new google.maps.LatLng(F.position.lat,F.position.lng));u.setPov({heading:F.pov.heading||E(F,z[w+1])||0,zoom:F.pov.zoom||0,pitch:F.pov.pitch||0})}}a(z,z[0].interval)}else{w=0;for(D=z.length;w<D;w++){F=d.interval;if(B>=F*(w+1)/1E3&&(B<=F*
+(w+2)/1E3||B>=F*D/1E3)){g.setPov({heading:E(z[w],z[w+1])||0,zoom:d.zoom,pitch:d.pitch||0});g.setPosition(l[w])}}a(l,d.interval)}},C)};if(d.location&&typeof d.tween==="string"){var g=y,l=[],k=new google.maps.DirectionsService,t=new google.maps.DirectionsRenderer(g);k.route({origin:d.location,destination:d.tween,travelMode:google.maps.TravelMode.DRIVING},function(z,C){if(C==google.maps.DirectionsStatus.OK){t.setDirections(z);for(var E=z.routes[0].overview_path,B=0,w=E.length;B<w;B++)l.push(new google.maps.LatLng(E[B].lat(),
+E[B].lng()));d.interval=d.interval||1E3;a(l,10)}})}else if(typeof d.tween==="object"){var u=y;k=0;for(var v=d.tween.length;k<v;k++){d.tween[k].interval=d.tween[k].interval||1E3;a(d.tween,10)}}}d.onmaploaded&&d.onmaploaded(d,p)}else setTimeout(function(){x()},13)};x()},end:function(){if(p)p.getDiv().style.display="none"},_teardown:function(s){var d=document.getElementById(s.target);d&&d.removeChild(j);j=p=m=null;s._map=null}}},{about:{name:"Popcorn Google Map Plugin",version:"0.1",author:"@annasob",
+website:"annasob.wordpress.com"},options:{start:{elem:"input",type:"start",label:"Start"},end:{elem:"input",type:"start",label:"End"},target:"map-container",type:{elem:"select",options:["ROADMAP","SATELLITE","STREETVIEW","HYBRID","TERRAIN","STAMEN-WATERCOLOR","STAMEN-TERRAIN","STAMEN-TONER"],label:"Map Type",optional:true},zoom:{elem:"input",type:"text",label:"Zoom","default":0,optional:true},lat:{elem:"input",type:"text",label:"Lat",optional:true},lng:{elem:"input",type:"text",label:"Lng",optional:true},
+location:{elem:"input",type:"text",label:"Location","default":"Toronto, Ontario, Canada"},heading:{elem:"input",type:"text",label:"Heading","default":0,optional:true},pitch:{elem:"input",type:"text",label:"Pitch","default":1,optional:true}}})})(Popcorn);(function(r){function f(b){function e(){var p=b.getBoundingClientRect(),m=i.getBoundingClientRect();if(m.left!==p.left)i.style.left=p.left+"px";if(m.top!==p.top)i.style.top=p.top+"px"}var h=-1,i=document.createElement("div"),j=getComputedStyle(b).zIndex;i.setAttribute("data-popcorn-helper-container",true);i.style.position="absolute";i.style.zIndex=isNaN(j)?n:j+1;document.body.appendChild(i);return{element:i,start:function(){h=setInterval(e,c)},stop:function(){clearInterval(h);h=-1},destroy:function(){document.body.removeChild(i);
+h!==-1&&clearInterval(h)}}}var n=2E3,c=10;r.plugin("image",{manifest:{about:{name:"Popcorn image Plugin",version:"0.1",author:"Scott Downe",website:"http://scottdowne.wordpress.com/"},options:{start:{elem:"input",type:"number",label:"Start"},end:{elem:"input",type:"number",label:"End"},src:{elem:"input",type:"url",label:"Image URL","default":"http://mozillapopcorn.org/wp-content/themes/popcorn/images/for_developers.png"},href:{elem:"input",type:"url",label:"Link","default":"http://mozillapopcorn.org/wp-content/themes/popcorn/images/for_developers.png",
+optional:true},target:"image-container",text:{elem:"input",type:"text",label:"Caption","default":"Popcorn.js",optional:true}}},_setup:function(b){var e=document.createElement("img"),h=document.getElementById(b.target);b.anchor=document.createElement("a");b.anchor.style.position="relative";b.anchor.style.textDecoration="none";b.anchor.style.display="none";if(h)if(["VIDEO","AUDIO"].indexOf(h.nodeName)>-1){b.trackedContainer=f(h);b.trackedContainer.element.appendChild(b.anchor)}else h&&h.appendChild(b.anchor);
+e.addEventListener("load",function(){e.style.borderStyle="none";b.anchor.href=b.href||b.src||"#";b.anchor.target="_blank";var i,j;e.style.height=h.style.height;e.style.width=h.style.width;b.anchor.appendChild(e);if(b.text){i=e.height/12+"px";j=document.createElement("div");r.extend(j.style,{color:"black",fontSize:i,fontWeight:"bold",position:"relative",textAlign:"center",width:e.style.width||e.width+"px",zIndex:"10"});j.innerHTML=b.text||"";j.style.top=(e.style.height.replace("px","")||e.height)/
+2-j.offsetHeight/2+"px";b.anchor.insertBefore(j,e)}},false);e.src=b.src},start:function(b,e){e.anchor.style.display="inline";e.trackedContainer&&e.trackedContainer.start()},end:function(b,e){e.anchor.style.display="none";e.trackedContainer&&e.trackedContainer.stop()},_teardown:function(b){if(b.trackedContainer)b.trackedContainer.destroy();else b.anchor.parentNode&&b.anchor.parentNode.removeChild(b.anchor)}})})(Popcorn);(function(r){var f=1,n=false;r.plugin("googlefeed",function(c){var b=function(){var j=false,p=0,m=document.getElementsByTagName("link"),o=m.length,q=document.head||document.getElementsByTagName("head")[0],s=document.createElement("link");if(window.GFdynamicFeedControl)n=true;else r.getScript("//www.google.com/uds/solutions/dynamicfeed/gfdynamicfeedcontrol.js",function(){n=true});for(;p<o;p++)if(m[p].href==="//www.google.com/uds/solutions/dynamicfeed/gfdynamicfeedcontrol.css")j=true;if(!j){s.type=
+"text/css";s.rel="stylesheet";s.href="//www.google.com/uds/solutions/dynamicfeed/gfdynamicfeedcontrol.css";q.insertBefore(s,q.firstChild)}};window.google?b():r.getScript("//www.google.com/jsapi",function(){google.load("feeds","1",{callback:function(){b()}})});var e=document.createElement("div"),h=document.getElementById(c.target),i=function(){if(n)c.feed=new GFdynamicFeedControl(c.url,e,{vertical:c.orientation.toLowerCase()==="vertical"?true:false,horizontal:c.orientation.toLowerCase()==="horizontal"?
+true:false,title:c.title=c.title||"Blog"});else setTimeout(function(){i()},5)};if(!c.orientation||c.orientation.toLowerCase()!=="vertical"&&c.orientation.toLowerCase()!=="horizontal")c.orientation="vertical";e.style.display="none";e.id="_feed"+f;e.style.width="100%";e.style.height="100%";f++;h&&h.appendChild(e);i();return{start:function(){e.setAttribute("style","display:inline")},end:function(){e.setAttribute("style","display:none")},_teardown:function(j){document.getElementById(j.target)&&document.getElementById(j.target).removeChild(e);
+delete j.feed}}},{about:{name:"Popcorn Google Feed Plugin",version:"0.1",author:"David Seifried",website:"dseifried.wordpress.com"},options:{start:{elem:"input",type:"number",label:"Start"},end:{elem:"input",type:"number",label:"End"},target:"feed-container",url:{elem:"input",type:"url",label:"Feed URL","default":"http://planet.mozilla.org/rss20.xml"},title:{elem:"input",type:"text",label:"Title","default":"Planet Mozilla",optional:true},orientation:{elem:"select",options:["Vertical","Horizontal"],
+label:"Orientation","default":"Vertical",optional:true}}})})(Popcorn);(function(r){var f=0,n=function(c,b){var e=c.container=document.createElement("div"),h=e.style,i=c.media,j=function(){var p=c.position();h.fontSize="18px";h.width=i.offsetWidth+"px";h.top=p.top+i.offsetHeight-e.offsetHeight-40+"px";h.left=p.left+"px";setTimeout(j,10)};e.id=b||r.guid();h.position="absolute";h.color="white";h.textShadow="black 2px 2px 6px";h.fontWeight="bold";h.textAlign="center";j();c.media.parentNode.appendChild(e);return e};r.plugin("subtitle",{manifest:{about:{name:"Popcorn Subtitle Plugin",
+version:"0.1",author:"Scott Downe",website:"http://scottdowne.wordpress.com/"},options:{start:{elem:"input",type:"text",label:"Start"},end:{elem:"input",type:"text",label:"End"},target:"subtitle-container",text:{elem:"input",type:"text",label:"Text"}}},_setup:function(c){var b=document.createElement("div");b.id="subtitle-"+f++;b.style.display="none";!this.container&&(!c.target||c.target==="subtitle-container")&&n(this);c.container=c.target&&c.target!=="subtitle-container"?document.getElementById(c.target)||
+n(this,c.target):this.container;document.getElementById(c.container.id)&&document.getElementById(c.container.id).appendChild(b);c.innerContainer=b;c.showSubtitle=function(){c.innerContainer.innerHTML=c.text||""}},start:function(c,b){b.innerContainer.style.display="inline";b.showSubtitle(b,b.text)},end:function(c,b){b.innerContainer.style.display="none";b.innerContainer.innerHTML=""},_teardown:function(c){c.container.removeChild(c.innerContainer)}})})(Popcorn);(function(r){var f=false;r.plugin("twitter",{manifest:{about:{name:"Popcorn Twitter Plugin",version:"0.1",author:"Scott Downe",website:"http://scottdowne.wordpress.com/"},options:{start:{elem:"input",type:"number",label:"Start"},end:{elem:"input",type:"number",label:"End"},src:{elem:"input",type:"text",label:"Tweet Source (# or @)","default":"@popcornjs"},target:"twitter-container",height:{elem:"input",type:"number",label:"Height","default":"200",optional:true},width:{elem:"input",type:"number",label:"Width",
+"default":"250",optional:true}}},_setup:function(n){if(!window.TWTR&&!f){f=true;r.getScript("//widgets.twimg.com/j/2/widget.js")}var c=document.getElementById(n.target);n.container=document.createElement("div");n.container.setAttribute("id",r.guid());n.container.style.display="none";c&&c.appendChild(n.container);var b=n.src||"";c=n.width||250;var e=n.height||200,h=/^@/.test(b),i={version:2,id:n.container.getAttribute("id"),rpp:30,width:c,height:e,interval:6E3,theme:{shell:{background:"#ffffff",color:"#000000"},
+tweets:{background:"#ffffff",color:"#444444",links:"#1985b5"}},features:{loop:true,timestamp:true,avatars:true,hashtags:true,toptweets:true,live:true,scrollbar:false,behavior:"default"}},j=function(p){if(window.TWTR)if(h){i.type="profile";(new TWTR.Widget(i)).render().setUser(b).start()}else{i.type="search";i.search=b;i.subject=b;(new TWTR.Widget(i)).render().start()}else setTimeout(function(){j(p)},1)};j(this)},start:function(n,c){c.container.style.display="inline"},end:function(n,c){c.container.style.display=
+"none"},_teardown:function(n){document.getElementById(n.target)&&document.getElementById(n.target).removeChild(n.container)}})})(Popcorn);(function(r){r.plugin("webpage",{manifest:{about:{name:"Popcorn Webpage Plugin",version:"0.1",author:"@annasob",website:"annasob.wordpress.com"},options:{id:{elem:"input",type:"text",label:"Id",optional:true},start:{elem:"input",type:"number",label:"Start"},end:{elem:"input",type:"number",label:"End"},src:{elem:"input",type:"url",label:"Webpage URL","default":"http://mozillapopcorn.org"},target:"iframe-container"}},_setup:function(f){var n=document.getElementById(f.target);f.src=f.src.replace(/^(https?:)?(\/\/)?/,
+"//");f._iframe=document.createElement("iframe");f._iframe.setAttribute("width","100%");f._iframe.setAttribute("height","100%");f._iframe.id=f.id;f._iframe.src=f.src;f._iframe.style.display="none";n&&n.appendChild(f._iframe)},start:function(f,n){n._iframe.src=n.src;n._iframe.style.display="inline"},end:function(f,n){n._iframe.style.display="none"},_teardown:function(f){document.getElementById(f.target)&&document.getElementById(f.target).removeChild(f._iframe)}})})(Popcorn);var wikiCallback;
+(function(r){r.plugin("wikipedia",{manifest:{about:{name:"Popcorn Wikipedia Plugin",version:"0.1",author:"@annasob",website:"annasob.wordpress.com"},options:{start:{elem:"input",type:"number",label:"Start"},end:{elem:"input",type:"number",label:"End"},lang:{elem:"input",type:"text",label:"Language","default":"english",optional:true},src:{elem:"input",type:"url",label:"Wikipedia URL","default":"http://en.wikipedia.org/wiki/Cat"},title:{elem:"input",type:"text",label:"Title","default":"Cats",optional:true},
+numberofwords:{elem:"input",type:"number",label:"Number of Words","default":"200",optional:true},target:"wikipedia-container"}},_setup:function(f){var n,c=r.guid();if(!f.lang)f.lang="en";f.numberofwords=f.numberofwords||200;window["wikiCallback"+c]=function(b){f._link=document.createElement("a");f._link.setAttribute("href",f.src);f._link.setAttribute("target","_blank");f._link.innerHTML=f.title||b.parse.displaytitle;f._desc=document.createElement("p");n=b.parse.text["*"].substr(b.parse.text["*"].indexOf("<p>"));
+n=n.replace(/((<(.|\n)+?>)|(\((.*?)\) )|(\[(.*?)\]))/g,"");n=n.split(" ");f._desc.innerHTML=n.slice(0,n.length>=f.numberofwords?f.numberofwords:n.length).join(" ")+" ...";f._fired=true};f.src&&r.getScript("//"+f.lang+".wikipedia.org/w/api.php?action=parse&props=text&redirects&page="+f.src.slice(f.src.lastIndexOf("/")+1)+"&format=json&callback=wikiCallback"+c)},start:function(f,n){var c=function(){if(n._fired){if(n._link&&n._desc)if(document.getElementById(n.target)){document.getElementById(n.target).appendChild(n._link);
+document.getElementById(n.target).appendChild(n._desc);n._added=true}}else setTimeout(function(){c()},13)};c()},end:function(f,n){if(n._added){document.getElementById(n.target).removeChild(n._link);document.getElementById(n.target).removeChild(n._desc)}},_teardown:function(f){if(f._added){f._link.parentNode&&document.getElementById(f.target).removeChild(f._link);f._desc.parentNode&&document.getElementById(f.target).removeChild(f._desc);delete f.target}}})})(Popcorn);(function(r){r.plugin("mustache",function(f){var n,c,b,e;r.getScript("http://mustache.github.com/extras/mustache.js");var h=!!f.dynamic,i=typeof f.template,j=typeof f.data,p=document.getElementById(f.target);f.container=p||document.createElement("div");if(i==="function")if(h)b=f.template;else e=f.template(f);else e=i==="string"?f.template:"";if(j==="function")if(h)n=f.data;else c=f.data(f);else c=j==="string"?JSON.parse(f.data):j==="object"?f.data:"";return{start:function(m,o){var q=function(){if(window.Mustache){if(n)c=
+n(o);if(b)e=b(o);var s=Mustache.to_html(e,c).replace(/^\s*/mg,"");o.container.innerHTML=s}else setTimeout(function(){q()},10)};q()},end:function(m,o){o.container.innerHTML=""},_teardown:function(){n=c=b=e=null}}},{about:{name:"Popcorn Mustache Plugin",version:"0.1",author:"David Humphrey (@humphd)",website:"http://vocamus.net/dave"},options:{start:{elem:"input",type:"number",label:"Start"},end:{elem:"input",type:"number",label:"End"},target:"mustache-container",template:{elem:"input",type:"text",
+label:"Template"},data:{elem:"input",type:"text",label:"Data"},dynamic:{elem:"input",type:"checkbox",label:"Dynamic","default":true}}})})(Popcorn);(function(r){function f(c,b){if(c.map)c.map.div.style.display=b;else setTimeout(function(){f(c,b)},10)}var n=1;r.plugin("openmap",function(c){var b,e,h,i,j,p,m,o,q=document.getElementById(c.target);b=document.createElement("div");b.id="openmapdiv"+n;b.style.width="100%";b.style.height="100%";n++;q&&q.appendChild(b);o=function(){if(window.OpenLayers&&window.OpenLayers.Layer.Stamen){if(c.location){location=new OpenLayers.LonLat(0,0);r.getJSONP("//tinygeocoder.com/create-api.php?q="+c.location+"&callback=jsonp",
+function(d){e=new OpenLayers.LonLat(d[1],d[0])})}else e=new OpenLayers.LonLat(c.lng,c.lat);c.type=c.type||"ROADMAP";switch(c.type){case "SATELLITE":c.map=new OpenLayers.Map({div:b,maxResolution:0.28125,tileSize:new OpenLayers.Size(512,512)});var s=new OpenLayers.Layer.WorldWind("LANDSAT","//worldwind25.arc.nasa.gov/tile/tile.aspx",2.25,4,{T:"105"});c.map.addLayer(s);i=new OpenLayers.Projection("EPSG:4326");h=new OpenLayers.Projection("EPSG:4326");break;case "TERRAIN":i=new OpenLayers.Projection("EPSG:4326");
+h=new OpenLayers.Projection("EPSG:4326");c.map=new OpenLayers.Map({div:b,projection:h});s=new OpenLayers.Layer.WMS("USGS Terraserver","//terraserver-usa.org/ogcmap.ashx?",{layers:"DRG"});c.map.addLayer(s);break;case "STAMEN-TONER":case "STAMEN-WATERCOLOR":case "STAMEN-TERRAIN":s=c.type.replace("STAMEN-","").toLowerCase();s=new OpenLayers.Layer.Stamen(s);i=new OpenLayers.Projection("EPSG:4326");h=new OpenLayers.Projection("EPSG:900913");e=e.transform(i,h);c.map=new OpenLayers.Map({div:b,projection:h,
+displayProjection:i,controls:[new OpenLayers.Control.Navigation,new OpenLayers.Control.PanPanel,new OpenLayers.Control.ZoomPanel]});c.map.addLayer(s);break;default:h=new OpenLayers.Projection("EPSG:900913");i=new OpenLayers.Projection("EPSG:4326");e=e.transform(i,h);c.map=new OpenLayers.Map({div:b,projection:h,displayProjection:i});s=new OpenLayers.Layer.OSM;c.map.addLayer(s)}if(c.map){c.map.setCenter(e,c.zoom||10);c.map.div.style.display="none"}}else setTimeout(function(){o()},50)};o();return{_setup:function(s){window.OpenLayers||
+r.getScript("//openlayers.org/api/OpenLayers.js",function(){r.getScript("//maps.stamen.com/js/tile.stamen.js")});var d=function(){if(s.map){s.zoom=s.zoom||2;if(s.zoom&&typeof s.zoom!=="number")s.zoom=+s.zoom;s.map.setCenter(e,s.zoom);if(s.markers){var A=OpenLayers.Util.extend({},OpenLayers.Feature.Vector.style["default"]),y=function(v){clickedFeature=v.feature;if(clickedFeature.attributes.text){m=new OpenLayers.Popup.FramedCloud("featurePopup",clickedFeature.geometry.getBounds().getCenterLonLat(),
+new OpenLayers.Size(120,250),clickedFeature.attributes.text,null,true,function(){p.unselect(this.feature)});clickedFeature.popup=m;m.feature=clickedFeature;s.map.addPopup(m)}},x=function(v){feature=v.feature;if(feature.popup){m.feature=null;s.map.removePopup(feature.popup);feature.popup.destroy();feature.popup=null}},a=function(v){r.getJSONP("//tinygeocoder.com/create-api.php?q="+v.location+"&callback=jsonp",function(z){z=(new OpenLayers.Geometry.Point(z[1],z[0])).transform(i,h);var C=OpenLayers.Util.extend({},
+A);if(!v.size||isNaN(v.size))v.size=14;C.pointRadius=v.size;C.graphicOpacity=1;C.externalGraphic=v.icon;z=new OpenLayers.Feature.Vector(z,null,C);if(v.text)z.attributes={text:v.text};j.addFeatures([z])})};j=new OpenLayers.Layer.Vector("Point Layer",{style:A});s.map.addLayer(j);for(var g=0,l=s.markers.length;g<l;g++){var k=s.markers[g];if(k.text)if(!p){p=new OpenLayers.Control.SelectFeature(j);s.map.addControl(p);p.activate();j.events.on({featureselected:y,featureunselected:x})}if(k.location)a(k);
+else{var t=(new OpenLayers.Geometry.Point(k.lng,k.lat)).transform(i,h),u=OpenLayers.Util.extend({},A);if(!k.size||isNaN(k.size))k.size=14;u.pointRadius=k.size;u.graphicOpacity=1;u.externalGraphic=k.icon;t=new OpenLayers.Feature.Vector(t,null,u);if(k.text)t.attributes={text:k.text};j.addFeatures([t])}}}}else setTimeout(function(){d()},13)};d()},start:function(s,d){f(d,"block")},end:function(s,d){f(d,"none")},_teardown:function(){q&&q.removeChild(b);b=map=e=h=i=j=p=m=null}}},{about:{name:"Popcorn OpenMap Plugin",
+version:"0.3",author:"@mapmeld",website:"mapadelsur.blogspot.com"},options:{start:{elem:"input",type:"number",label:"Start"},end:{elem:"input",type:"number",label:"End"},target:"map-container",type:{elem:"select",options:["ROADMAP","SATELLITE","TERRAIN"],label:"Map Type",optional:true},zoom:{elem:"input",type:"number",label:"Zoom","default":2},lat:{elem:"input",type:"text",label:"Lat",optional:true},lng:{elem:"input",type:"text",label:"Lng",optional:true},location:{elem:"input",type:"text",label:"Location",
+"default":"Toronto, Ontario, Canada"},markers:{elem:"input",type:"text",label:"List Markers",optional:true}}})})(Popcorn);document.addEventListener("click",function(r){r=r.target;if(r.nodeName==="A"||r.parentNode&&r.parentNode.nodeName==="A")Popcorn.instances.forEach(function(f){f.options.pauseOnLinkClicked&&f.pause()})},false);(function(r){var f={},n=0,c=document.createElement("span"),b=["webkit","Moz","ms","O",""],e=["Transform","TransitionDuration","TransitionTimingFunction"],h={},i;document.getElementsByTagName("head")[0].appendChild(c);for(var j=0,p=e.length;j<p;j++)for(var m=0,o=b.length;m<o;m++){i=b[m]+e[j];if(i in c.style){h[e[j].toLowerCase()]=i;break}}document.getElementsByTagName("head")[0].appendChild(c);r.plugin("wordriver",{manifest:{about:{name:"Popcorn WordRiver Plugin"},options:{start:{elem:"input",type:"number",
+label:"Start"},end:{elem:"input",type:"number",label:"End"},target:"wordriver-container",text:{elem:"input",type:"text",label:"Text","default":"Popcorn.js"},color:{elem:"input",type:"text",label:"Color","default":"Green",optional:true}}},_setup:function(q){q._duration=q.end-q.start;var s;if(!(s=f[q.target])){s=q.target;f[s]=document.createElement("div");var d=document.getElementById(s);d&&d.appendChild(f[s]);f[s].style.height="100%";f[s].style.position="relative";s=f[s]}q._container=s;q.word=document.createElement("span");
+q.word.style.position="absolute";q.word.style.whiteSpace="nowrap";q.word.style.opacity=0;q.word.style.MozTransitionProperty="opacity, -moz-transform";q.word.style.webkitTransitionProperty="opacity, -webkit-transform";q.word.style.OTransitionProperty="opacity, -o-transform";q.word.style.transitionProperty="opacity, transform";q.word.style[h.transitionduration]="1s, "+q._duration+"s";q.word.style[h.transitiontimingfunction]="linear";q.word.innerHTML=q.text;q.word.style.color=q.color||"black"},start:function(q,
+s){s._container.appendChild(s.word);s.word.style[h.transform]="";s.word.style.fontSize=~~(30+20*Math.random())+"px";n%=s._container.offsetWidth-s.word.offsetWidth;s.word.style.left=n+"px";n+=s.word.offsetWidth+10;s.word.style[h.transform]="translateY("+(s._container.offsetHeight-s.word.offsetHeight)+"px)";s.word.style.opacity=1;setTimeout(function(){s.word.style.opacity=0},(s.end-s.start-1||1)*1E3)},end:function(q,s){s.word.style.opacity=0},_teardown:function(q){var s=document.getElementById(q.target);
+q.word.parentNode&&q._container.removeChild(q.word);f[q.target]&&!f[q.target].childElementCount&&s&&s.removeChild(f[q.target])&&delete f[q.target]}})})(Popcorn);(function(r){var f=1;r.plugin("timeline",function(n){var c=document.getElementById(n.target),b=document.createElement("div"),e,h=true;if(c&&!c.firstChild){c.appendChild(e=document.createElement("div"));e.style.width="inherit";e.style.height="inherit";e.style.overflow="auto"}else e=c.firstChild;b.style.display="none";b.id="timelineDiv"+f;n.direction=n.direction||"up";if(n.direction.toLowerCase()==="down")h=false;if(c&&e)h?e.insertBefore(b,e.firstChild):e.appendChild(b);f++;b.innerHTML="<p><span id='big' style='font-size:24px; line-height: 130%;' >"+
+n.title+"</span><br /><span id='mid' style='font-size: 16px;'>"+n.text+"</span><br />"+n.innerHTML;return{start:function(i,j){b.style.display="block";if(j.direction==="down")e.scrollTop=e.scrollHeight},end:function(){b.style.display="none"},_teardown:function(){e&&b&&e.removeChild(b)&&!e.firstChild&&c.removeChild(e)}}},{about:{name:"Popcorn Timeline Plugin",version:"0.1",author:"David Seifried @dcseifried",website:"dseifried.wordpress.com"},options:{start:{elem:"input",type:"number",label:"Start"},
+end:{elem:"input",type:"number",label:"End"},target:"feed-container",title:{elem:"input",type:"text",label:"Title"},text:{elem:"input",type:"text",label:"Text"},innerHTML:{elem:"input",type:"text",label:"HTML Code",optional:true},direction:{elem:"select",options:["DOWN","UP"],label:"Direction",optional:true}}})})(Popcorn);(function(r,f){var n={};r.plugin("documentcloud",{manifest:{about:{name:"Popcorn Document Cloud Plugin",version:"0.1",author:"@humphd, @ChrisDeCairos",website:"http://vocamus.net/dave"},options:{start:{elem:"input",type:"number",label:"Start"},end:{elem:"input",type:"number",label:"End"},target:"documentcloud-container",width:{elem:"input",type:"text",label:"Width",optional:true},height:{elem:"input",type:"text",label:"Height",optional:true},src:{elem:"input",type:"url",label:"PDF URL","default":"http://www.documentcloud.org/documents/70050-urbina-day-1-in-progress.html"},
+preload:{elem:"input",type:"checkbox",label:"Preload","default":true},page:{elem:"input",type:"number",label:"Page Number",optional:true},aid:{elem:"input",type:"number",label:"Annotation Id",optional:true}}},_setup:function(c){function b(){function m(v){c._key=v.api.getId();c._changeView=function(z){c.aid?z.pageSet.showAnnotation(z.api.getAnnotation(c.aid)):z.api.setCurrentPage(c.page)}}function o(){n[c._key]={num:1,id:c._containerId};h.loaded=true}h.loaded=false;var q=c.url.replace(/\.html$/,".js"),
+s=c.target,d=f.getElementById(s),A=f.createElement("div"),y=r.position(d),x=c.width||y.width;y=c.height||y.height;var a=c.sidebar||true,g=c.text||true,l=c.pdf||true,k=c.showAnnotations||true,t=c.zoom||700,u=c.search||true;if(!function(v){var z=false;r.forEach(h.viewers,function(C){if(C.api.getSchema().canonicalURL===v){m(C);C=n[c._key];c._containerId=C.id;C.num+=1;z=true;h.loaded=true}});return z}(c.url)){A.id=c._containerId=r.guid(s);s="#"+A.id;d.appendChild(A);i.trigger("documentready");h.load(q,
+{width:x,height:y,sidebar:a,text:g,pdf:l,showAnnotations:k,zoom:t,search:u,container:s,afterLoad:c.page||c.aid?function(v){m(v);c._changeView(v);A.style.visibility="hidden";v.elements.pages.hide();o()}:function(v){m(v);o();A.style.visibility="hidden";v.elements.pages.hide()}})}}function e(){window.DV.loaded?b():setTimeout(e,25)}var h=window.DV=window.DV||{},i=this;if(h.loading)e();else{h.loading=true;h.recordHit="//www.documentcloud.org/pixel.gif";var j=f.createElement("link"),p=f.getElementsByTagName("head")[0];
+j.rel="stylesheet";j.type="text/css";j.media="screen";j.href="//s3.documentcloud.org/viewer/viewer-datauri.css";p.appendChild(j);h.loaded=false;r.getScript("http://s3.documentcloud.org/viewer/viewer.js",function(){h.loading=false;b()})}},start:function(c,b){var e=f.getElementById(b._containerId),h=DV.viewers[b._key];(b.page||b.aid)&&h&&b._changeView(h);if(e&&h){e.style.visibility="visible";h.elements.pages.show()}},end:function(c,b){var e=f.getElementById(b._containerId);if(e&&DV.viewers[b._key]){e.style.visibility=
+"hidden";DV.viewers[b._key].elements.pages.hide()}},_teardown:function(c){var b=f.getElementById(c._containerId);if((c=c._key)&&DV.viewers[c]&&--n[c].num===0){for(DV.viewers[c].api.unload();b.hasChildNodes();)b.removeChild(b.lastChild);b.parentNode.removeChild(b)}}})})(Popcorn,window.document);(function(r){r.parser("parseJSON","JSON",function(f){var n={title:"",remote:"",data:[]};r.forEach(f.data,function(c){n.data.push(c)});return n})})(Popcorn);(function(r){r.parser("parseSBV",function(f){var n={title:"",remote:"",data:[]},c=[],b=0,e=0,h=function(q){q=q.split(":");var s=q.length-1,d;try{d=parseInt(q[s-1],10)*60+parseFloat(q[s],10);if(s===2)d+=parseInt(q[0],10)*3600}catch(A){throw"Bad cue";}return d},i=function(q,s){var d={};d[q]=s;return d};f=f.text.split(/(?:\r\n|\r|\n)/gm);for(e=f.length;b<e;){var j={},p=[],m=f[b++].split(",");try{j.start=h(m[0]);for(j.end=h(m[1]);b<e&&f[b];)p.push(f[b++]);j.text=p.join("<br />");c.push(i("subtitle",j))}catch(o){for(;b<
+e&&f[b];)b++}for(;b<e&&!f[b];)b++}n.data=c;return n})})(Popcorn);(function(r){function f(c,b){var e={};e[c]=b;return e}function n(c){c=c.split(":");try{var b=c[2].split(",");if(b.length===1)b=c[2].split(".");return parseFloat(c[0],10)*3600+parseFloat(c[1],10)*60+parseFloat(b[0],10)+parseFloat(b[1],10)/1E3}catch(e){return 0}}r.parser("parseSRT",function(c){var b={title:"",remote:"",data:[]},e=[],h=0,i=0,j,p,m,o;c=c.text.split(/(?:\r\n|\r|\n)/gm);for(h=c.length-1;h>=0&&!c[h];)h--;m=h+1;for(h=0;h<m;h++){o={};p=[];o.id=parseInt(c[h++],10);j=c[h++].split(/[\t ]*--\>[\t ]*/);
+o.start=n(j[0]);i=j[1].indexOf(" ");if(i!==-1)j[1]=j[1].substr(0,i);for(o.end=n(j[1]);h<m&&c[h];)p.push(c[h++]);o.text=p.join("\\N").replace(/\{(\\[\w]+\(?([\w\d]+,?)+\)?)+\}/gi,"");o.text=o.text.replace(/</g,"&lt;").replace(/>/g,"&gt;");o.text=o.text.replace(/&lt;(\/?(font|b|u|i|s))((\s+(\w|\w[\w\-]*\w)(\s*=\s*(?:\".*?\"|'.*?'|[^'\">\s]+))?)+\s*|\s*)(\/?)&gt;/gi,"<$1$3$7>");o.text=o.text.replace(/\\N/gi,"<br />");e.push(f("subtitle",o))}b.data=e;return b})})(Popcorn);(function(r){function f(b,e){var h=b.substr(10).split(","),i;i={start:n(h[e.start]),end:n(h[e.end])};if(i.start===-1||i.end===-1)throw"Invalid time";var j=q.call(m,/\{(\\[\w]+\(?([\w\d]+,?)+\)?)+\}/gi,""),p=j.replace,m;m=h.length;q=[];for(var o=e.text;o<m;o++)q.push(h[o]);m=q.join(",");var q=m.replace;i.text=p.call(j,/\\N/gi,"<br />");return i}function n(b){var e=b.split(":");if(b.length!==10||e.length<3)return-1;return parseInt(e[0],10)*3600+parseInt(e[1],10)*60+parseFloat(e[2],10)}function c(b,
+e){var h={};h[b]=e;return h}r.parser("parseSSA",function(b){var e={title:"",remote:"",data:[]},h=[],i=0,j;b=b.text.split(/(?:\r\n|\r|\n)/gm);for(j=b.length;i<j&&b[i]!=="[Events]";)i++;var p=b[++i].substr(8).split(", "),m={},o,q;q=0;for(o=p.length;q<o;q++)if(p[q]==="Start")m.start=q;else if(p[q]==="End")m.end=q;else if(p[q]==="Text")m.text=q;for(;++i<j&&b[i]&&b[i][0]!=="[";)try{h.push(c("subtitle",f(b[i],m)))}catch(s){}e.data=h;return e})})(Popcorn);(function(r){function f(i,j,p){var m=i.firstChild;i=n(i,p);p=[];for(var o;m;){if(m.nodeType===1)if(m.nodeName==="p")p.push(c(m,j,i));else if(m.nodeName==="div"){o=b(m.getAttribute("begin"));if(o<0)o=j;p.push.apply(p,f(m,o,i))}m=m.nextSibling}return p}function n(i,j){var p=i.getAttribute("region");return p!==null?p:j||""}function c(i,j,p){var m={};m.text=(i.textContent||i.text).replace(e,"").replace(h,"<br />");m.id=i.getAttribute("xml:id")||i.getAttribute("id");m.start=b(i.getAttribute("begin"),j);
+m.end=b(i.getAttribute("end"),j);m.target=n(i,p);if(m.end<0){m.end=b(i.getAttribute("duration"),0);if(m.end>=0)m.end+=m.start;else m.end=Number.MAX_VALUE}return{subtitle:m}}function b(i,j){var p;if(!i)return-1;try{return r.util.toSeconds(i)}catch(m){for(var o=i.length-1;o>=0&&i[o]<="9"&&i[o]>="0";)o--;p=o;o=parseFloat(i.substring(0,p));p=i.substring(p);return o*({h:3600,m:60,s:1,ms:0.0010}[p]||-1)+(j||0)}}var e=/^[\s]+|[\s]+$/gm,h=/(?:\r\n|\r|\n)/gm;r.parser("parseTTML",function(i){var j={title:"",
+remote:"",data:[]};if(!i.xml||!i.xml.documentElement)return j;i=i.xml.documentElement.firstChild;if(!i)return j;for(;i.nodeName!=="body";)i=i.nextSibling;if(i)j.data=f(i,0);return j})})(Popcorn);(function(r){r.parser("parseTTXT",function(f){var n={title:"",remote:"",data:[]},c=function(j){j=j.split(":");var p=0;try{return parseFloat(j[0],10)*60*60+parseFloat(j[1],10)*60+parseFloat(j[2],10)}catch(m){p=0}return p},b=function(j,p){var m={};m[j]=p;return m};f=f.xml.lastChild.lastChild;for(var e=Number.MAX_VALUE,h=[];f;){if(f.nodeType===1&&f.nodeName==="TextSample"){var i={};i.start=c(f.getAttribute("sampleTime"));i.text=f.getAttribute("text");if(i.text){i.end=e-0.0010;h.push(b("subtitle",i))}e=
+i.start}f=f.previousSibling}n.data=h.reverse();return n})})(Popcorn);(function(r){function f(c){var b=c.split(":");c=c.length;var e;if(c!==12&&c!==9)throw"Bad cue";c=b.length-1;try{e=parseInt(b[c-1],10)*60+parseFloat(b[c],10);if(c===2)e+=parseInt(b[0],10)*3600}catch(h){throw"Bad cue";}return e}function n(c,b){var e={};e[c]=b;return e}r.parser("parseVTT",function(c){var b={title:"",remote:"",data:[]},e=[],h=0,i=0,j,p;c=c.text.split(/(?:\r\n|\r|\n)/gm);i=c.length;if(i===0||c[0]!=="WEBVTT")return b;for(h++;h<i;){j=[];try{for(var m=h;m<i&&!c[m];)m++;h=m;var o=c[h++];m=
+void 0;var q={};if(!o||o.indexOf("--\>")===-1)throw"Bad cue";m=o.replace(/--\>/," --\> ").split(/[\t ]+/);if(m.length<2)throw"Bad cue";q.id=o;q.start=f(m[0]);q.end=f(m[2]);for(p=q;h<i&&c[h];)j.push(c[h++]);p.text=j.join("<br />");e.push(n("subtitle",p))}catch(s){for(h=h;h<i&&c[h];)h++;h=h}}b.data=e;return b})})(Popcorn);(function(r){r.parser("parseXML","XML",function(f){var n={title:"",remote:"",data:[]},c={},b=function(m){m=m.split(":");if(m.length===1)return parseFloat(m[0],10);else if(m.length===2)return parseFloat(m[0],10)+parseFloat(m[1]/12,10);else if(m.length===3)return parseInt(m[0]*60,10)+parseFloat(m[1],10)+parseFloat(m[2]/12,10);else if(m.length===4)return parseInt(m[0]*3600,10)+parseInt(m[1]*60,10)+parseFloat(m[2],10)+parseFloat(m[3]/12,10)},e=function(m){for(var o={},q=0,s=m.length;q<s;q++){var d=m.item(q).nodeName,
+A=m.item(q).nodeValue,y=c[A];if(d==="in")o.start=b(A);else if(d==="out")o.end=b(A);else if(d==="resourceid")for(var x in y){if(y.hasOwnProperty(x))if(!o[x]&&x!=="id")o[x]=y[x]}else o[d]=A}return o},h=function(m,o){var q={};q[m]=o;return q},i=function(m,o,q){var s={};r.extend(s,o,e(m.attributes),{text:m.textContent||m.text});o=m.childNodes;if(o.length<1||o.length===1&&o[0].nodeType===3)if(q)c[s.id]=s;else n.data.push(h(m.nodeName,s));else for(m=0;m<o.length;m++)o[m].nodeType===1&&i(o[m],s,q)};f=f.documentElement.childNodes;
+for(var j=0,p=f.length;j<p;j++)if(f[j].nodeType===1)f[j].nodeName==="manifest"?i(f[j],{},true):i(f[j],{},false);return n})})(Popcorn);(function(){var r=false,f=false;Popcorn.player("soundcloud",{_canPlayType:function(n,c){return/(?:http:\/\/www\.|http:\/\/|www\.|\.|^)(soundcloud)/.test(c)&&n.toLowerCase()!=="video"},_setup:function(n){function c(){r=true;SC.initialize({client_id:"PRaNFlda6Bhf5utPjUsptg"});SC.get("/resolve",{url:e.src},function(A){e.width=e.style.width?""+e.offsetWidth:"560";e.height=e.style.height?""+e.offsetHeight:"315";h.scrolling="no";h.frameborder="no";h.id="soundcloud-"+Popcorn.guid();h.src="http://w.soundcloud.com/player/?url="+
+A.uri+"&show_artwork=false&buying=false&liking=false&sharing=false";h.width="100%";h.height="100%";n.loadListener=function(){n.widget=o=SC.Widget(h.id);o.bind(SC.Widget.Events.FINISH,function(){e.pause();e.dispatchEvent("ended")});o.bind(SC.Widget.Events.PLAY_PROGRESS,function(y){j=y.currentPosition/1E3;e.dispatchEvent("timeupdate")});o.bind(SC.Widget.Events.PLAY,function(){p=m=false;e.dispatchEvent("play");e.dispatchEvent("playing");e.currentTime=j;d.next()});o.bind(SC.Widget.Events.PAUSE,function(){p=
+m=true;e.dispatchEvent("pause");d.next()});o.bind(SC.Widget.Events.READY,function(){o.getDuration(function(y){q=y/1E3;e.style.visibility="visible";e.dispatchEvent("durationchange");e.readyState=4;e.dispatchEvent("readystatechange");e.dispatchEvent("loadedmetadata");e.dispatchEvent("loadeddata");e.dispatchEvent("canplaythrough");e.dispatchEvent("load");!e.paused&&e.play()});o.getVolume(function(y){i=y/100})})};h.addEventListener("load",n.loadListener,false);e.appendChild(h)})}function b(){if(f)(function A(){setTimeout(function(){r?
+c():A()},100)})();else{f=true;Popcorn.getScript("http://w.soundcloud.com/player/api.js",function(){Popcorn.getScript("http://connect.soundcloud.com/sdk.js",function(){c()})})}}var e=this,h=document.createElement("iframe"),i=1,j=0,p=true,m=true,o,q=0,s=false,d=Popcorn.player.playerQueue();n._container=h;e.style.visibility="hidden";e.play=function(){p=false;d.add(function(){if(m)o&&o.play();else d.next()})};e.pause=function(){p=true;d.add(function(){if(m)d.next();else o&&o.pause()})};Object.defineProperties(e,
+{muted:{set:function(A){if(A){o&&o.getVolume(function(y){i=y/100});o&&o.setVolume(0);s=true}else{o&&o.setVolume(i*100);s=false}e.dispatchEvent("volumechange")},get:function(){return s}},volume:{set:function(A){o&&o.setVolume(A*100);i=A;e.dispatchEvent("volumechange")},get:function(){return s?0:i}},currentTime:{set:function(A){j=A;o&&o.seekTo(A*1E3);e.dispatchEvent("seeked");e.dispatchEvent("timeupdate")},get:function(){return j}},duration:{get:function(){return q}},paused:{get:function(){return p}}});
+r?c():b()},_teardown:function(n){var c=n.widget,b=SC.Widget.Events,e=n._container;n.destroyed=true;if(c)for(var h in b)c&&c.unbind(b[h]);else e.removeEventListener("load",n.loadEventListener,false)}})})();(function(){function r(n){var c=r.options;n=c.parser[c.strictMode?"strict":"loose"].exec(n);for(var b={},e=14;e--;)b[c.key[e]]=n[e]||"";b[c.q.name]={};b[c.key[12]].replace(c.q.parser,function(h,i,j){if(i)b[c.q.name][i]=j});return b}function f(n,c){return/player.vimeo.com\/video\/\d+/.test(c)||/vimeo.com\/\d+/.test(c)}r.options={strictMode:false,key:["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],q:{name:"queryKey",
+parser:/(?:^|&)([^&=]*)=?([^&]*)/g},parser:{strict:/^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,loose:/^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/}};Popcorn.player("vimeo",{_canPlayType:f,_setup:function(n){function c(l,k){var t=y.src.split("?")[0],u=JSON.stringify({method:l,
+value:k});if(t.substr(0,2)==="//")t=window.location.protocol+t;y.contentWindow?y.contentWindow.postMessage(u,t):o.unload()}function b(l){if(l.origin==="http://player.vimeo.com"){var k;try{k=JSON.parse(l.data)}catch(t){console.warn(t)}if(k.player_id==m){k.method&&a[k.method]&&a[k.method](k);k.event&&g[k.event]&&g[k.event](k)}}}function e(){d||(d=setInterval(function(){o.dispatchEvent("timeupdate")},i));s||(s=setInterval(function(){c("getCurrentTime")},j))}function h(){if(d){clearInterval(d);d=0}if(s){clearInterval(s);
+s=0}}var i=250,j=16,p={MEDIA_ERR_ABORTED:1,MEDIA_ERR_NETWORK:2,MEDIA_ERR_DECODE:3,MEDIA_ERR_SRC_NOT_SUPPORTED:4},m,o=this,q={q:[],queue:function(l){this.q.push(l);this.process()},process:function(){if(A)for(;this.q.length;)this.q.shift()()}},s,d,A,y=document.createElement("iframe"),x={error:null,src:o.src,NETWORK_EMPTY:0,NETWORK_IDLE:1,NETWORK_LOADING:2,NETWORK_NO_SOURCE:3,networkState:0,HAVE_NOTHING:0,HAVE_METADATA:1,HAVE_CURRENT_DATA:2,HAVE_FUTURE_DATA:3,HAVE_ENOUGH_DATA:4,readyState:0,seeking:false,
+currentTime:0,duration:NaN,paused:true,ended:false,autoplay:false,loop:false,volume:1,muted:false,width:0,height:0};Popcorn.forEach("error networkState readyState seeking duration paused ended".split(" "),function(l){Object.defineProperty(o,l,{get:function(){return x[l]}})});Object.defineProperties(o,{src:{get:function(){return x.src},set:function(l){x.src=l;o.load()}},currentTime:{get:function(){return x.currentTime},set:function(l){q.queue(function(){c("seekTo",l)});x.seeking=true;o.dispatchEvent("seeking")}},
+autoplay:{get:function(){return x.autoplay},set:function(l){x.autoplay=!!l}},loop:{get:function(){return x.loop},set:function(l){x.loop=!!l;q.queue(function(){c("setLoop",loop)})}},volume:{get:function(){return x.volume},set:function(l){x.volume=l;q.queue(function(){c("setVolume",x.muted?0:x.volume)});o.dispatchEvent("volumechange")}},muted:{get:function(){return x.muted},set:function(l){x.muted=!!l;q.queue(function(){c("setVolume",x.muted?0:x.volume)});o.dispatchEvent("volumechange")}},width:{get:function(){return y.width},
+set:function(l){y.width=l}},height:{get:function(){return y.height},set:function(l){y.height=l}}});var a={getCurrentTime:function(l){x.currentTime=parseFloat(l.value)},getDuration:function(l){x.duration=parseFloat(l.value);if(!isNaN(x.duration)){x.readyState=4;o.dispatchEvent("durationchange");o.dispatchEvent("loadedmetadata");o.dispatchEvent("loadeddata");o.dispatchEvent("canplay");o.dispatchEvent("canplaythrough")}},getVolume:function(l){x.volume=parseFloat(l.value)}},g={ready:function(){c("addEventListener",
+"loadProgress");c("addEventListener","playProgress");c("addEventListener","play");c("addEventListener","pause");c("addEventListener","finish");c("addEventListener","seek");c("getDuration");A=true;q.process();o.dispatchEvent("loadstart")},loadProgress:function(l){o.dispatchEvent("progress");x.duration=parseFloat(l.data.duration)},playProgress:function(l){x.currentTime=parseFloat(l.data.seconds)},play:function(){if(x.seeking){x.seeking=false;o.dispatchEvent("seeked")}x.paused=false;x.ended=false;e();
+o.dispatchEvent("play")},pause:function(){x.paused=true;h();o.dispatchEvent("pause")},finish:function(){x.ended=true;h();o.dispatchEvent("ended")},seek:function(l){x.currentTime=parseFloat(l.data.seconds);x.seeking=false;x.ended=false;o.dispatchEvent("timeupdate");o.dispatchEvent("seeked")}};o.load=function(){A=false;m=Popcorn.guid();var l=r(x.src),k={},t=[],u={api:1,player_id:m};if(f(o.nodeName,l.source)){Popcorn.extend(k,n);Popcorn.extend(k,l.queryKey);Popcorn.extend(k,u);l="http://player.vimeo.com/video/"+
+/\d+$/.exec(l.path)+"?";for(var v in k)k.hasOwnProperty(v)&&t.push(encodeURIComponent(v)+"="+encodeURIComponent(k[v]));l+=t.join("&");x.loop=!!l.match(/loop=1/);x.autoplay=!!l.match(/autoplay=1/);y.width=o.style.width?o.style.width:500;y.height=o.style.height?o.style.height:281;y.frameBorder=0;y.webkitAllowFullScreen=true;y.mozAllowFullScreen=true;y.allowFullScreen=true;y.src=l;o.appendChild(y)}else{l=x.MEDIA_ERR_SRC_NOT_SUPPORTED;x.error={};Popcorn.extend(x.error,p);x.error.code=l;o.dispatchEvent("error")}};
+o.unload=function(){h();window.removeEventListener("message",b,false)};o.play=function(){q.queue(function(){c("play")})};o.pause=function(){q.queue(function(){c("pause")})};setTimeout(function(){window.addEventListener("message",b,false);o.load()},0)},_teardown:function(){this.unload&&this.unload()}})})();(function(r,f){r.onYouTubePlayerAPIReady=function(){onYouTubePlayerAPIReady.ready=true;for(var c=0;c<onYouTubePlayerAPIReady.waiting.length;c++)onYouTubePlayerAPIReady.waiting[c]()};if(r.YT){r.quarantineYT=r.YT;r.YT=null}onYouTubePlayerAPIReady.waiting=[];var n=false;f.player("youtube",{_canPlayType:function(c,b){return typeof b==="string"&&/(?:http:\/\/www\.|http:\/\/|www\.|\.|^)(youtu)/.test(b)&&c.toLowerCase()!=="video"},_setup:function(c){if(!r.YT&&!n){n=true;f.getScript("//youtube.com/player_api")}var b=
+this,e=false,h=document.createElement("div"),i=0,j=true,p=false,m=0,o=false,q=100,s=f.player.playerQueue(),d=function(){f.player.defineProperty(b,"currentTime",{set:function(y){if(!c.destroyed){p=true;i=Math.round(+y*100)/100}},get:function(){return i}});f.player.defineProperty(b,"paused",{get:function(){return j}});f.player.defineProperty(b,"muted",{set:function(y){if(c.destroyed)return y;if(c.youtubeObject.isMuted()!==y){y?c.youtubeObject.mute():c.youtubeObject.unMute();o=c.youtubeObject.isMuted();
+b.dispatchEvent("volumechange")}return c.youtubeObject.isMuted()},get:function(){if(c.destroyed)return 0;return c.youtubeObject.isMuted()}});f.player.defineProperty(b,"volume",{set:function(y){if(c.destroyed)return y;if(c.youtubeObject.getVolume()/100!==y){c.youtubeObject.setVolume(y*100);q=c.youtubeObject.getVolume();b.dispatchEvent("volumechange")}return c.youtubeObject.getVolume()/100},get:function(){if(c.destroyed)return 0;return c.youtubeObject.getVolume()/100}});b.play=function(){if(!c.destroyed){j=
+false;s.add(function(){if(c.youtubeObject.getPlayerState()!==1){p=false;c.youtubeObject.playVideo()}else s.next()})}};b.pause=function(){if(!c.destroyed){j=true;s.add(function(){c.youtubeObject.getPlayerState()!==2?c.youtubeObject.pauseVideo():s.next()})}}};h.id=b.id+f.guid();c._container=h;b.appendChild(h);var A=function(){var y,x,a,g,l=true,k=function(){if(!c.destroyed){if(p)if(i===c.youtubeObject.getCurrentTime()){p=false;b.dispatchEvent("seeked");b.dispatchEvent("timeupdate")}else c.youtubeObject.seekTo(i);
+else{i=c.youtubeObject.getCurrentTime();b.dispatchEvent("timeupdate")}setTimeout(k,250)}},t=function(z){var C=c.youtubeObject.getDuration();if(isNaN(C)||C===0)setTimeout(function(){t(z*2)},z*1E3);else{b.duration=C;b.dispatchEvent("durationchange");b.dispatchEvent("loadedmetadata");b.dispatchEvent("loadeddata");b.readyState=4;k();b.dispatchEvent("canplaythrough")}};c.controls=+c.controls===0||+c.controls===1?c.controls:1;c.annotations=+c.annotations===1||+c.annotations===3?c.annotations:1;y=/^.*(?:\/|v=)(.{11})/.exec(b.src)[1];
+x=(b.src.split("?")[1]||"").replace(/v=.{11}/,"");x=x.replace(/&t=(?:(\d+)m)?(?:(\d+)s)?/,function(z,C,E){C|=0;E|=0;m=+E+C*60;return""});x=x.replace(/&start=(\d+)?/,function(z,C){C|=0;m=C;return""});e=/autoplay=1/.test(x);x=x.split(/[\&\?]/g);a={wmode:"transparent"};for(var u=0;u<x.length;u++){g=x[u].split("=");a[g[0]]=g[1]}c.youtubeObject=new YT.Player(h.id,{height:"100%",width:"100%",wmode:"transparent",playerVars:a,videoId:y,events:{onReady:function(){q=b.volume;o=b.muted;v();j=b.paused;d();c.youtubeObject.playVideo();
+b.currentTime=m},onStateChange:function(z){if(!(c.destroyed||z.data===-1))if(z.data===2){j=true;b.dispatchEvent("pause");s.next()}else if(z.data===1&&!l){j=false;b.dispatchEvent("play");b.dispatchEvent("playing");s.next()}else if(z.data===0)b.dispatchEvent("ended");else if(z.data===1&&l){l=false;if(e||!b.paused)j=false;j&&c.youtubeObject.pauseVideo();t(0.025)}},onError:function(z){if([2,100,101,150].indexOf(z.data)!==-1){b.error={customCode:z.data};b.dispatchEvent("error")}}}});var v=function(){if(!c.destroyed){if(o!==
+c.youtubeObject.isMuted()){o=c.youtubeObject.isMuted();b.dispatchEvent("volumechange")}if(q!==c.youtubeObject.getVolume()){q=c.youtubeObject.getVolume();b.dispatchEvent("volumechange")}setTimeout(v,250)}}};onYouTubePlayerAPIReady.ready?A():onYouTubePlayerAPIReady.waiting.push(A)},_teardown:function(c){c.destroyed=true;var b=c.youtubeObject;if(b){b.stopVideo();b.clearVideo&&b.clearVideo()}this.removeChild(document.getElementById(c._container.id))}})})(window,Popcorn);
--- a/src/ldt/ldt/static/ldt/metadataplayer/AdaptivePlayer.js	Tue Feb 12 17:29:41 2013 +0100
+++ b/src/ldt/ldt/static/ldt/metadataplayer/AdaptivePlayer.js	Tue Feb 12 17:30:41 2013 +0100
@@ -6,7 +6,7 @@
 
 IriSP.Widgets.AdaptivePlayer.prototype.defaults = {
     mime_type: "video/mp4",
-    normal_player: "PopcornPlayer",
+    normal_player: "HtmlPlayer",
     fallback_player: "JwpPlayer"
 }
 
--- a/src/ldt/ldt/static/ldt/metadataplayer/Annotation.css	Tue Feb 12 17:29:41 2013 +0100
+++ b/src/ldt/ldt/static/ldt/metadataplayer/Annotation.css	Tue Feb 12 17:30:41 2013 +0100
@@ -6,10 +6,6 @@
     margin: 0;
 }
 
-.Ldt-Annotation-Highlight {
-    background: #ffa0fc;
-}
-
 .Ldt-Annotation-Widget.Ldt-Annotation-ShowTop {
     border-top-style: solid;
     padding-top: 1px;
--- a/src/ldt/ldt/static/ldt/metadataplayer/Annotation.js	Tue Feb 12 17:29:41 2013 +0100
+++ b/src/ldt/ldt/static/ldt/metadataplayer/Annotation.js	Tue Feb 12 17:30:41 2013 +0100
@@ -76,17 +76,12 @@
             return;
         }
         var title = currentAnnotation.title,
-            description = currentAnnotation.description.replace(/(^\s+|\s+$)/g,'');
-        if (currentAnnotation.found) {
-            var rgxp = _this.source.getAnnotations().regexp || /^$/,
-                repl = '<span class="Ldt-Annotation-Highlight">$1</span>';
-            title = title.replace(rgxp,repl);
-            description = description.replace(rgxp,repl).replace(/[\n\r]+/gm,'<br />');
-        }
-        _this.$.find(".Ldt-Annotation-Title").html(title || "(" + _this.l10n.untitled + ")");
+            description = currentAnnotation.description.replace(/(^\s+|\s+$)/g,''),
+            rx = (currentAnnotation.found ? (_this.source.getAnnotations().regexp || false) : false);
+        _this.$.find(".Ldt-Annotation-Title").html(IriSP.textFieldHtml(title,rx)  || "(" + _this.l10n.untitled + ")");
         if (description) {
             _this.$.find(".Ldt-Annotation-Description-Block").removeClass("Ldt-Annotation-EmptyBlock");
-            _this.$.find(".Ldt-Annotation-Description").html(description);
+            _this.$.find(".Ldt-Annotation-Description").html(IriSP.textFieldHtml(description,rx));
         } else {
             _this.$.find(".Ldt-Annotation-Description-Block").addClass("Ldt-Annotation-EmptyBlock");
         }
@@ -156,7 +151,7 @@
         this.insertSubwidget(this.$.find(".Ldt-Annotation-Social"), { type: "Social" }, "socialWidget");
     }
     
-    this.insertSubwidget(this.$.find(".Ldt-Annotation-Arrow"), { type: "Arrow" }, "arrow");
+    this.insertSubwidget(this.$.find(".Ldt-Annotation-Arrow"), { type: "Arrow", width: this.width }, "arrow");
     this.onMediaEvent("timeupdate",timeupdate);
     this.onMdpEvent("Annotation.hide","hide");
     this.onMdpEvent("Annotation.show","show");
--- a/src/ldt/ldt/static/ldt/metadataplayer/AnnotationsList.css	Tue Feb 12 17:29:41 2013 +0100
+++ b/src/ldt/ldt/static/ldt/metadataplayer/AnnotationsList.css	Tue Feb 12 17:30:41 2013 +0100
@@ -28,9 +28,6 @@
 .Ldt-AnnotationsList-li.selected {
     background-image: url(img/pinstripe-grey.png);
 }
-.Ldt-AnnotationsList-highlight {
-    background: #FFA0FC;
-}
 .Ldt-AnnotationsList-ThumbContainer {
     float: left;
     width: 80px;
@@ -57,14 +54,25 @@
     margin: 2px 2px 0 82px;
     font-weight: bold;
 }
-h3.Ldt-AnnotationsList-Title a {
+
+.Ldt-AnnotationsList-Title a {
     color: #0068c4;
 }
+
 p.Ldt-AnnotationsList-Description {
     margin: 2px 0 2px 82px;
     font-size: 12px;
     color: #333333;
 }
+
+.Ldt-AnnotationsList-Description a {
+    color: #0068c4;
+}
+
+.Ldt-AnnotationsList-Description a:hover {
+    text-decoration: underline; color: #800000;
+}
+
 ul.Ldt-AnnotationsList-Tags {
     list-style: none;
     padding: 0;
--- a/src/ldt/ldt/static/ldt/metadataplayer/AnnotationsList.js	Tue Feb 12 17:29:41 2013 +0100
+++ b/src/ldt/ldt/static/ldt/metadataplayer/AnnotationsList.js	Tue Feb 12 17:30:41 2013 +0100
@@ -71,9 +71,9 @@
     + '</div>'
     + '<div class="Ldt-AnnotationsList-Duration">{{begin}} - {{end}}</div>'
     + '<h3 class="Ldt-AnnotationsList-Title">'
-    + '<a href="{{url}}">{{title}}</a>'
+    + '<a href="{{url}}">{{{title}}}</a>'
     + '</h3>'
-    + '<p class="Ldt-AnnotationsList-Description">{{description}}</p>'
+    + '<p class="Ldt-AnnotationsList-Description">{{{description}}}</p>'
     + '{{#tags.length}}'
     + '<ul class="Ldt-AnnotationsList-Tags">'
     + '{{#tags}}'
@@ -202,8 +202,8 @@
             var _data = {
                 id : _annotation.id,
                 media_id : _annotation.getMedia().id,
-                title : _title,
-                description : _description,
+                title : IriSP.textFieldHtml(_title),
+                description : IriSP.textFieldHtml(_description),
                 begin : _annotation.begin.toString(),
                 end : _annotation.end.toString(),
                 thumbnail : typeof _annotation.thumbnail !== "undefined" && _annotation.thumbnail ? _annotation.thumbnail : _this.default_thumbnail,
@@ -265,10 +265,11 @@
         });
         
         if (this.source.getAnnotations().searching) {
+            var rx = _this.source.getAnnotations().regexp || false;
             this.$.find(".Ldt-AnnotationsList-Title a, .Ldt-AnnotationsList-Description").each(function() {
                 var _$ = IriSP.jQuery(this);
-                _$.html(_$.text().replace(/(^\s+|\s+$)/g,'').replace(_this.source.getAnnotations().regexp, '<span class="Ldt-AnnotationsList-highlight">$1</span>'))
-            })
+                _$.html(IriSP.textFieldHtml(_$.text(), rx));
+            });
         }
     }
     
--- a/src/ldt/ldt/static/ldt/metadataplayer/AutoPlayer.js	Tue Feb 12 17:29:41 2013 +0100
+++ b/src/ldt/ldt/static/ldt/metadataplayer/AutoPlayer.js	Tue Feb 12 17:30:41 2013 +0100
@@ -27,7 +27,7 @@
             },
             {
                 regexp: /\.(ogg|ogv|webm)$/,
-                type: "PopcornPlayer"
+                type: "HtmlPlayer"
             },
             {
                 regexp: /^(https?:\/\/)?(www\.)?youtube\.com/,
@@ -57,7 +57,7 @@
     
     if (_opts.type === "AdaptivePlayer") {
         var _canPlayType = document.createElement('video').canPlayType("video/mp4");
-        _opts.type = (_canPlayType == "maybe" || _canPlayType == "probably") ? "PopcornPlayer" : "JwpPlayer";
+        _opts.type = (_canPlayType == "maybe" || _canPlayType == "probably") ? "HtmlPlayer" : "JwpPlayer";
     }
     
     if (_rtmprgx.test(this.video)) {
--- a/src/ldt/ldt/static/ldt/metadataplayer/CreateAnnotation.js	Tue Feb 12 17:29:41 2013 +0100
+++ b/src/ldt/ldt/static/ldt/metadataplayer/CreateAnnotation.js	Tue Feb 12 17:30:41 2013 +0100
@@ -149,7 +149,7 @@
     if (this.tag_titles && !this.tags) {
         this.tags = IriSP._(this.tag_titles).map(function(_tag_title) {
             var _tag,
-                _tags = _this.source.getTags().searchByTitle(_tag_title);
+                _tags = _this.source.getTags().searchByTitle(_tag_title, true);
             if (_tags.length) {
                 _tag = _tags[0];
             } else {
@@ -370,10 +370,11 @@
         this.recorder.stopRecord();
     }
     
-    var _exportedAnnotations = new IriSP.Model.List(this.player.sourceManager), /* Création d'une liste d'annotations contenant une annotation afin de l'envoyer au serveur */
+    var _this = this,
+        _exportedAnnotations = new IriSP.Model.List(this.player.sourceManager), /* Création d'une liste d'annotations contenant une annotation afin de l'envoyer au serveur */
         _export = this.player.sourceManager.newLocalSource({serializer: IriSP.serializers[this.api_serializer]}), /* Création d'un objet source utilisant un sérialiseur spécifique pour l'export */
         _annotation = new IriSP.Model.Annotation(false, _export), /* Création d'une annotation dans cette source avec un ID généré à la volée (param. false) */
-        _annotationTypes = this.source.getAnnotationTypes().searchByTitle(this.annotation_type), /* Récupération du type d'annotation dans lequel l'annotation doit être ajoutée */
+        _annotationTypes = this.source.getAnnotationTypes().searchByTitle(this.annotation_type, true), /* Récupération du type d'annotation dans lequel l'annotation doit être ajoutée */
         _annotationType = (_annotationTypes.length ? _annotationTypes[0] : new IriSP.Model.AnnotationType(false, _export)), /* Si le Type d'Annotation n'existe pas, il est créé à la volée */
         _url = Mustache.to_html(this.api_endpoint_template, {id: this.source.projectId}); /* Génération de l'URL à laquelle l'annotation doit être envoyée, qui doit inclure l'ID du projet */
     
@@ -400,8 +401,24 @@
     }
     _annotation.created = new Date(); /* Date de création de l'annotation */
     _annotation.description = this.$.find(".Ldt-CreateAnnotation-Description").val(); /* Champ description */
-    _annotation.setTags(this.$.find(".Ldt-CreateAnnotation-TagLi.selected")
-        .map(function() { return IriSP.jQuery(this).attr("tag-id")})); /*Liste des ids de tags */
+   
+    var tagIds = this.$.find(".Ldt-CreateAnnotation-TagLi.selected")
+        .map(function() { return IriSP.jQuery(this).attr("tag-id")});
+    
+    IriSP._(_annotation.description.match(/#[\w\d]+/g)).each(function(_tt) {
+        var _tag,
+            _tag_title = _tt.replace(/^#/,'')
+            _tags = _this.source.getTags().searchByTitle(_tag_title, true);
+        if (_tags.length) {
+            _tag = _tags[0];
+        } else {
+            _tag = new IriSP.Model.Tag(false, _this.source);
+            _tag.title = _tag_title;
+        }
+        tagIds.push(_tag.id);
+    })
+   
+    _annotation.setTags(IriSP._(tagIds).uniq()); /*Liste des ids de tags */
     if (this.audio_url) {
         _annotation.audio = {
             src: "mic",
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/ldt/ldt/static/ldt/metadataplayer/HtmlPlayer.js	Tue Feb 12 17:30:41 2013 +0100
@@ -0,0 +1,127 @@
+IriSP.Widgets.HtmlPlayer = function(player, config) {
+    IriSP.Widgets.Widget.call(this, player, config);
+};
+
+IriSP.Widgets.HtmlPlayer.prototype = new IriSP.Widgets.Widget();
+
+
+IriSP.Widgets.HtmlPlayer.prototype.defaults = {
+}
+
+IriSP.Widgets.HtmlPlayer.prototype.draw = function() {
+
+    
+    if (typeof this.video === "undefined") {
+        this.video = this.media.video;
+    }
+    
+    if (this.url_transform) {
+        this.video = this.url_transform(this.video);
+    }
+        
+    var videoEl = IriSP.jQuery('<video>');
+    videoEl.attr({
+        width : this.width,
+        height : this.height || undefined
+    });
+    if(typeof this.video === "string"){
+        videoEl.attr("src",this.video);
+    } else {
+        for (var i = 0; i < this.video.length; i++) {
+            var _srcNode = IriSP.jQuery('<source>');
+            _srcNode.attr({
+                src: this.video[i].src,
+                type: this.video[i].type
+            });
+            videoEl.append(_srcNode);
+        }
+    }
+    this.$.html(videoEl);
+    if (this.autostart || this.autoplay) {
+        videoEl.attr("autoplay", true);
+    }
+    
+    var mediaEl = videoEl[0],
+        media = this.media;
+    
+    // Binding functions to Popcorn
+    media.on("setcurrenttime", function(_milliseconds) {
+        try {
+            mediaEl.currentTime = (_milliseconds / 1000);
+        } catch (err) {
+            
+        }
+    });
+    
+    media.on("setvolume", function(_vol) {
+        media.volume = _vol;
+        try {
+            mediaEl.volume = _vol;
+        } catch (err) {
+            
+        }
+    });
+    
+    media.on("setmuted", function(_muted) {
+        media.muted = _muted;
+        try {
+            mediaEl.muted = _muted;
+        } catch (err) {
+            
+        }
+    });
+    
+    media.on("setplay", function() {
+        try {
+            mediaEl.play();
+        } catch (err) {
+            
+        }
+    });
+    
+    media.on("setpause", function() {
+        try {
+            mediaEl.pause();
+        } catch (err) {
+            
+        }
+    });
+    
+    // Binding Popcorn events to media
+    function getVolume() {
+        media.muted = mediaEl.muted;
+        media.volume = mediaEl.volume;
+    }
+    
+    videoEl.on("loadedmetadata", function() {
+        getVolume();
+        media.trigger("loadedmetadata");
+        media.trigger("volumechange");
+    })
+    
+    videoEl.on("timeupdate", function() {
+        media.trigger("timeupdate", new IriSP.Model.Time(1000*mediaEl.currentTime));
+    });
+    
+    videoEl.on("volumechange", function() {
+        getVolume();
+        media.trigger("volumechange");
+    })
+    
+    videoEl.on("play", function() {
+        media.trigger("play");
+    });
+    
+    videoEl.on("pause", function() {
+        media.trigger("pause");
+    });
+    
+    videoEl.on("seeking", function() {
+        media.trigger("seeking");
+    });
+    
+    videoEl.on("seeked", function() {
+        media.trigger("seeked");
+    });
+    
+}
\ No newline at end of file
--- a/src/ldt/ldt/static/ldt/metadataplayer/JwpPlayer.js	Tue Feb 12 17:29:41 2013 +0100
+++ b/src/ldt/ldt/static/ldt/metadataplayer/JwpPlayer.js	Tue Feb 12 17:30:41 2013 +0100
@@ -36,7 +36,9 @@
     _opts.flashplayer = IriSP.getLib("jwPlayerSWF");
     _opts["controlbar.position"] = "none";
     _opts.width = this.width;
-    _opts.height = this.height || Math.floor(.643*this.width);
+    if (this.height) {
+        _opts.height = this.height;
+    }
     
     for (var i = 0; i < _props.length; i++) {
         if (typeof this[_props[i]] !== "undefined") {
--- a/src/ldt/ldt/static/ldt/metadataplayer/LdtPlayer-core.css	Tue Feb 12 17:29:41 2013 +0100
+++ b/src/ldt/ldt/static/ldt/metadataplayer/LdtPlayer-core.css	Tue Feb 12 17:30:41 2013 +0100
@@ -12,4 +12,8 @@
 /*    font-family: Arial, Helvetica, sans-serif; */
     color: black;
     font-size: 12px;
-}
\ No newline at end of file
+}
+
+.Ldt-Highlight {
+    background: #ffa0fc;
+}
--- a/src/ldt/ldt/static/ldt/metadataplayer/LdtPlayer-core.js	Tue Feb 12 17:29:41 2013 +0100
+++ b/src/ldt/ldt/static/ldt/metadataplayer/LdtPlayer-core.js	Tue Feb 12 17:30:41 2013 +0100
@@ -119,21 +119,24 @@
         _this.widgets.push(null);
         _this.loadWidget(widgetconf, function(widget) {
             _this.widgets[key] = widget;
+            if (widget.isLoaded()) {
+                _this.trigger("widget-loaded");
+            }
         });
     });
     this.$.find('.Ldt-Loader').detach();
     
-    var endload = false;
+    this.widgetsLoaded = false;
     
     this.on("widget-loaded", function() {
-        if (endload) {
+        if (_this.widgetsLoaded) {
             return;
         }
         var isloaded = !IriSP._(_this.widgets).any(function(w) {
             return !(w && w.isLoaded())
         });
         if (isloaded) {
-            endload = true;
+            _this.widgetsLoaded = true;
             _this.trigger("widgets-loaded");
         }
     });   
@@ -243,6 +246,79 @@
     }
 }
 
+IriSP.textFieldHtml = function(_text, _regexp, _extend) {
+    var list = [],
+        positions = [],
+        text = _text.replace(/(^\s+|\s+$)/g,'');
+    
+    function addToList(_rx, _startHtml, _endHtml) {
+        while(true) {
+            var result = _rx.exec(text);
+            if (!result) {
+                break;
+            }
+            var end = _rx.lastIndex,
+                start = result.index;
+            list.push({
+                start: start,
+                end: end,
+                startHtml: (typeof _startHtml === "function" ? _startHtml(result) : _startHtml),
+                endHtml: (typeof _endHtml === "function" ? _endHtml(result) : _endHtml)
+            });
+            positions.push(start);
+            positions.push(end);
+        }
+    }
+    
+    if (_regexp) {
+        addToList(_regexp, '<span class="Ldt-Highlight">', '</span>');
+    }
+    
+    addToList(/(https?:\/\/)?\w+\.\w+\S+/gm, function(matches) {
+        return '<a href="' + (matches[1] ? '' : 'http://') + matches[0] + '" target="_blank">'
+    }, '</a>');
+    addToList(/@([\d\w]{1,15})/gm, function(matches) {
+        return '<a href="http://twitter.com/' + matches[1] + '" target="_blank">'
+    }, '</a>');
+    addToList(/\*[^*]+\*/gm, '<b>', '</b>');
+    addToList(/[\n\r]+/gm, '', '<br />');
+    
+    IriSP._(_extend).each(function(x) {
+        addToList.apply(null, x);
+    });
+    
+    positions = IriSP._(positions)
+        .chain()
+        .uniq()
+        .sortBy(function(p) { return parseInt(p) })
+        .value();
+    
+    var res = "", lastIndex = 0;
+    
+    for (var i = 0; i < positions.length; i++) {
+        var pos = positions[i];
+        res += text.substring(lastIndex, pos);
+        for (var j = list.length - 1; j >= 0; j--) {
+            var item = list[j];
+            if (item.start < pos && item.end >= pos) {
+                res += item.endHtml;
+            }
+        }
+        for (var j = 0; j < list.length; j++) {
+            var item = list[j];
+            if (item.start <= pos && item.end > pos) {
+                res += item.startHtml;
+            }
+        }
+        lastIndex = pos;
+    }
+    
+    res += text.substring(lastIndex);
+    
+    return res;
+    
+}
+
 IriSP.log = function() {
     if (typeof console !== "undefined" && typeof IriSP.logging !== "undefined" && IriSP.logging) {
         console.log.apply(console, arguments);
@@ -269,11 +345,12 @@
     var uidbase = rand16(8) + "-" + rand16(4) + "-", uidincrement = Math.floor(Math.random()*0x10000);
     
     var charsub = [
-        [ 'a', 'á', 'à', 'â', 'ä' ],
-        [ 'c', 'ç' ],
-        [ 'e', 'é', 'è', 'ê', 'ë' ],
-        [ 'i', 'í', 'ì', 'î', 'ï' ],
-        [ 'o', 'ó', 'ò', 'ô', 'ö' ]
+        '[aáàâä]',
+        '[cç]',
+        '[eéèêë]',
+        '[iíìîï]',
+        '[oóòôö]',
+        '[uùûü]'
     ];
     
     var removeChars = [
@@ -321,10 +398,7 @@
             remrx = new RegExp(remsrc,"gm"),
             txt = _text.toLowerCase().replace(remrx,"")
             res = [],
-            charsrc = ns._(charsub).map(function(c) {
-                return "(" + c.join("|") + ")";
-            }),
-            charsrx = ns._(charsrc).map(function(c) {
+            charsrx = ns._(charsub).map(function(c) {
                 return new RegExp(c);
             }),
             src = "";
@@ -333,7 +407,7 @@
                 src += remsrc + "*";
             }
             var l = txt[j];
-            ns._(charsrc).each(function(v, k) {
+            ns._(charsub).each(function(v, k) {
                 l = l.replace(charsrx[k], v);
             });
             src += l;
@@ -473,7 +547,7 @@
  */
 Model.List.prototype.searchByTitle = function(_text, _iexact) {
     var _iexact = _iexact || false,
-        _rgxp = Model.regexpFromTextOrArray(_text, true);
+        _rgxp = Model.regexpFromTextOrArray(_text, true, _iexact);
     return this.filter(function(_element) {
         return _rgxp.test(_element.title);
     });
@@ -481,7 +555,7 @@
 
 Model.List.prototype.searchByDescription = function(_text, _iexact) {
     var _iexact = _iexact || false,
-        _rgxp = Model.regexpFromTextOrArray(_text, true);
+        _rgxp = Model.regexpFromTextOrArray(_text, true, _iexact);
     return this.filter(function(_element) {
         return _rgxp.test(_element.description);
     });
@@ -489,7 +563,7 @@
 
 Model.List.prototype.searchByTextFields = function(_text, _iexact) {
     var _iexact = _iexact || false,
-        _rgxp =  Model.regexpFromTextOrArray(_text, true);
+        _rgxp =  Model.regexpFromTextOrArray(_text, true, _iexact);
     return this.filter(function(_element) {
         var keywords = (_element.keywords || _element.getTagTexts() || []).join(", ");
         return _rgxp.test(_element.description) || _rgxp.test(_element.title) || _rgxp.test(keywords);
@@ -798,6 +872,7 @@
     this.volume = .5;
     this.paused = true;
     this.muted = false;
+    this.loadedMetadata = false;
     var _this = this;
     this.on("play", function() {
         _this.paused = false;
@@ -822,6 +897,9 @@
             _this.trigger("enter-annotation",_a);
         });
     });
+    this.on("loadedmetadata", function() {
+        _this.loadedMetadata = true;
+    })
 }
 
 Model.Playable.prototype = new Model.Element();
@@ -1065,17 +1143,6 @@
 
 Model.Mashup.prototype = new Model.Playable();
 
-Model.Mashup.prototype.checkLoaded = function() {
-    var loaded = !!this.segments.length;
-    this.getMedias().forEach(function(_m) {
-        loaded = loaded && _m.loaded;
-    });
-    this.loaded = loaded;
-    if (loaded) {
-        this.trigger("loadedmetadata");
-    }
-}
-
 Model.Mashup.prototype.updateTimes = function() {
     var _time = 0;
     this.segments.forEach(function(_segment) {
@@ -1443,6 +1510,9 @@
 return Model;
 
 })(IriSP);
+
+/* END model.js */
+
 IriSP.language = 'en';
 
 IriSP.libFiles = {
@@ -1481,7 +1551,8 @@
         underscore : "http://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.3.3/underscore-min.js",
         Mustache : "http://cdnjs.cloudflare.com/ajax/libs/mustache.js/0.5.0-dev/mustache.min.js",
         raphael : "http://cdnjs.cloudflare.com/ajax/libs/raphael/2.1.0/raphael-min.js",
-        json : "http://cdnjs.cloudflare.com/ajax/libs/json2/20110223/json2.js"
+        json : "http://cdnjs.cloudflare.com/ajax/libs/json2/20110223/json2.js",
+        popcorn: "http://cdn.popcornjs.org/code/dist/popcorn-complete.min.js"
     },
     useCdn : false
 }
@@ -1587,8 +1658,16 @@
        _this[_key] = _value;
     });
     
+    this.$ = IriSP.jQuery('#' + this.container);
+    
     if (typeof this.width === "undefined") {
-        this.width = player.config.width;
+        this.width = this.$.width();
+    } else {
+        this.$.css("width", this.width);
+    }
+    
+    if (typeof this.height !== "undefined") {
+        this.$.css("height", this.height);
     }
     
     /* Setting this.player at the end in case it's been overriden
@@ -1596,26 +1675,7 @@
      */
     this.player = player;
     
-    /* Getting metadata */
-    this.source = player.loadMetadata(this.metadata);
-    
-    /* Call draw when loaded */
-    this.source.onLoad(function() {
-        if (_this.media_id) {
-            _this.media = this.getElement(_this.media_id);
-        } else {
-            var _mediaopts = {
-                is_mashup: _this.is_mashup || false
-            }
-            _this.media = this.getCurrentMedia(_mediaopts);
-        }
-        
-        _this.draw();
-        player.trigger("widget-loaded");
-    });
-   
     /* Adding classes and html attributes */
-    this.$ = IriSP.jQuery('#' + this.container);
     this.$.addClass("Ldt-TraceMe Ldt-Widget").attr("widget-type", _type);
     
     this.l10n = (
@@ -1628,6 +1688,31 @@
         )
     );
     
+    /* Loading Metadata if required */
+    
+    if (this.metadata) {
+        /* Getting metadata */
+        this.source = player.loadMetadata(this.metadata);
+        
+        /* Call draw when loaded */
+        this.source.onLoad(function() {
+            if (_this.media_id) {
+                _this.media = this.getElement(_this.media_id);
+            } else {
+                var _mediaopts = {
+                    is_mashup: _this.is_mashup || false
+                }
+                _this.media = this.getCurrentMedia(_mediaopts);
+            }
+            
+            _this.draw();
+            player.trigger("widget-loaded");
+        });
+    } else {
+        this.draw();
+    }
+    
+    
 };
 
 IriSP.Widgets.Widget.prototype.defaults = {}
--- a/src/ldt/ldt/static/ldt/metadataplayer/Mediafragment.js	Tue Feb 12 17:29:41 2013 +0100
+++ b/src/ldt/ldt/static/ldt/metadataplayer/Mediafragment.js	Tue Feb 12 17:30:41 2013 +0100
@@ -4,9 +4,10 @@
     this.last_hash_value = "";
     window.onhashchange = this.functionWrapper("goToHash");
     if (typeof window.addEventListener !== "undefined") {
+        var _this = this;
         window.addEventListener('message', function(_msg) {
             if (/^#/.test(_msg.data)) {
-                this.setWindowHash(_msg.data);
+                _this.setWindowHash(_msg.data);
             }
         })
     };
@@ -17,16 +18,18 @@
 IriSP.Widgets.Mediafragment.prototype = new IriSP.Widgets.Widget();
 
 IriSP.Widgets.Mediafragment.prototype.draw = function() {
-    this.onMediaEvent("pause","setHashToTime");
+    this.onMediaEvent("setpause","setHashToTime");
     var _this = this;
     this.getWidgetAnnotations().forEach(function(_annotation) {
         _annotation.on("click", function() {
             _this.setHashToAnnotation(_annotation.id);
         })
     });
-    this.player.on("widgets-loaded", function() {
-        _this.goToHash();
-    });
+    if (this.media.loadedMetadata) {
+        this.goToHash();
+    } else {
+        this.onMediaEvent("loadedmetadata","goToHash");
+    }
 }
 
 IriSP.Widgets.Mediafragment.prototype.setWindowHash = function(_hash) {
--- a/src/ldt/ldt/static/ldt/metadataplayer/MultiSegments.js	Tue Feb 12 17:29:41 2013 +0100
+++ b/src/ldt/ldt/static/ldt/metadataplayer/MultiSegments.js	Tue Feb 12 17:30:41 2013 +0100
@@ -79,7 +79,8 @@
                 line.segmentWidget,
                 IriSP._({
                     type: "Segments",
-                    annotation_type: _anntype
+                    annotation_type: _anntype,
+                    width: _this.width
                 }).extend(segmentsopts)
             );
             
@@ -87,7 +88,8 @@
                 line.annotationWidget,
                 IriSP._({
                     type: "Annotation",
-                    annotation_type: _anntype
+                    annotation_type: _anntype,
+                    width: _this.width
                 }).extend(annotationopts)
             );
             
--- a/src/ldt/ldt/static/ldt/metadataplayer/Polemic.js	Tue Feb 12 17:29:41 2013 +0100
+++ b/src/ldt/ldt/static/ldt/metadataplayer/Polemic.js	Tue Feb 12 17:30:41 2013 +0100
@@ -19,7 +19,7 @@
 IriSP.Widgets.Polemic.prototype.defaults = {
     element_width : 5,
     element_height : 5,
-    max_elements : 15,
+    max_elements: 20,
     annotation_type : "tweet",
     defaultcolor : "#585858",
     foundcolor : "#fc00ff",
@@ -113,7 +113,7 @@
             
             function displayAnnotation(_elx, _ely, _pol, _col, _annotation) {
                 var _html = Mustache.to_html(
-                    '<div class="Ldt-Polemic-TweetDiv Ldt-TraceMe" trace-info="annotation-id:{{id}}, media-id={{media_id}}, polemic={{polemic}}" polemic-color="{{color}}"'
+                    '<div class="Ldt-Polemic-TweetDiv Ldt-TraceMe" trace-info="annotation-id:{{id}}, media-id:{{media_id}}, polemic:{{polemic}}, time:{{time}}" polemic-color="{{color}}"'
                     + ' tweet-title="{{title}}" annotation-id="{{id}}" style="width: {{width}}px; height: {{height}}px; top: {{top}}px; left: {{left}}px; background: {{color}}"></div>',
                 {
                     id: _annotation.id,
@@ -124,7 +124,8 @@
                     color: _col,
                     width: (_this.element_width-1),
                     height: _this.element_height,
-                    title: _annotation.title
+                    title: _annotation.title,
+                    time: _annotation.begin.toString()
                 });
                 var _el = IriSP.jQuery(_html);
                 _el.mouseover(function() {
@@ -135,12 +136,14 @@
                     _annotation.trigger("click");
                 });
                 _annotation.on("select", function() {
-                    _this.tooltip.show(
-                        Math.floor(_elx + (_this.element_width - 1) / 2),
-                        _ely,
-                        _annotation.title,
-                        _col
-                    );
+                    if (_this.tooltip) {
+                        _this.tooltip.show(
+                            + Math.floor(_elx + (_this.element_width - 1) / 2),
+                            + _ely,
+                            _annotation.title,
+                            _col
+                        );
+                    }
                     _this.$tweets.each(function() {
                         var _e = IriSP.jQuery(this);
                         _e.css(
@@ -150,7 +153,9 @@
                     });
                 });
                 _annotation.on("unselect", function() {
-                    _this.tooltip.hide();
+                    if (_this.tooltip) {
+                        _this.tooltip.hide();
+                    }
                     _this.$tweets.css("opacity",1);
                 });
                 _annotation.on("found", function() {
@@ -268,12 +273,16 @@
                     _html = '<p>' + _this.l10n.from_ + _el.attr("begin-time") + _this.l10n._to_ + _el.attr("end-time") + '</p>';
                 for (var _i = 0; _i <= _this.polemics.length; _i++) {
                     var _color = _i ? _this.polemics[_i - 1].color : _this.defaultcolor;
-                    _html += '<div class="Ldt-Tooltip-Color" style="background: ' + _color + '"></div><p>' + _nums[_i] + _this.l10n._annotations + '</p>'
+                    _html += '<div class="Ldt-Tooltip-AltColor" style="background: ' + _color + '"></div><p>' + _nums[_i] + _this.l10n._annotations + '</p>'
                 }
-                _this.tooltip.show(_el.attr("pos-x"), _el.attr("pos-y"), _html);
+                if (_this.tooltip) {
+                    _this.tooltip.show(+ _el.attr("pos-x"), + _el.attr("pos-y"), _html);
+                }
             })
             .mouseout(function() {
-                _this.tooltip.hide();
+                if (_this.tooltip) {
+                    _this.tooltip.hide();
+                }
             })
             
     }
@@ -289,7 +298,15 @@
     
     this.$.append('<div class="Ldt-Polemic-Tooltip"></div>');
     
-    this.insertSubwidget(this.$.find(".Ldt-Polemic-Tooltip"), { type: "Tooltip" }, "tooltip");
+    this.insertSubwidget(
+        this.$.find(".Ldt-Polemic-Tooltip"),
+        {
+            type: "Tooltip",
+            min_x: 0,
+            max_x: this.width
+        },
+        "tooltip"
+    );
 }
 
 IriSP.Widgets.Polemic.prototype.onTimeupdate = function(_time) {
--- a/src/ldt/ldt/static/ldt/metadataplayer/PopcornPlayer.js	Tue Feb 12 17:29:41 2013 +0100
+++ b/src/ldt/ldt/static/ldt/metadataplayer/PopcornPlayer.js	Tue Feb 12 17:30:41 2013 +0100
@@ -7,7 +7,6 @@
 /* A Popcorn-based player for HTML5 Video, Youtube and Vimeo */
 
 IriSP.Widgets.PopcornPlayer.prototype.defaults = {
-    aspect_ratio: 14/9
 }
 
 IriSP.Widgets.PopcornPlayer.prototype.draw = function() {
@@ -21,13 +20,6 @@
         this.video = this.url_transform(this.video);
     }
     
-    if (!this.height) {
-        this.height = Math.floor(this.width/this.aspect_ratio);
-        this.$.css({
-                height: this.height
-            });
-    }
-    
     if (/^(https?:\/\/)?(www\.)?vimeo\.com/.test(this.video)) {
         
         /* VIMEO */
@@ -62,7 +54,7 @@
         _videoEl.attr({
             id : _tmpId,
             width : this.width,
-            height : this.height
+            height : this.height || undefined
         });
         if(typeof this.video === "string"){
             _videoEl.attr("src",this.video);
--- a/src/ldt/ldt/static/ldt/metadataplayer/Segments.js	Tue Feb 12 17:29:41 2013 +0100
+++ b/src/ldt/ldt/static/ldt/metadataplayer/Segments.js	Tue Feb 12 17:30:41 2013 +0100
@@ -22,7 +22,7 @@
     + '<div class="Ldt-Segments-Tooltip"></div>';
 
 IriSP.Widgets.Segments.prototype.annotationTemplate =
-    '<div class="Ldt-Segments-Segment Ldt-TraceMe" trace-info="segment-id:{{id}}, media-id:{{media_id}}" segment-text="{{text}}"'
+    '<div class="Ldt-Segments-Segment Ldt-TraceMe" trace-info="segment-id:{{id}}, media-id:{{media_id}}, from:{{from}}, to:{{to}}" segment-text="{{text}}"'
     + 'style="top:{{top}}px; height:{{height}}px; left:{{left}}px; width:{{width}}px; background:{{medcolor}}" data-base-color="{{color}}" data-low-color="{{lowcolor}}" data-medium-color="{{medcolor}}"></div>'
 
 
@@ -83,7 +83,9 @@
             top: _top,
             height: _this.line_height - 1,
             id : _annotation.id,
-            media_id : _annotation.getMedia().id
+            media_id : _annotation.getMedia().id,
+            from: _annotation.begin.toString(),
+            to: _annotation.end.toString()
         };
         var _html = Mustache.to_html(_this.annotationTemplate, _data),
             _el = IriSP.jQuery(_html);
@@ -108,10 +110,14 @@
                 background: _el.hasClass("found") ? _this.found_color: color,
                 "z-index": ++zindex
             });
-            _this.tooltip.show( _center, _top, _data.text, _data.color );
+            if (_this.tooltip) {
+                _this.tooltip.show( _center, _top, _data.text, _data.color );
+            }
         });
         _annotation.on("unselect", function() {
-            _this.tooltip.hide();
+            if (_this.tooltip) {
+                _this.tooltip.hide();
+            }
             _this.$segments.each(function() {
                 var _segment = IriSP.jQuery(this);
                 _segment.css("background", _segment.hasClass("found") ? _this.found_color : _segment.attr(searching ? "data-low-color" : "data-medium-color"));
@@ -131,7 +137,15 @@
         background : this.background,
         margin: "1px 0"
     });
-    this.insertSubwidget(this.$.find(".Ldt-Segments-Tooltip"), { type: "Tooltip" }, "tooltip");
+    this.insertSubwidget(
+        this.$.find(".Ldt-Segments-Tooltip"),
+        {
+            type: "Tooltip",
+            min_x: 0,
+            max_x: this.width
+        },
+        "tooltip"
+    );
     this.$segments = this.$.find('.Ldt-Segments-Segment');
     this.source.getAnnotations().on("search", function() {
         searching = true;
--- a/src/ldt/ldt/static/ldt/metadataplayer/Slideshare.js	Tue Feb 12 17:29:41 2013 +0100
+++ b/src/ldt/ldt/static/ldt/metadataplayer/Slideshare.js	Tue Feb 12 17:30:41 2013 +0100
@@ -9,16 +9,14 @@
 IriSP.Widgets.Slideshare.prototype.defaults = {
     annotation_type: "slide",
     sync: true,
-    embed_width: 400,
-    embed_height: 300
 }
 
 IriSP.Widgets.Slideshare.prototype.messages = {
     fr: {
-        slides_ : "Diapositives&nbsp;:"
+        slides_ : "Diapositives"
     },
     en: {
-        slides_ : "Slides:"
+        slides_ : "Slides"
     }
 }
 
@@ -27,14 +25,9 @@
 
 IriSP.Widgets.Slideshare.prototype.draw = function() {
     
-    var _embedObject = null,
-        $container,
-        _lastEmbedded = "",
-        _this = this;
-    
     function insertSlideshare(_presentation, _slide) {
         if (_lastEmbedded === _presentation) {
-            if (_.embedObject && typeof _embedObject.jumpTo === "function") {
+            if (_embedObject && typeof _embedObject.jumpTo === "function") {
                 _embedObject.jumpTo(parseInt(_slide));
             }
         } else {
@@ -75,8 +68,13 @@
         var _lastPres = "",
             _embedObject = null,
             _oembedCache = {},
-            _this = this;
-        $container = this.$.find(".Ldt-SlideShare-Container");
+            _lastEmbedded = "",
+            _this = this
+            $container = this.$.find(".Ldt-SlideShare-Container");
+            
+        this.embed_width = this.embed_width || $container.innerWidth();
+        this.embed_height = this.embed_height || Math.floor(this.embed_width * 3/4);
+        
         _annotations.forEach(function(_a) {
             _a.on("leave", function() {
                 $container.hide();
--- a/src/ldt/ldt/static/ldt/metadataplayer/Tooltip.css	Tue Feb 12 17:29:41 2013 +0100
+++ b/src/ldt/ldt/static/ldt/metadataplayer/Tooltip.css	Tue Feb 12 17:30:41 2013 +0100
@@ -1,31 +1,123 @@
-/* ToolTip Widget */
+.Ldt-Tooltip {
+    position: absolute;
+    height: 0; width: 0;
+    z-index: 100000;
+}
+
+.Ldt-Tooltip-Main {
+    position: absolute; bottom: 0; left: -96px;
+}
+
+.Ldt-Tooltip-Corner-NW,
+.Ldt-Tooltip-Corner-NE,
+.Ldt-Tooltip-Corner-SW,
+.Ldt-Tooltip-Corner-SE {
+    position: absolute; width: 6px; height: 6px; background: url(img/tooltip-corners.png);
+}
+
+.Ldt-Tooltip-Corner-NW,
+.Ldt-Tooltip-Corner-SW {
+    left: 0;
+}
+
+.Ldt-Tooltip-Corner-NE,
+.Ldt-Tooltip-Corner-SE {
+    right: 0;
+}
+
+.Ldt-Tooltip-Corner-NW,
+.Ldt-Tooltip-Corner-NE {
+    top: 0;
+}
+
+.Ldt-Tooltip-Corner-SW,
+.Ldt-Tooltip-Corner-SE {
+    bottom: 10px;
+}
+
+.Ldt-Tooltip-Corner-NW {
+    background-position: top left;
+}
+
+.Ldt-Tooltip-Corner-NE {
+    background-position: top right;
+}
 
-.Ldt-Tooltip {
-  position: absolute;
-  z-index: 10000000000;
-  background: transparent url("img/white_arrow_long.png");
-  font-size: 12px;
-  padding: 15px 15px 20px;
-  color: black;
-  font-family: Arial, Helvetica, sans-serif;
-  overflow:hidden;
+.Ldt-Tooltip-Corner-SW {
+    background-position: bottom left;
+}
+
+.Ldt-Tooltip-Corner-SE {
+    background-position: bottom right;
+}
+
+.Ldt-Tooltip-Border-Top,
+.Ldt-Tooltip-Border-SW,
+.Ldt-Tooltip-Border-SE {
+    position: absolute; height: 6px; background: url(img/tooltip-h-borders.png);
+}
+
+.Ldt-Tooltip-Border-Top {
+    left: 6px; right: 6px;
+}
+
+.Ldt-Tooltip-Border-SW,
+.Ldt-Tooltip-Border-SE {
+    bottom: 10px; background-position: bottom;
+}
+
+.Ldt-Tooltip-Border-SW {
+    left: 6px;
+}
+
+.Ldt-Tooltip-Border-SE {
+    right: 6px;
+}
+
+.Ldt-Tooltip-Tip {
+    position: absolute; height: 16px; width: 22px;
+    background: url(img/tooltip-tip.png);
+    bottom: 0;
+}
+
+.Ldt-Tooltip-Border-Left,
+.Ldt-Tooltip-Border-Right {
+    position: absolute; width: 6px; background: url(img/tooltip-v-borders.png);
+    top: 6px; bottom: 16px;
+}
+
+.Ldt-Tooltip-Border-Left {
+    left: 0; background-position: left;
+}
+
+.Ldt-Tooltip-Border-Right {
+    right: 0; background-position: right;
 }
 
 .Ldt-Tooltip-Inner {
-    height: 115px;
+    min-height: 30px;
+    max-height: 140px;
     width: 180px;
     overflow: hidden;
+    margin: 6px 6px 16px;
+    background: url(img/tooltip-gradient.png) bottom;
 }
 
+
 .Ldt-Tooltip-Color {
-    float: left; margin: 2px 4px 2px 0; width: 10px; height: 10px;
+    float: left; margin: 8px 2px 2px 8px; width: 10px; height: 10px;
+}
+
+.Ldt-Tooltip-AltColor {
+    float: left; margin: 2px 2px 2px 3px; width: 10px; height: 10px;
 }
 
 .Ldt-Tooltip img {
-    max-width: 140px; max-height: 70px; margin: 0 20px;
+    max-width: 140px; max-height: 80px; margin: 2px 20px;
 }
 
 .Ldt-Tooltip p {
-    margin: 2px 0;
-  font-size: 12px;
-}
+    margin: 6px 8px;
+    font-size: 12px;
+    line-height: 14px;
+}
\ No newline at end of file
--- a/src/ldt/ldt/static/ldt/metadataplayer/Tooltip.js	Tue Feb 12 17:29:41 2013 +0100
+++ b/src/ldt/ldt/static/ldt/metadataplayer/Tooltip.js	Tue Feb 12 17:30:41 2013 +0100
@@ -5,17 +5,35 @@
 
 IriSP.Widgets.Tooltip.prototype = new IriSP.Widgets.Widget();
 
-IriSP.Widgets.Tooltip.prototype.template = '<div class="Ldt-Tooltip"><div class="Ldt-Tooltip-Inner"><div class="Ldt-Tooltip-Color"></div><div class="Ldt-Tooltip-Text"></div></div></div>';
+IriSP.Widgets.Tooltip.prototype.defaults = {
+    
+};
+
+IriSP.Widgets.Tooltip.prototype.template =
+    '<div class="Ldt-Tooltip"><div class="Ldt-Tooltip-Main"><div class="Ldt-Tooltip-Corner-NW"></div>'
+    + '<div class="Ldt-Tooltip-Border-Top"></div><div class="Ldt-Tooltip-Corner-NE"></div>'
+    + '<div class="Ldt-Tooltip-Border-Left"></div><div class="Ldt-Tooltip-Border-Right"></div>'
+    + '<div class="Ldt-Tooltip-Corner-SW"></div><div class="Ldt-Tooltip-Border-SW"></div>'
+    + '<div class="Ldt-Tooltip-Tip"></div><div class="Ldt-Tooltip-Border-SE"></div>'
+    + '<div class="Ldt-Tooltip-Corner-SE"></div><div class="Ldt-Tooltip-Inner">'
+    + '<div class="Ldt-Tooltip-Color"></div><p class="Ldt-Tooltip-Text"></p></div></div></div>';
 
 IriSP.Widgets.Tooltip.prototype.draw = function() {
     _this = this;
-    this.$.html(this.template);
+    this.renderTemplate();
     this.$.parent().css({
         "position" : "relative"
     });
-    this.$tip = this.$.find(".Ldt-Tooltip");
+    this.$tooltip = this.$.find(".Ldt-Tooltip");
+    this.$tip = this.$.find(".Ldt-Tooltip-Tip");
+    this.$sw = this.$.find(".Ldt-Tooltip-Border-SW");
+    this.$se = this.$.find(".Ldt-Tooltip-Border-SE");
+    this.__halfWidth = Math.floor(this.$.find(".Ldt-Tooltip-Main").width()/2);
+    this.__borderWidth = this.$.find(".Ldt-Tooltip-Border-Left").width();
+    this.__tipDelta = this.__halfWidth - Math.floor(this.$tip.width()/2);
+    this.__maxShift = this.__tipDelta - this.__borderWidth;
     this.$.mouseover(function() {
-        _this.$tip.hide();
+        _this.$tooltip.hide();
     });
     this.hide();
 };
@@ -30,13 +48,33 @@
 
     this.$.find(".Ldt-Tooltip-Text").html(text);
 
-    this.$tip.show();
+    this.$tooltip.show();
+    
+    var shift = 0;
+    
+    if (typeof this.min_x !== "undefined" && (x - this.__halfWidth < this.min_x)) {
+        shift = Math.max(x - this.__halfWidth - this.min_x, - this.__maxShift);
+    }
+    
+    if (typeof this.max_x !== "undefined" && (+x + this.__halfWidth > this.max_x)) {
+        shift = Math.min(+ x + this.__halfWidth - this.max_x, this.__maxShift);
+    }
+    
+    this.$tooltip.css({
+        "left" : (x - shift) + "px",
+        "top" : y + "px"
+    });
     this.$tip.css({
-        "left" : Math.floor(x - this.$tip.outerWidth() / 2) + "px",
-        "top" : Math.floor(y - this.$tip.outerHeight()) + "px"
+        "left": (this.__tipDelta + shift) + "px"
+    });
+    this.$sw.css({
+        "width": (this.__tipDelta + shift - this.__borderWidth) + "px"
+    });
+    this.$se.css({
+        "width": (this.__tipDelta - shift - this.__borderWidth) + "px"
     });
 };
 
 IriSP.Widgets.Tooltip.prototype.hide = function() {
-    this.$tip.hide();
+    this.$tooltip.hide();
 };
--- a/src/ldt/ldt/static/ldt/metadataplayer/Trace.js	Tue Feb 12 17:29:41 2013 +0100
+++ b/src/ldt/ldt/static/ldt/metadataplayer/Trace.js	Tue Feb 12 17:30:41 2013 +0100
@@ -29,6 +29,10 @@
         "play" : 0,
         "pause" : 0,
         "timeupdate" : 10000
+    },
+    _annlisteners = {
+        search: 0,
+        "search-cleared": 0
     };
     IriSP._(_medialisteners).each(function(_ms, _listener) {
         var _f = function(_arg) {
@@ -39,6 +43,16 @@
         }
         _this.media.on(_listener, _f);
     });
+    var _annotations = this.source.getAnnotations();
+    IriSP._(_annlisteners).each(function(_ms, _listener) {
+        var _f = function(_arg) {
+            _this.eventHandler(_listener, _arg);
+        }
+        if (_ms) {
+            _f = IriSP._.throttle(_f, _ms);
+        }
+        _annotations.on(_listener, _f);
+    });
     
     if (!this.tracer) {
     
@@ -51,6 +65,8 @@
     
     }
     
+    
+    
     this.tracer.trace("TraceWidgetInit", {});
     
     this.mouseLocation = '';
@@ -60,8 +76,6 @@
         var _widget = _target.attr("widget-type") || _target.parents(".Ldt-Widget").attr("widget-type"),
             _data = {
                 "type": _e.type,
-                "x": _e.clientX,
-                "y": _e.clientY,
                 "widget": _widget
             },
             _targetEl = _target[0],
--- a/src/ldt/ldt/static/ldt/metadataplayer/Tweet.js	Tue Feb 12 17:29:41 2013 +0100
+++ b/src/ldt/ldt/static/ldt/metadataplayer/Tweet.js	Tue Feb 12 17:30:41 2013 +0100
@@ -6,7 +6,7 @@
 IriSP.Widgets.Tweet.prototype = new IriSP.Widgets.Widget();
 
 IriSP.Widgets.Tweet.prototype.defaults = {
-    hide_timeout: 5000,
+    hide_timeout: 10000,
     polemics : [
         {
             "keywords" : [ "++" ],
@@ -93,87 +93,51 @@
 
 IriSP.Widgets.Tweet.prototype.show = function(_tweet) {
     if (typeof _tweet !== "undefined" && typeof _tweet.source !== "undefined") {
-        var _entities = [];
-        for (var _i = 0; _i < _tweet.source.entities.hashtags.length; _i++) {
-            var _hash = _tweet.source.entities.hashtags[_i];
-            _entities.push({
-                is_link: true,
-                text: '#' + _hash.text,
-                url: 'http://twitter.com/search?q=%23' + encodeURIComponent(_hash.text),
-                indices: _hash.indices
-            });
-        }
-        for (var _i = 0; _i < _tweet.source.entities.urls.length; _i++) {
-            var _url = _tweet.source.entities.urls[_i],
-                _displayurl = (typeof _url.display_url !== "undefined" && _url.display_url !== null ? _url.display_url : _url.url),
-                _linkurl = (typeof _url.expanded_url !== "undefined" && _url.expanded_url !== null ? _url.expanded_url : _url.url);
-            _displayurl = _displayurl.replace(/^\w+:\/\//,'');
-            if (!/^\w+:\/\//.test(_linkurl)) {
-                _linkurl = 'http://' + _linkurl;
-            }
-            _entities.push({
-                is_link: true,
-                text: _displayurl,
-                url: _linkurl,
-                indices: _url.indices
-            });
-        }
-        for (var _i = 0; _i < _tweet.source.entities.user_mentions.length; _i++) {
-            var _user = _tweet.source.entities.user_mentions[_i];
-            _entities.push({
-                is_link: true,
-                text: '@' + _user.screen_name,
-                url: 'http://twitter.com/' + encodeURIComponent(_user.screen_name),
-                indices: _user.indices
-            });
-        }
-        for (var _i = 0; _i < this.polemics.length; _i++) {
-            for (var _j = 0; _j < this.polemics[_i].keywords.length; _j++) {
-                var _p = _tweet.source.text.indexOf(this.polemics[_i].keywords[_j]);
-                while (_p !== -1) {
-                    var _end = (_p + this.polemics[_i].keywords[_j].length);
-                    _entities.push({
-                        is_link: false,
-                        text: this.polemics[_i].keywords[_j],
-                        color: this.polemics[_i].color,
-                        indices: [_p, _end]
-                    });
-                    _p = _tweet.source.text.indexOf(this.polemics[_i].keywords[_j], _end);
-                }
-            }
-        }
-        _entities = IriSP._(_entities).sortBy(function(_entity) {
+        var extend = [
+            [
+                /#(\w+)/gm,
+                function(matches) {
+                    return '<a href="http://twitter.com/search?q=%23' + matches[1] + '" target="_blank">'
+                },
+                '</a>'
+            ]
+        ];
+        var _urls = IriSP._(_tweet.source.entities.urls).sortBy(function(_entity) {
             return _entity.indices[0];
         });
+        
         var _currentPos = 0,
             _txt = '';
-        for (var _i = 0; _i < _entities.length; _i++) {
-            if (_entities[_i].indices[0] >= _currentPos) {
-                _txt += _tweet.source.text.substring(_currentPos, _entities[_i].indices[0]);
-                _currentPos = _entities[_i].indices[1];
-                if (_entities[_i].is_link) {
-                    _txt += '<a href="' + _entities[_i].url + '" target="_blank">';
-                } else {
-                    _txt += '<span style="background:' + _entities[_i].color + '">';
-                }
-                _txt += _entities[_i].text;
-                if (_entities[_i].is_link) {
-                    _txt += '</a>';
-                } else {
-                    _txt += '</span>';
-                }
+        IriSP._(_urls).each(function(_url) {
+            if (_url.indices[0] >= _currentPos) {
+                _txt += _tweet.source.text.substring(_currentPos, _url.indices[0]);
+                _txt += (typeof _url.expanded_url !== "undefined" && _url.expanded_url !== null ? _url.expanded_url : _url.url);
+                _currentPos = _url.indices[1];
             }
-        }
+        });
         _txt += _tweet.source.text.substring(_currentPos);
-        this.$.find(".Ldt-Tweet-Avatar").attr("src",_tweet.source.user.profile_image_url);
-        this.$.find(".Ldt-Tweet-ScreenName").html('@'+_tweet.source.user.screen_name);
-        this.$.find(".Ldt-Tweet-ProfileLink").attr("href", "https://twitter.com/" + _tweet.source.user.screen_name);
-        this.$.find(".Ldt-Tweet-FullName").html(_tweet.source.user.name);
-        this.$.find(".Ldt-Tweet-Contents").html(_txt);
+        
+        for (var _i = 0; _i < this.polemics.length; _i++) {
+            var rx = IriSP.Model.regexpFromTextOrArray(this.polemics[_i].keywords);
+            extend.push([
+                rx,
+                '<span style="background: ' + this.polemics[_i].color + '">',
+                '</span>'
+            ]);
+        }
+        var rx = (_tweet.found ? (_this.source.getAnnotations().regexp || false) : false),
+            profile_url = _tweet.source.user ? _tweet.source.user.profile_image_url : _tweet.source.profile_image_url,
+            screen_name = _tweet.source.user ? _tweet.source.user.screen_name :_tweet.source.from_user,
+            user_name = _tweet.source.user ? _tweet.source.user.name :_tweet.source.from_user_name;
+        this.$.find(".Ldt-Tweet-Avatar").attr("src", profile_url);
+        this.$.find(".Ldt-Tweet-ScreenName").html('@' + screen_name);
+        this.$.find(".Ldt-Tweet-ProfileLink").attr("href", "https://twitter.com/" + screen_name);
+        this.$.find(".Ldt-Tweet-FullName").html(user_name);
+        this.$.find(".Ldt-Tweet-Contents").html(IriSP.textFieldHtml(_txt, rx, extend));
         this.$.find(".Ldt-Tweet-Time").html(this.l10n.original_time + new Date(_tweet.source.created_at).toLocaleTimeString() + " / " + this.l10n.video_time + _tweet.begin.toString());
         this.$.find(".Ldt-Tweet-Retweet").attr("href", "https://twitter.com/intent/retweet?tweet_id=" + _tweet.source.id_str);
         this.$.find(".Ldt-Tweet-Reply").attr("href", "https://twitter.com/intent/tweet?in_reply_to=" + _tweet.source.id_str);
-        this.$.find(".Ldt-Tweet-Original").attr("href", "https://twitter.com/" + _tweet.source.user.screen_name + "/status/" + _tweet.source.id_str);
+        this.$.find(".Ldt-Tweet-Original").attr("href", "https://twitter.com/" + screen_name + "/status/" + _tweet.source.id_str);
         this.player.trigger("Annotation.minimize");
         this.$.slideDown();
         this.cancelTimeout();
Binary file src/ldt/ldt/static/ldt/metadataplayer/img/tooltip-corners.png has changed
Binary file src/ldt/ldt/static/ldt/metadataplayer/img/tooltip-gradient.png has changed
Binary file src/ldt/ldt/static/ldt/metadataplayer/img/tooltip-h-borders.png has changed
Binary file src/ldt/ldt/static/ldt/metadataplayer/img/tooltip-tip.png has changed
Binary file src/ldt/ldt/static/ldt/metadataplayer/img/tooltip-v-borders.png has changed
Binary file src/ldt/ldt/static/ldt/swf/ldt/LignesDeTempsFlex.swf has changed
--- a/src/ldt/ldt/user/admin.py	Tue Feb 12 17:29:41 2013 +0100
+++ b/src/ldt/ldt/user/admin.py	Tue Feb 12 17:30:41 2013 +0100
@@ -6,6 +6,9 @@
 from forms import LdtForm
 from guardian.admin import GuardedModelAdmin
 from models import Ldt, UserProfile, GroupProfile
+from tastypie.admin import ApiKeyInline
+from tastypie.models import ApiAccess, ApiKey
+
 
 class GroupProfileInline(admin.StackedInline):
     model = GroupProfile
@@ -38,7 +41,7 @@
     form = LdtForm
     model = Ldt
     filter_horizontal = ('user_permissions',)
-    inlines = [UserProfileInline, ]
+    inlines = [UserProfileInline, ApiKeyInline]
     
     def get_fieldsets(self, request, obj=None): 
         fieldsets = deepcopy(self.fieldsets)
@@ -58,5 +61,8 @@
 admin.site.unregister(Ldt) 
 admin.site.register(Ldt, LdtAdmin)
 
+admin.site.register(ApiKey)
+admin.site.register(ApiAccess)
+
 admin.site.unregister(User)
 admin.site.register(User, UserProfileAdmin)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/ldt/ldt/utils/projectldt_parser.py	Tue Feb 12 17:30:41 2013 +0100
@@ -0,0 +1,40 @@
+from ldt.utils.url import absolute_media_url, is_absolute
+from ldt.ldt_utils.models import Content
+
+def absolute_src_xml(doc):
+    media_list = doc.xpath("/iri/medias/media")
+    for element in media_list:
+        src = element.get("src") #we split to hate two parts, one with the src
+        if not is_absolute(src):
+            new_src = absolute_media_url()+src
+            element.set('src', new_src) #we replace the old value by the new one
+    return doc
+
+def relative_src_xml(ldt):
+    modif = False
+    no_more_media=False
+    media_list = ldt.xpath("/iri/medias/media")
+    if len(media_list) == 0 :
+        no_more_media = True
+    if not no_more_media :
+        for element in media_list:
+            src = element.get("src")
+            id_content=element.get("id")
+            content_list = Content.objects.filter(iri_id=id_content)
+            if len(content_list) == 0:
+                element.getparent().remove(element)
+                modif = True
+                for content_elem in ldt.xpath("/iri/annotations/content[@id=\"%s\"]" % id_content):
+                    content_elem.getparent().remove(content_elem)
+                media_list = ldt.xpath("/iri/medias/media")
+                if len(media_list) == 0 :
+                    no_more_media =  True
+            else:
+                content = content_list[0]
+                right_src = content.relative_iri_url()
+                if not src == right_src: #we will modify only the project that have an absolute url
+                    modif = True
+                    new_src = right_src
+                    element.set('src', new_src) #we replace the old value by the new one
+
+    return ldt, modif, no_more_media
\ No newline at end of file
--- a/src/ldt/ldt/utils/url.py	Tue Feb 12 17:29:41 2013 +0100
+++ b/src/ldt/ldt/utils/url.py	Tue Feb 12 17:30:41 2013 +0100
@@ -2,15 +2,22 @@
 from django.core.urlresolvers import reverse
 from ldt.utils.web_url_management import get_web_url
 from ldt import settings
+from django.conf import settings as djangosettings
 import httplib2
 import re
 import urlparse
+import logging
 
 def absstatic(request, path):
     domain=get_web_url(request)
     new_path = staticfiles_storage.url(path)
     return urlparse.urljoin(domain, new_path)
 
+def absolute_media_url():
+    domain=get_web_url()
+    
+    return urlparse.urljoin(domain, djangosettings.MEDIA_URL)
+
 def absurl(request, viewname, urlconf=None, args=None, kwargs=None, prefix=None, current_app=None):
     domain=get_web_url(request)
     path=reverse(viewname, urlconf, args, kwargs, prefix, current_app)