web/LdtPlayer-release.js
author ymh <ymh.work@gmail.com>
Mon, 19 Dec 2011 18:41:01 +0100
changeset 30 de2d85dbe708
parent 29 5d56138abe95
permissions -rw-r--r--
Added tag V00.02 for changeset 5d56138abe95
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
     1
/* 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
     2
 * 	
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
     3
 *	Copyright 2010 Institut de recherche et d'innovation 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
     4
 *	contributor(s) : Samuel Huron 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
     5
 *	 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
     6
 *	contact@iri.centrepompidou.fr
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
     7
 *	http://www.iri.centrepompidou.fr 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
     8
 *	 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
     9
 *	This software is a computer program whose purpose is to show and add annotations on a video .
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    10
 *	This software is governed by the CeCILL-C license under French law and
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    11
 *	abiding by the rules of distribution of free software. You can  use, 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    12
 *	modify and/ or redistribute the software under the terms of the CeCILL-C
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    13
 *	license as circulated by CEA, CNRS and INRIA at the following URL
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    14
 *	"http://www.cecill.info". 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    15
 *	
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    16
 *	The fact that you are presently reading this means that you have had
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    17
 *	knowledge of the CeCILL-C license and that you accept its terms.
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    18
*/
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    19
(function(global, document) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    20
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    21
  // Popcorn.js does not support archaic browsers
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    22
  if ( !document.addEventListener ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    23
    global.Popcorn = {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    24
      isSupported: false
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    25
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    26
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    27
    var methods = ( "forEach extend effects error guid sizeOf isArray nop position disable enable destroy " +
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    28
          "addTrackEvent removeTrackEvent getTrackEvents getTrackEvent getLastTrackEventId " +
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    29
          "timeUpdate plugin removePlugin compose effect parser xhr getJSONP getScript" ).split(/\s+/);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    30
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    31
    while ( methods.length ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    32
      global.Popcorn[ methods.shift() ] = function() {};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    33
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    34
    return;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    35
  }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    36
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    37
  var
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    38
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    39
  AP = Array.prototype,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    40
  OP = Object.prototype,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    41
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    42
  forEach = AP.forEach,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    43
  slice = AP.slice,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    44
  hasOwn = OP.hasOwnProperty,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    45
  toString = OP.toString,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    46
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    47
  // Copy global Popcorn (may not exist)
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    48
  _Popcorn = global.Popcorn,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    49
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    50
  //  ID string matching
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    51
  rIdExp  = /^(#([\w\-\_\.]+))$/,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    52
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    53
  //  Ready fn cache
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    54
  readyStack = [],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    55
  readyBound = false,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    56
  readyFired = false,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    57
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    58
  //  Non-public internal data object
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    59
  internal = {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    60
    events: {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    61
      hash: {},
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    62
      apis: {}
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    63
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    64
  },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    65
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    66
  //  Non-public `requestAnimFrame`
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    67
  //  http://paulirish.com/2011/requestanimationframe-for-smart-animating/
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    68
  requestAnimFrame = (function(){
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    69
    return global.requestAnimationFrame ||
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    70
      global.webkitRequestAnimationFrame ||
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    71
      global.mozRequestAnimationFrame ||
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    72
      global.oRequestAnimationFrame ||
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    73
      global.msRequestAnimationFrame ||
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    74
      function( callback, element ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    75
        global.setTimeout( callback, 16 );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    76
      };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    77
  }()),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    78
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    79
  refresh = function( obj ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    80
    var currentTime = obj.media.currentTime,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    81
      animation = obj.options.frameAnimation,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    82
      disabled = obj.data.disabled,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    83
      tracks = obj.data.trackEvents,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    84
      animating = tracks.animating,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    85
      start = tracks.startIndex,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    86
      registryByName = Popcorn.registryByName,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    87
      animIndex = 0,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    88
      byStart, natives, type;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    89
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    90
    start = Math.min( start + 1, tracks.byStart.length - 2 );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    91
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    92
    while ( start > 0 && tracks.byStart[ start ] ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    93
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    94
      byStart = tracks.byStart[ start ];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    95
      natives = byStart._natives;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    96
      type = natives && natives.type;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    97
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    98
      if ( !natives ||
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
    99
          ( !!registryByName[ type ] || !!obj[ type ] ) ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   100
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   101
        if ( ( byStart.start <= currentTime && byStart.end > currentTime ) &&
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   102
                disabled.indexOf( type ) === -1 ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   103
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   104
          if ( !byStart._running ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   105
            byStart._running = true;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   106
            natives.start.call( obj, null, byStart );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   107
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   108
            // if the 'frameAnimation' option is used,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   109
            // push the current byStart object into the `animating` cue
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   110
            if ( animation &&
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   111
                ( byStart && byStart._running && byStart.natives.frame ) ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   112
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   113
              natives.frame.call( obj, null, byStart, currentTime );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   114
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   115
          }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   116
        } else if ( byStart._running === true ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   117
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   118
          byStart._running = false;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   119
          natives.end.call( obj, null, byStart );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   120
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   121
          if ( animation && byStart._natives.frame ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   122
            animIndex = animating.indexOf( byStart );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   123
            if ( animIndex >= 0 ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   124
              animating.splice( animIndex, 1 );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   125
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   126
          }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   127
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   128
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   129
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   130
      start--;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   131
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   132
  },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   133
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   134
  //  Declare constructor
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   135
  //  Returns an instance object.
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   136
  Popcorn = function( entity, options ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   137
    //  Return new Popcorn object
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   138
    return new Popcorn.p.init( entity, options || null );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   139
  };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   140
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   141
  //  Popcorn API version, automatically inserted via build system.
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   142
  Popcorn.version = "@VERSION";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   143
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   144
  //  Boolean flag allowing a client to determine if Popcorn can be supported
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   145
  Popcorn.isSupported = true;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   146
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   147
  //  Instance caching
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   148
  Popcorn.instances = [];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   149
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   150
  //  Declare a shortcut (Popcorn.p) to and a definition of
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   151
  //  the new prototype for our Popcorn constructor
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   152
  Popcorn.p = Popcorn.prototype = {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   153
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   154
    init: function( entity, options ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   155
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   156
      var matches;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   157
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   158
      //  Supports Popcorn(function () { /../ })
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   159
      //  Originally proposed by Daniel Brooks
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   160
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   161
      if ( typeof entity === "function" ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   162
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   163
        //  If document ready has already fired
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   164
        if ( document.readyState === "interactive" || document.readyState === "complete" ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   165
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   166
          entity( document, Popcorn );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   167
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   168
          return;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   169
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   170
        //  Add `entity` fn to ready stack
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   171
        readyStack.push( entity );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   172
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   173
        //  This process should happen once per page load
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   174
        if ( !readyBound ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   175
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   176
          //  set readyBound flag
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   177
          readyBound = true;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   178
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   179
          var DOMContentLoaded  = function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   180
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   181
            readyFired = true;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   182
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   183
            //  Remove global DOM ready listener
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   184
            document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   185
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   186
            //  Execute all ready function in the stack
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   187
            for ( var i = 0, readyStackLength = readyStack.length; i < readyStackLength; i++ ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   188
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   189
              readyStack[ i ].call( document, Popcorn );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   190
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   191
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   192
            //  GC readyStack
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   193
            readyStack = null;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   194
          };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   195
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   196
          //  Register global DOM ready listener
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   197
          document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   198
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   199
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   200
        return;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   201
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   202
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   203
      //  Check if entity is a valid string id
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   204
      matches = rIdExp.exec( entity );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   205
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   206
      //  Get media element by id or object reference
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   207
      this.media = matches && matches.length && matches[ 2 ] ?
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   208
                     document.getElementById( matches[ 2 ] ) :
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   209
                     entity;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   210
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   211
      //  Create an audio or video element property reference
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   212
      this[ ( this.media.nodeName && this.media.nodeName.toLowerCase() ) || "video" ] = this.media;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   213
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   214
      //  Register new instance
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   215
      Popcorn.instances.push( this );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   216
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   217
      this.options = options || {};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   218
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   219
      this.isDestroyed = false;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   220
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   221
      this.data = {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   222
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   223
        // Executed by either timeupdate event or in rAF loop
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   224
        timeUpdate: Popcorn.nop,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   225
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   226
        // Allows disabling a plugin per instance
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   227
        disabled: [],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   228
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   229
        // Stores DOM event queues by type
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   230
        events: {},
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   231
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   232
        // Stores Special event hooks data
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   233
        hooks: {},
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   234
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   235
        // Store track event history data
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   236
        history: [],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   237
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   238
        // Stores ad-hoc state related data]
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   239
        state: {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   240
          volume: this.media.volume
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   241
        },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   242
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   243
        // Store track event object references by trackId
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   244
        trackRefs: {},
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   245
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   246
        // Playback track event queues
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   247
        trackEvents: {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   248
          byStart: [{
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   249
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   250
            start: -1,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   251
            end: -1
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   252
          }],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   253
          byEnd: [{
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   254
            start: -1,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   255
            end: -1
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   256
          }],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   257
          animating: [],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   258
          startIndex: 0,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   259
          endIndex: 0,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   260
          previousUpdateTime: -1
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   261
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   262
      };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   263
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   264
      //  Wrap true ready check
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   265
      var isReady = function( that ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   266
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   267
        var duration, videoDurationPlus;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   268
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   269
        if ( that.media.readyState >= 2 ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   270
          //  Adding padding to the front and end of the arrays
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   271
          //  this is so we do not fall off either end
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   272
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   273
          duration = that.media.duration;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   274
          //  Check for no duration info (NaN)
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   275
          videoDurationPlus = duration != duration ? Number.MAX_VALUE : duration + 1;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   276
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   277
          Popcorn.addTrackEvent( that, {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   278
            start: videoDurationPlus,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   279
            end: videoDurationPlus
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   280
          });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   281
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   282
          if ( that.options.frameAnimation ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   283
            //  if Popcorn is created with frameAnimation option set to true,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   284
            //  requestAnimFrame is used instead of "timeupdate" media event.
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   285
            //  This is for greater frame time accuracy, theoretically up to
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   286
            //  60 frames per second as opposed to ~4 ( ~every 15-250ms)
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   287
            that.data.timeUpdate = function () {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   288
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   289
              Popcorn.timeUpdate( that, {} );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   290
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   291
              that.trigger( "timeupdate" );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   292
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   293
              !that.isDestroyed && requestAnimFrame( that.data.timeUpdate );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   294
            };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   295
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   296
            !that.isDestroyed && requestAnimFrame( that.data.timeUpdate );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   297
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   298
          } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   299
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   300
            that.data.timeUpdate = function( event ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   301
              Popcorn.timeUpdate( that, event );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   302
            };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   303
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   304
            if ( !that.isDestroyed ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   305
              that.media.addEventListener( "timeupdate", that.data.timeUpdate, false );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   306
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   307
          }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   308
        } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   309
          global.setTimeout(function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   310
            isReady( that );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   311
          }, 1 );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   312
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   313
      };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   314
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   315
      isReady( this );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   316
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   317
      return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   318
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   319
  };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   320
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   321
  //  Extend constructor prototype to instance prototype
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   322
  //  Allows chaining methods to instances
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   323
  Popcorn.p.init.prototype = Popcorn.p;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   324
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   325
  Popcorn.forEach = function( obj, fn, context ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   326
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   327
    if ( !obj || !fn ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   328
      return {};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   329
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   330
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   331
    context = context || this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   332
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   333
    var key, len;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   334
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   335
    // Use native whenever possible
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   336
    if ( forEach && obj.forEach === forEach ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   337
      return obj.forEach( fn, context );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   338
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   339
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   340
    if ( toString.call( obj ) === "[object NodeList]" ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   341
      for ( key = 0, len = obj.length; key < len; key++ ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   342
        fn.call( context, obj[ key ], key, obj );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   343
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   344
      return obj;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   345
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   346
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   347
    for ( key in obj ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   348
      if ( hasOwn.call( obj, key ) ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   349
        fn.call( context, obj[ key ], key, obj );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   350
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   351
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   352
    return obj;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   353
  };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   354
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   355
  Popcorn.extend = function( obj ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   356
    var dest = obj, src = slice.call( arguments, 1 );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   357
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   358
    Popcorn.forEach( src, function( copy ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   359
      for ( var prop in copy ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   360
        dest[ prop ] = copy[ prop ];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   361
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   362
    });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   363
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   364
    return dest;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   365
  };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   366
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   367
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   368
  // A Few reusable utils, memoized onto Popcorn
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   369
  Popcorn.extend( Popcorn, {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   370
    noConflict: function( deep ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   371
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   372
      if ( deep ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   373
        global.Popcorn = _Popcorn;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   374
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   375
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   376
      return Popcorn;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   377
    },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   378
    error: function( msg ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   379
      throw new Error( msg );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   380
    },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   381
    guid: function( prefix ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   382
      Popcorn.guid.counter++;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   383
      return  ( prefix ? prefix : "" ) + ( +new Date() + Popcorn.guid.counter );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   384
    },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   385
    sizeOf: function( obj ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   386
      var size = 0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   387
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   388
      for ( var prop in obj ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   389
        size++;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   390
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   391
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   392
      return size;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   393
    },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   394
    isArray: Array.isArray || function( array ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   395
      return toString.call( array ) === "[object Array]";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   396
    },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   397
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   398
    nop: function() {},
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   399
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   400
    position: function( elem ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   401
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   402
      var clientRect = elem.getBoundingClientRect(),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   403
          bounds = {},
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   404
          doc = elem.ownerDocument,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   405
          docElem = document.documentElement,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   406
          body = document.body,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   407
          clientTop, clientLeft, scrollTop, scrollLeft, top, left;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   408
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   409
      //  Determine correct clientTop/Left
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   410
      clientTop = docElem.clientTop || body.clientTop || 0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   411
      clientLeft = docElem.clientLeft || body.clientLeft || 0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   412
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   413
      //  Determine correct scrollTop/Left
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   414
      scrollTop = ( global.pageYOffset && docElem.scrollTop || body.scrollTop );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   415
      scrollLeft = ( global.pageXOffset && docElem.scrollLeft || body.scrollLeft );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   416
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   417
      //  Temp top/left
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   418
      top = Math.ceil( clientRect.top + scrollTop - clientTop );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   419
      left = Math.ceil( clientRect.left + scrollLeft - clientLeft );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   420
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   421
      for ( var p in clientRect ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   422
        bounds[ p ] = Math.round( clientRect[ p ] );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   423
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   424
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   425
      return Popcorn.extend({}, bounds, { top: top, left: left });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   426
    },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   427
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   428
    disable: function( instance, plugin ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   429
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   430
      var disabled = instance.data.disabled;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   431
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   432
      if ( disabled.indexOf( plugin ) === -1 ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   433
        disabled.push( plugin );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   434
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   435
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   436
      refresh( instance );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   437
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   438
      return instance;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   439
    },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   440
    enable: function( instance, plugin ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   441
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   442
      var disabled = instance.data.disabled,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   443
          index = disabled.indexOf( plugin );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   444
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   445
      if ( index > -1 ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   446
        disabled.splice( index, 1 );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   447
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   448
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   449
      refresh( instance );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   450
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   451
      return instance;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   452
    },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   453
    destroy: function( instance ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   454
      var events = instance.data.events,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   455
          singleEvent, item, fn;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   456
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   457
      //  Iterate through all events and remove them
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   458
      for ( item in events ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   459
        singleEvent = events[ item ];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   460
        for ( fn in singleEvent ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   461
          delete singleEvent[ fn ];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   462
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   463
        events[ item ] = null;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   464
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   465
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   466
      if ( !instance.isDestroyed ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   467
        instance.data.timeUpdate && instance.media.removeEventListener( "timeupdate", instance.data.timeUpdate, false );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   468
        instance.isDestroyed = true;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   469
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   470
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   471
  });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   472
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   473
  //  Memoized GUID Counter
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   474
  Popcorn.guid.counter = 1;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   475
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   476
  //  Factory to implement getters, setters and controllers
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   477
  //  as Popcorn instance methods. The IIFE will create and return
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   478
  //  an object with defined methods
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   479
  Popcorn.extend(Popcorn.p, (function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   480
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   481
      var methods = "load play pause currentTime playbackRate volume duration preload playbackRate " +
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   482
                    "autoplay loop controls muted buffered readyState seeking paused played seekable ended",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   483
          ret = {};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   484
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   485
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   486
      //  Build methods, store in object that is returned and passed to extend
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   487
      Popcorn.forEach( methods.split( /\s+/g ), function( name ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   488
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   489
        ret[ name ] = function( arg ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   490
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   491
          if ( typeof this.media[ name ] === "function" ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   492
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   493
            // Support for shorthanded play(n)/pause(n) jump to currentTime
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   494
            // If arg is not null or undefined and called by one of the
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   495
            // allowed shorthandable methods, then set the currentTime
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   496
            // Supports time as seconds or SMPTE
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   497
            if ( arg != null && /play|pause/.test( name ) ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   498
              this.media.currentTime = Popcorn.util.toSeconds( arg );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   499
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   500
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   501
            this.media[ name ]();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   502
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   503
            return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   504
          }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   505
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   506
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   507
          if ( arg != null ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   508
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   509
            this.media[ name ] = arg;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   510
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   511
            return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   512
          }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   513
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   514
          return this.media[ name ];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   515
        };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   516
      });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   517
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   518
      return ret;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   519
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   520
    })()
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   521
  );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   522
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   523
  Popcorn.forEach( "enable disable".split(" "), function( method ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   524
    Popcorn.p[ method ] = function( plugin ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   525
      return Popcorn[ method ]( this, plugin );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   526
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   527
  });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   528
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   529
  Popcorn.extend(Popcorn.p, {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   530
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   531
    //  Rounded currentTime
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   532
    roundTime: function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   533
      return -~this.media.currentTime;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   534
    },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   535
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   536
    //  Attach an event to a single point in time
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   537
    exec: function( time, fn ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   538
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   539
      //  Creating a one second track event with an empty end
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   540
      Popcorn.addTrackEvent( this, {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   541
        start: time,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   542
        end: time + 1,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   543
        _running: false,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   544
        _natives: {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   545
          start: fn || Popcorn.nop,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   546
          end: Popcorn.nop,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   547
          type: "exec"
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   548
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   549
      });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   550
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   551
      return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   552
    },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   553
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   554
    // Mute the calling media, optionally toggle
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   555
    mute: function( toggle ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   556
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   557
      var event = toggle == null || toggle === true ? "muted" : "unmuted";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   558
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   559
      // If `toggle` is explicitly `false`,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   560
      // unmute the media and restore the volume level
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   561
      if ( event === "unmuted" ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   562
        this.media.muted = false;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   563
        this.media.volume = this.data.state.volume;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   564
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   565
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   566
      // If `toggle` is either null or undefined,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   567
      // save the current volume and mute the media element
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   568
      if ( event === "muted" ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   569
        this.data.state.volume = this.media.volume;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   570
        this.media.muted = true;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   571
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   572
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   573
      // Trigger either muted|unmuted event
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   574
      this.trigger( event );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   575
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   576
      return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   577
    },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   578
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   579
    // Convenience method, unmute the calling media
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   580
    unmute: function( toggle ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   581
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   582
      return this.mute( toggle == null ? false : !toggle );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   583
    },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   584
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   585
    // Get the client bounding box of an instance element
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   586
    position: function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   587
      return Popcorn.position( this.media );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   588
    },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   589
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   590
    // Toggle a plugin's playback behaviour (on or off) per instance
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   591
    toggle: function( plugin ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   592
      return Popcorn[ this.data.disabled.indexOf( plugin ) > -1 ? "enable" : "disable" ]( this, plugin );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   593
    },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   594
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   595
    // Set default values for plugin options objects per instance
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   596
    defaults: function( plugin, defaults ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   597
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   598
      // If an array of default configurations is provided,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   599
      // iterate and apply each to this instance
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   600
      if ( Popcorn.isArray( plugin ) ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   601
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   602
        Popcorn.forEach( plugin, function( obj ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   603
          for ( var name in obj ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   604
            this.defaults( name, obj[ name ] );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   605
          }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   606
        }, this );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   607
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   608
        return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   609
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   610
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   611
      if ( !this.options.defaults ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   612
        this.options.defaults = {};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   613
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   614
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   615
      if ( !this.options.defaults[ plugin ] ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   616
        this.options.defaults[ plugin ] = {};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   617
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   618
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   619
      Popcorn.extend( this.options.defaults[ plugin ], defaults );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   620
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   621
      return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   622
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   623
  });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   624
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   625
  Popcorn.Events  = {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   626
    UIEvents: "blur focus focusin focusout load resize scroll unload",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   627
    MouseEvents: "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave click dblclick",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   628
    Events: "loadstart progress suspend emptied stalled play pause " +
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   629
            "loadedmetadata loadeddata waiting playing canplay canplaythrough " +
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   630
            "seeking seeked timeupdate ended ratechange durationchange volumechange"
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   631
  };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   632
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   633
  Popcorn.Events.Natives = Popcorn.Events.UIEvents + " " +
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   634
                           Popcorn.Events.MouseEvents + " " +
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   635
                           Popcorn.Events.Events;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   636
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   637
  internal.events.apiTypes = [ "UIEvents", "MouseEvents", "Events" ];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   638
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   639
  // Privately compile events table at load time
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   640
  (function( events, data ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   641
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   642
    var apis = internal.events.apiTypes,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   643
    eventsList = events.Natives.split( /\s+/g ),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   644
    idx = 0, len = eventsList.length, prop;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   645
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   646
    for( ; idx < len; idx++ ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   647
      data.hash[ eventsList[idx] ] = true;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   648
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   649
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   650
    apis.forEach(function( val, idx ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   651
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   652
      data.apis[ val ] = {};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   653
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   654
      var apiEvents = events[ val ].split( /\s+/g ),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   655
      len = apiEvents.length,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   656
      k = 0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   657
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   658
      for ( ; k < len; k++ ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   659
        data.apis[ val ][ apiEvents[ k ] ] = true;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   660
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   661
    });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   662
  })( Popcorn.Events, internal.events );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   663
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   664
  Popcorn.events = {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   665
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   666
    isNative: function( type ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   667
      return !!internal.events.hash[ type ];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   668
    },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   669
    getInterface: function( type ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   670
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   671
      if ( !Popcorn.events.isNative( type ) ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   672
        return false;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   673
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   674
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   675
      var eventApi = internal.events,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   676
        apis = eventApi.apiTypes,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   677
        apihash = eventApi.apis,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   678
        idx = 0, len = apis.length, api, tmp;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   679
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   680
      for ( ; idx < len; idx++ ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   681
        tmp = apis[ idx ];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   682
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   683
        if ( apihash[ tmp ][ type ] ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   684
          api = tmp;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   685
          break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   686
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   687
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   688
      return api;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   689
    },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   690
    //  Compile all native events to single array
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   691
    all: Popcorn.Events.Natives.split( /\s+/g ),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   692
    //  Defines all Event handling static functions
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   693
    fn: {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   694
      trigger: function( type, data ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   695
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   696
        var eventInterface, evt;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   697
        //  setup checks for custom event system
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   698
        if ( this.data.events[ type ] && Popcorn.sizeOf( this.data.events[ type ] ) ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   699
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   700
          eventInterface  = Popcorn.events.getInterface( type );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   701
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   702
          if ( eventInterface ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   703
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   704
            evt = document.createEvent( eventInterface );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   705
            evt.initEvent( type, true, true, global, 1 );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   706
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   707
            this.media.dispatchEvent( evt );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   708
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   709
            return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   710
          }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   711
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   712
          //  Custom events
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   713
          Popcorn.forEach( this.data.events[ type ], function( obj, key ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   714
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   715
            obj.call( this, data );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   716
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   717
          }, this );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   718
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   719
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   720
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   721
        return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   722
      },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   723
      listen: function( type, fn ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   724
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   725
        var self = this,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   726
            hasEvents = true,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   727
            eventHook = Popcorn.events.hooks[ type ],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   728
            origType = type,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   729
            tmp;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   730
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   731
        if ( !this.data.events[ type ] ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   732
          this.data.events[ type ] = {};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   733
          hasEvents = false;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   734
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   735
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   736
        // Check and setup event hooks
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   737
        if ( eventHook ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   738
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   739
          // Execute hook add method if defined
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   740
          if ( eventHook.add ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   741
            eventHook.add.call( this, {}, fn );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   742
          }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   743
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   744
          // Reassign event type to our piggyback event type if defined
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   745
          if ( eventHook.bind ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   746
            type = eventHook.bind;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   747
          }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   748
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   749
          // Reassign handler if defined
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   750
          if ( eventHook.handler ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   751
            tmp = fn;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   752
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   753
            fn = function wrapper( event ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   754
              eventHook.handler.call( self, event, tmp );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   755
            };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   756
          }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   757
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   758
          // assume the piggy back event is registered
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   759
          hasEvents = true;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   760
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   761
          // Setup event registry entry
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   762
          if ( !this.data.events[ type ] ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   763
            this.data.events[ type ] = {};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   764
            // Toggle if the previous assumption was untrue
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   765
            hasEvents = false;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   766
          }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   767
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   768
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   769
        //  Register event and handler
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   770
        this.data.events[ type ][ fn.name || ( fn.toString() + Popcorn.guid() ) ] = fn;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   771
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   772
        // only attach one event of any type
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   773
        if ( !hasEvents && Popcorn.events.all.indexOf( type ) > -1 ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   774
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   775
          this.media.addEventListener( type, function( event ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   776
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   777
            Popcorn.forEach( self.data.events[ type ], function( obj, key ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   778
              if ( typeof obj === "function" ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   779
                obj.call( self, event );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   780
              }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   781
            });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   782
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   783
          }, false);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   784
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   785
        return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   786
      },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   787
      unlisten: function( type, fn ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   788
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   789
        if ( this.data.events[ type ] && this.data.events[ type ][ fn ] ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   790
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   791
          delete this.data.events[ type ][ fn ];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   792
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   793
          return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   794
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   795
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   796
        this.data.events[ type ] = null;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   797
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   798
        return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   799
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   800
    },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   801
    hooks: {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   802
      canplayall: {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   803
        bind: "canplaythrough",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   804
        add: function( event, callback ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   805
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   806
          var state = false;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   807
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   808
          if ( this.media.readyState ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   809
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   810
            callback.call( this, event );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   811
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   812
            state = true;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   813
          }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   814
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   815
          this.data.hooks.canplayall = {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   816
            fired: state
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   817
          };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   818
        },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   819
        // declare special handling instructions
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   820
        handler: function canplayall( event, callback ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   821
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   822
          if ( !this.data.hooks.canplayall.fired ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   823
            // trigger original user callback once
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   824
            callback.call( this, event );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   825
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   826
            this.data.hooks.canplayall.fired = true;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   827
          }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   828
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   829
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   830
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   831
  };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   832
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   833
  //  Extend Popcorn.events.fns (listen, unlisten, trigger) to all Popcorn instances
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   834
  Popcorn.forEach( [ "trigger", "listen", "unlisten" ], function( key ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   835
    Popcorn.p[ key ] = Popcorn.events.fn[ key ];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   836
  });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   837
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   838
  // Internal Only - Adds track events to the instance object
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   839
  Popcorn.addTrackEvent = function( obj, track ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   840
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   841
    // Determine if this track has default options set for it
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   842
    // If so, apply them to the track object
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   843
    if ( track && track._natives && track._natives.type &&
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   844
        ( obj.options.defaults && obj.options.defaults[ track._natives.type ] ) ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   845
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   846
      track = Popcorn.extend( {}, obj.options.defaults[ track._natives.type ], track );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   847
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   848
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   849
    if ( track._natives ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   850
      //  Supports user defined track event id
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   851
      track._id = !track.id ? Popcorn.guid( track._natives.type ) : track.id;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   852
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   853
      //  Push track event ids into the history
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   854
      obj.data.history.push( track._id );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   855
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   856
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   857
    track.start = Popcorn.util.toSeconds( track.start, obj.options.framerate );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   858
    track.end   = Popcorn.util.toSeconds( track.end, obj.options.framerate );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   859
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   860
    //  Store this definition in an array sorted by times
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   861
    var byStart = obj.data.trackEvents.byStart,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   862
        byEnd = obj.data.trackEvents.byEnd,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   863
        startIndex, endIndex,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   864
        currentTime;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   865
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   866
    for ( startIndex = byStart.length - 1; startIndex >= 0; startIndex-- ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   867
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   868
      if ( track.start >= byStart[ startIndex ].start ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   869
        byStart.splice( startIndex + 1, 0, track );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   870
        break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   871
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   872
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   873
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   874
    for ( endIndex = byEnd.length - 1; endIndex >= 0; endIndex-- ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   875
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   876
      if ( track.end > byEnd[ endIndex ].end ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   877
        byEnd.splice( endIndex + 1, 0, track );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   878
        break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   879
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   880
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   881
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   882
    // Display track event immediately if it's enabled and current
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   883
    if ( track._natives &&
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   884
        ( !!Popcorn.registryByName[ track._natives.type ] || !!obj[ track._natives.type ] ) ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   885
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   886
      currentTime = obj.media.currentTime;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   887
      if ( track.end > currentTime &&
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   888
        track.start <= currentTime &&
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   889
        obj.data.disabled.indexOf( track._natives.type ) === -1 ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   890
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   891
        track._running = true;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   892
        track._natives.start.call( obj, null, track );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   893
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   894
        if ( obj.options.frameAnimation &&
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   895
          track._natives.frame ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   896
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   897
          obj.data.trackEvents.animating.push( track );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   898
          track._natives.frame.call( obj, null, track, currentTime );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   899
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   900
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   901
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   902
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   903
    // update startIndex and endIndex
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   904
    if ( startIndex <= obj.data.trackEvents.startIndex &&
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   905
      track.start <= obj.data.trackEvents.previousUpdateTime ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   906
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   907
      obj.data.trackEvents.startIndex++;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   908
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   909
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   910
    if ( endIndex <= obj.data.trackEvents.endIndex &&
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   911
      track.end < obj.data.trackEvents.previousUpdateTime ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   912
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   913
      obj.data.trackEvents.endIndex++;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   914
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   915
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   916
    this.timeUpdate( obj, null, true );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   917
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   918
    // Store references to user added trackevents in ref table
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   919
    if ( track._id ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   920
      Popcorn.addTrackEvent.ref( obj, track );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   921
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   922
  };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   923
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   924
  // Internal Only - Adds track event references to the instance object's trackRefs hash table
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   925
  Popcorn.addTrackEvent.ref = function( obj, track ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   926
    obj.data.trackRefs[ track._id ] = track;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   927
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   928
    return obj;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   929
  };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   930
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   931
  Popcorn.removeTrackEvent  = function( obj, trackId ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   932
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   933
    var historyLen = obj.data.history.length,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   934
        indexWasAt = 0,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   935
        byStart = [],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   936
        byEnd = [],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   937
        animating = [],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   938
        history = [];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   939
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   940
    Popcorn.forEach( obj.data.trackEvents.byStart, function( o, i, context ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   941
      // Preserve the original start/end trackEvents
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   942
      if ( !o._id ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   943
        byStart.push( obj.data.trackEvents.byStart[i] );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   944
        byEnd.push( obj.data.trackEvents.byEnd[i] );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   945
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   946
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   947
      // Filter for user track events (vs system track events)
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   948
      if ( o._id ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   949
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   950
        // Filter for the trackevent to remove
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   951
        if ( o._id !== trackId ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   952
          byStart.push( obj.data.trackEvents.byStart[i] );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   953
          byEnd.push( obj.data.trackEvents.byEnd[i] );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   954
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   955
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   956
        //  Capture the position of the track being removed.
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   957
        if ( o._id === trackId ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   958
          indexWasAt = i;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   959
          o._natives._teardown && o._natives._teardown.call( obj, o );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   960
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   961
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   962
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   963
    });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   964
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   965
    if ( obj.data.trackEvents.animating.length ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   966
      Popcorn.forEach( obj.data.trackEvents.animating, function( o, i, context ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   967
        // Preserve the original start/end trackEvents
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   968
        if ( !o._id ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   969
          animating.push( obj.data.trackEvents.animating[i] );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   970
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   971
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   972
        // Filter for user track events (vs system track events)
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   973
        if ( o._id ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   974
          // Filter for the trackevent to remove
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   975
          if ( o._id !== trackId ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   976
            animating.push( obj.data.trackEvents.animating[i] );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   977
          }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   978
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   979
      });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   980
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   981
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   982
    //  Update
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   983
    if ( indexWasAt <= obj.data.trackEvents.startIndex ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   984
      obj.data.trackEvents.startIndex--;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   985
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   986
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   987
    if ( indexWasAt <= obj.data.trackEvents.endIndex ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   988
      obj.data.trackEvents.endIndex--;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   989
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   990
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   991
    obj.data.trackEvents.byStart = byStart;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   992
    obj.data.trackEvents.byEnd = byEnd;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   993
    obj.data.trackEvents.animating = animating;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   994
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   995
    for ( var i = 0; i < historyLen; i++ ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   996
      if ( obj.data.history[ i ] !== trackId ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   997
        history.push( obj.data.history[ i ] );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   998
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
   999
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1000
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1001
    // Update ordered history array
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1002
    obj.data.history = history;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1003
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1004
    // Update track event references
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1005
    Popcorn.removeTrackEvent.ref( obj, trackId );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1006
  };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1007
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1008
  // Internal Only - Removes track event references from instance object's trackRefs hash table
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1009
  Popcorn.removeTrackEvent.ref = function( obj, trackId ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1010
    delete obj.data.trackRefs[ trackId ];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1011
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1012
    return obj;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1013
  };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1014
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1015
  // Return an array of track events bound to this instance object
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1016
  Popcorn.getTrackEvents = function( obj ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1017
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1018
    var trackevents = [],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1019
      refs = obj.data.trackEvents.byStart,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1020
      length = refs.length,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1021
      idx = 0,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1022
      ref;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1023
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1024
    for ( ; idx < length; idx++ ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1025
      ref = refs[ idx ];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1026
      // Return only user attributed track event references
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1027
      if ( ref._id ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1028
        trackevents.push( ref );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1029
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1030
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1031
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1032
    return trackevents;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1033
  };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1034
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1035
  // Internal Only - Returns an instance object's trackRefs hash table
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1036
  Popcorn.getTrackEvents.ref = function( obj ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1037
    return obj.data.trackRefs;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1038
  };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1039
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1040
  // Return a single track event bound to this instance object
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1041
  Popcorn.getTrackEvent = function( obj, trackId ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1042
    return obj.data.trackRefs[ trackId ];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1043
  };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1044
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1045
  // Internal Only - Returns an instance object's track reference by track id
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1046
  Popcorn.getTrackEvent.ref = function( obj, trackId ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1047
    return obj.data.trackRefs[ trackId ];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1048
  };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1049
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1050
  Popcorn.getLastTrackEventId = function( obj ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1051
    return obj.data.history[ obj.data.history.length - 1 ];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1052
  };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1053
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1054
  Popcorn.timeUpdate = function( obj, event ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1055
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1056
    var currentTime = obj.media.currentTime,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1057
        previousTime = obj.data.trackEvents.previousUpdateTime,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1058
        tracks = obj.data.trackEvents,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1059
        animating = tracks.animating,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1060
        end = tracks.endIndex,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1061
        start = tracks.startIndex,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1062
        animIndex = 0,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1063
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1064
        registryByName = Popcorn.registryByName,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1065
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1066
        byEnd, byStart, byAnimate, natives, type;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1067
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1068
    //  Playbar advancing
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1069
    if ( previousTime <= currentTime ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1070
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1071
      while ( tracks.byEnd[ end ] && tracks.byEnd[ end ].end <= currentTime ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1072
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1073
        byEnd = tracks.byEnd[ end ];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1074
        natives = byEnd._natives;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1075
        type = natives && natives.type;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1076
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1077
        //  If plugin does not exist on this instance, remove it
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1078
        if ( !natives ||
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1079
            ( !!registryByName[ type ] ||
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1080
              !!obj[ type ] ) ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1081
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1082
          if ( byEnd._running === true ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1083
            byEnd._running = false;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1084
            natives.end.call( obj, event, byEnd );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1085
          }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1086
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1087
          end++;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1088
        } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1089
          // remove track event
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1090
          Popcorn.removeTrackEvent( obj, byEnd._id );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1091
          return;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1092
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1093
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1094
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1095
      while ( tracks.byStart[ start ] && tracks.byStart[ start ].start <= currentTime ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1096
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1097
        byStart = tracks.byStart[ start ];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1098
        natives = byStart._natives;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1099
        type = natives && natives.type;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1100
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1101
        //  If plugin does not exist on this instance, remove it
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1102
        if ( !natives ||
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1103
            ( !!registryByName[ type ] ||
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1104
              !!obj[ type ] ) ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1105
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1106
          if ( byStart.end > currentTime &&
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1107
                byStart._running === false &&
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1108
                  obj.data.disabled.indexOf( type ) === -1 ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1109
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1110
            byStart._running = true;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1111
            natives.start.call( obj, event, byStart );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1112
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1113
            // If the `frameAnimation` option is used,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1114
            // push the current byStart object into the `animating` cue
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1115
            if ( obj.options.frameAnimation &&
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1116
                ( byStart && byStart._running && byStart._natives.frame ) ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1117
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1118
              animating.push( byStart );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1119
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1120
          }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1121
          start++;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1122
        } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1123
          // remove track event
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1124
          Popcorn.removeTrackEvent( obj, byStart._id );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1125
          return;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1126
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1127
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1128
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1129
      // If the `frameAnimation` option is used, iterate the animating track
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1130
      // and execute the `frame` callback
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1131
      if ( obj.options.frameAnimation ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1132
        while ( animIndex < animating.length ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1133
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1134
          byAnimate = animating[ animIndex ];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1135
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1136
          if ( !byAnimate._running ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1137
            animating.splice( animIndex, 1 );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1138
          } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1139
            byAnimate._natives.frame.call( obj, event, byAnimate, currentTime );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1140
            animIndex++;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1141
          }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1142
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1143
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1144
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1145
    // Playbar receding
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1146
    } else if ( previousTime > currentTime ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1147
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1148
      while ( tracks.byStart[ start ] && tracks.byStart[ start ].start > currentTime ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1149
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1150
        byStart = tracks.byStart[ start ];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1151
        natives = byStart._natives;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1152
        type = natives && natives.type;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1153
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1154
        // if plugin does not exist on this instance, remove it
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1155
        if ( !natives ||
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1156
            ( !!registryByName[ type ] ||
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1157
              !!obj[ type ] ) ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1158
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1159
          if ( byStart._running === true ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1160
            byStart._running = false;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1161
            natives.end.call( obj, event, byStart );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1162
          }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1163
          start--;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1164
        } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1165
          // remove track event
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1166
          Popcorn.removeTrackEvent( obj, byStart._id );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1167
          return;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1168
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1169
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1170
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1171
      while ( tracks.byEnd[ end ] && tracks.byEnd[ end ].end > currentTime ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1172
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1173
        byEnd = tracks.byEnd[ end ];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1174
        natives = byEnd._natives;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1175
        type = natives && natives.type;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1176
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1177
        // if plugin does not exist on this instance, remove it
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1178
        if ( !natives ||
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1179
            ( !!registryByName[ type ] ||
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1180
              !!obj[ type ] ) ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1181
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1182
          if ( byEnd.start <= currentTime &&
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1183
                byEnd._running === false  &&
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1184
                  obj.data.disabled.indexOf( type ) === -1 ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1185
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1186
            byEnd._running = true;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1187
            natives.start.call( obj, event, byEnd );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1188
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1189
            // If the `frameAnimation` option is used,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1190
            // push the current byEnd object into the `animating` cue
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1191
            if ( obj.options.frameAnimation &&
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1192
                  ( byEnd && byEnd._running && byEnd._natives.frame ) ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1193
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1194
              animating.push( byEnd );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1195
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1196
          }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1197
          end--;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1198
        } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1199
          // remove track event
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1200
          Popcorn.removeTrackEvent( obj, byEnd._id );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1201
          return;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1202
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1203
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1204
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1205
      // If the `frameAnimation` option is used, iterate the animating track
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1206
      // and execute the `frame` callback
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1207
      if ( obj.options.frameAnimation ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1208
        while ( animIndex < animating.length ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1209
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1210
          byAnimate = animating[ animIndex ];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1211
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1212
          if ( !byAnimate._running ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1213
            animating.splice( animIndex, 1 );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1214
          } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1215
            byAnimate._natives.frame.call( obj, event, byAnimate, currentTime );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1216
            animIndex++;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1217
          }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1218
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1219
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1220
    // time bar is not moving ( video is paused )
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1221
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1222
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1223
    tracks.endIndex = end;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1224
    tracks.startIndex = start;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1225
    tracks.previousUpdateTime = currentTime;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1226
  };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1227
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1228
  //  Map and Extend TrackEvent functions to all Popcorn instances
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1229
  Popcorn.extend( Popcorn.p, {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1230
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1231
    getTrackEvents: function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1232
      return Popcorn.getTrackEvents.call( null, this );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1233
    },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1234
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1235
    getTrackEvent: function( id ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1236
      return Popcorn.getTrackEvent.call( null, this, id );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1237
    },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1238
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1239
    getLastTrackEventId: function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1240
      return Popcorn.getLastTrackEventId.call( null, this );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1241
    },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1242
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1243
    removeTrackEvent: function( id ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1244
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1245
      Popcorn.removeTrackEvent.call( null, this, id );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1246
      return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1247
    },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1248
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1249
    removePlugin: function( name ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1250
      Popcorn.removePlugin.call( null, this, name );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1251
      return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1252
    },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1253
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1254
    timeUpdate: function( event ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1255
      Popcorn.timeUpdate.call( null, this, event );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1256
      return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1257
    },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1258
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1259
    destroy: function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1260
      Popcorn.destroy.call( null, this );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1261
      return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1262
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1263
  });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1264
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1265
  //  Plugin manifests
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1266
  Popcorn.manifest = {};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1267
  //  Plugins are registered
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1268
  Popcorn.registry = [];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1269
  Popcorn.registryByName = {};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1270
  //  An interface for extending Popcorn
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1271
  //  with plugin functionality
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1272
  Popcorn.plugin = function( name, definition, manifest ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1273
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1274
    if ( Popcorn.protect.natives.indexOf( name.toLowerCase() ) >= 0 ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1275
      Popcorn.error( "'" + name + "' is a protected function name" );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1276
      return;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1277
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1278
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1279
    //  Provides some sugar, but ultimately extends
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1280
    //  the definition into Popcorn.p
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1281
    var reserved = [ "start", "end" ],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1282
        plugin = {},
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1283
        setup,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1284
        isfn = typeof definition === "function",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1285
        methods = [ "_setup", "_teardown", "start", "end", "frame" ];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1286
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1287
    // combines calls of two function calls into one
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1288
    var combineFn = function( first, second ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1289
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1290
      first = first || Popcorn.nop;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1291
      second = second || Popcorn.nop;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1292
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1293
      return function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1294
        first.apply( this, arguments );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1295
        second.apply( this, arguments );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1296
      };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1297
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1298
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1299
    //  If `manifest` arg is undefined, check for manifest within the `definition` object
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1300
    //  If no `definition.manifest`, an empty object is a sufficient fallback
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1301
    Popcorn.manifest[ name ] = manifest = manifest || definition.manifest || {};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1302
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1303
    // apply safe, and empty default functions
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1304
    methods.forEach(function( method ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1305
      definition[ method ] = safeTry( definition[ method ] || Popcorn.nop, name );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1306
    });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1307
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1308
    var pluginFn = function( setup, options ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1309
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1310
      if ( !options ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1311
        return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1312
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1313
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1314
      //  Storing the plugin natives
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1315
      var natives = options._natives = {},
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1316
          compose = "",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1317
          defaults, originalOpts, manifestOpts, mergedSetupOpts;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1318
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1319
      Popcorn.extend( natives, setup );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1320
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1321
      options._natives.type = name;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1322
      options._running = false;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1323
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1324
      natives.start = natives.start || natives[ "in" ];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1325
      natives.end = natives.end || natives[ "out" ];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1326
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1327
      // extend teardown to always call end if running
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1328
      natives._teardown = combineFn(function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1329
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1330
        var args = slice.call( arguments );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1331
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1332
        // end function signature is not the same as teardown,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1333
        // put null on the front of arguments for the event parameter
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1334
        args.unshift( null );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1335
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1336
        // only call end if event is running
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1337
        args[ 1 ]._running && natives.end.apply( this, args );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1338
      }, natives._teardown );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1339
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1340
      // Check for previously set default options
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1341
      defaults = this.options.defaults && this.options.defaults[ options._natives && options._natives.type ];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1342
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1343
      // default to an empty string if no effect exists
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1344
      // split string into an array of effects
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1345
      options.compose = options.compose && options.compose.split( " " ) || [];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1346
      options.effect = options.effect && options.effect.split( " " ) || [];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1347
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1348
      // join the two arrays together
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1349
      options.compose = options.compose.concat( options.effect );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1350
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1351
      options.compose.forEach(function( composeOption ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1352
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1353
        // if the requested compose is garbage, throw it away
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1354
        compose = Popcorn.compositions[ composeOption ] || {};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1355
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1356
        // extends previous functions with compose function
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1357
        methods.forEach(function( method ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1358
          natives[ method ] = combineFn( natives[ method ], compose[ method ] );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1359
        });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1360
      });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1361
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1362
      //  Ensure a manifest object, an empty object is a sufficient fallback
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1363
      options._natives.manifest = manifest;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1364
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1365
      //  Checks for expected properties
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1366
      if ( !( "start" in options ) ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1367
        options.start = options[ "in" ] || 0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1368
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1369
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1370
      if ( !( "end" in options ) ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1371
        options.end = options[ "out" ] || this.duration() || Number.MAX_VALUE;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1372
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1373
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1374
      // Merge with defaults if they exist, make sure per call is prioritized
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1375
      mergedSetupOpts = defaults ? Popcorn.extend( {}, defaults, options ) :
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1376
                          options;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1377
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1378
      // Resolves 239, 241, 242
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1379
      if ( !mergedSetupOpts.target ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1380
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1381
        //  Sometimes the manifest may be missing entirely
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1382
        //  or it has an options object that doesn't have a `target` property
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1383
        manifestOpts = "options" in manifest && manifest.options;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1384
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1385
        mergedSetupOpts.target = manifestOpts && "target" in manifestOpts && manifestOpts.target;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1386
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1387
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1388
      // Trigger _setup method if exists
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1389
      options._natives._setup && options._natives._setup.call( this, mergedSetupOpts );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1390
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1391
      // Create new track event for this instance
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1392
      Popcorn.addTrackEvent( this, Popcorn.extend( mergedSetupOpts, options ) );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1393
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1394
      //  Future support for plugin event definitions
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1395
      //  for all of the native events
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1396
      Popcorn.forEach( setup, function( callback, type ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1397
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1398
        if ( type !== "type" ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1399
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1400
          if ( reserved.indexOf( type ) === -1 ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1401
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1402
            this.listen( type, callback );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1403
          }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1404
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1405
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1406
      }, this );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1407
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1408
      return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1409
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1410
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1411
    //  Assign new named definition
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1412
    plugin[ name ] = function( options ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1413
      return pluginFn.call( this, isfn ? definition.call( this, options ) : definition,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1414
                                  options );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1415
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1416
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1417
    //  Extend Popcorn.p with new named definition
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1418
    Popcorn.extend( Popcorn.p, plugin );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1419
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1420
    //  Push into the registry
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1421
    var entry = {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1422
      fn: plugin[ name ],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1423
      definition: definition,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1424
      base: definition,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1425
      parents: [],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1426
      name: name
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1427
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1428
    Popcorn.registry.push(
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1429
       Popcorn.extend( plugin, entry, {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1430
        type: name
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1431
      })
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1432
    );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1433
    Popcorn.registryByName[ name ] = entry;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1434
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1435
    return plugin;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1436
  };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1437
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1438
  // Storage for plugin function errors
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1439
  Popcorn.plugin.errors = [];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1440
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1441
  // Returns wrapped plugin function
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1442
  function safeTry( fn, pluginName ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1443
    return function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1444
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1445
      //  When Popcorn.plugin.debug is true, do not suppress errors
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1446
      if ( Popcorn.plugin.debug ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1447
        return fn.apply( this, arguments );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1448
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1449
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1450
      try {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1451
        return fn.apply( this, arguments );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1452
      } catch ( ex ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1453
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1454
        // Push plugin function errors into logging queue
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1455
        Popcorn.plugin.errors.push({
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1456
          plugin: pluginName,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1457
          thrown: ex,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1458
          source: fn.toString()
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1459
        });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1460
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1461
        // Trigger an error that the instance can listen for
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1462
        // and react to
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1463
        this.trigger( "error", Popcorn.plugin.errors );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1464
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1465
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1466
  }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1467
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1468
  // Debug-mode flag for plugin development
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1469
  Popcorn.plugin.debug = false;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1470
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1471
  //  removePlugin( type ) removes all tracks of that from all instances of popcorn
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1472
  //  removePlugin( obj, type ) removes all tracks of type from obj, where obj is a single instance of popcorn
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1473
  Popcorn.removePlugin = function( obj, name ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1474
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1475
    //  Check if we are removing plugin from an instance or from all of Popcorn
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1476
    if ( !name ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1477
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1478
      //  Fix the order
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1479
      name = obj;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1480
      obj = Popcorn.p;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1481
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1482
      if ( Popcorn.protect.natives.indexOf( name.toLowerCase() ) >= 0 ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1483
        Popcorn.error( "'" + name + "' is a protected function name" );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1484
        return;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1485
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1486
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1487
      var registryLen = Popcorn.registry.length,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1488
          registryIdx;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1489
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1490
      // remove plugin reference from registry
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1491
      for ( registryIdx = 0; registryIdx < registryLen; registryIdx++ ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1492
        if ( Popcorn.registry[ registryIdx ].name === name ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1493
          Popcorn.registry.splice( registryIdx, 1 );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1494
          delete Popcorn.registryByName[ name ];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1495
          delete Popcorn.manifest[ name ];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1496
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1497
          // delete the plugin
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1498
          delete obj[ name ];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1499
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1500
          // plugin found and removed, stop checking, we are done
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1501
          return;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1502
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1503
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1504
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1505
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1506
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1507
    var byStart = obj.data.trackEvents.byStart,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1508
        byEnd = obj.data.trackEvents.byEnd,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1509
        animating = obj.data.trackEvents.animating,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1510
        idx, sl;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1511
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1512
    // remove all trackEvents
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1513
    for ( idx = 0, sl = byStart.length; idx < sl; idx++ ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1514
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1515
      if ( ( byStart[ idx ] && byStart[ idx ]._natives && byStart[ idx ]._natives.type === name ) &&
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1516
                ( byEnd[ idx ] && byEnd[ idx ]._natives && byEnd[ idx ]._natives.type === name ) ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1517
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1518
        byStart[ idx ]._natives._teardown && byStart[ idx ]._natives._teardown.call( obj, byStart[ idx ] );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1519
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1520
        byStart.splice( idx, 1 );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1521
        byEnd.splice( idx, 1 );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1522
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1523
        // update for loop if something removed, but keep checking
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1524
        idx--; sl--;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1525
        if ( obj.data.trackEvents.startIndex <= idx ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1526
          obj.data.trackEvents.startIndex--;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1527
          obj.data.trackEvents.endIndex--;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1528
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1529
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1530
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1531
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1532
    //remove all animating events
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1533
    for ( idx = 0, sl = animating.length; idx < sl; idx++ ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1534
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1535
      if ( animating[ idx ] && animating[ idx ]._natives && animating[ idx ]._natives.type === name ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1536
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1537
        animating.splice( idx, 1 );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1538
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1539
        // update for loop if something removed, but keep checking
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1540
        idx--; sl--;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1541
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1542
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1543
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1544
  };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1545
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1546
  Popcorn.compositions = {};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1547
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1548
  //  Plugin inheritance
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1549
  Popcorn.compose = function( name, definition, manifest ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1550
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1551
    //  If `manifest` arg is undefined, check for manifest within the `definition` object
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1552
    //  If no `definition.manifest`, an empty object is a sufficient fallback
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1553
    Popcorn.manifest[ name ] = manifest = manifest || definition.manifest || {};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1554
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1555
    // register the effect by name
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1556
    Popcorn.compositions[ name ] = definition;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1557
  };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1558
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1559
  Popcorn.plugin.effect = Popcorn.effect = Popcorn.compose;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1560
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1561
  // stores parsers keyed on filetype
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1562
  Popcorn.parsers = {};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1563
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1564
  // An interface for extending Popcorn
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1565
  // with parser functionality
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1566
  Popcorn.parser = function( name, type, definition ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1567
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1568
    if ( Popcorn.protect.natives.indexOf( name.toLowerCase() ) >= 0 ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1569
      Popcorn.error( "'" + name + "' is a protected function name" );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1570
      return;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1571
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1572
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1573
    // fixes parameters for overloaded function call
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1574
    if ( typeof type === "function" && !definition ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1575
      definition = type;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1576
      type = "";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1577
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1578
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1579
    if ( typeof definition !== "function" || typeof type !== "string" ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1580
      return;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1581
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1582
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1583
    // Provides some sugar, but ultimately extends
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1584
    // the definition into Popcorn.p
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1585
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1586
    var natives = Popcorn.events.all,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1587
        parseFn,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1588
        parser = {};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1589
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1590
    parseFn = function( filename, callback ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1591
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1592
      if ( !filename ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1593
        return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1594
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1595
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1596
      var that = this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1597
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1598
      Popcorn.xhr({
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1599
        url: filename,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1600
        dataType: type,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1601
        success: function( data ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1602
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1603
          var tracksObject = definition( data ),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1604
              tracksData,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1605
              tracksDataLen,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1606
              tracksDef,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1607
              idx = 0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1608
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1609
          tracksData = tracksObject.data || [];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1610
          tracksDataLen = tracksData.length;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1611
          tracksDef = null;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1612
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1613
          //  If no tracks to process, return immediately
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1614
          if ( !tracksDataLen ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1615
            return;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1616
          }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1617
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1618
          //  Create tracks out of parsed object
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1619
          for ( ; idx < tracksDataLen; idx++ ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1620
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1621
            tracksDef = tracksData[ idx ];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1622
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1623
            for ( var key in tracksDef ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1624
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1625
              if ( hasOwn.call( tracksDef, key ) && !!that[ key ] ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1626
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1627
                that[ key ]( tracksDef[ key ] );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1628
              }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1629
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1630
          }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1631
          if ( callback ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1632
            callback();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1633
          }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1634
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1635
      });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1636
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1637
      return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1638
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1639
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1640
    // Assign new named definition
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1641
    parser[ name ] = parseFn;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1642
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1643
    // Extend Popcorn.p with new named definition
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1644
    Popcorn.extend( Popcorn.p, parser );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1645
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1646
    // keys the function name by filetype extension
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1647
    //Popcorn.parsers[ name ] = true;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1648
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1649
    return parser;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1650
  };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1651
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1652
  Popcorn.player = function( name, player ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1653
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1654
    player = player || {};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1655
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1656
    var playerFn = function( target, src, options ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1657
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1658
      options = options || {};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1659
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1660
      // List of events
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1661
      var date = new Date() / 1000,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1662
          baselineTime = date,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1663
          currentTime = 0,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1664
          volume = 1,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1665
          muted = false,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1666
          events = {},
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1667
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1668
          // The container div of the resource
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1669
          container = document.getElementById( rIdExp.exec( target ) && rIdExp.exec( target )[ 2 ] ) ||
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1670
                        document.getElementById( target ) ||
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1671
                          target,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1672
          basePlayer = {},
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1673
          timeout,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1674
          popcorn;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1675
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1676
      // copies a div into the media object
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1677
      for( var val in container ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1678
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1679
        if ( typeof container[ val ] === "object" ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1680
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1681
          basePlayer[ val ] = container[ val ];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1682
        } else if ( typeof container[ val ] === "function" ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1683
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1684
          basePlayer[ val ] = (function( value ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1685
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1686
            // this is a stupid ugly kludgy hack in honour of Safari
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1687
            // in Safari a NodeList is a function, not an object
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1688
            if ( "length" in container[ value ] && !container[ value ].call ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1689
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1690
              return container[ value ];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1691
            } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1692
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1693
              return function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1694
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1695
                return container[ value ].apply( container, arguments );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1696
              };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1697
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1698
          }( val ));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1699
        } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1700
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1701
          Popcorn.player.defineProperty( basePlayer, val, {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1702
            get: (function( value ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1703
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1704
              return function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1705
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1706
                return container[ value ];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1707
              };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1708
            }( val )),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1709
            set: Popcorn.nop,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1710
            configurable: true
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1711
          });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1712
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1713
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1714
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1715
      var timeupdate = function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1716
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1717
        date = new Date() / 1000;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1718
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1719
        if ( !basePlayer.paused ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1720
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1721
          basePlayer.currentTime = basePlayer.currentTime + ( date - baselineTime );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1722
          basePlayer.dispatchEvent( "timeupdate" );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1723
          timeout = setTimeout( timeupdate, 10 );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1724
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1725
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1726
        baselineTime = date;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1727
      };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1728
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1729
      basePlayer.play = function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1730
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1731
        this.paused = false;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1732
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1733
        if ( basePlayer.readyState >= 4 ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1734
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1735
          baselineTime = new Date() / 1000;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1736
          basePlayer.dispatchEvent( "play" );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1737
          timeupdate();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1738
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1739
      };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1740
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1741
      basePlayer.pause = function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1742
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1743
        this.paused = true;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1744
        basePlayer.dispatchEvent( "pause" );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1745
      };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1746
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1747
      Popcorn.player.defineProperty( basePlayer, "currentTime", {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1748
        get: function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1749
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1750
          return currentTime;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1751
        },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1752
        set: function( val ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1753
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1754
          // make sure val is a number
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1755
          currentTime = +val;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1756
          basePlayer.dispatchEvent( "timeupdate" );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1757
          return currentTime;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1758
        },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1759
        configurable: true
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1760
      });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1761
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1762
      Popcorn.player.defineProperty( basePlayer, "volume", {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1763
        get: function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1764
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1765
          return volume;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1766
        },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1767
        set: function( val ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1768
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1769
          // make sure val is a number
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1770
          volume = +val;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1771
          basePlayer.dispatchEvent( "volumechange" );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1772
          return volume;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1773
        },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1774
        configurable: true
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1775
      });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1776
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1777
      Popcorn.player.defineProperty( basePlayer, "muted", {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1778
        get: function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1779
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1780
          return muted;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1781
        },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1782
        set: function( val ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1783
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1784
          // make sure val is a number
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1785
          muted = +val;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1786
          basePlayer.dispatchEvent( "volumechange" );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1787
          return muted;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1788
        },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1789
        configurable: true
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1790
      });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1791
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1792
      // Adds an event listener to the object
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1793
      basePlayer.addEventListener = function( evtName, fn ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1794
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1795
        if ( !events[ evtName ] ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1796
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1797
          events[ evtName ] = [];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1798
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1799
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1800
        events[ evtName ].push( fn );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1801
        return fn;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1802
      };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1803
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1804
      // Can take event object or simple string
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1805
      basePlayer.dispatchEvent = function( oEvent ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1806
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1807
        var evt,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1808
            self = this,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1809
            eventInterface,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1810
            eventName = oEvent.type;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1811
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1812
        // A string was passed, create event object
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1813
        if ( !eventName ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1814
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1815
          eventName = oEvent;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1816
          eventInterface  = Popcorn.events.getInterface( eventName );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1817
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1818
          if ( eventInterface ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1819
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1820
            evt = document.createEvent( eventInterface );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1821
            evt.initEvent( eventName, true, true, window, 1 );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1822
          }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1823
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1824
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1825
        Popcorn.forEach( events[ eventName ], function( val ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1826
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1827
          val.call( self, evt, self );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1828
        });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1829
      };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1830
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1831
      // Attempt to get src from playerFn parameter
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1832
      basePlayer.src = src || "";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1833
      basePlayer.readyState = 0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1834
      basePlayer.duration = 0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1835
      basePlayer.paused = true;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1836
      basePlayer.ended = 0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1837
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1838
      if ( player._setup ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1839
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1840
        player._setup.call( basePlayer, options );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1841
      } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1842
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1843
        // there is no setup, which means there is nothing to load
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1844
        basePlayer.readyState = 4;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1845
        basePlayer.dispatchEvent( "load" );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1846
        basePlayer.dispatchEvent( "loadeddata" );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1847
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1848
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1849
      // when a custom player is loaded, load basePlayer state into custom player
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1850
      basePlayer.addEventListener( "load", function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1851
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1852
        // if a player is not ready before currentTime is called, this will set it after it is ready
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1853
        basePlayer.currentTime = currentTime;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1854
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1855
        // same as above with volume and muted
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1856
        basePlayer.volume = volume;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1857
        basePlayer.muted = muted;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1858
      });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1859
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1860
      basePlayer.addEventListener( "loadeddata", function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1861
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1862
        // if play was called before player ready, start playing video
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1863
        !basePlayer.paused && basePlayer.play();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1864
      });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1865
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1866
      popcorn = new Popcorn.p.init( basePlayer, options );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1867
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1868
      return popcorn;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1869
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1870
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1871
    Popcorn[ name ] = Popcorn[ name ] || playerFn;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1872
  };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1873
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1874
  Popcorn.player.defineProperty = Object.defineProperty || function( object, description, options ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1875
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1876
    object.__defineGetter__( description, options.get || Popcorn.nop );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1877
    object.__defineSetter__( description, options.set || Popcorn.nop );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1878
  };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1879
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1880
  //  Cache references to reused RegExps
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1881
  var rparams = /\?/,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1882
  //  XHR Setup object
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1883
  setup = {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1884
    url: "",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1885
    data: "",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1886
    dataType: "",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1887
    success: Popcorn.nop,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1888
    type: "GET",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1889
    async: true,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1890
    xhr: function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1891
      return new global.XMLHttpRequest();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1892
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1893
  };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1894
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1895
  Popcorn.xhr = function( options ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1896
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1897
    options.dataType = options.dataType && options.dataType.toLowerCase() || null;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1898
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1899
    if ( options.dataType &&
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1900
         ( options.dataType === "jsonp" || options.dataType === "script" ) ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1901
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1902
      Popcorn.xhr.getJSONP(
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1903
        options.url,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1904
        options.success,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1905
        options.dataType === "script"
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1906
      );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1907
      return;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1908
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1909
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1910
    var settings = Popcorn.extend( {}, setup, options );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1911
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1912
    //  Create new XMLHttpRequest object
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1913
    settings.ajax  = settings.xhr();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1914
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1915
    if ( settings.ajax ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1916
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1917
      if ( settings.type === "GET" && settings.data ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1918
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1919
        //  append query string
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1920
        settings.url += ( rparams.test( settings.url ) ? "&" : "?" ) + settings.data;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1921
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1922
        //  Garbage collect and reset settings.data
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1923
        settings.data = null;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1924
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1925
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1926
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1927
      settings.ajax.open( settings.type, settings.url, settings.async );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1928
      settings.ajax.send( settings.data || null );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1929
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1930
      return Popcorn.xhr.httpData( settings );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1931
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1932
  };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1933
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1934
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1935
  Popcorn.xhr.httpData = function( settings ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1936
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1937
    var data, json = null,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1938
        parser, xml = null;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1939
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1940
    settings.ajax.onreadystatechange = function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1941
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1942
      if ( settings.ajax.readyState === 4 ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1943
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1944
        try {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1945
          json = JSON.parse( settings.ajax.responseText );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1946
        } catch( e ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1947
          //suppress
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1948
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1949
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1950
        data = {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1951
          xml: settings.ajax.responseXML,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1952
          text: settings.ajax.responseText,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1953
          json: json
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1954
        };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1955
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1956
        // Normalize: data.xml is non-null in IE9 regardless of if response is valid xml
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1957
        if ( !data.xml || !data.xml.documentElement ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1958
          data.xml = null;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1959
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1960
          try {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1961
            parser = new DOMParser();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1962
            xml = parser.parseFromString( settings.ajax.responseText, "text/xml" );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1963
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1964
            if ( !xml.getElementsByTagName( "parsererror" ).length ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1965
              data.xml = xml;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1966
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1967
          } catch ( e ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1968
            // data.xml remains null
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1969
          }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1970
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1971
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1972
        //  If a dataType was specified, return that type of data
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1973
        if ( settings.dataType ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1974
          data = data[ settings.dataType ];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1975
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1976
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1977
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1978
        settings.success.call( settings.ajax, data );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1979
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1980
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1981
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1982
    return data;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1983
  };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1984
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1985
  Popcorn.xhr.getJSONP = function( url, success, isScript ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1986
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1987
    var head = document.head || document.getElementsByTagName( "head" )[ 0 ] || document.documentElement,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1988
      script = document.createElement( "script" ),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1989
      paramStr = url.split( "?" )[ 1 ],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1990
      isFired = false,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1991
      params = [],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1992
      callback, parts, callparam;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1993
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1994
    if ( paramStr && !isScript ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1995
      params = paramStr.split( "&" );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1996
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1997
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1998
    if ( params.length ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  1999
      parts = params[ params.length - 1 ].split( "=" );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2000
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2001
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2002
    callback = params.length ? ( parts[ 1 ] ? parts[ 1 ] : parts[ 0 ]  ) : "jsonp";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2003
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2004
    if ( !paramStr && !isScript ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2005
      url += "?callback=" + callback;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2006
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2007
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2008
    if ( callback && !isScript ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2009
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2010
      //  If a callback name already exists
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2011
      if ( !!window[ callback ] ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2012
        //  Create a new unique callback name
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2013
        callback = Popcorn.guid( callback );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2014
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2015
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2016
      //  Define the JSONP success callback globally
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2017
      window[ callback ] = function( data ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2018
        // Fire success callbacks
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2019
        success && success( data );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2020
        isFired = true;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2021
      };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2022
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2023
      //  Replace callback param and callback name
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2024
      url = url.replace( parts.join( "=" ), parts[ 0 ] + "=" + callback );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2025
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2026
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2027
    script.onload = function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2028
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2029
      //  Handling remote script loading callbacks
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2030
      if ( isScript ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2031
        //  getScript
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2032
        success && success();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2033
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2034
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2035
      //  Executing for JSONP requests
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2036
      if ( isFired ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2037
        //  Garbage collect the callback
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2038
        delete window[ callback ];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2039
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2040
      //  Garbage collect the script resource
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2041
      head.removeChild( script );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2042
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2043
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2044
    script.src = url;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2045
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2046
    head.insertBefore( script, head.firstChild );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2047
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2048
    return;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2049
  };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2050
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2051
  Popcorn.getJSONP = Popcorn.xhr.getJSONP;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2052
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2053
  Popcorn.getScript = Popcorn.xhr.getScript = function( url, success ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2054
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2055
    return Popcorn.xhr.getJSONP( url, success, true );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2056
  };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2057
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2058
  Popcorn.util = {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2059
    // Simple function to parse a timestamp into seconds
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2060
    // Acceptable formats are:
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2061
    // HH:MM:SS.MMM
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2062
    // HH:MM:SS;FF
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2063
    // Hours and minutes are optional. They default to 0
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2064
    toSeconds: function( timeStr, framerate ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2065
      // Hours and minutes are optional
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2066
      // Seconds must be specified
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2067
      // Seconds can be followed by milliseconds OR by the frame information
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2068
      var validTimeFormat = /^([0-9]+:){0,2}[0-9]+([.;][0-9]+)?$/,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2069
          errorMessage = "Invalid time format",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2070
          digitPairs, lastIndex, lastPair, firstPair,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2071
          frameInfo, frameTime;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2072
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2073
      if ( typeof timeStr === "number" ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2074
        return timeStr;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2075
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2076
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2077
      if ( typeof timeStr === "string" &&
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2078
            !validTimeFormat.test( timeStr ) ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2079
        Popcorn.error( errorMessage );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2080
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2081
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2082
      digitPairs = timeStr.split( ":" );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2083
      lastIndex = digitPairs.length - 1;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2084
      lastPair = digitPairs[ lastIndex ];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2085
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2086
      // Fix last element:
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2087
      if ( lastPair.indexOf( ";" ) > -1 ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2088
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2089
        frameInfo = lastPair.split( ";" );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2090
        frameTime = 0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2091
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2092
        if ( framerate && ( typeof framerate === "number" ) ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2093
          frameTime = parseFloat( frameInfo[ 1 ], 10 ) / framerate;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2094
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2095
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2096
        digitPairs[ lastIndex ] = parseInt( frameInfo[ 0 ], 10 ) + frameTime;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2097
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2098
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2099
      firstPair = digitPairs[ 0 ];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2100
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2101
      return {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2102
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2103
        1: parseFloat( firstPair, 10 ),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2104
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2105
        2: ( parseInt( firstPair, 10 ) * 60 ) +
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2106
              parseFloat( digitPairs[ 1 ], 10 ),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2107
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2108
        3: ( parseInt( firstPair, 10 ) * 3600 ) +
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2109
            ( parseInt( digitPairs[ 1 ], 10 ) * 60 ) +
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2110
              parseFloat( digitPairs[ 2 ], 10 )
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2111
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2112
      }[ digitPairs.length || 1 ];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2113
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2114
  };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2115
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2116
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2117
  // Initialize locale data
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2118
  // Based on http://en.wikipedia.org/wiki/Language_localisation#Language_tags_and_codes
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2119
  function initLocale( arg ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2120
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2121
    var locale = typeof arg === "string" ? arg : [ arg.language, arg.region ].join( "-" ),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2122
        parts = locale.split( "-" );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2123
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2124
    // Setup locale data table
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2125
    return {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2126
      iso6391: locale,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2127
      language: parts[ 0 ] || "",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2128
      region: parts[ 1 ] || ""
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2129
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2130
  }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2131
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2132
  // Declare locale data table
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2133
  var localeData = initLocale( global.navigator.userLanguage || global.navigator.language );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2134
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2135
  Popcorn.locale = {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2136
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2137
    // Popcorn.locale.get()
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2138
    // returns reference to privately
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2139
    // defined localeData
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2140
    get: function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2141
      return localeData;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2142
    },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2143
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2144
    // Popcorn.locale.set( string|object );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2145
    set: function( arg ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2146
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2147
      localeData = initLocale( arg );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2148
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2149
      Popcorn.locale.broadcast();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2150
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2151
      return localeData;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2152
    },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2153
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2154
    // Popcorn.locale.broadcast( type )
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2155
    // Sends events to all popcorn media instances that are
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2156
    // listening for locale events
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2157
    broadcast: function( type ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2158
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2159
      var instances = Popcorn.instances,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2160
          length = instances.length,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2161
          idx = 0,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2162
          instance;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2163
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2164
      type = type || "locale:changed";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2165
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2166
      // Iterate all current instances
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2167
      for ( ; idx < length; idx++ ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2168
        instance = instances[ idx ];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2169
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2170
        // For those instances with locale event listeners,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2171
        // trigger a locale change event
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2172
        if ( type in instance.data.events  ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2173
          instance.trigger( type );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2174
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2175
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2176
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2177
  };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2178
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2179
  // alias for exec function
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2180
  Popcorn.p.cue = Popcorn.p.exec;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2181
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2182
  function getItems() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2183
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2184
    var item,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2185
        list = [];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2186
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2187
    if ( Object.keys ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2188
      list = Object.keys( Popcorn.p );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2189
    } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2190
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2191
      for ( item in Popcorn.p ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2192
        if ( hasOwn.call( Popcorn.p, item ) ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2193
          list.push( item );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2194
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2195
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2196
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2197
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2198
    return list.join( "," ).toLowerCase().split( ",");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2199
  }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2200
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2201
  //  Protected API methods
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2202
  Popcorn.protect = {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2203
    natives: getItems()
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2204
  };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2205
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2206
  //  Exposes Popcorn to global context
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2207
  global.Popcorn = Popcorn;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2208
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2209
})(window, window.document);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2210
// A global callback for youtube... that makes me angry
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2211
var onYouTubePlayerReady = function( containerId ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2212
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2213
  onYouTubePlayerReady[ containerId ] && onYouTubePlayerReady[ containerId ]();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2214
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2215
onYouTubePlayerReady.stateChangeEventHandler = {};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2216
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2217
Popcorn.player( "youtube", {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2218
  _setup: function( options ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2219
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2220
    var media = this,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2221
        youtubeObject,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2222
        container = document.createElement( "div" ),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2223
        currentTime = 0,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2224
        seekTime = 0,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2225
        seeking = false,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2226
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2227
        // state code for volume changed polling
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2228
        volumeChanged = false,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2229
        lastMuted = false,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2230
        lastVolume = 0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2231
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2232
    container.id = media.id + Popcorn.guid();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2233
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2234
    media.appendChild( container );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2235
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2236
    var youtubeInit = function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2237
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2238
      var flashvars,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2239
          params,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2240
          attributes,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2241
          src;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2242
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2243
      // expose a callback to this scope, that is called from the global callback youtube calls
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2244
      onYouTubePlayerReady[ container.id ] = function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2245
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2246
        youtubeObject = document.getElementById( container.id );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2247
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2248
        // more youtube callback nonsense
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2249
        onYouTubePlayerReady.stateChangeEventHandler[ container.id ] = function( state ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2250
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2251
          // playing is state 1
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2252
          // paused is state 2
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2253
          if ( state === 1 ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2254
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2255
            media.paused && media.play();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2256
          // youtube fires paused events while seeking
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2257
          // this is the only way to get seeking events
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2258
          } else if ( state === 2 ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2259
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2260
            // silly logic forced on me by the youtube API
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2261
            // calling youtube.seekTo triggers multiple events
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2262
            // with the second events getCurrentTime being the old time
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2263
            if ( seeking && seekTime === currentTime && seekTime !== youtubeObject.getCurrentTime() ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2264
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2265
              seeking = false;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2266
              youtubeObject.seekTo( currentTime );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2267
              return;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2268
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2269
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2270
            currentTime = youtubeObject.getCurrentTime();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2271
            media.dispatchEvent( "timeupdate" );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2272
            !media.paused && media.pause();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2273
          }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2274
        };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2275
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2276
        // youtube requires callbacks to be a string to a function path from the global scope
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2277
        youtubeObject.addEventListener( "onStateChange", "onYouTubePlayerReady.stateChangeEventHandler." + container.id );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2278
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2279
        var timeupdate = function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2280
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2281
          if ( !media.paused ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2282
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2283
            currentTime = youtubeObject.getCurrentTime();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2284
            media.dispatchEvent( "timeupdate" );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2285
            setTimeout( timeupdate, 10 );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2286
          }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2287
        };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2288
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2289
        var volumeupdate = function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2290
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2291
          if ( lastMuted !== youtubeObject.isMuted() ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2292
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2293
            lastMuted = youtubeObject.isMuted();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2294
            media.dispatchEvent( "volumechange" );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2295
          }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2296
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2297
          if ( lastVolume !== youtubeObject.getVolume() ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2298
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2299
            lastVolume = youtubeObject.getVolume();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2300
            media.dispatchEvent( "volumechange" );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2301
          }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2302
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2303
          setTimeout( volumeupdate, 250 );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2304
        };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2305
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2306
        media.play = function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2307
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2308
          media.paused = false;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2309
          media.dispatchEvent( "play" );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2310
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2311
          media.dispatchEvent( "playing" );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2312
          timeupdate();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2313
          youtubeObject.playVideo();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2314
        };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2315
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2316
        media.pause = function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2317
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2318
          if ( !media.paused ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2319
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2320
            media.paused = true;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2321
            media.dispatchEvent( "pause" );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2322
            youtubeObject.pauseVideo();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2323
          }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2324
        };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2325
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2326
        Popcorn.player.defineProperty( media, "currentTime", {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2327
          set: function( val ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2328
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2329
            // make sure val is a number
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2330
            currentTime = seekTime = +val;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2331
            seeking = true;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2332
            media.dispatchEvent( "seeked" );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2333
            media.dispatchEvent( "timeupdate" );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2334
            youtubeObject.seekTo( currentTime );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2335
            return currentTime;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2336
          },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2337
          get: function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2338
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2339
            return currentTime;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2340
          }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2341
        });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2342
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2343
        Popcorn.player.defineProperty( media, "muted", {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2344
          set: function( val ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2345
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2346
            if ( youtubeObject.isMuted() !== val ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2347
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2348
              if ( val ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2349
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2350
                youtubeObject.mute();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2351
              } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2352
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2353
                youtubeObject.unMute();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2354
              }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2355
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2356
              lastMuted = youtubeObject.isMuted();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2357
              media.dispatchEvent( "volumechange" );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2358
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2359
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2360
            return youtubeObject.isMuted();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2361
          },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2362
          get: function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2363
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2364
            return youtubeObject.isMuted();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2365
          }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2366
        });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2367
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2368
        Popcorn.player.defineProperty( media, "volume", {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2369
          set: function( val ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2370
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2371
            if ( youtubeObject.getVolume() !== val ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2372
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2373
              youtubeObject.setVolume( val );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2374
              lastVolume = youtubeObject.getVolume();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2375
              media.dispatchEvent( "volumechange" );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2376
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2377
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2378
            return youtubeObject.getVolume();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2379
          },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2380
          get: function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2381
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2382
            return youtubeObject.getVolume();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2383
          }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2384
        });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2385
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2386
        media.readyState = 4;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2387
        media.dispatchEvent( "load" );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2388
        media.duration = youtubeObject.getDuration();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2389
        media.dispatchEvent( "durationchange" );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2390
        volumeupdate();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2391
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2392
        media.dispatchEvent( "loadeddata" );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2393
      };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2394
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2395
      options.controls = +options.controls === 0 || +options.controls === 1 ? options.controls : 1;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2396
      options.annotations = +options.annotations === 1 || +options.annotations === 3 ? options.annotations : 1;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2397
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2398
      flashvars = {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2399
        playerapiid: container.id,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2400
        controls: options.controls,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2401
        iv_load_policy: options.annotations
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2402
      };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2403
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2404
      params = {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2405
        wmode: "transparent",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2406
        allowScriptAccess: "always"
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2407
      };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2408
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2409
      attributes = {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2410
        id: container.id
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2411
      };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2412
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2413
      src = /^.*[\/=](.{11})/.exec( media.src )[ 1 ];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2414
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2415
      swfobject.embedSWF( "http://www.youtube.com/e/" + src + "?enablejsapi=1&playerapiid=" + container.id + "&version=3",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2416
                          container.id, media.offsetWidth, media.offsetHeight, "8", null,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2417
                          flashvars, params, attributes );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2418
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2419
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2420
    if ( !window.swfobject ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2421
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2422
      Popcorn.getScript( "http://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js", youtubeInit );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2423
    } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2424
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2425
      youtubeInit();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2426
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2427
  }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2428
});
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2429
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2430
// PLUGIN: Code
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2431
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2432
(function ( Popcorn ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2433
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2434
  /**
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2435
   * Code Popcorn Plug-in
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2436
   *
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2437
   * Adds the ability to run arbitrary code (JavaScript functions) according to video timing.
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2438
   *
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2439
   * @param {Object} options
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2440
   *
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2441
   * Required parameters: start, end, template, data, and target.
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2442
   * Optional parameter: static.
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2443
   *
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2444
   *   start: the time in seconds when the mustache template should be rendered
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2445
   *          in the target div.
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2446
   *
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2447
   *   end: the time in seconds when the rendered mustache template should be
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2448
   *        removed from the target div.
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2449
   *
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2450
   *   onStart: the function to be run when the start time is reached.
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2451
   *
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2452
   *   onFrame: [optional] a function to be run on each paint call
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2453
   *            (e.g., called ~60 times per second) between the start and end times.
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2454
   *
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2455
   *   onEnd: [optional] a function to be run when the end time is reached.
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2456
   *
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2457
   * Example:
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2458
     var p = Popcorn('#video')
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2459
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2460
        // onStart function only
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2461
        .code({
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2462
          start: 1,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2463
          end: 4,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2464
          onStart: function( options ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2465
            // called on start
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2466
          }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2467
        })
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2468
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2469
        // onStart + onEnd only
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2470
        .code({
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2471
          start: 6,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2472
          end: 8,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2473
          onStart: function( options ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2474
            // called on start
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2475
          },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2476
          onEnd: function ( options ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2477
            // called on end
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2478
          }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2479
        })
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2480
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2481
        // onStart, onEnd, onFrame
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2482
        .code({
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2483
          start: 10,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2484
          end: 14,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2485
          onStart: function( options ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2486
            // called on start
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2487
          },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2488
          onFrame: function ( options ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2489
            // called on every paint frame between start and end.
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2490
            // uses mozRequestAnimationFrame, webkitRequestAnimationFrame,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2491
            // or setTimeout with 16ms window.
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2492
          },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2493
          onEnd: function ( options ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2494
            // called on end
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2495
          }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2496
        });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2497
  *
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2498
  */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2499
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2500
  Popcorn.plugin( "code" , function( options ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2501
    var running = false;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2502
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2503
    // Setup a proper frame interval function (60fps), favouring paint events.
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2504
    var step = (function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2505
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2506
      var buildFrameRunner = function( runner ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2507
        return function( f, options ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2508
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2509
          var _f = function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2510
            running && f();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2511
            running && runner( _f );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2512
          };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2513
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2514
          _f();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2515
        };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2516
      };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2517
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2518
      // Figure out which level of browser support we have for this
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2519
      if ( window.webkitRequestAnimationFrame ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2520
        return buildFrameRunner( window.webkitRequestAnimationFrame );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2521
      } else if ( window.mozRequestAnimationFrame ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2522
        return buildFrameRunner( window.mozRequestAnimationFrame );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2523
      } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2524
        return buildFrameRunner( function( f ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2525
          window.setTimeout( f, 16 );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2526
        });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2527
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2528
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2529
    })();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2530
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2531
    if ( !options.onStart || typeof options.onStart !== "function" ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2532
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2533
      if ( Popcorn.plugin.debug ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2534
        throw new Error( "Popcorn Code Plugin Error: onStart must be a function." );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2535
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2536
      options.onStart = Popcorn.nop;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2537
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2538
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2539
    if ( options.onEnd && typeof options.onEnd !== "function" ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2540
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2541
      if ( Popcorn.plugin.debug ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2542
        throw new Error( "Popcorn Code Plugin Error: onEnd  must be a function." );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2543
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2544
      options.onEnd = undefined;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2545
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2546
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2547
    if ( options.onFrame && typeof options.onFrame !== "function" ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2548
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2549
      if ( Popcorn.plugin.debug ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2550
        throw new Error( "Popcorn Code Plugin Error: onFrame  must be a function." );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2551
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2552
      options.onFrame = undefined;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2553
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2554
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2555
    return {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2556
      start: function( event, options ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2557
        options.onStart( options );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2558
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2559
        if ( options.onFrame ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2560
          running = true;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2561
          step( options.onFrame, options );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2562
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2563
      },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2564
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2565
      end: function( event, options ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2566
        if ( options.onFrame ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2567
          running = false;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2568
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2569
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2570
        if ( options.onEnd ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2571
          options.onEnd( options );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2572
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2573
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2574
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2575
  },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2576
  {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2577
    about: {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2578
      name: "Popcorn Code Plugin",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2579
      version: "0.1",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2580
      author: "David Humphrey (@humphd)",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2581
      website: "http://vocamus.net/dave"
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2582
    },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2583
    options: {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2584
      start: {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2585
       elem: "input",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2586
       type: "text",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2587
       label: "In"
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2588
      },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2589
      end: {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2590
        elem: "input",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2591
        type: "text",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2592
        label: "Out"
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2593
      },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2594
      onStart: {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2595
        elem: "input",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2596
        type: "function",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2597
        label: "onStart"
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2598
      },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2599
      onFrame: {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2600
        elem: "input",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2601
        type: "function",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2602
        label: "onFrame"
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2603
      },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2604
      onEnd: {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2605
        elem: "input",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2606
        type: "function",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2607
        label: "onEnd"
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2608
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2609
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2610
  });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2611
})( Popcorn );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2612
var jwplayerObjects = {};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2613
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2614
Popcorn.player( "jwplayer", {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2615
  _setup: function( options ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2616
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2617
    var media = this,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2618
        player = {},
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2619
        container = document.createElement( "div" ),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2620
        currentTime = 0,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2621
        seekTime = 0,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2622
        seeking = false,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2623
        dataLoaded = false;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2624
    container.id = media.id + Popcorn.guid();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2625
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2626
    media.appendChild( container );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2627
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2628
  var initApi = function () {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2629
    jwplayer( container.id ).onTime(function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2630
        currentTime = jwplayer(container.id).getPosition();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2631
        media.dispatchEvent( "timeupdate" );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2632
       // timeout = setTimeout( timeupdate, 10 );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2633
    });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2634
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2635
    media.play = function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2636
      media.paused = false;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2637
      media.dispatchEvent( "play" );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2638
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2639
      media.dispatchEvent( "playing" );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2640
      jwplayer( container.id ).play();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2641
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2642
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2643
    media.pause = function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2644
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2645
      if ( !media.paused ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2646
        media.paused = true;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2647
        media.dispatchEvent( "pause" );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2648
        jwplayer( container.id ).pause();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2649
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2650
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2651
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2652
    Popcorn.player.defineProperty( media, "currentTime", {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2653
          set: function( val ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2654
            // make sure val is a number
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2655
            currentTime = seekTime = +val;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2656
            seeking = true;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2657
            media.dispatchEvent( "seeked" );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2658
            media.dispatchEvent( "timeupdate" );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2659
            jwplayer( container.id ).seek( currentTime );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2660
            return currentTime;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2661
          },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2662
          get: function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2663
            return jwplayer( container.id ).getPosition();            
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2664
          }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2665
        });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2666
 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2667
    Popcorn.player.defineProperty( media, "muted", {   
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2668
        set: function( val ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2669
          if ( jwplayer( container.id ).getMute() !== val ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2670
            if ( val ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2671
              jwplayer( container.id ).setMute(true);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2672
            } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2673
              jwplayer( container.id ).setMute(false);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2674
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2675
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2676
            media.dispatchEvent( "volumechange" );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2677
          }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2678
          
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2679
          return jwplayer( container.id ).getMute();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2680
        },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2681
        get: function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2682
          return jwplayer( container.id ).getMute();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2683
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2684
    });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2685
  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2686
    Popcorn.player.defineProperty( media, "volume", {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2687
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2688
      set: function( val ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2689
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2690
        if ( jwplayer( container.id ).getVolume() !== val *100 ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2691
          jwplayer( container.id ).setVolume( val * 100);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2692
          media.dispatchEvent( "volumechange" );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2693
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2694
        
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2695
        return (jwplayer( container.id ).getVolume()) / 100;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2696
      },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2697
      
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2698
      get: function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2699
        return jwplayer( container.id ).getVolume() / 100;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2700
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2701
    });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2702
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2703
    media.readyState = 4;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2704
    media.dispatchEvent( 'load' );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2705
    dataLoaded = true;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2706
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2707
    media.duration = options.duration;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2708
    media.dispatchEvent( 'durationchange' );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2709
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2710
    media.paused && media.dispatchEvent( 'loadeddata' );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2711
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2712
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2713
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2714
    options.events = {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2715
        onReady: initApi
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2716
      };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2717
      
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2718
    jwplayer( container.id ).setup(options);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2719
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2720
  }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2721
});
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2722
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2723
// PLUGIN: Mediafragment
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2724
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2725
(function ( Popcorn ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2726
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2727
  /**
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2728
   * Mediafragment popcorn plug-in
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2729
   * Adds (limited) support for mediafragment requests
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2730
   * to a popcorn video.
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2731
   * @param {Object} options
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2732
   *
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2733
  **/
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2734
    Popcorn.plugin( "mediafragment" , {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2735
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2736
      manifest: {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2737
        about: {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2738
          name: "Popcorn mediafragment plugin",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2739
          version: "0.1",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2740
          author: "Karim Hamidou",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2741
          website: "http://neyret.fr/~karim"
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2742
        },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2743
        options: {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2744
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2745
      },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2746
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2747
    _setup: function( options ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2748
        var advanceTime = function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2749
              var url = window.location.href;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2750
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2751
              if ( url.split( "#" )[ 1 ] != null ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2752
                  pageoffset = url.split( "#" )[1];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2753
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2754
                  if ( pageoffset.substring( 2 ) != null ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2755
                    var offsettime = pageoffset.substring( 2 );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2756
                    this.currentTime( parseFloat( offsettime ) );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2757
                  }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2758
              }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2759
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2760
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2761
        var updateTime = function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2762
            var history = window.history;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2763
            if ( !history.pushState ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2764
              return false;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2765
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2766
            
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2767
            splitArr = window.location.href.split( "#" )
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2768
            history.replaceState( {}, "", splitArr[0] + "#t=" + this.currentTime().toFixed( 2 ) );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2769
        };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2770
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2771
        this.listen( "loadedmetadata", advanceTime );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2772
        this.listen( "pause", updateTime );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2773
        this.listen( "seeked", updateTime );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2774
    },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2775
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2776
    _teardown: function( options ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2777
      // FIXME: anything to implement here ?
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2778
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2779
  });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2780
})( Popcorn );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2781
if(typeof jwplayer=="undefined"){var jwplayer=function(a){if(jwplayer.api){return jwplayer.api.selectPlayer(a)}};var $jw=jwplayer;jwplayer.version="5.7.1896";jwplayer.vid=document.createElement("video");jwplayer.audio=document.createElement("audio");jwplayer.source=document.createElement("source");(function(b){b.utils=function(){};b.utils.typeOf=function(d){var c=typeof d;if(c==="object"){if(d){if(d instanceof Array){c="array"}}else{c="null"}}return c};b.utils.extend=function(){var c=b.utils.extend["arguments"];if(c.length>1){for(var e=1;e<c.length;e++){for(var d in c[e]){c[0][d]=c[e][d]}}return c[0]}return null};b.utils.clone=function(f){var c;var d=b.utils.clone["arguments"];if(d.length==1){switch(b.utils.typeOf(d[0])){case"object":c={};for(var e in d[0]){c[e]=b.utils.clone(d[0][e])}break;case"array":c=[];for(var e in d[0]){c[e]=b.utils.clone(d[0][e])}break;default:return d[0];break}}return c};b.utils.extension=function(c){if(!c){return""}c=c.substring(c.lastIndexOf("/")+1,c.length);c=c.split("?")[0];if(c.lastIndexOf(".")>-1){return c.substr(c.lastIndexOf(".")+1,c.length).toLowerCase()}return};b.utils.html=function(c,d){c.innerHTML=d};b.utils.wrap=function(c,d){if(c.parentNode){c.parentNode.replaceChild(d,c)}d.appendChild(c)};b.utils.ajax=function(g,f,c){var e;if(window.XMLHttpRequest){e=new XMLHttpRequest()}else{e=new ActiveXObject("Microsoft.XMLHTTP")}e.onreadystatechange=function(){if(e.readyState===4){if(e.status===200){if(f){f(e)}}else{if(c){c(g)}}}};try{e.open("GET",g,true);e.send(null)}catch(d){if(c){c(g)}}return e};b.utils.load=function(d,e,c){d.onreadystatechange=function(){if(d.readyState===4){if(d.status===200){if(e){e()}}else{if(c){c()}}}}};b.utils.find=function(d,c){return d.getElementsByTagName(c)};b.utils.append=function(c,d){c.appendChild(d)};b.utils.isIE=function(){return((!+"\v1")||(typeof window.ActiveXObject!="undefined"))};b.utils.isLegacyAndroid=function(){var c=navigator.userAgent.toLowerCase();return(c.match(/android 2.[012]/i)!==null)};b.utils.isIOS=function(d){if(typeof d=="undefined"){d=/iP(hone|ad|od)/i}var c=navigator.userAgent.toLowerCase();return(c.match(d)!==null)};b.utils.isIPad=function(){return b.utils.isIOS(/iPad/i)};b.utils.isIPod=function(){return b.utils.isIOS(/iP(hone|od)/i)};b.utils.getFirstPlaylistItemFromConfig=function(c){var d={};var e;if(c.playlist&&c.playlist.length){e=c.playlist[0]}else{e=c}d.file=e.file;d.levels=e.levels;d.streamer=e.streamer;d.playlistfile=e.playlistfile;d.provider=e.provider;if(!d.provider){if(d.file&&(d.file.toLowerCase().indexOf("youtube.com")>-1||d.file.toLowerCase().indexOf("youtu.be")>-1)){d.provider="youtube"}if(d.streamer&&d.streamer.toLowerCase().indexOf("rtmp://")==0){d.provider="rtmp"}if(e.type){d.provider=e.type.toLowerCase()}}if(d.provider=="audio"){d.provider="sound"}return d};b.utils.getOuterHTML=function(c){if(c.outerHTML){return c.outerHTML}else{try{return new XMLSerializer().serializeToString(c)}catch(d){return""}}};b.utils.setOuterHTML=function(f,e){if(f.outerHTML){f.outerHTML=e}else{var g=document.createElement("div");g.innerHTML=e;var c=document.createRange();c.selectNodeContents(g);var d=c.extractContents();f.parentNode.insertBefore(d,f);f.parentNode.removeChild(f)}};b.utils.hasFlash=function(){if(typeof navigator.plugins!="undefined"&&typeof navigator.plugins["Shockwave Flash"]!="undefined"){return true}if(typeof window.ActiveXObject!="undefined"){try{new ActiveXObject("ShockwaveFlash.ShockwaveFlash");return true}catch(c){}}return false};b.utils.getPluginName=function(c){if(c.lastIndexOf("/")>=0){c=c.substring(c.lastIndexOf("/")+1,c.length)}if(c.lastIndexOf("-")>=0){c=c.substring(0,c.lastIndexOf("-"))}if(c.lastIndexOf(".swf")>=0){c=c.substring(0,c.lastIndexOf(".swf"))}if(c.lastIndexOf(".js")>=0){c=c.substring(0,c.lastIndexOf(".js"))}return c};b.utils.getPluginVersion=function(c){if(c.lastIndexOf("-")>=0){if(c.lastIndexOf(".js")>=0){return c.substring(c.lastIndexOf("-")+1,c.lastIndexOf(".js"))}else{if(c.lastIndexOf(".swf")>=0){return c.substring(c.lastIndexOf("-")+1,c.lastIndexOf(".swf"))}else{return c.substring(c.lastIndexOf("-")+1)}}}return""};b.utils.getAbsolutePath=function(j,h){if(!b.utils.exists(h)){h=document.location.href}if(!b.utils.exists(j)){return undefined}if(a(j)){return j}var k=h.substring(0,h.indexOf("://")+3);var g=h.substring(k.length,h.indexOf("/",k.length+1));var d;if(j.indexOf("/")===0){d=j.split("/")}else{var e=h.split("?")[0];e=e.substring(k.length+g.length+1,e.lastIndexOf("/"));d=e.split("/").concat(j.split("/"))}var c=[];for(var f=0;f<d.length;f++){if(!d[f]||!b.utils.exists(d[f])||d[f]=="."){continue}else{if(d[f]==".."){c.pop()}else{c.push(d[f])}}}return k+g+"/"+c.join("/")};function a(d){if(!b.utils.exists(d)){return}var e=d.indexOf("://");var c=d.indexOf("?");return(e>0&&(c<0||(c>e)))}b.utils.pluginPathType={ABSOLUTE:"ABSOLUTE",RELATIVE:"RELATIVE",CDN:"CDN"};b.utils.getPluginPathType=function(d){if(typeof d!="string"){return}d=d.split("?")[0];var e=d.indexOf("://");if(e>0){return b.utils.pluginPathType.ABSOLUTE}var c=d.indexOf("/");var f=b.utils.extension(d);if(e<0&&c<0&&(!f||!isNaN(f))){return b.utils.pluginPathType.CDN}return b.utils.pluginPathType.RELATIVE};b.utils.mapEmpty=function(c){for(var d in c){return false}return true};b.utils.mapLength=function(d){var c=0;for(var e in d){c++}return c};b.utils.log=function(d,c){if(typeof console!="undefined"&&typeof console.log!="undefined"){if(c){console.log(d,c)}else{console.log(d)}}};b.utils.css=function(d,g,c){if(b.utils.exists(d)){for(var e in g){try{if(typeof g[e]==="undefined"){continue}else{if(typeof g[e]=="number"&&!(e=="zIndex"||e=="opacity")){if(isNaN(g[e])){continue}if(e.match(/color/i)){g[e]="#"+b.utils.strings.pad(g[e].toString(16),6)}else{g[e]=Math.ceil(g[e])+"px"}}}d.style[e]=g[e]}catch(f){}}}};b.utils.isYouTube=function(c){return(c.indexOf("youtube.com")>-1||c.indexOf("youtu.be")>-1)};b.utils.transform=function(c,d){c.style.webkitTransform=d;c.style.MozTransform=d;c.style.OTransform=d};b.utils.stretch=function(h,n,m,f,l,g){if(typeof m=="undefined"||typeof f=="undefined"||typeof l=="undefined"||typeof g=="undefined"){return}var d=m/l;var e=f/g;var k=0;var j=0;n.style.overflow="hidden";b.utils.transform(n,"");var c={};switch(h.toUpperCase()){case b.utils.stretching.NONE:c.width=l;c.height=g;break;case b.utils.stretching.UNIFORM:if(d>e){c.width=l*e;c.height=g*e}else{c.width=l*d;c.height=g*d}break;case b.utils.stretching.FILL:if(d>e){c.width=l*d;c.height=g*d}else{c.width=l*e;c.height=g*e}break;case b.utils.stretching.EXACTFIT:b.utils.transform(n,["scale(",d,",",e,")"," translate(0px,0px)"].join(""));c.width=l;c.height=g;break;default:break}c.top=(f-c.height)/2;c.left=(m-c.width)/2;b.utils.css(n,c)};b.utils.stretching={NONE:"NONE",FILL:"FILL",UNIFORM:"UNIFORM",EXACTFIT:"EXACTFIT"};b.utils.deepReplaceKeyName=function(h,e,c){switch(b.utils.typeOf(h)){case"array":for(var g=0;g<h.length;g++){h[g]=b.utils.deepReplaceKeyName(h[g],e,c)}break;case"object":for(var f in h){var d=f.replace(new RegExp(e,"g"),c);h[d]=b.utils.deepReplaceKeyName(h[f],e,c);if(f!=d){delete h[f]}}break}return h};b.utils.isInArray=function(e,d){if(!(e)||!(e instanceof Array)){return false}for(var c=0;c<e.length;c++){if(d===e[c]){return true}}return false};b.utils.exists=function(c){switch(typeof(c)){case"string":return(c.length>0);break;case"object":return(c!==null);case"undefined":return false}return true};b.utils.empty=function(c){if(typeof c.hasChildNodes=="function"){while(c.hasChildNodes()){c.removeChild(c.firstChild)}}};b.utils.parseDimension=function(c){if(typeof c=="string"){if(c===""){return 0}else{if(c.lastIndexOf("%")>-1){return c}else{return parseInt(c.replace("px",""),10)}}}return c};b.utils.getDimensions=function(c){if(c&&c.style){return{x:b.utils.parseDimension(c.style.left),y:b.utils.parseDimension(c.style.top),width:b.utils.parseDimension(c.style.width),height:b.utils.parseDimension(c.style.height)}}else{return{}}};b.utils.timeFormat=function(c){str="00:00";if(c>0){str=Math.floor(c/60)<10?"0"+Math.floor(c/60)+":":Math.floor(c/60)+":";str+=Math.floor(c%60)<10?"0"+Math.floor(c%60):Math.floor(c%60)}return str}})(jwplayer);(function(a){a.events=function(){};a.events.COMPLETE="COMPLETE";a.events.ERROR="ERROR"})(jwplayer);(function(jwplayer){jwplayer.events.eventdispatcher=function(debug){var _debug=debug;var _listeners;var _globallisteners;this.resetEventListeners=function(){_listeners={};_globallisteners=[]};this.resetEventListeners();this.addEventListener=function(type,listener,count){try{if(!jwplayer.utils.exists(_listeners[type])){_listeners[type]=[]}if(typeof(listener)=="string"){eval("listener = "+listener)}_listeners[type].push({listener:listener,count:count})}catch(err){jwplayer.utils.log("error",err)}return false};this.removeEventListener=function(type,listener){if(!_listeners[type]){return}try{for(var listenerIndex=0;listenerIndex<_listeners[type].length;listenerIndex++){if(_listeners[type][listenerIndex].listener.toString()==listener.toString()){_listeners[type].splice(listenerIndex,1);break}}}catch(err){jwplayer.utils.log("error",err)}return false};this.addGlobalListener=function(listener,count){try{if(typeof(listener)=="string"){eval("listener = "+listener)}_globallisteners.push({listener:listener,count:count})}catch(err){jwplayer.utils.log("error",err)}return false};this.removeGlobalListener=function(listener){if(!_globallisteners[type]){return}try{for(var globalListenerIndex=0;globalListenerIndex<_globallisteners.length;globalListenerIndex++){if(_globallisteners[globalListenerIndex].listener.toString()==listener.toString()){_globallisteners.splice(globalListenerIndex,1);break}}}catch(err){jwplayer.utils.log("error",err)}return false};this.sendEvent=function(type,data){if(!jwplayer.utils.exists(data)){data={}}if(_debug){jwplayer.utils.log(type,data)}if(typeof _listeners[type]!="undefined"){for(var listenerIndex=0;listenerIndex<_listeners[type].length;listenerIndex++){try{_listeners[type][listenerIndex].listener(data)}catch(err){jwplayer.utils.log("There was an error while handling a listener: "+err.toString(),_listeners[type][listenerIndex].listener)}if(_listeners[type][listenerIndex]){if(_listeners[type][listenerIndex].count===1){delete _listeners[type][listenerIndex]}else{if(_listeners[type][listenerIndex].count>0){_listeners[type][listenerIndex].count=_listeners[type][listenerIndex].count-1}}}}}for(var globalListenerIndex=0;globalListenerIndex<_globallisteners.length;globalListenerIndex++){try{_globallisteners[globalListenerIndex].listener(data)}catch(err){jwplayer.utils.log("There was an error while handling a listener: "+err.toString(),_globallisteners[globalListenerIndex].listener)}if(_globallisteners[globalListenerIndex]){if(_globallisteners[globalListenerIndex].count===1){delete _globallisteners[globalListenerIndex]}else{if(_globallisteners[globalListenerIndex].count>0){_globallisteners[globalListenerIndex].count=_globallisteners[globalListenerIndex].count-1}}}}}}})(jwplayer);(function(a){var b={};a.utils.animations=function(){};a.utils.animations.transform=function(c,d){c.style.webkitTransform=d;c.style.MozTransform=d;c.style.OTransform=d;c.style.msTransform=d};a.utils.animations.transformOrigin=function(c,d){c.style.webkitTransformOrigin=d;c.style.MozTransformOrigin=d;c.style.OTransformOrigin=d;c.style.msTransformOrigin=d};a.utils.animations.rotate=function(c,d){a.utils.animations.transform(c,["rotate(",d,"deg)"].join(""))};a.utils.cancelAnimation=function(c){delete b[c.id]};a.utils.fadeTo=function(m,f,e,j,h,d){if(b[m.id]!=d&&a.utils.exists(d)){return}if(m.style.opacity==f){return}var c=new Date().getTime();if(d>c){setTimeout(function(){a.utils.fadeTo(m,f,e,j,0,d)},d-c)}if(m.style.display=="none"){m.style.display="block"}if(!a.utils.exists(j)){j=m.style.opacity===""?1:m.style.opacity}if(m.style.opacity==f&&m.style.opacity!==""&&a.utils.exists(d)){if(f===0){m.style.display="none"}return}if(!a.utils.exists(d)){d=c;b[m.id]=d}if(!a.utils.exists(h)){h=0}var k=(e>0)?((c-d)/(e*1000)):0;k=k>1?1:k;var l=f-j;var g=j+(k*l);if(g>1){g=1}else{if(g<0){g=0}}m.style.opacity=g;if(h>0){b[m.id]=d+h*1000;a.utils.fadeTo(m,f,e,j,0,b[m.id]);return}setTimeout(function(){a.utils.fadeTo(m,f,e,j,0,d)},10)}})(jwplayer);(function(a){a.utils.arrays=function(){};a.utils.arrays.indexOf=function(c,d){for(var b=0;b<c.length;b++){if(c[b]==d){return b}}return -1};a.utils.arrays.remove=function(c,d){var b=a.utils.arrays.indexOf(c,d);if(b>-1){c.splice(b,1)}}})(jwplayer);(function(a){a.utils.extensionmap={"3gp":{html5:"video/3gpp",flash:"video"},"3gpp":{html5:"video/3gpp"},"3g2":{html5:"video/3gpp2",flash:"video"},"3gpp2":{html5:"video/3gpp2"},flv:{flash:"video"},f4a:{html5:"audio/mp4"},f4b:{html5:"audio/mp4",flash:"video"},f4v:{html5:"video/mp4",flash:"video"},mov:{html5:"video/quicktime",flash:"video"},m4a:{html5:"audio/mp4",flash:"video"},m4b:{html5:"audio/mp4"},m4p:{html5:"audio/mp4"},m4v:{html5:"video/mp4",flash:"video"},mp4:{html5:"video/mp4",flash:"video"},rbs:{flash:"sound"},aac:{html5:"audio/aac",flash:"video"},mp3:{html5:"audio/mp3",flash:"sound"},ogg:{html5:"audio/ogg"},oga:{html5:"audio/ogg"},ogv:{html5:"video/ogg"},webm:{html5:"video/webm"},m3u8:{html5:"audio/x-mpegurl"},gif:{flash:"image"},jpeg:{flash:"image"},jpg:{flash:"image"},swf:{flash:"image"},png:{flash:"image"},wav:{html5:"audio/x-wav"}}})(jwplayer);(function(e){e.utils.mediaparser=function(){};var g={element:{width:"width",height:"height",id:"id","class":"className",name:"name"},media:{src:"file",preload:"preload",autoplay:"autostart",loop:"repeat",controls:"controls"},source:{src:"file",type:"type",media:"media","data-jw-width":"width","data-jw-bitrate":"bitrate"},video:{poster:"image"}};var f={};e.utils.mediaparser.parseMedia=function(j){return d(j)};function c(k,j){if(!e.utils.exists(j)){j=g[k]}else{e.utils.extend(j,g[k])}return j}function d(n,j){if(f[n.tagName.toLowerCase()]&&!e.utils.exists(j)){return f[n.tagName.toLowerCase()](n)}else{j=c("element",j);var o={};for(var k in j){if(k!="length"){var m=n.getAttribute(k);if(e.utils.exists(m)){o[j[k]]=m}}}var l=n.style["#background-color"];if(l&&!(l=="transparent"||l=="rgba(0, 0, 0, 0)")){o.screencolor=l}return o}}function h(n,k){k=c("media",k);var l=[];var j=e.utils.selectors("source",n);for(var m in j){if(!isNaN(m)){l.push(a(j[m]))}}var o=d(n,k);if(e.utils.exists(o.file)){l[0]={file:o.file}}o.levels=l;return o}function a(l,k){k=c("source",k);var j=d(l,k);j.width=j.width?j.width:0;j.bitrate=j.bitrate?j.bitrate:0;return j}function b(l,k){k=c("video",k);var j=h(l,k);return j}f.media=h;f.audio=h;f.source=a;f.video=b})(jwplayer);(function(a){a.utils.loaderstatus={NEW:"NEW",LOADING:"LOADING",ERROR:"ERROR",COMPLETE:"COMPLETE"};a.utils.scriptloader=function(c){var d=a.utils.loaderstatus.NEW;var b=new a.events.eventdispatcher();a.utils.extend(this,b);this.load=function(){if(d==a.utils.loaderstatus.NEW){d=a.utils.loaderstatus.LOADING;var e=document.createElement("script");e.onload=function(f){d=a.utils.loaderstatus.COMPLETE;b.sendEvent(a.events.COMPLETE)};e.onerror=function(f){d=a.utils.loaderstatus.ERROR;b.sendEvent(a.events.ERROR)};e.onreadystatechange=function(){if(e.readyState=="loaded"||e.readyState=="complete"){d=a.utils.loaderstatus.COMPLETE;b.sendEvent(a.events.COMPLETE)}};document.getElementsByTagName("head")[0].appendChild(e);e.src=c}};this.getStatus=function(){return d}}})(jwplayer);(function(a){a.utils.selectors=function(b,e){if(!a.utils.exists(e)){e=document}b=a.utils.strings.trim(b);var c=b.charAt(0);if(c=="#"){return e.getElementById(b.substr(1))}else{if(c=="."){if(e.getElementsByClassName){return e.getElementsByClassName(b.substr(1))}else{return a.utils.selectors.getElementsByTagAndClass("*",b.substr(1))}}else{if(b.indexOf(".")>0){var d=b.split(".");return a.utils.selectors.getElementsByTagAndClass(d[0],d[1])}else{return e.getElementsByTagName(b)}}}return null};a.utils.selectors.getElementsByTagAndClass=function(e,h,g){var j=[];if(!a.utils.exists(g)){g=document}var f=g.getElementsByTagName(e);for(var d=0;d<f.length;d++){if(a.utils.exists(f[d].className)){var c=f[d].className.split(" ");for(var b=0;b<c.length;b++){if(c[b]==h){j.push(f[d])}}}}return j}})(jwplayer);(function(a){a.utils.strings=function(){};a.utils.strings.trim=function(b){return b.replace(/^\s*/,"").replace(/\s*$/,"")};a.utils.strings.pad=function(c,d,b){if(!b){b="0"}while(c.length<d){c=b+c}return c};a.utils.strings.serialize=function(b){if(b==null){return null}else{if(b=="true"){return true}else{if(b=="false"){return false}else{if(isNaN(Number(b))||b.length>5||b.length==0){return b}else{return Number(b)}}}}};a.utils.strings.seconds=function(d){d=d.replace(",",".");var b=d.split(":");var c=0;if(d.substr(-1)=="s"){c=Number(d.substr(0,d.length-1))}else{if(d.substr(-1)=="m"){c=Number(d.substr(0,d.length-1))*60}else{if(d.substr(-1)=="h"){c=Number(d.substr(0,d.length-1))*3600}else{if(b.length>1){c=Number(b[b.length-1]);c+=Number(b[b.length-2])*60;if(b.length==3){c+=Number(b[b.length-3])*3600}}else{c=Number(d)}}}}return c};a.utils.strings.xmlAttribute=function(b,c){for(var d=0;d<b.attributes.length;d++){if(b.attributes[d].name&&b.attributes[d].name.toLowerCase()==c.toLowerCase()){return b.attributes[d].value.toString()}}return""};a.utils.strings.jsonToString=function(f){var h=h||{};if(h&&h.stringify){return h.stringify(f)}var c=typeof(f);if(c!="object"||f===null){if(c=="string"){f='"'+f+'"'}else{return String(f)}}else{var g=[],b=(f&&f.constructor==Array);for(var d in f){var e=f[d];switch(typeof(e)){case"string":e='"'+e+'"';break;case"object":if(a.utils.exists(e)){e=a.utils.strings.jsonToString(e)}break}if(b){if(typeof(e)!="function"){g.push(String(e))}}else{if(typeof(e)!="function"){g.push('"'+d+'":'+String(e))}}}if(b){return"["+String(g)+"]"}else{return"{"+String(g)+"}"}}}})(jwplayer);(function(c){var d=new RegExp(/^(#|0x)[0-9a-fA-F]{3,6}/);c.utils.typechecker=function(g,f){f=!c.utils.exists(f)?b(g):f;return e(g,f)};function b(f){var g=["true","false","t","f"];if(g.toString().indexOf(f.toLowerCase().replace(" ",""))>=0){return"boolean"}else{if(d.test(f)){return"color"}else{if(!isNaN(parseInt(f,10))&&parseInt(f,10).toString().length==f.length){return"integer"}else{if(!isNaN(parseFloat(f))&&parseFloat(f).toString().length==f.length){return"float"}}}}return"string"}function e(g,f){if(!c.utils.exists(f)){return g}switch(f){case"color":if(g.length>0){return a(g)}return null;case"integer":return parseInt(g,10);case"float":return parseFloat(g);case"boolean":if(g.toLowerCase()=="true"){return true}else{if(g=="1"){return true}}return false}return g}function a(f){switch(f.toLowerCase()){case"blue":return parseInt("0000FF",16);case"green":return parseInt("00FF00",16);case"red":return parseInt("FF0000",16);case"cyan":return parseInt("00FFFF",16);case"magenta":return parseInt("FF00FF",16);case"yellow":return parseInt("FFFF00",16);case"black":return parseInt("000000",16);case"white":return parseInt("FFFFFF",16);default:f=f.replace(/(#|0x)?([0-9A-F]{3,6})$/gi,"$2");if(f.length==3){f=f.charAt(0)+f.charAt(0)+f.charAt(1)+f.charAt(1)+f.charAt(2)+f.charAt(2)}return parseInt(f,16)}return parseInt("000000",16)}})(jwplayer);(function(a){a.utils.parsers=function(){};a.utils.parsers.localName=function(b){if(!b){return""}else{if(b.localName){return b.localName}else{if(b.baseName){return b.baseName}else{return""}}}};a.utils.parsers.textContent=function(b){if(!b){return""}else{if(b.textContent){return b.textContent}else{if(b.text){return b.text}else{return""}}}}})(jwplayer);(function(a){a.utils.parsers.jwparser=function(){};a.utils.parsers.jwparser.PREFIX="jwplayer";a.utils.parsers.jwparser.parseEntry=function(c,d){for(var b=0;b<c.childNodes.length;b++){if(c.childNodes[b].prefix==a.utils.parsers.jwparser.PREFIX){d[a.utils.parsers.localName(c.childNodes[b])]=a.utils.strings.serialize(a.utils.parsers.textContent(c.childNodes[b]))}if(!d.file&&String(d.link).toLowerCase().indexOf("youtube")>-1){d.file=d.link}}return d};a.utils.parsers.jwparser.getProvider=function(c){if(c.type){return c.type}else{if(c.file.indexOf("youtube.com/w")>-1||c.file.indexOf("youtube.com/v")>-1||c.file.indexOf("youtu.be/")>-1){return"youtube"}else{if(c.streamer&&c.streamer.indexOf("rtmp")==0){return"rtmp"}else{if(c.streamer&&c.streamer.indexOf("http")==0){return"http"}else{var b=a.utils.strings.extension(c.file);if(extensions.hasOwnProperty(b)){return extensions[b]}}}}}return""}})(jwplayer);(function(a){a.utils.parsers.mediaparser=function(){};a.utils.parsers.mediaparser.PREFIX="media";a.utils.parsers.mediaparser.parseGroup=function(d,f){var e=false;for(var c=0;c<d.childNodes.length;c++){if(d.childNodes[c].prefix==a.utils.parsers.mediaparser.PREFIX){if(!a.utils.parsers.localName(d.childNodes[c])){continue}switch(a.utils.parsers.localName(d.childNodes[c]).toLowerCase()){case"content":if(!e){f.file=a.utils.strings.xmlAttribute(d.childNodes[c],"url")}if(a.utils.strings.xmlAttribute(d.childNodes[c],"duration")){f.duration=a.utils.strings.seconds(a.utils.strings.xmlAttribute(d.childNodes[c],"duration"))}if(a.utils.strings.xmlAttribute(d.childNodes[c],"start")){f.start=a.utils.strings.seconds(a.utils.strings.xmlAttribute(d.childNodes[c],"start"))}if(d.childNodes[c].childNodes&&d.childNodes[c].childNodes.length>0){f=a.utils.parsers.mediaparser.parseGroup(d.childNodes[c],f)}if(a.utils.strings.xmlAttribute(d.childNodes[c],"width")||a.utils.strings.xmlAttribute(d.childNodes[c],"bitrate")||a.utils.strings.xmlAttribute(d.childNodes[c],"url")){if(!f.levels){f.levels=[]}f.levels.push({width:a.utils.strings.xmlAttribute(d.childNodes[c],"width"),bitrate:a.utils.strings.xmlAttribute(d.childNodes[c],"bitrate"),file:a.utils.strings.xmlAttribute(d.childNodes[c],"url")})}break;case"title":f.title=a.utils.parsers.textContent(d.childNodes[c]);break;case"description":f.description=a.utils.parsers.textContent(d.childNodes[c]);break;case"keywords":f.tags=a.utils.parsers.textContent(d.childNodes[c]);break;case"thumbnail":f.image=a.utils.strings.xmlAttribute(d.childNodes[c],"url");break;case"credit":f.author=a.utils.parsers.textContent(d.childNodes[c]);break;case"player":var b=d.childNodes[c].url;if(b.indexOf("youtube.com")>=0||b.indexOf("youtu.be")>=0){e=true;f.file=a.utils.strings.xmlAttribute(d.childNodes[c],"url")}break;case"group":a.utils.parsers.mediaparser.parseGroup(d.childNodes[c],f);break}}}return f}})(jwplayer);(function(b){b.utils.parsers.rssparser=function(){};b.utils.parsers.rssparser.parse=function(f){var c=[];for(var e=0;e<f.childNodes.length;e++){if(b.utils.parsers.localName(f.childNodes[e]).toLowerCase()=="channel"){for(var d=0;d<f.childNodes[e].childNodes.length;d++){if(b.utils.parsers.localName(f.childNodes[e].childNodes[d]).toLowerCase()=="item"){c.push(a(f.childNodes[e].childNodes[d]))}}}}return c};function a(d){var e={};for(var c=0;c<d.childNodes.length;c++){if(!b.utils.parsers.localName(d.childNodes[c])){continue}switch(b.utils.parsers.localName(d.childNodes[c]).toLowerCase()){case"enclosure":e.file=b.utils.strings.xmlAttribute(d.childNodes[c],"url");break;case"title":e.title=b.utils.parsers.textContent(d.childNodes[c]);break;case"pubdate":e.date=b.utils.parsers.textContent(d.childNodes[c]);break;case"description":e.description=b.utils.parsers.textContent(d.childNodes[c]);break;case"link":e.link=b.utils.parsers.textContent(d.childNodes[c]);break;case"category":if(e.tags){e.tags+=b.utils.parsers.textContent(d.childNodes[c])}else{e.tags=b.utils.parsers.textContent(d.childNodes[c])}break}}e=b.utils.parsers.mediaparser.parseGroup(d,e);e=b.utils.parsers.jwparser.parseEntry(d,e);return new b.html5.playlistitem(e)}})(jwplayer);(function(a){var c={};var b={};a.plugins=function(){};a.plugins.loadPlugins=function(e,d){b[e]=new a.plugins.pluginloader(new a.plugins.model(c),d);return b[e]};a.plugins.registerPlugin=function(h,f,e){var d=a.utils.getPluginName(h);if(c[d]){c[d].registerPlugin(h,f,e)}else{a.utils.log("A plugin ("+h+") was registered with the player that was not loaded. Please check your configuration.");for(var g in b){b[g].pluginFailed()}}}})(jwplayer);(function(a){a.plugins.model=function(b){this.addPlugin=function(c){var d=a.utils.getPluginName(c);if(!b[d]){b[d]=new a.plugins.plugin(c)}return b[d]}}})(jwplayer);(function(a){a.plugins.pluginmodes={FLASH:"FLASH",JAVASCRIPT:"JAVASCRIPT",HYBRID:"HYBRID"};a.plugins.plugin=function(b){var d="http://plugins.longtailvideo.com";var j=a.utils.loaderstatus.NEW;var k;var h;var l;var c=new a.events.eventdispatcher();a.utils.extend(this,c);function e(){switch(a.utils.getPluginPathType(b)){case a.utils.pluginPathType.ABSOLUTE:return b;case a.utils.pluginPathType.RELATIVE:return a.utils.getAbsolutePath(b,window.location.href);case a.utils.pluginPathType.CDN:var n=a.utils.getPluginName(b);var m=a.utils.getPluginVersion(b);return d+"/"+a.version.split(".")[0]+"/"+n+"/"+n+(m!==""?("-"+m):"")+".js"}}function g(m){l=setTimeout(function(){j=a.utils.loaderstatus.COMPLETE;c.sendEvent(a.events.COMPLETE)},1000)}function f(m){j=a.utils.loaderstatus.ERROR;c.sendEvent(a.events.ERROR)}this.load=function(){if(j==a.utils.loaderstatus.NEW){if(b.lastIndexOf(".swf")>0){k=b;j=a.utils.loaderstatus.COMPLETE;c.sendEvent(a.events.COMPLETE);return}j=a.utils.loaderstatus.LOADING;var m=new a.utils.scriptloader(e());m.addEventListener(a.events.COMPLETE,g);m.addEventListener(a.events.ERROR,f);m.load()}};this.registerPlugin=function(o,n,m){if(l){clearTimeout(l);l=undefined}if(n&&m){k=m;h=n}else{if(typeof n=="string"){k=n}else{if(typeof n=="function"){h=n}else{if(!n&&!m){k=o}}}}j=a.utils.loaderstatus.COMPLETE;c.sendEvent(a.events.COMPLETE)};this.getStatus=function(){return j};this.getPluginName=function(){return a.utils.getPluginName(b)};this.getFlashPath=function(){if(k){switch(a.utils.getPluginPathType(k)){case a.utils.pluginPathType.ABSOLUTE:return k;case a.utils.pluginPathType.RELATIVE:if(b.lastIndexOf(".swf")>0){return a.utils.getAbsolutePath(k,window.location.href)}return a.utils.getAbsolutePath(k,e());case a.utils.pluginPathType.CDN:if(k.indexOf("-")>-1){return k+"h"}return k+"-h"}}return null};this.getJS=function(){return h};this.getPluginmode=function(){if(typeof k!="undefined"&&typeof h!="undefined"){return a.plugins.pluginmodes.HYBRID}else{if(typeof k!="undefined"){return a.plugins.pluginmodes.FLASH}else{if(typeof h!="undefined"){return a.plugins.pluginmodes.JAVASCRIPT}}}};this.getNewInstance=function(n,m,o){return new h(n,m,o)};this.getURL=function(){return b}}})(jwplayer);(function(a){a.plugins.pluginloader=function(h,e){var g={};var k=a.utils.loaderstatus.NEW;var d=false;var b=false;var c=new a.events.eventdispatcher();a.utils.extend(this,c);function f(){if(!b){b=true;k=a.utils.loaderstatus.COMPLETE;c.sendEvent(a.events.COMPLETE)}}function j(){if(!b){var m=0;for(plugin in g){var l=g[plugin].getStatus();if(l==a.utils.loaderstatus.LOADING||l==a.utils.loaderstatus.NEW){m++}}if(m==0){f()}}}this.setupPlugins=function(n,l,s){var m={length:0,plugins:{}};var p={length:0,plugins:{}};for(var o in g){var q=g[o].getPluginName();if(g[o].getFlashPath()){m.plugins[g[o].getFlashPath()]=l.plugins[o];m.plugins[g[o].getFlashPath()].pluginmode=g[o].getPluginmode();m.length++}if(g[o].getJS()){var r=document.createElement("div");r.id=n.id+"_"+q;r.style.position="absolute";r.style.zIndex=p.length+10;p.plugins[q]=g[o].getNewInstance(n,l.plugins[o],r);p.length++;if(typeof p.plugins[q].resize!="undefined"){n.onReady(s(p.plugins[q],r,true));n.onResize(s(p.plugins[q],r))}}}n.plugins=p.plugins;return m};this.load=function(){k=a.utils.loaderstatus.LOADING;d=true;for(var l in e){if(a.utils.exists(l)){g[l]=h.addPlugin(l);g[l].addEventListener(a.events.COMPLETE,j);g[l].addEventListener(a.events.ERROR,j)}}for(l in g){g[l].load()}d=false;j()};this.pluginFailed=function(){f()};this.getStatus=function(){return k}}})(jwplayer);(function(b){var a=[];b.api=function(d){this.container=d;this.id=d.id;var n={};var s={};var q={};var c=[];var h=undefined;var l=false;var j=[];var p=b.utils.getOuterHTML(d);var r={};var k={};this.getBuffer=function(){return this.callInternal("jwGetBuffer")};this.getContainer=function(){return this.container};function e(u,t){return function(z,v,w,x){if(u.renderingMode=="flash"||u.renderingMode=="html5"){var y;if(v){k[z]=v;y="jwplayer('"+u.id+"').callback('"+z+"')"}else{if(!v&&k[z]){delete k[z]}}h.jwDockSetButton(z,y,w,x)}return t}}this.getPlugin=function(t){var v=this;var u={};if(t=="dock"){return b.utils.extend(u,{setButton:e(v,u),show:function(){v.callInternal("jwDockShow");return u},hide:function(){v.callInternal("jwDockHide");return u},onShow:function(w){v.componentListener("dock",b.api.events.JWPLAYER_COMPONENT_SHOW,w);return u},onHide:function(w){v.componentListener("dock",b.api.events.JWPLAYER_COMPONENT_HIDE,w);return u}})}else{if(t=="controlbar"){return b.utils.extend(u,{show:function(){v.callInternal("jwControlbarShow");return u},hide:function(){v.callInternal("jwControlbarHide");return u},onShow:function(w){v.componentListener("controlbar",b.api.events.JWPLAYER_COMPONENT_SHOW,w);return u},onHide:function(w){v.componentListener("controlbar",b.api.events.JWPLAYER_COMPONENT_HIDE,w);return u}})}else{if(t=="display"){return b.utils.extend(u,{show:function(){v.callInternal("jwDisplayShow");return u},hide:function(){v.callInternal("jwDisplayHide");return u},onShow:function(w){v.componentListener("display",b.api.events.JWPLAYER_COMPONENT_SHOW,w);return u},onHide:function(w){v.componentListener("display",b.api.events.JWPLAYER_COMPONENT_HIDE,w);return u}})}else{return this.plugins[t]}}}};this.callback=function(t){if(k[t]){return k[t]()}};this.getDuration=function(){return this.callInternal("jwGetDuration")};this.getFullscreen=function(){return this.callInternal("jwGetFullscreen")};this.getHeight=function(){return this.callInternal("jwGetHeight")};this.getLockState=function(){return this.callInternal("jwGetLockState")};this.getMeta=function(){return this.getItemMeta()};this.getMute=function(){return this.callInternal("jwGetMute")};this.getPlaylist=function(){var u=this.callInternal("jwGetPlaylist");if(this.renderingMode=="flash"){b.utils.deepReplaceKeyName(u,"__dot__",".")}for(var t=0;t<u.length;t++){if(!b.utils.exists(u[t].index)){u[t].index=t}}return u};this.getPlaylistItem=function(t){if(!b.utils.exists(t)){t=this.getCurrentItem()}return this.getPlaylist()[t]};this.getPosition=function(){return this.callInternal("jwGetPosition")};this.getRenderingMode=function(){return this.renderingMode};this.getState=function(){return this.callInternal("jwGetState")};this.getVolume=function(){return this.callInternal("jwGetVolume")};this.getWidth=function(){return this.callInternal("jwGetWidth")};this.setFullscreen=function(t){if(!b.utils.exists(t)){this.callInternal("jwSetFullscreen",!this.callInternal("jwGetFullscreen"))}else{this.callInternal("jwSetFullscreen",t)}return this};this.setMute=function(t){if(!b.utils.exists(t)){this.callInternal("jwSetMute",!this.callInternal("jwGetMute"))}else{this.callInternal("jwSetMute",t)}return this};this.lock=function(){return this};this.unlock=function(){return this};this.load=function(t){this.callInternal("jwLoad",t);return this};this.playlistItem=function(t){this.callInternal("jwPlaylistItem",t);return this};this.playlistPrev=function(){this.callInternal("jwPlaylistPrev");return this};this.playlistNext=function(){this.callInternal("jwPlaylistNext");return this};this.resize=function(u,t){if(this.renderingMode=="html5"){h.jwResize(u,t)}else{this.container.width=u;this.container.height=t}return this};this.play=function(t){if(typeof t=="undefined"){t=this.getState();if(t==b.api.events.state.PLAYING||t==b.api.events.state.BUFFERING){this.callInternal("jwPause")}else{this.callInternal("jwPlay")}}else{this.callInternal("jwPlay",t)}return this};this.pause=function(t){if(typeof t=="undefined"){t=this.getState();if(t==b.api.events.state.PLAYING||t==b.api.events.state.BUFFERING){this.callInternal("jwPause")}else{this.callInternal("jwPlay")}}else{this.callInternal("jwPause",t)}return this};this.stop=function(){this.callInternal("jwStop");return this};this.seek=function(t){this.callInternal("jwSeek",t);return this};this.setVolume=function(t){this.callInternal("jwSetVolume",t);return this};this.onBufferChange=function(t){return this.eventListener(b.api.events.JWPLAYER_MEDIA_BUFFER,t)};this.onBufferFull=function(t){return this.eventListener(b.api.events.JWPLAYER_MEDIA_BUFFER_FULL,t)};this.onError=function(t){return this.eventListener(b.api.events.JWPLAYER_ERROR,t)};this.onFullscreen=function(t){return this.eventListener(b.api.events.JWPLAYER_FULLSCREEN,t)};this.onMeta=function(t){return this.eventListener(b.api.events.JWPLAYER_MEDIA_META,t)};this.onMute=function(t){return this.eventListener(b.api.events.JWPLAYER_MEDIA_MUTE,t)};this.onPlaylist=function(t){return this.eventListener(b.api.events.JWPLAYER_PLAYLIST_LOADED,t)};this.onPlaylistItem=function(t){return this.eventListener(b.api.events.JWPLAYER_PLAYLIST_ITEM,t)};this.onReady=function(t){return this.eventListener(b.api.events.API_READY,t)};this.onResize=function(t){return this.eventListener(b.api.events.JWPLAYER_RESIZE,t)};this.onComplete=function(t){return this.eventListener(b.api.events.JWPLAYER_MEDIA_COMPLETE,t)};this.onSeek=function(t){return this.eventListener(b.api.events.JWPLAYER_MEDIA_SEEK,t)};this.onTime=function(t){return this.eventListener(b.api.events.JWPLAYER_MEDIA_TIME,t)};this.onVolume=function(t){return this.eventListener(b.api.events.JWPLAYER_MEDIA_VOLUME,t)};this.onBuffer=function(t){return this.stateListener(b.api.events.state.BUFFERING,t)};this.onPause=function(t){return this.stateListener(b.api.events.state.PAUSED,t)};this.onPlay=function(t){return this.stateListener(b.api.events.state.PLAYING,t)};this.onIdle=function(t){return this.stateListener(b.api.events.state.IDLE,t)};this.remove=function(){n={};j=[];if(b.utils.getOuterHTML(this.container)!=p){b.api.destroyPlayer(this.id,p)}};this.setup=function(u){if(b.embed){var t=this.id;this.remove();var v=b(t);v.config=u;return new b.embed(v)}return this};this.registerPlugin=function(v,u,t){b.plugins.registerPlugin(v,u,t)};this.setPlayer=function(t,u){h=t;this.renderingMode=u};this.stateListener=function(t,u){if(!s[t]){s[t]=[];this.eventListener(b.api.events.JWPLAYER_PLAYER_STATE,g(t))}s[t].push(u);return this};function g(t){return function(v){var u=v.newstate,x=v.oldstate;if(u==t){var w=s[u];if(w){for(var y=0;y<w.length;y++){if(typeof w[y]=="function"){w[y].call(this,{oldstate:x,newstate:u})}}}}}}this.componentListener=function(t,u,v){if(!q[t]){q[t]={}}if(!q[t][u]){q[t][u]=[];this.eventListener(u,m(t,u))}q[t][u].push(v);return this};function m(t,u){return function(w){if(t==w.component){var v=q[t][u];if(v){for(var x=0;x<v.length;x++){if(typeof v[x]=="function"){v[x].call(this,w)}}}}}}this.addInternalListener=function(t,u){t.jwAddEventListener(u,'function(dat) { jwplayer("'+this.id+'").dispatchEvent("'+u+'", dat); }')};this.eventListener=function(t,u){if(!n[t]){n[t]=[];if(h&&l){this.addInternalListener(h,t)}}n[t].push(u);return this};this.dispatchEvent=function(v){if(n[v]){var u=f(v,arguments[1]);for(var t=0;t<n[v].length;t++){if(typeof n[v][t]=="function"){n[v][t].call(this,u)}}}};function f(v,t){var x=b.utils.extend({},t);if(v==b.api.events.JWPLAYER_FULLSCREEN&&!x.fullscreen){x.fullscreen=x.message=="true"?true:false;delete x.message}else{if(typeof x.data=="object"){x=b.utils.extend(x,x.data);delete x.data}}var u=["position","duration","offset"];for(var w in u){if(x[u[w]]){x[u[w]]=Math.round(x[u[w]]*1000)/1000}}return x}this.callInternal=function(u,t){if(l){if(typeof h!="undefined"&&typeof h[u]=="function"){if(b.utils.exists(t)){return(h[u])(t)}else{return(h[u])()}}return null}else{j.push({method:u,parameters:t})}};this.playerReady=function(v){l=true;if(!h){this.setPlayer(document.getElementById(v.id))}this.container=document.getElementById(this.id);for(var t in n){this.addInternalListener(h,t)}this.eventListener(b.api.events.JWPLAYER_PLAYLIST_ITEM,function(w){r={}});this.eventListener(b.api.events.JWPLAYER_MEDIA_META,function(w){b.utils.extend(r,w.metadata)});this.dispatchEvent(b.api.events.API_READY);while(j.length>0){var u=j.shift();this.callInternal(u.method,u.parameters)}};this.getItemMeta=function(){return r};this.getCurrentItem=function(){return this.callInternal("jwGetPlaylistIndex")};function o(v,x,w){var t=[];if(!x){x=0}if(!w){w=v.length-1}for(var u=x;u<=w;u++){t.push(v[u])}return t}return this};b.api.selectPlayer=function(d){var c;if(!b.utils.exists(d)){d=0}if(d.nodeType){c=d}else{if(typeof d=="string"){c=document.getElementById(d)}}if(c){var e=b.api.playerById(c.id);if(e){return e}else{return b.api.addPlayer(new b.api(c))}}else{if(typeof d=="number"){return b.getPlayers()[d]}}return null};b.api.events={API_READY:"jwplayerAPIReady",JWPLAYER_READY:"jwplayerReady",JWPLAYER_FULLSCREEN:"jwplayerFullscreen",JWPLAYER_RESIZE:"jwplayerResize",JWPLAYER_ERROR:"jwplayerError",JWPLAYER_COMPONENT_SHOW:"jwplayerComponentShow",JWPLAYER_COMPONENT_HIDE:"jwplayerComponentHide",JWPLAYER_MEDIA_BUFFER:"jwplayerMediaBuffer",JWPLAYER_MEDIA_BUFFER_FULL:"jwplayerMediaBufferFull",JWPLAYER_MEDIA_ERROR:"jwplayerMediaError",JWPLAYER_MEDIA_LOADED:"jwplayerMediaLoaded",JWPLAYER_MEDIA_COMPLETE:"jwplayerMediaComplete",JWPLAYER_MEDIA_SEEK:"jwplayerMediaSeek",JWPLAYER_MEDIA_TIME:"jwplayerMediaTime",JWPLAYER_MEDIA_VOLUME:"jwplayerMediaVolume",JWPLAYER_MEDIA_META:"jwplayerMediaMeta",JWPLAYER_MEDIA_MUTE:"jwplayerMediaMute",JWPLAYER_PLAYER_STATE:"jwplayerPlayerState",JWPLAYER_PLAYLIST_LOADED:"jwplayerPlaylistLoaded",JWPLAYER_PLAYLIST_ITEM:"jwplayerPlaylistItem"};b.api.events.state={BUFFERING:"BUFFERING",IDLE:"IDLE",PAUSED:"PAUSED",PLAYING:"PLAYING"};b.api.playerById=function(d){for(var c=0;c<a.length;c++){if(a[c].id==d){return a[c]}}return null};b.api.addPlayer=function(c){for(var d=0;d<a.length;d++){if(a[d]==c){return c}}a.push(c);return c};b.api.destroyPlayer=function(g,d){var f=-1;for(var j=0;j<a.length;j++){if(a[j].id==g){f=j;continue}}if(f>=0){var c=document.getElementById(a[f].id);if(document.getElementById(a[f].id+"_wrapper")){c=document.getElementById(a[f].id+"_wrapper")}if(c){if(d){b.utils.setOuterHTML(c,d)}else{var h=document.createElement("div");var e=c.id;if(c.id.indexOf("_wrapper")==c.id.length-8){newID=c.id.substring(0,c.id.length-8)}h.setAttribute("id",e);c.parentNode.replaceChild(h,c)}}a.splice(f,1)}return null};b.getPlayers=function(){return a.slice(0)}})(jwplayer);var _userPlayerReady=(typeof playerReady=="function")?playerReady:undefined;playerReady=function(b){var a=jwplayer.api.playerById(b.id);if(a){a.playerReady(b)}else{jwplayer.api.selectPlayer(b.id).playerReady(b)}if(_userPlayerReady){_userPlayerReady.call(this,b)}};(function(a){a.embed=function(g){var j={width:400,height:300,components:{controlbar:{position:"over"}}};var f=a.utils.mediaparser.parseMedia(g.container);var e=new a.embed.config(a.utils.extend(j,f,g.config),this);var h=a.plugins.loadPlugins(g.id,e.plugins);function c(m,l){for(var k in l){if(typeof m[k]=="function"){(m[k]).call(m,l[k])}}}function d(){if(h.getStatus()==a.utils.loaderstatus.COMPLETE){for(var m=0;m<e.modes.length;m++){if(e.modes[m].type&&a.embed[e.modes[m].type]){var k=e;if(e.modes[m].config){k=a.utils.extend(a.utils.clone(e),e.modes[m].config)}var l=new a.embed[e.modes[m].type](document.getElementById(g.id),e.modes[m],k,h,g);if(l.supportsConfig()){l.embed();c(g,e.events);return g}}}a.utils.log("No suitable players found");new a.embed.logo(a.utils.extend({hide:true},e.components.logo),"none",g.id)}}h.addEventListener(a.events.COMPLETE,d);h.addEventListener(a.events.ERROR,d);h.load();return g};function b(){if(!document.body){return setTimeout(b,15)}var c=a.utils.selectors.getElementsByTagAndClass("video","jwplayer");for(var d=0;d<c.length;d++){var e=c[d];a(e.id).setup({})}}b()})(jwplayer);(function(e){function h(){return[{type:"flash",src:"/jwplayer/player.swf"},{type:"html5"},{type:"download"}]}var a={players:"modes",autoplay:"autostart"};function b(n){var m=n.toLowerCase();var l=["left","right","top","bottom"];for(var k=0;k<l.length;k++){if(m==l[k]){return true}}return false}function c(l){var k=false;k=(l instanceof Array)||(typeof l=="object"&&!l.position&&!l.size);return k}function j(k){if(typeof k=="string"){if(parseInt(k).toString()==k||k.toLowerCase().indexOf("px")>-1){return parseInt(k)}}return k}var g=["playlist","dock","controlbar","logo","display"];function f(k){var n={};switch(e.utils.typeOf(k.plugins)){case"object":for(var m in k.plugins){n[e.utils.getPluginName(m)]=m}break;case"string":var o=k.plugins.split(",");for(var l=0;l<o.length;l++){n[e.utils.getPluginName(o[l])]=o[l]}break}return n}function d(o,n,m,k){if(e.utils.typeOf(o[n])!="object"){o[n]={}}var l=o[n][m];if(e.utils.typeOf(l)!="object"){o[n][m]=l={}}if(k){if(n=="plugins"){var p=e.utils.getPluginName(m);l[k]=o[p+"."+k];delete o[p+"."+k]}else{l[k]=o[m+"."+k];delete o[m+"."+k]}}}e.embed.deserialize=function(l){var m=f(l);for(var k in m){d(l,"plugins",m[k])}for(var p in l){if(p.indexOf(".")>-1){var o=p.split(".");var n=o[0];var p=o[1];if(e.utils.isInArray(g,n)){d(l,"components",n,p)}else{if(m[n]){d(l,"plugins",m[n],p)}}}}return l};e.embed.config=function(k,u){var t=e.utils.extend({},k);var r;if(c(t.playlist)){r=t.playlist;delete t.playlist}t=e.embed.deserialize(t);t.height=j(t.height);t.width=j(t.width);if(typeof t.plugins=="string"){var l=t.plugins.split(",");if(typeof t.plugins!="object"){t.plugins={}}for(var p=0;p<l.length;p++){var q=e.utils.getPluginName(l[p]);if(typeof t[q]=="object"){t.plugins[l[p]]=t[q];delete t[q]}else{t.plugins[l[p]]={}}}}for(var s=0;s<g.length;s++){var o=g[s];if(e.utils.exists(t[o])){if(typeof t[o]!="object"){if(!t.components[o]){t.components[o]={}}if(o=="logo"){t.components[o].file=t[o]}else{t.components[o].position=t[o]}delete t[o]}else{if(!t.components[o]){t.components[o]={}}e.utils.extend(t.components[o],t[o]);delete t[o]}}if(typeof t[o+"size"]!="undefined"){if(!t.components[o]){t.components[o]={}}t.components[o].size=t[o+"size"];delete t[o+"size"]}}if(typeof t.icons!="undefined"){if(!t.components.display){t.components.display={}}t.components.display.icons=t.icons;delete t.icons}for(var n in a){if(t[n]){if(!t[a[n]]){t[a[n]]=t[n]}delete t[n]}}var m;if(t.flashplayer&&!t.modes){m=h();m[0].src=t.flashplayer;delete t.flashplayer}else{if(t.modes){if(typeof t.modes=="string"){m=h();m[0].src=t.modes}else{if(t.modes instanceof Array){m=t.modes}else{if(typeof t.modes=="object"&&t.modes.type){m=[t.modes]}}}delete t.modes}else{m=h()}}t.modes=m;if(r){t.playlist=r}return t}})(jwplayer);(function(a){a.embed.download=function(c,g,b,d,f){this.embed=function(){var k=a.utils.extend({},b);var q={};var j=b.width?b.width:480;if(typeof j!="number"){j=parseInt(j,10)}var m=b.height?b.height:320;if(typeof m!="number"){m=parseInt(m,10)}var u,o,n;var s={};if(b.playlist&&b.playlist.length){s.file=b.playlist[0].file;o=b.playlist[0].image;s.levels=b.playlist[0].levels}else{s.file=b.file;o=b.image;s.levels=b.levels}if(s.file){u=s.file}else{if(s.levels&&s.levels.length){u=s.levels[0].file}}n=u?"pointer":"auto";var l={display:{style:{cursor:n,width:j,height:m,backgroundColor:"#000",position:"relative",textDecoration:"none",border:"none",display:"block"}},display_icon:{style:{cursor:n,position:"absolute",display:u?"block":"none",top:0,left:0,border:0,margin:0,padding:0,zIndex:3,width:50,height:50,backgroundImage:"url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAALdJREFUeNrs18ENgjAYhmFouDOCcQJGcARHgE10BDcgTOIosAGwQOuPwaQeuFRi2p/3Sb6EC5L3QCxZBgAAAOCorLW1zMn65TrlkH4NcV7QNcUQt7Gn7KIhxA+qNIR81spOGkL8oFJDyLJRdosqKDDkK+iX5+d7huzwM40xptMQMkjIOeRGo+VkEVvIPfTGIpKASfYIfT9iCHkHrBEzf4gcUQ56aEzuGK/mw0rHpy4AAACAf3kJMACBxjAQNRckhwAAAABJRU5ErkJggg==)"}},display_iconBackground:{style:{cursor:n,position:"absolute",display:u?"block":"none",top:((m-50)/2),left:((j-50)/2),border:0,width:50,height:50,margin:0,padding:0,zIndex:2,backgroundImage:"url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAEpJREFUeNrszwENADAIA7DhX8ENoBMZ5KR10EryckCJiIiIiIiIiIiIiIiIiIiIiIh8GmkRERERERERERERERERERERERGRHSPAAPlXH1phYpYaAAAAAElFTkSuQmCC)"}},display_image:{style:{width:j,height:m,display:o?"block":"none",position:"absolute",cursor:n,left:0,top:0,margin:0,padding:0,textDecoration:"none",zIndex:1,border:"none"}}};var h=function(v,x,y){var w=document.createElement(v);if(y){w.id=y}else{w.id=c.id+"_jwplayer_"+x}a.utils.css(w,l[x].style);return w};q.display=h("a","display",c.id);if(u){q.display.setAttribute("href",a.utils.getAbsolutePath(u))}q.display_image=h("img","display_image");q.display_image.setAttribute("alt","Click to download...");if(o){q.display_image.setAttribute("src",a.utils.getAbsolutePath(o))}if(true){q.display_icon=h("div","display_icon");q.display_iconBackground=h("div","display_iconBackground");q.display.appendChild(q.display_image);q.display_iconBackground.appendChild(q.display_icon);q.display.appendChild(q.display_iconBackground)}_css=a.utils.css;_hide=function(v){_css(v,{display:"none"})};function r(v){_imageWidth=q.display_image.naturalWidth;_imageHeight=q.display_image.naturalHeight;t()}function t(){a.utils.stretch(a.utils.stretching.UNIFORM,q.display_image,j,m,_imageWidth,_imageHeight)}q.display_image.onerror=function(v){_hide(q.display_image)};q.display_image.onload=r;c.parentNode.replaceChild(q.display,c);var p=(b.plugins&&b.plugins.logo)?b.plugins.logo:{};q.display.appendChild(new a.embed.logo(b.components.logo,"download",c.id));f.container=document.getElementById(f.id);f.setPlayer(q.display,"download")};this.supportsConfig=function(){if(b){var j=a.utils.getFirstPlaylistItemFromConfig(b);if(typeof j.file=="undefined"&&typeof j.levels=="undefined"){return true}else{if(j.file){return e(j.file,j.provider,j.playlistfile)}else{if(j.levels&&j.levels.length){for(var h=0;h<j.levels.length;h++){if(j.levels[h].file&&e(j.levels[h].file,j.provider,j.playlistfile)){return true}}}}}}else{return true}};function e(j,l,h){if(h){return false}var k=["image","sound","youtube","http"];if(l&&(k.toString().indexOf(l)>-1)){return true}if(!l||(l&&l=="video")){var m=a.utils.extension(j);if(m&&a.utils.extensionmap[m]){return true}}return false}}})(jwplayer);(function(a){a.embed.flash=function(f,g,l,e,j){function m(o,n,p){var q=document.createElement("param");q.setAttribute("name",n);q.setAttribute("value",p);o.appendChild(q)}function k(o,p,n){return function(q){if(n){document.getElementById(j.id+"_wrapper").appendChild(p)}var s=document.getElementById(j.id).getPluginConfig("display");o.resize(s.width,s.height);var r={left:s.x,top:s.y};a.utils.css(p,r)}}function d(p){if(!p){return{}}var r={};for(var o in p){var n=p[o];for(var q in n){r[o+"."+q]=n[q]}}return r}function h(q,p){if(q[p]){var s=q[p];for(var o in s){var n=s[o];if(typeof n=="string"){if(!q[o]){q[o]=n}}else{for(var r in n){if(!q[o+"."+r]){q[o+"."+r]=n[r]}}}}delete q[p]}}function b(q){if(!q){return{}}var t={},s=[];for(var n in q){var p=a.utils.getPluginName(n);var o=q[n];s.push(n);for(var r in o){t[p+"."+r]=o[r]}}t.plugins=s.join(",");return t}function c(p){var n=p.netstreambasepath?"":"netstreambasepath="+encodeURIComponent(window.location.href.split("#")[0])+"&";for(var o in p){if(typeof(p[o])=="object"){n+=o+"="+encodeURIComponent("[[JSON]]"+a.utils.strings.jsonToString(p[o]))+"&"}else{n+=o+"="+encodeURIComponent(p[o])+"&"}}return n.substring(0,n.length-1)}this.embed=function(){l.id=j.id;var y;var q=a.utils.extend({},l);var n=q.width;var w=q.height;if(f.id+"_wrapper"==f.parentNode.id){y=document.getElementById(f.id+"_wrapper")}else{y=document.createElement("div");y.id=f.id+"_wrapper";a.utils.wrap(f,y);a.utils.css(y,{position:"relative",width:n,height:w})}var o=e.setupPlugins(j,q,k);if(o.length>0){a.utils.extend(q,b(o.plugins))}else{delete q.plugins}var r=["height","width","modes","events"];for(var u=0;u<r.length;u++){delete q[r[u]]}var p="opaque";if(q.wmode){p=q.wmode}h(q,"components");h(q,"providers");if(typeof q["dock.position"]!="undefined"){if(q["dock.position"].toString().toLowerCase()=="false"){q.dock=q["dock.position"];delete q["dock.position"]}}var x="#000000";var t;if(a.utils.isIE()){var v='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" bgcolor="'+x+'" width="100%" height="100%" id="'+f.id+'" name="'+f.id+'" tabindex=0"">';v+='<param name="movie" value="'+g.src+'">';v+='<param name="allowfullscreen" value="true">';v+='<param name="allowscriptaccess" value="always">';v+='<param name="seamlesstabbing" value="true">';v+='<param name="wmode" value="'+p+'">';v+='<param name="flashvars" value="'+c(q)+'">';v+="</object>";a.utils.setOuterHTML(f,v);t=document.getElementById(f.id)}else{var s=document.createElement("object");s.setAttribute("type","application/x-shockwave-flash");s.setAttribute("data",g.src);s.setAttribute("width","100%");s.setAttribute("height","100%");s.setAttribute("bgcolor","#000000");s.setAttribute("id",f.id);s.setAttribute("name",f.id);s.setAttribute("tabindex",0);m(s,"allowfullscreen","true");m(s,"allowscriptaccess","always");m(s,"seamlesstabbing","true");m(s,"wmode",p);m(s,"flashvars",c(q));f.parentNode.replaceChild(s,f);t=s}j.container=t;j.setPlayer(t,"flash")};this.supportsConfig=function(){if(a.utils.hasFlash()){if(l){var o=a.utils.getFirstPlaylistItemFromConfig(l);if(typeof o.file=="undefined"&&typeof o.levels=="undefined"){return true}else{if(o.file){return flashCanPlay(o.file,o.provider)}else{if(o.levels&&o.levels.length){for(var n=0;n<o.levels.length;n++){if(o.levels[n].file&&flashCanPlay(o.levels[n].file,o.provider)){return true}}}}}}else{return true}}return false};flashCanPlay=function(n,p){var o=["video","http","sound","image"];if(p&&(o.toString().indexOf(p<0))){return true}var q=a.utils.extension(n);if(!q){return true}if(a.utils.exists(a.utils.extensionmap[q])&&!a.utils.exists(a.utils.extensionmap[q].flash)){return false}return true}}})(jwplayer);(function(a){a.embed.html5=function(c,g,b,d,f){function e(j,k,h){return function(l){var m=document.getElementById(c.id+"_displayarea");if(h){m.appendChild(k)}var n=m.style;j.resize(parseInt(n.width.replace("px","")),parseInt(n.height.replace("px","")));k.left=n.left;k.top=n.top}}this.embed=function(){if(a.html5){d.setupPlugins(f,b,e);c.innerHTML="";var j=a.utils.extend({screencolor:"0x000000"},b);var h=["plugins","modes","events"];for(var k=0;k<h.length;k++){delete j[h[k]]}if(j.levels&&!j.sources){j.sources=b.levels}if(j.skin&&j.skin.toLowerCase().indexOf(".zip")>0){j.skin=j.skin.replace(/\.zip/i,".xml")}var l=new (a.html5(c)).setup(j);f.container=document.getElementById(f.id);f.setPlayer(l,"html5")}else{return null}};this.supportsConfig=function(){if(!!a.vid.canPlayType){if(b){var j=a.utils.getFirstPlaylistItemFromConfig(b);if(typeof j.file=="undefined"&&typeof j.levels=="undefined"){return true}else{if(j.file){return html5CanPlay(a.vid,j.file,j.provider,j.playlistfile)}else{if(j.levels&&j.levels.length){for(var h=0;h<j.levels.length;h++){if(j.levels[h].file&&html5CanPlay(a.vid,j.levels[h].file,j.provider,j.playlistfile)){return true}}}}}}else{return true}}return false};html5CanPlay=function(k,j,l,h){if(h){return false}if(l&&l=="youtube"){return true}if(l&&l!="video"&&l!="http"&&l!="sound"){return false}var m=a.utils.extension(j);if(!a.utils.exists(m)||!a.utils.exists(a.utils.extensionmap[m])){return true}if(!a.utils.exists(a.utils.extensionmap[m].html5)){return false}if(a.utils.isLegacyAndroid()&&m.match(/m4v|mp4/)){return true}return browserCanPlay(k,a.utils.extensionmap[m].html5)};browserCanPlay=function(j,h){if(!h){return true}if(j.canPlayType(h)){return true}else{if(h=="audio/mp3"&&navigator.userAgent.match(/safari/i)){return j.canPlayType("audio/mpeg")}else{return false}}}}})(jwplayer);(function(a){a.embed.logo=function(m,l,d){var j={prefix:"http://l.longtailvideo.com/"+l+"/",file:"logo.png",link:"http://www.longtailvideo.com/players/jw-flv-player/",margin:8,out:0.5,over:1,timeout:5,hide:false,position:"bottom-left"};_css=a.utils.css;var b;var h;k();function k(){o();c();f()}function o(){if(j.prefix){var q=a.version.split(/\W/).splice(0,2).join("/");if(j.prefix.indexOf(q)<0){j.prefix+=q+"/"}}h=a.utils.extend({},j)}function p(){var s={border:"none",textDecoration:"none",position:"absolute",cursor:"pointer",zIndex:10};s.display=h.hide?"none":"block";var r=h.position.toLowerCase().split("-");for(var q in r){s[r[q]]=h.margin}return s}function c(){b=document.createElement("img");b.id=d+"_jwplayer_logo";b.style.display="none";b.onload=function(q){_css(b,p());e()};if(!h.file){return}if(h.file.indexOf("http://")===0){b.src=h.file}else{b.src=h.prefix+h.file}}if(!h.file){return}function f(){if(h.link){b.onmouseover=g;b.onmouseout=e;b.onclick=n}else{this.mouseEnabled=false}}function n(q){if(typeof q!="undefined"){q.preventDefault();q.stopPropagation()}if(h.link){window.open(h.link,"_blank")}return}function e(q){if(h.link){b.style.opacity=h.out}return}function g(q){if(h.hide){b.style.opacity=h.over}return}return b}})(jwplayer);(function(a){a.html5=function(b){var c=b;this.setup=function(d){a.utils.extend(this,new a.html5.api(c,d));return this};return this}})(jwplayer);(function(b){var d=b.utils;var c=d.css;b.html5.view=function(r,q,f){var u=r;var n=q;var x=f;var w;var g;var C;var s;var D;var p;var A;function z(){w=document.createElement("div");w.id=n.id;w.className=n.className;_videowrapper=document.createElement("div");_videowrapper.id=w.id+"_video_wrapper";n.id=w.id+"_video";c(w,{position:"relative",height:x.height,width:x.width,padding:0,backgroundColor:E(),zIndex:0});function E(){if(u.skin.getComponentSettings("display")&&u.skin.getComponentSettings("display").backgroundcolor){return u.skin.getComponentSettings("display").backgroundcolor}return parseInt("000000",16)}c(n,{width:x.width,height:x.height,top:0,left:0,zIndex:1,margin:"auto",display:"block"});c(_videowrapper,{overflow:"hidden",position:"absolute",top:0,left:0,bottom:0,right:0});d.wrap(n,w);d.wrap(n,_videowrapper);s=document.createElement("div");s.id=w.id+"_displayarea";w.appendChild(s)}function k(){for(var E=0;E<x.plugins.order.length;E++){var F=x.plugins.order[E];if(d.exists(x.plugins.object[F].getDisplayElement)){x.plugins.object[F].height=d.parseDimension(x.plugins.object[F].getDisplayElement().style.height);x.plugins.object[F].width=d.parseDimension(x.plugins.object[F].getDisplayElement().style.width);x.plugins.config[F].currentPosition=x.plugins.config[F].position}}v()}function m(E){c(s,{display:x.getMedia().hasChrome()?"none":"block"})}function v(F){var H=x.getMedia()?x.getMedia().getDisplayElement():null;if(d.exists(H)){if(A!=H){if(A&&A.parentNode){A.parentNode.replaceChild(H,A)}A=H}for(var E=0;E<x.plugins.order.length;E++){var G=x.plugins.order[E];if(d.exists(x.plugins.object[G].getDisplayElement)){x.plugins.config[G].currentPosition=x.plugins.config[G].position}}}j(x.width,x.height)}this.setup=function(){if(x&&x.getMedia()){n=x.getMedia().getDisplayElement()}z();k();u.jwAddEventListener(b.api.events.JWPLAYER_PLAYER_STATE,m);u.jwAddEventListener(b.api.events.JWPLAYER_MEDIA_LOADED,v);u.jwAddEventListener(b.api.events.JWPLAYER_MEDIA_META,function(){y()});var E;if(d.exists(window.onresize)){E=window.onresize}window.onresize=function(F){if(d.exists(E)){try{E(F)}catch(H){}}if(u.jwGetFullscreen()){var G=document.body.getBoundingClientRect();x.width=Math.abs(G.left)+Math.abs(G.right);x.height=window.innerHeight}j(x.width,x.height)}};function h(E){switch(E.keyCode){case 27:if(u.jwGetFullscreen()){u.jwSetFullscreen(false)}break;case 32:if(u.jwGetState()!=b.api.events.state.IDLE&&u.jwGetState()!=b.api.events.state.PAUSED){u.jwPause()}else{u.jwPlay()}break}}function j(H,E){if(w.style.display=="none"){return}var G=[].concat(x.plugins.order);G.reverse();D=G.length+2;if(!x.fullscreen){x.width=H;x.height=E;g=H;C=E;c(s,{top:0,bottom:0,left:0,right:0,width:H,height:E,position:"relative"});c(w,{height:C,width:g});var F=o(t,G);if(F.length>0){D+=F.length;var J=F.indexOf("playlist"),I=F.indexOf("controlbar");if(J>=0&&I>=0){F[J]=F.splice(I,1,F[J])[0]}o(l,F,true)}}else{if(!(navigator&&navigator.vendor&&navigator.vendor.indexOf("Apple")==0)){o(B,G,true)}}y()}function o(J,G,H){var F=[];for(var E=0;E<G.length;E++){var K=G[E];if(d.exists(x.plugins.object[K].getDisplayElement)){if(x.plugins.config[K].currentPosition!=b.html5.view.positions.NONE){var I=J(K,D--);if(!I){F.push(K)}else{x.plugins.object[K].resize(I.width,I.height);if(H){delete I.width;delete I.height}c(x.plugins.object[K].getDisplayElement(),I)}}else{c(x.plugins.object[K].getDisplayElement(),{display:"none"})}}}return F}function t(F,G){if(d.exists(x.plugins.object[F].getDisplayElement)){if(x.plugins.config[F].position&&a(x.plugins.config[F].position)){if(!d.exists(x.plugins.object[F].getDisplayElement().parentNode)){w.appendChild(x.plugins.object[F].getDisplayElement())}var E=e(F);E.zIndex=G;return E}}return false}function l(G,H){if(!d.exists(x.plugins.object[G].getDisplayElement().parentNode)){s.appendChild(x.plugins.object[G].getDisplayElement())}var E=x.width,F=x.height;if(typeof x.width=="string"&&x.width.lastIndexOf("%")>-1){percentage=parseFloat(x.width.substring(0,x.width.lastIndexOf("%")))/100;E=Math.round(window.innerWidth*percentage)}if(typeof x.height=="string"&&x.height.lastIndexOf("%")>-1){percentage=parseFloat(x.height.substring(0,x.height.lastIndexOf("%")))/100;F=Math.round(window.innerHeight*percentage)}return{position:"absolute",width:(E-d.parseDimension(s.style.left)-d.parseDimension(s.style.right)),height:(F-d.parseDimension(s.style.top)-d.parseDimension(s.style.bottom)),zIndex:H}}function B(E,F){return{position:"fixed",width:x.width,height:x.height,zIndex:F}}function y(){if(!d.exists(x.getMedia())){return}s.style.position="absolute";var H=x.getMedia().getDisplayElement();if(H&&H.tagName.toLowerCase()=="video"){H.style.position="absolute";var E,I;if(s.style.width.toString().lastIndexOf("%")>-1||s.style.width.toString().lastIndexOf("%")>-1){var F=s.getBoundingClientRect();E=Math.abs(F.left)+Math.abs(F.right);I=Math.abs(F.top)+Math.abs(F.bottom)}else{E=d.parseDimension(s.style.width);I=d.parseDimension(s.style.height)}if(H.parentNode){H.parentNode.style.left=s.style.left;H.parentNode.style.top=s.style.top}d.stretch(u.jwGetStretching(),H,E,I,H.videoWidth?H.videoWidth:400,H.videoHeight?H.videoHeight:300)}else{var G=x.plugins.object.display.getDisplayElement();if(G){x.getMedia().resize(d.parseDimension(G.style.width),d.parseDimension(G.style.height))}else{x.getMedia().resize(d.parseDimension(s.style.width),d.parseDimension(s.style.height))}}}function e(F){var G={position:"absolute",margin:0,padding:0,top:null};var E=x.plugins.config[F].currentPosition.toLowerCase();switch(E.toUpperCase()){case b.html5.view.positions.TOP:G.top=d.parseDimension(s.style.top);G.left=d.parseDimension(s.style.left);G.width=g-d.parseDimension(s.style.left)-d.parseDimension(s.style.right);G.height=x.plugins.object[F].height;s.style[E]=d.parseDimension(s.style[E])+x.plugins.object[F].height+"px";s.style.height=d.parseDimension(s.style.height)-G.height+"px";break;case b.html5.view.positions.RIGHT:G.top=d.parseDimension(s.style.top);G.right=d.parseDimension(s.style.right);G.width=x.plugins.object[F].width;G.height=C-d.parseDimension(s.style.top)-d.parseDimension(s.style.bottom);s.style[E]=d.parseDimension(s.style[E])+x.plugins.object[F].width+"px";s.style.width=d.parseDimension(s.style.width)-G.width+"px";break;case b.html5.view.positions.BOTTOM:G.bottom=d.parseDimension(s.style.bottom);G.left=d.parseDimension(s.style.left);G.width=g-d.parseDimension(s.style.left)-d.parseDimension(s.style.right);G.height=x.plugins.object[F].height;s.style[E]=d.parseDimension(s.style[E])+x.plugins.object[F].height+"px";s.style.height=d.parseDimension(s.style.height)-G.height+"px";break;case b.html5.view.positions.LEFT:G.top=d.parseDimension(s.style.top);G.left=d.parseDimension(s.style.left);G.width=x.plugins.object[F].width;G.height=C-d.parseDimension(s.style.top)-d.parseDimension(s.style.bottom);s.style[E]=d.parseDimension(s.style[E])+x.plugins.object[F].width+"px";s.style.width=d.parseDimension(s.style.width)-G.width+"px";break;default:break}return G}this.resize=j;this.fullscreen=function(H){if(navigator&&navigator.vendor&&navigator.vendor.indexOf("Apple")===0){if(x.getMedia().getDisplayElement().webkitSupportsFullscreen){if(H){try{x.getMedia().getDisplayElement().webkitEnterFullscreen()}catch(G){}}else{try{x.getMedia().getDisplayElement().webkitExitFullscreen()}catch(G){}}}}else{if(H){document.onkeydown=h;clearInterval(p);var F=document.body.getBoundingClientRect();x.width=Math.abs(F.left)+Math.abs(F.right);x.height=window.innerHeight;var E={position:"fixed",width:"100%",height:"100%",top:0,left:0,zIndex:2147483000};c(w,E);E.zIndex=1;if(x.getMedia()&&x.getMedia().getDisplayElement()){c(x.getMedia().getDisplayElement(),E)}E.zIndex=2;c(s,E)}else{document.onkeydown="";x.width=g;x.height=C;c(w,{position:"relative",height:x.height,width:x.width,zIndex:0})}j(x.width,x.height)}}};function a(e){return([b.html5.view.positions.TOP,b.html5.view.positions.RIGHT,b.html5.view.positions.BOTTOM,b.html5.view.positions.LEFT].toString().indexOf(e.toUpperCase())>-1)}b.html5.view.positions={TOP:"TOP",RIGHT:"RIGHT",BOTTOM:"BOTTOM",LEFT:"LEFT",OVER:"OVER",NONE:"NONE"}})(jwplayer);(function(a){var b={backgroundcolor:"",margin:10,font:"Arial,sans-serif",fontsize:10,fontcolor:parseInt("000000",16),fontstyle:"normal",fontweight:"bold",buttoncolor:parseInt("ffffff",16),position:a.html5.view.positions.BOTTOM,idlehide:false,layout:{left:{position:"left",elements:[{name:"play",type:"button"},{name:"divider",type:"divider"},{name:"prev",type:"button"},{name:"divider",type:"divider"},{name:"next",type:"button"},{name:"divider",type:"divider"},{name:"elapsed",type:"text"}]},center:{position:"center",elements:[{name:"time",type:"slider"}]},right:{position:"right",elements:[{name:"duration",type:"text"},{name:"blank",type:"button"},{name:"divider",type:"divider"},{name:"mute",type:"button"},{name:"volume",type:"slider"},{name:"divider",type:"divider"},{name:"fullscreen",type:"button"}]}}};_utils=a.utils;_css=_utils.css;_hide=function(c){_css(c,{display:"none"})};_show=function(c){_css(c,{display:"block"})};a.html5.controlbar=function(l,V){var k=l;var D=_utils.extend({},b,k.skin.getComponentSettings("controlbar"),V);if(D.position==a.html5.view.positions.NONE||typeof a.html5.view.positions[D.position]=="undefined"){return}if(_utils.mapLength(k.skin.getComponentLayout("controlbar"))>0){D.layout=k.skin.getComponentLayout("controlbar")}var ac;var P;var ab;var E;var v="none";var g;var j;var ad;var f;var e;var y;var Q={};var p=false;var c={};var Y;var h=false;var o;var d;var S=false;var G=false;var W=new a.html5.eventdispatcher();_utils.extend(this,W);function J(){if(!Y){Y=k.skin.getSkinElement("controlbar","background");if(!Y){Y={width:0,height:0,src:null}}}return Y}function N(){ab=0;E=0;P=0;if(!p){var ak={height:J().height,backgroundColor:D.backgroundcolor};ac=document.createElement("div");ac.id=k.id+"_jwplayer_controlbar";_css(ac,ak)}var aj=(k.skin.getSkinElement("controlbar","capLeft"));var ai=(k.skin.getSkinElement("controlbar","capRight"));if(aj){x("capLeft","left",false,ac)}var al={position:"absolute",height:J().height,left:(aj?aj.width:0),zIndex:0};Z("background",ac,al,"img");if(J().src){Q.background.src=J().src}al.zIndex=1;Z("elements",ac,al);if(ai){x("capRight","right",false,ac)}}this.getDisplayElement=function(){return ac};this.resize=function(ak,ai){_utils.cancelAnimation(ac);document.getElementById(k.id).onmousemove=A;e=ak;y=ai;if(G!=k.jwGetFullscreen()){G=k.jwGetFullscreen();d=undefined}var aj=w();A();I({id:k.id,duration:ad,position:j});u({id:k.id,bufferPercent:f});return aj};this.show=function(){if(h){h=false;_show(ac);T()}};this.hide=function(){if(!h){h=true;_hide(ac);aa()}};function q(){var aj=["timeSlider","volumeSlider","timeSliderRail","volumeSliderRail"];for(var ak in aj){var ai=aj[ak];if(typeof Q[ai]!="undefined"){c[ai]=Q[ai].getBoundingClientRect()}}}function A(ai){if(h){return}if(D.position==a.html5.view.positions.OVER||k.jwGetFullscreen()){clearTimeout(o);switch(k.jwGetState()){case a.api.events.state.PAUSED:case a.api.events.state.IDLE:if(!D.idlehide||_utils.exists(ai)){U()}if(D.idlehide){o=setTimeout(function(){z()},2000)}break;default:if(ai){U()}o=setTimeout(function(){z()},2000);break}}}function z(ai){aa();_utils.cancelAnimation(ac);_utils.fadeTo(ac,0,0.1,1,0)}function U(){T();_utils.cancelAnimation(ac);_utils.fadeTo(ac,1,0,1,0)}function H(ai){return function(){if(S&&d!=ai){d=ai;W.sendEvent(ai,{component:"controlbar",boundingRect:O()})}}}var T=H(a.api.events.JWPLAYER_COMPONENT_SHOW);var aa=H(a.api.events.JWPLAYER_COMPONENT_HIDE);function O(){if(D.position==a.html5.view.positions.OVER||k.jwGetFullscreen()){return _utils.getDimensions(ac)}else{return{x:0,y:0,width:0,height:0}}}function Z(am,al,ak,ai){var aj;if(!p){if(!ai){ai="div"}aj=document.createElement(ai);Q[am]=aj;aj.id=ac.id+"_"+am;al.appendChild(aj)}else{aj=document.getElementById(ac.id+"_"+am)}if(_utils.exists(ak)){_css(aj,ak)}return aj}function M(){ah(D.layout.left);ah(D.layout.right,-1);ah(D.layout.center)}function ah(al,ai){var am=al.position=="right"?"right":"left";var ak=_utils.extend([],al.elements);if(_utils.exists(ai)){ak.reverse()}for(var aj=0;aj<ak.length;aj++){C(ak[aj],am)}}function K(){return P++}function C(am,ao){var al,aj,ak,ai,aq;if(am.type=="divider"){x("divider"+K(),ao,true,undefined,undefined,am.width,am.element);return}switch(am.name){case"play":x("playButton",ao,false);x("pauseButton",ao,true);R("playButton","jwPlay");R("pauseButton","jwPause");break;case"prev":x("prevButton",ao,true);R("prevButton","jwPlaylistPrev");break;case"stop":x("stopButton",ao,true);R("stopButton","jwStop");break;case"next":x("nextButton",ao,true);R("nextButton","jwPlaylistNext");break;case"elapsed":x("elapsedText",ao,true);break;case"time":aj=!_utils.exists(k.skin.getSkinElement("controlbar","timeSliderCapLeft"))?0:k.skin.getSkinElement("controlbar","timeSliderCapLeft").width;ak=!_utils.exists(k.skin.getSkinElement("controlbar","timeSliderCapRight"))?0:k.skin.getSkinElement("controlbar","timeSliderCapRight").width;al=ao=="left"?aj:ak;ai=k.skin.getSkinElement("controlbar","timeSliderRail").width+aj+ak;aq={height:J().height,position:"absolute",top:0,width:ai};aq[ao]=ao=="left"?ab:E;var an=Z("timeSlider",Q.elements,aq);x("timeSliderCapLeft",ao,true,an,ao=="left"?0:al);x("timeSliderRail",ao,false,an,al);x("timeSliderBuffer",ao,false,an,al);x("timeSliderProgress",ao,false,an,al);x("timeSliderThumb",ao,false,an,al);x("timeSliderCapRight",ao,true,an,ao=="right"?0:al);X("time");break;case"fullscreen":x("fullscreenButton",ao,false);x("normalscreenButton",ao,true);R("fullscreenButton","jwSetFullscreen",true);R("normalscreenButton","jwSetFullscreen",false);break;case"volume":aj=!_utils.exists(k.skin.getSkinElement("controlbar","volumeSliderCapLeft"))?0:k.skin.getSkinElement("controlbar","volumeSliderCapLeft").width;ak=!_utils.exists(k.skin.getSkinElement("controlbar","volumeSliderCapRight"))?0:k.skin.getSkinElement("controlbar","volumeSliderCapRight").width;al=ao=="left"?aj:ak;ai=k.skin.getSkinElement("controlbar","volumeSliderRail").width+aj+ak;aq={height:J().height,position:"absolute",top:0,width:ai};aq[ao]=ao=="left"?ab:E;var ap=Z("volumeSlider",Q.elements,aq);x("volumeSliderCapLeft",ao,true,ap,ao=="left"?0:al);x("volumeSliderRail",ao,true,ap,al);x("volumeSliderProgress",ao,false,ap,al);x("volumeSliderCapRight",ao,true,ap,ao=="right"?0:al);X("volume");break;case"mute":x("muteButton",ao,false);x("unmuteButton",ao,true);R("muteButton","jwSetMute",true);R("unmuteButton","jwSetMute",false);break;case"duration":x("durationText",ao,true);break}}function x(al,ao,aj,ar,am,ai,ak){if(_utils.exists(k.skin.getSkinElement("controlbar",al))||al.indexOf("Text")>0||al.indexOf("divider")===0){var an={height:J().height,position:"absolute",display:"block",top:0};if((al.indexOf("next")===0||al.indexOf("prev")===0)&&k.jwGetPlaylist().length<2){aj=false;an.display="none"}var at;if(al.indexOf("Text")>0){al.innerhtml="00:00";an.font=D.fontsize+"px/"+(J().height+1)+"px "+D.font;an.color=D.fontcolor;an.textAlign="center";an.fontWeight=D.fontweight;an.fontStyle=D.fontstyle;an.cursor="default";at=14+3*D.fontsize}else{if(al.indexOf("divider")===0){if(ai){if(!isNaN(parseInt(ai))){at=parseInt(ai)}}else{if(ak){var ap=k.skin.getSkinElement("controlbar",ak);if(ap){an.background="url("+ap.src+") repeat-x center left";at=ap.width}}else{an.background="url("+k.skin.getSkinElement("controlbar","divider").src+") repeat-x center left";at=k.skin.getSkinElement("controlbar","divider").width}}}else{an.background="url("+k.skin.getSkinElement("controlbar",al).src+") repeat-x center left";at=k.skin.getSkinElement("controlbar",al).width}}if(ao=="left"){an.left=isNaN(am)?ab:am;if(aj){ab+=at}}else{if(ao=="right"){an.right=isNaN(am)?E:am;if(aj){E+=at}}}if(_utils.typeOf(ar)=="undefined"){ar=Q.elements}an.width=at;if(p){_css(Q[al],an)}else{var aq=Z(al,ar,an);if(_utils.exists(k.skin.getSkinElement("controlbar",al+"Over"))){aq.onmouseover=function(au){aq.style.backgroundImage=["url(",k.skin.getSkinElement("controlbar",al+"Over").src,")"].join("")};aq.onmouseout=function(au){aq.style.backgroundImage=["url(",k.skin.getSkinElement("controlbar",al).src,")"].join("")}}}}}function F(){k.jwAddEventListener(a.api.events.JWPLAYER_PLAYLIST_LOADED,B);k.jwAddEventListener(a.api.events.JWPLAYER_PLAYLIST_ITEM,s);k.jwAddEventListener(a.api.events.JWPLAYER_MEDIA_BUFFER,u);k.jwAddEventListener(a.api.events.JWPLAYER_PLAYER_STATE,r);k.jwAddEventListener(a.api.events.JWPLAYER_MEDIA_TIME,I);k.jwAddEventListener(a.api.events.JWPLAYER_MEDIA_MUTE,ag);k.jwAddEventListener(a.api.events.JWPLAYER_MEDIA_VOLUME,m);k.jwAddEventListener(a.api.events.JWPLAYER_MEDIA_COMPLETE,L)}function B(){N();M();w();ae()}function s(ai){ad=k.jwGetPlaylist()[ai.index].duration;I({id:k.id,duration:ad,position:0});u({id:k.id,bufferProgress:0})}function ae(){I({id:k.id,duration:k.jwGetDuration(),position:0});u({id:k.id,bufferProgress:0});ag({id:k.id,mute:k.jwGetMute()});r({id:k.id,newstate:a.api.events.state.IDLE});m({id:k.id,volume:k.jwGetVolume()})}function R(ak,al,aj){if(p){return}if(_utils.exists(k.skin.getSkinElement("controlbar",ak))){var ai=Q[ak];if(_utils.exists(ai)){_css(ai,{cursor:"pointer"});if(al=="fullscreen"){ai.onmouseup=function(am){am.stopPropagation();k.jwSetFullscreen(!k.jwGetFullscreen())}}else{ai.onmouseup=function(am){am.stopPropagation();if(_utils.exists(aj)){k[al](aj)}else{k[al]()}}}}}}function X(ai){if(p){return}var aj=Q[ai+"Slider"];_css(Q.elements,{cursor:"pointer"});_css(aj,{cursor:"pointer"});aj.onmousedown=function(ak){v=ai};aj.onmouseup=function(ak){ak.stopPropagation();af(ak.pageX)};aj.onmousemove=function(ak){if(v=="time"){g=true;var al=ak.pageX-c[ai+"Slider"].left-window.pageXOffset;_css(Q.timeSliderThumb,{left:al})}}}function af(aj){g=false;var ai;if(v=="time"){ai=aj-c.timeSliderRail.left+window.pageXOffset;var al=ai/c.timeSliderRail.width*ad;if(al<0){al=0}else{if(al>ad){al=ad-3}}if(k.jwGetState()==a.api.events.state.PAUSED||k.jwGetState()==a.api.events.state.IDLE){k.jwPlay()}k.jwSeek(al)}else{if(v=="volume"){ai=aj-c.volumeSliderRail.left-window.pageXOffset;var ak=Math.round(ai/c.volumeSliderRail.width*100);if(ak<0){ak=0}else{if(ak>100){ak=100}}if(k.jwGetMute()){k.jwSetMute(false)}k.jwSetVolume(ak)}}v="none"}function u(aj){if(_utils.exists(aj.bufferPercent)){f=aj.bufferPercent}if(c.timeSliderRail){var ak=c.timeSliderRail.width;var ai=isNaN(Math.round(ak*f/100))?0:Math.round(ak*f/100);_css(Q.timeSliderBuffer,{width:ai})}}function ag(ai){if(ai.mute){_hide(Q.muteButton);_show(Q.unmuteButton);_hide(Q.volumeSliderProgress)}else{_show(Q.muteButton);_hide(Q.unmuteButton);_show(Q.volumeSliderProgress)}}function r(ai){if(ai.newstate==a.api.events.state.BUFFERING||ai.newstate==a.api.events.state.PLAYING){_show(Q.pauseButton);_hide(Q.playButton)}else{_hide(Q.pauseButton);_show(Q.playButton)}A();if(ai.newstate==a.api.events.state.IDLE){_hide(Q.timeSliderBuffer);_hide(Q.timeSliderProgress);_hide(Q.timeSliderThumb);I({id:k.id,duration:k.jwGetDuration(),position:0})}else{_show(Q.timeSliderBuffer);if(ai.newstate!=a.api.events.state.BUFFERING){_show(Q.timeSliderProgress);_show(Q.timeSliderThumb)}}}function L(ai){u({bufferPercent:0});I(_utils.extend(ai,{position:0,duration:ad}))}function I(al){if(_utils.exists(al.position)){j=al.position}if(_utils.exists(al.duration)){ad=al.duration}var aj=(j===ad===0)?0:j/ad;var am=c.timeSliderRail;if(am){var ai=isNaN(Math.round(am.width*aj))?0:Math.round(am.width*aj);var ak=ai;if(Q.timeSliderProgress){Q.timeSliderProgress.style.width=ai+"px";if(!g){if(Q.timeSliderThumb){Q.timeSliderThumb.style.left=ak+"px"}}}}if(Q.durationText){Q.durationText.innerHTML=_utils.timeFormat(ad)}if(Q.elapsedText){Q.elapsedText.innerHTML=_utils.timeFormat(j)}}function n(){var am,aj;var ak=document.getElementById(ac.id+"_elements");if(!ak){return}var al=ak.childNodes;for(var ai in ak.childNodes){if(isNaN(parseInt(ai,10))){continue}if(al[ai].id.indexOf(ac.id+"_divider")===0&&aj&&aj.id.indexOf(ac.id+"_divider")===0&&al[ai].style.backgroundImage==aj.style.backgroundImage){al[ai].style.display="none"}else{if(al[ai].id.indexOf(ac.id+"_divider")===0&&am&&am.style.display!="none"){al[ai].style.display="block"}}if(al[ai].style.display!="none"){aj=al[ai]}am=al[ai]}}function w(){n();if(k.jwGetFullscreen()){_show(Q.normalscreenButton);_hide(Q.fullscreenButton)}else{_hide(Q.normalscreenButton);_show(Q.fullscreenButton)}var aj={width:e};var ai={};if(D.position==a.html5.view.positions.OVER||k.jwGetFullscreen()){aj.left=D.margin;aj.width-=2*D.margin;aj.top=y-J().height-D.margin;aj.height=J().height}var al=k.skin.getSkinElement("controlbar","capLeft");var ak=k.skin.getSkinElement("controlbar","capRight");ai.left=al?al.width:0;ai.width=aj.width-ai.left-(ak?ak.width:0);var am=!_utils.exists(k.skin.getSkinElement("controlbar","timeSliderCapLeft"))?0:k.skin.getSkinElement("controlbar","timeSliderCapLeft").width;_css(Q.timeSliderRail,{width:(ai.width-ab-E),left:am});if(_utils.exists(Q.timeSliderCapRight)){_css(Q.timeSliderCapRight,{left:am+(ai.width-ab-E)})}_css(ac,aj);_css(Q.elements,ai);_css(Q.background,ai);q();return aj}function m(am){if(_utils.exists(Q.volumeSliderRail)){var ak=isNaN(am.volume/100)?1:am.volume/100;var al=_utils.parseDimension(Q.volumeSliderRail.style.width);var ai=isNaN(Math.round(al*ak))?0:Math.round(al*ak);var an=_utils.parseDimension(Q.volumeSliderRail.style.right);var aj=(!_utils.exists(k.skin.getSkinElement("controlbar","volumeSliderCapLeft")))?0:k.skin.getSkinElement("controlbar","volumeSliderCapLeft").width;_css(Q.volumeSliderProgress,{width:ai,left:aj});if(_utils.exists(Q.volumeSliderCapLeft)){_css(Q.volumeSliderCapLeft,{left:0})}}}function t(){N();M();q();p=true;F();D.idlehide=(D.idlehide.toString().toLowerCase()=="true");if(D.position==a.html5.view.positions.OVER&&D.idlehide){ac.style.opacity=0;S=true}else{setTimeout((function(){S=true;T()}),1)}ae()}t();return this}})(jwplayer);(function(b){var a=["width","height","state","playlist","item","position","buffer","duration","volume","mute","fullscreen"];var c=b.utils;b.html5.controller=function(z,w,h,v){var C=z;var G=h;var g=v;var o=w;var J=true;var e=-1;var A=c.exists(G.config.debug)&&(G.config.debug.toString().toLowerCase()=="console");var m=new b.html5.eventdispatcher(o.id,A);c.extend(this,m);var E=[];var d=false;function r(M){if(d){m.sendEvent(M.type,M)}else{E.push(M)}}function K(M){if(!d){m.sendEvent(b.api.events.JWPLAYER_READY,M);if(b.utils.exists(window.playerReady)){playerReady(M)}if(b.utils.exists(window[h.config.playerReady])){window[h.config.playerReady](M)}while(E.length>0){var O=E.shift();m.sendEvent(O.type,O)}if(h.config.autostart&&!b.utils.isIOS()){t(G.item)}while(p.length>0){var N=p.shift();x(N.method,N.arguments)}d=true}}G.addGlobalListener(r);G.addEventListener(b.api.events.JWPLAYER_MEDIA_BUFFER_FULL,function(){G.getMedia().play()});G.addEventListener(b.api.events.JWPLAYER_MEDIA_TIME,function(M){if(M.position>=G.playlist[G.item].start&&e>=0){G.playlist[G.item].start=e;e=-1}});G.addEventListener(b.api.events.JWPLAYER_MEDIA_COMPLETE,function(M){setTimeout(s,25)});function u(){try{f(G.item);if(G.playlist[G.item].levels[0].file.length>0){if(J||G.state==b.api.events.state.IDLE){G.getMedia().load(G.playlist[G.item]);J=false}else{if(G.state==b.api.events.state.PAUSED){G.getMedia().play()}}}return true}catch(M){m.sendEvent(b.api.events.JWPLAYER_ERROR,M)}return false}function I(){try{if(G.playlist[G.item].levels[0].file.length>0){switch(G.state){case b.api.events.state.PLAYING:case b.api.events.state.BUFFERING:G.getMedia().pause();break}}return true}catch(M){m.sendEvent(b.api.events.JWPLAYER_ERROR,M)}return false}function D(M){try{if(G.playlist[G.item].levels[0].file.length>0){if(typeof M!="number"){M=parseFloat(M)}switch(G.state){case b.api.events.state.IDLE:if(e<0){e=G.playlist[G.item].start;G.playlist[G.item].start=M}u();break;case b.api.events.state.PLAYING:case b.api.events.state.PAUSED:case b.api.events.state.BUFFERING:G.seek(M);break}}return true}catch(N){m.sendEvent(b.api.events.JWPLAYER_ERROR,N)}return false}function n(M){if(!c.exists(M)){M=true}try{G.getMedia().stop(M);return true}catch(N){m.sendEvent(b.api.events.JWPLAYER_ERROR,N)}return false}function k(){try{if(G.playlist[G.item].levels[0].file.length>0){if(G.config.shuffle){f(y())}else{if(G.item+1==G.playlist.length){f(0)}else{f(G.item+1)}}}if(G.state!=b.api.events.state.IDLE){var N=G.state;G.state=b.api.events.state.IDLE;m.sendEvent(b.api.events.JWPLAYER_PLAYER_STATE,{oldstate:N,newstate:b.api.events.state.IDLE})}u();return true}catch(M){m.sendEvent(b.api.events.JWPLAYER_ERROR,M)}return false}function j(){try{if(G.playlist[G.item].levels[0].file.length>0){if(G.config.shuffle){f(y())}else{if(G.item===0){f(G.playlist.length-1)}else{f(G.item-1)}}}if(G.state!=b.api.events.state.IDLE){var N=G.state;G.state=b.api.events.state.IDLE;m.sendEvent(b.api.events.JWPLAYER_PLAYER_STATE,{oldstate:N,newstate:b.api.events.state.IDLE})}u();return true}catch(M){m.sendEvent(b.api.events.JWPLAYER_ERROR,M)}return false}function y(){var M=null;if(G.playlist.length>1){while(!c.exists(M)){M=Math.floor(Math.random()*G.playlist.length);if(M==G.item){M=null}}}else{M=0}return M}function t(N){if(!G.playlist||!G.playlist[N]){return false}try{if(G.playlist[N].levels[0].file.length>0){var O=G.state;if(O!==b.api.events.state.IDLE){if(G.playlist[G.item].provider==G.playlist[N].provider){n(false)}else{n()}}f(N);u()}return true}catch(M){m.sendEvent(b.api.events.JWPLAYER_ERROR,M)}return false}function f(M){if(!G.playlist[M]){return}G.setActiveMediaProvider(G.playlist[M]);if(G.item!=M){G.item=M;J=true;m.sendEvent(b.api.events.JWPLAYER_PLAYLIST_ITEM,{index:M})}}function H(N){try{f(G.item);var O=G.getMedia();switch(typeof(N)){case"number":O.volume(N);break;case"string":O.volume(parseInt(N,10));break}return true}catch(M){m.sendEvent(b.api.events.JWPLAYER_ERROR,M)}return false}function q(N){try{f(G.item);var O=G.getMedia();if(typeof N=="undefined"){O.mute(!G.mute)}else{if(N.toString().toLowerCase()=="true"){O.mute(true)}else{O.mute(false)}}return true}catch(M){m.sendEvent(b.api.events.JWPLAYER_ERROR,M)}return false}function l(N,M){try{G.width=N;G.height=M;g.resize(N,M);m.sendEvent(b.api.events.JWPLAYER_RESIZE,{width:G.width,height:G.height});return true}catch(O){m.sendEvent(b.api.events.JWPLAYER_ERROR,O)}return false}function B(N){try{if(typeof N=="undefined"){G.fullscreen=!G.fullscreen;g.fullscreen(!G.fullscreen)}else{if(N.toString().toLowerCase()=="true"){G.fullscreen=true;g.fullscreen(true)}else{G.fullscreen=false;g.fullscreen(false)}}m.sendEvent(b.api.events.JWPLAYER_RESIZE,{width:G.width,height:G.height});m.sendEvent(b.api.events.JWPLAYER_FULLSCREEN,{fullscreen:N});return true}catch(M){m.sendEvent(b.api.events.JWPLAYER_ERROR,M)}return false}function L(M){try{n();G.loadPlaylist(M);f(G.item);return true}catch(N){m.sendEvent(b.api.events.JWPLAYER_ERROR,N)}return false}b.html5.controller.repeatoptions={LIST:"LIST",ALWAYS:"ALWAYS",SINGLE:"SINGLE",NONE:"NONE"};function s(){switch(G.config.repeat.toUpperCase()){case b.html5.controller.repeatoptions.SINGLE:u();break;case b.html5.controller.repeatoptions.ALWAYS:if(G.item==G.playlist.length-1&&!G.config.shuffle){t(0)}else{k()}break;case b.html5.controller.repeatoptions.LIST:if(G.item==G.playlist.length-1&&!G.config.shuffle){n();f(0)}else{k()}break;default:n();break}}var p=[];function F(M){return function(){if(d){x(M,arguments)}else{p.push({method:M,arguments:arguments})}}}function x(O,N){var M=[];for(i=0;i<N.length;i++){M.push(N[i])}O.apply(this,M)}this.play=F(u);this.pause=F(I);this.seek=F(D);this.stop=F(n);this.next=F(k);this.prev=F(j);this.item=F(t);this.setVolume=F(H);this.setMute=F(q);this.resize=F(l);this.setFullscreen=F(B);this.load=F(L);this.playerReady=K}})(jwplayer);(function(a){a.html5.defaultSkin=function(){this.text='<?xml version="1.0" ?><skin author="LongTail Video" name="Five" version="1.0"><settings><setting name="backcolor" value="0xFFFFFF"/><setting name="frontcolor" value="0x000000"/><setting name="lightcolor" value="0x000000"/><setting name="screencolor" value="0x000000"/></settings><components><component name="controlbar"><settings><setting name="margin" value="20"/><setting name="fontsize" value="11"/></settings><elements><element name="background" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAIAAABvFaqvAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFJJREFUeNrslLENwAAIwxLU/09j5AiOgD5hVQzNAVY8JK4qEfHMIKBnd2+BQlBINaiRtL/aV2rdzYBsM6CIONbI1NZENTr3RwdB2PlnJgJ6BRgA4hwu5Qg5iswAAAAASUVORK5CYII="/><element name="capLeft" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAIAAAC0rgCNAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAD5JREFUeNosi8ENACAMAgnuv14H0Z8asI19XEjhOiKCMmibVgJTUt7V6fe9KXOtSQCfctJHu2q3/ot79hNgANc2OTz9uTCCAAAAAElFTkSuQmCC"/><element name="capRight" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAIAAAC0rgCNAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAD5JREFUeNosi8ENACAMAgnuv14H0Z8asI19XEjhOiKCMmibVgJTUt7V6fe9KXOtSQCfctJHu2q3/ot79hNgANc2OTz9uTCCAAAAAElFTkSuQmCC"/><element name="divider" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAAYCAIAAAC0rgCNAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAD5JREFUeNosi8ENACAMAgnuv14H0Z8asI19XEjhOiKCMmibVgJTUt7V6fe9KXOtSQCfctJHu2q3/ot79hNgANc2OTz9uTCCAAAAAElFTkSuQmCC"/><element name="playButton" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAYCAYAAAAVibZIAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAEhJREFUeNpiYqABYBo1dNRQ+hr6H4jvA3E8NS39j4SpZvh/LJig4YxEGEqy3kET+w+AOGFQRhTJhrEQkGcczfujhg4CQwECDADpTRWU/B3wHQAAAABJRU5ErkJggg=="/><element name="pauseButton" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAYCAYAAAAVibZIAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAChJREFUeNpiYBgFo2DwA0YC8v/R1P4nRu+ooaOGUtnQUTAKhgIACDAAFCwQCfAJ4gwAAAAASUVORK5CYII="/><element name="prevButton" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAYCAYAAAAVibZIAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAEtJREFUeNpiYBgFo2Dog/9QDAPyQHweTYwiQ/2B+D0Wi8g2tB+JTdBQRiIMJVkvEy0iglhDF9Aq9uOpHVEwoE+NJDUKRsFgAAABBgDe2hqZcNNL0AAAAABJRU5ErkJggg=="/><element name="nextButton" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAAAYCAYAAAAVibZIAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAElJREFUeNpiYBgFo2Dog/9AfB6I5dHE/lNqKAi/B2J/ahsKw/3EGMpIhKEk66WJoaR6fz61IyqemhEFSlL61ExSo2AUDAYAEGAAiG4hj+5t7M8AAAAASUVORK5CYII="/><element name="timeSliderRail" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADxJREFUeNpiYBgFo2AU0Bwwzluw+D8tLWARFhKiqQ9YuLg4aWsBGxs7bS1gZ6e5BWyjSX0UjIKhDgACDABlYQOGh5pYywAAAABJRU5ErkJggg=="/><element name="timeSliderBuffer" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAD1JREFUeNpiYBgFo2AU0Bww1jc0/aelBSz8/Pw09QELOzs7bS1gY2OjrQWsrKy09gHraFIfBaNgqAOAAAMAvy0DChXHsZMAAAAASUVORK5CYII="/><element name="timeSliderProgress" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAClJREFUeNpiYBgFo2AU0BwwAvF/WlrARGsfjFow8BaMglEwCugAAAIMAOHfAQunR+XzAAAAAElFTkSuQmCC"/><element name="timeSliderThumb" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAICAYAAAA870V8AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAABZJREFUeNpiZICA/yCCiQEJUJcDEGAAY0gBD1/m7Q0AAAAASUVORK5CYII="/><element name="muteButton" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAYCAYAAADKx8xXAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADFJREFUeNpiYBgFIw3MB+L/5Gj8j6yRiRTFyICJXHfTXyMLAXlGati4YDRFDj8AEGAABk8GSqqS4CoAAAAASUVORK5CYII="/><element name="unmuteButton" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAYCAYAAADKx8xXAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAD1JREFUeNpiYBgFgxz8p7bm+cQa+h8LHy7GhEcjIz4bmAjYykiun/8j0fakGPIfTfPgiSr6aB4FVAcAAQYAWdwR1G1Wd2gAAAAASUVORK5CYII="/><element name="volumeSliderRail" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAYCAYAAADkgu3FAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAGpJREFUeNpi/P//PwM9ABMDncCoRYPfIqqDZcuW1UPp/6AUDcNM1DQYKtRAlaAj1mCSLSLXYIIWUctgDItoZfDA5aOoqKhGEANIM9LVR7SymGDQUctikuOIXkFNdhHEOFrDjlpEd4sAAgwAriRMub95fu8AAAAASUVORK5CYII="/><element name="volumeSliderProgress" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAYCAYAAADkgu3FAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFtJREFUeNpi/P//PwM9ABMDncCoRYPfIlqAeij9H5SiYZiqBqPTlFqE02BKLSLaYFItIttgQhZRzWB8FjENiuRJ7aAbsMQwYMl7wDIsWUUQ42gNO2oR3S0CCDAAKhKq6MLLn8oAAAAASUVORK5CYII="/><element name="fullscreenButton" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAE5JREFUeNpiYBgFo2DQA0YC8v/xqP1PjDlMRDrEgUgxkgHIlfZoriVGjmzLsLFHAW2D6D8eA/9Tw7L/BAwgJE90PvhPpNgoGAVDEQAEGAAMdhTyXcPKcAAAAABJRU5ErkJggg=="/><element name="normalscreenButton" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAEZJREFUeNpiYBgFo2DIg/9UUkOUAf8JiFFsyX88fJyAkcQgYMQjNkzBoAgiezyRbE+tFGSPxQJ7auYBmma0UTAKBhgABBgAJAEY6zON61sAAAAASUVORK5CYII="/></elements></component><component name="display"><elements><element name="background" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAEpJREFUeNrszwENADAIA7DhX8ENoBMZ5KR10EryckCJiIiIiIiIiIiIiIiIiIiIiIh8GmkRERERERERERERERERERERERGRHSPAAPlXH1phYpYaAAAAAElFTkSuQmCC"/><element name="playIcon" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAALdJREFUeNrs18ENgjAYhmFouDOCcQJGcARHgE10BDcgTOIosAGwQOuPwaQeuFRi2p/3Sb6EC5L3QCxZBgAAAOCorLW1zMn65TrlkH4NcV7QNcUQt7Gn7KIhxA+qNIR81spOGkL8oFJDyLJRdosqKDDkK+iX5+d7huzwM40xptMQMkjIOeRGo+VkEVvIPfTGIpKASfYIfT9iCHkHrBEzf4gcUQ56aEzuGK/mw0rHpy4AAACAf3kJMACBxjAQNRckhwAAAABJRU5ErkJggg=="/><element name="muteIcon" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHJJREFUeNrs1jEOgCAMBVAg7t5/8qaoIy4uoobyXsLCxA+0NCUAAADGUWvdQoQ41x4ixNBB2hBvBskdD3w5ZCkl3+33VqI0kjBBlh9rp+uTcyOP33TnolfsU85XX3yIRpQph8ZQY3wTZtU5AACASA4BBgDHoVuY1/fvOQAAAABJRU5ErkJggg=="/><element name="errorIcon" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAWlJREFUeNrsl+1twjAQhsHq/7BBYQLYIBmBDcoGMAIjtBPQTcII2SDtBDBBwrU6pGsUO7YbO470PtKJkz9iH++d4ywWAAAAAABgljRNsyWr2bZzDuJG1rLdZhcMbTjrBCGDyUKsqQLFciJb9bSvuG/WagRVRUVUI6gqy5HVeKWfSgRyJruKIU//TrZTSn2nmlaXThrloi/v9F2STC1W4+Aw5cBzkquRc09bofFNc6YLxEON0VUZS5FPTftO49vMjRsIF3RhOGr7/D/pJw+FKU+q0vDyq8W42jCunDqI3LC5XxNj2wHLU1XjaRnb0Lhykhqhhd8MtSF5J9tbjCv4mXGvKJz/65FF/qJryyaaIvzP2QRxZTX2nTuXjvV/VPFSwyLnW7mpH99yTh1FEVro6JBSd40/pMrRdV8vPtcKl28T2pT8TnFZ4yNosct3Q0io6JfBiz1FlGdqVQH3VHnepAEAAAAAADDzEGAAcTwB10jWgxcAAAAASUVORK5CYII="/><element name="bufferIcon" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAuhJREFUeNrsWr9rU1EUznuNGqvFQh1ULOhiBx0KDtIuioO4pJuik3FxFfUPaAV1FTdx0Q5d2g4FFxehTnEpZHFoBy20tCIWtGq0TZP4HfkeHB5N8m6Sl/sa74XDybvv3vvOd8/Pe4lXrVZT3dD8VJc0B8QBcUAcEAfESktHGeR5XtMfqFQq/f92zPe/NbtGlKTdCY30kuxrpMGO94BlQCXs+rbh3ONgA6BlzP1p20d80gEI5hmA2A92Qua1Q2PtAFISM+bvjMG8U+Q7oA3rQGASwrYCU6WpNdLGYbA+Pq5jjXIiwi8EEa2UDbQSaKOIuV+SlkcCrfjY8XTI9EpKGwP0C2kru2hLtHqa4zoXtZRWyvi4CLwv9Opr6Hkn6A9HKgEANsQ1iqC3Ub/vRUk2JgmRkatK36kVrnt0qObunwUdUUMXMWYpakJsO5Am8tAw2GBIgwWA+G2S2dMpiw0gDioQRQJoKhRb1QiDwlHZUABYbaXWsm5ae6loTE4ZDxN4CZar8foVzOJ2iyZ2kWF3t7YIevffaMT5yJ70kQb2fQ1sE5SHr2wazs2wgMxgbsEKEAgxAvZUJbQLBGTSBMgNrncJbA6AljtS/eKDJ0Ez+DmrQEzXS2h1Ck25kAg0IZcUOaydCy4sYnN2fOA+2AP16gNoHALlQ+fwH7XO4CxLenUpgj4xr6ugY2roPMbMx+Xs18m/E8CVEIhxsNeg83XWOAN6grG3lGbk8uE5fr4B/WH3cJw+co/l9nTYsSGYCJ/lY5/qv0thn6nrIWmjeJcPSnWOeY++AkF8tpJHIMAUs/MaBBpj3znZfQo5psY+ZrG4gv5HickjEOymKjEeRpgyST6IuZcTcWbnjcgdPi5ghxciRKsl1lDSsgwA1i8fssonJgzmTSqfGUkCENndNdAL7PS6QQ7ZYISTo+1qq0LEWjTWcvY4isa4z+yfQB+7ooyHVg5RI7/i1Ijn/vnggDggDogD4oC00P4KMACd/juEHOrS4AAAAABJRU5ErkJggg=="/></elements></component><component name="dock"><elements><element name="button" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAYAAAAeP4ixAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAFBJREFUeNrs0cEJACAQA8Eofu0fu/W6EM5ZSAFDRpKTBs00CQQEBAQEBAQEBAQEBAQEBATkK8iqbY+AgICAgICAgICAgICAgICAgIC86QowAG5PAQzEJ0lKAAAAAElFTkSuQmCC"/></elements></component><component name="playlist"><elements><element name="item" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAIAAAC1nk4lAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAHhJREFUeNrs2NEJwCAMBcBYuv/CFuIE9VN47WWCR7iocXR3pdWdGPqqwIoMjYfQeAiNh9B4JHc6MHQVHnjggQceeOCBBx77TifyeOY0iHi8DqIdEY8dD5cL094eePzINB5CO/LwcOTptNB4CP25L4TIbZzpU7UEGAA5wz1uF5rF9AAAAABJRU5ErkJggg=="/><element name="sliderRail" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAA8CAIAAADpFA0BAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADhJREFUeNrsy6ENACAMAMHClp2wYxZLAg5Fcu9e3OjuOKqqfTMzbs14CIZhGIZhGIZhGP4VLwEGAK/BBnVFpB0oAAAAAElFTkSuQmCC"/><element name="sliderThumb" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAA8CAIAAADpFA0BAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADRJREFUeNrsy7ENACAMBLE8++8caFFKKiRffU53112SGs3ttOohGIZhGIZhGIZh+Fe8BRgAiaUGde6NOSEAAAAASUVORK5CYII="/></elements></component></components></skin>';this.xml=null;if(window.DOMParser){parser=new DOMParser();this.xml=parser.parseFromString(this.text,"text/xml")}else{this.xml=new ActiveXObject("Microsoft.XMLDOM");this.xml.async="false";this.xml.loadXML(this.text)}return this}})(jwplayer);(function(a){_utils=a.utils;_css=_utils.css;_hide=function(b){_css(b,{display:"none"})};_show=function(b){_css(b,{display:"block"})};a.html5.display=function(k,G){var j={icons:true,showmute:false};var Q=_utils.extend({},j,G);var h=k;var P={};var e;var u;var w;var N;var s;var I;var A;var J=!_utils.exists(h.skin.getComponentSettings("display").bufferrotation)?15:parseInt(h.skin.getComponentSettings("display").bufferrotation,10);var q=!_utils.exists(h.skin.getComponentSettings("display").bufferinterval)?100:parseInt(h.skin.getComponentSettings("display").bufferinterval,10);var z=-1;var t="";var K=true;var d;var g=false;var n=false;var H=new a.html5.eventdispatcher();_utils.extend(this,H);var D={display:{style:{cursor:"pointer",top:0,left:0,overflow:"hidden"},click:m},display_icon:{style:{cursor:"pointer",position:"absolute",top:((h.skin.getSkinElement("display","background").height-h.skin.getSkinElement("display","playIcon").height)/2),left:((h.skin.getSkinElement("display","background").width-h.skin.getSkinElement("display","playIcon").width)/2),border:0,margin:0,padding:0,zIndex:3,display:"none"}},display_iconBackground:{style:{cursor:"pointer",position:"absolute",top:((u-h.skin.getSkinElement("display","background").height)/2),left:((e-h.skin.getSkinElement("display","background").width)/2),border:0,backgroundImage:(["url(",h.skin.getSkinElement("display","background").src,")"]).join(""),width:h.skin.getSkinElement("display","background").width,height:h.skin.getSkinElement("display","background").height,margin:0,padding:0,zIndex:2,display:"none"}},display_image:{style:{display:"none",width:e,height:u,position:"absolute",cursor:"pointer",left:0,top:0,margin:0,padding:0,textDecoration:"none",zIndex:1}},display_text:{style:{zIndex:4,position:"relative",opacity:0.8,backgroundColor:parseInt("000000",16),color:parseInt("ffffff",16),textAlign:"center",fontFamily:"Arial,sans-serif",padding:"0 5px",fontSize:14}}};h.jwAddEventListener(a.api.events.JWPLAYER_PLAYER_STATE,p);h.jwAddEventListener(a.api.events.JWPLAYER_MEDIA_MUTE,p);h.jwAddEventListener(a.api.events.JWPLAYER_PLAYLIST_ITEM,p);h.jwAddEventListener(a.api.events.JWPLAYER_ERROR,o);L();function L(){P.display=C("div","display");P.display_text=C("div","display_text");P.display.appendChild(P.display_text);P.display_image=C("img","display_image");P.display_image.onerror=function(R){_hide(P.display_image)};P.display_image.onload=y;P.display_icon=C("div","display_icon");P.display_iconBackground=C("div","display_iconBackground");P.display.appendChild(P.display_image);P.display_iconBackground.appendChild(P.display_icon);P.display.appendChild(P.display_iconBackground);f();setTimeout((function(){n=true;if(Q.icons.toString()=="true"){F()}}),1)}this.getDisplayElement=function(){return P.display};this.resize=function(S,R){_css(P.display,{width:S,height:R});_css(P.display_text,{width:(S-10),top:((R-P.display_text.getBoundingClientRect().height)/2)});_css(P.display_iconBackground,{top:((R-h.skin.getSkinElement("display","background").height)/2),left:((S-h.skin.getSkinElement("display","background").width)/2)});if(e!=S||u!=R){e=S;u=R;d=undefined;F()}c();p({})};this.show=function(){if(g){g=false;r(h.jwGetState())}};this.hide=function(){if(!g){B();g=true}};function y(R){w=P.display_image.naturalWidth;N=P.display_image.naturalHeight;c()}function c(){_utils.stretch(h.jwGetStretching(),P.display_image,e,u,w,N)}function C(R,T){var S=document.createElement(R);S.id=h.id+"_jwplayer_"+T;_css(S,D[T].style);return S}function f(){for(var R in P){if(_utils.exists(D[R].click)){P[R].onclick=D[R].click}}}function m(R){if(typeof R.preventDefault!="undefined"){R.preventDefault()}else{R.returnValue=false}if(h.jwGetState()!=a.api.events.state.PLAYING){h.jwPlay()}else{h.jwPause()}}function O(R){if(A){B();return}P.display_icon.style.backgroundImage=(["url(",h.skin.getSkinElement("display",R).src,")"]).join("");_css(P.display_icon,{width:h.skin.getSkinElement("display",R).width,height:h.skin.getSkinElement("display",R).height,top:(h.skin.getSkinElement("display","background").height-h.skin.getSkinElement("display",R).height)/2,left:(h.skin.getSkinElement("display","background").width-h.skin.getSkinElement("display",R).width)/2});b();if(_utils.exists(h.skin.getSkinElement("display",R+"Over"))){P.display_icon.onmouseover=function(S){P.display_icon.style.backgroundImage=["url(",h.skin.getSkinElement("display",R+"Over").src,")"].join("")};P.display_icon.onmouseout=function(S){P.display_icon.style.backgroundImage=["url(",h.skin.getSkinElement("display",R).src,")"].join("")}}else{P.display_icon.onmouseover=null;P.display_icon.onmouseout=null}}function B(){if(Q.icons.toString()=="true"){_hide(P.display_icon);_hide(P.display_iconBackground);M()}}function b(){if(!g&&Q.icons.toString()=="true"){_show(P.display_icon);_show(P.display_iconBackground);F()}}function o(R){A=true;B();P.display_text.innerHTML=R.error;_show(P.display_text);P.display_text.style.top=((u-P.display_text.getBoundingClientRect().height)/2)+"px"}function E(){P.display_image.style.display="none"}function p(R){if((R.type==a.api.events.JWPLAYER_PLAYER_STATE||R.type==a.api.events.JWPLAYER_PLAYLIST_ITEM)&&A){A=false;_hide(P.display_text)}var S=h.jwGetState();if(S==t){return}t=S;if(z>=0){clearTimeout(z)}if(K||h.jwGetState()==a.api.events.state.PLAYING||h.jwGetState()==a.api.events.state.PAUSED){r(h.jwGetState())}else{z=setTimeout(l(h.jwGetState()),500)}}function l(R){return(function(){r(R)})}function r(R){if(_utils.exists(I)){clearInterval(I);I=null;_utils.animations.rotate(P.display_icon,0)}switch(R){case a.api.events.state.BUFFERING:if(_utils.isIOS()){E();B()}else{if(h.jwGetPlaylist()[h.jwGetItem()].provider=="sound"){v()}s=0;I=setInterval(function(){s+=J;_utils.animations.rotate(P.display_icon,s%360)},q);O("bufferIcon");K=true}break;case a.api.events.state.PAUSED:if(!_utils.isIOS()){if(h.jwGetPlaylist()[h.jwGetItem()].provider!="sound"){_css(P.display_image,{background:"transparent no-repeat center center"})}O("playIcon");K=true}break;case a.api.events.state.IDLE:if(h.jwGetPlaylist()[h.jwGetItem()]&&h.jwGetPlaylist()[h.jwGetItem()].image){v()}else{E()}O("playIcon");K=true;break;default:if(h.jwGetPlaylist()[h.jwGetItem()]&&h.jwGetPlaylist()[h.jwGetItem()].provider=="sound"){if(_utils.isIOS()){E();K=false}else{v()}}else{E();K=false}if(h.jwGetMute()&&Q.showmute){O("muteIcon")}else{B()}break}z=-1}function v(){if(h.jwGetPlaylist()[h.jwGetItem()]&&h.jwGetPlaylist()[h.jwGetItem()].image){_css(P.display_image,{display:"block"});P.display_image.src=_utils.getAbsolutePath(h.jwGetPlaylist()[h.jwGetItem()].image)}}function x(R){return function(){if(!n){return}if(!g&&d!=R){d=R;H.sendEvent(R,{component:"display",boundingRect:_utils.getDimensions(P.display_iconBackground)})}}}var F=x(a.api.events.JWPLAYER_COMPONENT_SHOW);var M=x(a.api.events.JWPLAYER_COMPONENT_HIDE);return this}})(jwplayer);(function(a){_css=a.utils.css;a.html5.dock=function(p,u){function q(){return{align:a.html5.view.positions.RIGHT}}var k=a.utils.extend({},q(),u);if(k.align=="FALSE"){return}var f={};var s=[];var g;var v;var d=false;var t=false;var e={x:0,y:0,width:0,height:0};var r;var j=new a.html5.eventdispatcher();_utils.extend(this,j);var m=document.createElement("div");m.id=p.id+"_jwplayer_dock";p.jwAddEventListener(a.api.events.JWPLAYER_PLAYER_STATE,l);this.getDisplayElement=function(){return m};this.setButton=function(A,x,y,z){if(!x&&f[A]){a.utils.arrays.remove(s,A);m.removeChild(f[A].div);delete f[A]}else{if(x){if(!f[A]){f[A]={}}f[A].handler=x;f[A].outGraphic=y;f[A].overGraphic=z;if(!f[A].div){s.push(A);f[A].div=document.createElement("div");f[A].div.style.position="relative";m.appendChild(f[A].div);f[A].div.appendChild(document.createElement("img"));f[A].div.childNodes[0].style.position="absolute";f[A].div.childNodes[0].style.left=0;f[A].div.childNodes[0].style.top=0;f[A].div.childNodes[0].style.zIndex=10;f[A].div.childNodes[0].style.cursor="pointer";f[A].div.appendChild(document.createElement("img"));f[A].div.childNodes[1].style.position="absolute";f[A].div.childNodes[1].style.left=0;f[A].div.childNodes[1].style.top=0;if(p.skin.getSkinElement("dock","button")){f[A].div.childNodes[1].src=p.skin.getSkinElement("dock","button").src}f[A].div.childNodes[1].style.zIndex=9;f[A].div.childNodes[1].style.cursor="pointer";f[A].div.onmouseover=function(){if(f[A].overGraphic){f[A].div.childNodes[0].src=f[A].overGraphic}if(p.skin.getSkinElement("dock","buttonOver")){f[A].div.childNodes[1].src=p.skin.getSkinElement("dock","buttonOver").src}};f[A].div.onmouseout=function(){if(f[A].outGraphic){f[A].div.childNodes[0].src=f[A].outGraphic}if(p.skin.getSkinElement("dock","button")){f[A].div.childNodes[1].src=p.skin.getSkinElement("dock","button").src}};if(f[A].overGraphic){f[A].div.childNodes[0].src=f[A].overGraphic}if(f[A].outGraphic){f[A].div.childNodes[0].src=f[A].outGraphic}if(p.skin.getSkinElement("dock","button")){f[A].div.childNodes[1].src=p.skin.getSkinElement("dock","button").src}}if(x){f[A].div.onclick=function(B){B.preventDefault();a(p.id).callback(A);if(f[A].overGraphic){f[A].div.childNodes[0].src=f[A].overGraphic}if(p.skin.getSkinElement("dock","button")){f[A].div.childNodes[1].src=p.skin.getSkinElement("dock","button").src}}}}}h(g,v)};function h(x,J){if(s.length>0){var y=10;var I=y;var F=-1;var G=p.skin.getSkinElement("dock","button").height;var E=p.skin.getSkinElement("dock","button").width;var C=x-E-y;var H,B;if(k.align==a.html5.view.positions.LEFT){F=1;C=y}for(var z=0;z<s.length;z++){var K=Math.floor(I/J);if((I+G+y)>((K+1)*J)){I=((K+1)*J)+y;K=Math.floor(I/J)}var A=f[s[z]].div;A.style.top=(I%J)+"px";A.style.left=(C+(p.skin.getSkinElement("dock","button").width+y)*K*F)+"px";var D={x:a.utils.parseDimension(A.style.left),y:a.utils.parseDimension(A.style.top),width:E,height:G};if(!H||(D.x<=H.x&&D.y<=H.y)){H=D}if(!B||(D.x>=B.x&&D.y>=B.y)){B=D}I+=p.skin.getSkinElement("dock","button").height+y}e={x:H.x,y:H.y,width:B.x-H.x+B.width,height:H.y-B.y+B.height}}if(t!=p.jwGetFullscreen()||g!=x||v!=J){g=x;v=J;t=p.jwGetFullscreen();r=undefined;setTimeout(n,1)}}function b(x){return function(){if(!d&&r!=x&&s.length>0){r=x;j.sendEvent(x,{component:"dock",boundingRect:e})}}}function l(x){if(a.utils.isIOS()){switch(x.newstate){case a.api.events.state.IDLE:o();break;default:c();break}}}var n=b(a.api.events.JWPLAYER_COMPONENT_SHOW);var w=b(a.api.events.JWPLAYER_COMPONENT_HIDE);this.resize=h;var o=function(){_css(m,{display:"block"});if(d){d=false;n()}};var c=function(){_css(m,{display:"none"});if(!d){w();d=true}};this.hide=c;this.show=o;return this}})(jwplayer);(function(a){a.html5.eventdispatcher=function(d,b){var c=new a.events.eventdispatcher(b);a.utils.extend(this,c);this.sendEvent=function(e,f){if(!a.utils.exists(f)){f={}}a.utils.extend(f,{id:d,version:a.version,type:e});c.sendEvent(e,f)}}})(jwplayer);(function(a){var b={prefix:"http://l.longtailvideo.com/html5/",file:"logo.png",link:"http://www.longtailvideo.com/players/jw-flv-player/",margin:8,out:0.5,over:1,timeout:5,hide:true,position:"bottom-left"};_css=a.utils.css;a.html5.logo=function(n,r){var q=n;var u;var d;var t;var h=false;g();function g(){o();c();l()}function o(){if(b.prefix){var v=n.version.split(/\W/).splice(0,2).join("/");if(b.prefix.indexOf(v)<0){b.prefix+=v+"/"}}if(r.position==a.html5.view.positions.OVER){r.position=b.position}d=a.utils.extend({},b)}function c(){t=document.createElement("img");t.id=q.id+"_jwplayer_logo";t.style.display="none";t.onload=function(v){_css(t,k());q.jwAddEventListener(a.api.events.JWPLAYER_PLAYER_STATE,j);p()};if(!d.file){return}if(d.file.indexOf("http://")===0){t.src=d.file}else{t.src=d.prefix+d.file}}if(!d.file){return}this.resize=function(w,v){};this.getDisplayElement=function(){return t};function l(){if(d.link){t.onmouseover=f;t.onmouseout=p;t.onclick=s}else{this.mouseEnabled=false}}function s(v){if(typeof v!="undefined"){v.stopPropagation()}if(!h){return}q.jwPause();q.jwSetFullscreen(false);if(d.link){window.open(d.link,"_top")}return}function p(v){if(d.link&&h){t.style.opacity=d.out}return}function f(v){if(d.hide.toString()=="true"&&h){t.style.opacity=d.over}return}function k(){var x={textDecoration:"none",position:"absolute",cursor:"pointer"};x.display=(d.hide.toString()=="true")?"none":"block";var w=d.position.toLowerCase().split("-");for(var v in w){x[w[v]]=d.margin}return x}function m(){if(d.hide.toString()=="true"){t.style.display="block";t.style.opacity=0;a.utils.fadeTo(t,d.out,0.1,parseFloat(t.style.opacity));u=setTimeout(function(){e()},d.timeout*1000)}h=true}function e(){h=false;if(d.hide.toString()=="true"){a.utils.fadeTo(t,0,0.1,parseFloat(t.style.opacity))}}function j(v){if(v.newstate==a.api.events.state.BUFFERING){clearTimeout(u);m()}}return this}})(jwplayer);(function(a){var c={ended:a.api.events.state.IDLE,playing:a.api.events.state.PLAYING,pause:a.api.events.state.PAUSED,buffering:a.api.events.state.BUFFERING};var e=a.utils;var b=e.css;var d=e.isIOS();a.html5.mediavideo=function(h,s){var r={abort:n,canplay:k,canplaythrough:k,durationchange:G,emptied:n,ended:k,error:u,loadeddata:G,loadedmetadata:G,loadstart:k,pause:k,play:n,playing:k,progress:v,ratechange:n,seeked:k,seeking:k,stalled:k,suspend:k,timeupdate:D,volumechange:n,waiting:k,canshowcurrentframe:n,dataunavailable:n,empty:n,load:z,loadedfirstframe:n};var j=new a.html5.eventdispatcher();e.extend(this,j);var y=h,l=s,m,B,A,x,f,H=false,C,p,q;o();this.load=function(J,K){if(typeof K=="undefined"){K=true}x=J;e.empty(m);q=0;if(J.levels&&J.levels.length>0){if(J.levels.length==1){m.src=J.levels[0].file}else{if(m.src){m.removeAttribute("src")}for(var I=0;I<J.levels.length;I++){var L=m.ownerDocument.createElement("source");L.src=J.levels[I].file;m.appendChild(L);q++}}}else{m.src=J.file}if(d){if(J.image){m.poster=J.image}m.controls="controls";m.style.display="block"}C=p=A=false;y.buffer=0;if(!e.exists(J.start)){J.start=0}y.duration=J.duration;j.sendEvent(a.api.events.JWPLAYER_MEDIA_LOADED);if((!d&&J.levels.length==1)||!H){m.load()}H=false;if(K){E(a.api.events.state.BUFFERING);j.sendEvent(a.api.events.JWPLAYER_MEDIA_BUFFER,{bufferPercent:0});this.play()}};this.play=function(){if(B!=a.api.events.state.PLAYING){t();if(p){E(a.api.events.state.PLAYING)}else{E(a.api.events.state.BUFFERING)}m.play()}};this.pause=function(){m.pause();E(a.api.events.state.PAUSED)};this.seek=function(I){if(!(y.duration<=0||isNaN(y.duration))&&!(y.position<=0||isNaN(y.position))){m.currentTime=I;m.play()}};_stop=this.stop=function(I){if(!e.exists(I)){I=true}g();if(I){m.style.display="none";p=false;var J=navigator.userAgent;if(J.match(/chrome/i)){m.src=undefined}else{if(J.match(/safari/i)){m.removeAttribute("src")}else{m.src=""}}m.removeAttribute("controls");m.removeAttribute("poster");e.empty(m);m.load();H=true;if(m.webkitSupportsFullscreen){try{m.webkitExitFullscreen()}catch(K){}}}E(a.api.events.state.IDLE)};this.fullscreen=function(I){if(I===true){this.resize("100%","100%")}else{this.resize(y.config.width,y.config.height)}};this.resize=function(J,I){if(false){b(l,{width:J,height:I})}j.sendEvent(a.api.events.JWPLAYER_MEDIA_RESIZE,{fullscreen:y.fullscreen,width:J,hieght:I})};this.volume=function(I){if(!d){m.volume=I/100;y.volume=I;j.sendEvent(a.api.events.JWPLAYER_MEDIA_VOLUME,{volume:Math.round(I)})}};this.mute=function(I){if(!d){m.muted=I;y.mute=I;j.sendEvent(a.api.events.JWPLAYER_MEDIA_MUTE,{mute:I})}};this.getDisplayElement=function(){return m};this.hasChrome=function(){return false};function o(){m=document.createElement("video");B=a.api.events.state.IDLE;for(var I in r){m.addEventListener(I,function(J){if(e.exists(J.target.parentNode)){r[J.type](J)}},true)}m.setAttribute("x-webkit-airplay","allow");if(l.parentNode){l.parentNode.replaceChild(m,l)}if(!m.id){m.id=l.id}}function E(I){if(I==a.api.events.state.PAUSED&&B==a.api.events.state.IDLE){return}if(B!=I){var J=B;y.state=B=I;j.sendEvent(a.api.events.JWPLAYER_PLAYER_STATE,{oldstate:J,newstate:I})}}function n(I){}function v(K){var J;if(e.exists(K)&&K.lengthComputable&&K.total){J=K.loaded/K.total*100}else{if(e.exists(m.buffered)&&(m.buffered.length>0)){var I=m.buffered.length-1;if(I>=0){J=m.buffered.end(I)/m.duration*100}}}if(p===false&&B==a.api.events.state.BUFFERING){j.sendEvent(a.api.events.JWPLAYER_MEDIA_BUFFER_FULL);p=true}if(!C){if(J==100){C=true}if(e.exists(J)&&(J>y.buffer)){y.buffer=Math.round(J);j.sendEvent(a.api.events.JWPLAYER_MEDIA_BUFFER,{bufferPercent:Math.round(J)})}}}function D(J){if(e.exists(J)&&e.exists(J.target)){if(!isNaN(J.target.duration)&&(isNaN(y.duration)||y.duration<1)){if(J.target.duration==Infinity){y.duration=0}else{y.duration=Math.round(J.target.duration*10)/10}}if(!A&&m.readyState>0){m.style.display="block";E(a.api.events.state.PLAYING)}if(B==a.api.events.state.PLAYING){if(!A&&m.readyState>0){A=true;try{if(m.currentTime<x.start){m.currentTime=x.start}}catch(I){}m.volume=y.volume/100;m.muted=y.mute}y.position=y.duration>0?(Math.round(J.target.currentTime*10)/10):0;j.sendEvent(a.api.events.JWPLAYER_MEDIA_TIME,{position:y.position,duration:y.duration});if(y.position>=y.duration&&(y.position>0||y.duration>0)){w()}}}v(J)}function z(I){}function k(I){if(c[I.type]){if(I.type=="ended"){w()}else{E(c[I.type])}}}function G(I){var J={height:I.target.videoHeight,width:I.target.videoWidth,duration:Math.round(I.target.duration*10)/10};if((y.duration===0||isNaN(y.duration))&&I.target.duration!=Infinity){y.duration=Math.round(I.target.duration*10)/10}j.sendEvent(a.api.events.JWPLAYER_MEDIA_META,{metadata:J})}function u(K){if(B==a.api.events.state.IDLE){return}var J="There was an error: ";if((K.target.error&&K.target.tagName.toLowerCase()=="video")||K.target.parentNode.error&&K.target.parentNode.tagName.toLowerCase()=="video"){var I=!e.exists(K.target.error)?K.target.parentNode.error:K.target.error;switch(I.code){case I.MEDIA_ERR_ABORTED:J="You aborted the video playback: ";break;case I.MEDIA_ERR_NETWORK:J="A network error caused the video download to fail part-way: ";break;case I.MEDIA_ERR_DECODE:J="The video playback was aborted due to a corruption problem or because the video used features your browser did not support: ";break;case I.MEDIA_ERR_SRC_NOT_SUPPORTED:J="The video could not be loaded, either because the server or network failed or because the format is not supported: ";break;default:J="An unknown error occurred: ";break}}else{if(K.target.tagName.toLowerCase()=="source"){q--;if(q>0){return}J="The video could not be loaded, either because the server or network failed or because the format is not supported: "}else{e.log("An unknown error occurred.  Continuing...");return}}_stop(false);J+=F();_error=true;j.sendEvent(a.api.events.JWPLAYER_ERROR,{error:J});return}function F(){var K="";for(var J in x.levels){var I=x.levels[J];var L=l.ownerDocument.createElement("source");K+=a.utils.getAbsolutePath(I.file);if(J<(x.levels.length-1)){K+=", "}}return K}function t(){if(!e.exists(f)){f=setInterval(function(){v()},100)}}function g(){clearInterval(f);f=null}function w(){if(B!=a.api.events.state.IDLE){_stop(false);j.sendEvent(a.api.events.JWPLAYER_MEDIA_COMPLETE)}}}})(jwplayer);(function(a){var c={ended:a.api.events.state.IDLE,playing:a.api.events.state.PLAYING,pause:a.api.events.state.PAUSED,buffering:a.api.events.state.BUFFERING};var b=a.utils.css;a.html5.mediayoutube=function(j,e){var f=new a.html5.eventdispatcher();a.utils.extend(this,f);var l=j;var h=document.getElementById(e.id);var g=a.api.events.state.IDLE;var n,m;function k(p){if(g!=p){var q=g;l.state=p;g=p;f.sendEvent(a.api.events.JWPLAYER_PLAYER_STATE,{oldstate:q,newstate:p})}}this.getDisplayElement=function(){return h};this.play=function(){if(g==a.api.events.state.IDLE){f.sendEvent(a.api.events.JWPLAYER_MEDIA_BUFFER,{bufferPercent:100});f.sendEvent(a.api.events.JWPLAYER_MEDIA_BUFFER_FULL);k(a.api.events.state.PLAYING)}else{if(g==a.api.events.state.PAUSED){k(a.api.events.state.PLAYING)}}};this.pause=function(){k(a.api.events.state.PAUSED)};this.seek=function(p){};this.stop=function(p){if(!_utils.exists(p)){p=true}l.position=0;k(a.api.events.state.IDLE);if(p){b(h,{display:"none"})}};this.volume=function(p){l.volume=p;f.sendEvent(a.api.events.JWPLAYER_MEDIA_VOLUME,{volume:Math.round(p)})};this.mute=function(p){h.muted=p;l.mute=p;f.sendEvent(a.api.events.JWPLAYER_MEDIA_MUTE,{mute:p})};this.resize=function(q,p){if(q*p>0&&n){n.width=m.width=q;n.height=m.height=p}f.sendEvent(a.api.events.JWPLAYER_MEDIA_RESIZE,{fullscreen:l.fullscreen,width:q,height:p})};this.fullscreen=function(p){if(p===true){this.resize("100%","100%")}else{this.resize(l.config.width,l.config.height)}};this.load=function(p){o(p);b(n,{display:"block"});k(a.api.events.state.BUFFERING);f.sendEvent(a.api.events.JWPLAYER_MEDIA_BUFFER,{bufferPercent:0});f.sendEvent(a.api.events.JWPLAYER_MEDIA_LOADED);this.play()};this.hasChrome=function(){return(g!=a.api.events.state.IDLE)};function o(v){var s=v.levels[0].file;s=["http://www.youtube.com/v/",d(s),"&amp;hl=en_US&amp;fs=1&autoplay=1"].join("");n=document.createElement("object");n.id=h.id;n.style.position="absolute";var u={movie:s,allowfullscreen:"true",allowscriptaccess:"always"};for(var p in u){var t=document.createElement("param");t.name=p;t.value=u[p];n.appendChild(t)}m=document.createElement("embed");n.appendChild(m);var q={src:s,type:"application/x-shockwave-flash",allowfullscreen:"true",allowscriptaccess:"always",width:n.width,height:n.height};for(var r in q){m.setAttribute(r,q[r])}n.appendChild(m);n.style.zIndex=2147483000;if(h!=n&&h.parentNode){h.parentNode.replaceChild(n,h)}h=n}function d(q){var p=q.split(/\?|\#\!/);var s="";for(var r=0;r<p.length;r++){if(p[r].substr(0,2)=="v="){s=p[r].substr(2)}}if(s==""){if(q.indexOf("/v/")>=0){s=q.substr(q.indexOf("/v/")+3)}else{if(q.indexOf("youtu.be")>=0){s=q.substr(q.indexOf("youtu.be/")+9)}else{s=q}}}if(s.indexOf("?")>-1){s=s.substr(0,s.indexOf("?"))}if(s.indexOf("&")>-1){s=s.substr(0,s.indexOf("&"))}return s}this.embed=m;return this}})(jwplayer);(function(jwplayer){var _configurableStateVariables=["width","height","start","duration","volume","mute","fullscreen","item","plugins","stretching"];jwplayer.html5.model=function(api,container,options){var _api=api;var _container=container;var _model={id:_container.id,playlist:[],state:jwplayer.api.events.state.IDLE,position:0,buffer:0,config:{width:480,height:320,item:-1,skin:undefined,file:undefined,image:undefined,start:0,duration:0,bufferlength:5,volume:90,mute:false,fullscreen:false,repeat:"",stretching:jwplayer.utils.stretching.UNIFORM,autostart:false,debug:undefined,screencolor:undefined}};var _media;var _eventDispatcher=new jwplayer.html5.eventdispatcher();var _components=["display","logo","controlbar","playlist","dock"];jwplayer.utils.extend(_model,_eventDispatcher);for(var option in options){if(typeof options[option]=="string"){var type=/color$/.test(option)?"color":null;options[option]=jwplayer.utils.typechecker(options[option],type)}var config=_model.config;var path=option.split(".");for(var edge in path){if(edge==path.length-1){config[path[edge]]=options[option]}else{if(!jwplayer.utils.exists(config[path[edge]])){config[path[edge]]={}}config=config[path[edge]]}}}for(var index in _configurableStateVariables){var configurableStateVariable=_configurableStateVariables[index];_model[configurableStateVariable]=_model.config[configurableStateVariable]}var pluginorder=_components.concat([]);if(jwplayer.utils.exists(_model.plugins)){if(typeof _model.plugins=="string"){var userplugins=_model.plugins.split(",");for(var userplugin in userplugins){if(typeof userplugins[userplugin]=="string"){pluginorder.push(userplugins[userplugin].replace(/^\s+|\s+$/g,""))}}}}if(jwplayer.utils.isIOS()){pluginorder=["display","logo","dock","playlist"];if(!jwplayer.utils.exists(_model.config.repeat)){_model.config.repeat="list"}}else{if(_model.config.chromeless){pluginorder=["logo","dock","playlist"];if(!jwplayer.utils.exists(_model.config.repeat)){_model.config.repeat="list"}}}_model.plugins={order:pluginorder,config:{},object:{}};if(typeof _model.config.components!="undefined"){for(var component in _model.config.components){_model.plugins.config[component]=_model.config.components[component]}}for(var pluginIndex in _model.plugins.order){var pluginName=_model.plugins.order[pluginIndex];var pluginConfig=!jwplayer.utils.exists(_model.plugins.config[pluginName])?{}:_model.plugins.config[pluginName];_model.plugins.config[pluginName]=!jwplayer.utils.exists(_model.plugins.config[pluginName])?pluginConfig:jwplayer.utils.extend(_model.plugins.config[pluginName],pluginConfig);if(!jwplayer.utils.exists(_model.plugins.config[pluginName].position)){if(pluginName=="playlist"){_model.plugins.config[pluginName].position=jwplayer.html5.view.positions.NONE}else{_model.plugins.config[pluginName].position=jwplayer.html5.view.positions.OVER}}else{_model.plugins.config[pluginName].position=_model.plugins.config[pluginName].position.toString().toUpperCase()}}if(typeof _model.plugins.config.dock!="undefined"){if(typeof _model.plugins.config.dock!="object"){var position=_model.plugins.config.dock.toString().toUpperCase();_model.plugins.config.dock={position:position}}if(typeof _model.plugins.config.dock.position!="undefined"){_model.plugins.config.dock.align=_model.plugins.config.dock.position;_model.plugins.config.dock.position=jwplayer.html5.view.positions.OVER}}function _loadExternal(playlistfile){var loader=new jwplayer.html5.playlistloader();loader.addEventListener(jwplayer.api.events.JWPLAYER_PLAYLIST_LOADED,function(evt){_model.playlist=new jwplayer.html5.playlist(evt);_loadComplete(true)});loader.addEventListener(jwplayer.api.events.JWPLAYER_ERROR,function(evt){_model.playlist=new jwplayer.html5.playlist({playlist:[]});_loadComplete(false)});loader.load(playlistfile)}function _loadComplete(){if(_model.config.shuffle){_model.item=_getShuffleItem()}else{if(_model.config.item>=_model.playlist.length){_model.config.item=_model.playlist.length-1}else{if(_model.config.item<0){_model.config.item=0}}_model.item=_model.config.item}_eventDispatcher.sendEvent(jwplayer.api.events.JWPLAYER_PLAYLIST_LOADED,{playlist:_model.playlist});_eventDispatcher.sendEvent(jwplayer.api.events.JWPLAYER_PLAYLIST_ITEM,{index:_model.item})}_model.loadPlaylist=function(arg){var input;if(typeof arg=="string"){if(arg.indexOf("[")==0||arg.indexOf("{")=="0"){try{input=eval(arg)}catch(err){input=arg}}else{input=arg}}else{input=arg}var config;switch(jwplayer.utils.typeOf(input)){case"object":config=input;break;case"array":config={playlist:input};break;default:_loadExternal(input);return;break}_model.playlist=new jwplayer.html5.playlist(config);if(jwplayer.utils.extension(_model.playlist[0].file)=="xml"){_loadExternal(_model.playlist[0].file)}else{_loadComplete()}};function _getShuffleItem(){var result=null;if(_model.playlist.length>1){while(!jwplayer.utils.exists(result)){result=Math.floor(Math.random()*_model.playlist.length);if(result==_model.item){result=null}}}else{result=0}return result}function forward(evt){if(evt.type==jwplayer.api.events.JWPLAYER_MEDIA_LOADED){_container=_media.getDisplayElement()}_eventDispatcher.sendEvent(evt.type,evt)}var _mediaProviders={};_model.setActiveMediaProvider=function(playlistItem){if(playlistItem.provider=="audio"){playlistItem.provider="sound"}var provider=playlistItem.provider;var current=_media?_media.getDisplayElement():null;if(provider=="sound"||provider=="http"||provider==""){provider="video"}if(!jwplayer.utils.exists(_mediaProviders[provider])){switch(provider){case"video":_media=new jwplayer.html5.mediavideo(_model,current?current:_container);break;case"youtube":_media=new jwplayer.html5.mediayoutube(_model,current?current:_container);break}if(!jwplayer.utils.exists(_media)){return false}_media.addGlobalListener(forward);_mediaProviders[provider]=_media}else{if(_media!=_mediaProviders[provider]){if(_media){_media.stop()}_media=_mediaProviders[provider]}}return true};_model.getMedia=function(){return _media};_model.seek=function(pos){_eventDispatcher.sendEvent(jwplayer.api.events.JWPLAYER_MEDIA_SEEK,{position:_model.position,offset:pos});return _media.seek(pos)};_model.setupPlugins=function(){if(!jwplayer.utils.exists(_model.plugins)||!jwplayer.utils.exists(_model.plugins.order)||_model.plugins.order.length==0){jwplayer.utils.log("No plugins to set up");return _model}for(var i=0;i<_model.plugins.order.length;i++){try{var pluginName=_model.plugins.order[i];if(jwplayer.utils.exists(jwplayer.html5[pluginName])){if(pluginName=="playlist"){_model.plugins.object[pluginName]=new jwplayer.html5.playlistcomponent(_api,_model.plugins.config[pluginName])}else{_model.plugins.object[pluginName]=new jwplayer.html5[pluginName](_api,_model.plugins.config[pluginName])}}else{_model.plugins.order.splice(plugin,plugin+1)}if(typeof _model.plugins.object[pluginName].addGlobalListener=="function"){_model.plugins.object[pluginName].addGlobalListener(forward)}}catch(err){jwplayer.utils.log("Could not setup "+pluginName)}}};return _model}})(jwplayer);(function(a){a.html5.playlist=function(b){var d=[];if(b.playlist&&b.playlist instanceof Array&&b.playlist.length>0){for(var c in b.playlist){if(!isNaN(parseInt(c))){d.push(new a.html5.playlistitem(b.playlist[c]))}}}else{d.push(new a.html5.playlistitem(b))}return d}})(jwplayer);(function(a){var c={size:180,position:a.html5.view.positions.NONE,itemheight:60,thumbs:true,fontcolor:"#000000",overcolor:"",activecolor:"",backgroundcolor:"#f8f8f8",font:"_sans",fontsize:"",fontstyle:"",fontweight:""};var b={_sans:"Arial, Helvetica, sans-serif",_serif:"Times, Times New Roman, serif",_typewriter:"Courier New, Courier, monospace"};_utils=a.utils;_css=_utils.css;_hide=function(d){_css(d,{display:"none"})};_show=function(d){_css(d,{display:"block"})};a.html5.playlistcomponent=function(r,B){var w=r;var e=a.utils.extend({},c,w.skin.getComponentSettings("playlist"),B);if(e.position==a.html5.view.positions.NONE||typeof a.html5.view.positions[e.position]=="undefined"){return}var x;var l;var C;var d;var g;var f;var k=-1;var h={background:undefined,item:undefined,itemOver:undefined,itemImage:undefined,itemActive:undefined};this.getDisplayElement=function(){return x};this.resize=function(F,D){l=F;C=D;if(w.jwGetFullscreen()){_hide(x)}else{var E={display:"block",width:l,height:C};_css(x,E)}};this.show=function(){_show(x)};this.hide=function(){_hide(x)};function j(){x=document.createElement("div");x.id=w.id+"_jwplayer_playlistcomponent";switch(e.position){case a.html5.view.positions.RIGHT:case a.html5.view.positions.LEFT:x.style.width=e.size+"px";break;case a.html5.view.positions.TOP:case a.html5.view.positions.BOTTOM:x.style.height=e.size+"px";break}A();if(h.item){e.itemheight=h.item.height}x.style.backgroundColor="#C6C6C6";w.jwAddEventListener(a.api.events.JWPLAYER_PLAYLIST_LOADED,s);w.jwAddEventListener(a.api.events.JWPLAYER_PLAYLIST_ITEM,u);w.jwAddEventListener(a.api.events.JWPLAYER_PLAYER_STATE,m)}function p(){var D=document.createElement("ul");_css(D,{width:x.style.width,minWidth:x.style.width,height:x.style.height,backgroundColor:e.backgroundcolor,backgroundImage:h.background?"url("+h.background.src+")":"",color:e.fontcolor,listStyle:"none",margin:0,padding:0,fontFamily:b[e.font]?b[e.font]:b._sans,fontSize:(e.fontsize?e.fontsize:11)+"px",fontStyle:e.fontstyle,fontWeight:e.fontweight,overflowY:"auto"});return D}function y(D){return function(){var E=f.getElementsByClassName("item")[D];var F=e.fontcolor;var G=h.item?"url("+h.item.src+")":"";if(D==w.jwGetPlaylistIndex()){if(e.activecolor!==""){F=e.activecolor}if(h.itemActive){G="url("+h.itemActive.src+")"}}_css(E,{color:e.overcolor!==""?e.overcolor:F,backgroundImage:h.itemOver?"url("+h.itemOver.src+")":G})}}function o(D){return function(){var E=f.getElementsByClassName("item")[D];var F=e.fontcolor;var G=h.item?"url("+h.item.src+")":"";if(D==w.jwGetPlaylistIndex()){if(e.activecolor!==""){F=e.activecolor}if(h.itemActive){G="url("+h.itemActive.src+")"}}_css(E,{color:F,backgroundImage:G})}}function q(I){var P=d[I];var O=document.createElement("li");O.className="item";_css(O,{height:e.itemheight,display:"block",cursor:"pointer",backgroundImage:h.item?"url("+h.item.src+")":"",backgroundSize:"100% "+e.itemheight+"px"});O.onmouseover=y(I);O.onmouseout=o(I);var J=document.createElement("div");var F=new Image();var K=0;var L=0;var M=0;if(v()&&(P.image||P["playlist.image"]||h.itemImage)){F.className="image";if(h.itemImage){K=(e.itemheight-h.itemImage.height)/2;L=h.itemImage.width;M=h.itemImage.height}else{L=e.itemheight*4/3;M=e.itemheight}_css(J,{height:M,width:L,"float":"left",styleFloat:"left",cssFloat:"left",margin:"0 5px 0 0",background:"black",overflow:"hidden",margin:K+"px",position:"relative"});_css(F,{position:"relative"});J.appendChild(F);F.onload=function(){a.utils.stretch(a.utils.stretching.FILL,F,L,M,this.naturalWidth,this.naturalHeight)};if(P["playlist.image"]){F.src=P["playlist.image"]}else{if(P.image){F.src=P.image}else{if(h.itemImage){F.src=h.itemImage.src}}}O.appendChild(J)}var E=l-L-K*2;if(C<e.itemheight*d.length){E-=15}var D=document.createElement("div");_css(D,{position:"relative",height:"100%",overflow:"hidden"});var G=document.createElement("span");if(P.duration>0){G.className="duration";_css(G,{fontSize:(e.fontsize?e.fontsize:11)+"px",fontWeight:(e.fontweight?e.fontweight:"bold"),width:"40px",height:e.fontsize?e.fontsize+10:20,lineHeight:24,"float":"right",styleFloat:"right",cssFloat:"right"});G.innerHTML=_utils.timeFormat(P.duration);D.appendChild(G)}var N=document.createElement("span");N.className="title";_css(N,{padding:"5px 5px 0 "+(K?0:"5px"),height:e.fontsize?e.fontsize+10:20,lineHeight:e.fontsize?e.fontsize+10:20,overflow:"hidden","float":"left",styleFloat:"left",cssFloat:"left",width:((P.duration>0)?E-50:E)-10+"px",fontSize:(e.fontsize?e.fontsize:13)+"px",fontWeight:(e.fontweight?e.fontweight:"bold")});N.innerHTML=P?P.title:"";D.appendChild(N);if(P.description){var H=document.createElement("span");H.className="description";_css(H,{display:"block","float":"left",styleFloat:"left",cssFloat:"left",margin:0,paddingLeft:N.style.paddingLeft,paddingRight:N.style.paddingRight,lineHeight:(e.fontsize?e.fontsize+4:16)+"px",overflow:"hidden",position:"relative"});H.innerHTML=P.description;D.appendChild(H)}O.appendChild(D);return O}function s(E){x.innerHTML="";d=w.jwGetPlaylist();if(!d){return}items=[];f=p();for(var F=0;F<d.length;F++){var D=q(F);D.onclick=z(F);f.appendChild(D);items.push(D)}k=w.jwGetPlaylistIndex();o(k)();x.appendChild(f);if(_utils.isIOS()&&window.iScroll){f.style.height=e.itemheight*d.length+"px";var G=new iScroll(x.id)}}function z(D){return function(){w.jwPlaylistItem(D);w.jwPlay(true)}}function n(){f.scrollTop=w.jwGetPlaylistIndex()*e.itemheight}function v(){return e.thumbs.toString().toLowerCase()=="true"}function u(D){if(k>=0){o(k)();k=D.index}o(D.index)();n()}function m(){if(e.position==a.html5.view.positions.OVER){switch(w.jwGetState()){case a.api.events.state.IDLE:_show(x);break;default:_hide(x);break}}}function A(){for(var D in h){h[D]=t(D)}}function t(D){return w.skin.getSkinElement("playlist",D)}j();return this}})(jwplayer);(function(b){b.html5.playlistitem=function(d){var e={author:"",date:"",description:"",image:"",link:"",mediaid:"",tags:"",title:"",provider:"",file:"",streamer:"",duration:-1,start:0,currentLevel:-1,levels:[]};var c=b.utils.extend({},e,d);if(c.type){c.provider=c.type;delete c.type}if(c.levels.length===0){c.levels[0]=new b.html5.playlistitemlevel(c)}if(!c.provider){c.provider=a(c.levels[0])}else{c.provider=c.provider.toLowerCase()}return c};function a(e){if(b.utils.isYouTube(e.file)){return"youtube"}else{var f=b.utils.extension(e.file);var c;if(f&&b.utils.extensionmap[f]){if(f=="m3u8"){return"video"}c=b.utils.extensionmap[f].html5}else{if(e.type){c=e.type}}if(c){var d=c.split("/")[0];if(d=="audio"){return"sound"}else{if(d=="video"){return d}}}}return""}})(jwplayer);(function(a){a.html5.playlistitemlevel=function(b){var d={file:"",streamer:"",bitrate:0,width:0};for(var c in d){if(a.utils.exists(b[c])){d[c]=b[c]}}return d}})(jwplayer);(function(a){a.html5.playlistloader=function(){var c=new a.html5.eventdispatcher();a.utils.extend(this,c);this.load=function(e){a.utils.ajax(e,d,b)};function d(g){var f=[];try{var f=a.utils.parsers.rssparser.parse(g.responseXML.firstChild);c.sendEvent(a.api.events.JWPLAYER_PLAYLIST_LOADED,{playlist:new a.html5.playlist({playlist:f})})}catch(h){b("Could not parse the playlist")}}function b(e){c.sendEvent(a.api.events.JWPLAYER_ERROR,{error:e?e:"could not load playlist for whatever reason.  too bad"})}}})(jwplayer);(function(a){a.html5.skin=function(){var b={};var c=false;this.load=function(d,e){new a.html5.skinloader(d,function(f){c=true;b=f;e()},function(){new a.html5.skinloader("",function(f){c=true;b=f;e()})})};this.getSkinElement=function(d,e){if(c){try{return b[d].elements[e]}catch(f){a.utils.log("No such skin component / element: ",[d,e])}}return null};this.getComponentSettings=function(d){if(c){return b[d].settings}return null};this.getComponentLayout=function(d){if(c){return b[d].layout}return null}}})(jwplayer);(function(a){a.html5.skinloader=function(f,p,k){var o={};var c=p;var l=k;var e=true;var j;var n=f;var s=false;function m(){if(typeof n!="string"||n===""){d(a.html5.defaultSkin().xml)}else{a.utils.ajax(a.utils.getAbsolutePath(n),function(t){try{if(a.utils.exists(t.responseXML)){d(t.responseXML);return}}catch(u){h()}d(a.html5.defaultSkin().xml)},function(t){d(a.html5.defaultSkin().xml)})}}function d(y){var E=y.getElementsByTagName("component");if(E.length===0){return}for(var H=0;H<E.length;H++){var C=E[H].getAttribute("name");var B={settings:{},elements:{},layout:{}};o[C]=B;var G=E[H].getElementsByTagName("elements")[0].getElementsByTagName("element");for(var F=0;F<G.length;F++){b(G[F],C)}var z=E[H].getElementsByTagName("settings")[0];if(z&&z.childNodes.length>0){var K=z.getElementsByTagName("setting");for(var P=0;P<K.length;P++){var Q=K[P].getAttribute("name");var I=K[P].getAttribute("value");var x=/color$/.test(Q)?"color":null;o[C].settings[Q]=a.utils.typechecker(I,x)}}var L=E[H].getElementsByTagName("layout")[0];if(L&&L.childNodes.length>0){var M=L.getElementsByTagName("group");for(var w=0;w<M.length;w++){var A=M[w];o[C].layout[A.getAttribute("position")]={elements:[]};for(var O=0;O<A.attributes.length;O++){var D=A.attributes[O];o[C].layout[A.getAttribute("position")][D.name]=D.value}var N=A.getElementsByTagName("*");for(var v=0;v<N.length;v++){var t=N[v];o[C].layout[A.getAttribute("position")].elements.push({type:t.tagName});for(var u=0;u<t.attributes.length;u++){var J=t.attributes[u];o[C].layout[A.getAttribute("position")].elements[v][J.name]=J.value}if(!a.utils.exists(o[C].layout[A.getAttribute("position")].elements[v].name)){o[C].layout[A.getAttribute("position")].elements[v].name=t.tagName}}}}e=false;r()}}function r(){clearInterval(j);if(!s){j=setInterval(function(){q()},100)}}function b(y,x){var w=new Image();var t=y.getAttribute("name");var v=y.getAttribute("src");var A;if(v.indexOf("data:image/png;base64,")===0){A=v}else{var u=a.utils.getAbsolutePath(n);var z=u.substr(0,u.lastIndexOf("/"));A=[z,x,v].join("/")}o[x].elements[t]={height:0,width:0,src:"",ready:false,image:w};w.onload=function(B){g(w,t,x)};w.onerror=function(B){s=true;r();l()};w.src=A}function h(){for(var u in o){var w=o[u];for(var t in w.elements){var x=w.elements[t];var v=x.image;v.onload=null;v.onerror=null;delete x.image;delete w.elements[t]}delete o[u]}}function q(){for(var t in o){if(t!="properties"){for(var u in o[t].elements){if(!o[t].elements[u].ready){return}}}}if(e===false){clearInterval(j);c(o)}}function g(t,v,u){if(o[u]&&o[u].elements[v]){o[u].elements[v].height=t.height;o[u].elements[v].width=t.width;o[u].elements[v].src=t.src;o[u].elements[v].ready=true;r()}else{a.utils.log("Loaded an image for a missing element: "+u+"."+v)}}m()}})(jwplayer);(function(a){a.html5.api=function(c,n){var m={};var f=document.createElement("div");c.parentNode.replaceChild(f,c);f.id=c.id;m.version=a.version;m.id=f.id;var l=new a.html5.model(m,f,n);var j=new a.html5.view(m,f,l);var k=new a.html5.controller(m,f,l,j);m.skin=new a.html5.skin();m.jwPlay=function(o){if(typeof o=="undefined"){e()}else{if(o.toString().toLowerCase()=="true"){k.play()}else{k.pause()}}};m.jwPause=function(o){if(typeof o=="undefined"){e()}else{if(o.toString().toLowerCase()=="true"){k.pause()}else{k.play()}}};function e(){if(l.state==a.api.events.state.PLAYING||l.state==a.api.events.state.BUFFERING){k.pause()}else{k.play()}}m.jwStop=k.stop;m.jwSeek=k.seek;m.jwPlaylistItem=k.item;m.jwPlaylistNext=k.next;m.jwPlaylistPrev=k.prev;m.jwResize=k.resize;m.jwLoad=k.load;function h(o){return function(){return l[o]}}function d(o,q,p){return function(){var r=l.plugins.object[o];if(r&&r[q]&&typeof r[q]=="function"){r[q].apply(r,p)}}}m.jwGetItem=h("item");m.jwGetPosition=h("position");m.jwGetDuration=h("duration");m.jwGetBuffer=h("buffer");m.jwGetWidth=h("width");m.jwGetHeight=h("height");m.jwGetFullscreen=h("fullscreen");m.jwSetFullscreen=k.setFullscreen;m.jwGetVolume=h("volume");m.jwSetVolume=k.setVolume;m.jwGetMute=h("mute");m.jwSetMute=k.setMute;m.jwGetStretching=h("stretching");m.jwGetState=h("state");m.jwGetVersion=function(){return m.version};m.jwGetPlaylist=function(){return l.playlist};m.jwGetPlaylistIndex=m.jwGetItem;m.jwAddEventListener=k.addEventListener;m.jwRemoveEventListener=k.removeEventListener;m.jwSendEvent=k.sendEvent;m.jwDockSetButton=function(r,o,p,q){if(l.plugins.object.dock&&l.plugins.object.dock.setButton){l.plugins.object.dock.setButton(r,o,p,q)}};m.jwControlbarShow=d("controlbar","show");m.jwControlbarHide=d("controlbar","hide");m.jwDockShow=d("dock","show");m.jwDockHide=d("dock","hide");m.jwDisplayShow=d("display","show");m.jwDisplayHide=d("display","hide");m.jwGetLevel=function(){};m.jwGetBandwidth=function(){};m.jwGetLockState=function(){};m.jwLock=function(){};m.jwUnlock=function(){};function b(){if(l.config.playlistfile){l.addEventListener(a.api.events.JWPLAYER_PLAYLIST_LOADED,g);l.loadPlaylist(l.config.playlistfile)}else{if(typeof l.config.playlist=="string"){l.addEventListener(a.api.events.JWPLAYER_PLAYLIST_LOADED,g);l.loadPlaylist(l.config.playlist)}else{l.loadPlaylist(l.config);setTimeout(g,25)}}}function g(o){l.removeEventListener(a.api.events.JWPLAYER_PLAYLIST_LOADED,g);l.setupPlugins();j.setup();var o={id:m.id,version:m.version};k.playerReady(o)}if(l.config.chromeless&&!a.utils.isIOS()){b()}else{m.skin.load(l.config.skin,b)}return m}})(jwplayer)};/*
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2782
  mustache.js — Logic-less templates in JavaScript
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2783
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2784
  See http://mustache.github.com/ for more info.
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2785
*/
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2786
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2787
var Mustache = function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2788
  var Renderer = function() {};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2789
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2790
  Renderer.prototype = {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2791
    otag: "{{",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2792
    ctag: "}}",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2793
    pragmas: {},
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2794
    buffer: [],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2795
    pragmas_implemented: {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2796
      "IMPLICIT-ITERATOR": true
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2797
    },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2798
    context: {},
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2799
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2800
    render: function(template, context, partials, in_recursion) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2801
      // reset buffer & set context
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2802
      if(!in_recursion) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2803
        this.context = context;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2804
        this.buffer = []; // TODO: make this non-lazy
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2805
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2806
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2807
      // fail fast
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2808
      if(!this.includes("", template)) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2809
        if(in_recursion) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2810
          return template;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2811
        } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2812
          this.send(template);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2813
          return;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2814
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2815
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2816
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2817
      template = this.render_pragmas(template);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2818
      var html = this.render_section(template, context, partials);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2819
      if(in_recursion) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2820
        return this.render_tags(html, context, partials, in_recursion);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2821
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2822
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2823
      this.render_tags(html, context, partials, in_recursion);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2824
    },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2825
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2826
    /*
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2827
      Sends parsed lines
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2828
    */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2829
    send: function(line) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2830
      if(line !== "") {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2831
        this.buffer.push(line);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2832
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2833
    },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2834
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2835
    /*
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2836
      Looks for %PRAGMAS
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2837
    */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2838
    render_pragmas: function(template) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2839
      // no pragmas
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2840
      if(!this.includes("%", template)) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2841
        return template;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2842
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2843
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2844
      var that = this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2845
      var regex = new RegExp(this.otag + "%([\\w-]+) ?([\\w]+=[\\w]+)?" +
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2846
            this.ctag, "g");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2847
      return template.replace(regex, function(match, pragma, options) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2848
        if(!that.pragmas_implemented[pragma]) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2849
          throw({message: 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2850
            "This implementation of mustache doesn't understand the '" +
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2851
            pragma + "' pragma"});
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2852
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2853
        that.pragmas[pragma] = {};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2854
        if(options) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2855
          var opts = options.split("=");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2856
          that.pragmas[pragma][opts[0]] = opts[1];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2857
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2858
        return "";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2859
        // ignore unknown pragmas silently
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2860
      });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2861
    },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2862
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2863
    /*
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2864
      Tries to find a partial in the curent scope and render it
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2865
    */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2866
    render_partial: function(name, context, partials) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2867
      name = this.trim(name);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2868
      if(!partials || partials[name] === undefined) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2869
        throw({message: "unknown_partial '" + name + "'"});
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2870
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2871
      if(typeof(context[name]) != "object") {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2872
        return this.render(partials[name], context, partials, true);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2873
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2874
      return this.render(partials[name], context[name], partials, true);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2875
    },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2876
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2877
    /*
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2878
      Renders inverted (^) and normal (#) sections
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2879
    */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2880
    render_section: function(template, context, partials) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2881
      if(!this.includes("#", template) && !this.includes("^", template)) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2882
        return template;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2883
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2884
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2885
      var that = this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2886
      // CSW - Added "+?" so it finds the tighest bound, not the widest
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2887
      var regex = new RegExp(this.otag + "(\\^|\\#)\\s*(.+)\\s*" + this.ctag +
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2888
              "\n*([\\s\\S]+?)" + this.otag + "\\/\\s*\\2\\s*" + this.ctag +
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2889
              "\\s*", "mg");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2890
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2891
      // for each {{#foo}}{{/foo}} section do...
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2892
      return template.replace(regex, function(match, type, name, content) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2893
        var value = that.find(name, context);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2894
        if(type == "^") { // inverted section
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2895
          if(!value || that.is_array(value) && value.length === 0) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2896
            // false or empty list, render it
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2897
            return that.render(content, context, partials, true);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2898
          } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2899
            return "";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2900
          }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2901
        } else if(type == "#") { // normal section
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2902
          if(that.is_array(value)) { // Enumerable, Let's loop!
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2903
            return that.map(value, function(row) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2904
              return that.render(content, that.create_context(row),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2905
                partials, true);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2906
            }).join("");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2907
          } else if(that.is_object(value)) { // Object, Use it as subcontext!
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2908
            return that.render(content, that.create_context(value),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2909
              partials, true);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2910
          } else if(typeof value === "function") {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2911
            // higher order section
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2912
            return value.call(context, content, function(text) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2913
              return that.render(text, context, partials, true);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2914
            });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2915
          } else if(value) { // boolean section
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2916
            return that.render(content, context, partials, true);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2917
          } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2918
            return "";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2919
          }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2920
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2921
      });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2922
    },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2923
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2924
    /*
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2925
      Replace {{foo}} and friends with values from our view
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2926
    */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2927
    render_tags: function(template, context, partials, in_recursion) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2928
      // tit for tat
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2929
      var that = this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2930
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2931
      var new_regex = function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2932
        return new RegExp(that.otag + "(=|!|>|\\{|%)?([^\\/#\\^]+?)\\1?" +
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2933
          that.ctag + "+", "g");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2934
      };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2935
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2936
      var regex = new_regex();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2937
      var tag_replace_callback = function(match, operator, name) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2938
        switch(operator) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2939
        case "!": // ignore comments
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2940
          return "";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2941
        case "=": // set new delimiters, rebuild the replace regexp
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2942
          that.set_delimiters(name);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2943
          regex = new_regex();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2944
          return "";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2945
        case ">": // render partial
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2946
          return that.render_partial(name, context, partials);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2947
        case "{": // the triple mustache is unescaped
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2948
          return that.find(name, context);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2949
        default: // escape the value
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2950
          return that.escape(that.find(name, context));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2951
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2952
      };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2953
      var lines = template.split("\n");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2954
      for(var i = 0; i < lines.length; i++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2955
        lines[i] = lines[i].replace(regex, tag_replace_callback, this);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2956
        if(!in_recursion) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2957
          this.send(lines[i]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2958
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2959
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2960
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2961
      if(in_recursion) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2962
        return lines.join("\n");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2963
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2964
    },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2965
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2966
    set_delimiters: function(delimiters) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2967
      var dels = delimiters.split(" ");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2968
      this.otag = this.escape_regex(dels[0]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2969
      this.ctag = this.escape_regex(dels[1]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2970
    },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2971
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2972
    escape_regex: function(text) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2973
      // thank you Simon Willison
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2974
      if(!arguments.callee.sRE) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2975
        var specials = [
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2976
          '/', '.', '*', '+', '?', '|',
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2977
          '(', ')', '[', ']', '{', '}', '\\'
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2978
        ];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2979
        arguments.callee.sRE = new RegExp(
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2980
          '(\\' + specials.join('|\\') + ')', 'g'
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2981
        );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2982
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2983
      return text.replace(arguments.callee.sRE, '\\$1');
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2984
    },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2985
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2986
    /*
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2987
      find `name` in current `context`. That is find me a value
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2988
      from the view object
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2989
    */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2990
    find: function(name, context) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2991
      name = this.trim(name);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2992
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2993
      // Checks whether a value is thruthy or false or 0
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2994
      function is_kinda_truthy(bool) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2995
        return bool === false || bool === 0 || bool;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2996
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2997
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2998
      var value;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  2999
      if(is_kinda_truthy(context[name])) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3000
        value = context[name];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3001
      } else if(is_kinda_truthy(this.context[name])) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3002
        value = this.context[name];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3003
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3004
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3005
      if(typeof value === "function") {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3006
        return value.apply(context);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3007
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3008
      if(value !== undefined) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3009
        return value;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3010
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3011
      // silently ignore unkown variables
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3012
      return "";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3013
    },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3014
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3015
    // Utility methods
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3016
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3017
    /* includes tag */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3018
    includes: function(needle, haystack) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3019
      return haystack.indexOf(this.otag + needle) != -1;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3020
    },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3021
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3022
    /*
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3023
      Does away with nasty characters
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3024
    */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3025
    escape: function(s) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3026
      s = String(s === null ? "" : s);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3027
      return s.replace(/&(?!\w+;)|["'<>\\]/g, function(s) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3028
        switch(s) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3029
        case "&": return "&amp;";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3030
        case "\\": return "\\\\";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3031
        case '"': return '&quot;';
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3032
        case "'": return '&#39;';
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3033
        case "<": return "&lt;";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3034
        case ">": return "&gt;";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3035
        default: return s;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3036
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3037
      });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3038
    },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3039
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3040
    // by @langalex, support for arrays of strings
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3041
    create_context: function(_context) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3042
      if(this.is_object(_context)) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3043
        return _context;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3044
      } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3045
        var iterator = ".";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3046
        if(this.pragmas["IMPLICIT-ITERATOR"]) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3047
          iterator = this.pragmas["IMPLICIT-ITERATOR"].iterator;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3048
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3049
        var ctx = {};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3050
        ctx[iterator] = _context;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3051
        return ctx;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3052
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3053
    },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3054
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3055
    is_object: function(a) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3056
      return a && typeof a == "object";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3057
    },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3058
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3059
    is_array: function(a) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3060
      return Object.prototype.toString.call(a) === '[object Array]';
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3061
    },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3062
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3063
    /*
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3064
      Gets rid of leading and trailing whitespace
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3065
    */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3066
    trim: function(s) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3067
      return s.replace(/^\s*|\s*$/g, "");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3068
    },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3069
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3070
    /*
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3071
      Why, why, why? Because IE. Cry, cry cry.
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3072
    */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3073
    map: function(array, fn) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3074
      if (typeof array.map == "function") {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3075
        return array.map(fn);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3076
      } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3077
        var r = [];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3078
        var l = array.length;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3079
        for(var i = 0; i < l; i++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3080
          r.push(fn(array[i]));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3081
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3082
        return r;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3083
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3084
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3085
  };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3086
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3087
  return({
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3088
    name: "mustache.js",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3089
    version: "0.3.1-dev",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3090
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3091
    /*
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3092
      Turns a template and view into HTML
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3093
    */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3094
    to_html: function(template, view, partials, send_fun) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3095
      var renderer = new Renderer();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3096
      if(send_fun) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3097
        renderer.send = send_fun;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3098
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3099
      renderer.render(template, view, partials);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3100
      if(!send_fun) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3101
        return renderer.buffer.join("\n");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3102
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3103
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3104
  });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3105
}();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3106
// ┌─────────────────────────────────────────────────────────────────────┐ \\
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3107
// │ Raphaël 2.0 - JavaScript Vector Library                             │ \\
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3108
// ├─────────────────────────────────────────────────────────────────────┤ \\
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3109
// │ Copyright (c) 2008-2011 Dmitry Baranovskiy (http://raphaeljs.com)   │ \\
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3110
// │ Copyright (c) 2008-2011 Sencha Labs (http://sencha.com)             │ \\
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3111
// │ Licensed under the MIT (http://raphaeljs.com/license.html) license. │ \\
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3112
// └─────────────────────────────────────────────────────────────────────┘ \\
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3113
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3114
// ┌──────────────────────────────────────────────────────────────────────────────────────┐ \\
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3115
// │ Eve 0.3.2 - JavaScript Events Library                                                │ \\
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3116
// ├──────────────────────────────────────────────────────────────────────────────────────┤ \\
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3117
// │ Copyright (c) 2008-2011 Dmitry Baranovskiy (http://dmitry.baranovskiy.com/)          │ \\
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3118
// │ Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) license. │ \\
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3119
// └──────────────────────────────────────────────────────────────────────────────────────┘ \\
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3120
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3121
(function (glob) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3122
    var version = "0.3.2",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3123
        has = "hasOwnProperty",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3124
        separator = /[\.\/]/,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3125
        wildcard = "*",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3126
        fun = function () {},
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3127
        numsort = function (a, b) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3128
            return a - b;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3129
        },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3130
        current_event,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3131
        stop,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3132
        events = {n: {}},
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3133
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3134
        eve = function (name, scope) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3135
            var e = events,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3136
                oldstop = stop,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3137
                args = Array.prototype.slice.call(arguments, 2),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3138
                listeners = eve.listeners(name),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3139
                z = 0,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3140
                f = false,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3141
                l,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3142
                indexed = [],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3143
                queue = {},
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3144
                out = [],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3145
                errors = [];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3146
            current_event = name;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3147
            stop = 0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3148
            for (var i = 0, ii = listeners.length; i < ii; i++) if ("zIndex" in listeners[i]) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3149
                indexed.push(listeners[i].zIndex);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3150
                if (listeners[i].zIndex < 0) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3151
                    queue[listeners[i].zIndex] = listeners[i];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3152
                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3153
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3154
            indexed.sort(numsort);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3155
            while (indexed[z] < 0) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3156
                l = queue[indexed[z++]];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3157
                out.push(l.apply(scope, args));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3158
                if (stop) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3159
                    stop = oldstop;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3160
                    return out;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3161
                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3162
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3163
            for (i = 0; i < ii; i++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3164
                l = listeners[i];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3165
                if ("zIndex" in l) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3166
                    if (l.zIndex == indexed[z]) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3167
                        out.push(l.apply(scope, args));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3168
                        if (stop) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3169
                            stop = oldstop;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3170
                            return out;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3171
                        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3172
                        do {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3173
                            z++;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3174
                            l = queue[indexed[z]];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3175
                            l && out.push(l.apply(scope, args));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3176
                            if (stop) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3177
                                stop = oldstop;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3178
                                return out;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3179
                            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3180
                        } while (l)
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3181
                    } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3182
                        queue[l.zIndex] = l;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3183
                    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3184
                } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3185
                    out.push(l.apply(scope, args));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3186
                    if (stop) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3187
                        stop = oldstop;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3188
                        return out;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3189
                    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3190
                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3191
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3192
            stop = oldstop;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3193
            return out.length ? out : null;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3194
        };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3195
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3196
    eve.listeners = function (name) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3197
        var names = name.split(separator),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3198
            e = events,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3199
            item,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3200
            items,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3201
            k,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3202
            i,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3203
            ii,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3204
            j,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3205
            jj,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3206
            nes,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3207
            es = [e],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3208
            out = [];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3209
        for (i = 0, ii = names.length; i < ii; i++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3210
            nes = [];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3211
            for (j = 0, jj = es.length; j < jj; j++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3212
                e = es[j].n;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3213
                items = [e[names[i]], e[wildcard]];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3214
                k = 2;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3215
                while (k--) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3216
                    item = items[k];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3217
                    if (item) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3218
                        nes.push(item);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3219
                        out = out.concat(item.f || []);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3220
                    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3221
                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3222
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3223
            es = nes;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3224
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3225
        return out;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3226
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3227
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3228
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3229
    eve.on = function (name, f) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3230
        var names = name.split(separator),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3231
            e = events;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3232
        for (var i = 0, ii = names.length; i < ii; i++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3233
            e = e.n;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3234
            !e[names[i]] && (e[names[i]] = {n: {}});
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3235
            e = e[names[i]];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3236
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3237
        e.f = e.f || [];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3238
        for (i = 0, ii = e.f.length; i < ii; i++) if (e.f[i] == f) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3239
            return fun;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3240
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3241
        e.f.push(f);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3242
        return function (zIndex) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3243
            if (+zIndex == +zIndex) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3244
                f.zIndex = +zIndex;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3245
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3246
        };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3247
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3248
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3249
    eve.stop = function () {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3250
        stop = 1;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3251
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3252
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3253
    eve.nt = function (subname) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3254
        if (subname) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3255
            return new RegExp("(?:\\.|\\/|^)" + subname + "(?:\\.|\\/|$)").test(current_event);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3256
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3257
        return current_event;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3258
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3259
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3260
    eve.unbind = function (name, f) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3261
        var names = name.split(separator),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3262
            e,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3263
            key,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3264
            splice,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3265
            cur = [events];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3266
        for (var i = 0, ii = names.length; i < ii; i++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3267
            for (var j = 0; j < cur.length; j += splice.length - 2) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3268
                splice = [j, 1];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3269
                e = cur[j].n;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3270
                if (names[i] != wildcard) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3271
                    if (e[names[i]]) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3272
                        splice.push(e[names[i]]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3273
                    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3274
                } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3275
                    for (key in e) if (e[has](key)) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3276
                        splice.push(e[key]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3277
                    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3278
                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3279
                cur.splice.apply(cur, splice);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3280
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3281
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3282
        for (i = 0, ii = cur.length; i < ii; i++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3283
            e = cur[i];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3284
            while (e.n) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3285
                if (f) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3286
                    if (e.f) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3287
                        for (j = 0, jj = e.f.length; j < jj; j++) if (e.f[j] == f) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3288
                            e.f.splice(j, 1);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3289
                            break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3290
                        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3291
                        !e.f.length && delete e.f;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3292
                    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3293
                    for (key in e.n) if (e.n[has](key) && e.n[key].f) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3294
                        var funcs = e.n[key].f;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3295
                        for (j = 0, jj = funcs.length; j < jj; j++) if (funcs[j] == f) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3296
                            funcs.splice(j, 1);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3297
                            break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3298
                        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3299
                        !funcs.length && delete e.n[key].f;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3300
                    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3301
                } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3302
                    delete e.f;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3303
                    for (key in e.n) if (e.n[has](key) && e.n[key].f) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3304
                        delete e.n[key].f;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3305
                    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3306
                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3307
                e = e.n;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3308
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3309
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3310
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3311
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3312
    eve.version = version;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3313
    eve.toString = function () {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3314
        return "You are running Eve " + version;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3315
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3316
    (typeof module != "undefined" && module.exports) ? (module.exports = eve) : (glob.eve = eve);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3317
})(this);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3318
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3319
// ┌─────────────────────────────────────────────────────────────────────┐ \\
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3320
// │ "Raphaël 2.0" - JavaScript Vector Library                           │ \\
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3321
// ├─────────────────────────────────────────────────────────────────────┤ \\
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3322
// │ Copyright (c) 2008-2011 Dmitry Baranovskiy (http://raphaeljs.com)   │ \\
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3323
// │ Copyright (c) 2008-2011 Sencha Labs (http://sencha.com)             │ \\
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3324
// │ Licensed under the MIT (http://raphaeljs.com/license.html) license. │ \\
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3325
// └─────────────────────────────────────────────────────────────────────┘ \\
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3326
(function () {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3327
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3328
    function R(first) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3329
        if (R.is(first, "function")) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3330
            return loaded ? first() : eve.on("DOMload", first);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3331
        } else if (R.is(first, array)) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3332
            var a = first,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3333
                cnv = R._engine.create[apply](R, a.splice(0, 3 + R.is(a[0], nu))),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3334
                res = cnv.set(),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3335
                i = 0,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3336
                ii = a.length,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3337
                j;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3338
            for (; i < ii; i++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3339
                j = a[i] || {};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3340
                elements[has](j.type) && res.push(cnv[j.type]().attr(j));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3341
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3342
            return res;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3343
        } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3344
            var args = Array.prototype.slice.call(arguments, 0);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3345
            if (R.is(args[args.length - 1], "function")) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3346
                var f = args.pop();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3347
                return loaded ? f.call(R._engine.create[apply](R, args)) : eve.on("DOMload", function () {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3348
                    f.call(R._engine.create[apply](R, args));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3349
                });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3350
            } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3351
                return R._engine.create[apply](R, arguments);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3352
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3353
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3354
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3355
    R.version = "2.0.0";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3356
    R.eve = eve;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3357
    var loaded,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3358
        separator = /[, ]+/,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3359
        elements = {circle: 1, rect: 1, path: 1, ellipse: 1, text: 1, image: 1},
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3360
        formatrg = /\{(\d+)\}/g,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3361
        proto = "prototype",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3362
        has = "hasOwnProperty",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3363
        g = {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3364
            doc: document,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3365
            win: window
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3366
        },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3367
        oldRaphael = {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3368
            was: Object.prototype[has].call(g.win, "Raphael"),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3369
            is: g.win.Raphael
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3370
        },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3371
        Paper = function () {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3372
            
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3373
            
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3374
            this.ca = this.customAttributes = {};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3375
        },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3376
        paperproto,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3377
        appendChild = "appendChild",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3378
        apply = "apply",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3379
        concat = "concat",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3380
        supportsTouch = "createTouch" in g.doc,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3381
        E = "",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3382
        S = " ",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3383
        Str = String,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3384
        split = "split",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3385
        events = "click dblclick mousedown mousemove mouseout mouseover mouseup touchstart touchmove touchend touchcancel"[split](S),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3386
        touchMap = {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3387
            mousedown: "touchstart",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3388
            mousemove: "touchmove",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3389
            mouseup: "touchend"
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3390
        },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3391
        lowerCase = Str.prototype.toLowerCase,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3392
        math = Math,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3393
        mmax = math.max,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3394
        mmin = math.min,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3395
        abs = math.abs,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3396
        pow = math.pow,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3397
        PI = math.PI,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3398
        nu = "number",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3399
        string = "string",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3400
        array = "array",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3401
        toString = "toString",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3402
        fillString = "fill",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3403
        objectToString = Object.prototype.toString,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3404
        paper = {},
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3405
        push = "push",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3406
        ISURL = R._ISURL = /^url\(['"]?([^\)]+?)['"]?\)$/i,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3407
        colourRegExp = /^\s*((#[a-f\d]{6})|(#[a-f\d]{3})|rgba?\(\s*([\d\.]+%?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+%?(?:\s*,\s*[\d\.]+%?)?)\s*\)|hsba?\(\s*([\d\.]+(?:deg|\xb0|%)?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+(?:%?\s*,\s*[\d\.]+)?)%?\s*\)|hsla?\(\s*([\d\.]+(?:deg|\xb0|%)?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+(?:%?\s*,\s*[\d\.]+)?)%?\s*\))\s*$/i,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3408
        isnan = {"NaN": 1, "Infinity": 1, "-Infinity": 1},
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3409
        bezierrg = /^(?:cubic-)?bezier\(([^,]+),([^,]+),([^,]+),([^\)]+)\)/,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3410
        round = math.round,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3411
        setAttribute = "setAttribute",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3412
        toFloat = parseFloat,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3413
        toInt = parseInt,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3414
        upperCase = Str.prototype.toUpperCase,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3415
        availableAttrs = R._availableAttrs = {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3416
            "arrow-end": "none",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3417
            "arrow-start": "none",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3418
            blur: 0,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3419
            "clip-rect": "0 0 1e9 1e9",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3420
            cursor: "default",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3421
            cx: 0,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3422
            cy: 0,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3423
            fill: "#fff",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3424
            "fill-opacity": 1,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3425
            font: '10px "Arial"',
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3426
            "font-family": '"Arial"',
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3427
            "font-size": "10",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3428
            "font-style": "normal",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3429
            "font-weight": 400,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3430
            gradient: 0,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3431
            height: 0,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3432
            href: "http://raphaeljs.com/",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3433
            opacity: 1,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3434
            path: "M0,0",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3435
            r: 0,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3436
            rx: 0,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3437
            ry: 0,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3438
            src: "",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3439
            stroke: "#000",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3440
            "stroke-dasharray": "",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3441
            "stroke-linecap": "butt",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3442
            "stroke-linejoin": "butt",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3443
            "stroke-miterlimit": 0,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3444
            "stroke-opacity": 1,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3445
            "stroke-width": 1,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3446
            target: "_blank",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3447
            "text-anchor": "middle",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3448
            title: "Raphael",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3449
            transform: "",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3450
            width: 0,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3451
            x: 0,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3452
            y: 0
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3453
        },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3454
        availableAnimAttrs = R._availableAnimAttrs = {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3455
            blur: nu,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3456
            "clip-rect": "csv",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3457
            cx: nu,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3458
            cy: nu,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3459
            fill: "colour",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3460
            "fill-opacity": nu,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3461
            "font-size": nu,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3462
            height: nu,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3463
            opacity: nu,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3464
            path: "path",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3465
            r: nu,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3466
            rx: nu,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3467
            ry: nu,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3468
            stroke: "colour",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3469
            "stroke-opacity": nu,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3470
            "stroke-width": nu,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3471
            transform: "transform",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3472
            width: nu,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3473
            x: nu,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3474
            y: nu
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3475
        },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3476
        commaSpaces = /\s*,\s*/,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3477
        hsrg = {hs: 1, rg: 1},
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3478
        p2s = /,?([achlmqrstvxz]),?/gi,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3479
        pathCommand = /([achlmrqstvz])[\s,]*((-?\d*\.?\d*(?:e[\-+]?\d+)?\s*,?\s*)+)/ig,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3480
        tCommand = /([rstm])[\s,]*((-?\d*\.?\d*(?:e[\-+]?\d+)?\s*,?\s*)+)/ig,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3481
        pathValues = /(-?\d*\.?\d*(?:e[\-+]?\d+)?)\s*,?\s*/ig,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3482
        radial_gradient = R._radial_gradient = /^r(?:\(([^,]+?)\s*,\s*([^\)]+?)\))?/,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3483
        eldata = {},
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3484
        sortByKey = function (a, b) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3485
            return a.key - b.key;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3486
        },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3487
        sortByNumber = function (a, b) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3488
            return toFloat(a) - toFloat(b);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3489
        },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3490
        fun = function () {},
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3491
        pipe = function (x) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3492
            return x;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3493
        },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3494
        rectPath = R._rectPath = function (x, y, w, h, r) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3495
            if (r) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3496
                return [["M", x + r, y], ["l", w - r * 2, 0], ["a", r, r, 0, 0, 1, r, r], ["l", 0, h - r * 2], ["a", r, r, 0, 0, 1, -r, r], ["l", r * 2 - w, 0], ["a", r, r, 0, 0, 1, -r, -r], ["l", 0, r * 2 - h], ["a", r, r, 0, 0, 1, r, -r], ["z"]];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3497
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3498
            return [["M", x, y], ["l", w, 0], ["l", 0, h], ["l", -w, 0], ["z"]];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3499
        },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3500
        ellipsePath = function (x, y, rx, ry) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3501
            if (ry == null) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3502
                ry = rx;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3503
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3504
            return [["M", x, y], ["m", 0, -ry], ["a", rx, ry, 0, 1, 1, 0, 2 * ry], ["a", rx, ry, 0, 1, 1, 0, -2 * ry], ["z"]];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3505
        },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3506
        getPath = R._getPath = {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3507
            path: function (el) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3508
                return el.attr("path");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3509
            },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3510
            circle: function (el) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3511
                var a = el.attrs;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3512
                return ellipsePath(a.cx, a.cy, a.r);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3513
            },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3514
            ellipse: function (el) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3515
                var a = el.attrs;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3516
                return ellipsePath(a.cx, a.cy, a.rx, a.ry);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3517
            },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3518
            rect: function (el) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3519
                var a = el.attrs;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3520
                return rectPath(a.x, a.y, a.width, a.height, a.r);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3521
            },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3522
            image: function (el) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3523
                var a = el.attrs;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3524
                return rectPath(a.x, a.y, a.width, a.height);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3525
            },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3526
            text: function (el) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3527
                var bbox = el._getBBox();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3528
                return rectPath(bbox.x, bbox.y, bbox.width, bbox.height);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3529
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3530
        },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3531
        mapPath = R.mapPath = function (path, matrix) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3532
            if (!matrix) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3533
                return path;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3534
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3535
            var x, y, i, j, pathi;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3536
            path = path2curve(path);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3537
            for (i = 0, ii = path.length; i < ii; i++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3538
                pathi = path[i];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3539
                for (j = 1, jj = pathi.length; j < jj; j += 2) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3540
                    x = matrix.x(pathi[j], pathi[j + 1]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3541
                    y = matrix.y(pathi[j], pathi[j + 1]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3542
                    pathi[j] = x;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3543
                    pathi[j + 1] = y;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3544
                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3545
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3546
            return path;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3547
        };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3548
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3549
    R._g = g;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3550
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3551
    R.type = (g.win.SVGAngle || g.doc.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure", "1.1") ? "SVG" : "VML");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3552
    if (R.type == "VML") {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3553
        var d = g.doc.createElement("div"),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3554
            b;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3555
        d.innerHTML = '<v:shape adj="1"/>';
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3556
        b = d.firstChild;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3557
        b.style.behavior = "url(#default#VML)";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3558
        if (!(b && typeof b.adj == "object")) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3559
            return (R.type = E);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3560
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3561
        d = null;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3562
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3563
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3564
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3565
    R.svg = !(R.vml = R.type == "VML");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3566
    R._Paper = Paper;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3567
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3568
    R.fn = paperproto = Paper.prototype = R.prototype;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3569
    R._id = 0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3570
    R._oid = 0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3571
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3572
    R.is = function (o, type) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3573
        type = lowerCase.call(type);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3574
        if (type == "finite") {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3575
            return !isnan[has](+o);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3576
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3577
        if (type == "array") {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3578
            return o instanceof Array;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3579
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3580
        return  (type == "null" && o === null) ||
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3581
                (type == typeof o && o !== null) ||
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3582
                (type == "object" && o === Object(o)) ||
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3583
                (type == "array" && Array.isArray && Array.isArray(o)) ||
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3584
                objectToString.call(o).slice(8, -1).toLowerCase() == type;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3585
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3586
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3587
    R.angle = function (x1, y1, x2, y2, x3, y3) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3588
        if (x3 == null) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3589
            var x = x1 - x2,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3590
                y = y1 - y2;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3591
            if (!x && !y) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3592
                return 0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3593
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3594
            return (180 + math.atan2(-y, -x) * 180 / PI + 360) % 360;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3595
        } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3596
            return R.angle(x1, y1, x3, y3) - R.angle(x2, y2, x3, y3);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3597
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3598
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3599
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3600
    R.rad = function (deg) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3601
        return deg % 360 * PI / 180;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3602
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3603
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3604
    R.deg = function (rad) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3605
        return rad * 180 / PI % 360;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3606
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3607
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3608
    R.snapTo = function (values, value, tolerance) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3609
        tolerance = R.is(tolerance, "finite") ? tolerance : 10;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3610
        if (R.is(values, array)) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3611
            var i = values.length;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3612
            while (i--) if (abs(values[i] - value) <= tolerance) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3613
                return values[i];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3614
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3615
        } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3616
            values = +values;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3617
            var rem = value % values;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3618
            if (rem < tolerance) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3619
                return value - rem;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3620
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3621
            if (rem > values - tolerance) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3622
                return value - rem + values;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3623
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3624
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3625
        return value;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3626
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3627
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3628
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3629
    var createUUID = R.createUUID = (function (uuidRegEx, uuidReplacer) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3630
        return function () {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3631
            return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(uuidRegEx, uuidReplacer).toUpperCase();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3632
        };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3633
    })(/[xy]/g, function (c) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3634
        var r = math.random() * 16 | 0,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3635
            v = c == "x" ? r : (r & 3 | 8);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3636
        return v.toString(16);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3637
    });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3638
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3639
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3640
    R.setWindow = function (newwin) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3641
        eve("setWindow", R, g.win, newwin);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3642
        g.win = newwin;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3643
        g.doc = g.win.document;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3644
        if (initWin) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3645
            initWin(g.win);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3646
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3647
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3648
    var toHex = function (color) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3649
        if (R.vml) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3650
            // http://dean.edwards.name/weblog/2009/10/convert-any-colour-value-to-hex-in-msie/
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3651
            var trim = /^\s+|\s+$/g;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3652
            var bod;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3653
            try {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3654
                var docum = new ActiveXObject("htmlfile");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3655
                docum.write("<body>");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3656
                docum.close();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3657
                bod = docum.body;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3658
            } catch(e) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3659
                bod = createPopup().document.body;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3660
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3661
            var range = bod.createTextRange();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3662
            toHex = cacher(function (color) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3663
                try {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3664
                    bod.style.color = Str(color).replace(trim, E);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3665
                    var value = range.queryCommandValue("ForeColor");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3666
                    value = ((value & 255) << 16) | (value & 65280) | ((value & 16711680) >>> 16);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3667
                    return "#" + ("000000" + value.toString(16)).slice(-6);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3668
                } catch(e) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3669
                    return "none";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3670
                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3671
            });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3672
        } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3673
            var i = g.doc.createElement("i");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3674
            i.title = "Rapha\xebl Colour Picker";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3675
            i.style.display = "none";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3676
            g.doc.body.appendChild(i);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3677
            toHex = cacher(function (color) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3678
                i.style.color = color;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3679
                return g.doc.defaultView.getComputedStyle(i, E).getPropertyValue("color");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3680
            });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3681
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3682
        return toHex(color);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3683
    },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3684
    hsbtoString = function () {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3685
        return "hsb(" + [this.h, this.s, this.b] + ")";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3686
    },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3687
    hsltoString = function () {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3688
        return "hsl(" + [this.h, this.s, this.l] + ")";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3689
    },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3690
    rgbtoString = function () {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3691
        return this.hex;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3692
    },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3693
    prepareRGB = function (r, g, b) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3694
        if (g == null && R.is(r, "object") && "r" in r && "g" in r && "b" in r) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3695
            b = r.b;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3696
            g = r.g;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3697
            r = r.r;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3698
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3699
        if (g == null && R.is(r, string)) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3700
            var clr = R.getRGB(r);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3701
            r = clr.r;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3702
            g = clr.g;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3703
            b = clr.b;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3704
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3705
        if (r > 1 || g > 1 || b > 1) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3706
            r /= 255;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3707
            g /= 255;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3708
            b /= 255;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3709
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3710
        
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3711
        return [r, g, b];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3712
    },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3713
    packageRGB = function (r, g, b, o) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3714
        r *= 255;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3715
        g *= 255;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3716
        b *= 255;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3717
        var rgb = {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3718
            r: r,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3719
            g: g,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3720
            b: b,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3721
            hex: R.rgb(r, g, b),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3722
            toString: rgbtoString
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3723
        };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3724
        R.is(o, "finite") && (rgb.opacity = o);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3725
        return rgb;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3726
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3727
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3728
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3729
    R.color = function (clr) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3730
        var rgb;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3731
        if (R.is(clr, "object") && "h" in clr && "s" in clr && "b" in clr) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3732
            rgb = R.hsb2rgb(clr);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3733
            clr.r = rgb.r;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3734
            clr.g = rgb.g;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3735
            clr.b = rgb.b;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3736
            clr.hex = rgb.hex;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3737
        } else if (R.is(clr, "object") && "h" in clr && "s" in clr && "l" in clr) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3738
            rgb = R.hsl2rgb(clr);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3739
            clr.r = rgb.r;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3740
            clr.g = rgb.g;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3741
            clr.b = rgb.b;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3742
            clr.hex = rgb.hex;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3743
        } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3744
            if (R.is(clr, "string")) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3745
                clr = R.getRGB(clr);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3746
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3747
            if (R.is(clr, "object") && "r" in clr && "g" in clr && "b" in clr) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3748
                rgb = R.rgb2hsl(clr);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3749
                clr.h = rgb.h;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3750
                clr.s = rgb.s;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3751
                clr.l = rgb.l;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3752
                rgb = R.rgb2hsb(clr);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3753
                clr.v = rgb.b;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3754
            } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3755
                clr = {hex: "none"};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3756
                crl.r = clr.g = clr.b = clr.h = clr.s = clr.v = clr.l = -1;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3757
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3758
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3759
        clr.toString = rgbtoString;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3760
        return clr;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3761
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3762
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3763
    R.hsb2rgb = function (h, s, v, o) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3764
        if (this.is(h, "object") && "h" in h && "s" in h && "b" in h) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3765
            v = h.b;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3766
            s = h.s;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3767
            h = h.h;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3768
            o = h.o;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3769
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3770
        h *= 360;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3771
        var R, G, B, X, C;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3772
        h = (h % 360) / 60;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3773
        C = v * s;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3774
        X = C * (1 - abs(h % 2 - 1));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3775
        R = G = B = v - C;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3776
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3777
        h = ~~h;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3778
        R += [C, X, 0, 0, X, C][h];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3779
        G += [X, C, C, X, 0, 0][h];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3780
        B += [0, 0, X, C, C, X][h];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3781
        return packageRGB(R, G, B, o);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3782
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3783
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3784
    R.hsl2rgb = function (h, s, l, o) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3785
        if (this.is(h, "object") && "h" in h && "s" in h && "l" in h) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3786
            l = h.l;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3787
            s = h.s;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3788
            h = h.h;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3789
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3790
        if (h > 1 || s > 1 || l > 1) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3791
            h /= 360;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3792
            s /= 100;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3793
            l /= 100;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3794
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3795
        h *= 360;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3796
        var R, G, B, X, C;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3797
        h = (h % 360) / 60;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3798
        C = 2 * s * (l < .5 ? l : 1 - l);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3799
        X = C * (1 - abs(h % 2 - 1));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3800
        R = G = B = l - C / 2;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3801
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3802
        h = ~~h;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3803
        R += [C, X, 0, 0, X, C][h];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3804
        G += [X, C, C, X, 0, 0][h];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3805
        B += [0, 0, X, C, C, X][h];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3806
        return packageRGB(R, G, B, o);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3807
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3808
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3809
    R.rgb2hsb = function (r, g, b) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3810
        b = prepareRGB(r, g, b);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3811
        r = b[0];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3812
        g = b[1];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3813
        b = b[2];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3814
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3815
        var H, S, V, C;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3816
        V = mmax(r, g, b);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3817
        C = V - mmin(r, g, b);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3818
        H = (C == 0 ? null :
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3819
             V == r ? (g - b) / C :
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3820
             V == g ? (b - r) / C + 2 :
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3821
                      (r - g) / C + 4
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3822
            );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3823
        H = ((H + 360) % 6) * 60 / 360;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3824
        S = C == 0 ? 0 : C / V;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3825
        return {h: H, s: S, b: V, toString: hsbtoString};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3826
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3827
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3828
    R.rgb2hsl = function (r, g, b) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3829
        b = prepareRGB(r, g, b);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3830
        r = b[0];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3831
        g = b[1];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3832
        b = b[2];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3833
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3834
        var H, S, L, M, m, C;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3835
        M = mmax(r, g, b);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3836
        m = mmin(r, g, b);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3837
        C = M - m;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3838
        H = (C == 0 ? null :
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3839
             M == r ? (g - b) / C :
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3840
             M == g ? (b - r) / C + 2 :
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3841
                      (r - g) / C + 4);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3842
        H = ((H + 360) % 6) * 60 / 360;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3843
        L = (M + m) / 2;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3844
        S = (C == 0 ? 0 :
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3845
             L < .5 ? C / (2 * L) :
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3846
                      C / (2 - 2 * L));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3847
        return {h: H, s: S, l: L, toString: hsltoString};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3848
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3849
    R._path2string = function () {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3850
        return this.join(",").replace(p2s, "$1");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3851
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3852
    function repush(array, item) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3853
        for (var i = 0, ii = array.length; i < ii; i++) if (array[i] === item) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3854
            return array.push(array.splice(i, 1)[0]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3855
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3856
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3857
    function cacher(f, scope, postprocessor) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3858
        function newf() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3859
            var arg = Array.prototype.slice.call(arguments, 0),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3860
                args = arg.join("\u2400"),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3861
                cache = newf.cache = newf.cache || {},
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3862
                count = newf.count = newf.count || [];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3863
            if (cache[has](args)) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3864
                repush(count, args);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3865
                return postprocessor ? postprocessor(cache[args]) : cache[args];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3866
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3867
            count.length >= 1e3 && delete cache[count.shift()];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3868
            count.push(args);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3869
            cache[args] = f[apply](scope, arg);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3870
            return postprocessor ? postprocessor(cache[args]) : cache[args];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3871
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3872
        return newf;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3873
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3874
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3875
    var preload = R._preload = function (src, f) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3876
        var img = g.doc.createElement("img");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3877
        img.style.cssText = "position:absolute;left:-9999em;top-9999em";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3878
        img.onload = function () {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3879
            f.call(this);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3880
            this.onload = null;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3881
            g.doc.body.removeChild(this);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3882
        };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3883
        img.onerror = function () {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3884
            g.doc.body.removeChild(this);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3885
        };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3886
        g.doc.body.appendChild(img);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3887
        img.src = src;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3888
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3889
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3890
    function clrToString() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3891
        return this.hex;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3892
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3893
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3894
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3895
    R.getRGB = cacher(function (colour) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3896
        if (!colour || !!((colour = Str(colour)).indexOf("-") + 1)) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3897
            return {r: -1, g: -1, b: -1, hex: "none", error: 1, toString: clrToString};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3898
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3899
        if (colour == "none") {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3900
            return {r: -1, g: -1, b: -1, hex: "none", toString: clrToString};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3901
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3902
        !(hsrg[has](colour.toLowerCase().substring(0, 2)) || colour.charAt() == "#") && (colour = toHex(colour));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3903
        var res,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3904
            red,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3905
            green,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3906
            blue,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3907
            opacity,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3908
            t,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3909
            values,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3910
            rgb = colour.match(colourRegExp);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3911
        if (rgb) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3912
            if (rgb[2]) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3913
                blue = toInt(rgb[2].substring(5), 16);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3914
                green = toInt(rgb[2].substring(3, 5), 16);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3915
                red = toInt(rgb[2].substring(1, 3), 16);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3916
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3917
            if (rgb[3]) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3918
                blue = toInt((t = rgb[3].charAt(3)) + t, 16);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3919
                green = toInt((t = rgb[3].charAt(2)) + t, 16);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3920
                red = toInt((t = rgb[3].charAt(1)) + t, 16);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3921
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3922
            if (rgb[4]) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3923
                values = rgb[4][split](commaSpaces);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3924
                red = toFloat(values[0]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3925
                values[0].slice(-1) == "%" && (red *= 2.55);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3926
                green = toFloat(values[1]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3927
                values[1].slice(-1) == "%" && (green *= 2.55);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3928
                blue = toFloat(values[2]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3929
                values[2].slice(-1) == "%" && (blue *= 2.55);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3930
                rgb[1].toLowerCase().slice(0, 4) == "rgba" && (opacity = toFloat(values[3]));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3931
                values[3] && values[3].slice(-1) == "%" && (opacity /= 100);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3932
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3933
            if (rgb[5]) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3934
                values = rgb[5][split](commaSpaces);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3935
                red = toFloat(values[0]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3936
                values[0].slice(-1) == "%" && (red *= 2.55);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3937
                green = toFloat(values[1]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3938
                values[1].slice(-1) == "%" && (green *= 2.55);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3939
                blue = toFloat(values[2]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3940
                values[2].slice(-1) == "%" && (blue *= 2.55);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3941
                (values[0].slice(-3) == "deg" || values[0].slice(-1) == "\xb0") && (red /= 360);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3942
                rgb[1].toLowerCase().slice(0, 4) == "hsba" && (opacity = toFloat(values[3]));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3943
                values[3] && values[3].slice(-1) == "%" && (opacity /= 100);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3944
                return R.hsb2rgb(red, green, blue, opacity);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3945
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3946
            if (rgb[6]) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3947
                values = rgb[6][split](commaSpaces);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3948
                red = toFloat(values[0]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3949
                values[0].slice(-1) == "%" && (red *= 2.55);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3950
                green = toFloat(values[1]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3951
                values[1].slice(-1) == "%" && (green *= 2.55);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3952
                blue = toFloat(values[2]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3953
                values[2].slice(-1) == "%" && (blue *= 2.55);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3954
                (values[0].slice(-3) == "deg" || values[0].slice(-1) == "\xb0") && (red /= 360);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3955
                rgb[1].toLowerCase().slice(0, 4) == "hsla" && (opacity = toFloat(values[3]));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3956
                values[3] && values[3].slice(-1) == "%" && (opacity /= 100);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3957
                return R.hsl2rgb(red, green, blue, opacity);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3958
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3959
            rgb = {r: red, g: green, b: blue, toString: clrToString};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3960
            rgb.hex = "#" + (16777216 | blue | (green << 8) | (red << 16)).toString(16).slice(1);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3961
            R.is(opacity, "finite") && (rgb.opacity = opacity);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3962
            return rgb;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3963
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3964
        return {r: -1, g: -1, b: -1, hex: "none", error: 1, toString: clrToString};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3965
    }, R);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3966
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3967
    R.hsb = cacher(function (h, s, b) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3968
        return R.hsb2rgb(h, s, b).hex;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3969
    });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3970
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3971
    R.hsl = cacher(function (h, s, l) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3972
        return R.hsl2rgb(h, s, l).hex;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3973
    });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3974
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3975
    R.rgb = cacher(function (r, g, b) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3976
        return "#" + (16777216 | b | (g << 8) | (r << 16)).toString(16).slice(1);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3977
    });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3978
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3979
    R.getColor = function (value) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3980
        var start = this.getColor.start = this.getColor.start || {h: 0, s: 1, b: value || .75},
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3981
            rgb = this.hsb2rgb(start.h, start.s, start.b);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3982
        start.h += .075;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3983
        if (start.h > 1) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3984
            start.h = 0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3985
            start.s -= .2;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3986
            start.s <= 0 && (this.getColor.start = {h: 0, s: 1, b: start.b});
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3987
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3988
        return rgb.hex;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3989
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3990
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3991
    R.getColor.reset = function () {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3992
        delete this.start;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3993
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3994
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3995
    // http://schepers.cc/getting-to-the-point
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3996
    function catmullRom2bezier(crp) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3997
        var d = [];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3998
        for (var i = 0, iLen = crp.length; iLen - 2 > i; i += 2) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  3999
            var p = [{x: +crp[i],     y: +crp[i + 1]},
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4000
                     {x: +crp[i],     y: +crp[i + 1]},
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4001
                     {x: +crp[i + 2], y: +crp[i + 3]},
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4002
                     {x: +crp[i + 4], y: +crp[i + 5]}];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4003
            if (iLen - 4 == i) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4004
                p[0] = {x: +crp[i - 2], y: +crp[i - 1]};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4005
                p[3] = p[2];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4006
            } else if (i) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4007
                p[0] = {x: +crp[i - 2], y: +crp[i - 1]};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4008
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4009
            d.push(["C",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4010
                (-p[0].x + 6 * p[1].x + p[2].x) / 6,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4011
                (-p[0].y + 6 * p[1].y + p[2].y) / 6,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4012
                (p[1].x + 6 * p[2].x - p[3].x) / 6,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4013
                (p[1].y + 6*p[2].y - p[3].y) / 6,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4014
                p[2].x,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4015
                p[2].y
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4016
            ]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4017
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4018
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4019
        return d;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4020
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4021
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4022
    R.parsePathString = cacher(function (pathString) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4023
        if (!pathString) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4024
            return null;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4025
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4026
        var paramCounts = {a: 7, c: 6, h: 1, l: 2, m: 2, r: 4, q: 4, s: 4, t: 2, v: 1, z: 0},
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4027
            data = [];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4028
        if (R.is(pathString, array) && R.is(pathString[0], array)) { // rough assumption
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4029
            data = pathClone(pathString);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4030
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4031
        if (!data.length) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4032
            Str(pathString).replace(pathCommand, function (a, b, c) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4033
                var params = [],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4034
                    name = b.toLowerCase();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4035
                c.replace(pathValues, function (a, b) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4036
                    b && params.push(+b);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4037
                });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4038
                if (name == "m" && params.length > 2) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4039
                    data.push([b][concat](params.splice(0, 2)));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4040
                    name = "l";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4041
                    b = b == "m" ? "l" : "L";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4042
                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4043
                if (name == "r") {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4044
                    data.push([b][concat](params));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4045
                } else while (params.length >= paramCounts[name]) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4046
                    data.push([b][concat](params.splice(0, paramCounts[name])));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4047
                    if (!paramCounts[name]) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4048
                        break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4049
                    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4050
                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4051
            });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4052
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4053
        data.toString = R._path2string;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4054
        return data;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4055
    });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4056
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4057
    R.parseTransformString = cacher(function (TString) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4058
        if (!TString) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4059
            return null;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4060
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4061
        var paramCounts = {r: 3, s: 4, t: 2, m: 6},
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4062
            data = [];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4063
        if (R.is(TString, array) && R.is(TString[0], array)) { // rough assumption
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4064
            data = pathClone(TString);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4065
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4066
        if (!data.length) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4067
            Str(TString).replace(tCommand, function (a, b, c) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4068
                var params = [],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4069
                    name = lowerCase.call(b);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4070
                c.replace(pathValues, function (a, b) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4071
                    b && params.push(+b);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4072
                });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4073
                data.push([b][concat](params));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4074
            });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4075
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4076
        data.toString = R._path2string;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4077
        return data;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4078
    });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4079
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4080
    R.findDotsAtSegment = function (p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4081
        var t1 = 1 - t,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4082
            t13 = pow(t1, 3),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4083
            t12 = pow(t1, 2),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4084
            t2 = t * t,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4085
            t3 = t2 * t,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4086
            x = t13 * p1x + t12 * 3 * t * c1x + t1 * 3 * t * t * c2x + t3 * p2x,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4087
            y = t13 * p1y + t12 * 3 * t * c1y + t1 * 3 * t * t * c2y + t3 * p2y,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4088
            mx = p1x + 2 * t * (c1x - p1x) + t2 * (c2x - 2 * c1x + p1x),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4089
            my = p1y + 2 * t * (c1y - p1y) + t2 * (c2y - 2 * c1y + p1y),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4090
            nx = c1x + 2 * t * (c2x - c1x) + t2 * (p2x - 2 * c2x + c1x),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4091
            ny = c1y + 2 * t * (c2y - c1y) + t2 * (p2y - 2 * c2y + c1y),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4092
            ax = t1 * p1x + t * c1x,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4093
            ay = t1 * p1y + t * c1y,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4094
            cx = t1 * c2x + t * p2x,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4095
            cy = t1 * c2y + t * p2y,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4096
            alpha = (90 - math.atan2(mx - nx, my - ny) * 180 / PI);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4097
        (mx > nx || my < ny) && (alpha += 180);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4098
        return {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4099
            x: x,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4100
            y: y,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4101
            m: {x: mx, y: my},
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4102
            n: {x: nx, y: ny},
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4103
            start: {x: ax, y: ay},
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4104
            end: {x: cx, y: cy},
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4105
            alpha: alpha
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4106
        };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4107
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4108
    var pathDimensions = cacher(function (path) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4109
        if (!path) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4110
            return {x: 0, y: 0, width: 0, height: 0};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4111
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4112
        path = path2curve(path);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4113
        var x = 0, 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4114
            y = 0,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4115
            X = [],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4116
            Y = [],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4117
            p;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4118
        for (var i = 0, ii = path.length; i < ii; i++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4119
            p = path[i];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4120
            if (p[0] == "M") {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4121
                x = p[1];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4122
                y = p[2];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4123
                X.push(x);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4124
                Y.push(y);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4125
            } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4126
                var dim = curveDim(x, y, p[1], p[2], p[3], p[4], p[5], p[6]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4127
                X = X[concat](dim.min.x, dim.max.x);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4128
                Y = Y[concat](dim.min.y, dim.max.y);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4129
                x = p[5];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4130
                y = p[6];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4131
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4132
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4133
        var xmin = mmin[apply](0, X),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4134
            ymin = mmin[apply](0, Y);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4135
        return {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4136
            x: xmin,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4137
            y: ymin,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4138
            width: mmax[apply](0, X) - xmin,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4139
            height: mmax[apply](0, Y) - ymin
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4140
        };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4141
    }, null, function (o) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4142
        return {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4143
            x: o.x,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4144
            y: o.y,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4145
            width: o.width,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4146
            height: o.height
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4147
        };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4148
    }),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4149
        pathClone = function (pathArray) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4150
            var res = [];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4151
            if (!R.is(pathArray, array) || !R.is(pathArray && pathArray[0], array)) { // rough assumption
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4152
                pathArray = R.parsePathString(pathArray);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4153
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4154
            for (var i = 0, ii = pathArray.length; i < ii; i++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4155
                res[i] = [];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4156
                for (var j = 0, jj = pathArray[i].length; j < jj; j++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4157
                    res[i][j] = pathArray[i][j];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4158
                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4159
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4160
            res.toString = R._path2string;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4161
            return res;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4162
        },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4163
        pathToRelative = R._pathToRelative = cacher(function (pathArray) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4164
            if (!R.is(pathArray, array) || !R.is(pathArray && pathArray[0], array)) { // rough assumption
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4165
                pathArray = R.parsePathString(pathArray);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4166
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4167
            var res = [],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4168
                x = 0,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4169
                y = 0,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4170
                mx = 0,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4171
                my = 0,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4172
                start = 0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4173
            if (pathArray[0][0] == "M") {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4174
                x = pathArray[0][1];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4175
                y = pathArray[0][2];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4176
                mx = x;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4177
                my = y;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4178
                start++;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4179
                res.push(["M", x, y]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4180
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4181
            for (var i = start, ii = pathArray.length; i < ii; i++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4182
                var r = res[i] = [],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4183
                    pa = pathArray[i];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4184
                if (pa[0] != lowerCase.call(pa[0])) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4185
                    r[0] = lowerCase.call(pa[0]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4186
                    switch (r[0]) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4187
                        case "a":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4188
                            r[1] = pa[1];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4189
                            r[2] = pa[2];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4190
                            r[3] = pa[3];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4191
                            r[4] = pa[4];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4192
                            r[5] = pa[5];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4193
                            r[6] = +(pa[6] - x).toFixed(3);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4194
                            r[7] = +(pa[7] - y).toFixed(3);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4195
                            break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4196
                        case "v":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4197
                            r[1] = +(pa[1] - y).toFixed(3);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4198
                            break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4199
                        case "m":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4200
                            mx = pa[1];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4201
                            my = pa[2];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4202
                        default:
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4203
                            for (var j = 1, jj = pa.length; j < jj; j++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4204
                                r[j] = +(pa[j] - ((j % 2) ? x : y)).toFixed(3);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4205
                            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4206
                    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4207
                } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4208
                    r = res[i] = [];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4209
                    if (pa[0] == "m") {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4210
                        mx = pa[1] + x;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4211
                        my = pa[2] + y;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4212
                    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4213
                    for (var k = 0, kk = pa.length; k < kk; k++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4214
                        res[i][k] = pa[k];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4215
                    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4216
                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4217
                var len = res[i].length;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4218
                switch (res[i][0]) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4219
                    case "z":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4220
                        x = mx;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4221
                        y = my;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4222
                        break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4223
                    case "h":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4224
                        x += +res[i][len - 1];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4225
                        break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4226
                    case "v":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4227
                        y += +res[i][len - 1];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4228
                        break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4229
                    default:
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4230
                        x += +res[i][len - 2];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4231
                        y += +res[i][len - 1];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4232
                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4233
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4234
            res.toString = R._path2string;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4235
            return res;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4236
        }, 0, pathClone),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4237
        pathToAbsolute = R._pathToAbsolute = cacher(function (pathArray) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4238
            if (!R.is(pathArray, array) || !R.is(pathArray && pathArray[0], array)) { // rough assumption
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4239
                pathArray = R.parsePathString(pathArray);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4240
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4241
            if (!pathArray || !pathArray.length) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4242
                return [["M", 0, 0]];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4243
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4244
            var res = [],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4245
                x = 0,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4246
                y = 0,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4247
                mx = 0,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4248
                my = 0,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4249
                start = 0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4250
            if (pathArray[0][0] == "M") {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4251
                x = +pathArray[0][1];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4252
                y = +pathArray[0][2];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4253
                mx = x;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4254
                my = y;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4255
                start++;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4256
                res[0] = ["M", x, y];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4257
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4258
            for (var r, pa, i = start, ii = pathArray.length; i < ii; i++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4259
                res.push(r = []);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4260
                pa = pathArray[i];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4261
                if (pa[0] != upperCase.call(pa[0])) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4262
                    r[0] = upperCase.call(pa[0]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4263
                    switch (r[0]) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4264
                        case "A":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4265
                            r[1] = pa[1];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4266
                            r[2] = pa[2];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4267
                            r[3] = pa[3];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4268
                            r[4] = pa[4];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4269
                            r[5] = pa[5];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4270
                            r[6] = +(pa[6] + x);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4271
                            r[7] = +(pa[7] + y);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4272
                            break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4273
                        case "V":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4274
                            r[1] = +pa[1] + y;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4275
                            break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4276
                        case "H":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4277
                            r[1] = +pa[1] + x;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4278
                            break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4279
                        case "R":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4280
                            var dots = [x, y][concat](pa.slice(1));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4281
                            for (var j = 2, jj = dots.length; j < jj; j++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4282
                                dots[j] = +dots[j] + x;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4283
                                dots[++j] = +dots[j] + y;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4284
                            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4285
                            res.pop();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4286
                            res = res[concat](catmullRom2bezier(dots));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4287
                            break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4288
                        case "M":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4289
                            mx = +pa[1] + x;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4290
                            my = +pa[2] + y;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4291
                        default:
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4292
                            for (j = 1, jj = pa.length; j < jj; j++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4293
                                r[j] = +pa[j] + ((j % 2) ? x : y);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4294
                            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4295
                    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4296
                } else if (pa[0] == "R") {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4297
                    dots = [x, y][concat](pa.slice(1));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4298
                    res.pop();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4299
                    res = res[concat](catmullRom2bezier(dots));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4300
                    r = ["R"][concat](pa.slice(-2));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4301
                } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4302
                    for (var k = 0, kk = pa.length; k < kk; k++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4303
                        r[k] = pa[k];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4304
                    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4305
                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4306
                switch (r[0]) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4307
                    case "Z":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4308
                        x = mx;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4309
                        y = my;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4310
                        break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4311
                    case "H":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4312
                        x = r[1];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4313
                        break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4314
                    case "V":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4315
                        y = r[1];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4316
                        break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4317
                    case "M":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4318
                        mx = r[r.length - 2];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4319
                        my = r[r.length - 1];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4320
                    default:
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4321
                        x = r[r.length - 2];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4322
                        y = r[r.length - 1];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4323
                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4324
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4325
            res.toString = R._path2string;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4326
            return res;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4327
        }, null, pathClone),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4328
        l2c = function (x1, y1, x2, y2) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4329
            return [x1, y1, x2, y2, x2, y2];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4330
        },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4331
        q2c = function (x1, y1, ax, ay, x2, y2) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4332
            var _13 = 1 / 3,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4333
                _23 = 2 / 3;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4334
            return [
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4335
                    _13 * x1 + _23 * ax,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4336
                    _13 * y1 + _23 * ay,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4337
                    _13 * x2 + _23 * ax,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4338
                    _13 * y2 + _23 * ay,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4339
                    x2,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4340
                    y2
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4341
                ];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4342
        },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4343
        a2c = function (x1, y1, rx, ry, angle, large_arc_flag, sweep_flag, x2, y2, recursive) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4344
            // for more information of where this math came from visit:
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4345
            // http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4346
            var _120 = PI * 120 / 180,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4347
                rad = PI / 180 * (+angle || 0),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4348
                res = [],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4349
                xy,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4350
                rotate = cacher(function (x, y, rad) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4351
                    var X = x * math.cos(rad) - y * math.sin(rad),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4352
                        Y = x * math.sin(rad) + y * math.cos(rad);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4353
                    return {x: X, y: Y};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4354
                });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4355
            if (!recursive) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4356
                xy = rotate(x1, y1, -rad);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4357
                x1 = xy.x;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4358
                y1 = xy.y;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4359
                xy = rotate(x2, y2, -rad);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4360
                x2 = xy.x;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4361
                y2 = xy.y;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4362
                var cos = math.cos(PI / 180 * angle),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4363
                    sin = math.sin(PI / 180 * angle),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4364
                    x = (x1 - x2) / 2,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4365
                    y = (y1 - y2) / 2;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4366
                var h = (x * x) / (rx * rx) + (y * y) / (ry * ry);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4367
                if (h > 1) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4368
                    h = math.sqrt(h);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4369
                    rx = h * rx;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4370
                    ry = h * ry;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4371
                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4372
                var rx2 = rx * rx,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4373
                    ry2 = ry * ry,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4374
                    k = (large_arc_flag == sweep_flag ? -1 : 1) *
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4375
                        math.sqrt(abs((rx2 * ry2 - rx2 * y * y - ry2 * x * x) / (rx2 * y * y + ry2 * x * x))),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4376
                    cx = k * rx * y / ry + (x1 + x2) / 2,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4377
                    cy = k * -ry * x / rx + (y1 + y2) / 2,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4378
                    f1 = math.asin(((y1 - cy) / ry).toFixed(9)),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4379
                    f2 = math.asin(((y2 - cy) / ry).toFixed(9));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4380
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4381
                f1 = x1 < cx ? PI - f1 : f1;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4382
                f2 = x2 < cx ? PI - f2 : f2;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4383
                f1 < 0 && (f1 = PI * 2 + f1);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4384
                f2 < 0 && (f2 = PI * 2 + f2);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4385
                if (sweep_flag && f1 > f2) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4386
                    f1 = f1 - PI * 2;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4387
                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4388
                if (!sweep_flag && f2 > f1) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4389
                    f2 = f2 - PI * 2;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4390
                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4391
            } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4392
                f1 = recursive[0];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4393
                f2 = recursive[1];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4394
                cx = recursive[2];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4395
                cy = recursive[3];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4396
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4397
            var df = f2 - f1;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4398
            if (abs(df) > _120) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4399
                var f2old = f2,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4400
                    x2old = x2,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4401
                    y2old = y2;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4402
                f2 = f1 + _120 * (sweep_flag && f2 > f1 ? 1 : -1);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4403
                x2 = cx + rx * math.cos(f2);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4404
                y2 = cy + ry * math.sin(f2);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4405
                res = a2c(x2, y2, rx, ry, angle, 0, sweep_flag, x2old, y2old, [f2, f2old, cx, cy]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4406
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4407
            df = f2 - f1;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4408
            var c1 = math.cos(f1),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4409
                s1 = math.sin(f1),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4410
                c2 = math.cos(f2),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4411
                s2 = math.sin(f2),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4412
                t = math.tan(df / 4),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4413
                hx = 4 / 3 * rx * t,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4414
                hy = 4 / 3 * ry * t,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4415
                m1 = [x1, y1],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4416
                m2 = [x1 + hx * s1, y1 - hy * c1],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4417
                m3 = [x2 + hx * s2, y2 - hy * c2],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4418
                m4 = [x2, y2];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4419
            m2[0] = 2 * m1[0] - m2[0];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4420
            m2[1] = 2 * m1[1] - m2[1];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4421
            if (recursive) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4422
                return [m2, m3, m4][concat](res);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4423
            } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4424
                res = [m2, m3, m4][concat](res).join()[split](",");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4425
                var newres = [];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4426
                for (var i = 0, ii = res.length; i < ii; i++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4427
                    newres[i] = i % 2 ? rotate(res[i - 1], res[i], rad).y : rotate(res[i], res[i + 1], rad).x;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4428
                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4429
                return newres;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4430
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4431
        },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4432
        findDotAtSegment = function (p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4433
            var t1 = 1 - t;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4434
            return {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4435
                x: pow(t1, 3) * p1x + pow(t1, 2) * 3 * t * c1x + t1 * 3 * t * t * c2x + pow(t, 3) * p2x,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4436
                y: pow(t1, 3) * p1y + pow(t1, 2) * 3 * t * c1y + t1 * 3 * t * t * c2y + pow(t, 3) * p2y
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4437
            };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4438
        },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4439
        curveDim = cacher(function (p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4440
            var a = (c2x - 2 * c1x + p1x) - (p2x - 2 * c2x + c1x),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4441
                b = 2 * (c1x - p1x) - 2 * (c2x - c1x),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4442
                c = p1x - c1x,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4443
                t1 = (-b + math.sqrt(b * b - 4 * a * c)) / 2 / a,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4444
                t2 = (-b - math.sqrt(b * b - 4 * a * c)) / 2 / a,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4445
                y = [p1y, p2y],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4446
                x = [p1x, p2x],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4447
                dot;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4448
            abs(t1) > "1e12" && (t1 = .5);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4449
            abs(t2) > "1e12" && (t2 = .5);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4450
            if (t1 > 0 && t1 < 1) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4451
                dot = findDotAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t1);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4452
                x.push(dot.x);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4453
                y.push(dot.y);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4454
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4455
            if (t2 > 0 && t2 < 1) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4456
                dot = findDotAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t2);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4457
                x.push(dot.x);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4458
                y.push(dot.y);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4459
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4460
            a = (c2y - 2 * c1y + p1y) - (p2y - 2 * c2y + c1y);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4461
            b = 2 * (c1y - p1y) - 2 * (c2y - c1y);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4462
            c = p1y - c1y;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4463
            t1 = (-b + math.sqrt(b * b - 4 * a * c)) / 2 / a;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4464
            t2 = (-b - math.sqrt(b * b - 4 * a * c)) / 2 / a;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4465
            abs(t1) > "1e12" && (t1 = .5);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4466
            abs(t2) > "1e12" && (t2 = .5);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4467
            if (t1 > 0 && t1 < 1) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4468
                dot = findDotAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t1);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4469
                x.push(dot.x);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4470
                y.push(dot.y);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4471
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4472
            if (t2 > 0 && t2 < 1) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4473
                dot = findDotAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t2);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4474
                x.push(dot.x);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4475
                y.push(dot.y);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4476
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4477
            return {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4478
                min: {x: mmin[apply](0, x), y: mmin[apply](0, y)},
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4479
                max: {x: mmax[apply](0, x), y: mmax[apply](0, y)}
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4480
            };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4481
        }),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4482
        path2curve = R._path2curve = cacher(function (path, path2) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4483
            var p = pathToAbsolute(path),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4484
                p2 = path2 && pathToAbsolute(path2),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4485
                attrs = {x: 0, y: 0, bx: 0, by: 0, X: 0, Y: 0, qx: null, qy: null},
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4486
                attrs2 = {x: 0, y: 0, bx: 0, by: 0, X: 0, Y: 0, qx: null, qy: null},
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4487
                processPath = function (path, d) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4488
                    var nx, ny;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4489
                    if (!path) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4490
                        return ["C", d.x, d.y, d.x, d.y, d.x, d.y];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4491
                    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4492
                    !(path[0] in {T:1, Q:1}) && (d.qx = d.qy = null);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4493
                    switch (path[0]) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4494
                        case "M":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4495
                            d.X = path[1];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4496
                            d.Y = path[2];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4497
                            break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4498
                        case "A":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4499
                            path = ["C"][concat](a2c[apply](0, [d.x, d.y][concat](path.slice(1))));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4500
                            break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4501
                        case "S":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4502
                            nx = d.x + (d.x - (d.bx || d.x));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4503
                            ny = d.y + (d.y - (d.by || d.y));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4504
                            path = ["C", nx, ny][concat](path.slice(1));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4505
                            break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4506
                        case "T":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4507
                            d.qx = d.x + (d.x - (d.qx || d.x));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4508
                            d.qy = d.y + (d.y - (d.qy || d.y));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4509
                            path = ["C"][concat](q2c(d.x, d.y, d.qx, d.qy, path[1], path[2]));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4510
                            break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4511
                        case "Q":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4512
                            d.qx = path[1];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4513
                            d.qy = path[2];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4514
                            path = ["C"][concat](q2c(d.x, d.y, path[1], path[2], path[3], path[4]));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4515
                            break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4516
                        case "L":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4517
                            path = ["C"][concat](l2c(d.x, d.y, path[1], path[2]));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4518
                            break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4519
                        case "H":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4520
                            path = ["C"][concat](l2c(d.x, d.y, path[1], d.y));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4521
                            break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4522
                        case "V":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4523
                            path = ["C"][concat](l2c(d.x, d.y, d.x, path[1]));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4524
                            break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4525
                        case "Z":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4526
                            path = ["C"][concat](l2c(d.x, d.y, d.X, d.Y));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4527
                            break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4528
                    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4529
                    return path;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4530
                },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4531
                fixArc = function (pp, i) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4532
                    if (pp[i].length > 7) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4533
                        pp[i].shift();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4534
                        var pi = pp[i];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4535
                        while (pi.length) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4536
                            pp.splice(i++, 0, ["C"][concat](pi.splice(0, 6)));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4537
                        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4538
                        pp.splice(i, 1);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4539
                        ii = mmax(p.length, p2 && p2.length || 0);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4540
                    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4541
                },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4542
                fixM = function (path1, path2, a1, a2, i) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4543
                    if (path1 && path2 && path1[i][0] == "M" && path2[i][0] != "M") {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4544
                        path2.splice(i, 0, ["M", a2.x, a2.y]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4545
                        a1.bx = 0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4546
                        a1.by = 0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4547
                        a1.x = path1[i][1];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4548
                        a1.y = path1[i][2];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4549
                        ii = mmax(p.length, p2 && p2.length || 0);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4550
                    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4551
                };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4552
            for (var i = 0, ii = mmax(p.length, p2 && p2.length || 0); i < ii; i++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4553
                p[i] = processPath(p[i], attrs);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4554
                fixArc(p, i);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4555
                p2 && (p2[i] = processPath(p2[i], attrs2));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4556
                p2 && fixArc(p2, i);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4557
                fixM(p, p2, attrs, attrs2, i);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4558
                fixM(p2, p, attrs2, attrs, i);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4559
                var seg = p[i],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4560
                    seg2 = p2 && p2[i],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4561
                    seglen = seg.length,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4562
                    seg2len = p2 && seg2.length;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4563
                attrs.x = seg[seglen - 2];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4564
                attrs.y = seg[seglen - 1];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4565
                attrs.bx = toFloat(seg[seglen - 4]) || attrs.x;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4566
                attrs.by = toFloat(seg[seglen - 3]) || attrs.y;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4567
                attrs2.bx = p2 && (toFloat(seg2[seg2len - 4]) || attrs2.x);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4568
                attrs2.by = p2 && (toFloat(seg2[seg2len - 3]) || attrs2.y);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4569
                attrs2.x = p2 && seg2[seg2len - 2];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4570
                attrs2.y = p2 && seg2[seg2len - 1];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4571
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4572
            return p2 ? [p, p2] : p;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4573
        }, null, pathClone),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4574
        parseDots = R._parseDots = cacher(function (gradient) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4575
            var dots = [];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4576
            for (var i = 0, ii = gradient.length; i < ii; i++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4577
                var dot = {},
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4578
                    par = gradient[i].match(/^([^:]*):?([\d\.]*)/);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4579
                dot.color = R.getRGB(par[1]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4580
                if (dot.color.error) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4581
                    return null;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4582
                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4583
                dot.color = dot.color.hex;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4584
                par[2] && (dot.offset = par[2] + "%");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4585
                dots.push(dot);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4586
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4587
            for (i = 1, ii = dots.length - 1; i < ii; i++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4588
                if (!dots[i].offset) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4589
                    var start = toFloat(dots[i - 1].offset || 0),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4590
                        end = 0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4591
                    for (var j = i + 1; j < ii; j++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4592
                        if (dots[j].offset) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4593
                            end = dots[j].offset;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4594
                            break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4595
                        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4596
                    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4597
                    if (!end) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4598
                        end = 100;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4599
                        j = ii;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4600
                    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4601
                    end = toFloat(end);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4602
                    var d = (end - start) / (j - i + 1);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4603
                    for (; i < j; i++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4604
                        start += d;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4605
                        dots[i].offset = start + "%";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4606
                    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4607
                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4608
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4609
            return dots;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4610
        }),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4611
        tear = R._tear = function (el, paper) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4612
            el == paper.top && (paper.top = el.prev);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4613
            el == paper.bottom && (paper.bottom = el.next);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4614
            el.next && (el.next.prev = el.prev);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4615
            el.prev && (el.prev.next = el.next);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4616
        },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4617
        tofront = R._tofront = function (el, paper) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4618
            if (paper.top === el) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4619
                return;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4620
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4621
            tear(el, paper);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4622
            el.next = null;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4623
            el.prev = paper.top;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4624
            paper.top.next = el;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4625
            paper.top = el;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4626
        },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4627
        toback = R._toback = function (el, paper) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4628
            if (paper.bottom === el) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4629
                return;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4630
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4631
            tear(el, paper);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4632
            el.next = paper.bottom;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4633
            el.prev = null;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4634
            paper.bottom.prev = el;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4635
            paper.bottom = el;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4636
        },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4637
        insertafter = R._insertafter = function (el, el2, paper) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4638
            tear(el, paper);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4639
            el2 == paper.top && (paper.top = el);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4640
            el2.next && (el2.next.prev = el);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4641
            el.next = el2.next;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4642
            el.prev = el2;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4643
            el2.next = el;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4644
        },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4645
        insertbefore = R._insertbefore = function (el, el2, paper) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4646
            tear(el, paper);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4647
            el2 == paper.bottom && (paper.bottom = el);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4648
            el2.prev && (el2.prev.next = el);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4649
            el.prev = el2.prev;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4650
            el2.prev = el;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4651
            el.next = el2;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4652
        },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4653
        removed = function (methodname) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4654
            return function () {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4655
                throw new Error("Rapha\xebl: you are calling to method \u201c" + methodname + "\u201d of removed object");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4656
            };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4657
        },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4658
        extractTransform = R._extractTransform = function (el, tstr) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4659
            if (tstr == null) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4660
                return el._.transform;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4661
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4662
            tstr = Str(tstr).replace(/\.{3}|\u2026/g, el._.transform || E);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4663
            var tdata = R.parseTransformString(tstr),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4664
                deg = 0,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4665
                dx = 0,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4666
                dy = 0,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4667
                sx = 1,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4668
                sy = 1,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4669
                _ = el._,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4670
                m = new Matrix;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4671
            _.transform = tdata || [];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4672
            if (tdata) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4673
                for (var i = 0, ii = tdata.length; i < ii; i++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4674
                    var t = tdata[i],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4675
                        tlen = t.length,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4676
                        command = Str(t[0]).toLowerCase(),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4677
                        absolute = t[0] != command,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4678
                        inver = absolute ? m.invert() : 0,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4679
                        x1,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4680
                        y1,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4681
                        x2,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4682
                        y2,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4683
                        bb;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4684
                    if (command == "t" && tlen == 3) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4685
                        if (absolute) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4686
                            x1 = inver.x(0, 0);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4687
                            y1 = inver.y(0, 0);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4688
                            x2 = inver.x(t[1], t[2]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4689
                            y2 = inver.y(t[1], t[2]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4690
                            m.translate(x2 - x1, y2 - y1);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4691
                        } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4692
                            m.translate(t[1], t[2]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4693
                        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4694
                    } else if (command == "r") {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4695
                        if (tlen == 2) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4696
                            bb = bb || el.getBBox(1);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4697
                            m.rotate(t[1], bb.x + bb.width / 2, bb.y + bb.height / 2);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4698
                            deg += t[1];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4699
                        } else if (tlen == 4) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4700
                            if (absolute) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4701
                                x2 = inver.x(t[2], t[3]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4702
                                y2 = inver.y(t[2], t[3]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4703
                                m.rotate(t[1], x2, y2);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4704
                            } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4705
                                m.rotate(t[1], t[2], t[3]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4706
                            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4707
                            deg += t[1];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4708
                        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4709
                    } else if (command == "s") {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4710
                        if (tlen == 2 || tlen == 3) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4711
                            bb = bb || el.getBBox(1);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4712
                            m.scale(t[1], t[tlen - 1], bb.x + bb.width / 2, bb.y + bb.height / 2);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4713
                            sx *= t[1];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4714
                            sy *= t[tlen - 1];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4715
                        } else if (tlen == 5) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4716
                            if (absolute) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4717
                                x2 = inver.x(t[3], t[4]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4718
                                y2 = inver.y(t[3], t[4]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4719
                                m.scale(t[1], t[2], x2, y2);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4720
                            } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4721
                                m.scale(t[1], t[2], t[3], t[4]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4722
                            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4723
                            sx *= t[1];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4724
                            sy *= t[2];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4725
                        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4726
                    } else if (command == "m" && tlen == 7) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4727
                        m.add(t[1], t[2], t[3], t[4], t[5], t[6]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4728
                    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4729
                    _.dirtyT = 1;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4730
                    el.matrix = m;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4731
                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4732
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4733
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4734
            el.matrix = m;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4735
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4736
            _.sx = sx;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4737
            _.sy = sy;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4738
            _.deg = deg;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4739
            _.dx = dx = m.e;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4740
            _.dy = dy = m.f;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4741
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4742
            if (sx == 1 && sy == 1 && !deg && _.bbox) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4743
                _.bbox.x += +dx;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4744
                _.bbox.y += +dy;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4745
            } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4746
                _.dirtyT = 1;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4747
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4748
        },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4749
        getEmpty = function (item) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4750
            var l = item[0];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4751
            switch (l.toLowerCase()) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4752
                case "t": return [l, 0, 0];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4753
                case "m": return [l, 1, 0, 0, 1, 0, 0];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4754
                case "r": if (item.length == 4) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4755
                    return [l, 0, item[2], item[3]];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4756
                } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4757
                    return [l, 0];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4758
                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4759
                case "s": if (item.length == 5) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4760
                    return [l, 1, 1, item[3], item[4]];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4761
                } else if (item.length == 3) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4762
                    return [l, 1, 1];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4763
                } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4764
                    return [l, 1];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4765
                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4766
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4767
        },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4768
        equaliseTransform = R._equaliseTransform = function (t1, t2) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4769
            t2 = Str(t2).replace(/\.{3}|\u2026/g, t1);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4770
            t1 = R.parseTransformString(t1) || [];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4771
            t2 = R.parseTransformString(t2) || [];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4772
            var maxlength = mmax(t1.length, t2.length),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4773
                from = [],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4774
                to = [],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4775
                i = 0, j, jj,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4776
                tt1, tt2;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4777
            for (; i < maxlength; i++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4778
                tt1 = t1[i] || getEmpty(t2[i]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4779
                tt2 = t2[i] || getEmpty(tt1);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4780
                if ((tt1[0] != tt2[0]) ||
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4781
                    (tt1[0].toLowerCase() == "r" && (tt1[2] != tt2[2] || tt1[3] != tt2[3])) ||
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4782
                    (tt1[0].toLowerCase() == "s" && (tt1[3] != tt2[3] || tt1[4] != tt2[4]))
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4783
                    ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4784
                    return;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4785
                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4786
                from[i] = [];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4787
                to[i] = [];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4788
                for (j = 0, jj = mmax(tt1.length, tt2.length); j < jj; j++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4789
                    j in tt1 && (from[i][j] = tt1[j]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4790
                    j in tt2 && (to[i][j] = tt2[j]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4791
                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4792
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4793
            return {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4794
                from: from,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4795
                to: to
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4796
            };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4797
        };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4798
    R._getContainer = function (x, y, w, h) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4799
        var container;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4800
        container = h == null && !R.is(x, "object") ? g.doc.getElementById(x) : x;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4801
        if (container == null) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4802
            return;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4803
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4804
        if (container.tagName) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4805
            if (y == null) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4806
                return {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4807
                    container: container,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4808
                    width: container.style.pixelWidth || container.offsetWidth,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4809
                    height: container.style.pixelHeight || container.offsetHeight
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4810
                };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4811
            } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4812
                return {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4813
                    container: container,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4814
                    width: y,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4815
                    height: w
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4816
                };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4817
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4818
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4819
        return {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4820
            container: 1,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4821
            x: x,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4822
            y: y,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4823
            width: w,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4824
            height: h
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4825
        };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4826
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4827
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4828
    R.pathToRelative = pathToRelative;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4829
    R._engine = {};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4830
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4831
    R.path2curve = path2curve;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4832
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4833
    R.matrix = function (a, b, c, d, e, f) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4834
        return new Matrix(a, b, c, d, e, f);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4835
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4836
    function Matrix(a, b, c, d, e, f) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4837
        if (a != null) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4838
            this.a = +a;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4839
            this.b = +b;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4840
            this.c = +c;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4841
            this.d = +d;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4842
            this.e = +e;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4843
            this.f = +f;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4844
        } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4845
            this.a = 1;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4846
            this.b = 0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4847
            this.c = 0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4848
            this.d = 1;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4849
            this.e = 0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4850
            this.f = 0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4851
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4852
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4853
    (function (matrixproto) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4854
        
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4855
        matrixproto.add = function (a, b, c, d, e, f) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4856
            var out = [[], [], []],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4857
                m = [[this.a, this.c, this.e], [this.b, this.d, this.f], [0, 0, 1]],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4858
                matrix = [[a, c, e], [b, d, f], [0, 0, 1]],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4859
                x, y, z, res;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4860
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4861
            if (a && a instanceof Matrix) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4862
                matrix = [[a.a, a.c, a.e], [a.b, a.d, a.f], [0, 0, 1]];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4863
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4864
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4865
            for (x = 0; x < 3; x++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4866
                for (y = 0; y < 3; y++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4867
                    res = 0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4868
                    for (z = 0; z < 3; z++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4869
                        res += m[x][z] * matrix[z][y];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4870
                    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4871
                    out[x][y] = res;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4872
                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4873
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4874
            this.a = out[0][0];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4875
            this.b = out[1][0];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4876
            this.c = out[0][1];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4877
            this.d = out[1][1];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4878
            this.e = out[0][2];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4879
            this.f = out[1][2];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4880
        };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4881
        
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4882
        matrixproto.invert = function () {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4883
            var me = this,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4884
                x = me.a * me.d - me.b * me.c;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4885
            return new Matrix(me.d / x, -me.b / x, -me.c / x, me.a / x, (me.c * me.f - me.d * me.e) / x, (me.b * me.e - me.a * me.f) / x);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4886
        };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4887
        
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4888
        matrixproto.clone = function () {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4889
            return new Matrix(this.a, this.b, this.c, this.d, this.e, this.f);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4890
        };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4891
        
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4892
        matrixproto.translate = function (x, y) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4893
            this.add(1, 0, 0, 1, x, y);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4894
        };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4895
        
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4896
        matrixproto.scale = function (x, y, cx, cy) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4897
            y == null && (y = x);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4898
            (cx || cy) && this.add(1, 0, 0, 1, cx, cy);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4899
            this.add(x, 0, 0, y, 0, 0);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4900
            (cx || cy) && this.add(1, 0, 0, 1, -cx, -cy);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4901
        };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4902
        
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4903
        matrixproto.rotate = function (a, x, y) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4904
            a = R.rad(a);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4905
            x = x || 0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4906
            y = y || 0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4907
            var cos = +math.cos(a).toFixed(9),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4908
                sin = +math.sin(a).toFixed(9);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4909
            this.add(cos, sin, -sin, cos, x, y);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4910
            this.add(1, 0, 0, 1, -x, -y);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4911
        };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4912
        
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4913
        matrixproto.x = function (x, y) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4914
            return x * this.a + y * this.c + this.e;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4915
        };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4916
        
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4917
        matrixproto.y = function (x, y) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4918
            return x * this.b + y * this.d + this.f;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4919
        };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4920
        matrixproto.get = function (i) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4921
            return +this[Str.fromCharCode(97 + i)].toFixed(4);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4922
        };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4923
        matrixproto.toString = function () {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4924
            return R.svg ?
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4925
                "matrix(" + [this.get(0), this.get(1), this.get(2), this.get(3), this.get(4), this.get(5)].join() + ")" :
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4926
                [this.get(0), this.get(2), this.get(1), this.get(3), 0, 0].join();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4927
        };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4928
        matrixproto.toFilter = function () {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4929
            return "progid:DXImageTransform.Microsoft.Matrix(M11=" + this.get(0) +
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4930
                ", M12=" + this.get(2) + ", M21=" + this.get(1) + ", M22=" + this.get(3) +
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4931
                ", Dx=" + this.get(4) + ", Dy=" + this.get(5) + ", sizingmethod='auto expand')";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4932
        };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4933
        matrixproto.offset = function () {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4934
            return [this.e.toFixed(4), this.f.toFixed(4)];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4935
        };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4936
        function norm(a) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4937
            return a[0] * a[0] + a[1] * a[1];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4938
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4939
        function normalize(a) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4940
            var mag = math.sqrt(norm(a));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4941
            a[0] && (a[0] /= mag);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4942
            a[1] && (a[1] /= mag);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4943
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4944
        
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4945
        matrixproto.split = function () {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4946
            var out = {};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4947
            // translation
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4948
            out.dx = this.e;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4949
            out.dy = this.f;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4950
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4951
            // scale and shear
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4952
            var row = [[this.a, this.c], [this.b, this.d]];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4953
            out.scalex = math.sqrt(norm(row[0]));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4954
            normalize(row[0]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4955
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4956
            out.shear = row[0][0] * row[1][0] + row[0][1] * row[1][1];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4957
            row[1] = [row[1][0] - row[0][0] * out.shear, row[1][1] - row[0][1] * out.shear];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4958
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4959
            out.scaley = math.sqrt(norm(row[1]));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4960
            normalize(row[1]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4961
            out.shear /= out.scaley;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4962
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4963
            // rotation
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4964
            var sin = -row[0][1],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4965
                cos = row[1][1];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4966
            if (cos < 0) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4967
                out.rotate = R.deg(math.acos(cos));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4968
                if (sin < 0) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4969
                    out.rotate = 360 - out.rotate;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4970
                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4971
            } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4972
                out.rotate = R.deg(math.asin(sin));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4973
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4974
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4975
            out.isSimple = !+out.shear.toFixed(9) && (out.scalex.toFixed(9) == out.scaley.toFixed(9) || !out.rotate);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4976
            out.isSuperSimple = !+out.shear.toFixed(9) && out.scalex.toFixed(9) == out.scaley.toFixed(9) && !out.rotate;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4977
            out.noRotation = !+out.shear.toFixed(9) && !out.rotate;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4978
            return out;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4979
        };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4980
        
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4981
        matrixproto.toTransformString = function (shorter) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4982
            var s = shorter || this[split]();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4983
            if (s.isSimple) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4984
                return "t" + [s.dx, s.dy] + "s" + [s.scalex, s.scaley, 0, 0] + "r" + [s.rotate, 0, 0];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4985
            } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4986
                return "m" + [this.get(0), this.get(1), this.get(2), this.get(3), this.get(4), this.get(5)];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4987
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4988
        };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4989
    })(Matrix.prototype);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4990
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4991
    // WebKit rendering bug workaround method
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4992
    var version = navigator.userAgent.match(/Version\/(.*?)\s/) || navigator.userAgent.match(/Chrome\/(\d+)/);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4993
    if ((navigator.vendor == "Apple Computer, Inc.") && (version && version[1] < 4 || navigator.platform.slice(0, 2) == "iP") ||
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4994
        (navigator.vendor == "Google Inc." && version && version[1] < 8)) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4995
        
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4996
        paperproto.safari = function () {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4997
            var rect = this.rect(-99, -99, this.width + 99, this.height + 99).attr({stroke: "none"});
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4998
            setTimeout(function () {rect.remove();});
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  4999
        };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5000
    } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5001
        paperproto.safari = fun;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5002
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5003
 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5004
    var preventDefault = function () {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5005
        this.returnValue = false;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5006
    },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5007
    preventTouch = function () {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5008
        return this.originalEvent.preventDefault();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5009
    },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5010
    stopPropagation = function () {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5011
        this.cancelBubble = true;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5012
    },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5013
    stopTouch = function () {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5014
        return this.originalEvent.stopPropagation();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5015
    },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5016
    addEvent = (function () {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5017
        if (g.doc.addEventListener) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5018
            return function (obj, type, fn, element) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5019
                var realName = supportsTouch && touchMap[type] ? touchMap[type] : type,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5020
                    f = function (e) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5021
                        var scrollY = g.doc.documentElement.scrollTop || g.doc.body.scrollTop,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5022
                            scrollX = g.doc.documentElement.scrollLeft || g.doc.body.scrollLeft,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5023
                            x = e.clientX + scrollX,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5024
                            y = e.clientY + scrollY;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5025
                    if (supportsTouch && touchMap[has](type)) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5026
                        for (var i = 0, ii = e.targetTouches && e.targetTouches.length; i < ii; i++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5027
                            if (e.targetTouches[i].target == obj) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5028
                                var olde = e;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5029
                                e = e.targetTouches[i];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5030
                                e.originalEvent = olde;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5031
                                e.preventDefault = preventTouch;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5032
                                e.stopPropagation = stopTouch;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5033
                                break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5034
                            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5035
                        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5036
                    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5037
                    return fn.call(element, e, x, y);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5038
                };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5039
                obj.addEventListener(realName, f, false);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5040
                return function () {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5041
                    obj.removeEventListener(realName, f, false);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5042
                    return true;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5043
                };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5044
            };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5045
        } else if (g.doc.attachEvent) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5046
            return function (obj, type, fn, element) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5047
                var f = function (e) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5048
                    e = e || g.win.event;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5049
                    var scrollY = g.doc.documentElement.scrollTop || g.doc.body.scrollTop,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5050
                        scrollX = g.doc.documentElement.scrollLeft || g.doc.body.scrollLeft,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5051
                        x = e.clientX + scrollX,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5052
                        y = e.clientY + scrollY;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5053
                    e.preventDefault = e.preventDefault || preventDefault;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5054
                    e.stopPropagation = e.stopPropagation || stopPropagation;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5055
                    return fn.call(element, e, x, y);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5056
                };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5057
                obj.attachEvent("on" + type, f);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5058
                var detacher = function () {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5059
                    obj.detachEvent("on" + type, f);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5060
                    return true;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5061
                };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5062
                return detacher;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5063
            };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5064
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5065
    })(),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5066
    drag = [],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5067
    dragMove = function (e) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5068
        var x = e.clientX,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5069
            y = e.clientY,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5070
            scrollY = g.doc.documentElement.scrollTop || g.doc.body.scrollTop,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5071
            scrollX = g.doc.documentElement.scrollLeft || g.doc.body.scrollLeft,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5072
            dragi,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5073
            j = drag.length;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5074
        while (j--) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5075
            dragi = drag[j];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5076
            if (supportsTouch) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5077
                var i = e.touches.length,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5078
                    touch;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5079
                while (i--) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5080
                    touch = e.touches[i];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5081
                    if (touch.identifier == dragi.el._drag.id) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5082
                        x = touch.clientX;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5083
                        y = touch.clientY;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5084
                        (e.originalEvent ? e.originalEvent : e).preventDefault();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5085
                        break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5086
                    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5087
                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5088
            } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5089
                e.preventDefault();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5090
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5091
            var node = dragi.el.node,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5092
                o,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5093
                next = node.nextSibling,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5094
                parent = node.parentNode,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5095
                display = node.style.display;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5096
            g.win.opera && parent.removeChild(node);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5097
            node.style.display = "none";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5098
            o = dragi.el.paper.getElementByPoint(x, y);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5099
            node.style.display = display;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5100
            g.win.opera && (next ? parent.insertBefore(node, next) : parent.appendChild(node));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5101
            o && eve("drag.over." + dragi.el.id, dragi.el, o);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5102
            x += scrollX;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5103
            y += scrollY;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5104
            eve("drag.move." + dragi.el.id, dragi.move_scope || dragi.el, x - dragi.el._drag.x, y - dragi.el._drag.y, x, y, e);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5105
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5106
    },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5107
    dragUp = function (e) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5108
        R.unmousemove(dragMove).unmouseup(dragUp);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5109
        var i = drag.length,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5110
            dragi;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5111
        while (i--) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5112
            dragi = drag[i];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5113
            dragi.el._drag = {};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5114
            eve("drag.end." + dragi.el.id, dragi.end_scope || dragi.start_scope || dragi.move_scope || dragi.el, e);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5115
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5116
        drag = [];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5117
    },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5118
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5119
    elproto = R.el = {};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5120
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5121
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5122
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5123
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5124
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5125
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5126
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5127
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5128
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5129
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5130
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5131
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5132
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5133
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5134
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5135
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5136
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5137
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5138
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5139
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5140
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5141
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5142
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5143
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5144
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5145
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5146
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5147
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5148
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5149
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5150
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5151
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5152
    for (var i = events.length; i--;) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5153
        (function (eventName) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5154
            R[eventName] = elproto[eventName] = function (fn, scope) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5155
                if (R.is(fn, "function")) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5156
                    this.events = this.events || [];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5157
                    this.events.push({name: eventName, f: fn, unbind: addEvent(this.shape || this.node || g.doc, eventName, fn, scope || this)});
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5158
                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5159
                return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5160
            };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5161
            R["un" + eventName] = elproto["un" + eventName] = function (fn) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5162
                var events = this.events,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5163
                    l = events.length;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5164
                while (l--) if (events[l].name == eventName && events[l].f == fn) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5165
                    events[l].unbind();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5166
                    events.splice(l, 1);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5167
                    !events.length && delete this.events;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5168
                    return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5169
                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5170
                return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5171
            };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5172
        })(events[i]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5173
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5174
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5175
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5176
    elproto.data = function (key, value) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5177
        var data = eldata[this.id] = eldata[this.id] || {};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5178
        if (arguments.length == 1) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5179
            if (R.is(key, "object")) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5180
                for (var i in key) if (key[has](i)) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5181
                    this.data(i, key[i]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5182
                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5183
                return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5184
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5185
            eve("data.get." + this.id, this, data[key], key);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5186
            return data[key];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5187
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5188
        data[key] = value;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5189
        eve("data.set." + this.id, this, value, key);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5190
        return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5191
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5192
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5193
    elproto.removeData = function (key) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5194
        if (key == null) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5195
            eldata[this.id] = {};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5196
        } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5197
            eldata[this.id] && delete eldata[this.id][key];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5198
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5199
        return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5200
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5201
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5202
    elproto.hover = function (f_in, f_out, scope_in, scope_out) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5203
        return this.mouseover(f_in, scope_in).mouseout(f_out, scope_out || scope_in);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5204
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5205
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5206
    elproto.unhover = function (f_in, f_out) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5207
        return this.unmouseover(f_in).unmouseout(f_out);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5208
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5209
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5210
    elproto.drag = function (onmove, onstart, onend, move_scope, start_scope, end_scope) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5211
        function start(e) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5212
            (e.originalEvent || e).preventDefault();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5213
            var scrollY = g.doc.documentElement.scrollTop || g.doc.body.scrollTop,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5214
                scrollX = g.doc.documentElement.scrollLeft || g.doc.body.scrollLeft;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5215
            this._drag.x = e.clientX + scrollX;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5216
            this._drag.y = e.clientY + scrollY;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5217
            this._drag.id = e.identifier;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5218
            !drag.length && R.mousemove(dragMove).mouseup(dragUp);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5219
            drag.push({el: this, move_scope: move_scope, start_scope: start_scope, end_scope: end_scope});
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5220
            onstart && eve.on("drag.start." + this.id, onstart);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5221
            onmove && eve.on("drag.move." + this.id, onmove);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5222
            onend && eve.on("drag.end." + this.id, onend);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5223
            eve("drag.start." + this.id, start_scope || move_scope || this, e.clientX + scrollX, e.clientY + scrollY, e);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5224
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5225
        this._drag = {};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5226
        this.mousedown(start);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5227
        return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5228
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5229
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5230
    elproto.onDragOver = function (f) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5231
        f ? eve.on("drag.over." + this.id, f) : eve.unbind("drag.over." + this.id);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5232
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5233
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5234
    elproto.undrag = function () {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5235
        var i = drag.length;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5236
        while (i--) if (drag[i].el == this) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5237
            R.unmousedown(drag[i].start);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5238
            drag.splice(i++, 1);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5239
            eve.unbind("drag.*." + this.id);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5240
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5241
        !drag.length && R.unmousemove(dragMove).unmouseup(dragUp);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5242
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5243
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5244
    paperproto.circle = function (x, y, r) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5245
        var out = R._engine.circle(this, x || 0, y || 0, r || 0);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5246
        this.__set__ && this.__set__.push(out);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5247
        return out;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5248
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5249
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5250
    paperproto.rect = function (x, y, w, h, r) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5251
        var out = R._engine.rect(this, x || 0, y || 0, w || 0, h || 0, r || 0);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5252
        this.__set__ && this.__set__.push(out);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5253
        return out;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5254
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5255
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5256
    paperproto.ellipse = function (x, y, rx, ry) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5257
        var out = R._engine.ellipse(this, x || 0, y || 0, rx || 0, ry || 0);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5258
        this.__set__ && this.__set__.push(out);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5259
        return out;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5260
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5261
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5262
    paperproto.path = function (pathString) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5263
        pathString && !R.is(pathString, string) && !R.is(pathString[0], array) && (pathString += E);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5264
        var out = R._engine.path(R.format[apply](R, arguments), this);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5265
        this.__set__ && this.__set__.push(out);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5266
        return out;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5267
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5268
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5269
    paperproto.image = function (src, x, y, w, h) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5270
        var out = R._engine.image(this, src || "about:blank", x || 0, y || 0, w || 0, h || 0);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5271
        this.__set__ && this.__set__.push(out);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5272
        return out;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5273
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5274
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5275
    paperproto.text = function (x, y, text) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5276
        var out = R._engine.text(this, x || 0, y || 0, Str(text));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5277
        this.__set__ && this.__set__.push(out);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5278
        return out;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5279
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5280
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5281
    paperproto.set = function (itemsArray) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5282
        !R.is(itemsArray, "array") && (itemsArray = Array.prototype.splice.call(arguments, 0, arguments.length));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5283
        var out = new Set(itemsArray);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5284
        this.__set__ && this.__set__.push(out);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5285
        return out;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5286
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5287
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5288
    paperproto.setStart = function (set) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5289
        this.__set__ = set || this.set();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5290
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5291
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5292
    paperproto.setFinish = function (set) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5293
        var out = this.__set__;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5294
        delete this.__set__;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5295
        return out;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5296
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5297
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5298
    paperproto.setSize = function (width, height) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5299
        return R._engine.setSize.call(this, width, height);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5300
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5301
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5302
    paperproto.setViewBox = function (x, y, w, h, fit) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5303
        return R._engine.setViewBox.call(this, x, y, w, h, fit);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5304
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5305
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5306
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5307
    paperproto.top = paperproto.bottom = null;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5308
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5309
    paperproto.raphael = R;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5310
    var getOffset = function (elem) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5311
        var box = elem.getBoundingClientRect(),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5312
            doc = elem.ownerDocument,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5313
            body = doc.body,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5314
            docElem = doc.documentElement,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5315
            clientTop = docElem.clientTop || body.clientTop || 0, clientLeft = docElem.clientLeft || body.clientLeft || 0,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5316
            top  = box.top  + (g.win.pageYOffset || docElem.scrollTop || body.scrollTop ) - clientTop,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5317
            left = box.left + (g.win.pageXOffset || docElem.scrollLeft || body.scrollLeft) - clientLeft;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5318
        return {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5319
            y: top,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5320
            x: left
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5321
        };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5322
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5323
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5324
    paperproto.getElementByPoint = function (x, y) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5325
        var paper = this,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5326
            svg = paper.canvas,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5327
            target = g.doc.elementFromPoint(x, y);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5328
        if (g.win.opera && target.tagName == "svg") {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5329
            var so = getOffset(svg),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5330
                sr = svg.createSVGRect();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5331
            sr.x = x - so.x;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5332
            sr.y = y - so.y;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5333
            sr.width = sr.height = 1;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5334
            var hits = svg.getIntersectionList(sr, null);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5335
            if (hits.length) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5336
                target = hits[hits.length - 1];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5337
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5338
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5339
        if (!target) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5340
            return null;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5341
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5342
        while (target.parentNode && target != svg.parentNode && !target.raphael) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5343
            target = target.parentNode;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5344
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5345
        target == paper.canvas.parentNode && (target = svg);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5346
        target = target && target.raphael ? paper.getById(target.raphaelid) : null;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5347
        return target;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5348
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5349
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5350
    paperproto.getById = function (id) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5351
        var bot = this.bottom;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5352
        while (bot) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5353
            if (bot.id == id) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5354
                return bot;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5355
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5356
            bot = bot.next;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5357
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5358
        return null;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5359
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5360
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5361
    paperproto.forEach = function (callback, thisArg) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5362
        var bot = this.bottom;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5363
        while (bot) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5364
            if (callback.call(thisArg, bot) === false) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5365
                return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5366
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5367
            bot = bot.next;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5368
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5369
        return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5370
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5371
    function x_y() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5372
        return this.x + S + this.y;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5373
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5374
    function x_y_w_h() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5375
        return this.x + S + this.y + S + this.width + " \xd7 " + this.height;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5376
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5377
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5378
    elproto.getBBox = function (isWithoutTransform) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5379
        if (this.removed) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5380
            return {};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5381
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5382
        var _ = this._;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5383
        if (isWithoutTransform) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5384
            if (_.dirty || !_.bboxwt) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5385
                this.realPath = getPath[this.type](this);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5386
                _.bboxwt = pathDimensions(this.realPath);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5387
                _.bboxwt.toString = x_y_w_h;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5388
                _.dirty = 0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5389
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5390
            return _.bboxwt;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5391
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5392
        if (_.dirty || _.dirtyT || !_.bbox) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5393
            if (_.dirty || !this.realPath) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5394
                _.bboxwt = 0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5395
                this.realPath = getPath[this.type](this);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5396
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5397
            _.bbox = pathDimensions(mapPath(this.realPath, this.matrix));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5398
            _.bbox.toString = x_y_w_h;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5399
            _.dirty = _.dirtyT = 0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5400
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5401
        return _.bbox;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5402
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5403
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5404
    elproto.clone = function () {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5405
        if (this.removed) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5406
            return null;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5407
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5408
        var out = this.paper[this.type]().attr(this.attr());
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5409
        this.__set__ && this.__set__.push(out);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5410
        return out;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5411
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5412
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5413
    elproto.glow = function (glow) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5414
        if (this.type == "text") {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5415
            return null;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5416
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5417
        glow = glow || {};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5418
        var s = {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5419
            width: (glow.width || 10) + (+this.attr("stroke-width") || 1),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5420
            fill: glow.fill || false,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5421
            opacity: glow.opacity || .5,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5422
            offsetx: glow.offsetx || 0,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5423
            offsety: glow.offsety || 0,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5424
            color: glow.color || "#000"
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5425
        },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5426
            c = s.width / 2,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5427
            r = this.paper,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5428
            out = r.set(),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5429
            path = this.realPath || getPath[this.type](this);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5430
        path = this.matrix ? mapPath(path, this.matrix) : path;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5431
        for (var i = 1; i < c + 1; i++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5432
            out.push(r.path(path).attr({
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5433
                stroke: s.color,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5434
                fill: s.fill ? s.color : "none",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5435
                "stroke-linejoin": "round",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5436
                "stroke-linecap": "round",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5437
                "stroke-width": +(s.width / c * i).toFixed(3),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5438
                opacity: +(s.opacity / c).toFixed(3)
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5439
            }));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5440
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5441
        return out.insertBefore(this).translate(s.offsetx, s.offsety);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5442
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5443
    var curveslengths = {},
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5444
    getPointAtSegmentLength = function (p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, length) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5445
        var len = 0,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5446
            precision = 100,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5447
            name = [p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y].join(),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5448
            cache = curveslengths[name],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5449
            old, dot;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5450
        !cache && (curveslengths[name] = cache = {data: []});
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5451
        cache.timer && clearTimeout(cache.timer);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5452
        cache.timer = setTimeout(function () {delete curveslengths[name];}, 2e3);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5453
        if (length != null && !cache.precision) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5454
            var total = getPointAtSegmentLength(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5455
            cache.precision = ~~total * 10;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5456
            cache.data = [];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5457
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5458
        precision = cache.precision || precision;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5459
        for (var i = 0; i < precision + 1; i++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5460
            if (cache.data[i * precision]) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5461
                dot = cache.data[i * precision];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5462
            } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5463
                dot = R.findDotsAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, i / precision);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5464
                cache.data[i * precision] = dot;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5465
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5466
            i && (len += pow(pow(old.x - dot.x, 2) + pow(old.y - dot.y, 2), .5));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5467
            if (length != null && len >= length) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5468
                return dot;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5469
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5470
            old = dot;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5471
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5472
        if (length == null) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5473
            return len;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5474
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5475
    },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5476
    getLengthFactory = function (istotal, subpath) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5477
        return function (path, length, onlystart) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5478
            path = path2curve(path);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5479
            var x, y, p, l, sp = "", subpaths = {}, point,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5480
                len = 0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5481
            for (var i = 0, ii = path.length; i < ii; i++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5482
                p = path[i];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5483
                if (p[0] == "M") {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5484
                    x = +p[1];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5485
                    y = +p[2];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5486
                } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5487
                    l = getPointAtSegmentLength(x, y, p[1], p[2], p[3], p[4], p[5], p[6]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5488
                    if (len + l > length) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5489
                        if (subpath && !subpaths.start) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5490
                            point = getPointAtSegmentLength(x, y, p[1], p[2], p[3], p[4], p[5], p[6], length - len);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5491
                            sp += ["C" + point.start.x, point.start.y, point.m.x, point.m.y, point.x, point.y];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5492
                            if (onlystart) {return sp;}
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5493
                            subpaths.start = sp;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5494
                            sp = ["M" + point.x, point.y + "C" + point.n.x, point.n.y, point.end.x, point.end.y, p[5], p[6]].join();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5495
                            len += l;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5496
                            x = +p[5];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5497
                            y = +p[6];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5498
                            continue;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5499
                        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5500
                        if (!istotal && !subpath) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5501
                            point = getPointAtSegmentLength(x, y, p[1], p[2], p[3], p[4], p[5], p[6], length - len);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5502
                            return {x: point.x, y: point.y, alpha: point.alpha};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5503
                        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5504
                    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5505
                    len += l;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5506
                    x = +p[5];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5507
                    y = +p[6];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5508
                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5509
                sp += p.shift() + p;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5510
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5511
            subpaths.end = sp;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5512
            point = istotal ? len : subpath ? subpaths : R.findDotsAtSegment(x, y, p[0], p[1], p[2], p[3], p[4], p[5], 1);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5513
            point.alpha && (point = {x: point.x, y: point.y, alpha: point.alpha});
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5514
            return point;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5515
        };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5516
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5517
    var getTotalLength = getLengthFactory(1),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5518
        getPointAtLength = getLengthFactory(),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5519
        getSubpathsAtLength = getLengthFactory(0, 1);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5520
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5521
    R.getTotalLength = getTotalLength;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5522
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5523
    R.getPointAtLength = getPointAtLength;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5524
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5525
    R.getSubpath = function (path, from, to) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5526
        if (this.getTotalLength(path) - to < 1e-6) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5527
            return getSubpathsAtLength(path, from).end;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5528
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5529
        var a = getSubpathsAtLength(path, to, 1);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5530
        return from ? getSubpathsAtLength(a, from).end : a;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5531
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5532
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5533
    elproto.getTotalLength = function () {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5534
        if (this.type != "path") {return;}
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5535
        if (this.node.getTotalLength) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5536
            return this.node.getTotalLength();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5537
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5538
        return getTotalLength(this.attrs.path);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5539
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5540
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5541
    elproto.getPointAtLength = function (length) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5542
        if (this.type != "path") {return;}
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5543
        return getPointAtLength(this.attrs.path, length);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5544
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5545
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5546
    elproto.getSubpath = function (from, to) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5547
        if (this.type != "path") {return;}
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5548
        return R.getSubpath(this.attrs.path, from, to);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5549
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5550
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5551
    var ef = R.easing_formulas = {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5552
        linear: function (n) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5553
            return n;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5554
        },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5555
        "<": function (n) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5556
            return pow(n, 1.7);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5557
        },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5558
        ">": function (n) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5559
            return pow(n, .48);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5560
        },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5561
        "<>": function (n) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5562
            var q = .48 - n / 1.04,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5563
                Q = math.sqrt(.1734 + q * q),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5564
                x = Q - q,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5565
                X = pow(abs(x), 1 / 3) * (x < 0 ? -1 : 1),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5566
                y = -Q - q,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5567
                Y = pow(abs(y), 1 / 3) * (y < 0 ? -1 : 1),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5568
                t = X + Y + .5;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5569
            return (1 - t) * 3 * t * t + t * t * t;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5570
        },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5571
        backIn: function (n) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5572
            var s = 1.70158;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5573
            return n * n * ((s + 1) * n - s);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5574
        },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5575
        backOut: function (n) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5576
            n = n - 1;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5577
            var s = 1.70158;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5578
            return n * n * ((s + 1) * n + s) + 1;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5579
        },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5580
        elastic: function (n) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5581
            if (n == !!n) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5582
                return n;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5583
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5584
            return pow(2, -10 * n) * math.sin((n - .075) * (2 * PI) / .3) + 1;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5585
        },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5586
        bounce: function (n) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5587
            var s = 7.5625,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5588
                p = 2.75,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5589
                l;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5590
            if (n < (1 / p)) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5591
                l = s * n * n;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5592
            } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5593
                if (n < (2 / p)) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5594
                    n -= (1.5 / p);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5595
                    l = s * n * n + .75;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5596
                } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5597
                    if (n < (2.5 / p)) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5598
                        n -= (2.25 / p);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5599
                        l = s * n * n + .9375;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5600
                    } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5601
                        n -= (2.625 / p);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5602
                        l = s * n * n + .984375;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5603
                    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5604
                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5605
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5606
            return l;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5607
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5608
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5609
    ef.easeIn = ef["ease-in"] = ef["<"];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5610
    ef.easeOut = ef["ease-out"] = ef[">"];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5611
    ef.easeInOut = ef["ease-in-out"] = ef["<>"];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5612
    ef["back-in"] = ef.backIn;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5613
    ef["back-out"] = ef.backOut;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5614
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5615
    var animationElements = [],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5616
        requestAnimFrame = window.requestAnimationFrame       ||
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5617
                           window.webkitRequestAnimationFrame ||
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5618
                           window.mozRequestAnimationFrame    ||
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5619
                           window.oRequestAnimationFrame      ||
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5620
                           window.msRequestAnimationFrame     ||
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5621
                           function (callback) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5622
                               setTimeout(callback, 16);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5623
                           },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5624
        animation = function () {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5625
            var Now = +new Date,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5626
                l = 0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5627
            for (; l < animationElements.length; l++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5628
                var e = animationElements[l];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5629
                if (e.el.removed || e.paused) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5630
                    continue;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5631
                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5632
                var time = Now - e.start,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5633
                    ms = e.ms,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5634
                    easing = e.easing,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5635
                    from = e.from,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5636
                    diff = e.diff,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5637
                    to = e.to,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5638
                    t = e.t,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5639
                    that = e.el,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5640
                    set = {},
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5641
                    now,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5642
                    init = {},
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5643
                    key;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5644
                if (e.initstatus) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5645
                    time = (e.initstatus * e.anim.top - e.prev) / (e.percent - e.prev) * ms;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5646
                    e.status = e.initstatus;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5647
                    delete e.initstatus;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5648
                    e.stop && animationElements.splice(l--, 1);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5649
                } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5650
                    e.status = (e.prev + (e.percent - e.prev) * (time / ms)) / e.anim.top;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5651
                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5652
                if (time < 0) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5653
                    continue;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5654
                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5655
                if (time < ms) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5656
                    var pos = easing(time / ms);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5657
                    for (var attr in from) if (from[has](attr)) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5658
                        switch (availableAnimAttrs[attr]) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5659
                            case nu:
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5660
                                now = +from[attr] + pos * ms * diff[attr];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5661
                                break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5662
                            case "colour":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5663
                                now = "rgb(" + [
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5664
                                    upto255(round(from[attr].r + pos * ms * diff[attr].r)),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5665
                                    upto255(round(from[attr].g + pos * ms * diff[attr].g)),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5666
                                    upto255(round(from[attr].b + pos * ms * diff[attr].b))
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5667
                                ].join(",") + ")";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5668
                                break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5669
                            case "path":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5670
                                now = [];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5671
                                for (var i = 0, ii = from[attr].length; i < ii; i++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5672
                                    now[i] = [from[attr][i][0]];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5673
                                    for (var j = 1, jj = from[attr][i].length; j < jj; j++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5674
                                        now[i][j] = +from[attr][i][j] + pos * ms * diff[attr][i][j];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5675
                                    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5676
                                    now[i] = now[i].join(S);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5677
                                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5678
                                now = now.join(S);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5679
                                break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5680
                            case "transform":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5681
                                if (diff[attr].real) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5682
                                    now = [];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5683
                                    for (i = 0, ii = from[attr].length; i < ii; i++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5684
                                        now[i] = [from[attr][i][0]];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5685
                                        for (j = 1, jj = from[attr][i].length; j < jj; j++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5686
                                            now[i][j] = from[attr][i][j] + pos * ms * diff[attr][i][j];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5687
                                        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5688
                                    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5689
                                } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5690
                                    var get = function (i) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5691
                                        return +from[attr][i] + pos * ms * diff[attr][i];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5692
                                    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5693
                                    // now = [["r", get(2), 0, 0], ["t", get(3), get(4)], ["s", get(0), get(1), 0, 0]];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5694
                                    now = [["m", get(0), get(1), get(2), get(3), get(4), get(5)]];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5695
                                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5696
                                break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5697
                            case "csv":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5698
                                if (attr == "clip-rect") {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5699
                                    now = [];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5700
                                    i = 4;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5701
                                    while (i--) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5702
                                        now[i] = +from[attr][i] + pos * ms * diff[attr][i];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5703
                                    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5704
                                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5705
                                break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5706
                            default:
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5707
                                var from2 = [][concat](from[attr]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5708
                                now = [];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5709
                                i = that.paper.customAttributes[attr].length;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5710
                                while (i--) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5711
                                    now[i] = +from2[i] + pos * ms * diff[attr][i];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5712
                                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5713
                                break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5714
                        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5715
                        set[attr] = now;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5716
                    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5717
                    that.attr(set);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5718
                    (function (id, that, anim) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5719
                        setTimeout(function () {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5720
                            eve("anim.frame." + id, that, anim);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5721
                        });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5722
                    })(that.id, that, e.anim);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5723
                } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5724
                    (function(f, el, a) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5725
                        setTimeout(function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5726
                            eve("anim.frame." + el.id, el, a);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5727
                            eve("anim.finish." + el.id, el, a);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5728
                            R.is(f, "function") && f.call(el);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5729
                        });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5730
                    })(e.callback, that, e.anim);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5731
                    that.attr(to);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5732
                    animationElements.splice(l--, 1);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5733
                    if (e.repeat > 1 && !e.next) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5734
                        for (key in to) if (to[has](key)) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5735
                            init[key] = e.totalOrigin[key];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5736
                        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5737
                        e.el.attr(init);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5738
                        runAnimation(e.anim, e.el, e.anim.percents[0], null, e.totalOrigin, e.repeat - 1);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5739
                    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5740
                    if (e.next && !e.stop) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5741
                        runAnimation(e.anim, e.el, e.next, null, e.totalOrigin, e.repeat);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5742
                    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5743
                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5744
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5745
            R.svg && that && that.paper && that.paper.safari();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5746
            animationElements.length && requestAnimFrame(animation);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5747
        },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5748
        upto255 = function (color) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5749
            return color > 255 ? 255 : color < 0 ? 0 : color;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5750
        };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5751
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5752
    elproto.animateWith = function (element, anim, params, ms, easing, callback) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5753
        var a = params ? R.animation(params, ms, easing, callback) : anim;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5754
            status = element.status(anim);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5755
        return this.animate(a).status(a, status * anim.ms / a.ms);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5756
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5757
    function CubicBezierAtTime(t, p1x, p1y, p2x, p2y, duration) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5758
        var cx = 3 * p1x,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5759
            bx = 3 * (p2x - p1x) - cx,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5760
            ax = 1 - cx - bx,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5761
            cy = 3 * p1y,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5762
            by = 3 * (p2y - p1y) - cy,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5763
            ay = 1 - cy - by;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5764
        function sampleCurveX(t) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5765
            return ((ax * t + bx) * t + cx) * t;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5766
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5767
        function solve(x, epsilon) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5768
            var t = solveCurveX(x, epsilon);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5769
            return ((ay * t + by) * t + cy) * t;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5770
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5771
        function solveCurveX(x, epsilon) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5772
            var t0, t1, t2, x2, d2, i;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5773
            for(t2 = x, i = 0; i < 8; i++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5774
                x2 = sampleCurveX(t2) - x;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5775
                if (abs(x2) < epsilon) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5776
                    return t2;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5777
                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5778
                d2 = (3 * ax * t2 + 2 * bx) * t2 + cx;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5779
                if (abs(d2) < 1e-6) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5780
                    break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5781
                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5782
                t2 = t2 - x2 / d2;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5783
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5784
            t0 = 0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5785
            t1 = 1;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5786
            t2 = x;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5787
            if (t2 < t0) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5788
                return t0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5789
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5790
            if (t2 > t1) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5791
                return t1;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5792
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5793
            while (t0 < t1) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5794
                x2 = sampleCurveX(t2);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5795
                if (abs(x2 - x) < epsilon) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5796
                    return t2;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5797
                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5798
                if (x > x2) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5799
                    t0 = t2;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5800
                } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5801
                    t1 = t2;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5802
                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5803
                t2 = (t1 - t0) / 2 + t0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5804
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5805
            return t2;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5806
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5807
        return solve(t, 1 / (200 * duration));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5808
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5809
    elproto.onAnimation = function (f) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5810
        f ? eve.on("anim.frame." + this.id, f) : eve.unbind("anim.frame." + this.id);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5811
        return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5812
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5813
    function Animation(anim, ms) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5814
        var percents = [],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5815
            newAnim = {};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5816
        this.ms = ms;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5817
        this.times = 1;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5818
        if (anim) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5819
            for (var attr in anim) if (anim[has](attr)) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5820
                newAnim[toFloat(attr)] = anim[attr];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5821
                percents.push(toFloat(attr));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5822
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5823
            percents.sort(sortByNumber);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5824
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5825
        this.anim = newAnim;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5826
        this.top = percents[percents.length - 1];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5827
        this.percents = percents;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5828
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5829
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5830
    Animation.prototype.delay = function (delay) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5831
        var a = new Animation(this.anim, this.ms);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5832
        a.times = this.times;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5833
        a.del = +delay || 0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5834
        return a;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5835
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5836
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5837
    Animation.prototype.repeat = function (times) { 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5838
        var a = new Animation(this.anim, this.ms);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5839
        a.del = this.del;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5840
        a.times = math.floor(mmax(times, 0)) || 1;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5841
        return a;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5842
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5843
    function runAnimation(anim, element, percent, status, totalOrigin, times) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5844
        percent = toFloat(percent);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5845
        var params,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5846
            isInAnim,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5847
            isInAnimSet,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5848
            percents = [],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5849
            next,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5850
            prev,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5851
            timestamp,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5852
            ms = anim.ms,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5853
            from = {},
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5854
            to = {},
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5855
            diff = {};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5856
        if (status) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5857
            for (i = 0, ii = animationElements.length; i < ii; i++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5858
                var e = animationElements[i];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5859
                if (e.el.id == element.id && e.anim == anim) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5860
                    if (e.percent != percent) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5861
                        animationElements.splice(i, 1);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5862
                        isInAnimSet = 1;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5863
                    } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5864
                        isInAnim = e;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5865
                    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5866
                    element.attr(e.totalOrigin);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5867
                    break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5868
                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5869
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5870
        } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5871
            status = +to; // NaN
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5872
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5873
        for (var i = 0, ii = anim.percents.length; i < ii; i++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5874
            if (anim.percents[i] == percent || anim.percents[i] > status * anim.top) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5875
                percent = anim.percents[i];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5876
                prev = anim.percents[i - 1] || 0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5877
                ms = ms / anim.top * (percent - prev);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5878
                next = anim.percents[i + 1];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5879
                params = anim.anim[percent];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5880
                break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5881
            } else if (status) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5882
                element.attr(anim.anim[anim.percents[i]]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5883
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5884
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5885
        if (!params) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5886
            return;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5887
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5888
        if (!isInAnim) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5889
            for (attr in params) if (params[has](attr)) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5890
                if (availableAnimAttrs[has](attr) || element.paper.customAttributes[has](attr)) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5891
                    from[attr] = element.attr(attr);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5892
                    (from[attr] == null) && (from[attr] = availableAttrs[attr]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5893
                    to[attr] = params[attr];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5894
                    switch (availableAnimAttrs[attr]) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5895
                        case nu:
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5896
                            diff[attr] = (to[attr] - from[attr]) / ms;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5897
                            break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5898
                        case "colour":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5899
                            from[attr] = R.getRGB(from[attr]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5900
                            var toColour = R.getRGB(to[attr]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5901
                            diff[attr] = {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5902
                                r: (toColour.r - from[attr].r) / ms,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5903
                                g: (toColour.g - from[attr].g) / ms,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5904
                                b: (toColour.b - from[attr].b) / ms
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5905
                            };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5906
                            break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5907
                        case "path":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5908
                            var pathes = path2curve(from[attr], to[attr]),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5909
                                toPath = pathes[1];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5910
                            from[attr] = pathes[0];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5911
                            diff[attr] = [];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5912
                            for (i = 0, ii = from[attr].length; i < ii; i++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5913
                                diff[attr][i] = [0];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5914
                                for (var j = 1, jj = from[attr][i].length; j < jj; j++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5915
                                    diff[attr][i][j] = (toPath[i][j] - from[attr][i][j]) / ms;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5916
                                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5917
                            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5918
                            break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5919
                        case "transform":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5920
                            var _ = element._,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5921
                                eq = equaliseTransform(_[attr], to[attr]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5922
                            if (eq) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5923
                                from[attr] = eq.from;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5924
                                to[attr] = eq.to;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5925
                                diff[attr] = [];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5926
                                diff[attr].real = true;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5927
                                for (i = 0, ii = from[attr].length; i < ii; i++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5928
                                    diff[attr][i] = [from[attr][i][0]];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5929
                                    for (j = 1, jj = from[attr][i].length; j < jj; j++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5930
                                        diff[attr][i][j] = (to[attr][i][j] - from[attr][i][j]) / ms;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5931
                                    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5932
                                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5933
                            } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5934
                                var m = (element.matrix || new Matrix),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5935
                                    to2 = {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5936
                                        _: {transform: _.transform},
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5937
                                        getBBox: function () {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5938
                                            return element.getBBox(1);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5939
                                        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5940
                                    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5941
                                from[attr] = [
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5942
                                    m.a,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5943
                                    m.b,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5944
                                    m.c,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5945
                                    m.d,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5946
                                    m.e,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5947
                                    m.f
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5948
                                ];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5949
                                extractTransform(to2, to[attr]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5950
                                to[attr] = to2._.transform;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5951
                                diff[attr] = [
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5952
                                    (to2.matrix.a - m.a) / ms,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5953
                                    (to2.matrix.b - m.b) / ms,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5954
                                    (to2.matrix.c - m.c) / ms,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5955
                                    (to2.matrix.d - m.d) / ms,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5956
                                    (to2.matrix.e - m.e) / ms,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5957
                                    (to2.matrix.e - m.f) / ms
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5958
                                ];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5959
                                // from[attr] = [_.sx, _.sy, _.deg, _.dx, _.dy];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5960
                                // var to2 = {_:{}, getBBox: function () { return element.getBBox(); }};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5961
                                // extractTransform(to2, to[attr]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5962
                                // diff[attr] = [
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5963
                                //     (to2._.sx - _.sx) / ms,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5964
                                //     (to2._.sy - _.sy) / ms,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5965
                                //     (to2._.deg - _.deg) / ms,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5966
                                //     (to2._.dx - _.dx) / ms,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5967
                                //     (to2._.dy - _.dy) / ms
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5968
                                // ];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5969
                            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5970
                            break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5971
                        case "csv":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5972
                            var values = Str(params[attr])[split](separator),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5973
                                from2 = Str(from[attr])[split](separator);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5974
                            if (attr == "clip-rect") {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5975
                                from[attr] = from2;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5976
                                diff[attr] = [];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5977
                                i = from2.length;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5978
                                while (i--) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5979
                                    diff[attr][i] = (values[i] - from[attr][i]) / ms;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5980
                                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5981
                            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5982
                            to[attr] = values;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5983
                            break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5984
                        default:
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5985
                            values = [][concat](params[attr]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5986
                            from2 = [][concat](from[attr]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5987
                            diff[attr] = [];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5988
                            i = element.paper.customAttributes[attr].length;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5989
                            while (i--) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5990
                                diff[attr][i] = ((values[i] || 0) - (from2[i] || 0)) / ms;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5991
                            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5992
                            break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5993
                    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5994
                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5995
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5996
            var easing = params.easing,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5997
                easyeasy = R.easing_formulas[easing];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5998
            if (!easyeasy) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  5999
                easyeasy = Str(easing).match(bezierrg);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6000
                if (easyeasy && easyeasy.length == 5) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6001
                    var curve = easyeasy;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6002
                    easyeasy = function (t) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6003
                        return CubicBezierAtTime(t, +curve[1], +curve[2], +curve[3], +curve[4], ms);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6004
                    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6005
                } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6006
                    easyeasy = pipe;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6007
                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6008
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6009
            timestamp = params.start || anim.start || +new Date;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6010
            e = {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6011
                anim: anim,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6012
                percent: percent,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6013
                timestamp: timestamp,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6014
                start: timestamp + (anim.del || 0),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6015
                status: 0,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6016
                initstatus: status || 0,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6017
                stop: false,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6018
                ms: ms,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6019
                easing: easyeasy,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6020
                from: from,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6021
                diff: diff,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6022
                to: to,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6023
                el: element,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6024
                callback: params.callback,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6025
                prev: prev,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6026
                next: next,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6027
                repeat: times || anim.times,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6028
                origin: element.attr(),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6029
                totalOrigin: totalOrigin
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6030
            };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6031
            animationElements.push(e);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6032
            if (status && !isInAnim && !isInAnimSet) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6033
                e.stop = true;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6034
                e.start = new Date - ms * status;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6035
                if (animationElements.length == 1) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6036
                    return animation();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6037
                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6038
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6039
            if (isInAnimSet) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6040
                e.start = new Date - e.ms * status;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6041
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6042
            animationElements.length == 1 && requestAnimFrame(animation);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6043
        } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6044
            isInAnim.initstatus = status;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6045
            isInAnim.start = new Date - isInAnim.ms * status;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6046
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6047
        eve("anim.start." + element.id, element, anim);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6048
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6049
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6050
    R.animation = function (params, ms, easing, callback) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6051
        if (params instanceof Animation) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6052
            return params;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6053
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6054
        if (R.is(easing, "function") || !easing) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6055
            callback = callback || easing || null;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6056
            easing = null;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6057
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6058
        params = Object(params);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6059
        ms = +ms || 0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6060
        var p = {},
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6061
            json,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6062
            attr;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6063
        for (attr in params) if (params[has](attr) && toFloat(attr) != attr && toFloat(attr) + "%" != attr) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6064
            json = true;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6065
            p[attr] = params[attr];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6066
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6067
        if (!json) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6068
            return new Animation(params, ms);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6069
        } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6070
            easing && (p.easing = easing);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6071
            callback && (p.callback = callback);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6072
            return new Animation({100: p}, ms);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6073
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6074
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6075
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6076
    elproto.animate = function (params, ms, easing, callback) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6077
        var element = this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6078
        if (element.removed) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6079
            callback && callback.call(element);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6080
            return element;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6081
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6082
        var anim = params instanceof Animation ? params : R.animation(params, ms, easing, callback);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6083
        runAnimation(anim, element, anim.percents[0], null, element.attr());
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6084
        return element;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6085
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6086
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6087
    elproto.setTime = function (anim, value) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6088
        if (anim && value != null) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6089
            this.status(anim, mmin(value, anim.ms) / anim.ms);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6090
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6091
        return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6092
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6093
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6094
    elproto.status = function (anim, value) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6095
        var out = [],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6096
            i = 0,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6097
            len,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6098
            e;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6099
        if (value != null) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6100
            runAnimation(anim, this, -1, mmin(value, 1));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6101
            return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6102
        } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6103
            len = animationElements.length;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6104
            for (; i < len; i++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6105
                e = animationElements[i];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6106
                if (e.el.id == this.id && (!anim || e.anim == anim)) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6107
                    if (anim) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6108
                        return e.status;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6109
                    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6110
                    out.push({
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6111
                        anim: e.anim,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6112
                        status: e.status
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6113
                    });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6114
                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6115
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6116
            if (anim) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6117
                return 0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6118
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6119
            return out;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6120
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6121
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6122
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6123
    elproto.pause = function (anim) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6124
        for (var i = 0; i < animationElements.length; i++) if (animationElements[i].el.id == this.id && (!anim || animationElements[i].anim == anim)) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6125
            if (eve("anim.pause." + this.id, this, animationElements[i].anim) !== false) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6126
                animationElements[i].paused = true;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6127
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6128
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6129
        return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6130
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6131
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6132
    elproto.resume = function (anim) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6133
        for (var i = 0; i < animationElements.length; i++) if (animationElements[i].el.id == this.id && (!anim || animationElements[i].anim == anim)) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6134
            var e = animationElements[i];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6135
            if (eve("anim.resume." + this.id, this, e.anim) !== false) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6136
                delete e.paused;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6137
                this.status(e.anim, e.status);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6138
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6139
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6140
        return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6141
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6142
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6143
    elproto.stop = function (anim) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6144
        for (var i = 0; i < animationElements.length; i++) if (animationElements[i].el.id == this.id && (!anim || animationElements[i].anim == anim)) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6145
            if (eve("anim.stop." + this.id, this, animationElements[i].anim) !== false) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6146
                animationElements.splice(i--, 1);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6147
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6148
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6149
        return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6150
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6151
    elproto.toString = function () {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6152
        return "Rapha\xebl\u2019s object";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6153
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6154
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6155
    // Set
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6156
    var Set = function (items) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6157
        this.items = [];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6158
        this.length = 0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6159
        this.type = "set";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6160
        if (items) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6161
            for (var i = 0, ii = items.length; i < ii; i++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6162
                if (items[i] && (items[i].constructor == elproto.constructor || items[i].constructor == Set)) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6163
                    this[this.items.length] = this.items[this.items.length] = items[i];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6164
                    this.length++;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6165
                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6166
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6167
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6168
    },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6169
    setproto = Set.prototype;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6170
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6171
    setproto.push = function () {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6172
        var item,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6173
            len;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6174
        for (var i = 0, ii = arguments.length; i < ii; i++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6175
            item = arguments[i];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6176
            if (item && (item.constructor == elproto.constructor || item.constructor == Set)) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6177
                len = this.items.length;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6178
                this[len] = this.items[len] = item;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6179
                this.length++;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6180
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6181
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6182
        return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6183
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6184
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6185
    setproto.pop = function () {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6186
        this.length && delete this[this.length--];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6187
        return this.items.pop();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6188
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6189
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6190
    setproto.forEach = function (callback, thisArg) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6191
        for (var i = 0, ii = this.items.length; i < ii; i++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6192
            if (callback.call(thisArg, this.items[i], i) === false) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6193
                return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6194
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6195
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6196
        return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6197
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6198
    for (var method in elproto) if (elproto[has](method)) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6199
        setproto[method] = (function (methodname) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6200
            return function () {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6201
                var arg = arguments;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6202
                return this.forEach(function (el) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6203
                    el[methodname][apply](el, arg);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6204
                });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6205
            };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6206
        })(method);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6207
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6208
    setproto.attr = function (name, value) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6209
        if (name && R.is(name, array) && R.is(name[0], "object")) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6210
            for (var j = 0, jj = name.length; j < jj; j++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6211
                this.items[j].attr(name[j]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6212
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6213
        } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6214
            for (var i = 0, ii = this.items.length; i < ii; i++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6215
                this.items[i].attr(name, value);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6216
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6217
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6218
        return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6219
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6220
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6221
    setproto.clear = function () {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6222
        while (this.length) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6223
            this.pop();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6224
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6225
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6226
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6227
    setproto.splice = function (index, count, insertion) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6228
        index = index < 0 ? mmax(this.length + index, 0) : index;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6229
        count = mmax(0, mmin(this.length - index, count));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6230
        var tail = [],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6231
            todel = [],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6232
            args = [],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6233
            i;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6234
        for (i = 2; i < arguments.length; i++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6235
            args.push(arguments[i]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6236
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6237
        for (i = 0; i < count; i++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6238
            todel.push(this[index + i]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6239
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6240
        for (; i < this.length - index; i++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6241
            tail.push(this[index + i]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6242
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6243
        var arglen = args.length;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6244
        for (i = 0; i < arglen + tail.length; i++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6245
            this.items[index + i] = this[index + i] = i < arglen ? args[i] : tail[i - arglen];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6246
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6247
        i = this.items.length = this.length -= count - arglen;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6248
        while (this[i]) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6249
            delete this[i++];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6250
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6251
        return new Set(todel);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6252
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6253
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6254
    setproto.exclude = function (el) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6255
        for (var i = 0, ii = this.length; i < ii; i++) if (this[i] == el) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6256
            this.splice(i, 1);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6257
            return true;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6258
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6259
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6260
    setproto.animate = function (params, ms, easing, callback) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6261
        (R.is(easing, "function") || !easing) && (callback = easing || null);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6262
        var len = this.items.length,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6263
            i = len,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6264
            item,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6265
            set = this,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6266
            collector;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6267
        if (!len) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6268
            return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6269
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6270
        callback && (collector = function () {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6271
            !--len && callback.call(set);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6272
        });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6273
        easing = R.is(easing, string) ? easing : collector;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6274
        var anim = R.animation(params, ms, easing, collector);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6275
        item = this.items[--i].animate(anim);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6276
        while (i--) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6277
            this.items[i] && !this.items[i].removed && this.items[i].animateWith(item, anim);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6278
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6279
        return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6280
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6281
    setproto.insertAfter = function (el) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6282
        var i = this.items.length;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6283
        while (i--) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6284
            this.items[i].insertAfter(el);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6285
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6286
        return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6287
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6288
    setproto.getBBox = function () {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6289
        var x = [],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6290
            y = [],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6291
            w = [],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6292
            h = [];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6293
        for (var i = this.items.length; i--;) if (!this.items[i].removed) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6294
            var box = this.items[i].getBBox();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6295
            x.push(box.x);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6296
            y.push(box.y);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6297
            w.push(box.x + box.width);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6298
            h.push(box.y + box.height);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6299
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6300
        x = mmin[apply](0, x);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6301
        y = mmin[apply](0, y);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6302
        return {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6303
            x: x,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6304
            y: y,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6305
            width: mmax[apply](0, w) - x,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6306
            height: mmax[apply](0, h) - y
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6307
        };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6308
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6309
    setproto.clone = function (s) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6310
        s = new Set;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6311
        for (var i = 0, ii = this.items.length; i < ii; i++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6312
            s.push(this.items[i].clone());
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6313
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6314
        return s;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6315
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6316
    setproto.toString = function () {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6317
        return "Rapha\xebl\u2018s set";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6318
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6319
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6320
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6321
    R.registerFont = function (font) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6322
        if (!font.face) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6323
            return font;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6324
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6325
        this.fonts = this.fonts || {};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6326
        var fontcopy = {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6327
                w: font.w,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6328
                face: {},
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6329
                glyphs: {}
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6330
            },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6331
            family = font.face["font-family"];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6332
        for (var prop in font.face) if (font.face[has](prop)) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6333
            fontcopy.face[prop] = font.face[prop];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6334
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6335
        if (this.fonts[family]) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6336
            this.fonts[family].push(fontcopy);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6337
        } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6338
            this.fonts[family] = [fontcopy];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6339
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6340
        if (!font.svg) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6341
            fontcopy.face["units-per-em"] = toInt(font.face["units-per-em"], 10);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6342
            for (var glyph in font.glyphs) if (font.glyphs[has](glyph)) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6343
                var path = font.glyphs[glyph];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6344
                fontcopy.glyphs[glyph] = {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6345
                    w: path.w,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6346
                    k: {},
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6347
                    d: path.d && "M" + path.d.replace(/[mlcxtrv]/g, function (command) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6348
                            return {l: "L", c: "C", x: "z", t: "m", r: "l", v: "c"}[command] || "M";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6349
                        }) + "z"
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6350
                };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6351
                if (path.k) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6352
                    for (var k in path.k) if (path[has](k)) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6353
                        fontcopy.glyphs[glyph].k[k] = path.k[k];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6354
                    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6355
                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6356
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6357
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6358
        return font;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6359
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6360
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6361
    paperproto.getFont = function (family, weight, style, stretch) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6362
        stretch = stretch || "normal";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6363
        style = style || "normal";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6364
        weight = +weight || {normal: 400, bold: 700, lighter: 300, bolder: 800}[weight] || 400;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6365
        if (!R.fonts) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6366
            return;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6367
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6368
        var font = R.fonts[family];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6369
        if (!font) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6370
            var name = new RegExp("(^|\\s)" + family.replace(/[^\w\d\s+!~.:_-]/g, E) + "(\\s|$)", "i");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6371
            for (var fontName in R.fonts) if (R.fonts[has](fontName)) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6372
                if (name.test(fontName)) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6373
                    font = R.fonts[fontName];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6374
                    break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6375
                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6376
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6377
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6378
        var thefont;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6379
        if (font) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6380
            for (var i = 0, ii = font.length; i < ii; i++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6381
                thefont = font[i];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6382
                if (thefont.face["font-weight"] == weight && (thefont.face["font-style"] == style || !thefont.face["font-style"]) && thefont.face["font-stretch"] == stretch) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6383
                    break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6384
                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6385
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6386
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6387
        return thefont;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6388
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6389
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6390
    paperproto.print = function (x, y, string, font, size, origin, letter_spacing) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6391
        origin = origin || "middle"; // baseline|middle
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6392
        letter_spacing = mmax(mmin(letter_spacing || 0, 1), -1);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6393
        var out = this.set(),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6394
            letters = Str(string)[split](E),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6395
            shift = 0,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6396
            path = E,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6397
            scale;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6398
        R.is(font, string) && (font = this.getFont(font));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6399
        if (font) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6400
            scale = (size || 16) / font.face["units-per-em"];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6401
            var bb = font.face.bbox[split](separator),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6402
                top = +bb[0],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6403
                height = +bb[1] + (origin == "baseline" ? bb[3] - bb[1] + (+font.face.descent) : (bb[3] - bb[1]) / 2);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6404
            for (var i = 0, ii = letters.length; i < ii; i++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6405
                var prev = i && font.glyphs[letters[i - 1]] || {},
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6406
                    curr = font.glyphs[letters[i]];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6407
                shift += i ? (prev.w || font.w) + (prev.k && prev.k[letters[i]] || 0) + (font.w * letter_spacing) : 0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6408
                curr && curr.d && out.push(this.path(curr.d).attr({
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6409
                    fill: "#000",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6410
                    stroke: "none",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6411
                    transform: [["t", shift * scale, 0]]
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6412
                }));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6413
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6414
            out.transform(["...s", scale, scale, top, height, "t", (x - top) / scale, (y - height) / scale]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6415
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6416
        return out;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6417
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6418
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6419
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6420
    R.format = function (token, params) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6421
        var args = R.is(params, array) ? [0][concat](params) : arguments;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6422
        token && R.is(token, string) && args.length - 1 && (token = token.replace(formatrg, function (str, i) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6423
            return args[++i] == null ? E : args[i];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6424
        }));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6425
        return token || E;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6426
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6427
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6428
    R.fullfill = (function () {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6429
        var tokenRegex = /\{([^\}]+)\}/g,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6430
            objNotationRegex = /(?:(?:^|\.)(.+?)(?=\[|\.|$|\()|\[('|")(.+?)\2\])(\(\))?/g, // matches .xxxxx or ["xxxxx"] to run over object properties
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6431
            replacer = function (all, key, obj) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6432
                var res = obj;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6433
                key.replace(objNotationRegex, function (all, name, quote, quotedName, isFunc) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6434
                    name = name || quotedName;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6435
                    if (res) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6436
                        if (name in res) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6437
                            res = res[name];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6438
                        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6439
                        typeof res == "function" && isFunc && (res = res());
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6440
                    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6441
                });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6442
                res = (res == null || res == obj ? all : res) + "";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6443
                return res;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6444
            };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6445
        return function (str, obj) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6446
            return String(str).replace(tokenRegex, function (all, key) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6447
                return replacer(all, key, obj);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6448
            });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6449
        };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6450
    })();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6451
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6452
    R.ninja = function () {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6453
        oldRaphael.was ? (g.win.Raphael = oldRaphael.is) : delete Raphael;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6454
        return R;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6455
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6456
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6457
    R.st = setproto;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6458
    // Firefox <3.6 fix: http://webreflection.blogspot.com/2009/11/195-chars-to-help-lazy-loading.html
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6459
    (function (doc, loaded, f) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6460
        if (doc.readyState == null && doc.addEventListener){
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6461
            doc.addEventListener(loaded, f = function () {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6462
                doc.removeEventListener(loaded, f, false);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6463
                doc.readyState = "complete";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6464
            }, false);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6465
            doc.readyState = "loading";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6466
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6467
        function isLoaded() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6468
            (/in/).test(doc.readyState) ? setTimeout(isLoaded, 9) : R.eve("DOMload");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6469
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6470
        isLoaded();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6471
    })(document, "DOMContentLoaded");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6472
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6473
    oldRaphael.was ? (g.win.Raphael = R) : (Raphael = R);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6474
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6475
    eve.on("DOMload", function () {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6476
        loaded = true;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6477
    });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6478
})();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6479
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6480
// ┌─────────────────────────────────────────────────────────────────────┐ \\
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6481
// │ Raphaël 2 - JavaScript Vector Library                               │ \\
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6482
// ├─────────────────────────────────────────────────────────────────────┤ \\
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6483
// │ SVG Module                                                          │ \\
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6484
// ├─────────────────────────────────────────────────────────────────────┤ \\
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6485
// │ Copyright (c) 2008-2011 Dmitry Baranovskiy (http://raphaeljs.com)   │ \\
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6486
// │ Copyright (c) 2008-2011 Sencha Labs (http://sencha.com)             │ \\
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6487
// │ Licensed under the MIT (http://raphaeljs.com/license.html) license. │ \\
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6488
// └─────────────────────────────────────────────────────────────────────┘ \\
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6489
window.Raphael.svg && function (R) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6490
    var has = "hasOwnProperty",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6491
        Str = String,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6492
        toFloat = parseFloat,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6493
        toInt = parseInt,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6494
        math = Math,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6495
        mmax = math.max,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6496
        abs = math.abs,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6497
        pow = math.pow,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6498
        separator = /[, ]+/,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6499
        eve = R.eve,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6500
        E = "",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6501
        S = " ";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6502
    var xlink = "http://www.w3.org/1999/xlink",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6503
        markers = {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6504
            block: "M5,0 0,2.5 5,5z",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6505
            classic: "M5,0 0,2.5 5,5 3.5,3 3.5,2z",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6506
            diamond: "M2.5,0 5,2.5 2.5,5 0,2.5z",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6507
            open: "M6,1 1,3.5 6,6",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6508
            oval: "M2.5,0A2.5,2.5,0,0,1,2.5,5 2.5,2.5,0,0,1,2.5,0z"
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6509
        },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6510
        markerCounter = {};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6511
    R.toString = function () {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6512
        return  "Your browser supports SVG.\nYou are running Rapha\xebl " + this.version;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6513
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6514
    var $ = function (el, attr) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6515
        if (attr) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6516
            if (typeof el == "string") {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6517
                el = $(el);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6518
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6519
            for (var key in attr) if (attr[has](key)) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6520
                if (key.substring(0, 6) == "xlink:") {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6521
                    el.setAttributeNS(xlink, key.substring(6), Str(attr[key]));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6522
                } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6523
                    el.setAttribute(key, Str(attr[key]));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6524
                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6525
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6526
        } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6527
            el = R._g.doc.createElementNS("http://www.w3.org/2000/svg", el);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6528
            el.style && (el.style.webkitTapHighlightColor = "rgba(0,0,0,0)");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6529
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6530
        return el;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6531
    },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6532
    gradients = {},
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6533
    rgGrad = /^url\(#(.*)\)$/,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6534
    removeGradientFill = function (node, paper) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6535
        var oid = node.getAttribute("fill");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6536
        oid = oid && oid.match(rgGrad);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6537
        if (oid && !--gradients[oid[1]]) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6538
            delete gradients[oid[1]];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6539
            paper.defs.removeChild(R._g.doc.getElementById(oid[1]));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6540
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6541
    },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6542
    addGradientFill = function (element, gradient) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6543
        var type = "linear",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6544
            id = element.id + gradient,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6545
            fx = .5, fy = .5,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6546
            o = element.node,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6547
            SVG = element.paper,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6548
            s = o.style,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6549
            el = R._g.doc.getElementById(id);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6550
        if (!el) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6551
            gradient = Str(gradient).replace(R._radial_gradient, function (all, _fx, _fy) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6552
                type = "radial";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6553
                if (_fx && _fy) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6554
                    fx = toFloat(_fx);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6555
                    fy = toFloat(_fy);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6556
                    var dir = ((fy > .5) * 2 - 1);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6557
                    pow(fx - .5, 2) + pow(fy - .5, 2) > .25 &&
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6558
                        (fy = math.sqrt(.25 - pow(fx - .5, 2)) * dir + .5) &&
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6559
                        fy != .5 &&
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6560
                        (fy = fy.toFixed(5) - 1e-5 * dir);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6561
                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6562
                return E;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6563
            });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6564
            gradient = gradient.split(/\s*\-\s*/);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6565
            if (type == "linear") {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6566
                var angle = gradient.shift();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6567
                angle = -toFloat(angle);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6568
                if (isNaN(angle)) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6569
                    return null;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6570
                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6571
                var vector = [0, 0, math.cos(R.rad(angle)), math.sin(R.rad(angle))],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6572
                    max = 1 / (mmax(abs(vector[2]), abs(vector[3])) || 1);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6573
                vector[2] *= max;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6574
                vector[3] *= max;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6575
                if (vector[2] < 0) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6576
                    vector[0] = -vector[2];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6577
                    vector[2] = 0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6578
                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6579
                if (vector[3] < 0) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6580
                    vector[1] = -vector[3];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6581
                    vector[3] = 0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6582
                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6583
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6584
            var dots = R._parseDots(gradient);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6585
            if (!dots) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6586
                return null;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6587
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6588
            if (element.gradient) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6589
                SVG.defs.removeChild(element.gradient);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6590
                delete element.gradient;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6591
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6592
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6593
            id = id.replace(/[\(\)\s,\xb0#]/g, "-");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6594
            el = $(type + "Gradient", {id: id});
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6595
            element.gradient = el;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6596
            $(el, type == "radial" ? {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6597
                fx: fx,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6598
                fy: fy
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6599
            } : {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6600
                x1: vector[0],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6601
                y1: vector[1],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6602
                x2: vector[2],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6603
                y2: vector[3],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6604
                gradientTransform: element.matrix.invert()
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6605
            });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6606
            SVG.defs.appendChild(el);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6607
            for (var i = 0, ii = dots.length; i < ii; i++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6608
                el.appendChild($("stop", {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6609
                    offset: dots[i].offset ? dots[i].offset : i ? "100%" : "0%",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6610
                    "stop-color": dots[i].color || "#fff"
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6611
                }));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6612
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6613
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6614
        $(o, {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6615
            fill: "url(#" + id + ")",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6616
            opacity: 1,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6617
            "fill-opacity": 1
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6618
        });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6619
        s.fill = E;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6620
        s.opacity = 1;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6621
        s.fillOpacity = 1;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6622
        return 1;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6623
    },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6624
    updatePosition = function (o) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6625
        var bbox = o.getBBox(1);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6626
        $(o.pattern, {patternTransform: o.matrix.invert() + " translate(" + bbox.x + "," + bbox.y + ")"});
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6627
    },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6628
    addArrow = function (o, value, isEnd) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6629
        if (o.type == "path") {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6630
            var values = Str(value).toLowerCase().split("-"),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6631
                p = o.paper,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6632
                se = isEnd ? "end" : "start",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6633
                node = o.node,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6634
                attrs = o.attrs,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6635
                stroke = attrs["stroke-width"],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6636
                i = values.length,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6637
                type = "classic",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6638
                from,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6639
                to,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6640
                dx,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6641
                refX,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6642
                attr,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6643
                w = 3,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6644
                h = 3,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6645
                t = 5;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6646
            while (i--) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6647
                switch (values[i]) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6648
                    case "block":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6649
                    case "classic":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6650
                    case "oval":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6651
                    case "diamond":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6652
                    case "open":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6653
                    case "none":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6654
                        type = values[i];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6655
                        break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6656
                    case "wide": h = 5; break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6657
                    case "narrow": h = 2; break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6658
                    case "long": w = 5; break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6659
                    case "short": w = 2; break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6660
                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6661
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6662
            if (type == "open") {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6663
                w += 2;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6664
                h += 2;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6665
                t += 2;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6666
                dx = 1;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6667
                refX = isEnd ? 4 : 1;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6668
                attr = {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6669
                    fill: "none",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6670
                    stroke: attrs.stroke
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6671
                };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6672
            } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6673
                refX = dx = w / 2;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6674
                attr = {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6675
                    fill: attrs.stroke,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6676
                    stroke: "none"
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6677
                };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6678
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6679
            if (o._.arrows) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6680
                if (isEnd) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6681
                    o._.arrows.endPath && markerCounter[o._.arrows.endPath]--;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6682
                    o._.arrows.endMarker && markerCounter[o._.arrows.endMarker]--;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6683
                } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6684
                    o._.arrows.startPath && markerCounter[o._.arrows.startPath]--;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6685
                    o._.arrows.startMarker && markerCounter[o._.arrows.startMarker]--;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6686
                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6687
            } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6688
                o._.arrows = {};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6689
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6690
            if (type != "none") {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6691
                var pathId = "raphael-marker-" + type,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6692
                    markerId = "raphael-marker-" + se + type + w + h;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6693
                if (!R._g.doc.getElementById(pathId)) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6694
                    p.defs.appendChild($($("path"), {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6695
                        "stroke-linecap": "round",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6696
                        d: markers[type],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6697
                        id: pathId
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6698
                    }));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6699
                    markerCounter[pathId] = 1;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6700
                } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6701
                    markerCounter[pathId]++;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6702
                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6703
                var marker = R._g.doc.getElementById(markerId),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6704
                    use;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6705
                if (!marker) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6706
                    marker = $($("marker"), {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6707
                        id: markerId,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6708
                        markerHeight: h,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6709
                        markerWidth: w,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6710
                        orient: "auto",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6711
                        refX: refX,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6712
                        refY: h / 2
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6713
                    });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6714
                    use = $($("use"), {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6715
                        "xlink:href": "#" + pathId,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6716
                        transform: (isEnd ? " rotate(180 " + w / 2 + " " + h / 2 + ") " : S) + "scale(" + w / t + "," + h / t + ")",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6717
                        "stroke-width": 1 / ((w / t + h / t) / 2)
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6718
                    });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6719
                    marker.appendChild(use);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6720
                    p.defs.appendChild(marker);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6721
                    markerCounter[markerId] = 1;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6722
                } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6723
                    markerCounter[markerId]++;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6724
                    use = marker.getElementsByTagName("use")[0];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6725
                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6726
                $(use, attr);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6727
                var delta = dx * (type != "diamond" && type != "oval");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6728
                if (isEnd) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6729
                    from = o._.arrows.startdx * stroke || 0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6730
                    to = R.getTotalLength(attrs.path) - delta * stroke;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6731
                } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6732
                    from = delta * stroke;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6733
                    to = R.getTotalLength(attrs.path) - (o._.arrows.enddx * stroke || 0);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6734
                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6735
                attr = {};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6736
                attr["marker-" + se] = "url(#" + markerId + ")";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6737
                if (to || from) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6738
                    attr.d = Raphael.getSubpath(attrs.path, from, to);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6739
                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6740
                $(node, attr);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6741
                o._.arrows[se + "Path"] = pathId;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6742
                o._.arrows[se + "Marker"] = markerId;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6743
                o._.arrows[se + "dx"] = delta;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6744
                o._.arrows[se + "Type"] = type;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6745
                o._.arrows[se + "String"] = value;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6746
            } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6747
                if (isEnd) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6748
                    from = o._.arrows.startdx * stroke || 0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6749
                    to = R.getTotalLength(attrs.path) - from;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6750
                } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6751
                    from = 0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6752
                    to = R.getTotalLength(attrs.path) - (o._.arrows.enddx * stroke || 0);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6753
                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6754
                o._.arrows[se + "Path"] && $(node, {d: Raphael.getSubpath(attrs.path, from, to)});
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6755
                delete o._.arrows[se + "Path"];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6756
                delete o._.arrows[se + "Marker"];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6757
                delete o._.arrows[se + "dx"];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6758
                delete o._.arrows[se + "Type"];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6759
                delete o._.arrows[se + "String"];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6760
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6761
            for (attr in markerCounter) if (markerCounter[has](attr) && !markerCounter[attr]) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6762
                var item = R._g.doc.getElementById(attr);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6763
                item && item.parentNode.removeChild(item);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6764
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6765
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6766
    },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6767
    dasharray = {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6768
        "": [0],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6769
        "none": [0],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6770
        "-": [3, 1],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6771
        ".": [1, 1],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6772
        "-.": [3, 1, 1, 1],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6773
        "-..": [3, 1, 1, 1, 1, 1],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6774
        ". ": [1, 3],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6775
        "- ": [4, 3],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6776
        "--": [8, 3],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6777
        "- .": [4, 3, 1, 3],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6778
        "--.": [8, 3, 1, 3],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6779
        "--..": [8, 3, 1, 3, 1, 3]
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6780
    },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6781
    addDashes = function (o, value, params) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6782
        value = dasharray[Str(value).toLowerCase()];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6783
        if (value) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6784
            var width = o.attrs["stroke-width"] || "1",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6785
                butt = {round: width, square: width, butt: 0}[o.attrs["stroke-linecap"] || params["stroke-linecap"]] || 0,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6786
                dashes = [],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6787
                i = value.length;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6788
            while (i--) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6789
                dashes[i] = value[i] * width + ((i % 2) ? 1 : -1) * butt;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6790
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6791
            $(o.node, {"stroke-dasharray": dashes.join(",")});
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6792
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6793
    },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6794
    setFillAndStroke = function (o, params) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6795
        var node = o.node,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6796
            attrs = o.attrs,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6797
            vis = node.style.visibility;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6798
        node.style.visibility = "hidden";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6799
        for (var att in params) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6800
            if (params[has](att)) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6801
                if (!R._availableAttrs[has](att)) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6802
                    continue;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6803
                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6804
                var value = params[att];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6805
                attrs[att] = value;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6806
                switch (att) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6807
                    case "blur":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6808
                        o.blur(value);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6809
                        break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6810
                    case "href":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6811
                    case "title":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6812
                    case "target":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6813
                        var pn = node.parentNode;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6814
                        if (pn.tagName.toLowerCase() != "a") {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6815
                            var hl = $("a");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6816
                            pn.insertBefore(hl, node);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6817
                            hl.appendChild(node);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6818
                            pn = hl;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6819
                        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6820
                        if (att == "target" && value == "blank") {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6821
                            pn.setAttributeNS(xlink, "show", "new");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6822
                        } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6823
                            pn.setAttributeNS(xlink, att, value);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6824
                        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6825
                        break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6826
                    case "cursor":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6827
                        node.style.cursor = value;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6828
                        break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6829
                    case "transform":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6830
                        o.transform(value);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6831
                        break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6832
                    case "arrow-start":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6833
                        addArrow(o, value);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6834
                        break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6835
                    case "arrow-end":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6836
                        addArrow(o, value, 1);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6837
                        break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6838
                    case "clip-rect":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6839
                        var rect = Str(value).split(separator);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6840
                        if (rect.length == 4) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6841
                            o.clip && o.clip.parentNode.parentNode.removeChild(o.clip.parentNode);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6842
                            var el = $("clipPath"),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6843
                                rc = $("rect");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6844
                            el.id = R.createUUID();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6845
                            $(rc, {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6846
                                x: rect[0],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6847
                                y: rect[1],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6848
                                width: rect[2],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6849
                                height: rect[3]
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6850
                            });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6851
                            el.appendChild(rc);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6852
                            o.paper.defs.appendChild(el);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6853
                            $(node, {"clip-path": "url(#" + el.id + ")"});
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6854
                            o.clip = rc;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6855
                        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6856
                        if (!value) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6857
                            var clip = R._g.doc.getElementById(node.getAttribute("clip-path").replace(/(^url\(#|\)$)/g, E));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6858
                            clip && clip.parentNode.removeChild(clip);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6859
                            $(node, {"clip-path": E});
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6860
                            delete o.clip;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6861
                        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6862
                    break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6863
                    case "path":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6864
                        if (o.type == "path") {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6865
                            $(node, {d: value ? attrs.path = R._pathToAbsolute(value) : "M0,0"});
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6866
                            o._.dirty = 1;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6867
                            if (o._.arrows) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6868
                                "startString" in o._.arrows && addArrow(o, o._.arrows.startString);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6869
                                "endString" in o._.arrows && addArrow(o, o._.arrows.endString, 1);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6870
                            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6871
                        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6872
                        break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6873
                    case "width":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6874
                        node.setAttribute(att, value);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6875
                        o._.dirty = 1;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6876
                        if (attrs.fx) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6877
                            att = "x";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6878
                            value = attrs.x;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6879
                        } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6880
                            break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6881
                        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6882
                    case "x":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6883
                        if (attrs.fx) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6884
                            value = -attrs.x - (attrs.width || 0);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6885
                        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6886
                    case "rx":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6887
                        if (att == "rx" && o.type == "rect") {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6888
                            break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6889
                        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6890
                    case "cx":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6891
                        node.setAttribute(att, value);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6892
                        o.pattern && updatePosition(o);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6893
                        o._.dirty = 1;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6894
                        break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6895
                    case "height":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6896
                        node.setAttribute(att, value);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6897
                        o._.dirty = 1;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6898
                        if (attrs.fy) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6899
                            att = "y";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6900
                            value = attrs.y;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6901
                        } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6902
                            break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6903
                        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6904
                    case "y":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6905
                        if (attrs.fy) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6906
                            value = -attrs.y - (attrs.height || 0);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6907
                        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6908
                    case "ry":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6909
                        if (att == "ry" && o.type == "rect") {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6910
                            break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6911
                        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6912
                    case "cy":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6913
                        node.setAttribute(att, value);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6914
                        o.pattern && updatePosition(o);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6915
                        o._.dirty = 1;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6916
                        break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6917
                    case "r":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6918
                        if (o.type == "rect") {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6919
                            $(node, {rx: value, ry: value});
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6920
                        } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6921
                            node.setAttribute(att, value);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6922
                        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6923
                        o._.dirty = 1;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6924
                        break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6925
                    case "src":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6926
                        if (o.type == "image") {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6927
                            node.setAttributeNS(xlink, "href", value);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6928
                        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6929
                        break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6930
                    case "stroke-width":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6931
                        if (o._.sx != 1 || o._.sy != 1) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6932
                            value /= mmax(abs(o._.sx), abs(o._.sy)) || 1;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6933
                        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6934
                        if (o.paper._vbSize) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6935
                            value *= o.paper._vbSize;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6936
                        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6937
                        node.setAttribute(att, value);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6938
                        if (attrs["stroke-dasharray"]) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6939
                            addDashes(o, attrs["stroke-dasharray"], params);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6940
                        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6941
                        if (o._.arrows) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6942
                            "startString" in o._.arrows && addArrow(o, o._.arrows.startString);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6943
                            "endString" in o._.arrows && addArrow(o, o._.arrows.endString, 1);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6944
                        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6945
                        break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6946
                    case "stroke-dasharray":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6947
                        addDashes(o, value, params);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6948
                        break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6949
                    case "fill":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6950
                        var isURL = Str(value).match(R._ISURL);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6951
                        if (isURL) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6952
                            el = $("pattern");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6953
                            var ig = $("image");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6954
                            el.id = R.createUUID();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6955
                            $(el, {x: 0, y: 0, patternUnits: "userSpaceOnUse", height: 1, width: 1});
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6956
                            $(ig, {x: 0, y: 0, "xlink:href": isURL[1]});
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6957
                            el.appendChild(ig);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6958
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6959
                            (function (el) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6960
                                R._preload(isURL[1], function () {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6961
                                    var w = this.offsetWidth,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6962
                                        h = this.offsetHeight;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6963
                                    $(el, {width: w, height: h});
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6964
                                    $(ig, {width: w, height: h});
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6965
                                    o.paper.safari();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6966
                                });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6967
                            })(el);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6968
                            o.paper.defs.appendChild(el);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6969
                            node.style.fill = "url(#" + el.id + ")";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6970
                            $(node, {fill: "url(#" + el.id + ")"});
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6971
                            o.pattern = el;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6972
                            o.pattern && updatePosition(o);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6973
                            break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6974
                        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6975
                        var clr = R.getRGB(value);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6976
                        if (!clr.error) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6977
                            delete params.gradient;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6978
                            delete attrs.gradient;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6979
                            !R.is(attrs.opacity, "undefined") &&
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6980
                                R.is(params.opacity, "undefined") &&
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6981
                                $(node, {opacity: attrs.opacity});
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6982
                            !R.is(attrs["fill-opacity"], "undefined") &&
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6983
                                R.is(params["fill-opacity"], "undefined") &&
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6984
                                $(node, {"fill-opacity": attrs["fill-opacity"]});
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6985
                        } else if ((o.type == "circle" || o.type == "ellipse" || Str(value).charAt() != "r") && addGradientFill(o, value)) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6986
                            if ("opacity" in attrs || "fill-opacity" in attrs) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6987
                                var gradient = R._g.doc.getElementById(node.getAttribute("fill").replace(/^url\(#|\)$/g, E));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6988
                                if (gradient) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6989
                                    var stops = gradient.getElementsByTagName("stop");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6990
                                    $(stops[stops.length - 1], {"stop-opacity": ("opacity" in attrs ? attrs.opacity : 1) * ("fill-opacity" in attrs ? attrs["fill-opacity"] : 1)});
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6991
                                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6992
                            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6993
                            attrs.gradient = value;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6994
                            attrs.fill = "none";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6995
                            break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6996
                        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6997
                        clr[has]("opacity") && $(node, {"fill-opacity": clr.opacity > 1 ? clr.opacity / 100 : clr.opacity});
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6998
                    case "stroke":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  6999
                        clr = R.getRGB(value);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7000
                        node.setAttribute(att, clr.hex);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7001
                        att == "stroke" && clr[has]("opacity") && $(node, {"stroke-opacity": clr.opacity > 1 ? clr.opacity / 100 : clr.opacity});
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7002
                        if (att == "stroke" && o._.arrows) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7003
                            "startString" in o._.arrows && addArrow(o, o._.arrows.startString);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7004
                            "endString" in o._.arrows && addArrow(o, o._.arrows.endString, 1);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7005
                        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7006
                        break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7007
                    case "gradient":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7008
                        (o.type == "circle" || o.type == "ellipse" || Str(value).charAt() != "r") && addGradientFill(o, value);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7009
                        break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7010
                    case "opacity":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7011
                        if (attrs.gradient && !attrs[has]("stroke-opacity")) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7012
                            $(node, {"stroke-opacity": value > 1 ? value / 100 : value});
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7013
                        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7014
                        // fall
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7015
                    case "fill-opacity":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7016
                        if (attrs.gradient) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7017
                            gradient = R._g.doc.getElementById(node.getAttribute("fill").replace(/^url\(#|\)$/g, E));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7018
                            if (gradient) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7019
                                stops = gradient.getElementsByTagName("stop");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7020
                                $(stops[stops.length - 1], {"stop-opacity": value});
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7021
                            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7022
                            break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7023
                        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7024
                    default:
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7025
                        att == "font-size" && (value = toInt(value, 10) + "px");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7026
                        var cssrule = att.replace(/(\-.)/g, function (w) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7027
                            return w.substring(1).toUpperCase();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7028
                        });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7029
                        node.style[cssrule] = value;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7030
                        o._.dirty = 1;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7031
                        node.setAttribute(att, value);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7032
                        break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7033
                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7034
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7035
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7036
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7037
        tuneText(o, params);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7038
        node.style.visibility = vis;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7039
    },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7040
    leading = 1.2,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7041
    tuneText = function (el, params) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7042
        if (el.type != "text" || !(params[has]("text") || params[has]("font") || params[has]("font-size") || params[has]("x") || params[has]("y"))) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7043
            return;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7044
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7045
        var a = el.attrs,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7046
            node = el.node,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7047
            fontSize = node.firstChild ? toInt(R._g.doc.defaultView.getComputedStyle(node.firstChild, E).getPropertyValue("font-size"), 10) : 10;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7048
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7049
        if (params[has]("text")) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7050
            a.text = params.text;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7051
            while (node.firstChild) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7052
                node.removeChild(node.firstChild);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7053
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7054
            var texts = Str(params.text).split("\n"),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7055
                tspans = [],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7056
                tspan;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7057
            for (var i = 0, ii = texts.length; i < ii; i++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7058
                tspan = $("tspan");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7059
                i && $(tspan, {dy: fontSize * leading, x: a.x});
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7060
                tspan.appendChild(R._g.doc.createTextNode(texts[i]));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7061
                node.appendChild(tspan);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7062
                tspans[i] = tspan;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7063
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7064
        } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7065
            tspans = node.getElementsByTagName("tspan");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7066
            for (i = 0, ii = tspans.length; i < ii; i++) if (i) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7067
                $(tspans[i], {dy: fontSize * leading, x: a.x});
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7068
            } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7069
                $(tspans[0], {dy: 0});
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7070
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7071
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7072
        $(node, {x: a.x, y: a.y});
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7073
        el._.dirty = 1;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7074
        var bb = el._getBBox(),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7075
            dif = a.y - (bb.y + bb.height / 2);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7076
        dif && R.is(dif, "finite") && $(tspans[0], {dy: dif});
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7077
    },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7078
    Element = function (node, svg) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7079
        var X = 0,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7080
            Y = 0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7081
        
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7082
        this[0] = this.node = node;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7083
        
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7084
        node.raphael = true;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7085
        
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7086
        this.id = R._oid++;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7087
        node.raphaelid = this.id;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7088
        this.matrix = R.matrix();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7089
        this.realPath = null;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7090
        
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7091
        this.paper = svg;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7092
        this.attrs = this.attrs || {};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7093
        this._ = {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7094
            transform: [],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7095
            sx: 1,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7096
            sy: 1,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7097
            deg: 0,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7098
            dx: 0,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7099
            dy: 0,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7100
            dirty: 1
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7101
        };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7102
        !svg.bottom && (svg.bottom = this);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7103
        
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7104
        this.prev = svg.top;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7105
        svg.top && (svg.top.next = this);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7106
        svg.top = this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7107
        
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7108
        this.next = null;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7109
    },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7110
    elproto = R.el;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7111
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7112
    Element.prototype = elproto;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7113
    elproto.constructor = Element;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7114
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7115
    R._engine.path = function (pathString, SVG) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7116
        var el = $("path");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7117
        SVG.canvas && SVG.canvas.appendChild(el);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7118
        var p = new Element(el, SVG);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7119
        p.type = "path";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7120
        setFillAndStroke(p, {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7121
            fill: "none",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7122
            stroke: "#000",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7123
            path: pathString
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7124
        });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7125
        return p;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7126
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7127
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7128
    elproto.rotate = function (deg, cx, cy) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7129
        if (this.removed) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7130
            return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7131
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7132
        deg = Str(deg).split(separator);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7133
        if (deg.length - 1) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7134
            cx = toFloat(deg[1]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7135
            cy = toFloat(deg[2]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7136
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7137
        deg = toFloat(deg[0]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7138
        (cy == null) && (cx = cy);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7139
        if (cx == null || cy == null) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7140
            var bbox = this.getBBox(1);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7141
            cx = bbox.x + bbox.width / 2;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7142
            cy = bbox.y + bbox.height / 2;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7143
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7144
        this.transform(this._.transform.concat([["r", deg, cx, cy]]));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7145
        return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7146
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7147
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7148
    elproto.scale = function (sx, sy, cx, cy) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7149
        if (this.removed) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7150
            return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7151
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7152
        sx = Str(sx).split(separator);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7153
        if (sx.length - 1) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7154
            sy = toFloat(sx[1]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7155
            cx = toFloat(sx[2]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7156
            cy = toFloat(sx[3]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7157
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7158
        sx = toFloat(sx[0]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7159
        (sy == null) && (sy = sx);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7160
        (cy == null) && (cx = cy);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7161
        if (cx == null || cy == null) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7162
            var bbox = this.getBBox(1);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7163
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7164
        cx = cx == null ? bbox.x + bbox.width / 2 : cx;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7165
        cy = cy == null ? bbox.y + bbox.height / 2 : cy;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7166
        this.transform(this._.transform.concat([["s", sx, sy, cx, cy]]));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7167
        return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7168
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7169
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7170
    elproto.translate = function (dx, dy) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7171
        if (this.removed) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7172
            return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7173
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7174
        dx = Str(dx).split(separator);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7175
        if (dx.length - 1) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7176
            dy = toFloat(dx[1]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7177
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7178
        dx = toFloat(dx[0]) || 0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7179
        dy = +dy || 0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7180
        this.transform(this._.transform.concat([["t", dx, dy]]));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7181
        return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7182
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7183
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7184
    elproto.transform = function (tstr) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7185
        var _ = this._;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7186
        if (tstr == null) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7187
            return _.transform;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7188
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7189
        R._extractTransform(this, tstr);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7190
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7191
        this.clip && $(this.clip, {transform: this.matrix.invert()});
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7192
        this.pattern && updatePosition(this);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7193
        this.node && $(this.node, {transform: this.matrix});
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7194
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7195
        if (_.sx != 1 || _.sy != 1) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7196
            var sw = this.attrs[has]("stroke-width") ? this.attrs["stroke-width"] : 1;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7197
            this.attr({"stroke-width": sw});
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7198
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7199
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7200
        return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7201
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7202
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7203
    elproto.hide = function () {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7204
        !this.removed && this.paper.safari(this.node.style.display = "none");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7205
        return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7206
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7207
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7208
    elproto.show = function () {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7209
        !this.removed && this.paper.safari(this.node.style.display = "");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7210
        return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7211
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7212
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7213
    elproto.remove = function () {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7214
        if (this.removed) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7215
            return;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7216
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7217
        this.paper.__set__ && this.paper.__set__.exclude(this);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7218
        eve.unbind("*.*." + this.id);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7219
        R._tear(this, this.paper);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7220
        this.node.parentNode.removeChild(this.node);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7221
        for (var i in this) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7222
            delete this[i];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7223
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7224
        this.removed = true;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7225
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7226
    elproto._getBBox = function () {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7227
        if (this.node.style.display == "none") {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7228
            this.show();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7229
            var hide = true;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7230
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7231
        var bbox = {};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7232
        try {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7233
            bbox = this.node.getBBox();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7234
        } catch(e) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7235
            // Firefox 3.0.x plays badly here
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7236
        } finally {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7237
            bbox = bbox || {};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7238
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7239
        hide && this.hide();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7240
        return bbox;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7241
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7242
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7243
    elproto.attr = function (name, value) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7244
        if (this.removed) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7245
            return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7246
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7247
        if (name == null) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7248
            var res = {};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7249
            for (var a in this.attrs) if (this.attrs[has](a)) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7250
                res[a] = this.attrs[a];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7251
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7252
            res.gradient && res.fill == "none" && (res.fill = res.gradient) && delete res.gradient;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7253
            res.transform = this._.transform;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7254
            return res;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7255
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7256
        if (value == null && R.is(name, "string")) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7257
            if (name == "fill" && this.attrs.fill == "none" && this.attrs.gradient) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7258
                return this.attrs.gradient;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7259
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7260
            if (name == "transform") {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7261
                return this._.transform;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7262
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7263
            var names = name.split(separator),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7264
                out = {};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7265
            for (var i = 0, ii = names.length; i < ii; i++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7266
                name = names[i];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7267
                if (name in this.attrs) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7268
                    out[name] = this.attrs[name];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7269
                } else if (R.is(this.paper.customAttributes[name], "function")) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7270
                    out[name] = this.paper.customAttributes[name].def;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7271
                } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7272
                    out[name] = R._availableAttrs[name];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7273
                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7274
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7275
            return ii - 1 ? out : out[names[0]];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7276
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7277
        if (value == null && R.is(name, "array")) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7278
            out = {};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7279
            for (i = 0, ii = name.length; i < ii; i++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7280
                out[name[i]] = this.attr(name[i]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7281
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7282
            return out;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7283
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7284
        if (value != null) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7285
            var params = {};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7286
            params[name] = value;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7287
        } else if (name != null && R.is(name, "object")) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7288
            params = name;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7289
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7290
        for (var key in params) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7291
            eve("attr." + key + "." + this.id, this, params[key]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7292
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7293
        for (key in this.paper.customAttributes) if (this.paper.customAttributes[has](key) && params[has](key) && R.is(this.paper.customAttributes[key], "function")) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7294
            var par = this.paper.customAttributes[key].apply(this, [].concat(params[key]));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7295
            this.attrs[key] = params[key];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7296
            for (var subkey in par) if (par[has](subkey)) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7297
                params[subkey] = par[subkey];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7298
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7299
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7300
        setFillAndStroke(this, params);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7301
        return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7302
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7303
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7304
    elproto.toFront = function () {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7305
        if (this.removed) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7306
            return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7307
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7308
        this.node.parentNode.appendChild(this.node);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7309
        var svg = this.paper;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7310
        svg.top != this && R._tofront(this, svg);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7311
        return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7312
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7313
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7314
    elproto.toBack = function () {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7315
        if (this.removed) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7316
            return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7317
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7318
        if (this.node.parentNode.firstChild != this.node) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7319
            this.node.parentNode.insertBefore(this.node, this.node.parentNode.firstChild);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7320
            R._toback(this, this.paper);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7321
            var svg = this.paper;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7322
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7323
        return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7324
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7325
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7326
    elproto.insertAfter = function (element) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7327
        if (this.removed) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7328
            return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7329
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7330
        var node = element.node || element[element.length - 1].node;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7331
        if (node.nextSibling) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7332
            node.parentNode.insertBefore(this.node, node.nextSibling);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7333
        } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7334
            node.parentNode.appendChild(this.node);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7335
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7336
        R._insertafter(this, element, this.paper);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7337
        return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7338
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7339
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7340
    elproto.insertBefore = function (element) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7341
        if (this.removed) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7342
            return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7343
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7344
        var node = element.node || element[0].node;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7345
        node.parentNode.insertBefore(this.node, node);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7346
        R._insertbefore(this, element, this.paper);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7347
        return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7348
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7349
    elproto.blur = function (size) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7350
        // Experimental. No Safari support. Use it on your own risk.
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7351
        var t = this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7352
        if (+size !== 0) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7353
            var fltr = $("filter"),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7354
                blur = $("feGaussianBlur");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7355
            t.attrs.blur = size;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7356
            fltr.id = R.createUUID();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7357
            $(blur, {stdDeviation: +size || 1.5});
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7358
            fltr.appendChild(blur);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7359
            t.paper.defs.appendChild(fltr);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7360
            t._blur = fltr;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7361
            $(t.node, {filter: "url(#" + fltr.id + ")"});
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7362
        } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7363
            if (t._blur) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7364
                t._blur.parentNode.removeChild(t._blur);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7365
                delete t._blur;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7366
                delete t.attrs.blur;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7367
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7368
            t.node.removeAttribute("filter");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7369
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7370
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7371
    R._engine.circle = function (svg, x, y, r) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7372
        var el = $("circle");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7373
        svg.canvas && svg.canvas.appendChild(el);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7374
        var res = new Element(el, svg);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7375
        res.attrs = {cx: x, cy: y, r: r, fill: "none", stroke: "#000"};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7376
        res.type = "circle";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7377
        $(el, res.attrs);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7378
        return res;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7379
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7380
    R._engine.rect = function (svg, x, y, w, h, r) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7381
        var el = $("rect");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7382
        svg.canvas && svg.canvas.appendChild(el);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7383
        var res = new Element(el, svg);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7384
        res.attrs = {x: x, y: y, width: w, height: h, r: r || 0, rx: r || 0, ry: r || 0, fill: "none", stroke: "#000"};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7385
        res.type = "rect";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7386
        $(el, res.attrs);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7387
        return res;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7388
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7389
    R._engine.ellipse = function (svg, x, y, rx, ry) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7390
        var el = $("ellipse");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7391
        svg.canvas && svg.canvas.appendChild(el);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7392
        var res = new Element(el, svg);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7393
        res.attrs = {cx: x, cy: y, rx: rx, ry: ry, fill: "none", stroke: "#000"};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7394
        res.type = "ellipse";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7395
        $(el, res.attrs);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7396
        return res;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7397
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7398
    R._engine.image = function (svg, src, x, y, w, h) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7399
        var el = $("image");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7400
        $(el, {x: x, y: y, width: w, height: h, preserveAspectRatio: "none"});
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7401
        el.setAttributeNS(xlink, "href", src);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7402
        svg.canvas && svg.canvas.appendChild(el);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7403
        var res = new Element(el, svg);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7404
        res.attrs = {x: x, y: y, width: w, height: h, src: src};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7405
        res.type = "image";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7406
        return res;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7407
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7408
    R._engine.text = function (svg, x, y, text) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7409
        var el = $("text");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7410
        // $(el, {x: x, y: y, "text-anchor": "middle"});
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7411
        svg.canvas && svg.canvas.appendChild(el);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7412
        var res = new Element(el, svg);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7413
        res.attrs = {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7414
            x: x,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7415
            y: y,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7416
            "text-anchor": "middle",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7417
            text: text,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7418
            font: R._availableAttrs.font,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7419
            stroke: "none",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7420
            fill: "#000"
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7421
        };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7422
        res.type = "text";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7423
        setFillAndStroke(res, res.attrs);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7424
        return res;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7425
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7426
    R._engine.setSize = function (width, height) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7427
        this.width = width || this.width;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7428
        this.height = height || this.height;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7429
        this.canvas.setAttribute("width", this.width);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7430
        this.canvas.setAttribute("height", this.height);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7431
        if (this._viewBox) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7432
            this.setViewBox.apply(this, this._viewBox);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7433
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7434
        return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7435
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7436
    R._engine.create = function () {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7437
        var con = R._getContainer.apply(0, arguments),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7438
            container = con && con.container,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7439
            x = con.x,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7440
            y = con.y,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7441
            width = con.width,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7442
            height = con.height;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7443
        if (!container) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7444
            throw new Error("SVG container not found.");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7445
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7446
        var cnvs = $("svg"),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7447
            css = "overflow:hidden;",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7448
            isFloating;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7449
        x = x || 0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7450
        y = y || 0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7451
        width = width || 512;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7452
        height = height || 342;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7453
        $(cnvs, {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7454
            height: height,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7455
            version: 1.1,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7456
            width: width,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7457
            xmlns: "http://www.w3.org/2000/svg"
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7458
        });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7459
        if (container == 1) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7460
            cnvs.style.cssText = css + "position:absolute;left:" + x + "px;top:" + y + "px";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7461
            R._g.doc.body.appendChild(cnvs);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7462
            isFloating = 1;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7463
        } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7464
            cnvs.style.cssText = css + "position:relative";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7465
            if (container.firstChild) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7466
                container.insertBefore(cnvs, container.firstChild);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7467
            } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7468
                container.appendChild(cnvs);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7469
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7470
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7471
        container = new R._Paper;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7472
        container.width = width;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7473
        container.height = height;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7474
        container.canvas = cnvs;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7475
        // plugins.call(container, container, R.fn);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7476
        container.clear();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7477
        container._left = container._top = 0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7478
        isFloating && (container.renderfix = function () {});
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7479
        container.renderfix();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7480
        return container;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7481
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7482
    R._engine.setViewBox = function (x, y, w, h, fit) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7483
        eve("setViewBox", this, this._viewBox, [x, y, w, h, fit]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7484
        var size = mmax(w / this.width, h / this.height),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7485
            top = this.top,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7486
            aspectRatio = fit ? "meet" : "xMinYMin",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7487
            vb,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7488
            sw;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7489
        if (x == null) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7490
            if (this._vbSize) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7491
                size = 1;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7492
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7493
            delete this._vbSize;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7494
            vb = "0 0 " + this.width + S + this.height;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7495
        } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7496
            this._vbSize = size;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7497
            vb = x + S + y + S + w + S + h;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7498
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7499
        $(this.canvas, {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7500
            viewBox: vb,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7501
            preserveAspectRatio: aspectRatio
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7502
        });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7503
        while (size && top) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7504
            sw = "stroke-width" in top.attrs ? top.attrs["stroke-width"] : 1;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7505
            top.attr({"stroke-width": sw});
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7506
            top._.dirty = 1;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7507
            top._.dirtyT = 1;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7508
            top = top.prev;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7509
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7510
        this._viewBox = [x, y, w, h, !!fit];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7511
        return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7512
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7513
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7514
    R.prototype.renderfix = function () {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7515
        var cnvs = this.canvas,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7516
            s = cnvs.style,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7517
            pos = cnvs.getScreenCTM() || cnvs.createSVGMatrix(),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7518
            left = -pos.e % 1,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7519
            top = -pos.f % 1;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7520
        if (left || top) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7521
            if (left) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7522
                this._left = (this._left + left) % 1;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7523
                s.left = this._left + "px";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7524
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7525
            if (top) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7526
                this._top = (this._top + top) % 1;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7527
                s.top = this._top + "px";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7528
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7529
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7530
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7531
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7532
    R.prototype.clear = function () {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7533
        R.eve("clear", this);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7534
        var c = this.canvas;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7535
        while (c.firstChild) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7536
            c.removeChild(c.firstChild);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7537
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7538
        this.bottom = this.top = null;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7539
        (this.desc = $("desc")).appendChild(R._g.doc.createTextNode("Created with Rapha\xebl " + R.version));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7540
        c.appendChild(this.desc);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7541
        c.appendChild(this.defs = $("defs"));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7542
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7543
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7544
    R.prototype.remove = function () {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7545
        eve("remove", this);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7546
        this.canvas.parentNode && this.canvas.parentNode.removeChild(this.canvas);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7547
        for (var i in this) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7548
            this[i] = removed(i);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7549
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7550
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7551
    var setproto = R.st;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7552
    for (var method in elproto) if (elproto[has](method) && !setproto[has](method)) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7553
        setproto[method] = (function (methodname) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7554
            return function () {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7555
                var arg = arguments;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7556
                return this.forEach(function (el) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7557
                    el[methodname].apply(el, arg);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7558
                });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7559
            };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7560
        })(method);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7561
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7562
}(window.Raphael);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7563
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7564
// ┌─────────────────────────────────────────────────────────────────────┐ \\
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7565
// │ Raphaël 2 - JavaScript Vector Library                               │ \\
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7566
// ├─────────────────────────────────────────────────────────────────────┤ \\
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7567
// │ VML Module                                                          │ \\
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7568
// ├─────────────────────────────────────────────────────────────────────┤ \\
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7569
// │ Copyright (c) 2008-2011 Dmitry Baranovskiy (http://raphaeljs.com)   │ \\
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7570
// │ Copyright (c) 2008-2011 Sencha Labs (http://sencha.com)             │ \\
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7571
// │ Licensed under the MIT (http://raphaeljs.com/license.html) license. │ \\
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7572
// └─────────────────────────────────────────────────────────────────────┘ \\
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7573
window.Raphael.vml && function (R) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7574
    var has = "hasOwnProperty",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7575
        Str = String,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7576
        toFloat = parseFloat,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7577
        math = Math,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7578
        round = math.round,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7579
        mmax = math.max,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7580
        mmin = math.min,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7581
        abs = math.abs,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7582
        fillString = "fill",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7583
        separator = /[, ]+/,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7584
        eve = R.eve,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7585
        ms = " progid:DXImageTransform.Microsoft",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7586
        S = " ",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7587
        E = "",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7588
        map = {M: "m", L: "l", C: "c", Z: "x", m: "t", l: "r", c: "v", z: "x"},
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7589
        bites = /([clmz]),?([^clmz]*)/gi,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7590
        blurregexp = / progid:\S+Blur\([^\)]+\)/g,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7591
        val = /-?[^,\s-]+/g,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7592
        cssDot = "position:absolute;left:0;top:0;width:1px;height:1px",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7593
        zoom = 21600,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7594
        pathTypes = {path: 1, rect: 1, image: 1},
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7595
        ovalTypes = {circle: 1, ellipse: 1},
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7596
        path2vml = function (path) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7597
            var total =  /[ahqstv]/ig,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7598
                command = R._pathToAbsolute;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7599
            Str(path).match(total) && (command = R._path2curve);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7600
            total = /[clmz]/g;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7601
            if (command == R._pathToAbsolute && !Str(path).match(total)) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7602
                var res = Str(path).replace(bites, function (all, command, args) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7603
                    var vals = [],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7604
                        isMove = command.toLowerCase() == "m",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7605
                        res = map[command];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7606
                    args.replace(val, function (value) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7607
                        if (isMove && vals.length == 2) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7608
                            res += vals + map[command == "m" ? "l" : "L"];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7609
                            vals = [];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7610
                        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7611
                        vals.push(round(value * zoom));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7612
                    });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7613
                    return res + vals;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7614
                });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7615
                return res;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7616
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7617
            var pa = command(path), p, r;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7618
            res = [];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7619
            for (var i = 0, ii = pa.length; i < ii; i++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7620
                p = pa[i];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7621
                r = pa[i][0].toLowerCase();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7622
                r == "z" && (r = "x");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7623
                for (var j = 1, jj = p.length; j < jj; j++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7624
                    r += round(p[j] * zoom) + (j != jj - 1 ? "," : E);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7625
                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7626
                res.push(r);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7627
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7628
            return res.join(S);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7629
        },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7630
        compensation = function (deg, dx, dy) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7631
            var m = R.matrix();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7632
            m.rotate(-deg, .5, .5);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7633
            return {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7634
                dx: m.x(dx, dy),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7635
                dy: m.y(dx, dy)
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7636
            };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7637
        },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7638
        setCoords = function (p, sx, sy, dx, dy, deg) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7639
            var _ = p._,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7640
                m = p.matrix,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7641
                fillpos = _.fillpos,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7642
                o = p.node,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7643
                s = o.style,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7644
                y = 1,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7645
                flip = "",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7646
                dxdy,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7647
                kx = zoom / sx,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7648
                ky = zoom / sy;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7649
            s.visibility = "hidden";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7650
            if (!sx || !sy) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7651
                return;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7652
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7653
            o.coordsize = abs(kx) + S + abs(ky);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7654
            s.rotation = deg * (sx * sy < 0 ? -1 : 1);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7655
            if (deg) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7656
                var c = compensation(deg, dx, dy);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7657
                dx = c.dx;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7658
                dy = c.dy;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7659
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7660
            sx < 0 && (flip += "x");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7661
            sy < 0 && (flip += " y") && (y = -1);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7662
            s.flip = flip;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7663
            o.coordorigin = (dx * -kx) + S + (dy * -ky);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7664
            if (fillpos || _.fillsize) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7665
                var fill = o.getElementsByTagName(fillString);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7666
                fill = fill && fill[0];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7667
                o.removeChild(fill);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7668
                if (fillpos) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7669
                    c = compensation(deg, m.x(fillpos[0], fillpos[1]), m.y(fillpos[0], fillpos[1]));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7670
                    fill.position = c.dx * y + S + c.dy * y;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7671
                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7672
                if (_.fillsize) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7673
                    fill.size = _.fillsize[0] * abs(sx) + S + _.fillsize[1] * abs(sy);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7674
                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7675
                o.appendChild(fill);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7676
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7677
            s.visibility = "visible";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7678
        };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7679
    R.toString = function () {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7680
        return  "Your browser doesn\u2019t support SVG. Falling down to VML.\nYou are running Rapha\xebl " + this.version;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7681
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7682
    addArrow = function (o, value, isEnd) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7683
        var values = Str(value).toLowerCase().split("-"),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7684
            se = isEnd ? "end" : "start",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7685
            i = values.length,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7686
            type = "classic",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7687
            w = "medium",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7688
            h = "medium";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7689
        while (i--) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7690
            switch (values[i]) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7691
                case "block":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7692
                case "classic":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7693
                case "oval":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7694
                case "diamond":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7695
                case "open":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7696
                case "none":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7697
                    type = values[i];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7698
                    break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7699
                case "wide":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7700
                case "narrow": h = values[i]; break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7701
                case "long":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7702
                case "short": w = values[i]; break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7703
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7704
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7705
        var stroke = o.node.getElementsByTagName("stroke")[0];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7706
        stroke[se + "arrow"] = type;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7707
        stroke[se + "arrowlength"] = w;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7708
        stroke[se + "arrowwidth"] = h;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7709
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7710
    setFillAndStroke = function (o, params) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7711
        // o.paper.canvas.style.display = "none";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7712
        o.attrs = o.attrs || {};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7713
        var node = o.node,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7714
            a = o.attrs,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7715
            s = node.style,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7716
            xy,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7717
            newpath = pathTypes[o.type] && (params.x != a.x || params.y != a.y || params.width != a.width || params.height != a.height || params.cx != a.cx || params.cy != a.cy || params.rx != a.rx || params.ry != a.ry || params.r != a.r),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7718
            isOval = ovalTypes[o.type] && (a.cx != params.cx || a.cy != params.cy || a.r != params.r || a.rx != params.rx || a.ry != params.ry),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7719
            res = o;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7720
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7721
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7722
        for (var par in params) if (params[has](par)) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7723
            a[par] = params[par];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7724
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7725
        if (newpath) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7726
            a.path = R._getPath[o.type](o);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7727
            o._.dirty = 1;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7728
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7729
        params.href && (node.href = params.href);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7730
        params.title && (node.title = params.title);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7731
        params.target && (node.target = params.target);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7732
        params.cursor && (s.cursor = params.cursor);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7733
        "blur" in params && o.blur(params.blur);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7734
        if (params.path && o.type == "path" || newpath) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7735
            node.path = path2vml(~Str(a.path).toLowerCase().indexOf("r") ? R._pathToAbsolute(a.path) : a.path);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7736
            if (o.type == "image") {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7737
                o._.fillpos = [a.x, a.y];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7738
                o._.fillsize = [a.width, a.height];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7739
                setCoords(o, 1, 1, 0, 0, 0);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7740
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7741
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7742
        "transform" in params && o.transform(params.transform);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7743
        if (isOval) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7744
            var cx = +a.cx,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7745
                cy = +a.cy,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7746
                rx = +a.rx || +a.r || 0,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7747
                ry = +a.ry || +a.r || 0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7748
            node.path = R.format("ar{0},{1},{2},{3},{4},{1},{4},{1}x", round((cx - rx) * zoom), round((cy - ry) * zoom), round((cx + rx) * zoom), round((cy + ry) * zoom), round(cx * zoom));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7749
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7750
        if ("clip-rect" in params) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7751
            var rect = Str(params["clip-rect"]).split(separator);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7752
            if (rect.length == 4) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7753
                rect[2] = +rect[2] + (+rect[0]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7754
                rect[3] = +rect[3] + (+rect[1]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7755
                var div = node.clipRect || R._g.doc.createElement("div"),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7756
                    dstyle = div.style;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7757
                dstyle.clip = R.format("rect({1}px {2}px {3}px {0}px)", rect);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7758
                if (!node.clipRect) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7759
                    dstyle.position = "absolute";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7760
                    dstyle.top = 0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7761
                    dstyle.left = 0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7762
                    dstyle.width = o.paper.width + "px";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7763
                    dstyle.height = o.paper.height + "px";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7764
                    node.parentNode.insertBefore(div, node);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7765
                    div.appendChild(node);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7766
                    node.clipRect = div;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7767
                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7768
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7769
            if (!params["clip-rect"]) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7770
                node.clipRect && (node.clipRect.style.clip = E);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7771
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7772
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7773
        if (o.textpath) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7774
            var textpathStyle = o.textpath.style;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7775
            params.font && (textpathStyle.font = params.font);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7776
            params["font-family"] && (textpathStyle.fontFamily = '"' + params["font-family"].split(",")[0].replace(/^['"]+|['"]+$/g, E) + '"');
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7777
            params["font-size"] && (textpathStyle.fontSize = params["font-size"]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7778
            params["font-weight"] && (textpathStyle.fontWeight = params["font-weight"]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7779
            params["font-style"] && (textpathStyle.fontStyle = params["font-style"]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7780
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7781
        if ("arrow-start" in params) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7782
            addArrow(res, params["arrow-start"]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7783
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7784
        if ("arrow-end" in params) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7785
            addArrow(res, params["arrow-end"], 1);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7786
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7787
        if (params.opacity != null || 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7788
            params["stroke-width"] != null ||
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7789
            params.fill != null ||
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7790
            params.src != null ||
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7791
            params.stroke != null ||
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7792
            params["stroke-width"] != null ||
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7793
            params["stroke-opacity"] != null ||
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7794
            params["fill-opacity"] != null ||
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7795
            params["stroke-dasharray"] != null ||
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7796
            params["stroke-miterlimit"] != null ||
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7797
            params["stroke-linejoin"] != null ||
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7798
            params["stroke-linecap"] != null) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7799
            var fill = node.getElementsByTagName(fillString),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7800
                newfill = false;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7801
            fill = fill && fill[0];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7802
            !fill && (newfill = fill = createNode(fillString));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7803
            if (o.type == "image" && params.src) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7804
                fill.src = params.src;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7805
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7806
            params.fill && (fill.on = true);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7807
            if (fill.on == null || params.fill == "none" || params.fill === null) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7808
                fill.on = false;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7809
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7810
            if (fill.on && params.fill) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7811
                var isURL = Str(params.fill).match(R._ISURL);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7812
                if (isURL) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7813
                    fill.parentNode == node && node.removeChild(fill);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7814
                    fill.rotate = true;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7815
                    fill.src = isURL[1];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7816
                    fill.type = "tile";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7817
                    var bbox = o.getBBox(1);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7818
                    fill.position = bbox.x + S + bbox.y;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7819
                    o._.fillpos = [bbox.x, bbox.y];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7820
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7821
                    R._preload(isURL[1], function () {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7822
                        o._.fillsize = [this.offsetWidth, this.offsetHeight];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7823
                    });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7824
                } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7825
                    fill.color = R.getRGB(params.fill).hex;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7826
                    fill.src = E;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7827
                    fill.type = "solid";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7828
                    if (R.getRGB(params.fill).error && (res.type in {circle: 1, ellipse: 1} || Str(params.fill).charAt() != "r") && addGradientFill(res, params.fill, fill)) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7829
                        a.fill = "none";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7830
                        a.gradient = params.fill;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7831
                        fill.rotate = false;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7832
                    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7833
                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7834
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7835
            if ("fill-opacity" in params || "opacity" in params) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7836
                var opacity = ((+a["fill-opacity"] + 1 || 2) - 1) * ((+a.opacity + 1 || 2) - 1) * ((+R.getRGB(params.fill).o + 1 || 2) - 1);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7837
                opacity = mmin(mmax(opacity, 0), 1);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7838
                fill.opacity = opacity;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7839
                if (fill.src) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7840
                    fill.color = "none";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7841
                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7842
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7843
            node.appendChild(fill);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7844
            var stroke = (node.getElementsByTagName("stroke") && node.getElementsByTagName("stroke")[0]),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7845
            newstroke = false;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7846
            !stroke && (newstroke = stroke = createNode("stroke"));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7847
            if ((params.stroke && params.stroke != "none") ||
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7848
                params["stroke-width"] ||
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7849
                params["stroke-opacity"] != null ||
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7850
                params["stroke-dasharray"] ||
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7851
                params["stroke-miterlimit"] ||
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7852
                params["stroke-linejoin"] ||
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7853
                params["stroke-linecap"]) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7854
                stroke.on = true;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7855
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7856
            (params.stroke == "none" || params.stroke === null || stroke.on == null || params.stroke == 0 || params["stroke-width"] == 0) && (stroke.on = false);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7857
            var strokeColor = R.getRGB(params.stroke);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7858
            stroke.on && params.stroke && (stroke.color = strokeColor.hex);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7859
            opacity = ((+a["stroke-opacity"] + 1 || 2) - 1) * ((+a.opacity + 1 || 2) - 1) * ((+strokeColor.o + 1 || 2) - 1);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7860
            var width = (toFloat(params["stroke-width"]) || 1) * .75;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7861
            opacity = mmin(mmax(opacity, 0), 1);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7862
            params["stroke-width"] == null && (width = a["stroke-width"]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7863
            params["stroke-width"] && (stroke.weight = width);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7864
            width && width < 1 && (opacity *= width) && (stroke.weight = 1);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7865
            stroke.opacity = opacity;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7866
        
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7867
            params["stroke-linejoin"] && (stroke.joinstyle = params["stroke-linejoin"] || "miter");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7868
            stroke.miterlimit = params["stroke-miterlimit"] || 8;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7869
            params["stroke-linecap"] && (stroke.endcap = params["stroke-linecap"] == "butt" ? "flat" : params["stroke-linecap"] == "square" ? "square" : "round");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7870
            if (params["stroke-dasharray"]) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7871
                var dasharray = {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7872
                    "-": "shortdash",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7873
                    ".": "shortdot",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7874
                    "-.": "shortdashdot",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7875
                    "-..": "shortdashdotdot",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7876
                    ". ": "dot",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7877
                    "- ": "dash",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7878
                    "--": "longdash",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7879
                    "- .": "dashdot",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7880
                    "--.": "longdashdot",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7881
                    "--..": "longdashdotdot"
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7882
                };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7883
                stroke.dashstyle = dasharray[has](params["stroke-dasharray"]) ? dasharray[params["stroke-dasharray"]] : E;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7884
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7885
            newstroke && node.appendChild(stroke);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7886
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7887
        if (res.type == "text") {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7888
            res.paper.canvas.style.display = E;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7889
            var span = res.paper.span,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7890
                m = 100,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7891
                fontSize = a.font && a.font.match(/\d+(?:\.\d*)?(?=px)/);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7892
            s = span.style;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7893
            a.font && (s.font = a.font);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7894
            a["font-family"] && (s.fontFamily = a["font-family"]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7895
            a["font-weight"] && (s.fontWeight = a["font-weight"]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7896
            a["font-style"] && (s.fontStyle = a["font-style"]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7897
            fontSize = toFloat(fontSize ? fontSize[0] : a["font-size"]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7898
            s.fontSize = fontSize * m + "px";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7899
            res.textpath.string && (span.innerHTML = Str(res.textpath.string).replace(/</g, "&#60;").replace(/&/g, "&#38;").replace(/\n/g, "<br>"));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7900
            var brect = span.getBoundingClientRect();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7901
            res.W = a.w = (brect.right - brect.left) / m;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7902
            res.H = a.h = (brect.bottom - brect.top) / m;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7903
            // res.paper.canvas.style.display = "none";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7904
            res.X = a.x;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7905
            res.Y = a.y + res.H / 2;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7906
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7907
            ("x" in params || "y" in params) && (res.path.v = R.format("m{0},{1}l{2},{1}", round(a.x * zoom), round(a.y * zoom), round(a.x * zoom) + 1));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7908
            var dirtyattrs = ["x", "y", "text", "font", "font-family", "font-weight", "font-style", "font-size"];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7909
            for (var d = 0, dd = dirtyattrs.length; d < dd; d++) if (dirtyattrs[d] in params) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7910
                res._.dirty = 1;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7911
                break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7912
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7913
        
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7914
            // text-anchor emulation
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7915
            switch (a["text-anchor"]) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7916
                case "start":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7917
                    res.textpath.style["v-text-align"] = "left";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7918
                    res.bbx = res.W / 2;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7919
                break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7920
                case "end":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7921
                    res.textpath.style["v-text-align"] = "right";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7922
                    res.bbx = -res.W / 2;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7923
                break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7924
                default:
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7925
                    res.textpath.style["v-text-align"] = "center";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7926
                    res.bbx = 0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7927
                break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7928
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7929
            res.textpath.style["v-text-kern"] = true;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7930
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7931
        // res.paper.canvas.style.display = E;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7932
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7933
    addGradientFill = function (o, gradient, fill) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7934
        o.attrs = o.attrs || {};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7935
        var attrs = o.attrs,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7936
            pow = Math.pow,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7937
            opacity,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7938
            oindex,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7939
            type = "linear",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7940
            fxfy = ".5 .5";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7941
        o.attrs.gradient = gradient;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7942
        gradient = Str(gradient).replace(R._radial_gradient, function (all, fx, fy) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7943
            type = "radial";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7944
            if (fx && fy) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7945
                fx = toFloat(fx);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7946
                fy = toFloat(fy);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7947
                pow(fx - .5, 2) + pow(fy - .5, 2) > .25 && (fy = math.sqrt(.25 - pow(fx - .5, 2)) * ((fy > .5) * 2 - 1) + .5);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7948
                fxfy = fx + S + fy;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7949
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7950
            return E;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7951
        });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7952
        gradient = gradient.split(/\s*\-\s*/);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7953
        if (type == "linear") {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7954
            var angle = gradient.shift();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7955
            angle = -toFloat(angle);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7956
            if (isNaN(angle)) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7957
                return null;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7958
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7959
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7960
        var dots = R._parseDots(gradient);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7961
        if (!dots) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7962
            return null;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7963
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7964
        o = o.shape || o.node;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7965
        if (dots.length) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7966
            o.removeChild(fill);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7967
            fill.on = true;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7968
            fill.method = "none";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7969
            fill.color = dots[0].color;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7970
            fill.color2 = dots[dots.length - 1].color;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7971
            var clrs = [];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7972
            for (var i = 0, ii = dots.length; i < ii; i++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7973
                dots[i].offset && clrs.push(dots[i].offset + S + dots[i].color);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7974
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7975
            fill.colors = clrs.length ? clrs.join() : "0% " + fill.color;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7976
            if (type == "radial") {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7977
                fill.type = "gradientTitle";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7978
                fill.focus = "100%";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7979
                fill.focussize = "0 0";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7980
                fill.focusposition = fxfy;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7981
                fill.angle = 0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7982
            } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7983
                // fill.rotate= true;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7984
                fill.type = "gradient";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7985
                fill.angle = (270 - angle) % 360;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7986
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7987
            o.appendChild(fill);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7988
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7989
        return 1;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7990
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7991
    Element = function (node, vml) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7992
        this[0] = this.node = node;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7993
        node.raphael = true;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7994
        this.id = R._oid++;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7995
        node.raphaelid = this.id;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7996
        this.X = 0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7997
        this.Y = 0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7998
        this.attrs = {};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  7999
        this.paper = vml;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8000
        this.matrix = R.matrix();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8001
        this._ = {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8002
            transform: [],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8003
            sx: 1,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8004
            sy: 1,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8005
            dx: 0,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8006
            dy: 0,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8007
            deg: 0,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8008
            dirty: 1,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8009
            dirtyT: 1
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8010
        };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8011
        !vml.bottom && (vml.bottom = this);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8012
        this.prev = vml.top;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8013
        vml.top && (vml.top.next = this);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8014
        vml.top = this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8015
        this.next = null;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8016
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8017
    var elproto = R.el;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8018
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8019
    Element.prototype = elproto;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8020
    elproto.constructor = Element;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8021
    elproto.transform = function (tstr) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8022
        if (tstr == null) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8023
            return this._.transform;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8024
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8025
        var vbs = this.paper._viewBoxShift,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8026
            vbt = vbs ? "s" + [vbs.scale, vbs.scale] + "-1-1t" + [vbs.dx, vbs.dy] : E,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8027
            oldt;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8028
        if (vbs) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8029
            oldt = tstr = Str(tstr).replace(/\.{3}|\u2026/g, this._.transform || E);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8030
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8031
        R._extractTransform(this, vbt + tstr);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8032
        var matrix = this.matrix.clone(),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8033
            skew = this.skew,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8034
            o = this.node,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8035
            split,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8036
            isGrad = ~Str(this.attrs.fill).indexOf("-"),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8037
            isPatt = !Str(this.attrs.fill).indexOf("url(");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8038
        matrix.translate(-.5, -.5);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8039
        if (isPatt || isGrad || this.type == "image") {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8040
            skew.matrix = "1 0 0 1";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8041
            skew.offset = "0 0";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8042
            split = matrix.split();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8043
            if ((isGrad && split.noRotation) || !split.isSimple) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8044
                o.style.filter = matrix.toFilter();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8045
                var bb = this.getBBox(),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8046
                    bbt = this.getBBox(1),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8047
                    dx = bb.x - bbt.x,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8048
                    dy = bb.y - bbt.y;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8049
                o.coordorigin = (dx * -zoom) + S + (dy * -zoom);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8050
                setCoords(this, 1, 1, dx, dy, 0);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8051
            } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8052
                o.style.filter = E;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8053
                setCoords(this, split.scalex, split.scaley, split.dx, split.dy, split.rotate);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8054
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8055
        } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8056
            o.style.filter = E;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8057
            skew.matrix = Str(matrix);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8058
            skew.offset = matrix.offset();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8059
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8060
        oldt && (this._.transform = oldt);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8061
        return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8062
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8063
    elproto.rotate = function (deg, cx, cy) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8064
        if (this.removed) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8065
            return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8066
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8067
        if (deg == null) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8068
            return;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8069
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8070
        deg = Str(deg).split(separator);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8071
        if (deg.length - 1) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8072
            cx = toFloat(deg[1]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8073
            cy = toFloat(deg[2]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8074
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8075
        deg = toFloat(deg[0]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8076
        (cy == null) && (cx = cy);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8077
        if (cx == null || cy == null) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8078
            var bbox = this.getBBox(1);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8079
            cx = bbox.x + bbox.width / 2;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8080
            cy = bbox.y + bbox.height / 2;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8081
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8082
        this._.dirtyT = 1;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8083
        this.transform(this._.transform.concat([["r", deg, cx, cy]]));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8084
        return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8085
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8086
    elproto.translate = function (dx, dy) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8087
        if (this.removed) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8088
            return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8089
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8090
        dx = Str(dx).split(separator);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8091
        if (dx.length - 1) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8092
            dy = toFloat(dx[1]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8093
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8094
        dx = toFloat(dx[0]) || 0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8095
        dy = +dy || 0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8096
        if (this._.bbox) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8097
            this._.bbox.x += dx;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8098
            this._.bbox.y += dy;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8099
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8100
        this.transform(this._.transform.concat([["t", dx, dy]]));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8101
        return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8102
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8103
    elproto.scale = function (sx, sy, cx, cy) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8104
        if (this.removed) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8105
            return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8106
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8107
        sx = Str(sx).split(separator);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8108
        if (sx.length - 1) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8109
            sy = toFloat(sx[1]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8110
            cx = toFloat(sx[2]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8111
            cy = toFloat(sx[3]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8112
            isNaN(cx) && (cx = null);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8113
            isNaN(cy) && (cy = null);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8114
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8115
        sx = toFloat(sx[0]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8116
        (sy == null) && (sy = sx);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8117
        (cy == null) && (cx = cy);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8118
        if (cx == null || cy == null) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8119
            var bbox = this.getBBox(1);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8120
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8121
        cx = cx == null ? bbox.x + bbox.width / 2 : cx;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8122
        cy = cy == null ? bbox.y + bbox.height / 2 : cy;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8123
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8124
        this.transform(this._.transform.concat([["s", sx, sy, cx, cy]]));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8125
        this._.dirtyT = 1;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8126
        return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8127
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8128
    elproto.hide = function () {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8129
        !this.removed && (this.node.style.display = "none");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8130
        return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8131
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8132
    elproto.show = function () {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8133
        !this.removed && (this.node.style.display = E);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8134
        return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8135
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8136
    elproto._getBBox = function () {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8137
        if (this.removed) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8138
            return {};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8139
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8140
        if (this.type == "text") {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8141
            return {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8142
                x: this.X + (this.bbx || 0) - this.W / 2,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8143
                y: this.Y - this.H,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8144
                width: this.W,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8145
                height: this.H
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8146
            };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8147
        } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8148
            return pathDimensions(this.attrs.path);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8149
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8150
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8151
    elproto.remove = function () {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8152
        if (this.removed) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8153
            return;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8154
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8155
        this.paper.__set__ && this.paper.__set__.exclude(this);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8156
        R.eve.unbind("*.*." + this.id);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8157
        R._tear(this, this.paper);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8158
        this.node.parentNode.removeChild(this.node);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8159
        this.shape && this.shape.parentNode.removeChild(this.shape);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8160
        for (var i in this) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8161
            delete this[i];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8162
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8163
        this.removed = true;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8164
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8165
    elproto.attr = function (name, value) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8166
        if (this.removed) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8167
            return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8168
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8169
        if (name == null) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8170
            var res = {};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8171
            for (var a in this.attrs) if (this.attrs[has](a)) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8172
                res[a] = this.attrs[a];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8173
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8174
            res.gradient && res.fill == "none" && (res.fill = res.gradient) && delete res.gradient;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8175
            res.transform = this._.transform;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8176
            return res;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8177
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8178
        if (value == null && R.is(name, "string")) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8179
            if (name == fillString && this.attrs.fill == "none" && this.attrs.gradient) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8180
                return this.attrs.gradient;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8181
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8182
            var names = name.split(separator),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8183
                out = {};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8184
            for (var i = 0, ii = names.length; i < ii; i++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8185
                name = names[i];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8186
                if (name in this.attrs) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8187
                    out[name] = this.attrs[name];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8188
                } else if (R.is(this.paper.customAttributes[name], "function")) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8189
                    out[name] = this.paper.customAttributes[name].def;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8190
                } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8191
                    out[name] = R._availableAttrs[name];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8192
                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8193
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8194
            return ii - 1 ? out : out[names[0]];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8195
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8196
        if (this.attrs && value == null && R.is(name, "array")) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8197
            out = {};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8198
            for (i = 0, ii = name.length; i < ii; i++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8199
                out[name[i]] = this.attr(name[i]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8200
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8201
            return out;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8202
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8203
        var params;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8204
        if (value != null) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8205
            params = {};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8206
            params[name] = value;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8207
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8208
        value == null && R.is(name, "object") && (params = name);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8209
        for (var key in params) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8210
            eve("attr." + key + "." + this.id, this, params[key]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8211
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8212
        if (params) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8213
            for (key in this.paper.customAttributes) if (this.paper.customAttributes[has](key) && params[has](key) && R.is(this.paper.customAttributes[key], "function")) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8214
                var par = this.paper.customAttributes[key].apply(this, [].concat(params[key]));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8215
                this.attrs[key] = params[key];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8216
                for (var subkey in par) if (par[has](subkey)) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8217
                    params[subkey] = par[subkey];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8218
                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8219
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8220
            // this.paper.canvas.style.display = "none";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8221
            if (params.text && this.type == "text") {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8222
                this.textpath.string = params.text;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8223
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8224
            setFillAndStroke(this, params);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8225
            // this.paper.canvas.style.display = E;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8226
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8227
        return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8228
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8229
    elproto.toFront = function () {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8230
        !this.removed && this.node.parentNode.appendChild(this.node);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8231
        this.paper && this.paper.top != this && R._tofront(this, this.paper);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8232
        return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8233
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8234
    elproto.toBack = function () {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8235
        if (this.removed) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8236
            return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8237
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8238
        if (this.node.parentNode.firstChild != this.node) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8239
            this.node.parentNode.insertBefore(this.node, this.node.parentNode.firstChild);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8240
            R._toback(this, this.paper);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8241
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8242
        return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8243
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8244
    elproto.insertAfter = function (element) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8245
        if (this.removed) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8246
            return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8247
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8248
        if (element.constructor == R.st.constructor) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8249
            element = element[element.length - 1];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8250
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8251
        if (element.node.nextSibling) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8252
            element.node.parentNode.insertBefore(this.node, element.node.nextSibling);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8253
        } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8254
            element.node.parentNode.appendChild(this.node);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8255
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8256
        R._insertafter(this, element, this.paper);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8257
        return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8258
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8259
    elproto.insertBefore = function (element) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8260
        if (this.removed) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8261
            return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8262
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8263
        if (element.constructor == R.st.constructor) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8264
            element = element[0];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8265
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8266
        element.node.parentNode.insertBefore(this.node, element.node);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8267
        R._insertbefore(this, element, this.paper);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8268
        return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8269
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8270
    elproto.blur = function (size) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8271
        var s = this.node.runtimeStyle,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8272
            f = s.filter;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8273
        f = f.replace(blurregexp, E);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8274
        if (+size !== 0) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8275
            this.attrs.blur = size;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8276
            s.filter = f + S + ms + ".Blur(pixelradius=" + (+size || 1.5) + ")";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8277
            s.margin = R.format("-{0}px 0 0 -{0}px", round(+size || 1.5));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8278
        } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8279
            s.filter = f;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8280
            s.margin = 0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8281
            delete this.attrs.blur;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8282
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8283
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8284
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8285
    R._engine.path = function (pathString, vml) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8286
        var el = createNode("shape");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8287
        el.style.cssText = cssDot;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8288
        el.coordsize = zoom + S + zoom;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8289
        el.coordorigin = vml.coordorigin;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8290
        var p = new Element(el, vml),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8291
            attr = {fill: "none", stroke: "#000"};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8292
        pathString && (attr.path = pathString);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8293
        p.type = "path";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8294
        p.path = [];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8295
        p.Path = E;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8296
        setFillAndStroke(p, attr);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8297
        vml.canvas.appendChild(el);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8298
        var skew = createNode("skew");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8299
        skew.on = true;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8300
        el.appendChild(skew);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8301
        p.skew = skew;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8302
        p.transform(E);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8303
        return p;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8304
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8305
    R._engine.rect = function (vml, x, y, w, h, r) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8306
        var path = R._rectPath(x, y, w, h, r),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8307
            res = vml.path(path),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8308
            a = res.attrs;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8309
        res.X = a.x = x;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8310
        res.Y = a.y = y;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8311
        res.W = a.width = w;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8312
        res.H = a.height = h;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8313
        a.r = r;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8314
        a.path = path;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8315
        res.type = "rect";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8316
        return res;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8317
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8318
    R._engine.ellipse = function (vml, x, y, rx, ry) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8319
        var res = vml.path(),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8320
            a = res.attrs;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8321
        res.X = x - rx;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8322
        res.Y = y - ry;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8323
        res.W = rx * 2;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8324
        res.H = ry * 2;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8325
        res.type = "ellipse";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8326
        setFillAndStroke(res, {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8327
            cx: x,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8328
            cy: y,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8329
            rx: rx,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8330
            ry: ry
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8331
        });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8332
        return res;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8333
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8334
    R._engine.circle = function (vml, x, y, r) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8335
        var res = vml.path(),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8336
            a = res.attrs;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8337
        res.X = x - r;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8338
        res.Y = y - r;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8339
        res.W = res.H = r * 2;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8340
        res.type = "circle";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8341
        setFillAndStroke(res, {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8342
            cx: x,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8343
            cy: y,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8344
            r: r
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8345
        });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8346
        return res;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8347
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8348
    R._engine.image = function (vml, src, x, y, w, h) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8349
        var path = R._rectPath(x, y, w, h),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8350
            res = vml.path(path).attr({stroke: "none"}),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8351
            a = res.attrs,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8352
            node = res.node,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8353
            fill = node.getElementsByTagName(fillString)[0];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8354
        a.src = src;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8355
        res.X = a.x = x;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8356
        res.Y = a.y = y;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8357
        res.W = a.width = w;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8358
        res.H = a.height = h;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8359
        a.path = path;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8360
        res.type = "image";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8361
        fill.parentNode == node && node.removeChild(fill);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8362
        fill.rotate = true;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8363
        fill.src = src;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8364
        fill.type = "tile";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8365
        res._.fillpos = [x, y];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8366
        res._.fillsize = [w, h];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8367
        node.appendChild(fill);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8368
        setCoords(res, 1, 1, 0, 0, 0);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8369
        return res;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8370
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8371
    R._engine.text = function (vml, x, y, text) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8372
        var el = createNode("shape"),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8373
            path = createNode("path"),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8374
            o = createNode("textpath");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8375
        x = x || 0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8376
        y = y || 0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8377
        text = text || "";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8378
        path.v = R.format("m{0},{1}l{2},{1}", round(x * zoom), round(y * zoom), round(x * zoom) + 1);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8379
        path.textpathok = true;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8380
        o.string = Str(text);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8381
        o.on = true;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8382
        el.style.cssText = cssDot;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8383
        el.coordsize = zoom + S + zoom;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8384
        el.coordorigin = "0 0";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8385
        var p = new Element(el, vml),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8386
            attr = {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8387
                fill: "#000",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8388
                stroke: "none",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8389
                font: R._availableAttrs.font,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8390
                text: text
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8391
            };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8392
        p.shape = el;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8393
        p.path = path;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8394
        p.textpath = o;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8395
        p.type = "text";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8396
        p.attrs.text = Str(text);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8397
        p.attrs.x = x;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8398
        p.attrs.y = y;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8399
        p.attrs.w = 1;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8400
        p.attrs.h = 1;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8401
        setFillAndStroke(p, attr);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8402
        el.appendChild(o);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8403
        el.appendChild(path);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8404
        vml.canvas.appendChild(el);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8405
        var skew = createNode("skew");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8406
        skew.on = true;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8407
        el.appendChild(skew);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8408
        p.skew = skew;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8409
        p.transform(E);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8410
        return p;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8411
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8412
    R._engine.setSize = function (width, height) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8413
        var cs = this.canvas.style;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8414
        this.width = width;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8415
        this.height = height;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8416
        width == +width && (width += "px");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8417
        height == +height && (height += "px");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8418
        cs.width = width;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8419
        cs.height = height;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8420
        cs.clip = "rect(0 " + width + " " + height + " 0)";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8421
        if (this._viewBox) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8422
            setViewBox.apply(this, this._viewBox);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8423
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8424
        return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8425
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8426
    R._engine.setViewBox = function (x, y, w, h, fit) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8427
        R.eve("setViewBox", this, this._viewBox, [x, y, w, h, fit]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8428
        var width = this.width,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8429
            height = this.height,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8430
            size = 1 / mmax(w / width, h / height),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8431
            H, W;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8432
        if (fit) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8433
            H = height / h;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8434
            W = width / w;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8435
            if (w * H < width) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8436
                x -= (width - w * H) / 2 / H;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8437
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8438
            if (h * W < height) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8439
                y -= (height - h * W) / 2 / W;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8440
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8441
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8442
        this._viewBox = [x, y, w, h, !!fit];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8443
        this._viewBoxShift = {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8444
            dx: -x,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8445
            dy: -y,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8446
            scale: size
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8447
        };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8448
        this.forEach(function (el) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8449
            el.transform("...");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8450
        });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8451
        return this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8452
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8453
    var createNode,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8454
        initWin = function (win) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8455
            var doc = win.document;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8456
            doc.createStyleSheet().addRule(".rvml", "behavior:url(#default#VML)");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8457
            try {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8458
                !doc.namespaces.rvml && doc.namespaces.add("rvml", "urn:schemas-microsoft-com:vml");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8459
                createNode = function (tagName) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8460
                    return doc.createElement('<rvml:' + tagName + ' class="rvml">');
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8461
                };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8462
            } catch (e) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8463
                createNode = function (tagName) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8464
                    return doc.createElement('<' + tagName + ' xmlns="urn:schemas-microsoft.com:vml" class="rvml">');
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8465
                };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8466
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8467
        };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8468
    initWin(R._g.win);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8469
    R._engine.create = function () {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8470
        var con = R._getContainer.apply(0, arguments),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8471
            container = con.container,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8472
            height = con.height,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8473
            s,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8474
            width = con.width,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8475
            x = con.x,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8476
            y = con.y;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8477
        if (!container) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8478
            throw new Error("VML container not found.");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8479
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8480
        var res = new R._Paper,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8481
            c = res.canvas = R._g.doc.createElement("div"),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8482
            cs = c.style;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8483
        x = x || 0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8484
        y = y || 0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8485
        width = width || 512;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8486
        height = height || 342;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8487
        res.width = width;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8488
        res.height = height;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8489
        width == +width && (width += "px");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8490
        height == +height && (height += "px");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8491
        res.coordsize = zoom * 1e3 + S + zoom * 1e3;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8492
        res.coordorigin = "0 0";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8493
        res.span = R._g.doc.createElement("span");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8494
        res.span.style.cssText = "position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8495
        c.appendChild(res.span);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8496
        cs.cssText = R.format("top:0;left:0;width:{0};height:{1};display:inline-block;position:relative;clip:rect(0 {0} {1} 0);overflow:hidden", width, height);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8497
        if (container == 1) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8498
            R._g.doc.body.appendChild(c);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8499
            cs.left = x + "px";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8500
            cs.top = y + "px";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8501
            cs.position = "absolute";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8502
        } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8503
            if (container.firstChild) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8504
                container.insertBefore(c, container.firstChild);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8505
            } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8506
                container.appendChild(c);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8507
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8508
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8509
        // plugins.call(res, res, R.fn);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8510
        res.renderfix = function () {};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8511
        return res;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8512
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8513
    R.prototype.clear = function () {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8514
        R.eve("clear", this);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8515
        this.canvas.innerHTML = E;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8516
        this.span = R._g.doc.createElement("span");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8517
        this.span.style.cssText = "position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;display:inline;";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8518
        this.canvas.appendChild(this.span);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8519
        this.bottom = this.top = null;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8520
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8521
    R.prototype.remove = function () {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8522
        R.eve("remove", this);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8523
        this.canvas.parentNode.removeChild(this.canvas);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8524
        for (var i in this) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8525
            this[i] = removed(i);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8526
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8527
        return true;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8528
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8529
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8530
    var setproto = R.st;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8531
    for (var method in elproto) if (elproto[has](method) && !setproto[has](method)) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8532
        setproto[method] = (function (methodname) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8533
            return function () {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8534
                var arg = arguments;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8535
                return this.forEach(function (el) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8536
                    el[methodname].apply(el, arg);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8537
                });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8538
            };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8539
        })(method);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8540
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8541
}(window.Raphael);/* main file */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8542
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8543
if ( window.IriSP === undefined && window.__IriSP === undefined ) { 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8544
	var IriSP = {}; 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8545
	var __IriSP = IriSP; /* for backward compatibility */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8546
}
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8547
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8548
/* crap code will be the first against the wall when the
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8549
   revolution comes */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8550
IriSP.loadLibs = function( libs, customCssPath, metadata_url, callback ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8551
		// Localize jQuery variable
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8552
		IriSP.jQuery = null;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8553
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8554
		/* FIXME : to refactor using popcorn.getscript ? */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8555
		/******** Load jQuery if not present *********/
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8556
		if ( window.jQuery === undefined || window.jQuery.fn.jquery !== '1.4.2' ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8557
			
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8558
			var script_tag = document.createElement( 'script' );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8559
			script_tag.setAttribute( "type", "text/javascript" );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8560
			script_tag.setAttribute( "src", libs.jQuery );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8561
			
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8562
			script_tag.onload = scriptLibHandler;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8563
			script_tag.onreadystatechange = function () { // Same thing but for IE
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8564
				if ( this.readyState == 'complete' || this.readyState == 'loaded' ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8565
					scriptLibHandler();					
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8566
				}
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8567
			};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8568
			
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8569
			// Try to find the head, otherwise default to the documentElement
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8570
			( document.getElementsByTagName("head")[0] || document.documentElement ).appendChild( script_tag );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8571
		} else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8572
			// The jQuery version on the window is the one we want to use
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8573
			 IriSP.jQuery = window.jQuery;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8574
			 scriptLibHandler();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8575
		}
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8576
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8577
		/******** Called once jQuery has loaded ******/
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8578
		function scriptLibHandler() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8579
			
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8580
			var script_jqUi_tooltip = document.createElement( 'script' );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8581
			script_jqUi_tooltip.setAttribute( "type", "text/javascript" );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8582
			script_jqUi_tooltip.setAttribute( "src", libs.jQueryToolTip );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8583
			script_jqUi_tooltip.onload = scriptLoadHandler;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8584
			script_jqUi_tooltip.onreadystatechange = function () { // Same thing but for IE
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8585
				if ( this.readyState == 'complete' || this.readyState == 'loaded' ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8586
					scriptLoadHandler( "jquery.tools.min.js loded" );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8587
				}
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8588
			};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8589
			
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8590
			var script_swfObj = document.createElement('script');
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8591
			script_swfObj.setAttribute( "type","text/javascript" );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8592
			script_swfObj.setAttribute( "src",libs.swfObject );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8593
			script_swfObj.onload = scriptLoadHandler;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8594
			script_swfObj.onreadystatechange = function () { // Same thing but for IE
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8595
				if ( this.readyState == 'complete' || this.readyState == 'loaded' ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8596
					scriptLoadHandler( "swfobject.js loded" );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8597
				}
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8598
			};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8599
		
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8600
			var script_jqUi = document.createElement( 'script' );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8601
			script_jqUi.setAttribute( "type","text/javascript" );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8602
			script_jqUi.setAttribute( "src",libs.jQueryUI );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8603
			script_jqUi.onload = scriptLoadHandler;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8604
			script_jqUi.onreadystatechange = function () { // Same thing but for IE
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8605
				if ( this.readyState == 'complete' || this.readyState == 'loaded' ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8606
					scriptLoadHandler( "jquery-ui.min.js loded" );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8607
				}
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8608
			};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8609
		
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8610
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8611
			( document.getElementsByTagName("head")[0] || document.documentElement ).appendChild( script_jqUi_tooltip);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8612
			( document.getElementsByTagName("head")[0] || document.documentElement ).appendChild( script_jqUi );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8613
			( document.getElementsByTagName("head")[0] || document.documentElement ).appendChild( script_swfObj );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8614
			
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8615
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8616
		};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8617
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8618
		/******** Called once all lib are loaded ******/
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8619
		var loadLib = 0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8620
		/* FIXME : ugly */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8621
		function scriptLoadHandler( Mylib ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8622
			//alert(Mylib);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8623
			loadLib +=1;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8624
			if( loadLib===3 ) { 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8625
				main(); 			  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8626
			}
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8627
		};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8628
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8629
		/******** Our main function ********/
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8630
		function main() { 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8631
			
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8632
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8633
			//  Make our own IriSP.jQuery and restore window.jQuery if there was one. 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8634
			IriSP.jQuery = window.jQuery.noConflict( true );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8635
			// Call our Jquery
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8636
			IriSP.jQuery( document ).ready( function($) { 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8637
				
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8638
				/******* Load CSS *******/
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8639
				var css_link_jquery = IriSP.jQuery( "<link>", { 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8640
					rel: "stylesheet", 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8641
					type: "text/css", 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8642
					href: libs.cssjQueryUI,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8643
					'class': "dynamic_css"
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8644
				} );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8645
				var css_link_custom = IriSP.jQuery( "<link>", { 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8646
					rel: "stylesheet", 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8647
					type: "text/css", 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8648
					href: customCssPath,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8649
					'class': "dynamic_css"
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8650
				} );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8651
				
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8652
				css_link_jquery.appendTo( 'head' );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8653
				css_link_custom.appendTo( 'head' );   
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8654
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8655
				// to see dynamicly loaded css on IE
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8656
				if ( $.browser.msie ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8657
					$( '.dynamic_css' ).clone().appendTo( 'head' );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8658
				}
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8659
        
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8660
        IriSP.setupDataLoader();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8661
        IriSP.__dataloader.get(metadata_url, 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8662
            function(data) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8663
              /* save the data so that we could re-use it to
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8664
                 configure the video
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8665
              */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8666
              IriSP.__jsonMetadata = data;
29
5d56138abe95 fixing another stupid bug.
hamidouk
parents: 28
diff changeset
  8667
              callback.call(window);             
5d56138abe95 fixing another stupid bug.
hamidouk
parents: 28
diff changeset
  8668
              });
0
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8669
      });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8670
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8671
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8672
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8673
25
4f082f63e295 updated player version.
hamidouk
parents: 24
diff changeset
  8674
IriSP.annotation_template = "{{! template for an annotation displayed in a segmentWidget }}<div title='{{divTitle}}' id='{{id}}'	class='Ldt-iri-chapter' 	style='left: {{startPourcent}}%;          width: {{endPixel}}px;          background-color:#{{hexa_color}};' 	></div>";
9
61d507c98678 bumped the player version.
hamidouk
parents: 0
diff changeset
  8675
IriSP.annotationWidget_template = "{{! template for the annotation widget }}<div class='Ldt-AnnotationsWidget'>  <!-- ugly div because we want to have a double border -->  <div class='Ldt-Annotation-DoubleBorder'>      <div class='Ldt-AnnotationContent'>        <div class='Ldt-AnnotationShareIcons'>         <a class='Ldt-fbShare' href=''><img src='{{img_dir}}/facebook.png' alt='share on facebook'></img></a>         <a class='Ldt-TwShare' href=''><img src='{{img_dir}}/twitter.png' alt='share on twitter'></img></a>         <a class='Ldt-GplusShare' href=''><img src='{{img_dir}}/google.png' alt='share on google+'></img></a>      </div>		  <div class='Ldt-SaTitle'></div>	  	<div class='Ldt-SaDescription'></div>    </div>  </div></div>";
0
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8676
IriSP.annotation_loading_template = "{{! template shown while the annotation widget is loading }}<div id='Ldt-load-container'><div id='Ldt-loader'>&nbsp;</div> Chargement... </div>";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8677
IriSP.arrowWidget_template = "<div class='Ldt-arrowWidget'></div>";
25
4f082f63e295 updated player version.
hamidouk
parents: 24
diff changeset
  8678
IriSP.overlay_marker_template = "{{! the template for the small bars which is z-indexed over our segment widget }}<div class='Ldt-SegmentPositionMarker' style='background-color: #F7268E;'></div>";
0
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8679
IriSP.player_template = "{{! template for the radio player }}<div class='Ldt-controler demo'>	<div class='Ldt-LeftPlayerControls'>    <div class='Ldt-button Ldt-CtrlPlay'></div>		<div class='Ldt-button Ldt-CtrlAnnotate'></div>    <div class='Ldt-button Ldt-CtrlSearch'></div>	</div>		<div class='Ldt-RightPlayerControls'>    <div class='Ldt-Time'>      <div class='Ldt-ElapsedTime'></div>      <div class='Ldt-TimeSeparator'>/</div>      <div class='Ldt-TotalTime'></div>    </div>		<div class='Ldt-button Ldt-CtrlSound'></div>	</div></div>";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8680
IriSP.search_template = "{{! template for the search container }}<div class='LdtSearchContainer'	style='margin-left: {{margin_left}}; position: absolute; margin-top: -60px;'>	<div class='LdtSearch'		style='display: none; background-color: #EEE; width: 165px; boder: 1px; border-color: #CFCFCF; position: absolute; text-align: center;'>		<input class='LdtSearchInput'			style='margin-top: 2px; margin-bottom: 2px;' />	</div></div><div class='cleaner'></div>";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8681
IriSP.share_template = "{{! social network sharing template }}<a onclick='__IriSP.MyApiPlayer.share(\'delicious\');' title='partager avec delicious'><span class='share shareDelicious'>&nbsp;</span></a>		<a onclick='__IriSP.MyApiPlayer.share(\'facebook\');' title='partager avec facebook'> <span class='share shareFacebook'>&nbsp;</span></a><a onclick='__IriSP.MyApiPlayer.share(\'twitter\');' title='partager avec twitter'>  <span class='share shareTwitter'>&nbsp;</span></a><a onclick='__IriSP.MyApiPlayer.share(\'myspace\');' title='partager avec Myspace'>  <span class='share shareMySpace'>&nbsp;</span></a>";
9
61d507c98678 bumped the player version.
hamidouk
parents: 0
diff changeset
  8682
IriSP.sliderWidget_template = "{{! template for the slider widget - it's composed of two divs we one overlayed on top    of the other }}<div class='Ldt-sliderBackground'></div><div class='Ldt-sliderForeground'></div><div class='Ldt-sliderPositionMarker'></div>";
0
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8683
IriSP.tooltip_template = "{{! template used by the jquery ui tooltip }}<div class='Ldt-tooltip'>  <div class='title'>{{title}}</div>  <div class='time'>{{begin}} : {{end}} </div>  <div class='description'>{{description}}</div></div>";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8684
IriSP.tooltipWidget_template = "{{! template for the tooltip widget }}<div class='tip'>	<div class='tipcolor' style='height:10px;width:10px'></div>	<div class='tiptext'></div>";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8685
IriSP.tweetWidget_template = "{{! template for the tweet widget }}<div class='Ldt-tweetWidget'>  <div class='Ldt-tweet-DoubleBorder'>      <img src='{{img_dir}}/minimize.png' class='Ldt-tweetWidgetKeepOpen' alt='dont minimize automatically'></img>      <img src='{{img_dir}}/minimize.png' class='Ldt-tweetWidgetMinimize' alt='minimize window'></img>      <div class='Ldt-tweetAvatar'></div>      <img src='{{img_dir}}/profile_arrow.png' class='Ldt-tweetAvatar-profileArrow'></img>      <div class='Ldt-tweetContents'></div>      <a href='' target='_blank' class='Ldt-Retweet'><div class='Ldt-RetweetIcon'></div> - Retweet </a>      <a href='' target='_blank' class='Ldt-TweetReply'><div class='Ldt-TweetReplyIcon'></div> - Reply</a>  </div></div>";/* wrapper that simulates popcorn.js because
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8686
   popcorn is a bit unstable at the time */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8687
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8688
IriSP.PopcornReplacement = {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8689
  msgPump : {} /* used by jquery to receive and send messages */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8690
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8691
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8692
IriSP.PopcornReplacement.media = { 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8693
  "paused": true,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8694
  "muted": false
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8695
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8696
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8697
IriSP.PopcornReplacement.listen = function(msg, callback) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8698
//  IriSP.jQuery(IriSP.PopcornReplacement.msgPump).bind(msg, function(event, rest) { callback(rest); });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8699
  if (!IriSP.PopcornReplacement.msgPump.hasOwnProperty(msg))
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8700
    IriSP.PopcornReplacement.msgPump[msg] = [];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8701
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8702
  IriSP.PopcornReplacement.msgPump[msg].push(callback);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8703
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8704
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8705
IriSP.PopcornReplacement.trigger = function(msg, params) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8706
//  IriSP.jQuery(IriSP.PopcornReplacement.msgPump).trigger(msg, params);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8707
  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8708
  if (!IriSP.PopcornReplacement.msgPump.hasOwnProperty(msg))
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8709
    return;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8710
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8711
  var d = IriSP.PopcornReplacement.msgPump[msg];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8712
  for(var entry in d) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8713
    d[entry].call(window, params);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8714
  }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8715
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8716
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8717
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8718
IriSP.PopcornReplacement.guid = function(prefix) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8719
  var str = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8720
      var r = Math.random()*16|0, v = c == 'x' ? r : (r&0x3|0x8);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8721
      return v.toString(16);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8722
   });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8723
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8724
  return prefix + str;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8725
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8726
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8727
IriSP.PopcornReplacement.__initApi = function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8728
  IriSP.PopcornReplacement.trigger("loadedmetadata"); // we've done more than loading metadata of course,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8729
                                                      // but popcorn doesn't need to know more.
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8730
  IriSP.PopcornReplacement.media.muted = jwplayer(IriSP.PopcornReplacement._container).getMute();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8731
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8732
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8733
IriSP.PopcornReplacement.jwplayer = function(container, options) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8734
  IriSP.PopcornReplacement._container = container.slice(1); //eschew the '#'
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8735
  options.events = {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8736
      onReady: IriSP.PopcornReplacement.__initApi,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8737
      onTime: IriSP.PopcornReplacement.__timeHandler,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8738
      onPlay: IriSP.PopcornReplacement.__playHandler,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8739
      onPause: IriSP.PopcornReplacement.__pauseHandler,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8740
      onSeek: IriSP.PopcornReplacement.__seekHandler 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8741
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8742
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8743
  jwplayer(IriSP.PopcornReplacement._container).setup(options);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8744
  IriSP.PopcornReplacement.media.duration = options.duration;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8745
  return IriSP.PopcornReplacement;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8746
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8747
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8748
IriSP.PopcornReplacement.currentTime = function(time) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8749
  if (typeof(time) === "undefined") {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8750
      return jwplayer(IriSP.PopcornReplacement._container).getPosition();            
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8751
  } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8752
     var currentTime = +time;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8753
     jwplayer( IriSP.PopcornReplacement._container ).seek( currentTime );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8754
     IriSP.PopcornReplacement.trigger("seeked");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8755
     return jwplayer(IriSP.PopcornReplacement._container).getPosition();            
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8756
  }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8757
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8758
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8759
IriSP.PopcornReplacement.play = function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8760
      IriSP.PopcornReplacement.media.paused = false;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8761
      IriSP.PopcornReplacement.trigger("play");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8762
//      IriSP.PopcornReplacement.trigger("playing");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8763
      jwplayer( IriSP.PopcornReplacement._container ).play();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8764
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8765
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8766
IriSP.PopcornReplacement.pause = function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8767
      if ( !IriSP.PopcornReplacement.media.paused ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8768
        IriSP.PopcornReplacement.media.paused = true;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8769
        IriSP.PopcornReplacement.trigger( "pause" );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8770
        jwplayer( IriSP.PopcornReplacement._container ).pause();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8771
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8772
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8773
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8774
IriSP.PopcornReplacement.muted = function(val) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8775
  if (typeof(val) !== "undefined") {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8776
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8777
    if (jwplayer(IriSP.PopcornReplacement._container).getMute() !== val) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8778
      if (val) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8779
        jwplayer(IriSP.PopcornReplacement._container).setMute(true);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8780
        IriSP.PopcornReplacement.media.muted = true;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8781
      } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8782
        jwplayer( IriSP.PopcornReplacement._container ).setMute(false);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8783
        IriSP.PopcornReplacement.media.muted = false;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8784
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8785
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8786
      IriSP.PopcornReplacement.trigger( "volumechange" );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8787
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8788
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8789
    return jwplayer( IriSP.PopcornReplacement._container ).getMute();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8790
  } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8791
    return jwplayer( IriSP.PopcornReplacement._container ).getMute();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8792
  }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8793
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8794
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8795
IriSP.PopcornReplacement.mute = IriSP.PopcornReplacement.muted;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8796
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8797
IriSP.PopcornReplacement.__codes = [];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8798
IriSP.PopcornReplacement.code = function(options) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8799
  IriSP.PopcornReplacement.__codes.push(options);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8800
  return IriSP.PopcornReplacement;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8801
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8802
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8803
IriSP.PopcornReplacement.__runCode = function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8804
  var currentTime = jwplayer(IriSP.PopcornReplacement._container).getPosition();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8805
  var i = 0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8806
  for(i = 0; i < IriSP.PopcornReplacement.__codes.length; i++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8807
    var c = IriSP.PopcornReplacement.__codes[i];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8808
    if (currentTime == c.start) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8809
      c.onStart();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8810
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8811
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8812
    if (currentTime == c.end) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8813
      c.onEnd();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8814
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8815
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8816
  }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8817
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8818
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8819
/* called everytime the player updates itself 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8820
   (onTime event)
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8821
 */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8822
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8823
IriSP.PopcornReplacement.__timeHandler = function(event) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8824
  var pos = event.position;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8825
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8826
  var i = 0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8827
  for(i = 0; i < IriSP.PopcornReplacement.__codes.length; i++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8828
     var c = IriSP.PopcornReplacement.__codes[i];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8829
     
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8830
     if (pos >= c.start && pos < c.end && 
22
11011b712cf2 updated player version.
hamidouk
parents: 17
diff changeset
  8831
         pos - 0.1 <= c.start) {       
0
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8832
        c.onStart();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8833
     }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8834
 
22
11011b712cf2 updated player version.
hamidouk
parents: 17
diff changeset
  8835
     if (pos > c.start && pos > c.end && 
0
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8836
         pos - 0.1 <= c.end) {
22
11011b712cf2 updated player version.
hamidouk
parents: 17
diff changeset
  8837
         console.log("eonedn");
0
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8838
        c.onEnd();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8839
     }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8840
   
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8841
  }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8842
 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8843
  IriSP.PopcornReplacement.trigger("timeupdate");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8844
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8845
22
11011b712cf2 updated player version.
hamidouk
parents: 17
diff changeset
  8846
IriSP.PopcornReplacement.__seekHandler = function(event) {
0
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8847
  var i = 0;
22
11011b712cf2 updated player version.
hamidouk
parents: 17
diff changeset
  8848
  
0
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8849
  for(i = 0; i < IriSP.PopcornReplacement.__codes.length; i++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8850
     var c = IriSP.PopcornReplacement.__codes[i];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8851
    
22
11011b712cf2 updated player version.
hamidouk
parents: 17
diff changeset
  8852
     if (event.position >= c.start && event.position < c.end) {        
0
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8853
        c.onEnd();
22
11011b712cf2 updated player version.
hamidouk
parents: 17
diff changeset
  8854
     }         
11011b712cf2 updated player version.
hamidouk
parents: 17
diff changeset
  8855
   }
11011b712cf2 updated player version.
hamidouk
parents: 17
diff changeset
  8856
11011b712cf2 updated player version.
hamidouk
parents: 17
diff changeset
  8857
   for(i = 0; i < IriSP.PopcornReplacement.__codes.length; i++) {
11011b712cf2 updated player version.
hamidouk
parents: 17
diff changeset
  8858
     var c = IriSP.PopcornReplacement.__codes[i];
11011b712cf2 updated player version.
hamidouk
parents: 17
diff changeset
  8859
0
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8860
     if (typeof(event.offset) === "undefined")
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8861
       event.offset = 0;
22
11011b712cf2 updated player version.
hamidouk
parents: 17
diff changeset
  8862
           
11011b712cf2 updated player version.
hamidouk
parents: 17
diff changeset
  8863
     if (event.offset >= c.start && event.offset < c.end) { 
0
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8864
       c.onStart();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8865
     }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8866
     
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8867
   }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8868
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8869
  IriSP.PopcornReplacement.trigger("timeupdate");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8870
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8871
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8872
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8873
IriSP.PopcornReplacement.__playHandler = function(event) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8874
  IriSP.PopcornReplacement.media.paused = false;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8875
  IriSP.PopcornReplacement.trigger("play");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8876
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8877
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8878
IriSP.PopcornReplacement.__pauseHandler = function(event) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8879
  IriSP.PopcornReplacement.media.paused = true;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8880
  IriSP.PopcornReplacement.trigger("pause");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8881
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8882
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8883
IriSP.PopcornReplacement.roundTime = function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8884
  var currentTime = IriSP.PopcornReplacement.currentTime();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8885
  return Math.round(currentTime);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8886
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8887
/* utils.js - various utils that don't belong anywhere else */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8888
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8889
/* trace function, for debugging */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8890
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8891
IriSP.traceNum = 0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8892
IriSP.trace = function( msg, value ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8893
/*
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8894
	if( IriSP.config.gui.debug === true ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8895
		IriSP.traceNum += 1;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8896
		IriSP.jQuery( "<div>"+IriSP.traceNum+" - "+msg+" : "+value+"</div>" ).appendTo( "#Ldt-output" );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8897
	}
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8898
*/
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8899
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8900
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8901
/* used in callbacks - because in callbacks we lose "this",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8902
   we need to have a special function which wraps "this" in 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8903
   a closure. This way, the 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8904
*/   
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8905
IriSP.wrap = function (obj, fn) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8906
  return function() {    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8907
    var args = Array.prototype.slice.call(arguments, 0);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8908
    return fn.apply(obj, args);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8909
  }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8910
}
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8911
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8912
/* convert a time to a percentage in the media */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8913
IriSP.timeToPourcent = function(time, timetotal){
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8914
	var time = Math.abs(time);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8915
  var timetotal = Math.abs(timetotal);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8916
  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8917
	return Math.floor((time/timetotal) * 100);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8918
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8919
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8920
IriSP.padWithZeros = function(num) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8921
  if (Math.abs(num) < 10) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8922
    return "0" + num.toString();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8923
  } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8924
    return num.toString();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8925
  }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8926
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8927
/* convert a number of seconds to a tuple of the form 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8928
   [hours, minutes, seconds]
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8929
*/
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8930
IriSP.secondsToTime = function(secs) {  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8931
  var hours = Math.abs(parseInt( secs / 3600 ) % 24);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8932
  var minutes = Math.abs(parseInt( secs / 60 ) % 60);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8933
  var seconds = parseFloat(Math.abs(secs % 60).toFixed(0));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8934
  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8935
  var toString_fn = function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8936
    var ret = "";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8937
    if (hours > 0)
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8938
       ret = IriSP.padWithZeros(this.hours) + ":";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8939
    ret += IriSP.padWithZeros(this.minutes) + ":" + IriSP.padWithZeros(this.seconds);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8940
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8941
    return ret;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8942
  }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8943
  return {"hours" : hours, "minutes" : minutes, "seconds" : seconds, toString: toString_fn};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8944
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8945
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8946
IriSP.secondsToString
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8947
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8948
/* format a tweet - replaces @name by a link to the profile, #hashtag, etc. */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8949
IriSP.formatTweet = function(tweet) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8950
  /*
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8951
    an array of arrays which hold a regexp and its replacement.
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8952
  */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8953
  var regExps = [
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8954
    /* copied from http://codegolf.stackexchange.com/questions/464/shortest-url-regex-match-in-javascript/480#480 */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8955
    [/((https?:\/\/)?[\w-]+(\.[\w-]+)+\.?(:\d+)?(\/\S*)?)/gi, "<a href='$1'>$1</a>"],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8956
    [/@(\w+)/gi, "<a href='http://twitter.com/$1'>@$1</a>"], // matches a @handle
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8957
    [/#(\w+)/gi, "<a href='http://twitter.com/search?q=%23$1'>#$1</a>"],// matches a hashtag
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8958
    [/(\+\+)/gi, "<span class='Ldt-PolemicPlusPlus'>$1</span>"],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8959
    [/(--)/gi, "<span class='Ldt-PolemicMinusMinus'>$1</span>"],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8960
    [/(==)/gi, "<span class='Ldt-PolemicEqualEqual'>$1</span>"],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8961
    [/(\?\?)/gi, "<span class='Ldt-PolemicQuestion'>$1</span>"]
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8962
  ]; 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8963
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8964
  var i = 0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8965
  for(i = 0; i < regExps.length; i++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8966
     tweet = tweet.replace(regExps[i][0], regExps[i][1]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8967
  }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8968
  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8969
  return tweet;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8970
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8971
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8972
IriSP.countProperties = function(obj) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8973
    var count = 0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8974
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8975
    for(var prop in obj) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8976
        if(obj.hasOwnProperty(prop))
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8977
                ++count;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8978
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8979
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8980
    return count;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8981
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8982
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8983
// conversion de couleur Decimal vers HexaDecimal || 000 si fff
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8984
IriSP.DEC_HEXA_COLOR = function (dec) {
24
36df3a25d7bd updated version.
hamidouk
parents: 23
diff changeset
  8985
	 var hexa='0123456789ABCDEF';
36df3a25d7bd updated version.
hamidouk
parents: 23
diff changeset
  8986
   var hex='';
0
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8987
	 var tmp;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8988
	 while (dec>15){
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8989
		  tmp = dec-(Math.floor(dec/16))*16;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8990
		  hex = hexa.charAt(tmp)+hex;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8991
		  dec = Math.floor(dec/16);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8992
	 }
12
dbcb0dc6a844 updated player.
hamidouk
parents: 10
diff changeset
  8993
	 hex = hexa.charAt(dec)+hex;	 
0
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8994
	 return(hex);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8995
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8996
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8997
/* shortcut to have global variables in templates */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8998
IriSP.templToHTML = function(template, values) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  8999
  var params = IriSP.jQuery.extend(IriSP.default_templates_vars, values);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9000
  return Mustache.to_html(template, params);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9001
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9002
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9003
/* we need to be stricter than encodeURIComponent,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9004
   because of twitter
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9005
*/  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9006
IriSP.encodeURI = function(str) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9007
  return encodeURIComponent(str).replace(/!/g, '%21').replace(/'/g, '%27').replace(/\(/g, '%28').  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9008
                                 replace(/\)/g, '%29').replace(/\*/g, '%2A');  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9009
}  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9010
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9011
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9012
/* for ie compatibility
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9013
if (Object.prototype.__defineGetter__&&!Object.defineProperty) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9014
   Object.defineProperty=function(obj,prop,desc) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9015
      if ("get" in desc) obj.__defineGetter__(prop,desc.get);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9016
      if ("set" in desc) obj.__defineSetter__(prop,desc.set);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9017
   }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9018
}
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9019
*/
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9020
/* data.js - this file deals with how the players gets and sends data */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9021
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9022
IriSP.DataLoader = function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9023
  this._cache = {};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9024
  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9025
  /*
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9026
    A structure to hold callbacks for specific urls. We need it because
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9027
    ajax calls are asynchronous, so it means that sometimes we ask
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9028
    multiple times for a ressource because the first call hasn't been
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9029
    received yet.
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9030
  */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9031
  this._callbacks = {};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9032
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9033
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9034
IriSP.DataLoader.prototype.get = function(url, callback) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9035
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9036
  var base_url = url.split("&")[0]
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9037
  if (this._cache.hasOwnProperty(base_url)) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9038
    callback(this._cache[base_url]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9039
  } else {  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9040
    if (!this._callbacks.hasOwnProperty(base_url)) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9041
      this._callbacks[base_url] = [];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9042
      this._callbacks[base_url].push(callback);   
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9043
      /* we need a closure because this gets lost when it's called back */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9044
  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9045
      // uncomment you don't want to use caching.
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9046
      // IriSP.jQuery.get(url, callback);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9047
      
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9048
      var func = function(data) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9049
                  this._cache[base_url] = data;                                
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9050
                  var i = 0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9051
                  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9052
                  for (i = 0; i < this._callbacks[base_url].length; i++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9053
                    this._callbacks[base_url][i](this._cache[base_url]);                                  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9054
                  }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9055
      };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9056
      
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9057
      /* automagically choose between json and jsonp */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9058
      if (url.indexOf(document.location.hostname) === -1 &&
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9059
          url.indexOf("http://") !== -1 /* not a relative url */ ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9060
        // we contacting a foreign domain, use JSONP
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9061
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9062
        IriSP.jQuery.get(url, {}, IriSP.wrap(this, func), "jsonp");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9063
      } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9064
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9065
        // otherwise, hey, whatever rows your boat
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9066
        IriSP.jQuery.get(url, IriSP.wrap(this, func));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9067
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9068
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9069
    } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9070
      /* simply push the callback - it'll get called when the ressource
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9071
         has been received */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9072
      
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9073
      this._callbacks[base_url].push(callback);   
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9074
   
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9075
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9076
  }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9077
}
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9078
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9079
/* the base abstract "class" */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9080
IriSP.Serializer = function(DataLoader, url) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9081
  this._DataLoader = DataLoader;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9082
  this._url = url;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9083
  this._data = [];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9084
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9085
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9086
IriSP.Serializer.prototype.serialize = function(data) { };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9087
IriSP.Serializer.prototype.deserialize = function(data) {};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9088
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9089
IriSP.Serializer.prototype.currentMedia = function() {  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9090
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9091
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9092
IriSP.Serializer.prototype.sync = function(callback) {  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9093
  callback.call(this, this._data);  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9094
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9095
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9096
IriSP.SerializerFactory = function(DataLoader) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9097
  this._dataloader = DataLoader;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9098
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9099
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9100
IriSP.SerializerFactory.prototype.getSerializer = function(metadataOptions) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9101
  /* This function returns serializer set-up with the correct
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9102
     configuration - takes a metadata struct describing the metadata source
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9103
  */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9104
  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9105
  if (metadataOptions === undefined)
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9106
    /* return an empty serializer */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9107
    return IriSP.Serializer("", "");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9108
            
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9109
  switch(metadataOptions.type) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9110
    case "json":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9111
      return new IriSP.JSONSerializer(this._dataloader, metadataOptions.src);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9112
      break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9113
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9114
    case "dummy": /* only used for unit testing - not defined in production */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9115
      return new IriSP.MockSerializer(this._dataloader, metadataOptions.src);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9116
      break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9117
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9118
    case "empty":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9119
      return new IriSP.Serializer("", "empty");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9120
      break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9121
      
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9122
    default:      
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9123
      return undefined;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9124
  }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9125
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9126
/* site.js - all our site-dependent config : player chrome, cdn locations, etc...*/
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9127
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9128
IriSP.lib = { 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9129
		jQuery : "http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.js",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9130
		jQueryUI : "http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.4/jquery-ui.js",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9131
		jQueryToolTip : "http://cdn.jquerytools.org/1.2.4/all/jquery.tools.min.js",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9132
		swfObject : "http://ajax.googleapis.com/ajax/libs/swfobject/2.2/swfobject.js",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9133
		cssjQueryUI : "http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.4/themes/base/jquery-ui.css",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9134
    popcorn : "src/js/libs/popcorn.js",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9135
    jwplayer : "src/js/libs/jwplayer.js",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9136
    "popcorn.mediafragment" : "src/js/libs/popcorn.mediafragment.js",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9137
    "popcorn.code" : "src/js/libs/popcorn.code.js",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9138
    "popcorn.jwplayer": "src/js/libs/popcorn.jwplayer.js",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9139
    "popcorn.youtube": "src/js/libs/popcorn.youtube.js",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9140
     raphael: "src/js/libs/raphael.js"
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9141
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9142
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9143
//Player Configuration 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9144
IriSP.config = undefined;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9145
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9146
IriSP.widgetsDefaults = {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9147
  "LayoutManager" : {spacer_div_height : "0px" },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9148
  "PlayerWidget" : {},
9
61d507c98678 bumped the player version.
hamidouk
parents: 0
diff changeset
  9149
  "AnnotationsWidget": {
61d507c98678 bumped the player version.
hamidouk
parents: 0
diff changeset
  9150
    "share_text" : "I'm watching ",     
61d507c98678 bumped the player version.
hamidouk
parents: 0
diff changeset
  9151
    "fb_link" : "http://www.facebook.com/share.php?u=",
61d507c98678 bumped the player version.
hamidouk
parents: 0
diff changeset
  9152
    "tw_link" : "http://twitter.com/home?status=",
61d507c98678 bumped the player version.
hamidouk
parents: 0
diff changeset
  9153
    "gplus_link" : ""
61d507c98678 bumped the player version.
hamidouk
parents: 0
diff changeset
  9154
    },
0
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9155
  "TweetsWidget" : {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9156
      default_profile_picture : "https://si0.twimg.com/sticky/default_profile_images/default_profile_1_normal.png",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9157
      tweet_display_period: 10000 // how long do we show a tweet ?
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9158
  },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9159
  "SliderWidget" : {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9160
      minimize_period: 850 // how long does the slider stays maximized after the user leaves the zone ?
29
5d56138abe95 fixing another stupid bug.
hamidouk
parents: 28
diff changeset
  9161
  },
5d56138abe95 fixing another stupid bug.
hamidouk
parents: 28
diff changeset
  9162
  "Main" : {
5d56138abe95 fixing another stupid bug.
hamidouk
parents: 28
diff changeset
  9163
      autoplay: true
0
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9164
  }
29
5d56138abe95 fixing another stupid bug.
hamidouk
parents: 28
diff changeset
  9165
  
0
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9166
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9167
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9168
IriSP.paths = {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9169
//  "imgs": "/tweetlive/res/metadataplayer/src/css/imgs"
9
61d507c98678 bumped the player version.
hamidouk
parents: 0
diff changeset
  9170
  "imgs": "imgs"
0
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9171
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9172
IriSP.default_templates_vars = {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9173
  "img_dir" : IriSP.paths.imgs 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9174
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9175
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9176
/* ui.js - ui related functions */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9177
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9178
/* FIXME: use an sharing library */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9179
IriSP.LdtShareTool = IriSP.share_template; /* the contents come from share.html */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9180
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9181
IriSP.createPlayerChrome = function(){
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9182
	var width = IriSP.config.gui.width;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9183
	var height = IriSP.config.gui.height;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9184
	var heightS = IriSP.config.gui.height-20;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9185
	
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9186
	// AUDIO  */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9187
	// PB dans le html : ; 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9188
	IriSP.trace( "__IriSP.createMyHtml",IriSP.config.gui.container );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9189
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9190
	
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9191
	/* FIXME : factor this in another file */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9192
	if( IriSP.config.gui.mode=="radio" ){
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9193
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9194
		IriSP.jQuery( "#"+IriSP.config.gui.container ).before(IriSP.search_template);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9195
		var radioPlayer = Mustache.to_html(IriSP.radio_template, {"share_template" : IriSP.share_template});
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9196
		IriSP.jQuery(radioPlayer).appendTo("#"+IriSP.config.gui.container);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9197
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9198
		// special tricks for IE 7
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9199
		if (IriSP.jQuery.browser.msie==true && IriSP.jQuery.browser.version=="7.0"){
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9200
			//LdtSearchContainer
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9201
			//__IriSP.jQuery("#LdtPlayer").attr("margin-top","50px");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9202
			IriSP.jQuery("#Ldt-Root").css("padding-top","25px");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9203
			IriSP.trace("__IriSP.createHtml","IE7 SPECIAL ");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9204
		}
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9205
	} else if(IriSP.config.gui.mode=="video") {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9206
	
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9207
		var videoPlayer = Mustache.to_html(IriSP.video_template, {"share_template" : IriSP.share_template, "heightS" : heightS});
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9208
		IriSP.jQuery(videoPlayer).appendTo("#"+IriSP.config.gui.container);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9209
	}
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9210
	
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9211
	IriSP.jQuery("#Ldt-Annotations").width(width-(75*2));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9212
	IriSP.jQuery("#Ldt-Show-Arrow-container").width(width-(75*2));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9213
	IriSP.jQuery("#Ldt-ShowAnnotation-audio").width(width-10);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9214
	IriSP.jQuery("#Ldt-ShowAnnotation-video").width(width-10);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9215
	IriSP.jQuery("#Ldt-SaKeyword").width(width-10);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9216
	IriSP.jQuery("#Ldt-controler").width(width-10);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9217
	IriSP.jQuery("#Ldt-Control").attr("z-index","100");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9218
	IriSP.jQuery("#Ldt-controler").hide();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9219
	
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9220
	IriSP.jQuery(IriSP.annotation_loading_template).appendTo("#Ldt-ShowAnnotation-audio");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9221
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9222
	if(IriSP.config.gui.mode=='radio'){
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9223
		IriSP.jQuery("#Ldt-load-container").attr("width",IriSP.config.gui.width);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9224
	}
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9225
	// Show or not the output
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9226
	if(IriSP.config.gui.debug===true){
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9227
		IriSP.jQuery("#Ldt-output").show();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9228
	} else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9229
		IriSP.jQuery("#Ldt-output").hide();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9230
	}
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9231
	
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9232
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9233
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9234
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9235
/* create the buttons and the slider   */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9236
IriSP.createInterface = function( width, height, duration ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9237
		
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9238
		IriSP.jQuery( "#Ldt-controler" ).show();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9239
		//__IriSP.jQuery("#Ldt-Root").css('display','visible');
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9240
		IriSP.trace( "__IriSP.createInterface" , width+","+height+","+duration+"," );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9241
		
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9242
		IriSP.jQuery( "#Ldt-ShowAnnotation").click( function () { 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9243
			 //__IriSP.jQuery(this).slideUp(); 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9244
		} );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9245
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9246
		var LdtpPlayerY = IriSP.jQuery("#Ldt-PlaceHolder").attr("top");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9247
		var LdtpPlayerX = IriSP.jQuery("#Ldt-PlaceHolder").attr("left");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9248
		
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9249
		IriSP.jQuery( "#slider-range-min" ).slider( { //range: "min",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9250
			value: 0,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9251
			min: 1,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9252
			max: duration/1000,//1:54:52.66 = 3600+3240+
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9253
			step: 0.1,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9254
			slide: function(event, ui) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9255
				
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9256
				//__IriSP.jQuery("#amount").val(ui.value+" s");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9257
				//player.sendEvent('SEEK', ui.value)
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9258
				IriSP.MyApiPlayer.seek(ui.value);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9259
				//changePageUrlOffset(ui.value);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9260
				//player.sendEvent('PAUSE')
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9261
			}
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9262
		} );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9263
		
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9264
		IriSP.trace("__IriSP.createInterface","ICI");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9265
		IriSP.jQuery("#amount").val(IriSP.jQuery("#slider-range-min").slider("value")+" s");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9266
		IriSP.jQuery(".Ldt-Control1 button:first").button({
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9267
			icons: {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9268
				primary: 'ui-icon-play'
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9269
			},
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9270
			text: false
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9271
		}).next().button({
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9272
			icons: {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9273
				primary: 'ui-icon-seek-next'
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9274
			},
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9275
			 text: false
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9276
		});
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9277
		IriSP.jQuery(".Ldt-Control2 button:first").button({
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9278
			icons: {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9279
				primary: 'ui-icon-search'//,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9280
				//secondary: 'ui-icon-volume-off'
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9281
			},
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9282
			text: false
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9283
		}).next().button({
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9284
			icons: {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9285
				primary: 'ui-icon-volume-on'
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9286
			},
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9287
			 text: false
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9288
		});
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9289
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9290
		// /!\ PB A MODIFIER 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9291
		//__IriSP.MyTags.draw();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9292
		IriSP.trace("__IriSP.createInterface","ICI2");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9293
		IriSP.jQuery( "#ldt-CtrlPlay" ).attr( "style", "background-color:#CD21C24;" );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9294
		
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9295
		IriSP.jQuery( "#Ldt-load-container" ).hide();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9296
		
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9297
		if( IriSP.config.gui.mode=="radio" & IriSP.jQuery.browser.msie != true ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9298
			IriSP.jQuery( "#Ldtplayer1" ).attr( "height", "0" );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9299
		}
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9300
		IriSP.trace( "__IriSP.createInterface" , "3" );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9301
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9302
		IriSP.trace( "__IriSP.createInterface", "END" );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9303
		
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9304
	};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9305
/* the widget classes and definitions */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9306
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9307
IriSP.Widget = function(Popcorn, config, Serializer) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9308
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9309
  if (config === undefined || config === null) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9310
    config = {}
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9311
  }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9312
  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9313
  this._Popcorn = Popcorn;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9314
  this._config = config;  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9315
  this._serializer = Serializer;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9316
  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9317
  if (config.hasOwnProperty("container")) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9318
     this._id = config.container;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9319
     this.selector = IriSP.jQuery("#" + this._id);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9320
  }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9321
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9322
  if (config.hasOwnProperty("spacer")) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9323
     this._spacerId = config.spacer;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9324
     this.spacer = IriSP.jQuery("#" + this._spacerId);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9325
  }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9326
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9327
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9328
  if (config.hasOwnProperty("width")) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9329
     // this.width and not this._width because we consider it public.
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9330
     this.width = config.width;     
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9331
  }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9332
  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9333
  if (config.hasOwnProperty("height")) {    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9334
     this.height = config.height;     
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9335
  }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9336
  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9337
  if (config.hasOwnProperty("heightmax")) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9338
     this.heightmax = config.heightmax;     
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9339
  }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9340
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9341
  if (config.hasOwnProperty("widthmax")) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9342
     this.widthmax = config.widthmax;     
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9343
  }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9344
  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9345
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9346
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9347
IriSP.Widget.prototype.draw = function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9348
  /* implemented by "sub-classes" */  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9349
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9350
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9351
IriSP.Widget.prototype.redraw = function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9352
  /* implemented by "sub-classes" */  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9353
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9354
/* modules are non-graphical entities, similar to widgets */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9355
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9356
IriSP.Module = function(Popcorn, config, Serializer) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9357
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9358
  if (config === undefined || config === null) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9359
    config = {}
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9360
  }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9361
  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9362
  this._Popcorn = Popcorn;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9363
  this._config = config;  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9364
  this._serializer = Serializer;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9365
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9366
/* layout.js - very basic layout management */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9367
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9368
/*
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9369
  a layout manager manages a div and the layout of objects
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9370
  inside it.
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9371
*/
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9372
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9373
IriSP.LayoutManager = function(options) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9374
    this._Popcorn = null;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9375
    this._widgets = [];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9376
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9377
    this._div = "LdtPlayer";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9378
    this._width = 640;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9379
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9380
    if (options === undefined) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9381
      options = {};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9382
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9383
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9384
    if (options.hasOwnProperty('container')) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9385
      this._div = options.container;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9386
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9387
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9388
    if (options.hasOwnProperty('width')) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9389
      this._width = options.width;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9390
    }    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9391
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9392
    if (options.hasOwnProperty('height')) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9393
      this._height = options.height;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9394
    } 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9395
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9396
    /* this is a shortcut */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9397
    this.selector = IriSP.jQuery("#" + this._div);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9398
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9399
    this.selector.css("width", this._width);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9400
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9401
    if (this._height !== undefined)
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9402
      this.selector.css("height", this._height);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9403
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9404
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9405
/* we need this special setter because of a chicken and egg problem :
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9406
   we want the manager to use popcorn but the popcorn div will be managed
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9407
   by the manager. So we need a way to set the instance the manager uses
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9408
*/
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9409
   
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9410
IriSP.LayoutManager.prototype.setPopcornInstance = function(popcorn) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9411
    this._Popcorn = popcorn;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9412
}
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9413
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9414
/* stem is a string to append to the id of the widget */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9415
IriSP.LayoutManager.prototype.createDiv = function(stem) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9416
    if (typeof(stem) === "undefined")
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9417
       stem = "";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9418
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9419
    var newDiv = Popcorn.guid(this._div + "_widget_" + stem + "_");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9420
    var spacerDiv = Popcorn.guid("LdtPlayer_spacer_");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9421
    this._widgets.push(newDiv);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9422
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9423
    var divTempl = "<div id='{{id}}' style='width: {{width}}px; position: relative;'></div";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9424
    var spacerTempl = "<div id='{{spacer_id}}' style='width: {{width}}px; position: relative; height: {{spacer_div_height}};'></div";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9425
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9426
    var divCode = Mustache.to_html(divTempl, {id: newDiv, width: this._width});
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9427
    var spacerCode = Mustache.to_html(spacerTempl, {spacer_id: spacerDiv, width: this._width,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9428
                                                    spacer_div_height: IriSP.widgetsDefaults.LayoutManager.spacer_div_height });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9429
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9430
    this.selector.append(divCode);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9431
    this.selector.append(spacerCode);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9432
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9433
    return [newDiv, spacerDiv];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9434
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9435
/* init.js - initialization and configuration of Popcorn and the widgets
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9436
exemple json configuration:
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9437
 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9438
 */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9439
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9440
IriSP.setupDataLoader = function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9441
  /* we set it up separately because we need to
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9442
     get data at the very beginning, for instance when
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9443
     setting up the video */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9444
  IriSP.__dataloader = new IriSP.DataLoader();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9445
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9446
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9447
IriSP.configurePopcorn = function (layoutManager, options) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9448
    var pop;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9449
    var ret = layoutManager.createDiv(); 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9450
    var containerDiv = ret[0];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9451
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9452
    switch(options.type) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9453
      /*
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9454
        todo : dynamically create the div/video tag which
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9455
        will contain the video.
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9456
      */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9457
      case "html5":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9458
           var tmpId = Popcorn.guid("video"); 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9459
           IriSP.jQuery("#" + containerDiv).append("<video src='" + options.file + "' id='" + tmpId + "'></video>");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9460
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9461
           if (options.hasOwnProperty("width"))
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9462
             IriSP.jQuery("#" + containerDiv).css("width", options.width);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9463
           
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9464
           if (options.hasOwnProperty("height"))
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9465
             IriSP.jQuery("#" + containerDiv).css("height", options.height);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9466
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9467
           pop = Popcorn("#" + tmpId).mediafragment({start : 0});
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9468
        break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9469
        
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9470
      case "jwplayer":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9471
          var opts = IriSP.jQuery.extend({}, options);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9472
          delete opts.container;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9473
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9474
          if (options.provider === "rtmp") {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9475
            /* exit if we can't access the metadata */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9476
            if (typeof(IriSP.__jsonMetadata) === "undefined") {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9477
                break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9478
            };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9479
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9480
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9481
            // the json format is totally illogical
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9482
            opts.streamer = IriSP.__jsonMetadata["medias"][0]["meta"]["item"]["value"];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9483
            var source = IriSP.__jsonMetadata["medias"][0]["href"];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9484
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9485
            // the source if a full url but jwplayer wants an url relative to the
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9486
            // streamer url, so we've got to remove the common part.
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9487
            opts.file = source.slice(opts.streamer.length);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9488
          } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9489
            /* other providers type, video for instance -
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9490
               pass everything as is */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9491
          }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9492
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9493
          pop = IriSP.PopcornReplacement.jwplayer("#" + containerDiv, opts);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9494
        break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9495
      
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9496
      case "youtube":
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9497
          var opts = IriSP.jQuery.extend({}, options);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9498
          delete opts.container;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9499
          opts.controls = 0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9500
          opts.autostart = false;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9501
          templ = "width: {{width}}px; height: {{height}}px;";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9502
          var str = Mustache.to_html(templ, {width: opts.width, height: opts.height});    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9503
          // Popcorn.youtube wants us to specify the size of the player in the style attribute of its container div.
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9504
          IriSP.jQuery("#" + containerDiv).attr("style", str);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9505
          
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9506
          pop = Popcorn.youtube("#" + containerDiv, opts.video, opts).mediafragment({start : 0});
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9507
        break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9508
        
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9509
      default:
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9510
        pop = undefined;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9511
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9512
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9513
    return pop;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9514
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9515
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9516
IriSP.configureWidgets = function (popcornInstance, layoutManager, guiOptions) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9517
 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9518
  var serialFactory = new IriSP.SerializerFactory(IriSP.__dataloader);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9519
  var params = {width: guiOptions.width, height: guiOptions.height};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9520
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9521
  var ret_widgets = [];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9522
  var index;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9523
  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9524
  for (index = 0; index < guiOptions.widgets.length; index++) {    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9525
    var widgetConfig = guiOptions.widgets[index];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9526
    var widget = IriSP.instantiateWidget(popcornInstance, serialFactory, layoutManager, widgetConfig);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9527
    ret_widgets.push(widget);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9528
   
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9529
  };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9530
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9531
  return ret_widgets;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9532
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9533
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9534
IriSP.configureModules = function (popcornInstance, modulesList) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9535
 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9536
  var serialFactory = new IriSP.SerializerFactory(IriSP.__dataloader);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9537
  var ret_modules = [];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9538
  var index;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9539
  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9540
  for (index = 0; index < modulesList.length; index++) {    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9541
    var moduleConfig = modulesList[index];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9542
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9543
    var serializer = serialFactory.getSerializer(moduleConfig.metadata);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9544
    var module = new IriSP[moduleConfig.type](popcornInstance, moduleConfig, serializer);    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9545
    ret_modules.push(module);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9546
  };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9547
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9548
  return ret_modules;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9549
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9550
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9551
IriSP.instantiateWidget = function(popcornInstance, serialFactory, layoutManager, widgetConfig) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9552
    /* create div returns us a container for the widget and a spacer */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9553
    var ret = layoutManager.createDiv(widgetConfig.type);        
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9554
    var container = ret[0];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9555
    var spacer = ret[1];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9556
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9557
    var arr = IriSP.jQuery.extend({}, widgetConfig);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9558
    arr.container = container;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9559
    arr.spacer = spacer;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9560
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9561
    var serializer = serialFactory.getSerializer(widgetConfig.metadata);    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9562
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9563
    if (typeof serializer == "undefined")   
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9564
      debugger;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9565
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9566
    // instantiate the object passed as a string
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9567
    var widget = new IriSP[widgetConfig.type](popcornInstance, arr, serializer);    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9568
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9569
    if (widgetConfig.hasOwnProperty("requires")) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9570
      // also create the widgets this one depends on.
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9571
      // the dependency widget is available in the parent widget context as
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9572
      // this.WidgetName (for instance, this.TipWidget);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9573
      
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9574
      var i = 0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9575
      for(i = 0; i < widgetConfig.requires.length; i++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9576
        var widgetName = widgetConfig.requires[i]["type"];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9577
        widget[widgetName] = IriSP.instantiateWidget(popcornInstance, serialFactory, layoutManager, widgetConfig.requires[i]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9578
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9579
    }       
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9580
     
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9581
    serializer.sync(IriSP.wrap(widget, function() { this.draw(); }));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9582
    return widget;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9583
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9584
/* mediafragment module */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9585
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9586
IriSP.MediaFragment = function(Popcorn, config, Serializer) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9587
  IriSP.Module.call(this, Popcorn, config, Serializer);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9588
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9589
  this.mutex = false; /* a mutex because we access the url from two different functions */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9590
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9591
  this._Popcorn.listen( "loadedmetadata", IriSP.wrap(this, IriSP.MediaFragment.advanceTime));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9592
  this._Popcorn.listen( "pause", IriSP.wrap(this, IriSP.MediaFragment.updateTime));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9593
  this._Popcorn.listen( "seeked", IriSP.wrap(this, IriSP.MediaFragment.updateTime));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9594
  this._Popcorn.listen( "IriSP.PolemicTweet.click", IriSP.wrap(this, IriSP.MediaFragment.updateAnnotation));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9595
  this._Popcorn.listen( "IriSP.SegmentsWidget.click", IriSP.wrap(this, IriSP.MediaFragment.updateAnnotation));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9596
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9597
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9598
IriSP.MediaFragment.advanceTime = function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9599
             var url = window.location.href;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9600
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9601
              if ( url.split( "#" )[ 1 ] != null ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9602
                  pageoffset = url.split( "#" )[1];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9603
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9604
                  if ( pageoffset.substring(0, 2) === "t=") {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9605
                    // timecode 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9606
                    if ( pageoffset.substring( 2 ) != null ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9607
                    var offsettime = pageoffset.substring( 2 );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9608
                    this._Popcorn.currentTime( parseFloat( offsettime ) );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9609
                    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9610
                  } else if ( pageoffset.substring(0, 2) === "a=") {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9611
                    // annotation
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9612
                    var annotationId = pageoffset.substring( 2 );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9613
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9614
                    // there's no better way than that because
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9615
                    // of possible race conditions
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9616
                    this._serializer.sync(IriSP.wrap(this, function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9617
                          IriSP.MediaFragment.lookupAnnotation.call(this, annotationId); 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9618
                          }));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9619
                  }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9620
              }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9621
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9622
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9623
IriSP.MediaFragment.updateTime = function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9624
  if (this.mutex === true) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9625
    return;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9626
  }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9627
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9628
  var history = window.history;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9629
  if ( !history.pushState ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9630
    return false;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9631
  }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9632
  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9633
  splitArr = window.location.href.split( "#" )
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9634
  history.replaceState( {}, "", splitArr[0] + "#t=" + this._Popcorn.currentTime().toFixed( 2 ) );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9635
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9636
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9637
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9638
IriSP.MediaFragment.updateAnnotation = function(annotationId) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9639
  var _this = this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9640
  this.mutex = true;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9641
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9642
  var history = window.history;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9643
  if ( !history.pushState ) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9644
    return false;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9645
  }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9646
  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9647
  splitArr = window.location.href.split( "#" )
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9648
  history.replaceState( {}, "", splitArr[0] + "#a=" + annotationId);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9649
 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9650
  window.setTimeout(function() { _this.mutex = false }, 50);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9651
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9652
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9653
// lookup and seek to the beginning of an annotation
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9654
IriSP.MediaFragment.lookupAnnotation = function(annotationId) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9655
  var annotation = undefined;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9656
  var annotations = this._serializer._data.annotations;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9657
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9658
  var i;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9659
  for (i = 0; i < annotations.length; i++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9660
      if (annotations[i].id === annotationId) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9661
        annotation = annotations[i];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9662
        break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9663
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9664
  }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9665
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9666
  if (typeof(annotation) !== "undefined") {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9667
    this._Popcorn.currentTime(annotation.begin / 1000);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9668
  }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9669
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9670
IriSP.AnnotationsWidget = function(Popcorn, config, Serializer) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9671
  IriSP.Widget.call(this, Popcorn, config, Serializer);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9672
  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9673
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9674
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9675
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9676
IriSP.AnnotationsWidget.prototype = new IriSP.Widget();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9677
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9678
IriSP.AnnotationsWidget.prototype.clear = function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9679
    this.selector.find(".Ldt-SaTitle").text("");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9680
    this.selector.find(".Ldt-SaDescription").text("");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9681
    this.selector.find(".Ldt-SaKeywordText").text("");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9682
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9683
9
61d507c98678 bumped the player version.
hamidouk
parents: 0
diff changeset
  9684
IriSP.AnnotationsWidget.prototype.displayAnnotation = function(annotation) {   
0
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9685
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9686
    var title = annotation.content.title;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9687
    var description = annotation.content.description;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9688
    var keywords =  "" // FIXME;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9689
    var begin = +annotation.begin / 1000;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9690
    var end = +annotation.end / 1000;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9691
    var duration = +this._serializer.currentMedia().meta["dc:duration"];
9
61d507c98678 bumped the player version.
hamidouk
parents: 0
diff changeset
  9692
    
0
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9693
    var title_templ = "{{title}} - ( {{begin}} - {{end}} )";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9694
    var endstr = Mustache.to_html(title_templ, {title: title, begin: IriSP.secondsToTime(begin), end: IriSP.secondsToTime(end)});
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9695
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9696
    this.selector.find(".Ldt-SaTitle").text(endstr);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9697
    this.selector.find(".Ldt-SaDescription").text(description);
9
61d507c98678 bumped the player version.
hamidouk
parents: 0
diff changeset
  9698
    
61d507c98678 bumped the player version.
hamidouk
parents: 0
diff changeset
  9699
    // update sharing buttons
61d507c98678 bumped the player version.
hamidouk
parents: 0
diff changeset
  9700
    var defaults = IriSP.widgetsDefaults.AnnotationsWidget;
61d507c98678 bumped the player version.
hamidouk
parents: 0
diff changeset
  9701
    var text = defaults.share_text;
61d507c98678 bumped the player version.
hamidouk
parents: 0
diff changeset
  9702
    var fb_link = defaults.fb_link;
61d507c98678 bumped the player version.
hamidouk
parents: 0
diff changeset
  9703
    var tw_link = defaults.tw_link;
61d507c98678 bumped the player version.
hamidouk
parents: 0
diff changeset
  9704
    var gplus_link = defaults.gplus_link;
61d507c98678 bumped the player version.
hamidouk
parents: 0
diff changeset
  9705
    var url = document.location.href + "#a=" + annotation.id;
61d507c98678 bumped the player version.
hamidouk
parents: 0
diff changeset
  9706
    this.selector.find(".Ldt-fbShare").attr("href", fb_link + IriSP.encodeURI(text) + IriSP.encodeURI(url));
61d507c98678 bumped the player version.
hamidouk
parents: 0
diff changeset
  9707
    this.selector.find(".Ldt-TwShare").attr("href", tw_link + IriSP.encodeURI(text) + IriSP.encodeURI(url));
61d507c98678 bumped the player version.
hamidouk
parents: 0
diff changeset
  9708
    this.selector.find(".Ldt-GplusShare").attr("href", fb_link + IriSP.encodeURI(text) + IriSP.encodeURI(url));
0
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9709
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9710
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9711
IriSP.AnnotationsWidget.prototype.clearWidget = function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9712
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9713
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9714
    /* retract the pane between two annotations */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9715
    this.selector.find(".Ldt-SaTitle").text("");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9716
    this.selector.find(".Ldt-SaDescription").text("");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9717
    this.selector.find(".Ldt-SaKeywordText").html("");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9718
    this.selector.find(".Ldt-ShowAnnotation").slideUp();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9719
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9720
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9721
IriSP.AnnotationsWidget.prototype.draw = function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9722
  var _this = this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9723
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9724
  var annotationMarkup = IriSP.templToHTML(IriSP.annotationWidget_template);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9725
	this.selector.append(annotationMarkup);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9726
  var view;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9727
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9728
  if (typeof(this._serializer._data.views) !== "undefined" && this._serializer._data.views !== null)
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9729
     view = this._serializer._data.views[0];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9730
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9731
  var view_type = "";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9732
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9733
  if(typeof(view) !== "undefined" && typeof(view.annotation_types) !== "undefined" && view.annotation_types.length > 1) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9734
          view_type = view.annotation_types[0];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9735
  }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9736
 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9737
  var annotations = this._serializer._data.annotations;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9738
  var i;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9739
  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9740
	for (i in annotations) {    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9741
    var annotation = annotations[i];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9742
    var begin = Math.round((+ annotation.begin) / 1000);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9743
    var end = Math.round((+ annotation.end) / 1000);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9744
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9745
    if (view_type != "" && typeof(annotation.meta) !== "undefined" && typeof(annotation.meta["id-ref"]) !== "undefined"
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9746
          && annotation.meta["id-ref"] != view_type) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9747
        continue;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9748
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9749
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9750
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9751
    var conf = {start: begin, end: end, 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9752
                onStart: 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9753
                       function(annotation) { 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9754
                        return function() { 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9755
                            _this.displayAnnotation(annotation); 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9756
                          
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9757
                        } }(annotation),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9758
                onEnd: 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9759
                       function() { _this.clearWidget.call(_this); },
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9760
                };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9761
    this._Popcorn = this._Popcorn.code(conf);                                             
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9762
  }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9763
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9764
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9765
IriSP.ArrowWidget = function(Popcorn, config, Serializer) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9766
  IriSP.Widget.call(this, Popcorn, config, Serializer);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9767
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9768
  this._oldAnnotation = null;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9769
  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9770
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9771
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9772
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9773
IriSP.ArrowWidget.prototype = new IriSP.Widget();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9774
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9775
IriSP.ArrowWidget.prototype.clear = function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9776
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9777
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9778
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9779
IriSP.ArrowWidget.prototype.clearWidget = function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9780
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9781
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9782
IriSP.ArrowWidget.prototype.draw = function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9783
  var templ = Mustache.to_html(IriSP.arrowWidget_template, {});
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9784
  this.selector.append(templ);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9785
  this._Popcorn.listen("timeupdate", IriSP.wrap(this, this.timeUpdateHandler));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9786
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9787
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9788
IriSP.ArrowWidget.prototype.timeUpdateHandler = function(percents) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9789
  var currentTime = this._Popcorn.currentTime();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9790
  var currentAnnotation = this._serializer.currentAnnotations(currentTime)[0]; // FIXME : use the others ?
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9791
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9792
  /* move the arrow only if the current annotation changes */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9793
  if (currentAnnotation != this._oldAnnotation) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9794
    var begin = (+ currentAnnotation.begin) / 1000;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9795
    var end = (+ currentAnnotation.end) / 1000;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9796
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9797
    var duration = +this._serializer.currentMedia().meta["dc:duration"] / 1000;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9798
    var middle_time = (begin + end) / 2;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9799
    var percents = Math.floor((middle_time / duration) * 100);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9800
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9801
    // we need to apply a fix because the arrow has a certain length
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9802
    // it's half the length of the arrow (27 / 2). We need to convert
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9803
    // it in percents though.
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9804
    var totalWidth = this.selector.width();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9805
    var correction = ((27 / 2) / totalWidth) * 100;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9806
    var corrected_percents = percents - correction;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9807
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9808
    /* don't move out of the screen */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9809
    if (corrected_percents <= 0)
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9810
      corrected_percents = 0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9811
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9812
    this.selector.children(".Ldt-arrowWidget").animate({"left" : corrected_percents + "%"});
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9813
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9814
    this._oldAnnotation = currentAnnotation;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9815
  }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9816
}
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9817
IriSP.PlayerWidget = function(Popcorn, config, Serializer) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9818
  IriSP.Widget.call(this, Popcorn, config, Serializer);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9819
  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9820
  this._searchBlockOpen = false;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9821
  this._searchLastValue = "";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9822
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9823
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9824
IriSP.PlayerWidget.prototype = new IriSP.Widget();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9825
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9826
IriSP.PlayerWidget.prototype.draw = function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9827
  var self = this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9828
  var width = this.width;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9829
	var height = this.height;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9830
	var heightS = this.height-20;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9831
	  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9832
	var Player_templ = Mustache.to_html(IriSP.player_template, {"share_template" : IriSP.share_template});
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9833
  this.selector.append(Player_templ);		
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9834
	
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9835
  this.selector.children(".Ldt-controler").show();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9836
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9837
  // handle clicks by the user on the video.
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9838
  this._Popcorn.listen("play", IriSP.wrap(this, this.playButtonUpdater));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9839
  this._Popcorn.listen("pause", IriSP.wrap(this, this.playButtonUpdater));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9840
  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9841
  this._Popcorn.listen("volumechange", IriSP.wrap(this, this.muteButtonUpdater));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9842
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9843
  this._Popcorn.listen("timeupdate", IriSP.wrap(this, this.timeDisplayUpdater));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9844
  this._Popcorn.listen("IriSP.search.matchFound", IriSP.wrap(this, this.searchMatch));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9845
  this._Popcorn.listen("IriSP.search.noMatchFound", IriSP.wrap(this, this.searchNoMatch));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9846
  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9847
  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9848
  this.selector.find(".Ldt-CtrlPlay").click(function() { self.playHandler.call(self); });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9849
  this.selector.find(".Ldt-CtrlNext").click(function() { });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9850
  this.selector.find(".Ldt-CtrlSearch").click(function() { self.searchButtonHandler.call(self); });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9851
  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9852
  this.selector.find('.Ldt-CtrlSound').click(function() { self.muteHandler.call(self); } );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9853
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9854
  this.selector.find(".Ldt-CtrlPlay").attr( "style", "background-color:#CD21C24;" );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9855
  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9856
  var searchButtonPos = this.selector.find(".Ldt-CtrlSearch").position();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9857
  var searchBox = Mustache.to_html(IriSP.search_template, {margin_left : searchButtonPos.left + "px"});
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9858
  this.selector.append(searchBox);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9859
  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9860
  // trigger an IriSP.PlayerWidget.MouseOver to the widgets that are interested (i.e : sliderWidget)
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9861
  this.selector.hover(function() { self._Popcorn.trigger("IriSP.PlayerWidget.MouseOver"); }, 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9862
                      function() { self._Popcorn.trigger("IriSP.PlayerWidget.MouseOut"); });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9863
 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9864
  this.muteButtonUpdater(); /* some player - jwplayer notable - save the state of the mute button between sessions */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9865
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9866
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9867
/* Update the elasped time div */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9868
IriSP.PlayerWidget.prototype.timeDisplayUpdater = function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9869
  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9870
  if (this._previousSecond === undefined)
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9871
    this._previousSecond = this._Popcorn.roundTime();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9872
  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9873
  else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9874
    /* we're still in the same second, so it's not necessary to update time */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9875
    if (this._Popcorn.roundTime() == this._previousSecond)
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9876
      return;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9877
      
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9878
  }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9879
  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9880
  // we get it at each call because it may change.
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9881
  var duration = +this._serializer.currentMedia().meta["dc:duration"] / 1000; 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9882
  var totalTime = IriSP.secondsToTime(duration);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9883
  var elapsedTime = IriSP.secondsToTime(this._Popcorn.currentTime());
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9884
  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9885
  this.selector.find(".Ldt-ElapsedTime").html(elapsedTime.toString());
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9886
  this.selector.find(".Ldt-TotalTime").html(totalTime.toString());
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9887
  this._previousSecond = this._Popcorn.roundTime();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9888
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9889
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9890
/* update the icon of the button - separate function from playHandler
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9891
   because in some cases (for instance, when the user directly clicks on
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9892
   the jwplayer window) we have to change the icon without playing/pausing
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9893
*/
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9894
IriSP.PlayerWidget.prototype.playButtonUpdater = function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9895
  var status = this._Popcorn.media.paused;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9896
  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9897
  if ( status == true ){        
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9898
    this.selector.find(".Ldt-CtrlPlay").attr("title", "Play");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9899
   
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9900
    // we use templToHTML because it has some predefined
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9901
    // vars like where to get the images
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9902
    var templ = IriSP.templToHTML("url({{img_dir}}/play_sprite.png)");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9903
    this.selector.find(".Ldt-CtrlPlay").css("background-image", templ);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9904
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9905
  } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9906
    this.selector.find(".Ldt-CtrlPlay").attr("title", "Pause");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9907
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9908
    // we use templToHTML because it has some predefined
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9909
    // vars like where to get the images
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9910
    var templ = IriSP.templToHTML("url({{img_dir}}/pause_sprite.png)");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9911
    this.selector.find(".Ldt-CtrlPlay").css("background-image", templ);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9912
  }  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9913
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9914
  return;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9915
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9916
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9917
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9918
IriSP.PlayerWidget.prototype.playHandler = function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9919
  var status = this._Popcorn.media.paused;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9920
  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9921
  if ( status == true ){        
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9922
    this._Popcorn.play();   
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9923
  } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9924
    this._Popcorn.pause();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9925
  }  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9926
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9927
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9928
IriSP.PlayerWidget.prototype.muteHandler = function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9929
  if (!this._Popcorn.muted()) {    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9930
      this._Popcorn.mute(true);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9931
    } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9932
      this._Popcorn.mute(false);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9933
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9934
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9935
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9936
IriSP.PlayerWidget.prototype.muteButtonUpdater = function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9937
  var status = this._Popcorn.media.muted;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9938
  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9939
  if ( status == true ){        
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9940
    this.selector.find(".Ldt-CtrlSound").attr("title", "Unmute");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9941
   
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9942
    // we use templToHTML because it has some predefined
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9943
    // vars like where to get the images
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9944
    var templ = IriSP.templToHTML("url({{img_dir}}/sound_sprite.png)");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9945
    this.selector.find(".Ldt-CtrlSound").css("background-image", templ);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9946
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9947
  } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9948
    this.selector.find(".Ldt-CtrlSound").attr("title", "Mute");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9949
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9950
    // we use templToHTML because it has some predefined
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9951
    // vars like where to get the images
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9952
    var templ = IriSP.templToHTML("url({{img_dir}}/mute_sprite.png)");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9953
    this.selector.find(".Ldt-CtrlSound").css("background-image", templ);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9954
  }  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9955
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9956
  return;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9957
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9958
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9959
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9960
IriSP.PlayerWidget.prototype.searchButtonHandler = function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9961
    var self = this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9962
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9963
    /* show the search field if it is not shown */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9964
  	if ( this._searchBlockOpen == false ) {      
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9965
      this.selector.find(".LdtSearch").show(100);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9966
      
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9967
      this.selector.find(".LdtSearchInput").css('background-color','#fff');
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9968
      this.selector.find(".LdtSearchInput").focus();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9969
      this.selector.find(".LdtSearchInput").attr('value', this._searchLastValue);      
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9970
      this._Popcorn.trigger("IriSP.search", this._searchLastValue); // trigger the search to make it more natural.
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9971
      
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9972
      this._searchBlockOpen = true;           
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9973
      this.selector.find(".LdtSearchInput").bind('keyup', null, function() { self.searchHandler.call(self); } );
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9974
      
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9975
      // we need this variable because some widget can find a match in
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9976
      // their data while at the same time other's don't. As we want the
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9977
      // search field to become green when there's a match, we need a 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9978
      // variable to remember that we had one.
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9979
      this._positiveMatch = false;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9980
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9981
      // tell the world the field is open
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9982
      this._Popcorn.trigger("IriSP.search.open");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9983
      
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9984
	} else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9985
      this._searchLastValue = this.selector.find(".LdtSearchInput").attr('value');
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9986
      this.selector.find(".LdtSearchInput").attr('value','');
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9987
      this.selector.find(".LdtSearch").hide(100);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9988
      
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9989
      // unbind the watcher event.
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9990
      this.selector.find(".LdtSearchInput").unbind('keypress set');
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9991
      this._searchBlockOpen = false;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9992
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9993
      this._positiveMatch = false;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9994
      
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9995
      this._Popcorn.trigger("IriSP.search.closed");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9996
  }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9997
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9998
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
  9999
/* this handler is called whenever the content of the search
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10000
   field changes */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10001
IriSP.PlayerWidget.prototype.searchHandler = function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10002
  this._searchLastValue = this.selector.find(".LdtSearchInput").attr('value');
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10003
  this._positiveMatch = false;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10004
  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10005
  // do nothing if the search field is empty, instead of highlighting everything.
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10006
  if (this._searchLastValue == "") {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10007
    this._Popcorn.trigger("IriSP.search.cleared");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10008
    this.selector.find(".LdtSearchInput").css('background-color','');
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10009
  } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10010
    this._Popcorn.trigger("IriSP.search", this._searchLastValue);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10011
  }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10012
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10013
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10014
/*
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10015
  handler for the IriSP.search.found message, which is sent by some views when they
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10016
  highlight a match.
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10017
*/
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10018
IriSP.PlayerWidget.prototype.searchMatch = function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10019
  this._positiveMatch = true;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10020
  this.selector.find(".LdtSearchInput").css('background-color','#e1ffe1');
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10021
}
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10022
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10023
/* the same, except that no value could be found */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10024
IriSP.PlayerWidget.prototype.searchNoMatch = function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10025
  if (this._positiveMatch !== true)
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10026
    this.selector.find(".LdtSearchInput").css('background-color', "#d62e3a");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10027
}
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10028
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10029
/* 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10030
 *   
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10031
 *  Copyright 2010 Institut de recherche et d'innovation 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10032
 *  contributor(s) : Samuel Huron 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10033
 *   
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10034
 *  contact@iri.centrepompidou.fr
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10035
 *  http://www.iri.centrepompidou.fr 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10036
 *   
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10037
 *  This software is a computer program whose purpose is to show and add annotations on a video .
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10038
 *  This software is governed by the CeCILL-C license under French law and
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10039
 *  abiding by the rules of distribution of free software. You can  use, 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10040
 *  modify and/ or redistribute the software under the terms of the CeCILL-C
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10041
 *  license as circulated by CEA, CNRS and INRIA at the following URL
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10042
 *  "http://www.cecill.info". 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10043
 *  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10044
 *  The fact that you are presently reading this means that you have had
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10045
 *  knowledge of the CeCILL-C license and that you accept its terms.
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10046
*/
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10047
// CHART TIMELINE / VERSION PROTOTYPE  ::
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10048
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10049
IriSP.PolemicWidget = function(Popcorn, config, Serializer) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10050
  IriSP.Widget.call(this, Popcorn, config, Serializer);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10051
 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10052
  this.userPol    = new Array();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10053
  this.userNoPol  = new Array();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10054
  this.userst      = new Array();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10055
  this.numberOfTweet = 0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10056
  this.Users;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10057
  this.TweetPolemic;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10058
  this.yMax        = this.height; 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10059
  this.PaperSlider;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10060
  this.heightOfChart;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10061
  this.tweets  = new Array();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10062
  this.svgElements = {};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10063
  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10064
  // Make and define the Raphael area
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10065
  this.paper = Raphael(document.getElementById(this._id), config.width, config.height);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10066
  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10067
  this.oldSearchMatches = [];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10068
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10069
  // event handlers
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10070
  this._Popcorn.listen("IriSP.search", IriSP.wrap(this, function(searchString) { this.searchHandler(searchString); }));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10071
  this._Popcorn.listen("IriSP.search.closed", IriSP.wrap(this, this.searchFieldClosedHandler));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10072
  this._Popcorn.listen("IriSP.search.cleared", IriSP.wrap(this, this.searchFieldClearedHandler));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10073
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10074
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10075
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10076
IriSP.PolemicWidget.prototype = new IriSP.Widget();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10077
  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10078
IriSP.PolemicWidget.prototype.draw = function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10079
  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10080
    // variable 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10081
    // yMax
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10082
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10083
    var self = this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10084
    var yCoef        = 2;             // coef for height of 1 tweet 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10085
    var frameSize     = 5;             // frame size 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10086
    var margin         = 1;            // marge between frame
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10087
    var lineSize      = this.width;        // timeline pixel width 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10088
    var nbrframes     = lineSize/frameSize;     // frame numbers
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10089
    var numberOfTweet   = 0;            // number of tweet overide later 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10090
    var duration      = +this._serializer.currentMedia().meta["dc:duration"];      // timescale width 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10091
    var frameLength   = lineSize / frameSize;    // frame timescale  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10092
    var timeline;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10093
    var colors  = new Array("","#1D973D","#C5A62D","#CE0A15","#036AAE","#585858");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10094
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10095
    // array 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10096
    //var tweets  = new Array();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10097
    var element = new Array();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10098
    var cluster = new Array();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10099
    var frames  = new Array(frameLength);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10100
    var slices  = new Array();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10101
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10102
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10103
    // Classes =======================================================================
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10104
    var Frames = function(){
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10105
      
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10106
      var Myclusters;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10107
      var x;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10108
      var y;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10109
      var width;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10110
      var height;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10111
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10112
    Frames = function(json){
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10113
      // make my clusters
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10114
      // ou Frame vide 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10115
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10116
    Frames.prototype.draw = function(){
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10117
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10118
    Frames.prototype.zoom = function(){
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10119
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10120
    Frames.prototype.inside = function(){
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10121
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10122
    var Clusters = function(){
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10123
      var Object;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10124
      var yDist;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10125
      var x;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10126
      var y;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10127
      var width;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10128
      var height;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10129
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10130
    Clusters = function(json){
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10131
      // make my object
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10132
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10133
    var Tweet = function(){
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10134
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10135
    // Classes =======================================================================
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10136
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10137
    // Refactoring (parametere) ************************************************************
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10138
    // color translastion
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10139
    var qTweet_0  =0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10140
    var qTweet_Q  =0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10141
    var qTweet_REF=0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10142
    var qTweet_OK =0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10143
    var qTweet_KO =0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10144
    function colorTranslation(value){
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10145
      if(value == "Q"){
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10146
        qTweet_Q+=1;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10147
        return 2;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10148
      }else if(value =="REF"){
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10149
        qTweet_REF+=1;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10150
        return 4;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10151
      }else if(value =="OK"){
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10152
        qTweet_OK+=1;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10153
        return 1;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10154
      }else if(value =="KO"){
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10155
        qTweet_KO+=1;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10156
        return 3;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10157
      }else if(value ==""){
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10158
        qTweet_0+=1;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10159
        return 5;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10160
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10161
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10162
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10163
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10164
      this._serializer.sync(function(data) { loaded_callback.call(self, data) });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10165
      
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10166
      function loaded_callback (json) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10167
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10168
        // get current view (the first ???)
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10169
        view = json.views[0];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10170
        
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10171
        // the tweets are by definition of the second annotation type FIXME ?
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10172
        tweet_annot_type = null;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10173
        if(typeof(view.annotation_types) !== "undefined" && view.annotation_types.length > 1) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10174
          tweet_annot_type = view.annotation_types[1];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10175
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10176
      
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10177
      for(var i = 0; i < json.annotations.length; i++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10178
        var item = json.annotations[i];        
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10179
        var MyTime  = Math.floor(item.begin/duration*lineSize);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10180
        var Myframe = Math.floor(MyTime/lineSize*frameLength);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10181
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10182
        if (typeof(item.meta) !== "undefined" 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10183
          && typeof(item.meta["id-ref"]) !== "undefined"
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10184
          && item.meta["id-ref"] === tweet_annot_type) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10185
            
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10186
          var MyTJson = JSON.parse(item.meta['dc:source']['content']);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10187
          
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10188
            if (item.content['polemics'] != undefined 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10189
            && item.content['polemics'][0] != null) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10190
            
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10191
              // a tweet can have many polemics at the same time.
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10192
              for(var j=0; j<item.content['polemics'].length; j++){
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10193
                  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10194
                  this.tweets[numberOfTweet] = {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10195
                        id:i,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10196
                        qualification:colorTranslation(item.content['polemics'][j]),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10197
                        yIndicator:MyTime,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10198
                        yframe:Myframe,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10199
                        title:item.content['title'],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10200
                        timeframe:item.begin,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10201
                        userId: MyTJson.id,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10202
                        userScreenName: MyTJson.screen_name,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10203
                        tsource:MyTJson,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10204
                        cinecast_id: item.id
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10205
                        };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10206
                  numberOfTweet+=1;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10207
                  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10208
              }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10209
          }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10210
          else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10211
            this.tweets[numberOfTweet] = {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10212
                  id:i,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10213
                  qualification:colorTranslation(""),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10214
                  yIndicator:MyTime,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10215
                  yframe:Myframe,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10216
                  title:item.content['title'],
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10217
                  timeframe:item.begin,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10218
                  userId: MyTJson.id,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10219
                  userScreenName: MyTJson.screen_name,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10220
                  tsource:MyTJson,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10221
                  cinecast_id: item.id
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10222
            };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10223
            numberOfTweet+=1;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10224
          }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10225
          
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10226
        } 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10227
      };  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10228
      
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10229
       DrawTweets.call (this); // FIXME: ugly.
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10230
       
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10231
      };      
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10232
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10233
    // tweet Drawing (in raphael) 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10234
    function DrawTweets (){
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10235
    // GROUPES TWEET ============================================
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10236
    // Count nbr of cluster and tweet in a frame an save int in "frames"
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10237
      numberOfTweet = this.tweets.length;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10238
      for(var i=0; i<nbrframes; i++) {  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10239
        for(var j=0; j<numberOfTweet; j++) {  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10240
        
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10241
          if (i==this.tweets[j].yframe){
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10242
            
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10243
            var k = this.tweets[j].qualification;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10244
            
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10245
            // make array for frame cluster
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10246
            if(frames[i]==undefined){
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10247
              frames[i] = {id:i,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10248
                     qualifVol:new Array(),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10249
                     mytweetsID:new Array()
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10250
                    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10251
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10252
            // add my tweet to frame
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10253
            frames[i].mytweetsID.push(this.tweets[j]);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10254
            
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10255
            // count opinion by frame
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10256
            if( frames[i].qualifVol[k] == undefined){
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10257
              frames[i].qualifVol[k] = 1;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10258
            }else{
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10259
              frames[i].qualifVol[k] += 1;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10260
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10261
            
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10262
          }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10263
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10264
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10265
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10266
    // GROUPES TWEET ============================================    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10267
    // max of tweet by Frame 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10268
      var max = 0; 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10269
      for(var i = 0; i < nbrframes; i++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10270
        var moy  = 0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10271
        for (var j = 0; j < 6; j++) {    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10272
          if (frames[i] != undefined) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10273
            if (frames[i].qualifVol[j] != undefined) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10274
              moy += frames[i].qualifVol[j];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10275
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10276
          }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10277
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10278
        
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10279
        if (moy > max) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10280
          max = moy;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10281
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10282
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10283
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10284
      var tweetDrawed = new Array();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10285
      var TweetHeight = 5;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10286
      
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10287
      // DRAW  TWEETS ============================================
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10288
      for(var i = 0; i < nbrframes; i++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10289
        var addEheight = 5;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10290
        if (frames[i] != undefined){                
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10291
          // by type 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10292
          
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10293
          for (var j = 6; j > -1; j--) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10294
            if (frames[i].qualifVol[j] != undefined) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10295
              // show tweet by type 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10296
              for (var k = 0; k < frames[i].mytweetsID.length; k++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10297
              
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10298
                if (frames[i].mytweetsID[k].qualification == j) {                
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10299
                  var x = i * frameSize;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10300
                  var y = this.heightmax - addEheight;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10301
                  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10302
                  if (this.yMax > y) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10303
                    this.yMax = y;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10304
                  }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10305
                  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10306
                  var e = this.paper.rect(x, y, frameSize - margin, TweetHeight /* height */)
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10307
                                    .attr({stroke:"#00","stroke-width":0.1,  fill: colors[j]});  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10308
                  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10309
                  addEheight += TweetHeight;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10310
                  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10311
                  e.color = colors[j];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10312
                  e.time = frames[i].mytweetsID[k].timeframe;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10313
                  e.title = frames[i].mytweetsID[k].title;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10314
                  e.id = frames[i].mytweetsID[k].cinecast_id;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10315
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10316
                  this.svgElements[e.id] = e;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10317
22
11011b712cf2 updated player version.
hamidouk
parents: 17
diff changeset
 10318
                  /*
0
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10319
                  e.mouseover(function(element) { return function (event) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10320
                        // event.clientX and event.clientY are to raphael what event.pageX and pageY are to jquery.                        
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10321
                        self.TooltipWidget.show.call(self.TooltipWidget, element.title, element.attr("fill"), event.clientX - 106, event.clientY - 160);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10322
                        element.displayed = true;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10323
                  }}(e)).mouseout(function(element) { return function () {                          
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10324
                          self.TooltipWidget.hide.call(self.TooltipWidget);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10325
                  }}(e)).mousedown(function () {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10326
                    self._Popcorn.currentTime(this.time/1000);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10327
                    self._Popcorn.trigger("IriSP.PolemicTweet.click", this.id); 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10328
                  });
22
11011b712cf2 updated player version.
hamidouk
parents: 17
diff changeset
 10329
                  */
11011b712cf2 updated player version.
hamidouk
parents: 17
diff changeset
 10330
                  
23
44945db9746a updated player version - fixes tooltip bug.
hamidouk
parents: 22
diff changeset
 10331
                  IriSP.jQuery(e.node).mouseenter(function(element) { return function (event) {                        
22
11011b712cf2 updated player version.
hamidouk
parents: 17
diff changeset
 10332
                        // event.clientX and event.clientY are to raphael what event.pageX and pageY are to jquery.                        
26
b710fa62d522 fixed critical bug.
hamidouk
parents: 25
diff changeset
 10333
                        self.TooltipWidget.show.call(self.TooltipWidget, element.title, element.attr("fill"), event.pageX - 106, event.pageY - 160);
22
11011b712cf2 updated player version.
hamidouk
parents: 17
diff changeset
 10334
                        element.displayed = true;
29
5d56138abe95 fixing another stupid bug.
hamidouk
parents: 28
diff changeset
 10335
                  }}(e)).mousedown(function(element) { return function () {                    
5d56138abe95 fixing another stupid bug.
hamidouk
parents: 28
diff changeset
 10336
                    self._Popcorn.currentTime(element.time/1000);
5d56138abe95 fixing another stupid bug.
hamidouk
parents: 28
diff changeset
 10337
                    self._Popcorn.trigger("IriSP.PolemicTweet.click", element.id); 
5d56138abe95 fixing another stupid bug.
hamidouk
parents: 28
diff changeset
 10338
                    }
5d56138abe95 fixing another stupid bug.
hamidouk
parents: 28
diff changeset
 10339
                  }(e));                  
0
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10340
                  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10341
                  IriSP.jQuery(e.node).attr('id', 't' + k + '');
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10342
                  IriSP.jQuery(e.node).attr('title', frames[i].mytweetsID[k].title);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10343
                  IriSP.jQuery(e.node).attr('begin',  frames[i].mytweetsID[k].timeframe);                  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10344
                }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10345
              }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10346
            }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10347
          }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10348
        }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10349
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10350
      }    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10351
      // DRAW UI :: resize border and bgd      
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10352
      this.paperBackground = this.paper.rect(0, 0, this.width, this.heightmax).attr({fill:"#F8F8F8","stroke-width":0.1,opacity: 1});  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10353
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10354
      // outer borders
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10355
      this.outerBorders   = [];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10356
      this.outerBorders.push(this.paper.rect(0, this.height - 1, this.width, 1).attr({fill:"#ababab",stroke: "none",opacity: 1}));  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10357
      this.outerBorders.push(this.paper.rect(0, 0, this.width, 1).attr({fill:"#ababab",stroke: "none",opacity: 1}));  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10358
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10359
      // inner borders
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10360
      this.innerBorders   = [];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10361
      this.innerBorders.push(this.paper.rect(1, this.height - 2, this.width, 1).attr({fill:"#efefef",stroke: "none",opacity: 1}));  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10362
      this.innerBorders.push(this.paper.rect(1, 1, this.width, 1).attr({fill:"#efefef",stroke: "none",opacity: 1}));  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10363
      this.innerBorders.push(this.paper.rect(1, 1, 1, this.height - 2).attr({fill:"#d0d1d1",stroke: "none",opacity: 0.8}));  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10364
      this.innerBorders.push(this.paper.rect(this.width - 2, 1, 1, this.height - 2).attr({fill:"#efefef",stroke: "none",opacity: 1}));  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10365
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10366
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10367
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10368
      this.paperSlider   = this.paper.rect(0, 0, 0, this.heightmax).attr({fill:"#D4D5D5", stroke: "none", opacity: 1});
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10369
      
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10370
      // the small white line displayed over the slider.
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10371
      this.sliderTip = this.paper.rect(0, 0, 1, this.heightmax).attr({fill:"#fc00ff", stroke: "none", opacity: 1});
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10372
      // decalage 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10373
      // tweetSelection = this.paper.rect(-100,-100,5,5).attr({fill:"#fff",stroke: "none",opacity: 1});  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10374
      
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10375
      
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10376
      this.paperSlider.toBack();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10377
      this.paperBackground.toBack();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10378
      this.sliderTip.toFront();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10379
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10380
    
23
44945db9746a updated player version - fixes tooltip bug.
hamidouk
parents: 22
diff changeset
 10381
    this.selector.mouseleave(IriSP.wrap(this, function() { self.TooltipWidget.hide.call(self.TooltipWidget); }));
0
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10382
    this._Popcorn.listen("timeupdate", IriSP.wrap(this, this.sliderUpdater));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10383
}
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10384
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10385
IriSP.PolemicWidget.prototype.sliderUpdater = function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10386
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10387
    var time = +this._Popcorn.currentTime();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10388
    var duration = +this._serializer.currentMedia().meta["dc:duration"];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10389
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10390
    this.paperSlider.attr("width", time * (this.width / (duration / 1000)));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10391
        
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10392
    this.sliderTip.attr("x", time * (this.width / (duration / 1000)));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10393
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10394
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10395
IriSP.PolemicWidget.prototype.searchHandler = function(searchString) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10396
  if (searchString == "")
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10397
    return;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10398
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10399
  var matches = this._serializer.searchTweetsOccurences(searchString);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10400
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10401
  if (IriSP.countProperties(matches) > 0) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10402
    this._Popcorn.trigger("IriSP.search.matchFound");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10403
  } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10404
    this._Popcorn.trigger("IriSP.search.noMatchFound");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10405
  }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10406
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10407
  for (var id in matches) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10408
    if (this.svgElements.hasOwnProperty(id)) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10409
      var e = this.svgElements[id];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10410
      this.svgElements[id].attr({fill: "#fc00ff"});
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10411
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10412
  }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10413
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10414
  // clean up the blocks that were in the previous search
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10415
  // but who aren't in the current one.
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10416
  for (var id in this.oldSearchMatches) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10417
    if (!matches.hasOwnProperty(id)) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10418
      var e = this.svgElements[id];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10419
      e.attr({fill: e.color});
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10420
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10421
  }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10422
  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10423
  this.oldSearchMatches = matches;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10424
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10425
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10426
IriSP.PolemicWidget.prototype.searchFieldClearedHandler = function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10427
  // clean up the blocks that were in the previous search
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10428
  // but who aren't in the current one.
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10429
  for (var id in this.oldSearchMatches) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10430
      var e = this.svgElements[id];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10431
      e.attr({fill: e.color});
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10432
  }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10433
 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10434
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10435
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10436
IriSP.PolemicWidget.prototype.searchFieldClosedHandler = function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10437
  // clean up the blocks that were in the previous search
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10438
  // but who aren't in the current one.
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10439
  for (var id in this.oldSearchMatches) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10440
      var e = this.svgElements[id];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10441
      e.attr({fill: e.color});
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10442
  }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10443
 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10444
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10445
   
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10446
IriSP.SegmentsWidget = function(Popcorn, config, Serializer) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10447
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10448
  var self = this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10449
  IriSP.Widget.call(this, Popcorn, config, Serializer);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10450
  this.oldSearchMatches = [];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10451
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10452
  // event handlers
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10453
  this._Popcorn.listen("IriSP.search", function(searchString) { self.searchHandler.call(self, searchString); });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10454
  this._Popcorn.listen("IriSP.search.closed", function() { self.searchFieldClosedHandler.call(self); });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10455
  this._Popcorn.listen("IriSP.search.cleared", function() { self.searchFieldClearedHandler.call(self); });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10456
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10457
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10458
IriSP.SegmentsWidget.prototype = new IriSP.Widget();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10459
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10460
IriSP.SegmentsWidget.prototype.draw = function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10461
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10462
  var self = this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10463
  var annotations = this._serializer._data.annotations;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10464
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10465
  this.selector.addClass("Ldt-SegmentsWidget");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10466
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10467
  /* in case we have different types of annotations, we want to display only the first type */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10468
  /* the next two lines are a bit verbose because for some test data, _serializer.data.view is either
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10469
     null or undefined.
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10470
  */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10471
  var view;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10472
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10473
  if (typeof(this._serializer._data.views) !== "undefined" && this._serializer._data.views !== null)
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10474
     view = this._serializer._data.views[0];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10475
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10476
  var view_type = "";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10477
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10478
  if(typeof(view) !== "undefined" && typeof(view.annotation_types) !== "undefined" && view.annotation_types.length > 1) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10479
          view_type = view.annotation_types[0];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10480
  }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10481
 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10482
  this.selector.append(Mustache.to_html(IriSP.overlay_marker_template));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10483
  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10484
  this.positionMarker = this.selector.children(":first");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10485
  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10486
  this._Popcorn.listen("timeupdate", IriSP.wrap(this, this.positionUpdater));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10487
  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10488
  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10489
  var i = 0;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10490
  var totalWidth = this.selector.width();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10491
  var onePxPercent = 100 / totalWidth; /* the value of a pixel, in percents */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10492
 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10493
  for (i = 0; i < annotations.length; i++) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10494
    var annotation = annotations[i];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10495
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10496
    /* filter the annotations whose type is not the one we want */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10497
    if (view_type != "" && typeof(annotation.meta) !== "undefined" && typeof(annotation.meta["id-ref"]) !== "undefined"
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10498
          && annotation.meta["id-ref"] != view_type) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10499
        continue;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10500
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10501
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10502
    var begin = Math.round((+ annotation.begin) / 1000);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10503
    var end = Math.round((+ annotation.end) / 1000);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10504
    var duration = this._serializer.currentMedia().meta["dc:duration"] / 1000;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10505
    var id = annotation.id;
24
36df3a25d7bd updated version.
hamidouk
parents: 23
diff changeset
 10506
    var startPourcent 	= IriSP.timeToPourcent(begin, duration);
36df3a25d7bd updated version.
hamidouk
parents: 23
diff changeset
 10507
    
36df3a25d7bd updated version.
hamidouk
parents: 23
diff changeset
 10508
    /* surprisingly, the following code doesn't work on webkit - for some reason, most of the 
25
4f082f63e295 updated player version.
hamidouk
parents: 24
diff changeset
 10509
       boxes are 3 pixels smaller.
0
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10510
    */
25
4f082f63e295 updated player version.
hamidouk
parents: 24
diff changeset
 10511
    var endPourcent 	= Math.floor(IriSP.timeToPourcent(end, duration) - startPourcent);
4f082f63e295 updated player version.
hamidouk
parents: 24
diff changeset
 10512
    var endPixel = Math.floor(this.selector.parent().width() * (endPourcent / 100)) - 2;
4f082f63e295 updated player version.
hamidouk
parents: 24
diff changeset
 10513
        
0
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10514
    if (i == 0) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10515
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10516
      endPourcent -= onePxPercent;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10517
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10518
    
15
6d9cd6f47d95 fixed outstanding bugs.
hamidouk
parents: 12
diff changeset
 10519
    var divTitle = (annotation.content.title + " - " + annotation.content.description).substr(0,55);
12
dbcb0dc6a844 updated player.
hamidouk
parents: 10
diff changeset
 10520
dbcb0dc6a844 updated player.
hamidouk
parents: 10
diff changeset
 10521
    if (typeof(annotation.content.color) !== "undefined")
dbcb0dc6a844 updated player.
hamidouk
parents: 10
diff changeset
 10522
      var color = annotation.content.color;
dbcb0dc6a844 updated player.
hamidouk
parents: 10
diff changeset
 10523
    else
dbcb0dc6a844 updated player.
hamidouk
parents: 10
diff changeset
 10524
      var color = annotation.color;
dbcb0dc6a844 updated player.
hamidouk
parents: 10
diff changeset
 10525
    
dbcb0dc6a844 updated player.
hamidouk
parents: 10
diff changeset
 10526
    var hexa_color = IriSP.DEC_HEXA_COLOR(color);
24
36df3a25d7bd updated version.
hamidouk
parents: 23
diff changeset
 10527
12
dbcb0dc6a844 updated player.
hamidouk
parents: 10
diff changeset
 10528
    if (hexa_color === "FFCC00")
dbcb0dc6a844 updated player.
hamidouk
parents: 10
diff changeset
 10529
      hexa_color = "333";
24
36df3a25d7bd updated version.
hamidouk
parents: 23
diff changeset
 10530
    if (hexa_color.length == 4)
36df3a25d7bd updated version.
hamidouk
parents: 23
diff changeset
 10531
      hexa_color = hexa_color + '00';
12
dbcb0dc6a844 updated player.
hamidouk
parents: 10
diff changeset
 10532
    
0
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10533
    var annotationTemplate = Mustache.to_html(IriSP.annotation_template,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10534
        {"divTitle" : divTitle, "id" : id, "startPourcent" : startPourcent,
25
4f082f63e295 updated player version.
hamidouk
parents: 24
diff changeset
 10535
        "endPixel" : endPixel, "hexa_color" : hexa_color,
0
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10536
        "seekPlace" : Math.round(begin/1000)});
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10537
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10538
    this.selector.append(annotationTemplate);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10539
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10540
//    IriSP.jQuery("#" + id).tooltip({ effect: 'slide'});
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10541
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10542
    IriSP.jQuery("#" + id).fadeTo(0, 0.3);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10543
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10544
    IriSP.jQuery("#" + id).mouseover(
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10545
    /* we wrap the handler in another function because js's scoping
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10546
       rules are function-based - otherwise, the internal vars like
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10547
       divTitle are preserved but they are looked-up from the draw
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10548
       method scope, so after that the loop is run, so they're not
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10549
       preserved */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10550
    (function(divTitle) { 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10551
     return function(event) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10552
          IriSP.jQuery(this).animate({opacity: 0.6}, 5);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10553
          var offset = IriSP.jQuery(this).offset();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10554
          var correction = IriSP.jQuery(this).outerWidth() / 2;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10555
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10556
          var offset_x = offset.left + correction - 106;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10557
          if (offset_x < 0)
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10558
            offset_x = 0;
15
6d9cd6f47d95 fixed outstanding bugs.
hamidouk
parents: 12
diff changeset
 10559
                    
0
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10560
          self.TooltipWidget.show(divTitle, color, offset_x, event.pageY - 160);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10561
    } })(divTitle)).mouseout(function(){
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10562
      IriSP.jQuery(this).animate({opacity: 0.3}, 5);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10563
      self.TooltipWidget.hide();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10564
    });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10565
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10566
    IriSP.jQuery("#" + id).click(function(_this, annotation) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10567
                                    return function() { _this.clickHandler(annotation)};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10568
                                 }(this, annotation));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10569
  }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10570
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10571
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10572
/* restores the view after a search */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10573
IriSP.SegmentsWidget.prototype.clear = function() {
15
6d9cd6f47d95 fixed outstanding bugs.
hamidouk
parents: 12
diff changeset
 10574
  this.selector.children(".Ldt-iri-chapter").css('border','none').animate({opacity:0.3}, 100);
0
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10575
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10576
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10577
IriSP.SegmentsWidget.prototype.clickHandler = function(annotation) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10578
  this._Popcorn.trigger("IriSP.SegmentsWidget.click", annotation.id);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10579
  var begin = (+ annotation.begin) / 1000;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10580
  this._Popcorn.currentTime(Math.round(begin));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10581
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10582
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10583
IriSP.SegmentsWidget.prototype.searchHandler = function(searchString) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10584
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10585
  if (searchString == "")
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10586
    return;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10587
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10588
  var matches = this._serializer.searchOccurences(searchString);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10589
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10590
  if (IriSP.countProperties(matches) > 0) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10591
    this._Popcorn.trigger("IriSP.search.matchFound");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10592
  } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10593
    this._Popcorn.trigger("IriSP.search.noMatchFound");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10594
  }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10595
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10596
  // un-highlight all the blocks
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10597
  this.selector.children(".Ldt-iri-chapter").css("opacity", 0.1);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10598
 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10599
  // then highlight the ones with matches.
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10600
  for (var id in matches) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10601
    var factor = 0.5 + matches[id] * 0.2;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10602
    this.selector.find("#"+id).dequeue();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10603
    this.selector.find("#"+id).css('border','1px red');
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10604
    this.selector.find("#"+id).animate({opacity:factor}, 200);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10605
  }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10606
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10607
 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10608
  this.oldSearchMatches = matches;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10609
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10610
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10611
IriSP.SegmentsWidget.prototype.searchFieldClearedHandler = function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10612
  this.clear();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10613
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10614
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10615
IriSP.SegmentsWidget.prototype.searchFieldClosedHandler = function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10616
  this.clear();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10617
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10618
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10619
IriSP.SegmentsWidget.prototype.positionUpdater = function() {  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10620
  var duration = this._serializer.currentMedia().meta["dc:duration"] / 1000;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10621
  var time = this._Popcorn.currentTime();
25
4f082f63e295 updated player version.
hamidouk
parents: 24
diff changeset
 10622
  //var position 	= ((time / duration) * 100).toFixed(2);
0
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10623
  var position 	= ((time / duration) * 100).toFixed(2);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10624
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10625
  this.positionMarker.css("left", position + "%");  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10626
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10627
IriSP.SliderWidget = function(Popcorn, config, Serializer) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10628
  IriSP.Widget.call(this, Popcorn, config, Serializer);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10629
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10630
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10631
IriSP.SliderWidget.prototype = new IriSP.Widget();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10632
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10633
IriSP.SliderWidget.prototype.draw = function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10634
  var self = this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10635
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10636
  this.selector.append(Mustache.to_html(IriSP.sliderWidget_template, {}));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10637
  this.selector.addClass("Ldt-SliderMinimized");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10638
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10639
  this.sliderBackground = this.selector.find(".Ldt-sliderBackground");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10640
  this.sliderForeground = this.selector.find(".Ldt-sliderForeground");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10641
  this.positionMarker = this.selector.find(".Ldt-sliderPositionMarker");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10642
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10643
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10644
  // a special variable to stop methods from tinkering
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10645
  // with the positionMarker when the user is dragging it
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10646
  this.draggingOngoing = false;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10647
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10648
  // another special variable used by the timeout handler to
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10649
  // open or close the slider.
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10650
  this.sliderMaximized = false;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10651
  this.timeOutId = null;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10652
25
4f082f63e295 updated player version.
hamidouk
parents: 24
diff changeset
 10653
  
0
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10654
  this.positionMarker.draggable({axis: "x",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10655
  start: IriSP.wrap(this, this.positionMarkerDraggingStartedHandler),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10656
  stop: IriSP.wrap(this, this.positionMarkerDraggedHandler),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10657
  containment: "parent"
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10658
  });
25
4f082f63e295 updated player version.
hamidouk
parents: 24
diff changeset
 10659
  this.positionMarker.css("position", "absolute");
4f082f63e295 updated player version.
hamidouk
parents: 24
diff changeset
 10660
  
0
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10661
  this.sliderBackground.click(function(event) { self.backgroundClickHandler.call(self, event); });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10662
  this.sliderForeground.click(function(event) { self.foregroundClickHandler.call(self, event); });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10663
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10664
  this.selector.hover(IriSP.wrap(this, this.mouseOverHandler), IriSP.wrap(this, this.mouseOutHandler));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10665
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10666
  // update the positions
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10667
  this._Popcorn.listen("timeupdate", IriSP.wrap(this, this.sliderUpdater));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10668
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10669
  // special messages :
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10670
  this._Popcorn.listen("IriSP.PlayerWidget.MouseOver", IriSP.wrap(this, this.mouseOverHandler));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10671
  this._Popcorn.listen("IriSP.PlayerWidget.MouseOut", IriSP.wrap(this, this.mouseOutHandler));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10672
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10673
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10674
/* update the slider and the position marker as time passes */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10675
IriSP.SliderWidget.prototype.sliderUpdater = function() {
27
7f6b568443d4 fixes a bunch of scrolling bugs.
hamidouk
parents: 26
diff changeset
 10676
  if(this.draggingOngoing || this._disableUpdate)
0
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10677
    return;
12
dbcb0dc6a844 updated player.
hamidouk
parents: 10
diff changeset
 10678
  
0
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10679
  var time = this._Popcorn.currentTime();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10680
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10681
  var duration = this._serializer.currentMedia().meta["dc:duration"] / 1000;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10682
  var percent = ((time / duration) * 100).toFixed(2);
10
c0bfbc7be078 re-bumped player.
hamidouk
parents: 9
diff changeset
 10683
  
c0bfbc7be078 re-bumped player.
hamidouk
parents: 9
diff changeset
 10684
  /* we do these complicated calculations to center exactly
c0bfbc7be078 re-bumped player.
hamidouk
parents: 9
diff changeset
 10685
     the position Marker */
c0bfbc7be078 re-bumped player.
hamidouk
parents: 9
diff changeset
 10686
  var pixels_to_percents = 100 / this.selector.width(); /* how much is a pixel in percents */
c0bfbc7be078 re-bumped player.
hamidouk
parents: 9
diff changeset
 10687
  var positionMarker_width = this.positionMarker.width();
c0bfbc7be078 re-bumped player.
hamidouk
parents: 9
diff changeset
 10688
  var correction = (pixels_to_percents * positionMarker_width) / 2;
c0bfbc7be078 re-bumped player.
hamidouk
parents: 9
diff changeset
 10689
c0bfbc7be078 re-bumped player.
hamidouk
parents: 9
diff changeset
 10690
  var newPos = percent - correction;
c0bfbc7be078 re-bumped player.
hamidouk
parents: 9
diff changeset
 10691
  if (newPos <= 0)
c0bfbc7be078 re-bumped player.
hamidouk
parents: 9
diff changeset
 10692
    newPos = 0;
c0bfbc7be078 re-bumped player.
hamidouk
parents: 9
diff changeset
 10693
  
0
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10694
	this.sliderForeground.css("width", percent + "%");
10
c0bfbc7be078 re-bumped player.
hamidouk
parents: 9
diff changeset
 10695
	this.positionMarker.css("left", newPos + "%");
0
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10696
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10697
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10698
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10699
IriSP.SliderWidget.prototype.backgroundClickHandler = function(event) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10700
  /* this piece of code is a little bit convoluted - here's how it works :
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10701
     we want to handle clicks on the progress bar and convert those to seeks in the media.
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10702
     However, jquery only gives us a global position, and we want a number of pixels relative
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10703
     to our container div, so we get the parent position, and compute an offset to this position,
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10704
     and finally compute the progress ratio in the media.
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10705
     Finally we multiply this ratio with the duration to get the correct time
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10706
  */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10707
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10708
  var parentOffset = this.sliderBackground.parent().offset();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10709
  var width = this.sliderBackground.width();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10710
  var relX = event.pageX - parentOffset.left;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10711
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10712
  var duration = this._serializer.currentMedia().meta["dc:duration"] / 1000;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10713
  var newTime = ((relX / width) * duration).toFixed(2);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10714
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10715
  this._Popcorn.currentTime(newTime);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10716
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10717
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10718
/* same function as the previous one, except that it handles clicks
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10719
   on the foreground element */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10720
IriSP.SliderWidget.prototype.foregroundClickHandler = function(event) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10721
  var parentOffset = this.sliderForeground.parent().offset();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10722
  var width = this.sliderBackground.width();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10723
  var relX = event.pageX - parentOffset.left;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10724
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10725
  var duration = this._serializer.currentMedia().meta["dc:duration"] / 1000;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10726
  var newTime = ((relX / width) * duration).toFixed(2);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10727
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10728
  this._Popcorn.currentTime(newTime);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10729
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10730
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10731
/* handles mouse over the slider */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10732
IriSP.SliderWidget.prototype.mouseOverHandler = function(event) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10733
  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10734
  if (this.timeOutId !== null) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10735
    window.clearTimeout(this.timeOutId);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10736
  }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10737
 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10738
  this.sliderMaximized = true;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10739
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10740
  this.sliderBackground.animate({"height": "9px"}, 100);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10741
  this.sliderForeground.animate({"height": "9px"}, 100);
22
11011b712cf2 updated player version.
hamidouk
parents: 17
diff changeset
 10742
  this.positionMarker.animate({"height": "9px", "width": "9px"}, 100);
25
4f082f63e295 updated player version.
hamidouk
parents: 24
diff changeset
 10743
  //this.positionMarker.css("margin-top", "-4px");
0
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10744
  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10745
//  this.selector.removeClass("Ldt-SliderMinimized");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10746
//  this.selector.addClass("Ldt-SliderMaximized");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10747
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10748
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10749
/* handles when the mouse leaves the slider */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10750
IriSP.SliderWidget.prototype.mouseOutHandler = function(event) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10751
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10752
  this.timeOutId = window.setTimeout(IriSP.wrap(this, this.minimizeOnTimeout),
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10753
                                     IriSP.widgetsDefaults.SliderWidget.minimize_period);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10754
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10755
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10756
IriSP.SliderWidget.prototype.minimizeOnTimeout = function(event) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10757
  this.sliderBackground.animate({"height": "5px"}, 100);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10758
  this.sliderForeground.animate({"height": "5px"}, 100);
22
11011b712cf2 updated player version.
hamidouk
parents: 17
diff changeset
 10759
  this.positionMarker.animate({"height": "5px", "width": "5px"}, 100);
11011b712cf2 updated player version.
hamidouk
parents: 17
diff changeset
 10760
  this.positionMarker.css("margin-top", "0px");
0
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10761
  this.sliderMinimized = true;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10762
  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10763
//  this.selector.removeClass("Ldt-SliderMaximized");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10764
//  this.selector.addClass("Ldt-SliderMinimized");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10765
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10766
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10767
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10768
// called when the user starts dragging the position indicator
12
dbcb0dc6a844 updated player.
hamidouk
parents: 10
diff changeset
 10769
IriSP.SliderWidget.prototype.positionMarkerDraggingStartedHandler = function(event, ui) {  
0
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10770
  this.draggingOngoing = true;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10771
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10772
27
7f6b568443d4 fixes a bunch of scrolling bugs.
hamidouk
parents: 26
diff changeset
 10773
IriSP.SliderWidget.prototype.positionMarkerDraggedHandler = function(event, ui) {   
12
dbcb0dc6a844 updated player.
hamidouk
parents: 10
diff changeset
 10774
  this._disableUpdate = true; // disable slider position updates while dragging is ongoing.
dbcb0dc6a844 updated player.
hamidouk
parents: 10
diff changeset
 10775
  window.setTimeout(IriSP.wrap(this, function() { this._disableUpdate = false; }), 500);
27
7f6b568443d4 fixes a bunch of scrolling bugs.
hamidouk
parents: 26
diff changeset
 10776
7f6b568443d4 fixes a bunch of scrolling bugs.
hamidouk
parents: 26
diff changeset
 10777
  var parentOffset = this.sliderForeground.parent().offset();
0
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10778
  var width = this.sliderBackground.width();
27
7f6b568443d4 fixes a bunch of scrolling bugs.
hamidouk
parents: 26
diff changeset
 10779
  var relX = event.pageX - parentOffset.left;
7f6b568443d4 fixes a bunch of scrolling bugs.
hamidouk
parents: 26
diff changeset
 10780
0
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10781
  var duration = this._serializer.currentMedia().meta["dc:duration"] / 1000;
27
7f6b568443d4 fixes a bunch of scrolling bugs.
hamidouk
parents: 26
diff changeset
 10782
  var newTime = ((relX / width) * duration).toFixed(2);
0
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10783
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10784
  this._Popcorn.currentTime(newTime);
27
7f6b568443d4 fixes a bunch of scrolling bugs.
hamidouk
parents: 26
diff changeset
 10785
  
0
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10786
  this.draggingOngoing = false;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10787
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10788
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10789
/* this widget displays a small tooltip */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10790
IriSP.TooltipWidget = function(Popcorn, config, Serializer) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10791
  IriSP.Widget.call(this, Popcorn, config, Serializer);
15
6d9cd6f47d95 fixed outstanding bugs.
hamidouk
parents: 12
diff changeset
 10792
  this._shown = false;
22
11011b712cf2 updated player version.
hamidouk
parents: 17
diff changeset
 10793
  this._displayedText = "";
11011b712cf2 updated player version.
hamidouk
parents: 17
diff changeset
 10794
  this._hideTimeout = -1;
0
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10795
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10796
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10797
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10798
IriSP.TooltipWidget.prototype = new IriSP.Widget();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10799
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10800
IriSP.TooltipWidget.prototype.draw = function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10801
  var templ = Mustache.to_html(IriSP.tooltipWidget_template);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10802
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10803
  this.selector.append(templ);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10804
  this.hide();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10805
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10806
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10807
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10808
IriSP.TooltipWidget.prototype.clear = function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10809
	this.selector.find(".tiptext").text("");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10810
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10811
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10812
IriSP.TooltipWidget.prototype.show = function(text, color, x, y) {
23
44945db9746a updated player version - fixes tooltip bug.
hamidouk
parents: 22
diff changeset
 10813
44945db9746a updated player version - fixes tooltip bug.
hamidouk
parents: 22
diff changeset
 10814
  if (this._displayedText == text)
0
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10815
    return;
22
11011b712cf2 updated player version.
hamidouk
parents: 17
diff changeset
 10816
  
0
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10817
  this.selector.find(".tipcolor").css("background-color", color);
22
11011b712cf2 updated player version.
hamidouk
parents: 17
diff changeset
 10818
  this._displayedText = text;
0
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10819
	this.selector.find(".tiptext").text(text);
22
11011b712cf2 updated player version.
hamidouk
parents: 17
diff changeset
 10820
  //this.selector.find(".tip").css("left", x).css("top", y);  
28
79c66920a1fb repercuting fixes.
hamidouk
parents: 27
diff changeset
 10821
  this.selector.find(".tip").css("left", x).css("top", y);
22
11011b712cf2 updated player version.
hamidouk
parents: 17
diff changeset
 10822
  this.selector.find(".tip").show();
15
6d9cd6f47d95 fixed outstanding bugs.
hamidouk
parents: 12
diff changeset
 10823
  this._shown = true;
0
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10824
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10825
23
44945db9746a updated player version - fixes tooltip bug.
hamidouk
parents: 22
diff changeset
 10826
IriSP.TooltipWidget.prototype.hide = function() {                                                   
44945db9746a updated player version - fixes tooltip bug.
hamidouk
parents: 22
diff changeset
 10827
  this.selector.find(".tip").hide();
44945db9746a updated player version - fixes tooltip bug.
hamidouk
parents: 22
diff changeset
 10828
  this._shown = false;  
26
b710fa62d522 fixed critical bug.
hamidouk
parents: 25
diff changeset
 10829
};/* a widget that displays tweet - used in conjunction with the polemicWidget */
0
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10830
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10831
IriSP.TweetsWidget = function(Popcorn, config, Serializer) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10832
  IriSP.Widget.call(this, Popcorn, config, Serializer);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10833
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10834
  this._displayingTweet = false;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10835
  this._timeoutId = undefined;  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10836
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10837
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10838
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10839
IriSP.TweetsWidget.prototype = new IriSP.Widget();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10840
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10841
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10842
IriSP.TweetsWidget.prototype.drawTweet = function(annotation) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10843
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10844
    var title = IriSP.formatTweet(annotation.content.title);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10845
    var img = annotation.content.img.src;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10846
    if (typeof(img) === "undefined" || img === "" || img === "None") {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10847
      img = IriSP.widgetsDefaults.TweetsWidget.default_profile_picture;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10848
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10849
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10850
    var imageMarkup = IriSP.templToHTML("<img src='{{src}}' alt='user image'></img>", 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10851
                                       {src : img});
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10852
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10853
    if (typeof(annotation.meta["dc:source"].content) !== "undefined") {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10854
      var tweetContents = JSON.parse(annotation.meta["dc:source"].content);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10855
      var creator = tweetContents.user.screen_name;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10856
      var real_name = tweetContents.user.name;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10857
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10858
      imageMarkup = IriSP.templToHTML("<a href='http://twitter.com/{{creator}}'><img src='{{src}}' alt='user image'></img></a>", 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10859
                                       {src : img, creator: creator});
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10860
            
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10861
      var formatted_date = new Date(tweetContents.created_at).toLocaleDateString();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10862
      title = IriSP.templToHTML("<a class='Ldt-tweet_userHandle' href='http://twitter.com/{{creator}}'>@{{creator}}</a> - " + 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10863
                                "<div class='Ldt-tweet_realName'>{{real_name}}</div>" +
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10864
                                "<div class='Ldt-tweet_tweetContents'>{{{ contents }}}</div>" +
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10865
                                "<div class='Ldt-tweet_date'>{{ date }}</div>", 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10866
                                {creator: creator, real_name: real_name, contents : title, date : formatted_date});
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10867
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10868
      this.selector.find(".Ldt-TweetReply").attr("href", "http://twitter.com/home?status=@" + creator + ":%20");
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10869
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10870
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10871
      var rtText = Mustache.to_html("http://twitter.com/home?status=RT @{{creator}}: {{text}}",
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10872
                                    {creator: creator, text: IriSP.encodeURI(annotation.content.title)});
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10873
      this.selector.find(".Ldt-Retweet").attr("href", rtText);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10874
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10875
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10876
    this.selector.find(".Ldt-tweetContents").html(title);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10877
    this.selector.find(".Ldt-tweetAvatar").html(imageMarkup);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10878
    this.selector.show("blind", 250); 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10879
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10880
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10881
IriSP.TweetsWidget.prototype.displayTweet = function(annotation) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10882
  if (this._displayingTweet === false) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10883
    this._displayingTweet = true;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10884
  } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10885
    window.clearTimeout(this._timeoutId);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10886
  }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10887
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10888
  this.drawTweet(annotation);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10889
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10890
  var time = this._Popcorn.currentTime();  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10891
  this._timeoutId = window.setTimeout(IriSP.wrap(this, this.clearPanel), IriSP.widgetsDefaults.TweetsWidget.tweet_display_period);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10892
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10893
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10894
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10895
IriSP.TweetsWidget.prototype.clearPanel = function() {  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10896
    this._displayingTweet = false;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10897
    this._timeoutId = undefined;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10898
    this.closePanel();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10899
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10900
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10901
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10902
IriSP.TweetsWidget.prototype.closePanel = function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10903
    if (this._timeoutId != undefined) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10904
      /* we're called from the "close window" link */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10905
      /* cancel the timeout */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10906
      window.clearTimeout(this._timeoutId);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10907
      this._timeoutId = null;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10908
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10909
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10910
    this.selector.hide("blind", 400);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10911
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10912
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10913
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10914
/* cancel the timeout if the user clicks on the keep panel open button */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10915
IriSP.TweetsWidget.prototype.keepPanel = function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10916
    if (this._timeoutId != undefined) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10917
      /* we're called from the "close window" link */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10918
      /* cancel the timeout */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10919
      window.clearTimeout(this._timeoutId);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10920
      this._timeoutId = null;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10921
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10922
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10923
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10924
IriSP.TweetsWidget.prototype.draw = function() {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10925
  var _this = this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10926
  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10927
  var tweetMarkup = IriSP.templToHTML(IriSP.tweetWidget_template, {"share_template" : IriSP.share_template});
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10928
  this.selector.append(tweetMarkup);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10929
  this.selector.hide();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10930
  this.selector.find(".Ldt-tweetWidgetMinimize").click(IriSP.wrap(this, this.closePanel));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10931
  this.selector.find(".Ldt-tweetWidgetKeepOpen").click(IriSP.wrap(this, this.keepPanel));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10932
  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10933
  this._Popcorn.listen("IriSP.PolemicTweet.click", IriSP.wrap(this, this.PolemicTweetClickHandler));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10934
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10935
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10936
IriSP.TweetsWidget.prototype.PolemicTweetClickHandler = function(tweet_id) {  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10937
  var index, annotation;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10938
  for (index in this._serializer._data.annotations) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10939
    annotation = this._serializer._data.annotations[index];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10940
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10941
    if (annotation.id === tweet_id)
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10942
      break;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10943
  }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10944
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10945
  if (annotation.id !== tweet_id)
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10946
      /* we haven't found it */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10947
      return;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10948
  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10949
  this.displayTweet(annotation);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10950
  return;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10951
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10952
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10953
IriSP.JSONSerializer = function(DataLoader, url) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10954
  IriSP.Serializer.call(this, DataLoader, url);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10955
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10956
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10957
IriSP.JSONSerializer.prototype = new IriSP.Serializer();
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10958
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10959
IriSP.JSONSerializer.prototype.serialize = function(data) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10960
  return JSON.stringify(data);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10961
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10962
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10963
IriSP.JSONSerializer.prototype.deserialize = function(data) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10964
  return JSON.parse(data);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10965
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10966
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10967
IriSP.JSONSerializer.prototype.sync = function(callback) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10968
  /* we don't have to do much because jQuery handles json for us */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10969
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10970
  var self = this;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10971
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10972
  var fn = function(data) {      
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10973
      self._data = data;      
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10974
      // sort the data too     
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10975
      self._data["annotations"].sort(function(a, b) 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10976
          { var a_begin = +a.begin;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10977
            var b_begin = +b.begin;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10978
            return a_begin - b_begin;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10979
          });
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10980
     
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10981
      callback(data);      
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10982
  };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10983
  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10984
  this._DataLoader.get(this._url, fn);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10985
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10986
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10987
IriSP.JSONSerializer.prototype.currentMedia = function() {  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10988
  return this._data.medias[0]; /* FIXME: don't hardcode it */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10989
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10990
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10991
/* this function searches for an annotation which matches title, description and keyword 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10992
   "" matches any field. 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10993
   Note: it ignores tweets.
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10994
*/    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10995
IriSP.JSONSerializer.prototype.searchAnnotations = function(title, description, keyword) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10996
    /* we can have many types of annotations. We want search to only look for regular segments */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10997
    /* the next two lines are a bit verbose because for some test data, _serializer.data.view is either
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10998
       null or undefined.
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 10999
    */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11000
    var view;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11001
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11002
    if (typeof(this._data.views) !== "undefined" && this._data.views !== null)
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11003
       view = this._data.views[0];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11004
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11005
    var searchViewType = "";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11006
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11007
    if(typeof(view) !== "undefined" && typeof(view.annotation_types) !== "undefined" && view.annotation_types.length > 1) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11008
            searchViewType = view.annotation_types[0];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11009
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11010
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11011
    var filterfn = function(annotation) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11012
      if( searchViewType  != "" && 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11013
          typeof(annotation.meta) !== "undefined" && 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11014
          typeof(annotation.meta["id-ref"]) !== "undefined" &&
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11015
          annotation.meta["id-ref"] !== searchViewType) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11016
        return true; // don't pass
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11017
      } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11018
          return false;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11019
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11020
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11021
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11022
    return this.searchAnnotationsFilter(title, description, keyword, filterfn);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11023
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11024
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11025
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11026
/* only look for tweets */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11027
IriSP.JSONSerializer.prototype.searchTweets = function(title, description, keyword) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11028
    /* we can have many types of annotations. We want search to only look for regular segments */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11029
    /* the next two lines are a bit verbose because for some test data, _serializer.data.view is either
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11030
       null or undefined.
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11031
    */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11032
    var view;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11033
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11034
    if (typeof(this._data.views) !== "undefined" && this._data.views !== null)
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11035
       view = this._data.views[0];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11036
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11037
    var searchViewType = "";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11038
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11039
    if(typeof(view) !== "undefined" && typeof(view.annotation_types) !== "undefined" && view.annotation_types.length > 1) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11040
            searchViewType = view.annotation_types[0];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11041
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11042
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11043
    var filterfn = function(annotation) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11044
      if( searchViewType  != "" && 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11045
          typeof(annotation.meta) !== "undefined" && 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11046
          typeof(annotation.meta["id-ref"]) !== "undefined" &&
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11047
          annotation.meta["id-ref"] !== searchViewType) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11048
        return false; // pass
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11049
      } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11050
          return true;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11051
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11052
    };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11053
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11054
    return this.searchAnnotationsFilter(title, description, keyword, filterfn);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11055
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11056
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11057
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11058
/*
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11059
  the previous function call this one, which is more general:
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11060
 */    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11061
IriSP.JSONSerializer.prototype.searchAnnotationsFilter = function(title, description, keyword, filter) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11062
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11063
    var rTitle;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11064
    var rDescription;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11065
    var rKeyword;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11066
    /* match anything if given the empty string */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11067
    if (title == "")
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11068
      title = ".*";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11069
    if (description == "")
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11070
      description = ".*";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11071
    if (keyword == "")
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11072
      keyword = ".*";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11073
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11074
    rTitle = new RegExp(title, "i");  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11075
    rDescription = new RegExp(description, "i");  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11076
    rKeyword = new RegExp(keyword, "i");  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11077
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11078
    var ret_array = [];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11079
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11080
    var i;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11081
    for (i in this._data.annotations) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11082
      var annotation = this._data.annotations[i];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11083
      
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11084
      /* filter the annotations whose type is not the one we want */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11085
      if (filter(annotation)) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11086
          continue;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11087
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11088
      
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11089
      if (rTitle.test(annotation.content.title) && 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11090
          rDescription.test(annotation.content.description)) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11091
          /* FIXME : implement keyword support */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11092
          ret_array.push(annotation);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11093
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11094
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11095
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11096
    return ret_array;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11097
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11098
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11099
/* breaks a string in words and searches each of these words. Returns an array
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11100
   of objects with the id of the annotation and its number of occurences.
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11101
   
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11102
   FIXME: optimize ? seems to be n^2 in the worst case.
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11103
*/
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11104
IriSP.JSONSerializer.prototype.searchOccurences = function(searchString) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11105
  var ret = { };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11106
  var keywords = searchString.split(/\s+/);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11107
  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11108
  for (var i in keywords) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11109
    var keyword = keywords[i];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11110
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11111
    // search this keyword in descriptions and title
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11112
    var found_annotations = []
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11113
    found_annotations = found_annotations.concat(this.searchAnnotations(keyword, "", ""));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11114
    found_annotations = found_annotations.concat(this.searchAnnotations("", keyword, ""));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11115
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11116
    for (var j in found_annotations) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11117
      var current_annotation = found_annotations[j];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11118
      
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11119
      if (!ret.hasOwnProperty(current_annotation.id)) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11120
        ret[current_annotation.id] = 1;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11121
      } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11122
        ret[current_annotation.id] += 1;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11123
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11124
      
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11125
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11126
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11127
  };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11128
  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11129
  return ret;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11130
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11131
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11132
/* breaks a string in words and searches each of these words. Returns an array
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11133
   of objects with the id of the annotation and its number of occurences.
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11134
   
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11135
   FIXME: optimize ? seems to be n^2 in the worst case.
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11136
*/
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11137
IriSP.JSONSerializer.prototype.searchTweetsOccurences = function(searchString) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11138
  var ret = { };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11139
  var keywords = searchString.split(/\s+/);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11140
  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11141
  for (var i in keywords) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11142
    var keyword = keywords[i];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11143
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11144
    // search this keyword in descriptions and title
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11145
    var found_annotations = []
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11146
    found_annotations = found_annotations.concat(this.searchTweets(keyword, "", ""));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11147
    found_annotations = found_annotations.concat(this.searchTweets("", keyword, ""));
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11148
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11149
    for (var j in found_annotations) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11150
      var current_annotation = found_annotations[j];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11151
      
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11152
      if (!ret.hasOwnProperty(current_annotation.id)) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11153
        ret[current_annotation.id] = 1;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11154
      } else {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11155
        ret[current_annotation.id] += 1;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11156
      }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11157
      
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11158
    }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11159
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11160
  };
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11161
  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11162
  return ret;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11163
};
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11164
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11165
/* takes the currentTime and returns all the annotations that are displayable at the moment 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11166
   NB: only takes account the first type of annotations - ignores tweets 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11167
   currentTime is in seconds.
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11168
 */
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11169
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11170
IriSP.JSONSerializer.prototype.currentAnnotations = function(currentTime) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11171
  var view;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11172
  var currentTimeMs = 1000 * currentTime;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11173
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11174
  if (typeof(this._data.views) !== "undefined" && this._data.views !== null)
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11175
     view = this._data.views[0];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11176
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11177
  var view_type = "";
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11178
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11179
  if(typeof(view) !== "undefined" && typeof(view.annotation_types) !== "undefined" && view.annotation_types.length >= 1) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11180
          view_type = view.annotation_types[0];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11181
  }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11182
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11183
  var ret_array = [];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11184
  
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11185
  var i;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11186
 
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11187
  for (i in this._data.annotations) {
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11188
    var annotation = this._data.annotations[i];
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11189
    
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11190
    if (annotation.meta["id-ref"] === view_type && annotation.begin <= currentTimeMs && annotation.end >= currentTimeMs)
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11191
      ret_array.push(annotation);
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11192
  }
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11193
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11194
  return ret_array;
d4dc097a6083 first import.
hamidouk
parents:
diff changeset
 11195
};