/*!
 * jQuery JavaScript Library v1.4.2
 * http://jquery.com/
 *
 * Copyright 2010, John Resig
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * Includes Sizzle.js
 * http://sizzlejs.com/
 * Copyright 2010, The Dojo Foundation
 * Released under the MIT, BSD, and GPL Licenses.
 *
 * Date: Sat Feb 13 22:33:48 2010 -0500
 */
(function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o<i;o++)e(a[o],b,f?d.call(a[o],o,e(a[o],b)):d,j);return a}return i?
e(a[0],b):w}function J(){return(new Date).getTime()}function Y(){return false}function Z(){return true}function na(a,b,d){d[0].type=a;return c.event.handle.apply(b,d)}function oa(a){var b,d=[],f=[],e=arguments,j,i,o,k,n,r;i=c.data(this,"events");if(!(a.liveFired===this||!i||!i.live||a.button&&a.type==="click")){a.liveFired=this;var u=i.live.slice(0);for(k=0;k<u.length;k++){i=u[k];i.origType.replace(O,"")===a.type?f.push(i.selector):u.splice(k--,1)}j=c(a.target).closest(f,a.currentTarget);n=0;for(r=
j.length;n<r;n++)for(k=0;k<u.length;k++){i=u[k];if(j[n].selector===i.selector){o=j[n].elem;f=null;if(i.preType==="mouseenter"||i.preType==="mouseleave")f=c(a.relatedTarget).closest(i.selector)[0];if(!f||f!==o)d.push({elem:o,handleObj:i})}}n=0;for(r=d.length;n<r;n++){j=d[n];a.currentTarget=j.elem;a.data=j.handleObj.data;a.handleObj=j.handleObj;if(j.handleObj.origHandler.apply(j.elem,e)===false){b=false;break}}return b}}function pa(a,b){return"live."+(a&&a!=="*"?a+".":"")+b.replace(/\./g,"`").replace(/ /g,
"&")}function qa(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function ra(a,b){var d=0;b.each(function(){if(this.nodeName===(a[d]&&a[d].nodeName)){var f=c.data(a[d++]),e=c.data(this,f);if(f=f&&f.events){delete e.handle;e.events={};for(var j in f)for(var i in f[j])c.event.add(this,j,f[j][i],f[j][i].data)}}})}function sa(a,b,d){var f,e,j;b=b&&b[0]?b[0].ownerDocument||b[0]:s;if(a.length===1&&typeof a[0]==="string"&&a[0].length<512&&b===s&&!ta.test(a[0])&&(c.support.checkClone||!ua.test(a[0]))){e=
true;if(j=c.fragments[a[0]])if(j!==1)f=j}if(!f){f=b.createDocumentFragment();c.clean(a,b,f,d)}if(e)c.fragments[a[0]]=j?f:1;return{fragment:f,cacheable:e}}function K(a,b){var d={};c.each(va.concat.apply([],va.slice(0,b)),function(){d[this]=a});return d}function wa(a){return"scrollTo"in a&&a.document?a:a.nodeType===9?a.defaultView||a.parentWindow:false}var c=function(a,b){return new c.fn.init(a,b)},Ra=A.jQuery,Sa=A.$,s=A.document,T,Ta=/^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/,
Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&&
(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this,
a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b===
"find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this,
function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b<d;b++)if((e=arguments[b])!=null)for(j in e){i=a[j];o=e[j];if(a!==o)if(f&&o&&(c.isPlainObject(o)||c.isArray(o))){i=i&&(c.isPlainObject(i)||
c.isArray(i))?i:c.isArray(o)?[]:{};a[j]=c.extend(f,i,o)}else if(o!==w)a[j]=o}return a};c.extend({noConflict:function(a){A.$=Sa;if(a)A.jQuery=Ra;return c},isReady:false,ready:function(){if(!c.isReady){if(!s.body)return setTimeout(c.ready,13);c.isReady=true;if(Q){for(var a,b=0;a=Q[b++];)a.call(s,c);Q=null}c.fn.triggerHandler&&c(s).triggerHandler("ready")}},bindReady:function(){if(!xa){xa=true;if(s.readyState==="complete")return c.ready();if(s.addEventListener){s.addEventListener("DOMContentLoaded",
L,false);A.addEventListener("load",c.ready,false)}else if(s.attachEvent){s.attachEvent("onreadystatechange",L);A.attachEvent("onload",c.ready);var a=false;try{a=A.frameElement==null}catch(b){}s.documentElement.doScroll&&a&&ma()}}},isFunction:function(a){return $.call(a)==="[object Function]"},isArray:function(a){return $.call(a)==="[object Array]"},isPlainObject:function(a){if(!a||$.call(a)!=="[object Object]"||a.nodeType||a.setInterval)return false;if(a.constructor&&!aa.call(a,"constructor")&&!aa.call(a.constructor.prototype,
"isPrototypeOf"))return false;var b;for(b in a);return b===w||aa.call(a,b)},isEmptyObject:function(a){for(var b in a)return false;return true},error:function(a){throw a;},parseJSON:function(a){if(typeof a!=="string"||!a)return null;a=c.trim(a);if(/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return A.JSON&&A.JSON.parse?A.JSON.parse(a):(new Function("return "+
a))();else c.error("Invalid JSON: "+a)},noop:function(){},globalEval:function(a){if(a&&Va.test(a)){var b=s.getElementsByTagName("head")[0]||s.documentElement,d=s.createElement("script");d.type="text/javascript";if(c.support.scriptEval)d.appendChild(s.createTextNode(a));else d.text=a;b.insertBefore(d,b.firstChild);b.removeChild(d)}},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,b,d){var f,e=0,j=a.length,i=j===w||c.isFunction(a);if(d)if(i)for(f in a){if(b.apply(a[f],
d)===false)break}else for(;e<j;){if(b.apply(a[e++],d)===false)break}else if(i)for(f in a){if(b.call(a[f],f,a[f])===false)break}else for(d=a[0];e<j&&b.call(d,e,d)!==false;d=a[++e]);return a},trim:function(a){return(a||"").replace(Wa,"")},makeArray:function(a,b){b=b||[];if(a!=null)a.length==null||typeof a==="string"||c.isFunction(a)||typeof a!=="function"&&a.setInterval?ba.call(b,a):c.merge(b,a);return b},inArray:function(a,b){if(b.indexOf)return b.indexOf(a);for(var d=0,f=b.length;d<f;d++)if(b[d]===
a)return d;return-1},merge:function(a,b){var d=a.length,f=0;if(typeof b.length==="number")for(var e=b.length;f<e;f++)a[d++]=b[f];else for(;b[f]!==w;)a[d++]=b[f++];a.length=d;return a},grep:function(a,b,d){for(var f=[],e=0,j=a.length;e<j;e++)!d!==!b(a[e],e)&&f.push(a[e]);return f},map:function(a,b,d){for(var f=[],e,j=0,i=a.length;j<i;j++){e=b(a[j],j,d);if(e!=null)f[f.length]=e}return f.concat.apply([],f)},guid:1,proxy:function(a,b,d){if(arguments.length===2)if(typeof b==="string"){d=a;a=d[b];b=w}else if(b&&
!c.isFunction(b)){d=b;b=w}if(!b&&a)b=function(){return a.apply(d||this,arguments)};if(a)b.guid=a.guid=a.guid||b.guid||c.guid++;return b},uaMatch:function(a){a=a.toLowerCase();a=/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version)?[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||!/compatible/.test(a)&&/(mozilla)(?:.*? rv:([\w.]+))?/.exec(a)||[];return{browser:a[1]||"",version:a[2]||"0"}},browser:{}});P=c.uaMatch(P);if(P.browser){c.browser[P.browser]=true;c.browser.version=P.version}if(c.browser.webkit)c.browser.safari=
true;if(ya)c.inArray=function(a,b){return ya.call(b,a)};T=c(s);if(s.addEventListener)L=function(){s.removeEventListener("DOMContentLoaded",L,false);c.ready()};else if(s.attachEvent)L=function(){if(s.readyState==="complete"){s.detachEvent("onreadystatechange",L);c.ready()}};(function(){c.support={};var a=s.documentElement,b=s.createElement("script"),d=s.createElement("div"),f="script"+J();d.style.display="none";d.innerHTML="   <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected,
parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent=
false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="<input type='radio' name='radiotest' checked='checked'/>";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n=
s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true,
applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando];
else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this,
a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b===
w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i,
cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1)if(e.className){for(var j=" "+e.className+" ",
i=e.className,o=0,k=b.length;o<k;o++)if(j.indexOf(" "+b[o]+" ")<0)i+=" "+b[o];e.className=c.trim(i)}else e.className=a}return this},removeClass:function(a){if(c.isFunction(a))return this.each(function(k){var n=c(this);n.removeClass(a.call(this,k,n.attr("class")))});if(a&&typeof a==="string"||a===w)for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1&&e.className)if(a){for(var j=(" "+e.className+" ").replace(Aa," "),i=0,o=b.length;i<o;i++)j=j.replace(" "+b[i]+" ",
" ");e.className=c.trim(j)}else e.className=""}return this},toggleClass:function(a,b){var d=typeof a,f=typeof b==="boolean";if(c.isFunction(a))return this.each(function(e){var j=c(this);j.toggleClass(a.call(this,e,j.attr("class"),b),b)});return this.each(function(){if(d==="string")for(var e,j=0,i=c(this),o=b,k=a.split(ca);e=k[j++];){o=f?o:!i.hasClass(e);i[o?"addClass":"removeClass"](e)}else if(d==="undefined"||d==="boolean"){this.className&&c.data(this,"__className__",this.className);this.className=
this.className||a===false?"":c.data(this,"__className__")||""}})},hasClass:function(a){a=" "+a+" ";for(var b=0,d=this.length;b<d;b++)if((" "+this[b].className+" ").replace(Aa," ").indexOf(a)>-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j<d;j++){var i=
e[j];if(i.selected){a=c(i).val();if(b)return a;f.push(a)}}return f}if(Ba.test(b.type)&&!c.support.checkOn)return b.getAttribute("value")===null?"on":b.value;return(b.value||"").replace(Za,"")}return w}var o=c.isFunction(a);return this.each(function(k){var n=c(this),r=a;if(this.nodeType===1){if(o)r=a.call(this,k,n.val());if(typeof r==="number")r+="";if(c.isArray(r)&&Ba.test(this.type))this.checked=c.inArray(n.val(),r)>=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected=
c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed");
a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g,
function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split(".");
k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a),
C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B<r.length;B++){u=r[B];if(d.guid===u.guid){if(i||k.test(u.namespace)){f==null&&r.splice(B--,1);n.remove&&n.remove.call(a,u)}if(f!=
null)break}}if(r.length===0||f!=null&&r.length===1){if(!n.teardown||n.teardown.call(a,o)===false)Ca(a,e,z.handle);delete C[e]}}else for(var B=0;B<r.length;B++){u=r[B];if(i||k.test(u.namespace)){c.event.remove(a,n,u.handler,B);r.splice(B--,1)}}}if(c.isEmptyObject(C)){if(b=z.handle)b.elem=null;delete z.events;delete z.handle;c.isEmptyObject(z)&&c.removeData(a)}}}}},trigger:function(a,b,d,f){var e=a.type||a;if(!f){a=typeof a==="object"?a[G]?a:c.extend(c.Event(e),a):c.Event(e);if(e.indexOf("!")>=0){a.type=
e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&&
f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive;
if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e<j;e++){var i=d[e];if(b||f.test(i.namespace)){a.handler=i.handler;a.data=i.data;a.handleObj=i;i=i.handler.apply(this,arguments);if(i!==w){a.result=i;if(i===false){a.preventDefault();a.stopPropagation()}}if(a.isImmediatePropagationStopped())break}}}return a.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
fix:function(a){if(a[G])return a;var b=a;a=c.Event(b);for(var d=this.props.length,f;d;){f=this.props[--d];a[f]=b[f]}if(!a.target)a.target=a.srcElement||s;if(a.target.nodeType===3)a.target=a.target.parentNode;if(!a.relatedTarget&&a.fromElement)a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;if(a.pageX==null&&a.clientX!=null){b=s.documentElement;d=s.body;a.pageX=a.clientX+(b&&b.scrollLeft||d&&d.scrollLeft||0)-(b&&b.clientLeft||d&&d.clientLeft||0);a.pageY=a.clientY+(b&&b.scrollTop||
d&&d.scrollTop||0)-(b&&b.clientTop||d&&d.clientTop||0)}if(!a.which&&(a.charCode||a.charCode===0?a.charCode:a.keyCode))a.which=a.charCode||a.keyCode;if(!a.metaKey&&a.ctrlKey)a.metaKey=a.ctrlKey;if(!a.which&&a.button!==w)a.which=a.button&1?1:a.button&2?3:a.button&4?2:0;return a},guid:1E8,proxy:c.proxy,special:{ready:{setup:c.bindReady,teardown:c.noop},live:{add:function(a){c.event.add(this,a.origType,c.extend({},a,{handler:oa}))},remove:function(a){var b=true,d=a.origType.replace(O,"");c.each(c.data(this,
"events").live||[],function(){if(d===this.origType.replace(O,""))return b=false});b&&c.event.remove(this,a.origType,oa)}},beforeunload:{setup:function(a,b,d){if(this.setInterval)this.onbeforeunload=d;return false},teardown:function(a,b){if(this.onbeforeunload===b)this.onbeforeunload=null}}}};var Ca=s.removeEventListener?function(a,b,d){a.removeEventListener(b,d,false)}:function(a,b,d){a.detachEvent("on"+b,d)};c.Event=function(a){if(!this.preventDefault)return new c.Event(a);if(a&&a.type){this.originalEvent=
a;this.type=a.type}else this.type=a;this.timeStamp=J();this[G]=true};c.Event.prototype={preventDefault:function(){this.isDefaultPrevented=Z;var a=this.originalEvent;if(a){a.preventDefault&&a.preventDefault();a.returnValue=false}},stopPropagation:function(){this.isPropagationStopped=Z;var a=this.originalEvent;if(a){a.stopPropagation&&a.stopPropagation();a.cancelBubble=true}},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=Z;this.stopPropagation()},isDefaultPrevented:Y,isPropagationStopped:Y,
isImmediatePropagationStopped:Y};var Da=function(a){var b=a.relatedTarget;try{for(;b&&b!==this;)b=b.parentNode;if(b!==this){a.type=a.data;c.event.handle.apply(this,arguments)}}catch(d){}},Ea=function(a){a.type=a.data;c.event.handle.apply(this,arguments)};c.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){c.event.special[a]={setup:function(d){c.event.add(this,b,d&&d.selector?Ea:Da,a)},teardown:function(d){c.event.remove(this,b,d&&d.selector?Ea:Da)}}});if(!c.support.submitBubbles)c.event.special.submit=
{setup:function(){if(this.nodeName.toLowerCase()!=="form"){c.event.add(this,"click.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="submit"||d==="image")&&c(b).closest("form").length)return na("submit",this,arguments)});c.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="text"||d==="password")&&c(b).closest("form").length&&a.keyCode===13)return na("submit",this,arguments)})}else return false},teardown:function(){c.event.remove(this,".specialSubmit")}};
if(!c.support.changeBubbles){var da=/textarea|input|select/i,ea,Fa=function(a){var b=a.type,d=a.value;if(b==="radio"||b==="checkbox")d=a.checked;else if(b==="select-multiple")d=a.selectedIndex>-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data",
e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a,
"_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a,
d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j<o;j++)c.event.add(this[j],d,i,f)}return this}});c.fn.extend({unbind:function(a,b){if(typeof a==="object"&&
!a.preventDefault)for(var d in a)this.unbind(d,a[d]);else{d=0;for(var f=this.length;d<f;d++)c.event.remove(this[d],a,b)}return this},delegate:function(a,b,d,f){return this.live(b,d,f,a)},undelegate:function(a,b,d){return arguments.length===0?this.unbind("live"):this.die(b,null,d,a)},trigger:function(a,b){return this.each(function(){c.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0]){a=c.Event(a);a.preventDefault();a.stopPropagation();c.event.trigger(a,b,this[0]);return a.result}},
toggle:function(a){for(var b=arguments,d=1;d<b.length;)c.proxy(a,b[d++]);return this.click(c.proxy(a,function(f){var e=(c.data(this,"lastToggle"+a.guid)||0)%d;c.data(this,"lastToggle"+a.guid,e+1);f.preventDefault();return b[e].apply(this,arguments)||false}))},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var Ga={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};c.each(["live","die"],function(a,b){c.fn[b]=function(d,f,e,j){var i,o=0,k,n,r=j||this.selector,
u=j?this:c(this.context);if(c.isFunction(f)){e=f;f=w}for(d=(d||"").split(" ");(i=d[o++])!=null;){j=O.exec(i);k="";if(j){k=j[0];i=i.replace(O,"")}if(i==="hover")d.push("mouseenter"+k,"mouseleave"+k);else{n=i;if(i==="focus"||i==="blur"){d.push(Ga[i]+k);i+=k}else i=(Ga[i]||i)+k;b==="live"?u.each(function(){c.event.add(this,pa(i,r),{data:f,selector:r,handler:e,origType:i,origHandler:e,preType:n})}):u.unbind(pa(i,r),e)}}return this}});c.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),
function(a,b){c.fn[b]=function(d){return d?this.bind(b,d):this.trigger(b)};if(c.attrFn)c.attrFn[b]=true});A.attachEvent&&!A.addEventListener&&A.attachEvent("onunload",function(){for(var a in c.cache)if(c.cache[a].handle)try{c.event.remove(c.cache[a].handle.elem)}catch(b){}});(function(){function a(g){for(var h="",l,m=0;g[m];m++){l=g[m];if(l.nodeType===3||l.nodeType===4)h+=l.nodeValue;else if(l.nodeType!==8)h+=a(l.childNodes)}return h}function b(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];
if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1&&!p){t.sizcache=l;t.sizset=q}if(t.nodeName.toLowerCase()===h){y=t;break}t=t[g]}m[q]=y}}}function d(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1){if(!p){t.sizcache=l;t.sizset=q}if(typeof h!=="string"){if(t===h){y=true;break}}else if(k.filter(h,[t]).length>0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift();
t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D||
g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h<g.length;h++)g[h]===g[h-1]&&g.splice(h--,1)}return g};k.matches=function(g,h){return k(g,null,null,h)};k.find=function(g,h,l){var m,q;if(!g)return[];
for(var p=0,v=n.order.length;p<v;p++){var t=n.order[p];if(q=n.leftMatch[t].exec(g)){var y=q[1];q.splice(1,1);if(y.substr(y.length-1)!=="\\"){q[1]=(q[1]||"").replace(/\\/g,"");m=n.find[t](q,h,l);if(m!=null){g=g.replace(n.match[t],"");break}}}}m||(m=h.getElementsByTagName("*"));return{set:m,expr:g}};k.filter=function(g,h,l,m){for(var q=g,p=[],v=h,t,y,S=h&&h[0]&&x(h[0]);g&&h.length;){for(var H in n.filter)if((t=n.leftMatch[H].exec(g))!=null&&t[2]){var M=n.filter[H],I,D;D=t[1];y=false;t.splice(1,1);if(D.substr(D.length-
1)!=="\\"){if(v===p)p=[];if(n.preFilter[H])if(t=n.preFilter[H](t,v,l,p,m,S)){if(t===true)continue}else y=I=true;if(t)for(var U=0;(D=v[U])!=null;U++)if(D){I=M(D,t,U,v);var Ha=m^!!I;if(l&&I!=null)if(Ha)y=true;else v[U]=false;else if(Ha){p.push(D);y=true}}if(I!==w){l||(v=p);g=g.replace(n.match[H],"");if(!y)return[];break}}}if(g===q)if(y==null)k.error(g);else break;q=g}return v};k.error=function(g){throw"Syntax error, unrecognized expression: "+g;};var n=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF-]|\\.)+)/,
CLASS:/\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(g){return g.getAttribute("href")}},
relative:{"+":function(g,h){var l=typeof h==="string",m=l&&!/\W/.test(h);l=l&&!m;if(m)h=h.toLowerCase();m=0;for(var q=g.length,p;m<q;m++)if(p=g[m]){for(;(p=p.previousSibling)&&p.nodeType!==1;);g[m]=l||p&&p.nodeName.toLowerCase()===h?p||false:p===h}l&&k.filter(h,g,true)},">":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m<q;m++){var p=g[m];if(p){l=p.parentNode;g[m]=l.nodeName.toLowerCase()===h?l:false}}}else{m=0;for(q=g.length;m<q;m++)if(p=g[m])g[m]=
l?p.parentNode:p.parentNode===h;l&&k.filter(h,g,true)}},"":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("parentNode",h,m,g,p,l)},"~":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("previousSibling",h,m,g,p,l)}},find:{ID:function(g,h,l){if(typeof h.getElementById!=="undefined"&&!l)return(g=h.getElementById(g[1]))?[g]:[]},NAME:function(g,h){if(typeof h.getElementsByName!=="undefined"){var l=[];
h=h.getElementsByName(g[1]);for(var m=0,q=h.length;m<q;m++)h[m].getAttribute("name")===g[1]&&l.push(h[m]);return l.length===0?null:l}},TAG:function(g,h){return h.getElementsByTagName(g[1])}},preFilter:{CLASS:function(g,h,l,m,q,p){g=" "+g[1].replace(/\\/g,"")+" ";if(p)return g;p=0;for(var v;(v=h[p])!=null;p++)if(v)if(q^(v.className&&(" "+v.className+" ").replace(/[\t\n]/g," ").indexOf(g)>=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()},
CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m,
g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)},
text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}},
setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return h<l[3]-0},gt:function(g,h,l){return h>l[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h=
h[3];l=0;for(m=h.length;l<m;l++)if(h[l]===g)return false;return true}else k.error("Syntax error, unrecognized expression: "+q)},CHILD:function(g,h){var l=h[1],m=g;switch(l){case "only":case "first":for(;m=m.previousSibling;)if(m.nodeType===1)return false;if(l==="first")return true;m=g;case "last":for(;m=m.nextSibling;)if(m.nodeType===1)return false;return true;case "nth":l=h[2];var q=h[3];if(l===1&&q===0)return true;h=h[0];var p=g.parentNode;if(p&&(p.sizcache!==h||!g.nodeIndex)){var v=0;for(m=p.firstChild;m;m=
m.nextSibling)if(m.nodeType===1)m.nodeIndex=++v;p.sizcache=h}g=g.nodeIndex-q;return l===0?g===0:g%l===0&&g/l>=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m===
"="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g,
h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l<m;l++)h.push(g[l]);else for(l=0;g[l];l++)h.push(g[l]);return h}}var B;if(s.documentElement.compareDocumentPosition)B=function(g,h){if(!g.compareDocumentPosition||
!h.compareDocumentPosition){if(g==h)i=true;return g.compareDocumentPosition?-1:1}g=g.compareDocumentPosition(h)&4?-1:g===h?0:1;if(g===0)i=true;return g};else if("sourceIndex"in s.documentElement)B=function(g,h){if(!g.sourceIndex||!h.sourceIndex){if(g==h)i=true;return g.sourceIndex?-1:1}g=g.sourceIndex-h.sourceIndex;if(g===0)i=true;return g};else if(s.createRange)B=function(g,h){if(!g.ownerDocument||!h.ownerDocument){if(g==h)i=true;return g.ownerDocument?-1:1}var l=g.ownerDocument.createRange(),m=
h.ownerDocument.createRange();l.setStart(g,0);l.setEnd(g,0);m.setStart(h,0);m.setEnd(h,0);g=l.compareBoundaryPoints(Range.START_TO_END,m);if(g===0)i=true;return g};(function(){var g=s.createElement("div"),h="script"+(new Date).getTime();g.innerHTML="<a name='"+h+"'/>";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&&
q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML="<a href='#'></a>";
if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="<p class='TEST'></p>";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}();
(function(){var g=s.createElement("div");g.innerHTML="<div class='test e'></div><div class='test'></div>";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}:
function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q<p;q++)k(g,h[q],l);return k.filter(m,l)};c.find=k;c.expr=k.selectors;c.expr[":"]=c.expr.filters;c.unique=k.uniqueSort;c.text=a;c.isXMLDoc=x;c.contains=E})();var eb=/Until$/,fb=/^(?:parents|prevUntil|prevAll)/,
gb=/,/;R=Array.prototype.slice;var Ia=function(a,b,d){if(c.isFunction(b))return c.grep(a,function(e,j){return!!b.call(e,j,e)===d});else if(b.nodeType)return c.grep(a,function(e){return e===b===d});else if(typeof b==="string"){var f=c.grep(a,function(e){return e.nodeType===1});if(Ua.test(b))return c.filter(b,f,!d);else b=c.filter(b,f)}return c.grep(a,function(e){return c.inArray(e,b)>=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f<e;f++){d=b.length;
c.find(a,this[f],b);if(f>0)for(var j=d;j<b.length;j++)for(var i=0;i<d;i++)if(b[i]===b[j]){b.splice(j--,1);break}}return b},has:function(a){var b=c(a);return this.filter(function(){for(var d=0,f=b.length;d<f;d++)if(c.contains(this,b[d]))return true})},not:function(a){return this.pushStack(Ia(this,a,false),"not",a)},filter:function(a){return this.pushStack(Ia(this,a,true),"filter",a)},is:function(a){return!!a&&c.filter(a,this).length>0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j=
{},i;if(f&&a.length){e=0;for(var o=a.length;e<o;e++){i=a[e];j[i]||(j[i]=c.expr.match.POS.test(i)?c(i,b||this.context):i)}for(;f&&f.ownerDocument&&f!==b;){for(i in j){e=j[i];if(e.jquery?e.index(f)>-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a===
"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode",
d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")?
a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType===
1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/<tbody/i,jb=/<|&#?\w+;/,ta=/<script|<object|<embed|<option|<style/i,ua=/checked\s*(?:[^=]|=\s*.checked.)/i,Ma=function(a,b,d){return hb.test(d)?
a:b+"></"+d+">"},F={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div<div>","</div>"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d=
c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this},
wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})},
prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,
this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild);
return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja,
""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b<d;b++)if(this[b].nodeType===1){c.cleanData(this[b].getElementsByTagName("*"));this[b].innerHTML=a}}catch(f){this.empty().append(a)}}else c.isFunction(a)?this.each(function(e){var j=c(this),i=j.html();j.empty().append(function(){return a.call(this,e,i)})}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&
this[0].parentNode){if(c.isFunction(a))return this.each(function(b){var d=c(this),f=d.html();d.replaceWith(a.call(this,b,f))});if(typeof a!=="string")a=c(a).detach();return this.each(function(){var b=this.nextSibling,d=this.parentNode;c(this).remove();b?c(b).before(a):c(d).append(a)})}else return this.pushStack(c(c.isFunction(a)?a():a),"replaceWith",a)},detach:function(a){return this.remove(a,true)},domManip:function(a,b,d){function f(u){return c.nodeName(u,"table")?u.getElementsByTagName("tbody")[0]||
u.appendChild(u.ownerDocument.createElement("tbody")):u}var e,j,i=a[0],o=[],k;if(!c.support.checkClone&&arguments.length===3&&typeof i==="string"&&ua.test(i))return this.each(function(){c(this).domManip(a,b,d,true)});if(c.isFunction(i))return this.each(function(u){var z=c(this);a[0]=i.call(this,u,b?z.html():w);z.domManip(a,b,d)});if(this[0]){e=i&&i.parentNode;e=c.support.parentNode&&e&&e.nodeType===11&&e.childNodes.length===this.length?{fragment:e}:sa(a,this,o);k=e.fragment;if(j=k.childNodes.length===
1?(k=k.firstChild):k.firstChild){b=b&&c.nodeName(j,"tr");for(var n=0,r=this.length;n<r;n++)d.call(b?f(this[n],j):this[n],n>0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]);
return this}else{e=0;for(var j=d.length;e<j;e++){var i=(e>0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["",
""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]==="<table>"&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e=
c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]?
c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja=
function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter=
Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a,
"border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f=
a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b=
a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=/<script(.|\s)*?\/script>/gi,ub=/select|textarea/i,vb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ka=/\?/,wb=/(\?|&)_=.*?(&|$)/,xb=/^(\w+:)?\/\/([^\/?#]+)/,yb=/%20/g,zb=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!==
"string")return zb.call(this,a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);f="POST"}var j=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(i,o){if(o==="success"||o==="notmodified")j.html(e?c("<div />").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}});return this},
serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ub.test(this.nodeName)||vb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),
function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href,
global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:A.XMLHttpRequest&&(A.location.protocol!=="file:"||!A.ActiveXObject)?function(){return new A.XMLHttpRequest}:function(){try{return new A.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&&
e.success.call(k,o,i,x);e.global&&f("ajaxSuccess",[x,e])}function d(){e.complete&&e.complete.call(k,x,i);e.global&&f("ajaxComplete",[x,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),j,i,o,k=a&&a.context||e,n=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(n==="GET")N.test(e.url)||(e.url+=(ka.test(e.url)?
"&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||N.test(e.url))){j=e.jsonpCallback||"jsonp"+sb++;if(e.data)e.data=(e.data+"").replace(N,"="+j+"$1");e.url=e.url.replace(N,"="+j+"$1");e.dataType="script";A[j]=A[j]||function(q){o=q;b();d();A[j]=w;try{delete A[j]}catch(p){}z&&z.removeChild(C)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache===
false&&n==="GET"){var r=J(),u=e.url.replace(wb,"$1_="+r+"$2");e.url=u+(u===e.url?(ka.test(e.url)?"&":"?")+"_="+r:"")}if(e.data&&n==="GET")e.url+=(ka.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&c.event.trigger("ajaxStart");r=(r=xb.exec(e.url))&&(r[1]&&r[1]!==location.protocol||r[2]!==location.host);if(e.dataType==="script"&&n==="GET"&&r){var z=s.getElementsByTagName("head")[0]||s.documentElement,C=s.createElement("script");C.src=e.url;if(e.scriptCharset)C.charset=e.scriptCharset;if(!j){var B=
false;C.onload=C.onreadystatechange=function(){if(!B&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){B=true;b();d();C.onload=C.onreadystatechange=null;z&&C.parentNode&&z.removeChild(C)}}}z.insertBefore(C,z.firstChild);return w}var E=false,x=e.xhr();if(x){e.username?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async);try{if(e.data||a&&a.contentType)x.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&x.setRequestHeader("If-Modified-Since",
c.lastModified[e.url]);c.etag[e.url]&&x.setRequestHeader("If-None-Match",c.etag[e.url])}r||x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(ga){}if(e.beforeSend&&e.beforeSend.call(k,x,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");x.abort();return false}e.global&&f("ajaxSend",[x,e]);var g=x.onreadystatechange=function(q){if(!x||x.readyState===0||q==="abort"){E||
d();E=true;if(x)x.onreadystatechange=c.noop}else if(!E&&x&&(x.readyState===4||q==="timeout")){E=true;x.onreadystatechange=c.noop;i=q==="timeout"?"timeout":!c.httpSuccess(x)?"error":e.ifModified&&c.httpNotModified(x,e.url)?"notmodified":"success";var p;if(i==="success")try{o=c.httpData(x,e.dataType,e)}catch(v){i="parsererror";p=v}if(i==="success"||i==="notmodified")j||b();else c.handleError(e,x,i,p);d();q==="timeout"&&x.abort();if(e.async)x=null}};try{var h=x.abort;x.abort=function(){x&&h.call(x);
g("abort")}}catch(l){}e.async&&e.timeout>0&&setTimeout(function(){x&&!E&&g("timeout")},e.timeout);try{x.send(n==="POST"||n==="PUT"||n==="DELETE"?e.data:null)}catch(m){c.handleError(e,x,null,m);d()}e.async||g();return x}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status===
1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b===
"json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(i,o){if(c.isArray(o))c.each(o,function(k,n){b||/\[\]$/.test(i)?f(i,n):d(i+"["+(typeof n==="object"||c.isArray(n)?k:"")+"]",n)});else!b&&o!=null&&typeof o==="object"?c.each(o,function(k,n){d(i+"["+k+"]",n)}):f(i,o)}function f(i,o){o=c.isFunction(o)?o():o;e[e.length]=encodeURIComponent(i)+"="+encodeURIComponent(o)}var e=[];if(b===w)b=c.ajaxSettings.traditional;
if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var j in a)d(j,a[j]);return e.join("&").replace(yb,"+")}});var la={},Ab=/toggle|show|hide/,Bb=/^([+-]=)?([\d+-.]+)(.*)$/,W,va=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");
this[a].style.display=d||"";if(c.css(this[a],"display")==="none"){d=this[a].nodeName;var f;if(la[d])f=la[d];else{var e=c("<"+d+" />").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();la[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a<b;a++)this[a].style.display=c.data(this[a],"olddisplay")||"";return this}},hide:function(a,b){if(a||a===0)return this.animate(K("hide",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");!d&&d!=="none"&&c.data(this[a],
"olddisplay",c.css(this[a],"display"))}a=0;for(b=this.length;a<b;a++)this[a].style.display="none";return this}},_toggle:c.fn.toggle,toggle:function(a,b){var d=typeof a==="boolean";if(c.isFunction(a)&&c.isFunction(b))this._toggle.apply(this,arguments);else a==null||d?this.each(function(){var f=d?a:c(this).is(":hidden");c(this)[f?"show":"hide"]()}):this.animate(K("toggle",3),a,b);return this},fadeTo:function(a,b,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,d)},
animate:function(a,b,d,f){var e=c.speed(b,d,f);if(c.isEmptyObject(a))return this.each(e.complete);return this[e.queue===false?"each":"queue"](function(){var j=c.extend({},e),i,o=this.nodeType===1&&c(this).is(":hidden"),k=this;for(i in a){var n=i.replace(ia,ja);if(i!==n){a[n]=a[i];delete a[i];i=n}if(a[i]==="hide"&&o||a[i]==="show"&&!o)return j.complete.call(this);if((i==="height"||i==="width")&&this.style){j.display=c.css(this,"display");j.overflow=this.style.overflow}if(c.isArray(a[i])){(j.specialEasing=
j.specialEasing||{})[i]=a[i][1];a[i]=a[i][0]}}if(j.overflow!=null)this.style.overflow="hidden";j.curAnim=c.extend({},a);c.each(a,function(r,u){var z=new c.fx(k,j,r);if(Ab.test(u))z[u==="toggle"?o?"show":"hide":u](a);else{var C=Bb.exec(u),B=z.cur(true)||0;if(C){u=parseFloat(C[2]);var E=C[3]||"px";if(E!=="px"){k.style[r]=(u||1)+E;B=(u||1)/z.cur(true)*B;k.style[r]=B+E}if(C[1])u=(C[1]==="-="?-1:1)*u+B;z.custom(B,u,E)}else z.custom(B,u,"")}});return true})},stop:function(a,b){var d=c.timers;a&&this.queue([]);
this.each(function(){for(var f=d.length-1;f>=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration===
"number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]||
c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(j){return e.step(j)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start;
this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now=
this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem,
e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b<a.length;b++)a[b]()||a.splice(b--,1);a.length||
c.fx.stop()},stop:function(){clearInterval(W);W=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){c.style(a.elem,"opacity",a.now)},_default:function(a){if(a.elem.style&&a.elem.style[a.prop]!=null)a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit;else a.elem[a.prop]=a.now}}});if(c.expr&&c.expr.filters)c.expr.filters.animated=function(a){return c.grep(c.timers,function(b){return a===b.elem}).length};c.fn.offset="getBoundingClientRect"in s.documentElement?
function(a){var b=this[0];if(a)return this.each(function(e){c.offset.setOffset(this,a,e)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);var d=b.getBoundingClientRect(),f=b.ownerDocument;b=f.body;f=f.documentElement;return{top:d.top+(self.pageYOffset||c.support.boxModel&&f.scrollTop||b.scrollTop)-(f.clientTop||b.clientTop||0),left:d.left+(self.pageXOffset||c.support.boxModel&&f.scrollLeft||b.scrollLeft)-(f.clientLeft||b.clientLeft||0)}}:function(a){var b=
this[0];if(a)return this.each(function(r){c.offset.setOffset(this,a,r)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);c.offset.initialize();var d=b.offsetParent,f=b,e=b.ownerDocument,j,i=e.documentElement,o=e.body;f=(e=e.defaultView)?e.getComputedStyle(b,null):b.currentStyle;for(var k=b.offsetTop,n=b.offsetLeft;(b=b.parentNode)&&b!==o&&b!==i;){if(c.offset.supportsFixedPosition&&f.position==="fixed")break;j=e?e.getComputedStyle(b,null):b.currentStyle;
k-=b.scrollTop;n-=b.scrollLeft;if(b===d){k+=b.offsetTop;n+=b.offsetLeft;if(c.offset.doesNotAddBorder&&!(c.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(b.nodeName))){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=d;d=b.offsetParent}if(c.offset.subtractsBorderForOverflowNotVisible&&j.overflow!=="visible"){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=j}if(f.position==="relative"||f.position==="static"){k+=o.offsetTop;n+=o.offsetLeft}if(c.offset.supportsFixedPosition&&
f.position==="fixed"){k+=Math.max(i.scrollTop,o.scrollTop);n+=Math.max(i.scrollLeft,o.scrollLeft)}return{top:k,left:n}};c.offset={initialize:function(){var a=s.body,b=s.createElement("div"),d,f,e,j=parseFloat(c.curCSS(a,"marginTop",true))||0;c.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"});b.innerHTML="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";
a.insertBefore(b,a.firstChild);d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==j;a.removeChild(b);
c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),j=parseInt(c.curCSS(a,"top",true),10)||0,i=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a,
d,e);d={top:b.top-e.top+j,left:b.left-e.left+i};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top-
f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||s.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],j;if(!e)return null;if(f!==w)return this.each(function(){if(j=wa(this))j.scrollTo(!a?f:c(j).scrollLeft(),a?f:c(j).scrollTop());else this[d]=f});else return(j=wa(e))?"pageXOffset"in j?j[a?"pageYOffset":
"pageXOffset"]:c.support.boxModel&&j.document.documentElement[d]||j.document.body[d]:e[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(j){var i=c(this);i[d](f.call(this,j,i[d]()))});return"scrollTo"in
e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===w?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});A.jQuery=A.$=c})(window);


