raydash 0.5.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Readme +1 -1
- data/lib/app/helpers/raydash_helper.rb +5 -3
- data/lib/generators/raydash/install_generator.rb +0 -8
- data/lib/raydash/version.rb +1 -1
- data/lib/raydash.rb +78 -16
- data/raydash.gemspec +2 -2
- metadata +5 -8
- data/lib/generators/templates/ClientBox.swf +0 -0
- data/lib/generators/templates/RecordBox.swf +0 -0
- data/lib/generators/templates/swfobject.js +0 -4
data/Readme
CHANGED
@@ -89,7 +89,7 @@ Adds an flash element that plays video and sound
|
|
89
89
|
- height The height of the videostream
|
90
90
|
- width The width of the videostream
|
91
91
|
- videoOff if "1", it will hide the video, and only stream audio.
|
92
|
-
=== videorecord(token,id,height="640",width="480",hideCamera="0")
|
92
|
+
=== videorecord(token,id,height="640",width="480",hideCamera="0",videoOff="0")
|
93
93
|
Adds a flash element to record and send to the server video and sound
|
94
94
|
|
95
95
|
- token The token for the stream. You can generate a new with Raydash.getToken(), or it is done automatically in models generated with "rails g raydash:model".
|
@@ -1,13 +1,15 @@
|
|
1
1
|
module RaydashHelper
|
2
|
+
|
2
3
|
def raydash_header()
|
3
|
-
javascript_include_tag 'swfobject
|
4
|
+
javascript_include_tag Raydash.getAssetUrl() + '/api/2/swfobject/1'
|
4
5
|
end
|
6
|
+
|
5
7
|
# This elements plays video/audio from the server
|
6
8
|
def videostream(token, id,width="640",height="480",videoOff="0")
|
7
|
-
javascript_tag("swfobject.embedSWF(\"/
|
9
|
+
javascript_tag("swfobject.embedSWF(\"" + Raydash.getAssetUrl() + "/api/2/clientbox/1\", \"#{id}\",#{width},#{height},\"9.0.0\",\"http://www.adobe.com/products/flashplayer/download\",{autostart:1,token:\"#{token}\",videoOff:\"#{videoOff}\"});") + content_tag(:div, "Video stream not available", :id => id)
|
8
10
|
end
|
9
11
|
# This element sends video/audio to the server
|
10
12
|
def videorecord(token, id,width="640",height="480",hideCamera="0",videoOff="0")
|
11
|
-
javascript_tag("function setSize(width,height,id) {if(id==undefined){id=\"#{id}\"; }document.getElementById(id).width=width;document.getElementById(id).height=height;} swfobject.embedSWF(\"/
|
13
|
+
javascript_tag("function setSize(width,height,id) {if(id==undefined){id=\"#{id}\"; }document.getElementById(id).width=width;document.getElementById(id).height=height;}\n" + "\nvar server_version=2;\nvar version=swfobject.getFlashPlayerVersion();if(version.major<10 || version.minor<3) {server_version=1;}" + "else {server_version=2;}\nswfobject.embedSWF(\"" + Raydash.getAssetUrl() + "/api/2/recordbox/\" + server_version , \"#{id}\",#{width},#{height},\"9.0.0\",\"http://www.adobe.com/products/flashplayer/download\",{hideControls:1,hideCamera:\"#{hideCamera}\",autostart:1,token:\"#{token}\",videoOff:\"#{videoOff}\"});" ) + content_tag(:div, "Video stream not available", :id => id)
|
12
14
|
end
|
13
15
|
end
|
@@ -8,14 +8,6 @@ module Raydash
|
|
8
8
|
def copy_initializer
|
9
9
|
template "raydash.rb", "config/initializers/raydash.rb"
|
10
10
|
end
|
11
|
-
def copy_flash
|
12
|
-
empty_directory "public/swfs/raydash"
|
13
|
-
copy_file "ClientBox.swf", "public/swfs/raydash/ClientBox.swf"
|
14
|
-
copy_file "RecordBox.swf", "public/swfs/raydash/RecordBox.swf"
|
15
|
-
end
|
16
|
-
def copy_flash_javascript
|
17
|
-
copy_file "swfobject.js", "public/javascripts/swfobject.js"
|
18
|
-
end
|
19
11
|
def show_readme
|
20
12
|
readme "README" if behavior == :invoke
|
21
13
|
end
|
data/lib/raydash/version.rb
CHANGED
data/lib/raydash.rb
CHANGED
@@ -2,55 +2,117 @@ require 'net/http'
|
|
2
2
|
require 'app/helpers/raydash_helper'
|
3
3
|
require 'json'
|
4
4
|
module Raydash
|
5
|
-
RAYDASH_HTTP_SERVER = "
|
5
|
+
RAYDASH_HTTP_SERVER = "localhost"
|
6
6
|
RAYDASH_HTTP_PORT = 8080
|
7
|
+
CLIENTBOX_VERSION = "1"
|
8
|
+
RECORDBOX_VERSION = "2"
|
9
|
+
|
7
10
|
mattr_accessor :userid
|
8
11
|
mattr_accessor :secret
|
9
12
|
self.userid = ENV['RAYDASH_USERID']
|
10
13
|
self.secret = ENV['RAYDASH_SECRET']
|
11
14
|
|
12
|
-
|
15
|
+
def self.getAssetUrl()
|
16
|
+
"http://" + RAYDASH_HTTP_SERVER + ":" + RAYDASH_HTTP_PORT.to_s()
|
17
|
+
end
|
13
18
|
# Gets a new token for internal or external streams. The same token can be re-used for input and output streams.
|
14
|
-
def self.getToken(streamName="")
|
19
|
+
def self.getToken(streamName="", customGroup="")
|
15
20
|
if streamName!="" then
|
16
|
-
|
21
|
+
result=self.postRequest("/api/2/authtoken",{'userid'=>self.userid,'secret'=>self.secret,'streamName'=>streamName,'customGroup'=>customGroup})
|
17
22
|
else
|
18
|
-
|
23
|
+
result=self.postRequest("/api/2/authtoken",{'userid'=>self.userid,'secret'=>self.secret,'customGroup'=>customGroup})
|
19
24
|
end
|
20
|
-
result = self.doRequest(path)
|
21
|
-
result.value()
|
22
25
|
return result.body
|
23
26
|
end
|
24
27
|
# Changes which input-stream connects to which output-stream token
|
25
28
|
def self.changeStream(output_token,input_token)
|
26
|
-
|
27
|
-
result = doRequest(path)
|
28
|
-
result.value()
|
29
|
+
result = postRequest("/api/2/authtoken/#{output_token}",{'streamName'=>input_token, 'userid' => self.userid, 'secret' => self.secret, })
|
29
30
|
return result.body
|
30
31
|
end
|
32
|
+
def self.changeStreamNext(output_token,params={})
|
33
|
+
customGroup=params[:customGroup]
|
34
|
+
active=params[:active]
|
35
|
+
twoWay=params[:twoWay]
|
36
|
+
newCustomGroup=params[:newCustomGroup]
|
37
|
+
|
38
|
+
path="/api/2/authtoken/#{output_token}/next?userid=#{userid}&secret=#{secret}"
|
39
|
+
|
40
|
+
if active!=nil then
|
41
|
+
path += "&active=#{active}"
|
42
|
+
end
|
43
|
+
if customGroup!=nil then
|
44
|
+
path += "&customGroup=#{customGroup}"
|
45
|
+
end
|
46
|
+
if twoWay!=nil && (twoWay=="1" || twoWay==true)
|
47
|
+
path += "&twoWay=1"
|
48
|
+
end
|
49
|
+
if newCustomGroup!=nil
|
50
|
+
path += "&newCustomGroup=#{customGroup}"
|
51
|
+
end
|
52
|
+
result = getRequest(path)
|
53
|
+
return result.body
|
54
|
+
end
|
55
|
+
|
56
|
+
# Change to a random stream with the specified customGoup
|
57
|
+
def self.changeStreamRand(output_token,params={})
|
58
|
+
customGroup=params[:customGroup]
|
59
|
+
active=params[:active]
|
60
|
+
twoWay=params[:twoWay]
|
61
|
+
newCustomGroup=params[:newCustomGroup]
|
62
|
+
|
63
|
+
path="/api/2/authtoken/#{output_token}/randnext?userid=#{userid}&secret=#{secret}"
|
64
|
+
if customGroup!=nil then
|
65
|
+
path += "&browserSession=#{browserSession}"
|
66
|
+
end
|
67
|
+
if active!=nil then
|
68
|
+
path += "&active=#{active}"
|
69
|
+
end
|
70
|
+
if twoWay!=nil && (twoWay=="1" || twoWay==true)
|
71
|
+
path += "&twoWay=1"
|
72
|
+
end
|
73
|
+
if newCustomGroup!=nil
|
74
|
+
path += "&newCustomGroup=#{customGroup}"
|
75
|
+
end
|
76
|
+
result = getRequest(path)
|
77
|
+
return result.body
|
78
|
+
end
|
79
|
+
|
31
80
|
# Gets information about the stream
|
32
81
|
def self.getStreamInfo(token)
|
33
|
-
path="/api/
|
34
|
-
result =
|
35
|
-
result.value()
|
82
|
+
path="/api/2/authtoken/#{token}" + token + "?userid=" + self.userid + "&secret=" + self.secret
|
83
|
+
result = getRequest(path)
|
36
84
|
return JSON.parse(result.body)
|
37
85
|
end
|
38
86
|
# Sets a callback url with three parameters
|
39
87
|
def self.setCallbackUrl(userid, secret, url)
|
40
|
-
path="/api/
|
41
|
-
result =
|
88
|
+
path="/api/2/callbackurl/" + "?userid=" + self.userid + "&secret=" + self.secret + "&url=" + CGI::escape(url)
|
89
|
+
result = getRequest(path)
|
42
90
|
result.value()
|
43
91
|
return JSON.parse(result.body)
|
44
92
|
end
|
93
|
+
def self.startRecord(token)
|
94
|
+
path="/api/2/startRecord//#{token}"
|
95
|
+
result = self.getRequest(path + "?userid=#{self.userid}&secret=#{self.secret}")
|
96
|
+
return result.body
|
97
|
+
end
|
98
|
+
def self.stopRecord(token,bucket)
|
99
|
+
path="/api/2/stopRecord/#{token}"
|
100
|
+
result = self.getRequest(path + "?userid=#{self.userid}&secret=#{self.secret}&bucket=#{CGI::escape(bucket)}")
|
101
|
+
return result.body
|
102
|
+
end
|
45
103
|
# Used for configuration
|
46
104
|
def self.setup
|
47
105
|
yield self
|
48
106
|
end
|
49
107
|
|
50
108
|
private
|
51
|
-
def self.
|
109
|
+
def self.getRequest(request)
|
52
110
|
return Net::HTTP.get_response(RAYDASH_HTTP_SERVER, request, RAYDASH_HTTP_PORT)
|
53
111
|
end
|
112
|
+
def self.postRequest(path,request)
|
113
|
+
return Net::HTTP.post_form(URI.parse("http://" + RAYDASH_HTTP_SERVER + ":" + RAYDASH_HTTP_PORT.to_s() + path), request)
|
114
|
+
end
|
115
|
+
|
54
116
|
|
55
117
|
end
|
56
118
|
ActionView::Base.send :include, RaydashHelper
|
data/raydash.gemspec
CHANGED
@@ -8,14 +8,14 @@ Gem::Specification.new do |s|
|
|
8
8
|
s.platform = Gem::Platform::RUBY
|
9
9
|
s.authors = ["Gershon Bialer"]
|
10
10
|
s.email = ["gershon@raydash.com"]
|
11
|
-
s.homepage = ""
|
11
|
+
s.homepage = "http://www.raydash.com"
|
12
12
|
s.summary = %q{Embed video chat or video streaming via Raydash}
|
13
13
|
s.description = %q{Live video chat or video streams can be hosted on Raydash, and accessed via the API contained within this gem}
|
14
14
|
|
15
15
|
s.rubyforge_project = "raydash"
|
16
16
|
|
17
17
|
s.add_dependency('json')
|
18
|
-
|
18
|
+
|
19
19
|
s.files = `git ls-files`.split("\n")
|
20
20
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
21
21
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: raydash
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 15
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
|
+
- 2
|
7
8
|
- 0
|
8
|
-
- 5
|
9
9
|
- 0
|
10
|
-
version: 0.
|
10
|
+
version: 2.0.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Gershon Bialer
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-
|
18
|
+
date: 2011-05-06 00:00:00 -05:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -50,21 +50,18 @@ files:
|
|
50
50
|
- lib/app/helpers/raydash_helper.rb
|
51
51
|
- lib/generators/raydash/install_generator.rb
|
52
52
|
- lib/generators/raydash/model_generator.rb
|
53
|
-
- lib/generators/templates/ClientBox.swf
|
54
53
|
- lib/generators/templates/README
|
55
|
-
- lib/generators/templates/RecordBox.swf
|
56
54
|
- lib/generators/templates/controller.rb
|
57
55
|
- lib/generators/templates/index.html.erb
|
58
56
|
- lib/generators/templates/migration.rb
|
59
57
|
- lib/generators/templates/model.rb
|
60
58
|
- lib/generators/templates/raydash.rb
|
61
|
-
- lib/generators/templates/swfobject.js
|
62
59
|
- lib/generators/templates/view.html.erb
|
63
60
|
- lib/raydash.rb
|
64
61
|
- lib/raydash/version.rb
|
65
62
|
- raydash.gemspec
|
66
63
|
has_rdoc: true
|
67
|
-
homepage:
|
64
|
+
homepage: http://www.raydash.com
|
68
65
|
licenses: []
|
69
66
|
|
70
67
|
post_install_message:
|
Binary file
|
Binary file
|
@@ -1,4 +0,0 @@
|
|
1
|
-
/* SWFObject v2.2 <http://code.google.com/p/swfobject/>
|
2
|
-
is released under the MIT License <http://www.opensource.org/licenses/mit-license.php>
|
3
|
-
*/
|
4
|
-
var swfobject=function(){var D="undefined",r="object",S="Shockwave Flash",W="ShockwaveFlash.ShockwaveFlash",q="application/x-shockwave-flash",R="SWFObjectExprInst",x="onreadystatechange",O=window,j=document,t=navigator,T=false,U=[h],o=[],N=[],I=[],l,Q,E,B,J=false,a=false,n,G,m=true,M=function(){var aa=typeof j.getElementById!=D&&typeof j.getElementsByTagName!=D&&typeof j.createElement!=D,ah=t.userAgent.toLowerCase(),Y=t.platform.toLowerCase(),ae=Y?/win/.test(Y):/win/.test(ah),ac=Y?/mac/.test(Y):/mac/.test(ah),af=/webkit/.test(ah)?parseFloat(ah.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):false,X=!+"\v1",ag=[0,0,0],ab=null;if(typeof t.plugins!=D&&typeof t.plugins[S]==r){ab=t.plugins[S].description;if(ab&&!(typeof t.mimeTypes!=D&&t.mimeTypes[q]&&!t.mimeTypes[q].enabledPlugin)){T=true;X=false;ab=ab.replace(/^.*\s+(\S+\s+\S+$)/,"$1");ag[0]=parseInt(ab.replace(/^(.*)\..*$/,"$1"),10);ag[1]=parseInt(ab.replace(/^.*\.(.*)\s.*$/,"$1"),10);ag[2]=/[a-zA-Z]/.test(ab)?parseInt(ab.replace(/^.*[a-zA-Z]+(.*)$/,"$1"),10):0}}else{if(typeof O.ActiveXObject!=D){try{var ad=new ActiveXObject(W);if(ad){ab=ad.GetVariable("$version");if(ab){X=true;ab=ab.split(" ")[1].split(",");ag=[parseInt(ab[0],10),parseInt(ab[1],10),parseInt(ab[2],10)]}}}catch(Z){}}}return{w3:aa,pv:ag,wk:af,ie:X,win:ae,mac:ac}}(),k=function(){if(!M.w3){return}if((typeof j.readyState!=D&&j.readyState=="complete")||(typeof j.readyState==D&&(j.getElementsByTagName("body")[0]||j.body))){f()}if(!J){if(typeof j.addEventListener!=D){j.addEventListener("DOMContentLoaded",f,false)}if(M.ie&&M.win){j.attachEvent(x,function(){if(j.readyState=="complete"){j.detachEvent(x,arguments.callee);f()}});if(O==top){(function(){if(J){return}try{j.documentElement.doScroll("left")}catch(X){setTimeout(arguments.callee,0);return}f()})()}}if(M.wk){(function(){if(J){return}if(!/loaded|complete/.test(j.readyState)){setTimeout(arguments.callee,0);return}f()})()}s(f)}}();function f(){if(J){return}try{var Z=j.getElementsByTagName("body")[0].appendChild(C("span"));Z.parentNode.removeChild(Z)}catch(aa){return}J=true;var X=U.length;for(var Y=0;Y<X;Y++){U[Y]()}}function K(X){if(J){X()}else{U[U.length]=X}}function s(Y){if(typeof O.addEventListener!=D){O.addEventListener("load",Y,false)}else{if(typeof j.addEventListener!=D){j.addEventListener("load",Y,false)}else{if(typeof O.attachEvent!=D){i(O,"onload",Y)}else{if(typeof O.onload=="function"){var X=O.onload;O.onload=function(){X();Y()}}else{O.onload=Y}}}}}function h(){if(T){V()}else{H()}}function V(){var X=j.getElementsByTagName("body")[0];var aa=C(r);aa.setAttribute("type",q);var Z=X.appendChild(aa);if(Z){var Y=0;(function(){if(typeof Z.GetVariable!=D){var ab=Z.GetVariable("$version");if(ab){ab=ab.split(" ")[1].split(",");M.pv=[parseInt(ab[0],10),parseInt(ab[1],10),parseInt(ab[2],10)]}}else{if(Y<10){Y++;setTimeout(arguments.callee,10);return}}X.removeChild(aa);Z=null;H()})()}else{H()}}function H(){var ag=o.length;if(ag>0){for(var af=0;af<ag;af++){var Y=o[af].id;var ab=o[af].callbackFn;var aa={success:false,id:Y};if(M.pv[0]>0){var ae=c(Y);if(ae){if(F(o[af].swfVersion)&&!(M.wk&&M.wk<312)){w(Y,true);if(ab){aa.success=true;aa.ref=z(Y);ab(aa)}}else{if(o[af].expressInstall&&A()){var ai={};ai.data=o[af].expressInstall;ai.width=ae.getAttribute("width")||"0";ai.height=ae.getAttribute("height")||"0";if(ae.getAttribute("class")){ai.styleclass=ae.getAttribute("class")}if(ae.getAttribute("align")){ai.align=ae.getAttribute("align")}var ah={};var X=ae.getElementsByTagName("param");var ac=X.length;for(var ad=0;ad<ac;ad++){if(X[ad].getAttribute("name").toLowerCase()!="movie"){ah[X[ad].getAttribute("name")]=X[ad].getAttribute("value")}}P(ai,ah,Y,ab)}else{p(ae);if(ab){ab(aa)}}}}}else{w(Y,true);if(ab){var Z=z(Y);if(Z&&typeof Z.SetVariable!=D){aa.success=true;aa.ref=Z}ab(aa)}}}}}function z(aa){var X=null;var Y=c(aa);if(Y&&Y.nodeName=="OBJECT"){if(typeof Y.SetVariable!=D){X=Y}else{var Z=Y.getElementsByTagName(r)[0];if(Z){X=Z}}}return X}function A(){return !a&&F("6.0.65")&&(M.win||M.mac)&&!(M.wk&&M.wk<312)}function P(aa,ab,X,Z){a=true;E=Z||null;B={success:false,id:X};var ae=c(X);if(ae){if(ae.nodeName=="OBJECT"){l=g(ae);Q=null}else{l=ae;Q=X}aa.id=R;if(typeof aa.width==D||(!/%$/.test(aa.width)&&parseInt(aa.width,10)<310)){aa.width="310"}if(typeof aa.height==D||(!/%$/.test(aa.height)&&parseInt(aa.height,10)<137)){aa.height="137"}j.title=j.title.slice(0,47)+" - Flash Player Installation";var ad=M.ie&&M.win?"ActiveX":"PlugIn",ac="MMredirectURL="+O.location.toString().replace(/&/g,"%26")+"&MMplayerType="+ad+"&MMdoctitle="+j.title;if(typeof ab.flashvars!=D){ab.flashvars+="&"+ac}else{ab.flashvars=ac}if(M.ie&&M.win&&ae.readyState!=4){var Y=C("div");X+="SWFObjectNew";Y.setAttribute("id",X);ae.parentNode.insertBefore(Y,ae);ae.style.display="none";(function(){if(ae.readyState==4){ae.parentNode.removeChild(ae)}else{setTimeout(arguments.callee,10)}})()}u(aa,ab,X)}}function p(Y){if(M.ie&&M.win&&Y.readyState!=4){var X=C("div");Y.parentNode.insertBefore(X,Y);X.parentNode.replaceChild(g(Y),X);Y.style.display="none";(function(){if(Y.readyState==4){Y.parentNode.removeChild(Y)}else{setTimeout(arguments.callee,10)}})()}else{Y.parentNode.replaceChild(g(Y),Y)}}function g(ab){var aa=C("div");if(M.win&&M.ie){aa.innerHTML=ab.innerHTML}else{var Y=ab.getElementsByTagName(r)[0];if(Y){var ad=Y.childNodes;if(ad){var X=ad.length;for(var Z=0;Z<X;Z++){if(!(ad[Z].nodeType==1&&ad[Z].nodeName=="PARAM")&&!(ad[Z].nodeType==8)){aa.appendChild(ad[Z].cloneNode(true))}}}}}return aa}function u(ai,ag,Y){var X,aa=c(Y);if(M.wk&&M.wk<312){return X}if(aa){if(typeof ai.id==D){ai.id=Y}if(M.ie&&M.win){var ah="";for(var ae in ai){if(ai[ae]!=Object.prototype[ae]){if(ae.toLowerCase()=="data"){ag.movie=ai[ae]}else{if(ae.toLowerCase()=="styleclass"){ah+=' class="'+ai[ae]+'"'}else{if(ae.toLowerCase()!="classid"){ah+=" "+ae+'="'+ai[ae]+'"'}}}}}var af="";for(var ad in ag){if(ag[ad]!=Object.prototype[ad]){af+='<param name="'+ad+'" value="'+ag[ad]+'" />'}}aa.outerHTML='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"'+ah+">"+af+"</object>";N[N.length]=ai.id;X=c(ai.id)}else{var Z=C(r);Z.setAttribute("type",q);for(var ac in ai){if(ai[ac]!=Object.prototype[ac]){if(ac.toLowerCase()=="styleclass"){Z.setAttribute("class",ai[ac])}else{if(ac.toLowerCase()!="classid"){Z.setAttribute(ac,ai[ac])}}}}for(var ab in ag){if(ag[ab]!=Object.prototype[ab]&&ab.toLowerCase()!="movie"){e(Z,ab,ag[ab])}}aa.parentNode.replaceChild(Z,aa);X=Z}}return X}function e(Z,X,Y){var aa=C("param");aa.setAttribute("name",X);aa.setAttribute("value",Y);Z.appendChild(aa)}function y(Y){var X=c(Y);if(X&&X.nodeName=="OBJECT"){if(M.ie&&M.win){X.style.display="none";(function(){if(X.readyState==4){b(Y)}else{setTimeout(arguments.callee,10)}})()}else{X.parentNode.removeChild(X)}}}function b(Z){var Y=c(Z);if(Y){for(var X in Y){if(typeof Y[X]=="function"){Y[X]=null}}Y.parentNode.removeChild(Y)}}function c(Z){var X=null;try{X=j.getElementById(Z)}catch(Y){}return X}function C(X){return j.createElement(X)}function i(Z,X,Y){Z.attachEvent(X,Y);I[I.length]=[Z,X,Y]}function F(Z){var Y=M.pv,X=Z.split(".");X[0]=parseInt(X[0],10);X[1]=parseInt(X[1],10)||0;X[2]=parseInt(X[2],10)||0;return(Y[0]>X[0]||(Y[0]==X[0]&&Y[1]>X[1])||(Y[0]==X[0]&&Y[1]==X[1]&&Y[2]>=X[2]))?true:false}function v(ac,Y,ad,ab){if(M.ie&&M.mac){return}var aa=j.getElementsByTagName("head")[0];if(!aa){return}var X=(ad&&typeof ad=="string")?ad:"screen";if(ab){n=null;G=null}if(!n||G!=X){var Z=C("style");Z.setAttribute("type","text/css");Z.setAttribute("media",X);n=aa.appendChild(Z);if(M.ie&&M.win&&typeof j.styleSheets!=D&&j.styleSheets.length>0){n=j.styleSheets[j.styleSheets.length-1]}G=X}if(M.ie&&M.win){if(n&&typeof n.addRule==r){n.addRule(ac,Y)}}else{if(n&&typeof j.createTextNode!=D){n.appendChild(j.createTextNode(ac+" {"+Y+"}"))}}}function w(Z,X){if(!m){return}var Y=X?"visible":"hidden";if(J&&c(Z)){c(Z).style.visibility=Y}else{v("#"+Z,"visibility:"+Y)}}function L(Y){var Z=/[\\\"<>\.;]/;var X=Z.exec(Y)!=null;return X&&typeof encodeURIComponent!=D?encodeURIComponent(Y):Y}var d=function(){if(M.ie&&M.win){window.attachEvent("onunload",function(){var ac=I.length;for(var ab=0;ab<ac;ab++){I[ab][0].detachEvent(I[ab][1],I[ab][2])}var Z=N.length;for(var aa=0;aa<Z;aa++){y(N[aa])}for(var Y in M){M[Y]=null}M=null;for(var X in swfobject){swfobject[X]=null}swfobject=null})}}();return{registerObject:function(ab,X,aa,Z){if(M.w3&&ab&&X){var Y={};Y.id=ab;Y.swfVersion=X;Y.expressInstall=aa;Y.callbackFn=Z;o[o.length]=Y;w(ab,false)}else{if(Z){Z({success:false,id:ab})}}},getObjectById:function(X){if(M.w3){return z(X)}},embedSWF:function(ab,ah,ae,ag,Y,aa,Z,ad,af,ac){var X={success:false,id:ah};if(M.w3&&!(M.wk&&M.wk<312)&&ab&&ah&&ae&&ag&&Y){w(ah,false);K(function(){ae+="";ag+="";var aj={};if(af&&typeof af===r){for(var al in af){aj[al]=af[al]}}aj.data=ab;aj.width=ae;aj.height=ag;var am={};if(ad&&typeof ad===r){for(var ak in ad){am[ak]=ad[ak]}}if(Z&&typeof Z===r){for(var ai in Z){if(typeof am.flashvars!=D){am.flashvars+="&"+ai+"="+Z[ai]}else{am.flashvars=ai+"="+Z[ai]}}}if(F(Y)){var an=u(aj,am,ah);if(aj.id==ah){w(ah,true)}X.success=true;X.ref=an}else{if(aa&&A()){aj.data=aa;P(aj,am,ah,ac);return}else{w(ah,true)}}if(ac){ac(X)}})}else{if(ac){ac(X)}}},switchOffAutoHideShow:function(){m=false},ua:M,getFlashPlayerVersion:function(){return{major:M.pv[0],minor:M.pv[1],release:M.pv[2]}},hasFlashPlayerVersion:F,createSWF:function(Z,Y,X){if(M.w3){return u(Z,Y,X)}else{return undefined}},showExpressInstall:function(Z,aa,X,Y){if(M.w3&&A()){P(Z,aa,X,Y)}},removeSWF:function(X){if(M.w3){y(X)}},createCSS:function(aa,Z,Y,X){if(M.w3){v(aa,Z,Y,X)}},addDomLoadEvent:K,addLoadEvent:s,getQueryParamValue:function(aa){var Z=j.location.search||j.location.hash;if(Z){if(/\?/.test(Z)){Z=Z.split("?")[1]}if(aa==null){return L(Z)}var Y=Z.split("&");for(var X=0;X<Y.length;X++){if(Y[X].substring(0,Y[X].indexOf("="))==aa){return L(Y[X].substring((Y[X].indexOf("=")+1)))}}}return""},expressInstallCallback:function(){if(a){var X=c(R);if(X&&l){X.parentNode.replaceChild(l,X);if(Q){w(Q,true);if(M.ie&&M.win){l.style.display="block"}}if(E){E(B)}}a=false}}}}();
|