From 3998e0ba0f6be99d3e4de011e16b0d4fca2d36b3 Mon Sep 17 00:00:00 2001 From: Julio Montoya Date: Sun, 1 Apr 2012 13:58:21 +0200 Subject: [PATCH] Adding first draft of the timeline library see #4570 (no change in the database) --- main/css/base.css | 32 ++- main/inc/ajax/model.ajax.php | 37 ++- main/inc/ajax/timeline.ajax.php | 18 ++ main/inc/lib/database.constants.inc.php | 1 + main/inc/lib/database.lib.php | 4 +- .../lib/javascript/timeline/timeline-min.js | 13 + .../javascript/timeline/timeline-texture.png | Bin 0 -> 42976 bytes main/inc/lib/javascript/timeline/timeline.css | 135 ++++++++++ main/inc/lib/javascript/timeline/timeline.png | Bin 0 -> 10547 bytes main/inc/lib/model.lib.php | 39 ++- main/inc/lib/timeline.lib.php | 236 ++++++++++++++++++ main/template/default/layout/layout_1_col.tpl | 4 - main/template/default/layout/no_layout.tpl | 12 +- main/timeline/insert.sql | 18 ++ main/timeline/view.php | 40 +++ 15 files changed, 557 insertions(+), 32 deletions(-) create mode 100644 main/inc/ajax/timeline.ajax.php create mode 100644 main/inc/lib/javascript/timeline/timeline-min.js create mode 100644 main/inc/lib/javascript/timeline/timeline-texture.png create mode 100644 main/inc/lib/javascript/timeline/timeline.css create mode 100644 main/inc/lib/javascript/timeline/timeline.png create mode 100644 main/inc/lib/timeline.lib.php create mode 100644 main/timeline/insert.sql create mode 100644 main/timeline/view.php diff --git a/main/css/base.css b/main/css/base.css index 2ade197849..4ac6d09adc 100644 --- a/main/css/base.css +++ b/main/css/base.css @@ -2878,6 +2878,12 @@ form .formw .freeze { -o-box-shadow: 2px 2px 19px #aaa; -webkit-box-shadow: 2px 2px 19px #aaa; -moz-box-shadow: 2px 2px 19px #aaa; + + -webkit-border-radius: 6px; + -opera-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + background-color: white; border: 0.1em dotted #D4E06B; @@ -2889,7 +2895,7 @@ form .formw .freeze { padding-top: 0.9em; position: absolute; text-align: center; - width: 80px; + width: 120px; z-index: 40; } @@ -2934,9 +2940,7 @@ form .formw .freeze { border: 2px dotted orange; } - .edit_block { - font-size:14px; z-index: 200; } @@ -3260,10 +3264,7 @@ a:active{ display:none; } - - -#timeline { - +#my_timeline { background: url("dot.gif") repeat-x scroll left 45px; height: 350px; margin: 0px auto; @@ -3572,4 +3573,21 @@ a.forum_group_link { #hide_bar_template:hover { background-color:#aaa; +} + +.timeline-example { + background-color: #FFFFFF; + border: 1px solid #CCCCCC; + border-radius: 10px 10px 10px 10px; + box-shadow: 1px 2px 6px rgba(0, 0, 0, 0.25); + margin-bottom: 20px; + padding-bottom: 20px; + padding-top: 20px; +} + +#timeline { + clear: both; + height: 600px !important; + position: relative !important; + z-index: 100; } \ No newline at end of file diff --git a/main/inc/ajax/model.ajax.php b/main/inc/ajax/model.ajax.php index 3e8b7a3c50..96ef258eb8 100644 --- a/main/inc/ajax/model.ajax.php +++ b/main/inc/ajax/model.ajax.php @@ -21,7 +21,7 @@ if (!in_array($sord, array('asc','desc'))) { $sord = 'desc'; } -if (!in_array($action, array('get_exercise_results', 'get_work_user_list'))) { +if (!in_array($action, array('get_exercise_results', 'get_work_user_list', 'get_timelines'))) { api_protect_admin_script(true); } @@ -112,6 +112,11 @@ switch ($action) { require_once $libpath.'sessionmanager.lib.php'; $count = SessionManager::get_count_admin(); break; + case 'get_timelines': + require_once $libpath.'timeline.lib.php'; + $obj = new Timeline(); + $count = $obj->get_count(); + break; case 'get_gradebooks': require_once $libpath.'gradebook.lib.php'; $obj = new Gradebook(); @@ -162,6 +167,7 @@ $is_tutor = api_is_allowed_to_edit(true); //5. Querying the DB for the elements $columns = array(); + switch ($action) { case 'get_work_user_list': if (isset($_GET['type']) && $_GET['type'] == 'simple') { @@ -186,6 +192,29 @@ switch ($action) { case 'get_sessions': $columns = array('name', 'nbr_courses','category_name', 'date_start','date_end', 'coach_name', 'session_active', 'visibility'); $result = SessionManager::get_sessions_admin(array('where'=> $where_condition, 'order'=>"$sidx $sord", 'limit'=> "$start , $limit")); + break; + case 'get_timelines': + $columns = array('headline', 'actions'); + //$columns = array('headline', 'type', 'start_date', 'end_date', 'text', 'media', 'media_credit', 'media_caption', 'title_slide', 'parent_id'); + + if(!in_array($sidx, $columns)) { + $sidx = 'headline'; + } + $course_id = api_get_course_int_id(); + $result = Database::select('*', $obj->table, array('where' => array('parent_id = ? AND c_id = ?' => array('0', $course_id)), 'order'=>"$sidx $sord", 'LIMIT'=> "$start , $limit")); + $new_result = array(); + foreach ($result as $item) { + if (!$item['status']) { + $item['name'] = ''.$item['name'].''; + } + $item['headline'] = Display::url($item['headline'], api_get_path(WEB_CODE_PATH).'timeline/view.php?id='.$item['id']); + $item['actions'] = Display::url(Display::return_icon('add.png', get_lang('AddItems')), api_get_path(WEB_CODE_PATH).'timeline/?action=add_item&parent_id='.$item['id']); + $item['actions'] .= Display::url(Display::return_icon('edit.png', get_lang('Edit')), api_get_path(WEB_CODE_PATH).'timeline/?action=edit&id='.$item['id']); + $item['actions'] .= Display::url(Display::return_icon('delete.png', get_lang('Delete')), api_get_path(WEB_CODE_PATH).'timeline/?action=delete&id='.$item['id']); + + $new_result[] = $item; + } + $result = $new_result; break; case 'get_gradebooks': $columns = array('name', 'certificates','skills', 'actions', 'has_certificates'); @@ -253,8 +282,7 @@ switch ($action) { } $new_result[] = $item; } - $result = $new_result; - + $result = $new_result; break; case 'get_usergroups': $columns = array('name', 'users', 'courses','sessions','actions'); @@ -281,7 +309,8 @@ switch ($action) { } //var_dump($result); -$allowed_actions = array('get_careers', 'get_promotions', 'get_usergroups', 'get_gradebooks', 'get_sessions', 'get_exercise_results', 'get_work_user_list'); +$allowed_actions = array('get_careers', 'get_promotions', 'get_usergroups', 'get_gradebooks', + 'get_sessions', 'get_exercise_results', 'get_work_user_list', 'get_timelines'); //5. Creating an obj to return a json if (in_array($action, $allowed_actions)) { $response = new stdClass(); diff --git a/main/inc/ajax/timeline.ajax.php b/main/inc/ajax/timeline.ajax.php new file mode 100644 index 0000000000..2a0c269a9a --- /dev/null +++ b/main/inc/ajax/timeline.ajax.php @@ -0,0 +1,18 @@ +get_timeline_content($_GET['id']); + echo json_encode($items); + /*echo '
';
+        echo json_encode($items);
+        echo '
'; + var_dump($items);*/ + break; +} \ No newline at end of file diff --git a/main/inc/lib/database.constants.inc.php b/main/inc/lib/database.constants.inc.php index 2f224ed2c8..0742da25f4 100644 --- a/main/inc/lib/database.constants.inc.php +++ b/main/inc/lib/database.constants.inc.php @@ -329,3 +329,4 @@ define('TABLE_MAIN_SKILL_PROFILE', 'skill_profile'); define('TABLE_MAIN_SKILL_REL_PROFILE', 'skill_rel_profile'); define('TABLE_MAIN_CHAT', 'chat'); +define('TABLE_TIMELINE', 'timeline'); \ No newline at end of file diff --git a/main/inc/lib/database.lib.php b/main/inc/lib/database.lib.php index 65903ab4a2..8c46fd4929 100644 --- a/main/inc/lib/database.lib.php +++ b/main/inc/lib/database.lib.php @@ -1148,7 +1148,7 @@ class Database { * @example array('where'=> array('name = "Julio" AND lastname = "montoya")) */ - public static function select($columns, $table_name, $conditions = array(), $type_result = 'all', $option = 'ASSOC') { + public static function select($columns, $table_name, $conditions = array(), $type_result = 'all', $option = 'ASSOC') { $conditions = self::parse_conditions($conditions); //@todo we could do a describe here to check the columns ... @@ -1164,7 +1164,7 @@ class Database { } $sql = "SELECT $clean_columns FROM $table_name $conditions"; - //echo $sql.'
'; + //var_dump($sql); $result = self::query($sql); $array = array(); //if (self::num_rows($result) > 0 ) { diff --git a/main/inc/lib/javascript/timeline/timeline-min.js b/main/inc/lib/javascript/timeline/timeline-min.js new file mode 100644 index 0000000000..ca4402f4a6 --- /dev/null +++ b/main/inc/lib/javascript/timeline/timeline-min.js @@ -0,0 +1,13 @@ +/* Verite + * Verite JS Master + * Version: 0.1 + * Date: December 12, 2011 + * Copyright 2011 Verite + * Designed and built by Zach Wise digitalartwork.net + * ----------------------------------------------------- *//* CodeKit Import +================================================== *//* Simple JavaScript Inheritance + * By John Resig http://ejohn.org/ + * MIT Licensed. +================================================== */function trace(a){window.console?console.log(a):typeof jsTrace!="undefined"&&jsTrace.send(a)}function onYouTubePlayerAPIReady(){VMM.ExternalAPI.youtube.onAPIReady()}(function(){var a=!1,b=/xyz/.test(function(){xyz})?/\b_super\b/:/.*/;this.Class=function(){};Class.extend=function(c){function g(){!a&&this.init&&this.init.apply(this,arguments)}var d=this.prototype;a=!0;var e=new this;a=!1;for(var f in c)e[f]=typeof c[f]=="function"&&typeof d[f]=="function"&&b.test(c[f])?function(a,b){return function(){var c=this._super;this._super=d[a];var e=b.apply(this,arguments);this._super=c;return e}}(f,c[f]):c[f];g.prototype=e;g.prototype.constructor=g;g.extend=arguments.callee;return g}})();var global=function(){return this||(1,eval)("this")}();if(typeof VMM=="undefined"){var VMM=Class.extend({});VMM.master_config={init:function(){return this},youtube:{active:!1,array:[],api_loaded:!1}}.init();VMM.master_config={init:function(){return this},youtube:{active:!1,array:[],api_loaded:!1,que:[]}}.init();VMM.createElement=function(a,b,c,d,e){var f="";if(a!=null&&a!=""){f+="<"+a;c!=null&&c!=""&&(f+=" class='"+c+"'");d!=null&&d!=""&&(f+=" "+d);e!=null&&e!=""&&(f+=" "+e);f+=">";b!=null&&b!=""&&(f+=b);f=f+""}return f};VMM.createMediaElement=function(a,b,c){var d="",e=!1;d+="
";if(a!=null&&a!=""){valid=!0;d+="";c!=null&&c!=""&&(d+=VMM.createElement("div",c,"credit"));b!=null&&b!=""&&(d+=VMM.createElement("div",b,"caption"))}d+="
";return d};VMM.attachElement=function(a,b){typeof jQuery!="undefined"&&$(a).html(b)};VMM.appendElement=function(a,b){typeof jQuery!="undefined"&&$(a).append(b)};VMM.getHTML=function(a){var b;if(typeof jQuery!="undefined"){b=$(a).html();return b}};VMM.getElement=function(a,b){var c;if(typeof jQuery!="undefined"){b?c=$(a).parent().get(0):c=$(a).get(0);return c}};VMM.bindEvent=function(a,b,c,d){var e,f="click",g={};c!=null&&c!=""&&(f=c);g!=null&&g!=""&&(g=d);typeof jQuery!="undefined"&&$(a).bind(f,g,b)};VMM.unbindEvent=function(a,b,c){var d,e="click",f={};c!=null&&c!=""&&(e=c);typeof jQuery!="undefined"&&$(a).unbind(e,b)};VMM.fireEvent=function(a,b,c){var d,e="click",f=[];b!=null&&b!=""&&(e=b);c!=null&&c!=""&&(f=c);typeof jQuery!="undefined"&&$(a).trigger(e,f)};VMM.getJSON=function(a,b){typeof jQuery!="undefined"&&$.getJSON(a,b)};VMM.appendAndGetElement=function(a,b,c,d){var e,f="
",g="",h="";b!=null&&b!=""&&(f=b);c!=null&&c!=""&&(g=c);d!=null&&d!=""&&(h=d);if(typeof jQuery!="undefined"){e=$(b);e.addClass(g);e.html(h);$(a).append(e)}return e};VMM.Element={init:function(){return this},hide:function(a,b){b!=null&&b!=""?typeof jQuery!="undefined"&&$(a).hide(b):typeof jQuery!="undefined"&&$(a).hide()},remove:function(a){typeof jQuery!="undefined"&&$(a).remove()},detach:function(a){typeof jQuery!="undefined"&&$(a).detach()},append:function(a,b){typeof jQuery!="undefined"&&$(a).append(b)},show:function(a,b){b!=null&&b!=""?typeof jQuery!="undefined"&&$(a).show(b):typeof jQuery!="undefined"&&$(a).show()},load:function(a,b,c){var d={elem:a};d!=null&&d!=""&&(d=c);typeof jQuery!="undefined"&&$(a).load(d,b)},addClass:function(a,b){typeof jQuery!="undefined"&&$(a).addClass(b)},removeClass:function(a,b){typeof jQuery!="undefined"&&$(a).removeClass(b)},attr:function(a,b,c){if(c!=null&&c!="")typeof jQuery!="undefined"&&$(a).attr(b,c);else if(typeof jQuery!="undefined")return $(a).attr(b)},prop:function(a,b,c){typeof jQuery=="undefined"||!/[1-9]\.[3-9].[1-9]/.test($.fn.jquery)?VMM.Element.attribute(a,b,c):$(a).prop(b,c)},attribute:function(a,b,c){if(c!=null&&c!="")typeof jQuery!="undefined"&&$(a).attr(b,c);else if(typeof jQuery!="undefined")return $(a).attr(b)},visible:function(a,b){if(b!=null)typeof jQuery!="undefined"&&(b?$(a).show(0):$(a).hide(0));else if(typeof jQuery!="undefined")return $(a).is(":visible")?!0:!1},css:function(a,b,c){if(c!=null&&c!="")typeof jQuery!="undefined"&&$(a).css(b,c);else if(typeof jQuery!="undefined")return $(a).css(b)},cssmultiple:function(a,b){if(typeof jQuery!="undefined")return $(a).css(b)},offset:function(a){var b;typeof jQuery!="undefined"&&(b=$(a).offset());return b},position:function(a){var b;typeof jQuery!="undefined"&&(b=$(a).position());return b},width:function(a,b){if(b!=null&&b!="")typeof jQuery!="undefined"&&$(a).width(b);else if(typeof jQuery!="undefined")return $(a).width()},height:function(a,b){if(b!=null&&b!="")typeof jQuery!="undefined"&&$(a).height(b);else if(typeof jQuery!="undefined")return $(a).height()},toggleClass:function(a,b){typeof jQuery!="undefined"&&$(a).toggleClass(b)},each:function(a,b){typeof jQuery!="undefined"&&$(a).each(b)},html:function(a,b){var c;if(typeof jQuery!="undefined"){c=$(a).html();return c}if(b!=null&&b!="")typeof jQuery!="undefined"&&$(a).html(b);else{var c;if(typeof jQuery!="undefined"){c=$(a).html();return c}}},find:function(a,b){if(typeof jQuery!="undefined")return $(a).find(b)},stop:function(a){typeof jQuery!="undefined"&&$(a).stop()},animate:function(a,b,c,d,e){var f="easein",g=1e3,h={};b!=null&&(b<1?g=1:g=Math.round(b));c!=null&&c!=""&&(f=c);d!=null?h=d:h={opacity:0};if(VMM.Browser.device=="mobile"||VMM.Browser.device=="tablet"){var i=Math.round(g/1500*10)/10,j=i+"s";VMM.Element.css(a,"-webkit-transition","all "+j+" ease");VMM.Element.css(a,"-moz-transition","all "+j+" ease");VMM.Element.css(a,"-o-transition","all "+j+" ease");VMM.Element.css(a,"-ms-transition","all "+j+" ease");VMM.Element.css(a,"transition","all "+j+" ease");VMM.Element.cssmultiple(a,h)}else typeof jQuery!="undefined"&&(e!=null&&e!=""?$(a).animate(h,{queue:!1,duration:g,easing:f,complete:e}):$(a).animate(h,{queue:!1,duration:g,easing:f}))}}.init();VMM.TouchSlider={createPanel:function(a,b,c,d,e,f){VMM.TouchSlider.vertical=!1;VMM.TouchSlider.vertical=e;var g=d;VMM.TouchSlider.width=c;VMM.TouchSlider.height=f;VMM.TouchSlider.makeTouchable(a,b)},removePanel:function(a){VMM.unbindEvent(a,VMM.TouchSlider.onTouchStart,"touchstart");VMM.unbindEvent(a,VMM.TouchSlider.onTouchMove,"touchmove");VMM.unbindEvent(a,VMM.TouchSlider.onTouchEnd,"touchend")},makeTouchable:function(a,b){VMM.bindEvent(a,VMM.TouchSlider.onTouchStart,"touchstart",{element:b});VMM.bindEvent(a,VMM.TouchSlider.onTouchMove,"touchmove",{element:b});VMM.bindEvent(a,VMM.TouchSlider.onTouchEnd,"touchend",{element:b})},onTouchStart:function(a){VMM.TouchSlider.touchStart(a.data.element,a);a.preventDefault();a.stopPropagation();return!0},onTouchEnd:function(a){a.preventDefault();a.stopPropagation();if(VMM.TouchSlider.sliding){VMM.TouchSlider.sliding=!1;VMM.TouchSlider.touchEnd(a.data.element,a);return!1}return!0},onTouchMove:function(a){VMM.TouchSlider.touchMove(a.data.element,a);a.preventDefault();a.stopPropagation();return!1},getLeft:function(a){return parseInt(VMM.Element.css(a,"left").substring(0,VMM.Element.css(a,"left").length-2),10)},getTop:function(a){return parseInt(VMM.Element.css(a,"top").substring(0,VMM.Element.css(a,"top").length-2),10)},touchStart:function(a,b){VMM.Element.css(a,"-webkit-transition-duration","0");VMM.TouchSlider.startX=b.originalEvent.touches[0].screenX;VMM.TouchSlider.startY=b.originalEvent.touches[0].screenY;VMM.TouchSlider.startLeft=VMM.TouchSlider.getLeft(a);VMM.TouchSlider.startTop=VMM.TouchSlider.getTop(a);VMM.TouchSlider.touchStartTime=(new Date).getTime()},touchEnd:function(a,b){if(VMM.TouchSlider.getLeft(a)>0){VMM.TouchSlider.vertical?VMM.Element.animate(a,1e3,"",{top:0}):VMM.Element.animate(a,1e3,"",{left:0});VMM.TouchSlider.startX=null;VMM.TouchSlider.startY=null;VMM.fireEvent(a,"TOUCHUPDATE",[0])}else VMM.TouchSlider.slideMomentum(a,b)},slideMomentum:function(a,b){var c=((new Date).getTime()-VMM.TouchSlider.touchStartTime)*10,d=c,e=VMM.TouchSlider.getLeft(a),f=VMM.TouchSlider.getTop(a),g=6e3*(Math.abs(VMM.TouchSlider.startLeft)-Math.abs(e)),h=6e3*(Math.abs(VMM.TouchSlider.startTop)-Math.abs(f));c=Math.round(g/c);slideAdjustY=Math.round(h/c);var i=c+e,j=slideAdjustY+f,k=j%VMM.TouchSlider.height,l=i%VMM.TouchSlider.width,m={top:Math.min(0,j),left:Math.min(0,i),time:d};VMM.fireEvent(a,"TOUCHUPDATE",[m]);VMM.TouchSlider.startX=null;VMM.TouchSlider.startY=null},doSlide:function(a,b,c){VMM.Element.css(a,"-webkit-transition-property","left");VMM.Element.css(a,"-webkit-transition-duration",c);VMM.Element.css(a,"left",b)},touchMove:function(a,b){!!VMM.TouchSlider.sliding;VMM.TouchSlider.sliding=!0;if(VMM.TouchSlider.vertical)if(VMM.TouchSlider.startY>b.originalEvent.touches[0].screenY){VMM.Element.css(a,"top",-(VMM.TouchSlider.startY-b.originalEvent.touches[0].screenY-VMM.TouchSlider.startTop));VMM.TouchSlider.slidingTop=!0}else{var c=b.originalEvent.touches[0].screenY-VMM.TouchSlider.startY+VMM.TouchSlider.startTop;VMM.Element.css(a,"top",-(VMM.TouchSlider.startY-b.originalEvent.touches[0].screenY-VMM.TouchSlider.startTop));VMM.TouchSlider.slidingTop=!1}else if(VMM.TouchSlider.startX>b.originalEvent.touches[0].screenX){VMM.Element.css(a,"left",-(VMM.TouchSlider.startX-b.originalEvent.touches[0].screenX-VMM.TouchSlider.startLeft));VMM.TouchSlider.slidingLeft=!0}else{var d=b.originalEvent.touches[0].screenX-VMM.TouchSlider.startX+VMM.TouchSlider.startLeft;VMM.Element.css(a,"left",-(VMM.TouchSlider.startX-b.originalEvent.touches[0].screenX-VMM.TouchSlider.startLeft));VMM.TouchSlider.slidingLeft=!1}}};VMM.hideUrlBar=function(){var a=window,b=a.document;if(!location.hash||!a.addEventListener){window.scrollTo(0,1);var c=1,d=setInterval(function(){if(b.body){clearInterval(d);c="scrollTop"in b.body?b.body.scrollTop:1;a.scrollTo(0,c===1?0:1)}},15);a.addEventListener("load",function(){setTimeout(function(){a.scrollTo(0,c===1?0:1)},0)},!1)}};VMM.DragSlider={createPanel:function(a,b,c,d,e){var f=d;VMM.DragSlider.width=c;VMM.DragSlider.makeDraggable(a,b);VMM.DragSlider.drag_elem=a;VMM.DragSlider.sticky=e},makeDraggable:function(a,b){VMM.bindEvent(a,VMM.DragSlider.onDragStart,"mousedown",{element:b,delement:a});VMM.bindEvent(a,VMM.DragSlider.onDragEnd,"mouseup",{element:b,delement:a});VMM.bindEvent(a,VMM.DragSlider.onDragLeave,"mouseleave",{element:b,delement:a})},cancelSlide:function(a){VMM.unbindEvent(VMM.DragSlider.drag_elem,VMM.DragSlider.onDragMove,"mousemove");return!0},onDragLeave:function(a){VMM.unbindEvent(a.data.delement,VMM.DragSlider.onDragMove,"mousemove");a.preventDefault();a.stopPropagation();return!0},onDragStart:function(a){VMM.DragSlider.dragStart(a.data.element,a.data.delement,a);a.preventDefault();a.stopPropagation();return!0},onDragEnd:function(a){a.preventDefault();a.stopPropagation();if(VMM.DragSlider.sliding){VMM.DragSlider.sliding=!1;VMM.DragSlider.dragEnd(a.data.element,a.data.delement,a);return!1}return!0},onDragMove:function(a){VMM.DragSlider.dragMove(a.data.element,a);a.preventDefault();a.stopPropagation();return!1},dragStart:function(a,b,c){VMM.DragSlider.startX=c.pageX;VMM.DragSlider.startLeft=VMM.DragSlider.getLeft(a);VMM.DragSlider.dragStartTime=(new Date).getTime();VMM.DragSlider.dragWidth=VMM.Element.width(b);var d=Math.round(VMM.DragSlider.startX-c.pageX-VMM.DragSlider.startLeft);VMM.Element.stop(a);VMM.bindEvent(b,VMM.DragSlider.onDragMove,"mousemove",{element:a})},dragEnd:function(a,b,c){VMM.unbindEvent(b,VMM.DragSlider.onDragMove,"mousemove");VMM.DragSlider.getLeft(a)>0||VMM.DragSlider.dragMomentum(a,c)},dragMove:function(a,b){!!VMM.DragSlider.sliding;VMM.DragSlider.sliding=!0;if(VMM.DragSlider.startX>b.pageX){VMM.Element.css(a,"left",-(VMM.DragSlider.startX-b.pageX-VMM.DragSlider.startLeft));VMM.DragSlider.slidingLeft=!0}else{var c=b.pageX-VMM.DragSlider.startX+VMM.DragSlider.startLeft;VMM.Element.css(a,"left",-(VMM.DragSlider.startX-b.pageX-VMM.DragSlider.startLeft));VMM.DragSlider.slidingLeft=!1}},dragMomentum:function(a,b){var c=((new Date).getTime()-VMM.DragSlider.dragStartTime)*10,d=c,e=VMM.DragSlider.getLeft(a),f=6e3*(Math.abs(VMM.DragSlider.startLeft)-Math.abs(e));c=Math.round(f/c);var g=e+c,h=g%VMM.DragSlider.width,i={left:Math.min(g),time:d};VMM.fireEvent(a,"DRAGUPDATE",[i]);var j="easeOutExpo";i.time>0&&VMM.Element.animate(a,i.time,j,{left:i.left})},getLeft:function(a){return parseInt(VMM.Element.css(a,"left").substring(0,VMM.Element.css(a,"left").length-2),10)}};VMM.Browser={init:function(){this.browser=this.searchString(this.dataBrowser)||"An unknown browser";this.version=this.searchVersion(navigator.userAgent)||this.searchVersion(navigator.appVersion)||"an unknown version";this.OS=this.searchString(this.dataOS)||"an unknown OS";this.device=this.searchDevice(navigator.userAgent)},searchDevice:function(a){return a.match(/Android/i)||a.match(/iPhone|iPod/i)?"mobile":a.match(/iPad/i)?"tablet":a.match(/BlackBerry/i)||a.match(/IEMobile/i)?"other mobile":"desktop"},searchString:function(a){for(var b=0;b
";return d}if(e.type=="flickr"){d="
";return d}if(e.type=="youtube"){d="
";return d}if(e.type=="vimeo"){d="
";return d}if(e.type=="twitter"){d="
";return d}if(e.type=="twitter-ready"){d="
";return d}if(e.type=="soundcloud"){d="
";return d}if(e.type=="google-map"){d="
";return d}if(e.type=="unknown"){d="";return d}if(e.type=="website"){d="
";return d}d="
";return d}},create:function(a,b,c,d,e){_return=c;_w=500;_h=400;$mediacontainer=a;var f=!1;d!=null&&d!=""&&(_w=d);e!=null&&e!=""&&(_h=e);if(b.media!=null&&b.media!=""){f=!0;var g="",h="",i="",j={},k=_h-50,l=!1;b.credit!=null&&b.credit!=""&&(i="
"+b.credit+"
");b.caption!=null&&b.caption!=""&&(h="
"+b.caption+"
");j=VMM.MediaType(b.media);if(j.type=="image")g="";else if(j.type=="flickr"){var m="flickr_"+j.id;g="";VMM.ExternalAPI.flickr.getPhoto(j.id,"#"+m)}else if(j.type=="youtube"){g="
Loading YouTube video...
";VMM.ExternalAPI.youtube.init(j.id)}else if(j.type=="vimeo")g="";else if(j.type=="twitter"){g="
Loading Tweet
";trace("TWITTER");VMM.ExternalAPI.twitter.prettyHTML(j.id);l=!0}else if(j.type=="twitter-ready")g=j.id;else if(j.type=="soundcloud"){var n="soundcloud_"+VMM.Util.unique_ID(5);g="
Loading Sound
";VMM.ExternalAPI.soundcloud.getSound(j.id,n)}else if(j.type=="google-map")g="";else if(j.type=="unknown"){trace("NO KNOWN MEDIA TYPE FOUND TRYING TO JUST PLACE THE HTML");g=VMM.Util.properQuotes(j.id)}else if(j.type=="website")g="";else{trace("NO KNOWN MEDIA TYPE FOUND");trace(j.type)}g="
"+g+i+h+"
";if(_return)return l?"
"+g+"
":"
"+g+"
";VMM.appendElement($mediacontainer,g);VMM.appendElement($mediacontainer,i);VMM.appendElement($mediacontainer,h)}}}.init();VMM.MediaType=function(a){var b=!1,c={};if(a.match("div class='twitter'")){c.type="twitter-ready";c.id=a;b=!0}else if(a.match("(www.)?youtube|youtu.be")){a.match("embed")?youtube_id=a.split(/embed\//)[1].split('"')[0]:youtube_id=a.split(/v\/|v=|youtu\.be\//)[1].split(/[?&]/)[0];c.type="youtube";c.id=youtube_id;b=!0}else if(a.match("(player.)?vimeo.com")){vimeo_id=a.split(/video\/|\/\/vimeo\.com\//)[1].split(/[?&]/)[0];c.type="vimeo";c.id=vimeo_id;b=!0}else if(a.match("(player.)?soundcloud.com")){c.type="soundcloud";c.id=a;b=!0}else if(a.match("(www.)?twitter.com")){trace("TWITTER MATCH");a.match("status/")?twitter_id=a.split("status/")[1]:a.match("statuses/")?twitter_id=a.split("statuses/")[1]:twitter_id="";c.type="twitter";c.id=twitter_id;b=!0}else if(a.match("maps.google.com")){c.type="google-map";c.id=a.split(/src=['|"][^'|"]*?['|"]/gi);trace("google map "+c.id);b=!0}else if(a.match("flickr.com/photos")){c.type="flickr";c.id=a.split("photos/")[1].split("/")[1];trace("FLICKR "+c.id);b=!0}else if(a.match(/jpg|jpeg|png|gif/i)){c.type="image";c.id=a;b=!0}else if(a.indexOf("http://")==0){c.type="website";c.id=a;b=!0}else{trace("unknown media");c.type="unknown";c.id=a;b=!0}if(b)return c;trace("No valid media id detected");trace(a);return!1};VMM.Keys={flickr:"6d6f59d8d30d79f4f402a7644d5073e3"};VMM.ExternalAPI={twitter:{tweetArray:[],getHTML:function(a){var b="https://api.twitter.com/1/statuses/oembed.json?id="+a+"&callback=?";VMM.getJSON(b,function(b){VMM.ExternalAPI.twitter.onJSONLoaded(b,a)})},onJSONLoaded:function(a,b){VMM.attachElement("#"+b,VMM.ExternalAPI.twitter.linkify(a.html))},linkify:function(a){return a.replace(/[@]+[A-Za-z0-9-_]+/g,function(a){var b=a.replace("@","");return a.link("http://twitter.com/"+b)})},parseTwitterDate:function(a){var b=new Date(Date.parse(a));return b},prettyParseTwitterDate:function(a){var b=new Date(Date.parse(a));return VMM.Util.date.prettyDate(b,!0)},getTweets:function(a){var b=[],c=a.length;for(var d=0;d

",f=VMM.Util.linkify(a.text);f=f.replace(/(@([\w]+))/g,"$1");f=f.replace(/(#([\w]+))/g,"$1");e+=f;e+="

";e+="— "+a.user.name+" (@"+a.user.screen_name+") "+VMM.ExternalAPI.twitter.prettyParseTwitterDate(a.created_at)+"
";d.content=e;d.raw=a;b.push(d);if(b.length==c){var g={tweetdata:b};VMM.fireEvent(global,"TWEETSLOADED",g)}})}},getTweetSearch:function(a,b){var c=40;b!=null&&b!=""&&(c=b);var d="http://search.twitter.com/search.json?q="+a+"&rpp="+c+"&include_entities=true&result_type=mixed",e=[];VMM.getJSON(d,function(a){for(var b=0;b