/*--------------------------------------------------------------------------------------------------------------------- Additional plugins*/
// TWEETS
(function($) {
 
  $.fn.tweet = function(o){
    var s = {
      username: ["seaofclouds"],              // [string]   required, unless you want to display our tweets. :) it can be an array, just do ["username1","username2","etc"]
      list: null,                              //[string]   optional name of list belonging to username
      avatar_size: null,                      // [integer]  height and width of avatar if displayed (48px max)
      count: 3,                               // [integer]  how many tweets to display?
      intro_text: null,                       // [string]   do you want text BEFORE your your tweets?
      outro_text: null,                       // [string]   do you want text AFTER your tweets?
      join_text:  null,                       // [string]   optional text in between date and tweet, try setting to "auto"
      auto_join_text_default: "i said,",      // [string]   auto text for non verb: "i said" bullocks
      auto_join_text_ed: "i",                 // [string]   auto text for past tense: "i" surfed
      auto_join_text_ing: "i am",             // [string]   auto tense for present tense: "i was" surfing
      auto_join_text_reply: "i replied to",   // [string]   auto tense for replies: "i replied to" @someone "with"
      auto_join_text_url: "i was looking at", // [string]   auto tense for urls: "i was looking at" http:...
      loading_text: null,                     // [string]   optional loading text, displayed while tweets load
      query: null,                            // [string]   optional search query
      refresh_interval: null                  // [integer]  optional number of seconds after which to reload tweets
    };
    
    if(o) $.extend(s, o);
    
    $.fn.extend({
      linkUrl: function() {
        var returning = [];
        var regexp = /((ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?)/gi;
        this.each(function() {
          returning.push(this.replace(regexp,"<a href=\"$1\">$1</a>"));
        });
        return $(returning);
      },
      linkUser: function() {
        var returning = [];
        var regexp = /[\@]+([A-Za-z0-9-_]+)/gi;
        this.each(function() {
          returning.push(this.replace(regexp,"<a href=\"http://twitter.com/$1\">@$1</a>"));
        });
        return $(returning);
      },
      linkHash: function() {
        var returning = [];
        var regexp = /(?:^| )[\#]+([A-Za-z0-9-_]+)/gi;
        this.each(function() {
          returning.push(this.replace(regexp, ' <a href="http://search.twitter.com/search?q=&tag=$1&lang=all&from='+s.username.join("%2BOR%2B")+'">#$1</a>'));
        });
        return $(returning);
      },
      capAwesome: function() {
        var returning = [];
        this.each(function() {
          returning.push(this.replace(/\b(awesome)\b/gi, '<span class="awesome">$1</span>'));
        });
        return $(returning);
      },
      capEpic: function() {
        var returning = [];
        this.each(function() {
          returning.push(this.replace(/\b(epic)\b/gi, '<span class="epic">$1</span>'));
        });
        return $(returning);
      },
      makeHeart: function() {
        var returning = [];
        this.each(function() {
          returning.push(this.replace(/(&lt;)+[3]/gi, "<tt class='heart'>&#x2665;</tt>"));
        });
        return $(returning);
      }
    });

    function parse_date(date_str) {
      // The non-search twitter APIs return inconsistently-formatted dates, which Date.parse
      // cannot handle in IE. We therefore perform the following transformation:
      // "Wed Apr 29 08:53:31 +0000 2009" => "Wed, Apr 29 2009 08:53:31 +0000"
      return Date.parse(date_str.replace(/^([a-z]{3})( [a-z]{3} \d\d?)(.*)( \d{4})$/i, '$1,$2$4$3'));
    }

    function relative_time(time_value) {
      var parsed_date = parse_date(time_value);
      var relative_to = (arguments.length > 1) ? arguments[1] : new Date();
      var delta = parseInt((relative_to.getTime() - parsed_date) / 1000);
      var r = '';
      if (delta < 60) {
	r = delta + ' seconds ago';
      } else if(delta < 120) {
	r = 'a minute ago';
      } else if(delta < (45*60)) {
	r = (parseInt(delta / 60, 10)).toString() + ' minutes ago';
      } else if(delta < (2*60*60)) {
	r = 'an hour ago';
      } else if(delta < (24*60*60)) {
	r = '' + (parseInt(delta / 3600, 10)).toString() + ' hours ago';
      } else if(delta < (48*60*60)) {
	r = 'a day ago';
      } else {
	r = (parseInt(delta / 86400, 10)).toString() + ' days ago';
      }
      return 'about ' + r;
    }

    function build_url() {
      var proto = ('https:' == document.location.protocol ? 'https:' : 'http:');
      if (s.list) {
        return proto+"//api.twitter.com/1/"+s.username[0]+"/lists/"+s.list+"/statuses.json?per_page="+s.count+"&callback=?";
      } else if (s.query == null && s.username.length == 1) {
        return proto+'//api.twitter.com/1/statuses/user_timeline.json?screen_name='+s.username[0]+'&count='+s.count+'&include_rts=1&callback=?';
      } else {
        var query = (s.query || 'from:'+s.username.join(' OR from:'));
        return proto+'//search.twitter.com/search.json?&q='+encodeURIComponent(query)+'&rpp='+s.count+'&callback=?';
      }
    }

    return this.each(function(i, widget){
      var list = $('<ul class="tweet_list">').appendTo(widget);
      var intro = '<p class="tweet_intro">'+s.intro_text+'</p>';
      var outro = '<p class="tweet_outro">'+s.outro_text+'</p>';
      var loading = $('<p class="loading">'+s.loading_text+'</p>');

      if(typeof(s.username) == "string"){
        s.username = [s.username];
      }

      if (s.loading_text) $(widget).append(loading);
      $(widget).bind("load", function(){
	  	$(widget).fadeOut();
        $.getJSON(build_url(), function(data){
          if (s.loading_text) loading.remove();
          if (s.intro_text) list.before(intro);
          list.empty();
          var tweets = (data.results || data);
          $.each(tweets, function(i,item){
            // auto join text based on verb tense and content
            if (s.join_text == "auto") {
              if (item.text.match(/^(@([A-Za-z0-9-_]+)) .*/i)) {
                var join_text = s.auto_join_text_reply;
              } else if (item.text.match(/(^\w+:\/\/[A-Za-z0-9-_]+\.[A-Za-z0-9-_:%&\?\/.=]+) .*/i)) {
                var join_text = s.auto_join_text_url;
              } else if (item.text.match(/^((\w+ed)|just) .*/im)) {
                var join_text = s.auto_join_text_ed;
              } else if (item.text.match(/^(\w*ing) .*/i)) {
                var join_text = s.auto_join_text_ing;
              } else {
                var join_text = s.auto_join_text_default;
              }
            } else {
              var join_text = s.join_text;
            };
   
            var from_user = item.from_user || item.user.screen_name;
            var profile_image_url = item.profile_image_url || item.user.profile_image_url;
            var join_template = '<span class="tweet_join"> '+join_text+' </span>';
            var join = ((s.join_text) ? join_template : ' ');
            var avatar_template = '<a class="tweet_avatar" href="http://twitter.com/'+from_user+'"><img src="'+profile_image_url+'" height="'+s.avatar_size+'" width="'+s.avatar_size+'" alt="'+from_user+'\'s avatar" title="'+from_user+'\'s avatar" border="0"/></a>';
            var avatar = (s.avatar_size ? avatar_template : '');
            var date = '<span class="tweet_time"><a href="http://twitter.com/'+from_user+'/statuses/'+item.id+'" title="view tweet on twitter">'+relative_time(item.created_at)+'</a></span>';
            var text = '<span class="tweet_text">' +$([item.text]).linkUrl().linkUser().linkHash().makeHeart().capAwesome().capEpic()[0]+ '</span>';
   
            // until we create a template option, arrange the items below to alter a tweet's display.
            list.append('<li>' + avatar + date + join + text + '</li>');
   
            list.children('li:first').addClass('tweet_first');
            list.children('li:odd').addClass('tweet_even');
            list.children('li:even').addClass('tweet_odd');
			
          });
		  $(widget).fadeIn();
          if (s.outro_text) list.after(outro);
          $(widget).trigger("loaded").trigger((tweets.length == 0 ? "empty" : "full"));
          if (s.refresh_interval) {
            window.setTimeout(function() { $(widget).trigger("load"); }, 1000 * s.refresh_interval);
          };
        });
      }).trigger("load");
    });
  };
})(jQuery);


/* COOKIES
 * Copyright (c) 2005 - 2010, James Auldridge
 * All rights reserved.
 *
 * Licensed under the BSD, MIT, and GPL (your choice!) Licenses:
 *  http://code.google.com/p/cookies/wiki/License
 *
 */
var jaaulde=window.jaaulde||{};jaaulde.utils=jaaulde.utils||{};jaaulde.utils.cookies=(function(){var resolveOptions,assembleOptionsString,parseCookies,constructor,defaultOptions={expiresAt:null,path:'/',domain:null,secure:false};resolveOptions=function(options){var returnValue,expireDate;if(typeof options!=='object'||options===null){returnValue=defaultOptions;}else
{returnValue={expiresAt:defaultOptions.expiresAt,path:defaultOptions.path,domain:defaultOptions.domain,secure:defaultOptions.secure};if(typeof options.expiresAt==='object'&&options.expiresAt instanceof Date){returnValue.expiresAt=options.expiresAt;}else if(typeof options.hoursToLive==='number'&&options.hoursToLive!==0){expireDate=new Date();expireDate.setTime(expireDate.getTime()+(options.hoursToLive*60*60*1000));returnValue.expiresAt=expireDate;}if(typeof options.path==='string'&&options.path!==''){returnValue.path=options.path;}if(typeof options.domain==='string'&&options.domain!==''){returnValue.domain=options.domain;}if(options.secure===true){returnValue.secure=options.secure;}}return returnValue;};assembleOptionsString=function(options){options=resolveOptions(options);return((typeof options.expiresAt==='object'&&options.expiresAt instanceof Date?'; expires='+options.expiresAt.toGMTString():'')+'; path='+options.path+(typeof options.domain==='string'?'; domain='+options.domain:'')+(options.secure===true?'; secure':''));};parseCookies=function(){var cookies={},i,pair,name,value,separated=document.cookie.split(';'),unparsedValue;for(i=0;i<separated.length;i=i+1){pair=separated[i].split('=');name=pair[0].replace(/^\s*/,'').replace(/\s*$/,'');try
{value=decodeURIComponent(pair[1]);}catch(e1){value=pair[1];}if(typeof JSON==='object'&&JSON!==null&&typeof JSON.parse==='function'){try
{unparsedValue=value;value=JSON.parse(value);}catch(e2){value=unparsedValue;}}cookies[name]=value;}return cookies;};constructor=function(){};constructor.prototype.get=function(cookieName){var returnValue,item,cookies=parseCookies();if(typeof cookieName==='string'){returnValue=(typeof cookies[cookieName]!=='undefined')?cookies[cookieName]:null;}else if(typeof cookieName==='object'&&cookieName!==null){returnValue={};for(item in cookieName){if(typeof cookies[cookieName[item]]!=='undefined'){returnValue[cookieName[item]]=cookies[cookieName[item]];}else
{returnValue[cookieName[item]]=null;}}}else
{returnValue=cookies;}return returnValue;};constructor.prototype.filter=function(cookieNameRegExp){var cookieName,returnValue={},cookies=parseCookies();if(typeof cookieNameRegExp==='string'){cookieNameRegExp=new RegExp(cookieNameRegExp);}for(cookieName in cookies){if(cookieName.match(cookieNameRegExp)){returnValue[cookieName]=cookies[cookieName];}}return returnValue;};constructor.prototype.set=function(cookieName,value,options){if(typeof options!=='object'||options===null){options={};}if(typeof value==='undefined'||value===null){value='';options.hoursToLive=-8760;}else if(typeof value!=='string'){if(typeof JSON==='object'&&JSON!==null&&typeof JSON.stringify==='function'){value=JSON.stringify(value);}else
{throw new Error('cookies.set() received non-string value and could not serialize.');}}var optionsString=assembleOptionsString(options);document.cookie=cookieName+'='+encodeURIComponent(value)+optionsString;};constructor.prototype.del=function(cookieName,options){var allCookies={},name;if(typeof options!=='object'||options===null){options={};}if(typeof cookieName==='boolean'&&cookieName===true){allCookies=this.get();}else if(typeof cookieName==='string'){allCookies[cookieName]=true;}for(name in allCookies){if(typeof name==='string'&&name!==''){this.set(name,null,options);}}};constructor.prototype.test=function(){var returnValue=false,testName='cT',testValue='data';this.set(testName,testValue);if(this.get(testName)===testValue){this.del(testName);returnValue=true;}return returnValue;};constructor.prototype.setOptions=function(options){if(typeof options!=='object'){options=null;}defaultOptions=resolveOptions(options);};return new constructor();})();(function(){if(window.jQuery){(function($){$.cookies=jaaulde.utils.cookies;var extensions={cookify:function(options){return this.each(function(){var i,nameAttrs=['name','id'],name,$this=$(this),value;for(i in nameAttrs){if(!isNaN(i)){name=$this.attr(nameAttrs[i]);if(typeof name==='string'&&name!==''){if($this.is(':checkbox, :radio')){if($this.attr('checked')){value=$this.val();}}else if($this.is(':input')){value=$this.val();}else
{value=$this.html();}if(typeof value!=='string'||value===''){value=null;}$.cookies.set(name,value,options);break;}}}});},cookieFill:function(){return this.each(function(){var n,getN,nameAttrs=['name','id'],name,$this=$(this),value;getN=function(){n=nameAttrs.pop();return!!n;};while(getN()){name=$this.attr(n);if(typeof name==='string'&&name!==''){value=$.cookies.get(name);if(value!==null){if($this.is(':checkbox, :radio')){if($this.val()===value){$this.attr('checked','checked');}else
{$this.removeAttr('checked');}}else if($this.is(':input')){$this.val(value);}else
{$this.html(value);}}break;}}});},cookieBind:function(options){return this.each(function(){var $this=$(this);$this.cookieFill().change(function(){$this.cookify(options);});});}};$.each(extensions,function(i){$.fn[i]=this;});})(window.jQuery);}})();

/*
 * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/
 *
 * Uses the built in easing capabilities added In jQuery 1.1
 * to offer multiple easing options
 *
 * TERMS OF USE - jQuery Easing
 * 
 * Open source under the BSD License. 
 * 
 * Copyright © 2008 George McGinley Smith
 * All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or without modification, 
 * are permitted provided that the following conditions are met:
 * 
 * Redistributions of source code must retain the above copyright notice, this list of 
 * conditions and the following disclaimer.
 * Redistributions in binary form must reproduce the above copyright notice, this list 
 * of conditions and the following disclaimer in the documentation and/or other materials 
 * provided with the distribution.
 * 
 * Neither the name of the author nor the names of contributors may be used to endorse 
 * or promote products derived from this software without specific prior written permission.
 * 
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 
 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
 *  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 *  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
 *  GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 
 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 
 * OF THE POSSIBILITY OF SUCH DAMAGE. 
 *
*/

// t: current time, b: begInnIng value, c: change In value, d: duration
jQuery.easing['jswing'] = jQuery.easing['swing'];

jQuery.extend( jQuery.easing,
{
	def: 'easeOutQuad',
	swing: function (x, t, b, c, d) {
		//alert(jQuery.easing.default);
		return jQuery.easing[jQuery.easing.def](x, t, b, c, d);
	},
	easeInQuad: function (x, t, b, c, d) {
		return c*(t/=d)*t + b;
	},
	easeOutQuad: function (x, t, b, c, d) {
		return -c *(t/=d)*(t-2) + b;
	},
	easeInOutQuad: function (x, t, b, c, d) {
		if ((t/=d/2) < 1) return c/2*t*t + b;
		return -c/2 * ((--t)*(t-2) - 1) + b;
	},
	easeInCubic: function (x, t, b, c, d) {
		return c*(t/=d)*t*t + b;
	},
	easeOutCubic: function (x, t, b, c, d) {
		return c*((t=t/d-1)*t*t + 1) + b;
	},
	easeInOutCubic: function (x, t, b, c, d) {
		if ((t/=d/2) < 1) return c/2*t*t*t + b;
		return c/2*((t-=2)*t*t + 2) + b;
	},
	easeInQuart: function (x, t, b, c, d) {
		return c*(t/=d)*t*t*t + b;
	},
	easeOutQuart: function (x, t, b, c, d) {
		return -c * ((t=t/d-1)*t*t*t - 1) + b;
	},
	easeInOutQuart: function (x, t, b, c, d) {
		if ((t/=d/2) < 1) return c/2*t*t*t*t + b;
		return -c/2 * ((t-=2)*t*t*t - 2) + b;
	},
	easeInQuint: function (x, t, b, c, d) {
		return c*(t/=d)*t*t*t*t + b;
	},
	easeOutQuint: function (x, t, b, c, d) {
		return c*((t=t/d-1)*t*t*t*t + 1) + b;
	},
	easeInOutQuint: function (x, t, b, c, d) {
		if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b;
		return c/2*((t-=2)*t*t*t*t + 2) + b;
	},
	easeInSine: function (x, t, b, c, d) {
		return -c * Math.cos(t/d * (Math.PI/2)) + c + b;
	},
	easeOutSine: function (x, t, b, c, d) {
		return c * Math.sin(t/d * (Math.PI/2)) + b;
	},
	easeInOutSine: function (x, t, b, c, d) {
		return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b;
	},
	easeInExpo: function (x, t, b, c, d) {
		return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b;
	},
	easeOutExpo: function (x, t, b, c, d) {
		return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;
	},
	easeInOutExpo: function (x, t, b, c, d) {
		if (t==0) return b;
		if (t==d) return b+c;
		if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b;
		return c/2 * (-Math.pow(2, -10 * --t) + 2) + b;
	},
	easeInCirc: function (x, t, b, c, d) {
		return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b;
	},
	easeOutCirc: function (x, t, b, c, d) {
		return c * Math.sqrt(1 - (t=t/d-1)*t) + b;
	},
	easeInOutCirc: function (x, t, b, c, d) {
		if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b;
		return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b;
	},
	easeInElastic: function (x, t, b, c, d) {
		var s=1.70158;var p=0;var a=c;
		if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;
		if (a < Math.abs(c)) { a=c; var s=p/4; }
		else var s = p/(2*Math.PI) * Math.asin (c/a);
		return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
	},
	easeOutElastic: function (x, t, b, c, d) {
		var s=1.70158;var p=0;var a=c;
		if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;
		if (a < Math.abs(c)) { a=c; var s=p/4; }
		else var s = p/(2*Math.PI) * Math.asin (c/a);
		return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b;
	},
	easeInOutElastic: function (x, t, b, c, d) {
		var s=1.70158;var p=0;var a=c;
		if (t==0) return b;  if ((t/=d/2)==2) return b+c;  if (!p) p=d*(.3*1.5);
		if (a < Math.abs(c)) { a=c; var s=p/4; }
		else var s = p/(2*Math.PI) * Math.asin (c/a);
		if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
		return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b;
	},
	easeInBack: function (x, t, b, c, d, s) {
		if (s == undefined) s = 1.70158;
		return c*(t/=d)*t*((s+1)*t - s) + b;
	},
	easeOutBack: function (x, t, b, c, d, s) {
		if (s == undefined) s = 1.70158;
		return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;
	},
	easeInOutBack: function (x, t, b, c, d, s) {
		if (s == undefined) s = 1.70158; 
		if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;
		return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;
	},
	easeInBounce: function (x, t, b, c, d) {
		return c - jQuery.easing.easeOutBounce (x, d-t, 0, c, d) + b;
	},
	easeOutBounce: function (x, t, b, c, d) {
		if ((t/=d) < (1/2.75)) {
			return c*(7.5625*t*t) + b;
		} else if (t < (2/2.75)) {
			return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;
		} else if (t < (2.5/2.75)) {
			return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;
		} else {
			return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;
		}
	},
	easeInOutBounce: function (x, t, b, c, d) {
		if (t < d/2) return jQuery.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b;
		return jQuery.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b;
	}
});

/*
 *
 * TERMS OF USE - EASING EQUATIONS
 * 
 * Open source under the BSD License. 
 * 
 * Copyright © 2001 Robert Penner
 * All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or without modification, 
 * are permitted provided that the following conditions are met:
 * 
 * Redistributions of source code must retain the above copyright notice, this list of 
 * conditions and the following disclaimer.
 * Redistributions in binary form must reproduce the above copyright notice, this list 
 * of conditions and the following disclaimer in the documentation and/or other materials 
 * provided with the distribution.
 * 
 * Neither the name of the author nor the names of contributors may be used to endorse 
 * or promote products derived from this software without specific prior written permission.
 * 
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 
 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
 *  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 *  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
 *  GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 
 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 
 * OF THE POSSIBILITY OF SUCH DAMAGE. 
 *
 */

/*
This file is part of VideoJS. Copyright 2010 Zencoder, Inc.

VideoJS is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

VideoJS is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public License
along with VideoJS.  If not, see <http://www.gnu.org/licenses/>.
*/

// Using jresig's Class implementation http://ejohn.org/blog/simple-javascript-inheritance/
(function(){var initializing=false, fnTest=/xyz/.test(function(){xyz;}) ? /\b_super\b/ : /.*/; this.JRClass = function(){}; JRClass.extend = function(prop) { var _super = this.prototype; initializing = true; var prototype = new this(); initializing = false; for (var name in prop) { prototype[name] = typeof prop[name] == "function" && typeof _super[name] == "function" && fnTest.test(prop[name]) ? (function(name, fn){ return function() { var tmp = this._super; this._super = _super[name]; var ret = fn.apply(this, arguments); this._super = tmp; return ret; }; })(name, prop[name]) : prop[name]; } function JRClass() { if ( !initializing && this.init ) this.init.apply(this, arguments); } JRClass.prototype = prototype; JRClass.constructor = JRClass; JRClass.extend = arguments.callee; return JRClass;};})();

// Video JS Player Class
var VideoJS = JRClass.extend({

  // Initialize the player for the supplied video tag element
  // element: video tag
  init: function(element, setOptions){

    // Allow an ID string or an element
    if (typeof element == 'string') {
      this.video = document.getElementById(element);
    } else {
      this.video = element;
    }

    // Hide default controls
    this.video.controls = false;

    // Store reference to player on the video element.
    // So you can acess the player later: document.getElementById("video_id").player.play();
    this.video.player = this;

    // Default Options
    this.options = {
      controlsBelow: false, // Display control bar below video vs. in front of
      controlsHiding: true, // Hide controls when not over the video
      defaultVolume: 0.85, // Will be overridden by localStorage volume if available
      flashVersion: 9, // Required flash version for fallback
      linksHiding: true, // Hide download links when video is supported
      flashIsDominant: false // Always use Flash when available
    };

    // Override default options with global options
    if (typeof VideoJS.options == "object") { _V_.merge(this.options, VideoJS.options); }

    // Override global options with options specific to this video
    if (typeof setOptions == "object") { _V_.merge(this.options, setOptions); }

    this.box = this.video.parentNode;
    this.flashFallback = this.getFlashFallback();
    this.linksFallback = this.getLinksFallback();

    // Hide download links if video can play
    if(VideoJS.browserSupportsVideo() || ((this.flashFallback || VideoJS.isIE()) && this.flashVersionSupported())) {
      this.hideLinksFallback();
    }

    // Check if browser can play HTML5 video
    if (VideoJS.browserSupportsVideo()) {
      // Force flash fallback when there's no supported source, or flash is dominant
      if (!this.canPlaySource() || this.options.flashIsDominant) {
        this.replaceWithFlash();
        return;
      }
    } else {
      return;
    }

    if (VideoJS.isIpad()) { this.iPadFix(); }
    if (VideoJS.isAndroid()) { this.androidFix(); }

    if (this.options.controlsBelow) {
      _V_.addClass(this.box, "vjs-controls-below");
    }

    // Store amount of video loaded
    this.percentLoaded = 0;

    this.buildPoster();
    this.showPoster();

    this.buildController();
    this.showController();

    // Position & show controls when data is loaded
    this.video.addEventListener("loadeddata", this.onLoadedData.context(this), false);

    // Listen for when the video is played
    this.video.addEventListener("play", this.onPlay.context(this), false);
    // Listen for when the video is paused
    this.video.addEventListener("pause", this.onPause.context(this), false);
    // Listen for when the video ends
    this.video.addEventListener("ended", this.onEnded.context(this), false);
    // Listen for a volume change
    this.video.addEventListener('volumechange',this.onVolumeChange.context(this),false);
    // Listen for video errors
    this.video.addEventListener('error',this.onError.context(this),false);
    // Listen for Video Load Progress (currently does not if html file is local)
    this.video.addEventListener('progress', this.onProgress.context(this), false);
    // Set interval for load progress using buffer watching method
    this.watchBuffer = setInterval(this.updateBufferedTotal.context(this), 33);
    // Listen for Video time update
    this.video.addEventListener('timeupdate', this.onTimeUpdate.context(this), false);

    // Listen for clicks on the play/pause button
    this.playControl.addEventListener("click", this.onPlayControlClick.context(this), false);
    // Make a click on the video act like a click on the play button.
    this.video.addEventListener("click", this.onPlayControlClick.context(this), false);
    // Make a click on the poster act like a click on the play button.
    if (this.poster) { this.poster.addEventListener("click", this.onPlayControlClick.context(this), false); }

    // Listen for drags on the progress bar
    this.progressHolder.addEventListener("mousedown", this.onProgressHolderMouseDown.context(this), false);
    // Listen for a release on the progress bar
    this.progressHolder.addEventListener("mouseup", this.onProgressHolderMouseUp.context(this), false);

    // Set to stored volume OR 85%
    this.setVolume(localStorage.volume || this.options.defaultVolume);
    // Listen for a drag on the volume control
    this.volumeControl.addEventListener("mousedown", this.onVolumeControlMouseDown.context(this), false);
    // Listen for a release on the volume control
    this.volumeControl.addEventListener("mouseup", this.onVolumeControlMouseUp.context(this), false);
    // Set the display to the initial volume
    this.updateVolumeDisplay();

    // Listen for clicks on the button
    this.fullscreenControl.addEventListener("click", this.onFullscreenControlClick.context(this), false);

    // Listen for the mouse move the video. Used to reveal the controller.
    this.box.addEventListener("mousemove", this.onVideoMouseMove.context(this), false);
    // Listen for the mouse moving out of the video. Used to hide the controller.
    this.box.addEventListener("mouseout", this.onVideoMouseOut.context(this), false);

    if (this.poster) {
      // Listen for the mouse move the poster image. Used to reveal the controller.
      this.poster.addEventListener("mousemove", this.onVideoMouseMove.context(this), false);
      // Listen for the mouse moving out of the poster image. Used to hide the controller.
      this.poster.addEventListener("mouseout", this.onVideoMouseOut.context(this), false);
    }

    // Have to add the mouseout to the controller too or it may not hide.
    // For some reason the same isn't needed for mouseover
    this.controls.addEventListener("mouseout", this.onVideoMouseOut.context(this), false);

    // Create listener for esc key while in full screen mode
    // Creating it during initialization to add context
    // and because it has to be removed with removeEventListener
    this.onEscKey = function(event){
      if (event.keyCode == 27) {
        this.fullscreenOff();
      }
    }.context(this);

    this.onWindowResize = function(event){
      this.positionController();
    }.context(this);

    // Support older browsers that used autobuffer
    this.fixPreloading();

    // Load subtitles. Based on http://matroska.org/technical/specs/subtitles/srt.html
    this.subtitlesSource = this.video.getAttribute("data-subtitles");
    if (this.subtitlesSource !== null) {
      this.loadSubtitles();
      this.buildSubtitles();
    }

  },

  // Support older browsers that used "autobuffer"
  fixPreloading: function(){
    if (typeof this.video.hasAttribute == "function" && this.video.hasAttribute("preload")) {
      this.video.autobuffer = true;
    }
  },

  // Translate functionality
  play: function(){ this.video.play(); },
  pause: function(){ this.video.pause(); },

  buildController: function(){

    /* Creating this HTML
      <ul class="vjs-controls">
        <li class="vjs-play-control vjs-play">
          <span></span>
        </li>
        <li class="vjs-progress-control">
          <ul class="vjs-progress-holder">
            <li class="vjs-load-progress"></li>
            <li class="vjs-play-progress"></li>
          </ul>
        </li>
        <li class="vjs-time-control">
          <span class="vjs-current-time-display">00:00</span><span> / </span><span class="vjs-duration-display">00:00</span>
        </li>
        <li class="vjs-volume-control">
          <ul>
            <li></li><li></li><li></li><li></li><li></li><li></li>
          </ul>
        </li>
        <li class="vjs-fullscreen-control">
          <ul>
            <li></li><li></li><li></li><li></li>
          </ul>
        </li>
      </ul>
    */

    // Create a list element to hold the different controls
    this.controls = _V_.createElement("ul", { className: "vjs-controls" });
    // Add the controls to the video's container
    this.video.parentNode.appendChild(this.controls);

    // Build the play control
    this.playControl = _V_.createElement("li", { className: "vjs-play-control vjs-play", innerHTML: "<span></span>" });
    this.controls.appendChild(this.playControl);

    // Build the progress control
    this.progressControl = _V_.createElement("li", { className: "vjs-progress-control" });
    this.controls.appendChild(this.progressControl);

    // Create a holder for the progress bars
    this.progressHolder = _V_.createElement("ul", { className: "vjs-progress-holder" });
    this.progressControl.appendChild(this.progressHolder);

    // Create the loading progress display
    this.loadProgress = _V_.createElement("li", { className: "vjs-load-progress" });
    this.progressHolder.appendChild(this.loadProgress);

    // Create the playing progress display
    this.playProgress = _V_.createElement("li", { className: "vjs-play-progress" });
    this.progressHolder.appendChild(this.playProgress);

    // Create the progress time display (00:00 / 00:00)
    this.timeControl = _V_.createElement("li", { className: "vjs-time-control" });
    this.controls.appendChild(this.timeControl);

    // Create the current play time display
    this.currentTimeDisplay = _V_.createElement("span", { className: "vjs-current-time-display", innerHTML: "00:00" });
    this.timeControl.appendChild(this.currentTimeDisplay);

    // Add time separator
    this.timeSeparator = _V_.createElement("span", { innerHTML: " / " });
    this.timeControl.appendChild(this.timeSeparator);

    // Create the total duration display
    this.durationDisplay = _V_.createElement("span", { className: "vjs-duration-display", innerHTML: "00:00" });
    this.timeControl.appendChild(this.durationDisplay);

    // Create the volumne control
    this.volumeControl = _V_.createElement("li", {
      className: "vjs-volume-control",
      innerHTML: "<ul><li></li><li></li><li></li><li></li><li></li><li></li></ul>"
    });
    this.controls.appendChild(this.volumeControl);
    this.volumeDisplay = this.volumeControl.children[0];

    // Crete the fullscreen control
    this.fullscreenControl = _V_.createElement("li", {
      className: "vjs-fullscreen-control",
      innerHTML: "<ul><li></li><li></li><li></li><li></li></ul>"
    });
    this.controls.appendChild(this.fullscreenControl);
  },

  // Get the download links block element
  getLinksFallback: function(){
    return this.box.getElementsByTagName("P")[0];
  },

  // Hide no-video download paragraph
  hideLinksFallback: function(){
    if (this.options.linksHiding && this.linksFallback) { this.linksFallback.style.display = "none"; }
  },

  getFlashFallback: function(){
    if (VideoJS.isIE()) { return; }
    var children = this.box.getElementsByClassName("vjs-flash-fallback");
    for (var i=0,j=children.length; i<j; i++) {
      return children[i];
    }
  },

  replaceWithFlash: function(){
    // this.flashFallback = this.video.removeChild(this.flashFallback);
    if (this.flashFallback) {
      this.box.insertBefore(this.flashFallback, this.video);
      this.video.style.display = "none"; // Removing it was breaking later players
    }
  },

  // Show the controller
  showController: function(){
    this.controls.style.display = "none";
    this.positionController();
  },

  // Place controller relative to the video's position
  positionController: function(){
    // Make sure the controls are visible
    if (this.controls.style.display == 'none') { return; }

    // Sometimes the CSS styles haven't been applied to the controls yet
    // when we're trying to calculate the height and position them correctly.
    // This causes a flicker where the controls are out of place.
    // Best way I can think of to test this is to check if the width of all the controls are the same.
    // If so, hide the controller and delay positioning them briefly.
    if (this.playControl.offsetWidth == this.progressControl.offsetWidth
     && this.playControl.offsetWidth == this.timeControl.offsetWidth
     && this.playControl.offsetWidth == this.volumeControl.offsetWidth) {
       // Don't want to create an endless loop either.
       if (!this.positionRetries) { this.positionRetries = 1; }
       if (this.positionRetries++ < 100) {
         this.controls.style.display = "none";
         setTimeout(this.showController.context(this),0);
         return;
       }
    }

    // Set width based on fullscreen or not.
    if (this.videoIsFullScreen) {
      this.box.style.width = "";
    } else {
      this.box.style.width = this.video.offsetWidth + "px";
    }

    if (this.options.controlsBelow) {
      if (this.videoIsFullScreen) {
        this.box.style.height = "";
        this.video.style.height = (this.box.offsetHeight - this.controls.offsetHeight) + "px";
      } else {
        this.video.style.height = "";
        this.box.style.height = this.video.offsetHeight + this.controls.offsetHeight + "px";
      }
      this.controls.style.top = this.video.offsetHeight + "px";
    } else {
      this.controls.style.top = (this.video.offsetHeight - this.controls.offsetHeight) + "px";
    }

    this.sizeProgressBar();
  },

  // Hide the controller
  hideController: function(){
    if (this.options.controlsHiding) { this.controls.style.display = "none"; }
  },

  // Update poster source from attribute or fallback image
  // iPad breaks if you include a poster attribute, so this fixes that
  updatePosterSource: function(){
    if (!this.video.poster) {
      var images = this.video.getElementsByTagName("img");
      if (images.length > 0) { this.video.poster = images[0].src; }
    }
  },

  buildPoster: function(){
    this.updatePosterSource();
    if (this.video.poster) {
      this.poster = document.createElement("img");
      // Add poster to video box
      this.video.parentNode.appendChild(this.poster);

      // Add poster image data
      this.poster.src = this.video.poster;
      // Add poster styles
      this.poster.className = "vjs-poster";
    } else {
      this.poster = false;
    }
  },

  // Add the video poster to the video's container, to fix autobuffer/preload bug
  showPoster: function(){
    if (!this.poster) { return; }
    this.poster.style.display = "none";
    this.positionPoster();
  },

  // Size the poster image
  positionPoster: function(){
    // Only if the poster is visible
    if (!this.poster || this.poster.style.display == 'none') { return; }
    this.poster.style.height = this.video.offsetHeight + "px";
    this.poster.style.width = this.video.offsetWidth + "px";
  },

  hidePoster: function(){
    if (!this.poster) { return; }
    this.poster.style.display = "none";
  },

  canPlaySource: function(){
    var children = this.video.children;
    for (var i=0,j=children.length; i<j; i++) {
      if (children[i].tagName.toUpperCase() == "SOURCE") {
        var canPlay = this.video.canPlayType(children[i].type);
        if(canPlay == "probably" || canPlay == "maybe") {
          return true;
        }
      }
    }
    return false;
  },

  // When the video is played
  onPlay: function(event){
//	  console.log('start ' + this.video.currentTime);
    this.playControl.className = "vjs-play-control vjs-pause";
    this.hidePoster();
//    this.trackPlayProgress();
  },

  // When the video is paused
  onPause: function(event){
    this.playControl.className = "vjs-play-control vjs-play";
    this.stopTrackingPlayProgress();
  },

  // When the video ends
  onEnded: function(event){
//	  console.log('end ' + this.video.currentTime);
//    this.video.pause();
//    this.onPause();
	  this.video.currentTime = 0;
	  this.onPlay();
  },

  onVolumeChange: function(event){
    this.updateVolumeDisplay();
  },

  onError: function(event){
    trace(event);
    trace(this.video.error);
  },

  onLoadedData: function(event){
    this.showController();
  },

  // When the video's load progress is updated
  // Does not work in all browsers (Safari/Chrome 5)
  onProgress: function(event){
    if(event.total > 0) {
      this.setLoadProgress(event.loaded / event.total);
    }
  },

  // Buffer watching method for load progress.
  // Used for browsers that don't support the progress event
  updateBufferedTotal: function(){
    if (this.video.buffered) {
      if (this.video.buffered.length >= 1) {
        this.setLoadProgress(this.video.buffered.end(0) / this.video.duration);
        if (this.video.buffered.end(0) == this.video.duration) {
          clearInterval(this.watchBuffer);
        }
      }
    } else {
      clearInterval(this.watchBuffer);
    }
  },

  setLoadProgress: function(percentAsDecimal){
    if (percentAsDecimal > this.percentLoaded) {
      this.percentLoaded = percentAsDecimal;
      this.updateLoadProgress();
    }
  },

  updateLoadProgress: function(){
    if (this.controls.style.display == 'none') { return; }
    this.loadProgress.style.width = (this.percentLoaded * (_V_.getComputedStyleValue(this.progressHolder, "width").replace("px", ""))) + "px";
  },

  // React to clicks on the play/pause button
  onPlayControlClick: function(event){
    if (this.video.paused) {
      this.video.play();
    } else {
      this.video.pause();
    }
  },

  // Adjust the play position when the user drags on the progress bar
  onProgressHolderMouseDown: function(event){
    this.stopTrackingPlayProgress();

    if (this.video.paused) {
      this.videoWasPlaying = false;
    } else {
      this.videoWasPlaying = true;
      this.video.pause();
    }

    _V_.blockTextSelection();
    document.onmousemove = function(event) {
      this.setPlayProgressWithEvent(event);
    }.context(this);

    document.onmouseup = function(event) {
      _V_.unblockTextSelection();
      document.onmousemove = null;
      document.onmouseup = null;
      if (this.videoWasPlaying) {
        this.video.play();
        this.trackPlayProgress();
      }
    }.context(this);
  },

  // When the user stops dragging on the progress bar, update play position
  // Backup for when the user only clicks and doesn't drag
  onProgressHolderMouseUp: function(event){
    this.setPlayProgressWithEvent(event);

    // Fixe for an apparent play button state issue.
    if (this.video.paused) {
      this.onPause();
    } else {
      this.onPlay();
    }
  },

  // Adjust the volume when the user drags on the volume control
  onVolumeControlMouseDown: function(event){
    _V_.blockTextSelection();
    document.onmousemove = function(event) {
      this.setVolumeWithEvent(event);
    }.context(this);
    document.onmouseup = function() {
      _V_.unblockTextSelection();
      document.onmousemove = null;
      document.onmouseup = null;
    }.context(this);
  },

  // When the user stops dragging, set a new volume
  // Backup for when the user only clicks and doesn't drag
  onVolumeControlMouseUp: function(event){
    this.setVolumeWithEvent(event);
  },

  // When the user clicks on the fullscreen button, update fullscreen setting
  onFullscreenControlClick: function(event){
    if (!this.videoIsFullScreen) {
      this.fullscreenOn();
    } else {
      this.fullscreenOff();
    }
  },

  onVideoMouseMove: function(event){
    this.showController();
    clearInterval(this.mouseMoveTimeout);
    this.mouseMoveTimeout = setTimeout(function(){ this.hideController(); }.context(this), 4000);
  },

  onVideoMouseOut: function(event){
    // Prevent flicker by making sure mouse hasn't left the video
    var parent = event.relatedTarget;
    while (parent && parent !== this.video && parent !== this.controls) {
      parent = parent.parentNode;
    }
    if (parent !== this.video && parent !== this.controls) {
      this.hideController();
    }
  },

  // Adjust the width of the progress bar to fill the controls width
  sizeProgressBar: function(){
    this.updatePlayProgress();
    this.updateLoadProgress();
  },

  // Get the space between controls. For more flexible styling.
  getControlsPadding: function(){
    return _V_.findPosX(this.playControl) - _V_.findPosX(this.controls);
  },

  // When dynamically placing controls, if there are borders on the controls, it can break to a new line.
  getControlBorderAdjustment: function(){
    var leftBorder = parseInt(_V_.getComputedStyleValue(this.playControl, "border-left-width").replace("px", ""), 10);
    var rightBorder = parseInt(_V_.getComputedStyleValue(this.playControl, "border-right-width").replace("px", ""), 10);
    return leftBorder + rightBorder;
  },

  // Track & display the current play progress
  trackPlayProgress: function(){
    if(this.playProgressInterval) { clearInterval(this.playProgressInterval); }
    this.playProgressInterval = setInterval(function(){ this.updatePlayProgress(); }.context(this), 33);
  },

  // Turn off play progress tracking (when paused)
  stopTrackingPlayProgress: function(){
    clearInterval(this.playProgressInterval);
  },

  // Ajust the play progress bar's width based on the current play time
  updatePlayProgress: function(){
    if (this.controls.style.display == 'none') { return; }
    this.playProgress.style.width = ((this.video.currentTime / this.video.duration) * (_V_.getComputedStyleValue(this.progressHolder, "width").replace("px", ""))) + "px";
    this.updateTimeDisplay();
  },

  // Update the play position based on where the user clicked on the progresss bar
  setPlayProgress: function(newProgress){
    this.video.currentTime = newProgress * this.video.duration;
    this.playProgress.style.width = newProgress * (_V_.getComputedStyleValue(this.progressHolder, "width").replace("px", "")) + "px";
    this.updateTimeDisplay();
    // currentTime changed, reset subtitles
    if (!this.subtitles) { this.currentSubtitlePosition = 0; }
  },

  setPlayProgressWithEvent: function(event){
    var newProgress = _V_.getRelativePosition(event.pageX, this.progressHolder);
    this.setPlayProgress(newProgress);
  },

  // Update the displayed time (00:00)
  updateTimeDisplay: function(){
    this.currentTimeDisplay.innerHTML = _V_.formatTime(this.video.currentTime);
    if (this.video.duration) { this.durationDisplay.innerHTML = _V_.formatTime(this.video.duration); }
  },

  // Set a new volume based on where the user clicked on the volume control
  setVolume: function(newVol){
    this.video.volume = parseFloat(newVol);
    localStorage.volume = this.video.volume;
  },

  setVolumeWithEvent: function(event){
    var newVol = _V_.getRelativePosition(event.pageX, this.volumeControl.children[0]);
    this.setVolume(newVol);
  },

  // Update the volume control display
  // Unique to these default controls. Uses borders to create the look of bars.
  updateVolumeDisplay: function(){
    var volNum = Math.ceil(this.video.volume * 6);
    for(var i=0; i<6; i++) {
      if (i < volNum) {
        _V_.addClass(this.volumeDisplay.children[i], "vjs-volume-level-on");
      } else {
        _V_.removeClass(this.volumeDisplay.children[i], "vjs-volume-level-on");
      }
    }
  },

  // Check if browser can use this flash player
  flashVersionSupported: function(){
    return VideoJS.getFlashVersion() >= this.options.flashVersion;
  },

  /* Fullscreen / Full-window
  ================================================================================ */
  // Turn on fullscreen (window) mode
  // Real fullscreen isn't available in browsers quite yet.
  fullscreenOn: function(){
    if (!this.nativeFullscreenOn()) {
      this.videoIsFullScreen = true;

      // Storing original doc overflow value to return to when fullscreen is off
      this.docOrigOverflow = document.documentElement.style.overflow;

      // Add listener for esc key to exit fullscreen
      document.addEventListener("keydown", this.onEscKey, false);

      // Add listener for a window resize
      window.addEventListener("resize", this.onWindowResize, false);

      // Hide any scroll bars
      document.documentElement.style.overflow = 'hidden';

      // Apply fullscreen styles
      _V_.addClass(this.box, "vjs-fullscreen");

      // Resize the controller and poster
      this.positionController();
      this.positionPoster();
    }
  },

  nativeFullscreenOn: function(){
    if(typeof this.video.webkitEnterFullScreen == 'function') {
      // Seems to be broken in Chromium/Chrome
      if (!navigator.userAgent.match("Chrome")) {
        this.video.webkitEnterFullScreen();
        return true;
      }
    }
  },

  // Turn off fullscreen (window) mode
  fullscreenOff: function(){
    this.videoIsFullScreen = false;

    document.removeEventListener("keydown", this.onEscKey, false);
    window.removeEventListener("resize", this.onWindowResize, false);

    // Unhide scroll bars.
    document.documentElement.style.overflow = this.docOrigOverflow;

    // Remove fullscreen styles
    _V_.removeClass(this.box, "vjs-fullscreen");

    // Resize to original settings
    this.positionController();
    this.positionPoster();
  },

  /* Subtitles
  ================================================================================ */
  loadSubtitles: function() {
    if (typeof XMLHttpRequest == "undefined") {
      XMLHttpRequest = function () {
        try { return new ActiveXObject("Msxml2.XMLHTTP.6.0"); }
          catch (e) {}
        try { return new ActiveXObject("Msxml2.XMLHTTP.3.0"); }
          catch (f) {}
        try { return new ActiveXObject("Msxml2.XMLHTTP"); }
          catch (g) {}
        //Microsoft.XMLHTTP points to Msxml2.XMLHTTP.3.0 and is redundant
        throw new Error("This browser does not support XMLHttpRequest.");
      };
    }
    var request = new XMLHttpRequest();
    request.open("GET",this.subtitlesSource);
    request.onreadystatechange = function() {
      if (request.readyState == 4 && request.status == 200) {
        this.parseSubtitles(request.responseText);
      }
    }.context(this);
    request.send();
  },

  parseSubtitles: function(subText) {
    var lines = subText.replace("\r",'').split("\n");
    this.subtitles = [];
    this.currentSubtitlePosition = 0;

    var i = 0;
    while(i<lines.length) {
      // define the current subtitle object
      var subtitle = {};
      // get the number
      subtitle.id = lines[i++];
      if (!subtitle.id) {
        break;
      }

      // get time
      var time = lines[i++].split(" --> ");
      subtitle.startTime = this.parseSubtitleTime(time[0]);
      subtitle.endTime = this.parseSubtitleTime(time[1]);

      // get subtitle text
      var text = [];
      while(lines[i].length>0 && lines[i]!="\r") {
        text.push(lines[i++]);
      }
      subtitle.text = text.join('<br/>');

      // add this subtitle
      this.subtitles.push(subtitle);

      // ignore the blank line
      i++;
    }
  },

  parseSubtitleTime: function(timeText) {
    var parts = timeText.split(':');
    var time = 0;
    // hours => seconds
    time += parseFloat(parts[0])*60*60;
    // minutes => seconds
    time += parseFloat(parts[1])*60;
    // get seconds
    var seconds = parts[2].split(',');
    time += parseFloat(seconds[0]);
    // add miliseconds
    time = time + parseFloat(seconds[1])/1000;
    return time;
  },

  buildSubtitles: function(){
    /* Creating this HTML
      <div class="vjs-subtitles">
      </div>
    */
    this.subtitlesDiv = _V_.createElement("div", { className: 'vjs-subtitles' });
    this.video.parentNode.appendChild(this.subtitlesDiv);
  },

  onTimeUpdate: function(){
    // show the subtitles
    if (this.subtitles) {
      var x = this.currentSubtitlePosition;

      while (x<this.subtitles.length && this.video.currentTime>this.subtitles[x].endTime) {
        if (this.subtitles[x].showing) {
          this.subtitles[x].showing = false;
          this.subtitlesDiv.innerHTML = "";
        }
        this.currentSubtitlePosition++;
        x = this.currentSubtitlePosition;
      }

      if (this.currentSubtitlePosition>=this.subtitles.length) { return; }

      if (this.video.currentTime>=this.subtitles[x].startTime && this.video.currentTime<=this.subtitles[x].endTime) {
        this.subtitlesDiv.innerHTML = this.subtitles[x].text;
        this.subtitles[x].showing = true;
      }
    }
  },


  /* Device Fixes
  ================================================================================ */

  // For iPads, controls need to always show because there's no hover
  // The controls also have to be below for the full-window mode to work.
  iPadFix: function(){
    this.options.controlsBelow = true;
    this.options.controlsHiding = false;
  },
  
  // For Androids, add the MP4 source directly to the video tag otherwise it will not play
  androidFix: function() {
    var children = this.video.children;
    for (var i=0,j=children.length; i<j; i++) {
      if (children[i].tagName.toUpperCase() == "SOURCE" && children[i].src.match(/\.mp4$/i)) {
        this.video.src = children[i].src;
      }
    }
  }

});

////////////////////////////////////////////////////////////////////////////////
// Convenience Functions (mini library)
// Functions not specific to video or VideoJS and could probably be replaced with a library like jQuery
////////////////////////////////////////////////////////////////////////////////
var _V_ = {
  addClass: function(element, classToAdd){
    if (element.className.split(/\s+/).lastIndexOf(classToAdd) == -1) { element.className = element.className === "" ? classToAdd : element.className + " " + classToAdd; }
  },

  removeClass: function(element, classToRemove){
    if (element.className.indexOf(classToRemove) == -1) { return; }
    var classNames = element.className.split(/\s+/);
    classNames.splice(classNames.lastIndexOf(classToRemove),1);
    element.className = classNames.join(" ");
  },

  merge: function(obj1, obj2){
    for(var attrname in obj2){
      if (obj2.hasOwnProperty(attrname)) {
        obj1[attrname]=obj2[attrname];
      }
    }
    return obj1;
  },

  createElement: function(tagName, attributes){
    return _V_.merge(document.createElement(tagName), attributes);
  },

  // Attempt to block the ability to select text while dragging controls
  blockTextSelection: function(){
    document.body.focus();
    document.onselectstart = function () { return false; };
  },

  // Turn off text selection blocking
  unblockTextSelection: function(){
    document.onselectstart = function () { return true; };
  },

  // Return seconds as MM:SS
  formatTime: function(secs) {
    var seconds = Math.round(secs);
    var minutes = Math.floor(seconds / 60);
    minutes = (minutes >= 10) ? minutes : "0" + minutes;
    seconds = Math.floor(seconds % 60);
    seconds = (seconds >= 10) ? seconds : "0" + seconds;
    return minutes + ":" + seconds;
  },

  // Return the relative horizonal position of an event as a value from 0-1
  getRelativePosition: function(x, relativeElement){
    return Math.max(0, Math.min(1, (x - _V_.findPosX(relativeElement)) / relativeElement.offsetWidth));
  },

  // Get an objects position on the page
  findPosX: function(obj) {
    var curleft = obj.offsetLeft;
    while(obj = obj.offsetParent) {
      curleft += obj.offsetLeft;
    }
    return curleft;
  },

  getComputedStyleValue: function(element, style){
    return window.getComputedStyle(element, null).getPropertyValue(style);
  },

  // DOM Ready functionality adapted from jQuery. http://jquery.com/
  bindDOMReady: function(){
    if (document.readyState === "complete") {
      return _V_.DOMReady();
    }
    if (document.addEventListener) {
      document.addEventListener("DOMContentLoaded", _V_.DOMContentLoaded, false);
      window.addEventListener("load", _V_.DOMReady, false);
    } else if (document.attachEvent) {
      document.attachEvent("onreadystatechange", _V_.DOMContentLoaded);
      window.attachEvent("onload", _V_.DOMReady);
    }
  },

  DOMContentLoaded: function(){
    if (document.addEventListener) {
      document.removeEventListener( "DOMContentLoaded", _V_.DOMContentLoaded, false);
      _V_.DOMReady();
    } else if ( document.attachEvent ) {
      if ( document.readyState === "complete" ) {
        document.detachEvent("onreadystatechange", _V_.DOMContentLoaded);
        _V_.DOMReady();
      }
    }
  },

  // Functions to be run once the DOM is loaded
  DOMReadyList: [],
  addToDOMReady: function(fn){
    if (_V_.DOMIsReady) {
      fn.call(document);
    } else {
      _V_.DOMReadyList.push(fn);
    }
  },

  DOMIsReady: false,
  DOMReady: function(){
    if (_V_.DOMIsReady) { return; }
    if (!document.body) { return setTimeout(_V_.DOMReady, 13); }
    _V_.DOMIsReady = true;
    if (_V_.DOMReadyList) {
      for (var i=0; i<_V_.DOMReadyList.length; i++) {
        _V_.DOMReadyList[i].call(document);
      }
      _V_.DOMReadyList = null;
    }
  }
};
_V_.bindDOMReady();

////////////////////////////////////////////////////////////////////////////////
// Class Methods
// Functions that don't apply to individual videos.
////////////////////////////////////////////////////////////////////////////////

// Add VideoJS to all video tags with the video-js class when the DOM is ready
VideoJS.setupAllWhenReady = function(options){
  // Options is stored globally, and added ot any new player on init
  VideoJS.options = options;
  VideoJS.DOMReady(VideoJS.setup);
};

// Run the supplied function when the DOM is ready
VideoJS.DOMReady = function(fn){
  _V_.addToDOMReady(fn);
};

// Set up a specific video or array of video elements
// "video" can be:
//    false, undefined, or "All": set up all videos with the video-js class
//    A video tag ID or video tag element: set up one video and return one player
//    An array of video tag elements/IDs: set up each and return an array of players
VideoJS.setup = function(videos, options){

  var returnSingular = false,
  playerList = [];

  // If videos is undefined or "All", set up all videos with the video-js class
  if (!videos || videos == "All") {
    videos = VideoJS.getVideoJSTags();

  // If videos is not an array, add to an array
  } else if (typeof videos != 'object' || videos.nodeType == 1) {
    videos = [videos];
    returnSingular = true;
  }

  // Loop through videos and create players for them
  for (var i=0; i<videos.length; i++) {
    if (typeof videos[i] == 'string') {
      videoElement = document.getElementById(videos[i]);
    } else { // assume DOM object
      videoElement = videos[i];
    }
    playerList.push(new VideoJS(videoElement, options));
  }

  // Return one or all depending on what was passed in
  return (returnSingular) ? playerList[0] : playerList;
};

// Find video tags with the video-js class
VideoJS.getVideoJSTags = function() {
  var videoTags = document.getElementsByTagName("video"),
  videoJSTags = [];

  for (var i=0,j=videoTags.length; i<j; i++) {
    videoTag = videoTags[i];
    if (videoTag.className.indexOf("video-js") != -1) {
      videoJSTags.push(videoTag);
    }
  }

  return videoJSTags;
};

// Check if the browser supports video.
VideoJS.browserSupportsVideo = function() {
  if (typeof VideoJS.videoSupport != "undefined") { return VideoJS.videoSupport; }
  VideoJS.videoSupport = !!document.createElement('video').canPlayType;
  return VideoJS.videoSupport;
};

VideoJS.getFlashVersion = function(){
  // Cache Version
  if (typeof VideoJS.flashVersion != "undefined") { return VideoJS.flashVersion; }
  var version = 0;
  if (typeof navigator.plugins != "undefined" && typeof navigator.plugins["Shockwave Flash"] == "object") {
    desc = navigator.plugins["Shockwave Flash"].description;
    if (desc && !(typeof navigator.mimeTypes != "undefined" && navigator.mimeTypes["application/x-shockwave-flash"] && !navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin)) {
      version = parseInt(desc.match(/^.*\s+([^\s]+)\.[^\s]+\s+[^\s]+$/)[1], 10);
    }
  } else if (typeof window.ActiveXObject != "undefined") {
    try {
      var testObject = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
      if (testObject) {
        version = parseInt(testObject.GetVariable("$version").match(/^[^\s]+\s(\d+)/)[1], 10);
      }
    }
    catch(e) {}
  }
  VideoJS.flashVersion = version;
  return VideoJS.flashVersion;
};

VideoJS.isIE = function(){ return !+"\v1"; };
VideoJS.isIpad = function(){ return navigator.userAgent.match(/iPad/i) !== null; };
VideoJS.isAndroid = function(){ return navigator.userAgent.match(/Android/i) !== null; };

// Allows for binding context to functions
// when using in event listeners and timeouts
Function.prototype.context = function(obj) {
  var method = this;
  temp = function() {
    return method.apply(obj, arguments);
  };
  return temp;
};

// jQuery Plugin
if (window.jQuery) {
  (function($) {
    $.fn.VideoJS = function(options) {
      this.each(function() {
        VideoJS.setup(this, options);
      });
      return this;
     };
   })(jQuery);
}

//VideoJS.setupAllWhenReady({
//    controlsBelow: 		false, // Display control bar below video instead of in front of
//    controlsHiding: 	true, // Hide controls when mouse is not over the video
//    defaultVolume: 		0.85, // Will be overridden by user's last volume if available
//    flashVersion: 		9, // Required flash version for fallback
//    linksHiding: 		true, // Hide download links when video is supported
//    flashIsDominant: 	false // Always use Flash when available
//  });

/*--------------------------------------------------------------------------------------------------------------------- Custom features*/

// sets the default animation style
jQuery.easing.def = "easeInOutQuart";
var togglespeed = 500;	// options: 'slow', 'fast', or milliseconds


//lightbox with pictures
$(".overlay, .modal").click(function(){
    $(".modal, .overlay").hide();
});

function trace(obj0, obj1, obj2, obj3){
	//if (isDebug)
	//	console.log(obj0, obj1, obj2, obj3);
	//else
	//	console.log(obj0, obj1, obj2, obj3);
}

function getValueByKey(arr, key, val){
	for(var i = 0; i < arr.length; i++){
		var a = arr[i];
		if (a[key] == val) {
			if(a["type"] == "library")
				return arr[i].files;
			else
				return arr[i].value;
		}else 
			continue;
	}
	
	return "";
}

////////////////////////////////////////////////
// Common
////////////////////////////////////////////////

// fancy box
$(document).ready(function() {
	$(".map-fancybox").fancybox({
		'width'				: '75%',
		'height'			: '75%',
		'autoScale'			: false,
		'type'				: 'iframe'
	});
	
	$(".picture-fancybox").fancybox({
		'titleShow'		: false
	});
});

initCommonPage();

var pageID;
var isDebug = false;

function initCommonPage(){
	//pageID = $.cookies.get('pageID');
	$(document).ready(function() {
		initGeneralButtons();
		startOpenning();
	});
}


////////////////////////////////////////////////
// Index Page
////////////////////////////////////////////////
function initIndexPage(){
	pageID = 0;
	/*
	if($.cookies.get('pageID') == 1){
		pageID = 1;
		$("body").animate({scrollTop: "545"}, 700, "easeOutExpo");
		$(".navi ul li").eq(0).find("div").addClass("selected");
	};
	*/
	$(document).ready(function() {
		initProjectView();
		initShowcase();
		initIndexNews();
		initTweets();
	});
}

////////////////////////////////////////////////
// Projects Page
////////////////////////////////////////////////

function initProjectDetailPage(){
	pageID = 1;
	$(document).ready(function() {
		$(".project-details").find('.loader').show();
		initProjectView();
		initProjectShowcase("PROJECT");
	});
}

////////////////////////////////////////////////
// Products Page
////////////////////////////////////////////////

function initProductDetailPage(){
	pageID = 1;
	$(document).ready(function() {
		initProjectView();
		initProjectShowcase("PRODUCT");
	});
}

////////////////////////////////////////////////
// About Us Page
////////////////////////////////////////////////

function initAboutPage(){
	pageID = 2;
	$(document).ready(function() {
		// interview
		initInterview();
		get_images_from_flickr();
	});
}

////////////////////////////////////////////////
// Services Page
////////////////////////////////////////////////

function initServicesPage() {
	
	pageID = 3;
	var period = 5000;
	
	$(document).ready(function() {
		initServices();
		initSlideshows();
	});
	
	function initSlideshows() {
		
		var time = 3000;
		
		$(".services_slideshow").each(function() {
			
			var obj = this;
			
			$(this).find("img").each(function() {
				$(this).hide();
			});
			
			$(this).find("img").eq(0).fadeIn();
			$(this).find("input[name=frame]").val(0);
			$(this).find("input[name=frames]").val($(this).find("img").length);
			
			var func = function() { runslideshow(obj); };
			
			setTimeout(func, time);
			
			time += 2000;
		});
	}

	function runslideshow(slideshow) {
		
		var frames = parseInt($(slideshow).find("input[name=frames]").attr('value'));
		var old_frame = parseInt($(slideshow).find("input[name=frame]").attr('value'));
		
		var cur_frame = old_frame + 1;
		
		if(cur_frame >= frames) {
			cur_frame = 0;
		}
		
		if(cur_frame != old_frame) {
			$(slideshow).find("img").eq(old_frame).fadeOut(function() {
				$(slideshow).find("img").eq(cur_frame).fadeIn()
			});
		}
		
		$(slideshow).find("input[name=frame]").attr('value', cur_frame);
		
		var func = function() { runslideshow(slideshow); };
		
		setTimeout(func, period);
	}
}

////////////////////////////////////////////////
// News Page
////////////////////////////////////////////////

function initNewsPage(){
	pageID = 4;
	$(document).ready(function() {
		initNews();
	});
}

function startEnding(link){
	//trace(pageID, link)
	if(pageID == 0 && link == "index.php"){
		$("html").animate({scrollTop: "0"}, 700, "easeOutExpo");
		$("body").animate({scrollTop: "0"}, 700, "easeOutExpo");
		return;
	}
	
	/*
	if(pageID == 0 && link == "index.php?go=project"){alert('aaa');
		$("html").animate({scrollTop: "545"}, 700, "easeOutExpo");
		$("body").animate({scrollTop: "545"}, 700, "easeOutExpo");
		return;
	}
	*/

	$.cookies.set('direction', '0');
	
	if(link != "")
		transitionLink = link;
	
	if($(".showcaseContainer").length != 0){
		
		// index pages
		
		$(".showcaseContainer").delay(600).animate({height:0}, 700, "easeOutExpo", function(){
			window.location = transitionLink;
		});
		$(".bodyContent").append('<div class=superHider style="position:absolute; z-index:998; top:5px; left:0; width:100%; height:100%; background:#ffffff; opacity:0;"></div>');
		$(".bodyContent").find(".superHider").animate({opacity:1}, 400);
	}else if($(".project").length != 0) {
		$(".project").delay(600).animate({height:0}, 700, "easeOutExpo", function(){
			window.location = transitionLink;
		});

		$(".bodyContent").append('<div class=superHider style="position:absolute; z-index:998; top:5px; left:0; width:100%; height:100%; background:#ffffff; opacity:0;"></div>');
		$(".bodyContent").find(".superHider").animate({opacity:1}, 400);
		$(".project-details").find(".loader").show();
		
	}else{

		// other pages
		
		$(".intro").delay(400).animate({height:0}, 500, "easeOutExpo", function(){
			window.location = transitionLink;
		});
		$(".content").append('<div class=superHider style="position:absolute; z-index:998; top:5px; left:0; width:100%; height:100%; background:#ffffff; opacity:0;"></div>');
		$(".content").find(".superHider").animate({opacity:1}, 400);
	}
}

function startOpenning(){	
	$("body").css("background", "#ffffff url(./images/body_bg.gif) 0px 0px repeat-x fixed")
	
	if ($(".showcaseContainer").length != 0) {
		
		if(pageID == 0 && $(".body").attr("rel") == 7){
			// index page
			$(".showcaseContainer").animate({
				height: "545px"
			}, 0, function(){
				$("html").animate({scrollTop: "545"}, 0);
				$("body").animate({scrollTop: "545"}, 0);
			});
			
			$("body").find(".superHider").delay(100).animate({
				opacity: 0
			}, 500, function(){
				initNavi();
				$("html	").find(".superHider").remove();
			});
			
		}else{
			// index page
			$(".showcaseContainer").delay(200).animate({
				height: "545px"
			}, 800, "easeInOutExpo");
			$("body").find(".superHider").delay(900).animate({
				opacity: 0
			}, 500, function(){
				initNavi();
				$("body").find(".superHider").remove();
			});
		}
	}else if($(".project").length != 0) {
		if($(".project").find("h2").html().length == 0) return;
		// project & product pages
		trace($(".project").find("h2").html(), $(".project").height());
		var direction = $(".project").attr("direction");
		var projectHeight = $(".project-details").height() + $(".project-descr").height();
		$(".project-details").find("loader").hide();
		if(direction){
			$(".project").css("z-index", "999").delay(100).animate({height: projectHeight}, 500, "easeInOutExpo");
			$(".project").find(".hider").delay(300).animate({opacity:0}, 300, function(){
				$(".project").find(".hider").remove();
			});
			$(".pictureContainer").delay(700).animate({left:0, opacity:1}, 500, "easeOutExpo");
			$("body").find(".superHider").remove();
			initNavi();
		}else{
			$(".project").css("height", "0px").css("z-index", "999").delay(200).animate({height: projectHeight}, 1000, "easeInOutExpo");
			$("body").find(".superHider").delay(1300).animate({opacity:0}, 500, function(){
				initNavi();
				$("body").find(".superHider").remove();
			});
			$(".pictureContainer").css("opacity", "1");
		}
	}else{
		// other pages
		$(".intro").delay(500).animate({height: "208px"}, 500, "easeInOutExpo");
		$("body").find(".superHider").delay(800).animate({opacity:0}, 500, function(){
			initNavi();
			$("body").find(".superHider").remove();
		});
	}
}

function initServices(){
	var totalContents;
	var contentsList = [];
	
	//loadContentsData();
	
	function displayContents(){
		$(".main").show();
		$("#lead0").html(contentsList[0].leading);
		$("#content0").html(contentsList[0].content);
		$("#lead1").html(contentsList[1].leading);
		$("#content1").html(contentsList[1].content);
		
		$("#lead0").find("p").addClass("lead0");
	}
	
	function loadContentsData(){
		var dataUrl;
		var id;
		
		if(isDebug){
			dataUrl = "ajax/news.json";
		}else{
			dataUrl	= "http://www.designroyale.com.au/_cms/cms-droyale/api/sections/show.json?id=6";
		}
		
		$.ajax({
			url: dataUrl,
			id: id,
			dataType: "json",
			success: function(contents){
				totalContents = contents.section.elements[0].element.length;
				for (var i = 0; i < totalContents; i++) {
					var content = contents.section.elements[0].element[i].blocks[0];
					var title = getValueByKey(content.block, "name", "Title");
					var leading = getValueByKey(content.block, "name", "Leading Contents");
					var content = getValueByKey(content.block, "name", "Contents");
					var newContent = {
						"title": title,
						"leading": leading,
						"content": content
					};
					contentsList[i] = newContent;
				}
				displayContents();
			}
		});
	}
}

function initNews(){
	// News Values
	var $contents = $(".content");
	var $newsList0 = $("#newslist0");
	var $newsList1 = $("#newslist1");
	var $newsList2 = $("#newslist2");
	
	var totalNews;
	var currentNewsNum = 0;
	var newsList = [];
	var timerID;
	var isAnimate = false;

	timerID = setInterval(checkToAdd, 1000);
	
	loadNewsData();
	loadCategoriesData();
	
	// Categories Values
	var $contents = $(".content");
	var $categories = $(".categories");
	var categoryList = [];
	var totalCategories = 0;
	var currentCategory = "";
	
	// Categories functions
	function loadCategoriesData(){
		var dataUrl;
		var id;
		
		if(isDebug){
			dataUrl = "ajax/news_category.json";
		}else{
			dataUrl	= "http://www.designroyale.com.au/_cms/cms-droyale/api/sections/show.json?id=2";
		}
		
		$.ajax({
			url: dataUrl,
			id: id,
			dataType: "json",
			success: function(news){
				totalCategories = news.section.elements[0].element.length;
				for (var i = 0; i < totalCategories; i++) {
					var currentNews = news.section.elements[0].element[i].blocks[0];
					var name = currentNews.block[0].value;
					
					if(name == "") continue;
					categoryList[i] = name;
				}
				addCategories();
			}
		});
	}
	
	function addCategories(){
		var html = "";
		
		html += '<li>'; 
	    html += '<a href="javascript:void(0)" tag="" class="selected">All</a>';
	    html += '</li>'; 
		
		for(var i = 0; i < categoryList.length; i++){
			html += '<li>'; 
	        html += '<a href="javascript:void(0)" tag="' + categoryList[i] + '" >' + categoryList[i] + '</a>';
	        html += '</li>'; 
		}
		
		$categories.append(html);
		$categories.find("a").click(categoryClickHandler);
	}
	
	function categoryClickHandler(event){
		currentCategory = $(event.currentTarget).attr("tag");
		$categories.find("a.selected").removeClass('selected');
		$(event.currentTarget).addClass('selected');
		
		// remove all news
		$(".newslist").find("li").stop().clearQueue().animate({opacity: 0}, 300, "easeOutExpo", function(){ 
			$(this).remove();
		});
		$(".body").stop().clearQueue().delay(310).queue(resetNews);
	}	
	
	function resetNews(){
		isAnimate = false;
		currentNewsNum = 0;
		
		// restart timer
		clearInterval(timerID);
		timerID = setInterval(checkToAdd, 500);
		
		// add 1 row
		addNews($newsList0);
		addNews($newsList1);
		addNews($newsList2);
		addNews($newsList0);
		addNews($newsList1);
		addNews($newsList2);
	}
	
	// News Functions
	function checkToAdd(){
		if(isAnimate) return;
		if(($(document).height() - $(window).height()) - $(window).scrollTop() > 20) return;
		
		addNews(getMinColum());
	}
	
	function getMinColum(){
		var listMaxHeight = 0;
		var listMinHeight = 99999;
		var $maxList;
		var $minList;
		
		// find the min length colum
		for(var i = 0; i < 3; i++){
			var h = parseInt($("#newslist" + i).height());
			
			if(h > listMaxHeight){
				listMaxHeight = h;
				$maxList = $("#newslist" + i);
			}
			if(h < listMinHeight){
				listMinHeight = h;
				$minList = $("#newslist" + i);
			}
		}
		return $minList;
	}
	
	function creatNewsHTML(data){	
		var html = "";
		
		html += '<div class="container">';
		
		if(data.imageURL != "")
			html += '<img class="picture" src="' + data.imageURL + '" alt="">';
		
		html += '<h2>' + data.title + '</h2>';
		html += '<p class="news-date">' + data.date + '</p>';
		
		html += '<span class="brief">' + data.brief + '</span>';
		//if (data.story) {
			html += '<span class="story expend">' + data.story + '</span>';
			html += '<span class="moreContainer"><p class="more" parentID="' + ("#news" + currentNewsNum) + '"><a href="javascript:void(0)">Keep Reading</a></p></span>';
		//}
		
		html += '<p class="social-links"><iframe src="http://www.facebook.com/plugins/like.php?href=' + baseHrefEscaped + '/' + data.friendlyName + '-n' + data.id + '.html&amp;layout=button_count&amp;show_faces=false&amp;width=105&amp;action=like&amp;colorscheme=light&amp;height=21" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:105px; height:21px;"></iframe></p>'
		
		/*
		html += '<p class="twitter">' + "tweet" + '</p><p class="twitter-logo">via <img src="../images/twitter-logo.png" alt="twitter"></p>';
		newNewsHTML += '<script type="text/javascript">tweetmeme_style = "compact";</script><script type="text/javascript" src="http://tweetmeme.com/i/scripts/button.js"></script>';
		*/
		
		html += '<div class="separator"><!-- --></div>';
		html += '</div>';
		
		return html;
	}
	
	function showNewNews($news){
		var $gray = $news.find(".gray");
		
		if($news.find(".more")){
			var $story = $news.find(".expend");
			var $container = $news.find(".container");
			$news.find(".more").click(moreClickHandler);
			$news.attr("initHeight",  $container.height());
			$story.attr("initHeight",  $story.height());
			$story.css("height", "0px");
		}
		
		$news.animate({height: $news.find(".container").height()}, 300, "easeOutExpo");
		$gray.animate({opacity: 0, height: $news.find(".container").height()}, 300, "easeOutExpo", function(){ 
			$(this).remove();
			$news.attr("foldHeight", $news.height());
		});
		
		$news.css('height', '');
		$gray.css('height', '');
	}
	
	function checkTags(){
		while(currentNewsNum != totalNews){
			var data = newsList[currentNewsNum];
			for(var i = 0; i < data.tagsList.length; i++){
				if(currentCategory == data.tagsList[i]){
					return true;
				}
			}
			currentNewsNum++;
		}
		return false;
	}
	
	function addNews($targetColum){
		var data;
		var html = "";
		
		if(currentCategory != ""){
			if(checkTags() == false){
				clearInterval(timerID);
				return;
			}
		}
		
		if (typeof newsList[currentNewsNum] == 'undefined') {
			return;
		}
		
		data = newsList[currentNewsNum];
		
		html += '<li id="news' + currentNewsNum + '" class="newsElement">';
		html += '</li>';
		
		if ($('li.newsElement' + data.id).length > 0) {
			currentNewsNum++;
			return;
		}
		
		$targetColum.append(html);
		
		var $currentNews = $("#news" + currentNewsNum);
		
		var $gray = createAddHider($currentNews, "gray");
		
		$gray.animate({
			height: 335 + data.imageHeight
		}, 600, "easeOutExpo", function(){ 
			var loaderY = (335 + data.imageHeight - 17) / 2;
			var loaderX = (240 - 17) / 2;
			$gray.append('<img src="images/loader_gray.gif" style="margin-top:'+ loaderY +'px; margin-left:' + loaderX + 'px;">');
		});
		
		$currentNews.animate({
			height: 335 + data.imageHeight
		}, 600, "easeOutExpo");
		
		$currentNews.addClass()
		for(var i = 0; i < data.tagsList.length; i++){
			$currentNews.addClass(data.tagsList[i]);
		}
		$currentNews.append(creatNewsHTML(data));
		
		var $picture = $currentNews.find(".picture");
		
		if ($picture.length) {
			$picture.load(function(){
				showNewNews($currentNews);
			});
		}
		else {
			showNewNews($currentNews);
		}
		
		currentNewsNum++;
		if(currentNewsNum == totalNews)
			clearInterval(timerID);
	}
	
	function moreClickHandler(event){
		var $li= $($(event.currentTarget).attr("parentID"));
		var $story = $li.find(".expend");
		var $brief = $li.find(".brief");
		var $more = $li.find(".more");
		var liInitHeight = $li.attr("initHeight");
		var storyInitHeight = $story.attr("initHeight");

//		$story.clearQueue().stop().animate({height: storyInitHeight}, 600, "easeOutExpo");
//		$li.clearQueue().stop().animate({height: liInitHeight}, 600, "easeOutExpo");
		
		$li.css('height', '');
		//$brief.clearQueue().stop().fadeOut(function() {
			//$story.clearQueue().stop().fadeIn();
		//});
//		$story.clearQueue().stop().show('slide', {direction: 'up'}, 600);
		$story.clearQueue().stop().animate({height: storyInitHeight}, 600, "easeOutExpo");
		
		$more.removeClass("more").addClass("close");
		$more.html('<a href="javascript:void(0)">Close</a>');
		$more.click(closeClickHandler);
	};
	
	function closeClickHandler(event){
		var $li= $($(event.currentTarget).attr("parentID"));
		var $story = $li.find(".expend");
		var $brief = $li.find(".brief");
		var $more = $li.find(".close");
		var foldHeight = $li.attr("foldHeight");
		
//		$story.clearQueue().stop().animate({height: "0px"}, 600, "easeOutExpo");
//		$li.clearQueue().stop().animate({height: foldHeight}, 600, "easeOutExpo");
		
		$li.css('height', '');
		///$story.clearQueue().stop().fadeOut(function() {
			//$brief.clearQueue().stop().fadeIn();
		//});
//		$story.clearQueue().stop().hide('slide', {direction: 'up'}, 600);
		$story.clearQueue().stop().animate({height: "0px"}, 600, "easeOutExpo");
		
		$more.removeClass("close").addClass("more");
		$more.html('<a href="javascript:void(0)">Keep Reading</a>');
		$more.click(moreClickHandler);
	}
	
	function createAddHider($parent, name){
		var $newHider;
		
		$parent.css('position', 'relative');
		$parent.append('<div class="' + name +'"></div>');
		
		$newHider = $parent.find("." + name);
		$newHider.height($parent.height());
		$newHider.width(parseInt($parent.width()) + 20 + "px");
		$newHider.css("top", "0px");
		$newHider.css("left", "0px");
		return $newHider;
	}
	
	function loadNewsData(){
		var dataUrl;
		var id;
		
		if(isDebug){
			dataUrl = "ajax/news.json";
		}else{
			dataUrl	= "http://www.designroyale.com.au/_cms/cms-droyale/api/sections/show.json?id=1";
		}
		
		$.ajax({
			url: dataUrl,
			id: id,
			dataType: "json",
			success: function(news){
				totalNews = news.section.elements[0].element.length;
				for (var i = 0; i < totalNews; i++) {
					var currentNews = news.section.elements[0].element[i].blocks[0];
					var id = news.section.elements[0].element[i].id;
					var friendlyName = news.section.elements[0].element[i].friendlyName;
					var title = currentNews.block[0].value;
					var date = currentNews.block[1].value;
					var story = currentNews.block[3].value;
					var brief = currentNews.block[5].value;
					var imageURL = "";
					var imageHeight = 0;
					if (currentNews.block[2].files[0].file != undefined) {
						imageURL = currentNews.block[2].files[0].file[0].uri;
						imageHeight = parseInt(currentNews.block[2].files[0].file[0].height);
					}
					
					var tagsList = [];
					
					if (currentNews.block[4].elements[0].element != undefined){
						var totalTags = currentNews.block[4].elements[0].element.length;
						for(var j = 0; j < totalTags; j++)
							tagsList[j] = currentNews.block[4].elements[0].element[j].name;
					}
					
					var newNews = {
						"id": id,
						"friendlyName": friendlyName,
						"title": title,
						"date": date,
						"story": story,
						"brief": brief,
						"imageURL": imageURL,
						"imageHeight": imageHeight,
						"tagsList": tagsList
					};
					
					newsList[i] = newNews;
				}
				
				addNews($newsList0);
				addNews($newsList1);
				addNews($newsList2);
				addNews($newsList0);
				addNews($newsList1);
				addNews($newsList2);
			}
		});
	}
}

function initIndexNews(){
	var $news = $(".news");
	var $more = $news.find(".more");
	var $hider = createAddHider($news.find(".story"), "hider");
	
	var totalNews;
	var newsList = [];
	var currentNewId = 0;
		
	loadNewsContents();
	$more.click(moreClickHandler);
	
	function moreClickHandler(){
		currentNewId++;
		
		if(currentNewId == totalNews) 
			currentNewId = 0;
		
		$hider.fadeIn(300, setNewsContents);
	}
	
	function setNewsContents(){
		var currentNews = newsList[currentNewId];
		
		var storyHTML = '<div class="story"><p class="contents">' + '<a href="javascript:startEnding(\'' + "news.php" + '\')">' + currentNews.title + '</a> - ' + currentNews.date + currentNews.story + '</div>';
		//$news.find(".contents").replaceWith(contentsHTML);
		$news.find(".story").replaceWith(storyHTML);
		$hider = createAddHider($news.find(".story"), "hider");
		$hider.fadeOut(600);
	}
	
	function loadNewsContents(){
		var dataUrl;
		var id;
		
		if(isDebug){
			dataUrl = "ajax/news.json";
		}else{
			dataUrl	= "http://www.designroyale.com.au/_cms/cms-droyale/api/sections/show.json?id=1";
		}
		
		$.ajax({
			url: dataUrl,
			id: id,
			dataType: "json",
			success: function(news){
				totalNews = news.section.elements[0].element.length;
				for (var i = 0; i < totalNews; i++) {
					var currentNews = news.section.elements[0].element[i].blocks[0];
					var title = currentNews.block[0].value;
					var date = currentNews.block[1].value;
					var story = currentNews.block[3].value;
					
					var newNews = {
						"title": title,
						"date": date,
						"story": story
					};
					newsList[i] = newNews;
				}
				
				setNewsContents();
			}
		});
	}
	
	function createAddHider($parent, name){
		var $newHider;
		
		$parent.css('position', 'relative');
		$parent.append('<div class="' + name +'"></div>');
		
		$newHider = $parent.find("." + name);
		$newHider.height($parent.height());
		$newHider.width(parseInt($parent.width()) + 20 + "px");
		$newHider.css("top", "0px");
		$newHider.css("left", "0px");
		return $newHider;
	}
}

function initTweets(){
	$(document).ready(function() {
		$(".tweet").tweet({
            username: "designroyale",
            join_text: "auto",
            avatar_size: 0,
            count: 1,
            auto_join_text_default: "", 
            auto_join_text_ed: "",
            auto_join_text_ing: "",
            auto_join_text_reply: "",
            auto_join_text_url: "",
            loading_text: "loading tweets..."
        });
	});
}

function initShowcase(){
	var $showcase = $(".showcase");
	var $project_loader = $(".project-loader");
	var $prev_white = $(".showcase-nav .prev .prev-white");
	var $prev_yellow = $(".showcase-nav .prev .prev-yellow");
	var $next_white = $(".showcase-nav .next .next-white");
	var $next_yellow = $(".showcase-nav .next .next-yellow");
	var pxLeftPos = "10px";
	var pxCenterPos = "60px";
	var pxRightPos = "100px";
	var overDelay = 80;
	var overTime = 300;
	var outTime = 250;
	var topInitHeight = $(".top").height();
	var bottomInitHeight = $(".bottom").height();
	
	var projectId = 1; // this needs to select the first project
	var totalProjects;
	var currentProject = 0;
	var projectsList = [];
	
	var loaderTimerID;
	var loaderCounter = 0;
	
	var isOpen = false;
	var isPlaying = false;
	
	var myPlayer;
	
	$(".image-nav li").css("marginLeft", "-29px");
	$(".label").mouseenter(showfullImage);
	
	if(false) {
		// on safari label loses focus and it's like mouseleave, so it closes automatically
		//$(".label").mouseleave(hidefullImage);
		$(".showcase").mouseleave(hidefullImage);
	}
	else {
		$(".label").mouseleave(hidefullImage);
	}
	
	$(".showcase-nav .prev").mouseenter(showcasePrevOverHandler).mouseleave(showcasePrevOutHandler);
	$(".showcase-nav .next").mouseenter(showcaseNextOverHandler).mouseleave(showcaseNextOutHandler);
		
	$(".playButton").click(playornot);
	
	// ajax project switching on home page
	$(".showcase-nav a, .image-nav a").click(activateLoader).focus(function(){
		$(this).blur();
	});
	
	$(".showcase-nav .prev").click(function(){
		currentProject--;
		if(currentProject < 0)
			currentProject = totalProjects - 1;
		activateLoader();
	})
	
	$(".showcase-nav .next").click(function(){
		currentProject++;
		if(currentProject == totalProjects)
			currentProject = 0;
		activateLoader();
	})
	
	$(".image-nav .prev").click(function(){
		$(".label").unbind('mouseleave');
		currentProject--;
		if(currentProject < 0)
			currentProject = totalProjects - 1;
		activateLoader();
	})
	
	$(".image-nav .next").click(function(){
		$(".label").unbind('mouseleave');
		currentProject++;
		if(currentProject == totalProjects)
			currentProject = 0;
		activateLoader();
	})
	
	loadProjectsData();
	activateLoader();
	
	function activateLoader(){
		clearInterval(loaderTimerID);
		loaderCounter = 0;
		loaderTimerID = setInterval(animateLoader, 30);
		$project_loader.stop().clearQueue().css("display", "block").animate({opacity: 1}, 300, function(){
			if(projectsList.length != 0)
				displayShowcase();
			$(".label").bind('mouseleave', hidefullImage);
		});
		$(".project-info").fadeOut();
	}
	
	function inactivateLoader(){
		$project_loader.delay(500).animate({opacity: 0}, 300, function(){$project_loader.css("display", "none"); clearInterval(loaderTimerID);});
	}
	
	function animateLoader(){
		var str = loaderCounter * 20 + "px";
		$project_loader.css("background-position", str + " " + str);
		loaderCounter++;
	}
		
	function displayShowcase(){
		
		var $projectInfo = $(".project-info");
		trace("currentProject", currentProject, isOpen);
		var data = projectsList[currentProject];
		
		if(isOpen && data.videoPath == ""){
			$(".feature-image").show();
			$(".background").show();
		}
		
		$(".video-js-box").remove();
		$(".playPause").css('opacity', 0);
		
		$(".playButton").click(function(event){
			startEnding(data.friendlyName + '-pp' + data.id + '.html');
		});

		$projectInfo.find("h3").html(data.title);
		$projectInfo.find(".detail").html(data.detailTitle);
		$projectInfo.find(".more").html('<a href="javascript:startEnding(\'' + data.friendlyName + '-pp' + data.id + '.html\')">View Project</a>');
		
		var $projectImage = $(".project-image");
		
		$projectImage.find(".left_color").css("background", data.backcolor_left);
		$projectImage.find(".right_color").css("background", data.backcolor_right);
		$projectImage.find(".picture").attr("src", data.image.uri);
		
		//!!! Preloader Control
		$projectImage.find(".picture").load(function(){
			$projectInfo.fadeIn();
			inactivateLoader();
		});
		
		
		
		/*
		if(data.videoPath != "") {
			
			var html = '';
			
			if(isSafari()) {
				
				html += '<div class="video-js-box" style="z-Index: 100">';
				html += '<video id="feature_video" class="video-js" width="940" height="547" preload="preload">';
				html += '<source src="' + data.videoPath + '.mp4" type=\'video/mp4; codecs="avc1.42E01E, mp4a.40.2"\'/>';
				html += '</video>';
				html += '</div>';
				
				$(".project-image").append(html);
				
			} else {
				
				html += '<div class="video-js-box">';
				html += '<div id="feature_video_object">';
				html += '<p>The video is not available.</p>';
				html += '</div>';
				html += '</div>';
				
				$(".project-image").append(html);
				
				var flashvars = {};
				var params = {
						play: (isIE() ? false : true),
						quality: 'high',
						bgcolor: '#FFFFFF',
						swliveconnect: true,
						allowscriptaccess: 'always'//,
						//wmode: 'transparent'
				};
				var attributes = {
						id: "feature_video_object",
						name: "feature_video_object"
				};
				swfobject.embedSWF(data.videoPath + ".swf", "feature_video_object", "940", "547", "9.0.0", "expressInstall.swf", flashvars, params, attributes);
			}
		    
			$(".video-js-box").hide();
			
			if(isOpen){
				$(".background").fadeOut();
				$(".feature-image").fadeOut();
			}
		}
		*/
	}
	
	function playVideo(){
		
		$(".video-js-box object").css('visibility', 'visible');
		$(".video-js-box").show();
		isPlaying = true;
		playFlashMovieObject("feature_video_object");
	}
	
	function pauseVideo(){
		
		$(".video-js-box object").css('visibility', 'hidden');
		$(".video-js-box").hide();
		isPlaying = false;
		stopFlashMovieObject("feature_video_object");
	}
	
	function playornot() {
		if(isPlaying) {
			pauseVideo();
		} else {
			playVideo();
		}
	}
	
	function loadProjectsData(){
		var dataUrl;
		var id;
		
		if(isDebug){
			dataUrl = "ajax/show_projects.json";
		}else{
			dataUrl	= "http://www.designroyale.com.au/_cms/cms-droyale/api/sections/show.json?id=4";
		}
		
		$.ajax({
			url: dataUrl,
			id: id,
			dataType: "json",
			success: function(projects){
				var count = 0;
				totalProjects = projects.section.elements[0].element.length;
				for (var i = 0; i < totalProjects; i++) {
					var projectElement = projects.section.elements[0].element[i];
					var project = projectElement.blocks[0];
					var friendlyName = projectElement.friendlyName;
					if ('Yes' === projects.section.elements[0].element[i].blocks[0].block[17].value) {
						var files = getValueByKey(project.block, "name", "Main Showcase Image");
						if (files[0].length != 0) {
							var image = files[0].file[0];
						}else
							continue;
						
						var backcolor_left = getValueByKey(project.block, "name", "Main Showcase Background Color Left");
						var backcolor_right = getValueByKey(project.block, "name", "Main Showcase Background Color Right");
						
						var title = getValueByKey(project.block, "name", "Title");
						var detailTitle = getValueByKey(project.block, "name", "Detail Title");
						var videoPath = getValueByKey(project.block, "name", "Main Showcase Video Link");
						var projectDetailsUrl = projectElement.friendlyName + '-p' + projectElement.id + '.html';
						
						var newProject = {
							"friendlyName": friendlyName,
							"title": title,
							"detailTitle": detailTitle,
							"image": image,
							"backcolor_left": backcolor_left,
							"backcolor_right": backcolor_right,
							"videoPath": videoPath,
							"id": i,
							"url": projectDetailsUrl
						};
						projectsList[count] = newProject;
						count++;
					}
				}
				totalProjects = count;
				displayShowcase();
			}
		});
	}

	function stopfullimageffects() {
		$(".playPause").clearQueue().stop();
		$(".top").clearQueue().stop();
		$(".bottom").clearQueue().stop();
		$(".bottom .content").clearQueue().stop();	
		$(".background").clearQueue().stop();
	}
	
	// showcase (show and hide)
	function showfullImage()
	{		
		var time = 600;
		var startDelay = 200;
		var startTime = 600;
		var eachDelay = 150;
		var eachTime = 600;
		
		$(".top").clearQueue().stop().delay(startDelay).animate({height: 0}, time, "easeInOutExpo", function() {
			if ($(".video-js-box").length != 0) {
				$(".playPause").animate({opacity: 1}, time, "easeInOutExpo");
			}
		});
		$(".bottom").clearQueue().stop().delay(startDelay).animate({height: 0}, startTime, "easeInOutExpo");
		$(".bottom .content").clearQueue().stop().delay(startDelay).animate({marginTop: -parseInt(bottomInitHeight)}, time, "easeInOutExpo");
		//$(".background").fadeOut();
		
		/* This is from previous version - I suggest delete queues and delays, and insert callbacks when needed */
		$(".image-nav li").each(function(i){
			var numChild = $(".image-nav li").length - 1;
			$(this).clearQueue().stop().delay(200 + startDelay + eachDelay * (numChild - i)).animate({marginLeft: "0"}, time, "easeOutExpo");
		});
		
		isOpen = true;
	}
	
	function hidefullImage()
	{	
		trace("hidefullImage");
		var time = 600;
		
		/* This is from previous version - I suggest delete queues and delays, and insert callbacks when needed */
		$(".image-nav li").each(function(i){
			$(this).clearQueue().stop().delay(60 * i).animate({marginLeft: "-29"}, 150, "easeOutExpo");
		});
		
		if ($(".video-js-box").length != 0) {
			if(isPlaying) {
				pauseVideo();
			}
			$(".playPause").css('opacity', 0);
		}
		
		$(".top").clearQueue().stop().delay(200).animate({height: topInitHeight}, time, "easeOutExpo");
		$(".bottom").clearQueue().stop().delay(200).animate({height: bottomInitHeight}, time, "easeOutExpo");
		$(".bottom .content").clearQueue().stop().delay(200).animate({marginTop: 0}, time, "easeOutExpo");
		//$(".background").fadeIn();
		
		isOpen = false;
	}
	
	function showcasePrevOverHandler()
	{
		$prev_white.clearQueue().stop().delay(overDelay).animate({left: pxLeftPos, opacity: 0}, overTime, "easeOutSine");
		$prev_yellow.clearQueue().stop().delay(overDelay).animate({opacity: 0, left: pxRightPos}, 10).animate({left: pxCenterPos, opacity: 1}, overTime, "easeOutSine");
	}
	
	function showcasePrevOutHandler()
	{
		$prev_white.clearQueue().stop().animate({left: pxLeftPos, opacity: 0}, 0).animate({opacity: 1, left: pxCenterPos}, 10);
		$prev_yellow.clearQueue().stop().animate({left: pxCenterPos, opacity: 1}, 0).animate({opacity: 0}, outTime);
	}
	
	function showcaseNextOverHandler()
	{
		$next_white.clearQueue().stop().delay(overDelay).animate({left: pxRightPos, opacity: 0}, overTime, "easeOutSine");
		$next_yellow.clearQueue().stop().delay(overDelay).animate({opacity: 0, left: pxLeftPos}, 10).animate({left: pxCenterPos, opacity: 1}, overTime, "easeOutSine");
	}
	
	function showcaseNextOutHandler()
	{
		$next_white.clearQueue().stop().animate({left: pxRightPos, opacity: 0}, 0).animate({opacity: 1, left: pxCenterPos}, 10);
		$next_yellow.clearQueue().stop().animate({left: pxCenterPos, opacity: 1}, 0).animate({opacity: 0}, outTime);
	}
}

// navigation (open and close)
function initNavi(){
	var navInitHeight = "143px"; // lm-edit /* 163 */
	var isCookie = false;
	var destination = 0;
	
	$(".body").css("top", "83px");
	
	$(".navi ul li").each(function(i){
		naviButtonManager($(this), i);
	});
	
	$(".navi").mouseenter(showNav);
	$(".navi p").click(showNav);
	$(".navi").mouseleave(hideNav);

	function naviButtonManager($this, id){
		var $div = $this.find("div");
		var $hover;
		var menuID = pageID;
		if(pageID == 0)
			menuID = 1;
		
		if(id == menuID - 1)
		{
			$this.find("div").addClass("selected");
		}else{
			$div.clone().addClass("hover").prependTo($div);
			$hover = $div.find(".hover");
			$hover.css("opacity", "0");
		}
	
		$div.mouseenter(function(){
			$hover.stop().animate({opacity: 1}, 500, "easeOutExpo");
		}).mouseleave(function(){
			$hover.stop().animate({opacity: 0}, 500, "easeOutExpo");
		}).click(function(){
			
			transitionLink = $div.find("a").attr("href");
			startEnding(transitionLink);
			hideNav();
			
			//superLinker(transitionLink, id + 1);
			//$.cookies.set('pageID', id + 1);
		});
		
		unactivateNavi();
	}
	
	function activateNavi(){
		$(".navi ul li").each(function(i){
			$(this).find(".hover").css("display", "block");
			//	$(this).find(".selected").css("display", "block");
		});
	}
	
	function unactivateNavi(){
		$(".navi ul li").each(function(i){
			$(this).find(".hover").css("display", "none");
		});
	}
	
	function showNav(){
		var startDelay = 250;
		var eachDelay = 60;
		var eachTime = 500;
		$(".navi ul").clearQueue().delay((isCookie)?0:startDelay).animate({height: navInitHeight}, (isCookie)?0:500, "easeOutExpo", activateNavi);
		$(".body").clearQueue().delay((isCookie)?0:startDelay).animate({top: (parseInt(navInitHeight) + 83) + "px"}, (isCookie)?0:500, "easeOutExpo");
		$(".navi p.navi-toggle a").css("color", "#ff34ab");
		$(".navi ul li").each(function(i){
			//$(this).find("div").clearQueue().stop().delay(startDelay + eachDelay * i).animate({opacity: 1}, eachTime).delay(0).animate({opacity: null}, 0);
		});
		isCookie = false;
	}
	
	function hideNav(){
		unactivateNavi();
		$(".navi ul").clearQueue().stop().animate({height: '0px'}, 350, "easeOutExpo");
		$(".body").clearQueue().stop().animate({top: "83px"}, 350, "easeOutExpo");
		$(".navi p.navi-toggle a").css("color", "#000000");
		isCookie = false;
	}
}

function initProjectShowcase(type){
	var $details = $(".project-details .content");
	var $description = $(".project-descr .content");
	var $imageContainer = $(".pictureContainer");
	
	var totalProjects = 0;
	var currentProject = parseInt($details.attr("rel"));
	//var projectsList = [];
	var project;
	
	var totalImages = 0;
	var currentImage = 0;
	var firendlyName = '';
	var friendlyNameNext = '';
	var friendlyNamePrev = '';
	
	var allowNextPrevFunctionality = true;
	var allowProjectSlideshow = false;
	var projectSlideshowDelay = 5000;
	var projectSlideshowTimeoutObject = null;
	
	$(".project-details-navi").find(".prev").click(prevProjectHandler);
	$(".project-details-navi").find(".next").click(nextProjectHandler);
	$(".project-details-navi").find(".close").click(closeProjectHandler);
	
	/* lm-edit */
	
	var $prevBtn = $(".project-details-navi").find(".prev");
	var $nextBtn = $(".project-details-navi").find(".next");
	var $closeBtn = $(".project-details-navi").find(".close");
	
	var $prevBtnWhite = $(".project-details-navi").find(".prev-white");
	var $prevBtnYellow = $(".project-details-navi").find(".prev-yellow");
	var $nextBtnWhite = $(".project-details-navi").find(".next-white");
	var $nextBtnYellow = $(".project-details-navi").find(".next-yellow");
	
	var pxProjectLeftPos = "-50px";
	var pxProjectCenterPos = "0px";
	var pxProjectRightPos = "50px";
	var overDelay = 80;
	var overTime = 300;
	var outTime = 250;

	$prevBtn.mouseenter(prevProjectOverHandler).mouseleave(prevProjectOutHandler);
	$nextBtn.mouseenter(nextProjectOverHandler).mouseleave(nextProjectOutHandler);
	$closeBtn.mouseenter(closeOverProjectHandler).mouseleave(closeOutProjectHandler);
	
	/* lm-edit */	
	
	loadProjectsData();
	
	/* lm-edit */

	function prevProjectOverHandler()
	{
		$prevBtnWhite.clearQueue().stop().delay(overDelay).animate({left: pxProjectLeftPos, opacity: 0}, overTime, "easeOutSine");
		$prevBtnYellow.clearQueue().stop().delay(overDelay).animate({opacity: 0, left: pxProjectRightPos}, 10).animate({left: pxProjectCenterPos, opacity: 1}, overTime, "easeOutSine");
	}

	function prevProjectOutHandler()
	{
		$prevBtnWhite.clearQueue().stop().animate({left: pxProjectRightPos, opacity: 0}, 10).animate({opacity: 1, left: pxProjectCenterPos}, 10);
		$prevBtnYellow.clearQueue().stop().animate({left: pxProjectCenterPos, opacity: 1}, 0).animate({opacity: 0}, outTime);
	}

	function nextProjectOverHandler()
	{
		$nextBtnWhite.clearQueue().stop().delay(overDelay).animate({left: pxProjectRightPos, opacity: 0}, overTime, "easeOutSine");
		$nextBtnYellow.clearQueue().stop().delay(overDelay).animate({opacity: 0, left: pxProjectLeftPos}, 10).animate({left: pxProjectCenterPos, opacity: 1}, overTime, "easeOutSine");
	}
	
	function nextProjectOutHandler()
	{
		$nextBtnWhite.clearQueue().stop().animate({left: pxProjectRightPos, opacity: 0}, 0).animate({opacity: 1, left: pxProjectCenterPos}, 10);
		$nextBtnYellow.clearQueue().stop().animate({left: pxProjectCenterPos, opacity: 1}, 0).animate({opacity: 0}, outTime);
	}
	
	// Animated project buttons			
	function closeOverProjectHandler()
	{
        $('.close-white').clearQueue().stop().delay(overDelay).animate({rotate: '90', opacity: 0}, {easing: 'easeOutQuad'}, {queue: false, duration: 100});
        $('.close-yellow').clearQueue().stop().delay(overDelay).animate({rotate: '90', opacity: 1}, {easing: 'easeOutQuad'}, {queue: false, duration: 100});			
	}

	function closeOutProjectHandler()
	{
        $('.close-white').clearQueue().stop().delay(overDelay).animate({rotate: '-90', opacity: 1}, {easing: 'easeOutQuad'}, {queue: false, duration: 50});
        $('.close-yellow').clearQueue().stop().delay(overDelay).animate({rotate: '-90', opacity: 0}, {easing: 'easeOutQuad'}, {queue: false, duration: 50});			
	}
	

	/* lm-edit */	

	function displayShowcase(){
		if (currentProject < 0 || currentProject > totalProjects - 1) 
			currentProject = 0;
		
		var data = project;

                /* I commented it because all this things are now loaded from PHP API
		$details.find("h2").html("").html(data.title);
		$details.find(".sub").html("").html(data.subTitle);
		$details.find(".more").html("").html('<a href="' + data.link + '" target="_blank">Launch Website</a>');
		$description.find(".lead").html(data.detailTitle);
		$description.find(".col1").find("span").html(data.detailLeft);
		$description.find(".col2").find("span").html(data.detailRight);


		totalImages = data.imagesList.length;
		*/
		
		var data = project.imagesList[currentImage];
		
		// image navi
		if (totalImages != 1) {
			var imageNaviHTML = "";
			imageNaviHTML += '<ul class="image-nav">';
			imageNaviHTML += '<li><a href="javascript:void(0)" class="prev">&laquo; Previous project</a></li>';
			imageNaviHTML += '<li><a href="javascript:void(0)" class="next">Next project &raquo;</a></li>';
			imageNaviHTML += '</ul>';
			$details.find(".pictureContainer").append(imageNaviHTML);
		}

		$(".image-nav li a").animate({opacity: 0}, 500, "easeOutExpo");
		if(allowNextPrevFunctionality) {
			$(".image-nav li").eq(0).mouseenter(prevImageOverHandler).mouseleave(prevImageOutHandler).click(prevImageHandler);
			$(".image-nav li").eq(1).mouseenter(nextImageOverHandler).mouseleave(nextImageOutHandler).click(nextImageHandler);
		}
		
		$details.find(".loader").css("top", $details.offset().top);
		trace($details.find(".loader"), $details.offset().top);
		
		startOpenning();
		
		// image
		displayImage('normal');
	}
	
	function projectImagesSlideshow() {
		
		if(allowProjectSlideshow) {
			nextImageHandlerSlideshow();
		}
	}
	
	function nextImageHandlerSlideshow(){
		
		currentImage++;
		if (currentImage == totalImages) 
			currentImage = 0;
		displayImage('slow');
	}
	
	function prevImageHandler(){
		
		allowProjectSlideshow = false;
		stopFlashMovieObject("projectvideofile");
		currentImage--;
		if (currentImage < 0) 
			currentImage = totalImages - 1;
		displayImage('normal');
	}
	
	function nextImageHandler(){
		
		allowProjectSlideshow = false;
		stopFlashMovieObject("projectvideofile");
		currentImage++;
		if (currentImage == totalImages) 
			currentImage = 0;
		displayImage('normal');
	}
	
	function nextImageOverHandler(){
		$(".image-nav .next").clearQueue().stop().animate({opacity: 1}, 1000, "easeOutExpo");
	}
	
	function nextImageOutHandler(){
		$(".image-nav .next").clearQueue().stop().animate({opacity: 0}, 500, "easeOutExpo");
	}
	
	function prevImageOverHandler(){
		$(".image-nav .prev").clearQueue().stop().animate({opacity: 1}, 1000, "easeOutExpo");
	}
	
	function prevImageOutHandler(){
		$(".image-nav .prev").clearQueue().stop().animate({opacity: 0}, 500, "easeOutExpo");
	}
	
	function prevProjectHandler(){
		currentProject--;
		if (currentProject < 0) 
			currentProject = totalProjects - 1;
//		startProjectEnding(((type == "PROJECT") ? "project.php?projectID=" : "product.php?projectID=") + currentProject, -1);
		startProjectEnding( friendlyNamePrev + ((type == "PROJECT") ? "-pp" : "-rr") + currentProject + ".html", -1);
	}
	
	function nextProjectHandler(){
		currentProject++;
		if (currentProject == totalProjects) 
			currentProject = 0;
//		startProjectEnding(((type == "PROJECT") ? "project.php?projectID=" : "product.php?projectID=") + currentProject, 1);
		startProjectEnding( friendlyNameNext + ((type == "PROJECT") ? "-pp" : "-rr") + currentProject + ".html", 1);
	}
	
	
	function startProjectEnding(link, direction){
		if (direction > 0) {
			$imageContainer.animate({
				left: -1200,
				opacity: 0
			}, 500, "easeInExpo", function() {
				$(".project").find(".loader").css('z-index', 10).fadeIn(400);
			});
			$.cookies.set("direction", "1");
			$.cookies.set("height", $(".project").height() + "");
		}
		else {
			$imageContainer.animate({
				left: 1200,
				opacity: 0
			}, 500, "easeInExpo", function() {
				$(".project").find(".loader").css('z-index', 10).fadeIn(400);
			});
			$.cookies.set("direction", "-1");
			$.cookies.set("height", $(".project").height() + "");
		}
		
		createAddHider($(".project"), "hider").css("opacity", 0).css("top", 1);
		
		$(".project").find(".hider").delay(200).animate({
			opacity: 1
		}, 300, function(){
			window.location = link;
		});
	}
	
	function createAddHider($parent, name){
		var $newHider;
		
		$parent.css('position', 'relative');
		$parent.append('<div class="' + name + '"></div>');
		
		$newHider = $parent.find("." + name);
		$newHider.height($parent.height());
		$newHider.width(parseInt($parent.width()) + 20 + "px");
		return $newHider;
	}
	
	
	function closeProjectHandler(){
		startEnding("index.php?go=project");
	}
	
	function displayImage(how){
		var data = project.imagesList[currentImage];
		
		if(data.vid && data.vid != '') {
			
			var html = '<div class="picture" style="width: 940px; height: 529px;">';
			var html_v;
			var html_y;
			
			var autoplay = (isIE() ? 0 : 1);
			
			if(data.uri != "") {
				html += '<a href="javascript:void(0)" class="picture_play"></a>';
				html += '<img src="' + data.uri + '" id="video_img">';
				html_v = '<object style="display: none;" class="picture_object" id="projectvideofile" width="940" height="529"><param name="allowfullscreen" value="false" /><param name="wmode" value="transparent"></param><param name="allowscriptaccess" value="always" /><param name="movie" value="' + data.vid + '&amp;server=vimeo.com&amp;show_title=0&amp;show_byline=0&amp;show_portrait=0&amp;color=FFFC0D&amp;fullscreen=1&amp;autoplay=1&amp;loop=0" /><embed name="projectvideofile" src="' + data.vid + '&amp;server=vimeo.com&amp;show_title=0&amp;show_byline=0&amp;show_portrait=0&amp;color=FFFC0D&amp;fullscreen=1&amp;autoplay=1&amp;loop=0" type="application/x-shockwave-flash" allowfullscreen="false" allowscriptaccess="always" width="940" height="529" wmode="transparent"></embed></object>';
				html_y = '<object style="display: none;" class="picture_object" id="projectvideofile" width="940" height="529"><param name="movie" value="' + data.vid + '?fs=1&amp;hl=en_US&amp;rel=0&amp;color1=0x3a3a3a&amp;color2=0x999999"></param><param name="wmode" value="transparent"></param><param name="allowFullScreen" value="false"></param><param name="allowscriptaccess" value="always"></param><embed name="projectvideofile" src="' + data.vid + '?fs=1&amp;hl=en_US&amp;rel=0&amp;color1=0x3a3a3a&amp;color2=0x999999" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="false" width="940" height="529" wmode="transparent"></embed></object>';
			}
			else {
				html_v = '<object class="picture_object" id="projectvideofile" width="940" height="529"><param name="movie" value="' + data.vid + '&amp;server=vimeo.com&amp;show_title=0&amp;show_byline=0&amp;show_portrait=0&amp;color=FFFC0D&amp;fullscreen=1&amp;autoplay=0&amp;loop=0" /><param name="allowfullscreen" value="false" /><param name="wmode" value="transparent"></param><param name="allowscriptaccess" value="always" /><embed name="projectvideofile" src="' + data.vid + '&amp;server=vimeo.com&amp;show_title=0&amp;show_byline=0&amp;show_portrait=0&amp;color=FFFC0D&amp;fullscreen=1&amp;autoplay=0&amp;loop=0" type="application/x-shockwave-flash" allowfullscreen="false" allowscriptaccess="always" width="940" height="529" wmode="transparent"></embed></object>';
				html_y = '<object class="picture_object" id="projectvideofile" width="940" height="529"><param name="movie" value="' + data.vid + '?fs=1&amp;hl=en_US&amp;rel=0&amp;color1=0x3a3a3a&amp;color2=0x999999"></param><param name="wmode" value="transparent"></param><param name="allowFullScreen" value="false"></param><param name="allowscriptaccess" value="always"></param><embed name="projectvideofile" src="' + data.vid + '?fs=1&amp;hl=en_US&amp;rel=0&amp;color1=0x3a3a3a&amp;color2=0x999999" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="false" width="940" height="529" wmode="transparent"></embed></object>';
			}
			
			if(data.vid.indexOf('vimeo.com') != -1) {
				html += html_v;
			}
			else {
				html += html_y;
			}
			
			html += '</div>';
			
			$imageContainer.prepend(html);
			
			if(data.uri != "") {
				$imageContainer.find("div.picture").click(function() {
					$(this).find('.picture_play').hide();
					$('#video_img').hide();
					$("#projectvideofile").show();
					tryPlayFlashMovieObject("projectvideofile");
					allowProjectSlideshow = false;
				});
			}
			else {
				
			}
			
			$imageContainer.find(".image-nav").find("li").eq(0).css('marginRight', '140px').css('width', '400px').css('height', '450px');
			$imageContainer.find(".image-nav").find("li").eq(1).css('width', '400px').css('height', '450px');
			
			var $image = $imageContainer.find(".picture");
			var $loader = $(".project-details").find(".loader");
			
			if(how == 'normal') {
				//$loader.clearQueue().hide();
				//$loader.fadeIn();
				$image.hide();
			}
			else {
				//$loader.clearQueue().hide();
				//$loader.fadeIn();
				$image.hide();
			}
			
			if(data.uri != "") {
				$imageContainer.find("#video_img").load(function(){
					$loader.clearQueue().hide();
					$imageContainer.find(".picture").eq(1).remove();
					$imageContainer.find('.picture_play').css('display', 'block');
					$image.fadeIn(( how == 'normal' ? 400 : 800), function() {
						setTimeout(projectImagesSlideshow, projectSlideshowDelay);
					});
				});
			}
			else {
				$loader.clearQueue().hide();
				$imageContainer.find(".picture").eq(1).remove();
				$imageContainer.find('.picture_play').css('display', 'block');
				$image.show();
				$loader.fadeIn();
				setTimeout(projectImagesSlideshow, projectSlideshowDelay);
			}
		}
		else {
			$imageContainer.prepend('<img class="picture" src="' + data.uri + '" id=' + currentImage + '>');
			
			$imageContainer.find(".image-nav").find("li").eq(0).css('marginRight', '0px').css('width', '470px').css('height', '528px');
			$imageContainer.find(".image-nav").find("li").eq(1).css('width', '470px').css('height', '528px');
			
			var $image = $imageContainer.find(".picture")
			var $loader = $(".project-details").find(".loader");
			
			if(how == 'normal') {
				//$loader.clearQueue().hide();
				//$loader.fadeIn();
				$image.hide();
			}
			else {
				//$loader.clearQueue().hide();
				//$loader.fadeIn();
				$image.hide();
			}
			
			$image.load(function(){
				$loader.clearQueue().hide();
				$imageContainer.find(".picture").eq(1).remove();
				$(this).fadeIn(( how == 'normal' ? 400 : 800), function() {
					$loader.fadeIn();
					setTimeout(projectImagesSlideshow, projectSlideshowDelay);
				});
			});
		}
	}
	
	function loadProjectsData(){

                /*
                var dataUrl;
		var id;
		
		if(isDebug)
			dataUrl = (type == "PROJECT")? "ajax/show_projects.json":"ajax/show_products.json";
		else
			dataUrl	= (type == "PROJECT")? "http://www.designroyale.com.au/_cms/cms-droyale/api/sections/show.json?id=4":"http://www.designroyale.com.au/_cms/cms-droyale/api/sections/show.json?id=5";	
		
		$.ajax({
			url: dataUrl,
			id: id,
			dataType: "json",
			success: function(projects){
				totalProjects = projects.section.elements[0].element.length;
				if (currentProject < 0 || currentProject > totalProjects - 1)
					currentProject = 0;
				
				var projectData = projects.section.elements[0].element[currentProject].blocks[0];
				var title = getValueByKey(projectData.block, "name", "Title"); 
				var subTitle = getValueByKey(projectData.block, "name", "Subtitle");
				var detailTitle = getValueByKey(projectData.block, "name", "Detail Title");
				var detailLeftColumn = getValueByKey(projectData.block, "name", "Detail Left Column");
				var detailRightColumn = getValueByKey(projectData.block, "name", "Detail Right Column");
				var link = getValueByKey(projectData.block, "name", "Launch Website Link");
				var detailShowcaseImages = [];
				
				var files = getValueByKey(projectData.block, "name", "Detail Showcase Images");
				var totalImages = files[0].file.length;
				if (totalImages != 0) {
					for (var j = 0; j < totalImages; j++) {
						detailShowcaseImages[j] = files[0].file[j];
					}
				}
				
				var newProject = {
					"title": title,
					"subTitle": subTitle,
					"detailTitle": detailTitle,
					"detailLeft": detailLeftColumn,
					"detailRight": detailRightColumn,
					"imagesList": detailShowcaseImages,
					"link": link
				};
				
				project = newProject;
				
				displayShowcase();
			}
		});
		
        */

        // lines added after commenting above lines

		var video = $("#videoLink").attr('value');
		friendlyName = $("#friendlyName").attr('value');
		friendlyNameNext = $("#friendlyNameNext").attr('value');
		friendlyNamePrev = $("#friendlyNamePrev").attr('value');
		currentProject = parseInt($("#currentProject").attr('value'));
		totalProjects = parseInt($("#totalProjects").attr('value'));;
		
		if (currentProject < 0 || currentProject > totalProjects - 1)
			currentProject = 0;
		
        var detailShowcaseImages = [];
        var imgs = $("#showcase_images").find("img");
        totalImages = imgs.length;
        
        var x = 0;
        var j = 0;
        if(video && video != "") {
        	detailShowcaseImages[0] = [];
        	detailShowcaseImages[0].vid = video;
        	
        	var alt = $(imgs[x]).attr('alt');
        	if(alt.indexOf('imgv_') == 0) {
        		detailShowcaseImages[0].uri = $(imgs[x]).attr('src');
            	detailShowcaseImages[0].alt = $(imgs[x]).attr('alt');
            	x = 1;
            	j = 1;
        	}
        	else {
        		detailShowcaseImages[0].uri = '';
            	detailShowcaseImages[0].alt = '';
            	totalImages++;
            	x = 0;
            	j = 1;
        	}
        	allowProjectSlideshow = false;
        	allowNextPrevFunctionality = false;
        }
        else if(totalImages <= 1) {
        	allowProjectSlideshow = false;
        }
        else {
        	allowProjectSlideshow = true;
        }
        
        if (totalImages != 0) {
            for (j; j < totalImages; j++) {
            	detailShowcaseImages[j] = [];
                detailShowcaseImages[j].uri = $(imgs[x]).attr('src');
                detailShowcaseImages[j].alt = $(imgs[x]).attr('alt');
                x++;
            }
        }

        var newProject = {
            "imagesList": detailShowcaseImages,
            "videoLink": video 
        };

        project = newProject;
        
        displayShowcase();
        
        // END
	}
}

function initInterview(){
	var $interview;
	var $interviewMore;
	var $currentContent;
	
	var currentInterview = 0;
	var totalInterviews = 0;

	
	$interview = $("#interview");
	$interviewMore = $("#interview p.more");
	$interviewPicture = $("#interview img.profile-pic");
	
	totalInterviews = $interview.find("div.contents").length;
	
	$interview.find("div.contents").filter(function(index){
		return index != currentInterview;
	}).css("display", "none");
	
	var $container = $interview.find(".container")
	var $content = $interview.find(".content");
	
	// create hider
	$interviewHider = createAddHider($container);
	$interviewHider.css("height", $content.height());
	$interviewHider.css("width", $content.width());
	
	$interviewMore.click(function(){
		$interviewHider.css("display", "block");
		$interviewHider.stop();
		$interviewHider.clearQueue();
		$interviewHider.animate({opacity: 1}, 500);
		$interviewHider.delay(300);
		$interviewHider.animate({opacity: 0}, 300, function(){$interviewHider.css("display", "none");});

		$container.stop();
		$container.clearQueue();
		$container.delay(500);
		$container.queue(swapInterviewContents);
		
		$interviewPicture.stop();
		$interviewPicture.clearQueue();
		$interviewPicture.animate({opacity: 0}, 500);
		$interviewPicture.delay(300);
		$interviewPicture.animate({opacity: 1}, 300);
	});
	
	function swapInterviewContents(){
		currentInterview =  currentInterview + 1;
		if(currentInterview == totalInterviews) currentInterview = 0;
		
		$interviewPicture.css('display', 'none');
		$("img#profile-pic-" + currentInterview).css('display', 'block');
		
		$interview.find("div.contents").filter(function(index){
			return index != currentInterview;
		}).css("display", "none");
		
		$currentContent = $("#content" + currentInterview);
		$currentContent.css("display", "block");
	}
	
	function createAddHider($parent){
		var newHider;
		
		$parent.append('<div class="hider"></div>');
		//$parent.css('position', 'relative');
		
		var background = $parent.css("background");
		if (background == null) {
			background = "#ffffff";
		}
		newHider = $parent.find(".hider")
		newHider.css("background", background);
		
		return newHider;
	}
}

function get_images_from_flickr() {
	$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?id=54941453@N00&format=json&jsoncallback=?", function(data) {
		rows = ''
		html = ''
		$.each(data.items.slice(0, 8), function(i, dataItem) {
			html += '<li><a target="_blank" class="picture-fancybox" title="' + dataItem.title + '" href="' + dataItem.media.m.replace("_m.", ".") + '" rel="group"><img src="' + dataItem.media.m + '"></a></li>'
	    });
 		$(".pics").append(html);
        resize_images();
        $("a.picture-fancybox").fancybox();
      })
    }
 
function resize_images() {
	$('.pics li img').each(function(i, img) {
		x_axis = Math.abs(($(img).width() - 85) / 2)
        y_axis = Math.abs(($(img).height() - 80) / 2)
        $(img).crop({ x: x_axis.toString(), y: y_axis.toString(), height: 80, width: 85 })
    })
}

function getLocalOffset($parent, $target){
	var offset = {left:0, top:0};
	offset.left = $target.leftOffset - $parent.leftOffset;
	offset.top = $target.topOffset - $parent.topOffset;
	return offset;
}

// small over buttons
function generalButtonManager($this, overTime, outTime){
	$this.append('<div class="hover">over</div>');

	var $hover = $this.find(".hover");
	$hover.css("position", "absolute");
	$hover.css("opacity", "0");
	$hover.css("cursor", "pointer");
	
	$hover.mouseenter(function(){
		if (!$(this).hasClass('activate')) {
			$(this).stop().animate({opacity: 1}, overTime);
		}
	}).mouseleave(function(){
		if (!$(this).hasClass('activate')) {
			$(this).stop().animate({
				opacity: 0
			}, outTime);
		}
	}).click(function(){
		window.open($this.find("a").attr("href"));
	});
}

function initGeneralButtons(){
	generalButtonManager($(".facebook"), 300, 150);
	generalButtonManager($(".twitter"), 300, 150);
	generalButtonManager($(".flickr"), 300, 150);
	generalButtonManager($(".linkedin"), 300, 150);
	generalButtonManager($(".bookmark"), 300, 150);
}

// showcase navi (prev and next)

function showcasePrevOverHandler(){
	$prev_white.clearQueue().stop().delay(overDelay).animate({left: pxLeftPos, opacity: 0}, overTime, "easeOutSine");
	$prev_yellow.clearQueue().stop().delay(overDelay).animate({opacity: 0, left: pxRightPos}, 10).animate({left: pxCenterPos, opacity: 1}, overTime, "easeOutSine");
}

function showcasePrevOutHandler(){
	$prev_white.clearQueue().stop().animate({left: pxLeftPos, opacity: 0}, 0).animate({opacity: 1, left: pxCenterPos}, 10);
	$prev_yellow.clearQueue().stop().animate({left: pxCenterPos, opacity: 1}, 0).animate({opacity: 0}, outTime);
}

function showcaseNextOverHandler(){
	$next_white.clearQueue().stop().delay(overDelay).animate({left: pxRightPos, opacity: 0}, overTime, "easeOutSine");
	$next_yellow.clearQueue().stop().delay(overDelay).animate({opacity: 0, left: pxLeftPos}, 10).animate({left: pxCenterPos, opacity: 1}, overTime, "easeOutSine");
}

function showcaseNextOutHandler(){
	$next_white.clearQueue().stop().animate({left: pxRightPos, opacity: 0}, 0).animate({opacity: 1, left: pxCenterPos}, 10);
	$next_yellow.clearQueue().stop().animate({left: pxCenterPos, opacity: 1}, 0).animate({opacity: 0}, outTime);
}

// project containe swap animation (grid or list)
function initProjectView(){
	var $projectHider;
	var $projectList = $(".projectContainer").find(".project-list");
	var $projectGrid = $(".projectContainer").find(".project-grid");
	var currentProject = ""; 
	var isCookie = false;
	
	$("a.grid").addClass("active");
	$("#grid-view li").find(".black").css("opacity", "0");
	
	// create hider
	$projectHider = createAddHider($(".projectContainer"));
	
	// set hider
	$projectHider.css("height", "90%");

	// cookie
	if($.cookies.test()){
		isCookie = true;
		if($.cookies.get('projectView')=='LIST'){
			listClickHandler();
		}else{
			gridClickHandler();
		}
		isCookie = false;
	}
	
	dataDisplay();
	
	function createAddHider($parent){
		var newHider;
		
		$parent.append('<div class="hider"></div>');
		//$parent.css('position', 'relative');
		
		var background = $parent.css("background");
		if (background == null) {
			background = "#ffffff";
		}
		newHider = $parent.find(".hider")
		newHider.css("background", background);
		
		return newHider;
	}
	
	function switchObjs($hide, $show){
		$hide.css("display", "none");
		$show.css("display", "block");
	}
	
	$(".view-switch .list").click(listClickHandler);
	$(".view-switch .grid").click(gridClickHandler);
	
	function listClickHandler(){
		$(".view-switch .list").addClass("active");
		$(".view-switch .grid").removeClass("active");
		
		if(currentProject == "list") return;
		currentProject = "list";
		
		var contentHeight = parseInt($("#list-view").height()) + 143;
		
		$projectHider.css("display", "block").stop().clearQueue().animate({opacity: 1}, (isCookie)?0:500, 
		function(){
			switchObjs($projectGrid, $projectList);
		}).animate({opacity: 0}, 300, function(){$projectHider.css("display", "none")});
		
		$(".projectContainer").delay(300).animate({height: contentHeight + "px"}, (isCookie)?0:300);
		
		$.cookies.set('projectView', 'LIST');
	}
	
	function gridClickHandler(){
		$(".view-switch .grid").addClass("active");
		$(".view-switch .list").removeClass("active");
		
		var contentHeight = parseInt($("#grid-view").height()) + 103;
		trace("///////////", contentHeight);
		
		if(currentProject == "grid") return;
		currentProject = "grid";
		
		$projectHider.css("display", "block").stop().clearQueue().animate({opacity: 1}, (isCookie)?0:500, 
		function(){
			switchObjs($projectList, $projectGrid);
		}).animate({opacity: 0}, 300, function(){$projectHider.css("display", "none")});
		
		$(".projectContainer").delay((isCookie)?0:300).animate({height: contentHeight + "px"}, (isCookie)?0:300);
		
		$.cookies.set('projectView','GRID');
	}
	
	function dataDisplay(){
		$("#grid-view li").each(function(i){
			var temp = $(this);
			
			var link = $(this).find(".more").find("a").attr('href');
			
			$(this).find(".imageHolder").click(function(){
				projectLinkClickHandler(i, link);
			});
			$(this).find(".more").click(function(){
				projectLinkClickHandler(i, link);
			});
			$(this).find("h2").click(function(){
				projectLinkClickHandler(i, link);
			});
			
			$(this).mouseenter(function(){
				temp.find(".thumbBg").stop().clearQueue().animate({
					opacity: 1
				}, 200);
			});
			
			$(this).mouseleave(function(){
				temp.find(".thumbBg").stop().clearQueue().animate({
					opacity: 0
				}, 200);
			});
			
			$(this).find(".imageHolder").mouseenter(function(){
				temp.find(".black").stop().clearQueue().animate({
					opacity: 0.3
				}, 200);
				temp.find(".hotcorner").stop().clearQueue().show().animate({
					left: 0
				}, 200, "easeOutExpo");
			});
			
			$(this).find(".imageHolder").mouseleave(function(){
				temp.find(".black").stop().clearQueue().animate({
					opacity: 0
				}, 200);
				temp.find(".hotcorner").stop().clearQueue().animate({
					left: -70
				}, 200, "easeOutExpo");
			});
		});
		
		$("#list-view li").each(function(i){
			
			var link = $(this).find(".view").find("a").attr('href');
			
			$(this).find(".project-thumb").click(function(){
				projectLinkClickHandler(i, link);
			});
			$(this).find(".view").click(function(){
				projectLinkClickHandler(i, link);
			});
			$(this).find("h2").click(function(){
				projectLinkClickHandler(i, link);
			});
		});
		
		$("#product-view li").each(function(i){
			
			var link = $(this).find(".view").find("a").attr('href');
			
			$(this).find(".view").click(function(){
				productLinkClickHandler(i, link);
			});
			$(this).find("img").click(function(){
				productLinkClickHandler(i, link);
			});
			$(this).find("h2").click(function(){
				productLinkClickHandler(i, link);
			});
		});
		
		$("#list-view li p.view a").click(projectLinkClickHandlerFriendly);
		function projectLinkClickHandlerFriendly() {
			startEnding($(this).attr('href'));
			return false;
		}
		
		function projectLinkClickHandler(i, link){
			if(link && link != "") {
				startEnding(link);
			}
			else {
				startEnding("project.php?projectID=" + i);
			}
		};
		
		function productLinkClickHandler(i, link){
			if(link && link != "") {
				startEnding(link);
			}
			else {
				startEnding("product.php?projectID=" + i);
			}
		};
	}
	/*
	var totalProjects;
	var projectsList = [];
	var productsList = [];
	loadProjectsData("PROJECT");
	loadProjectsData("PRODUCT");

	function loadProjectsData(type){
		var dataUrl;
		var id;
		
		if(isDebug)
			dataUrl = (type == "PROJECT")? "ajax/show_projects.json":"ajax/show_products.json";
		else
			dataUrl	= (type == "PROJECT")? "http://www.designroyale.com.au/_cms/cms-droyale/api/sections/show.json?id=4":"http://www.designroyale.com.au/_cms/cms-droyale/api/sections/show.json?id=5";	
		
		$.ajax({
			url: dataUrl,	
			id: id,
			dataType: "json",
			success: function(projects){
				totalProjects = projects.section.elements[0].element.length;
				for (var i = 0; i < totalProjects; i++) {
					var project = projects.section.elements[0].element[i].blocks[0];
					var title = getValueByKey(project.block, "name", "Title");
					var subTitle = getValueByKey(project.block, "name", "Subtitle");
					var detailTitle = getValueByKey(project.block, "name", "Detail Title");
					var detailLeftColumn = getValueByKey(project.block, "name", "Detail Left Column");
					var detailRightColumn = getValueByKey(project.block, "name", "Detail Right Column");
					var link = getValueByKey(project.block, "name", "Launch Website Link");
					var date = getValueByKey(project.block, "name", "Date");
					var detailShowcaseImages = [];
					
					var files = getValueByKey(project.block, "name", "Detail Showcase Images");
					var totalImages = files.length;
					if (totalImages != 0) {
						for(var j = 0; j < totalImages; j++){
							detailShowcaseImages[j] = files[0].file[j];
						}
					}
					
					var newProject = {
						"title": title,
						"subTitle": subTitle,
						"detailTitle": detailTitle,
						"detailLeft": detailLeftColumn,
						"detailRight": detailRightColumn,
						"imagesList": detailShowcaseImages,
						"link": link,
						"date": date
					};
					
					if(type == "PROJECT")
						projectsList[i] = newProject;
					else
						productsList[i] = newProject;
						
				}
				dataDisplay();
			}
		});
	}
	
	/* video thumbnail
	
	var videoPlayers = [];
	
	$('ul.project-grid li.video').each(function(){
		
		var container = $(this).children('a.project-thumb');
		var id = $(this).find('img').attr('id');
		var videoId = 'video_' + videoPlayers.length;
		
		$(this).children('a.project-thumb').replaceWith('<div class="project-thumb video-js-box"><video id="' + videoId + '" class="video-js" width="220" height="175" poster="images/temp/projects-th/' + id + '.jpg" controls preload><source src="video/' + id + '.mp4" type=\'video/mp4; codecs="avc1.42E01E, mp4a.40.2"\'><source src="video/' + id + '.webm" type=\'video/webm; codecs="vp8, vorbis"\'><source src="video/' + id + '.ogg" type=\'video/ogg; codecs="theora, vorbis"\'></div>');
		
		var myPlayer = VideoJS.setup(videoId);
		$(this).hover(function(){
		    myPlayer.play();
		}, function(){
		    myPlayer.pause();
		})
		
		videoPlayers[videoPlayers.length] = myPlayer;
	})
	*/
}

function stopFlashMovieObject(movieName) {
	var obj = getFlashMovieObject(movieName);
	if(obj) {
		obj.StopPlay();
	}
}

function playFlashMovieObject(movieName) {
	var obj = getFlashMovieObject(movieName);
	if(obj) {
		return obj.Play();
	}
	return false;
}

function tryPlayFlashMovieObject(movieName) {
	
	if(!playFlashMovieObject(movieName)) {
		var delay = function() { tryPlayFlashMovieObject(movieName); };
		setTimeout(delay, 1000);
	}
}

function rewindFlashMovieObject(movieName) {
	var obj = getFlashMovieObject(movieName);
	if(obj) {
		obj.Rewind();
	}
}

function frameFlashMovieObject(movieName, frameNum) {
	var obj = getFlashMovieObject(movieName);
	if(obj) {
		obj.GotoFrame(frameNum);
	}
}

function getFlashMovieObject(movieName) {
	
	function getFlashMovieObject(movieName)
	{
	  if (window.document[movieName]) 
	  {
	      return window.document[movieName];
	  }
	  if (navigator.appName.indexOf("Microsoft Internet")==-1)
	  {
	    if (document.embeds && document.embeds[movieName])
	      return document.embeds[movieName]; 
	  }
	  else // if (navigator.appName.indexOf("Microsoft Internet")!=-1)
	  {
	    return document.getElementById(movieName);
	  }
	}
	
	//return swfobject.getObjectById(movieName);
}

function ourworkscroll() {
	
	$("html").animate({scrollTop: "545"}, 1000, "easeInOutExpo");
	$("body").animate({scrollTop: "545"}, 1000, "easeInOutExpo");
}

function isSafari() {
	if(navigator && navigator.userAgent) {
		var an = navigator.userAgent.toLowerCase(); 
		if(an.indexOf('safari') != -1 && an.indexOf('chrome') == -1) {
			return true;
		}
	}
	return false;
}

function isIE() {
	if(navigator && navigator.appName) {
		var an = navigator.appName.toLowerCase(); 
		if(an.indexOf('internet explorer') != -1) {
			return true;
		}
	}
	return false;
}

function isChrome() {
	if(navigator && navigator.userAgent) {
		var an = navigator.userAgent.toLowerCase(); 
		if(an.indexOf('chrome') != -1) {
			return true;
		}
	}
	return false;
}

function isFirefox() {
	if(navigator && navigator.userAgent) {
		var an = navigator.userAgent.toLowerCase(); 
		if(an.indexOf('firefox') != -1) {
			return true;
		}
	}
	return false;
}

function isOpera() {
	if(navigator && navigator.appName) {
		var an = navigator.appName.toLowerCase(); 
		if(an.indexOf('opera') != -1) {
			return true;
		}
	}
	return false;
}

function myScrollTop(i) {
	if(isChrome()) {
		$(window).scrollTop(i);
	}
	else {
		$(document).scrollTop(i);
	}
}

$('div.social-list').hover(function () {
	$(this).css('cursor', 'pointer');
}).click(function () {
	document.location.href = 'social';
	return false;
});


