/**
*swffit v2.4 beta (2010/01/18) <http://swffit.millermedeiros.com/>
*Copyright (c) 2010 Miller Medeiros <http://www.millermedeiros.com/>
*This software is released under the MIT License <http://www.opensource.org/licenses/mit-license.php>
*
*@requires swfobject 2.1 or higher <http://code.google.com/p/swfobject>
*/
var swffit = function(){
var win = window,
doc = document,
html = doc.getElementsByTagName('html')[0],
AGENT = navigator.userAgent.toLowerCase(),
WK = /webkit/.test(AGENT),
IE = /msie/.test(AGENT) && !win.opera,
FF = /firefox/.test(AGENT) && !win.opera,
UNDEF = 'undefined',
_ft, //{Element} object element (flash movie)
_re, //{Boolean} has resize event listener
_t, //{String} object id
_mw, //{int} min width
_mh, //{int} min height
_xw, //{int} max width
_xh, //{int} max height
_hc, //{Boolean} horizontal centered
_vc, //{Boolean} vertical centered
_ow, //{int} object width
_oh; //{int} object height
swfobject.createCSS('object', 'position:absolute; outline:none'); //outline none fixes bug #4 (FF3.6b)
function fit(t, mw, mh, xw, xh, hc, vc){
mw = mw || _ow;
mh = mh || _oh;
xw = xw || null;
xh = xh || null;
hc = (hc || hc == null);
vc = (vc || vc == null);
configure({target: t, minWid: mw, minHei: mh, maxWid: xw, maxHei: xh, hCenter: hc, vCenter: vc});
}
function configure(o){
//checks if value changed and return correct value
var evalNum = function(v, p){
return (typeof o[p] != UNDEF)? o[p] : v;
},
evalBool = function(v, p){
return (o[p] || (v && typeof o[p] == UNDEF));
};
_mw = evalNum(_mw, 'minWid');
_mh = evalNum(_mh, 'minHei');
_xw = evalNum(_xw, 'maxWid');
_xh = evalNum(_xh, 'maxHei');
_hc = evalBool(_hc, 'hCenter');
_vc = evalBool(_vc, 'vCenter');
if (o.target && (o.target != _t)){
_t = o.target;
swfobject.addDomLoadEvent(initFit);
if(IE){ swfobject.addLoadEvent(initFit); } //fix conflict with swfaddress 2.3 and IE8 (in some browser modes)
} else {
startFit();
}
}
function initFit(){
if(!html.style.overflowX){ controlScroll(0,0); }
if(!html.style.overflowY){ controlScroll(0,1); }
html.style.height = doc.body.style.height = '100%';
doc.body.style.margin = doc.body.style.padding = 0;
var st = 'width:100%; height:100%';
st += (IE)? '; overflow:hidden' : ''; //fix IE8
swfobject.createCSS('#'+_t, st);
_ft = doc.getElementById(_t);
_ft = (_ft != UNDEF && FF && /object/.test(_ft.innerHTML))? doc.getElementById(_t).getElementsByTagName('object')[0] : _ft; //required for static publishing on Firefox
_ow = _ft.width;
_oh = _ft.height;
_mw = _mw || _ow;
_mh = _mh || _oh;
startFit();
}
function startFit(){
setSize();
if(!_re){
swffit.addResizeEvent(setSize);
_re = 1;
}
}
function stopFit(w,h){
if(_re){
swffit.removeResizeEvent(setSize);
_re = 0;
setStyle('top', 'auto');
setStyle('left', 'auto');
setStyle('marginTop', 0);
setStyle('marginLeft', 0);
w = w || '100%';
h = h || '100%';
setWidth(w);
setHeight(h);
forceRedraw();
}
}
function forceRedraw(){
if(WK){
_ft.style.paddingBottom = '1px'; //fixes issue #5
_ft.style.paddingBottom = '0';
}
}
function controlResizeEvent(a,fn){
var p = (a)? ['addEventListener', 'attachEvent'] : ['removeEventListener', 'detachEvent'];
if(win[p[0]]){
win[p[0]]('resize',fn,false);
}else if(win[p[1]]){
win[p[1]]('onresize',fn);
}
}
function setWidth(w){
var v = (isNaN(w))? w : w+'px';
setStyle('width', v);
}
function setHeight(h){
var v = (isNaN(h))? h : h+'px';
setStyle('height', v);
}
function setStyle(p,v){
_ft.style[p] = v;
}
function setSize(){
if(jQuery.browser.msie && parseInt(jQuery.browser.version) == 6) {
var ww = getWinSize();
iw = ww.width;
ih = ww.height;
}else{
var iw = (win.innerWidth)? win.innerWidth : ((doc.documentElement.clientWidth)? doc.documentElement.clientWidth : doc.body.clientWidth),
ih = (win.innerHeight)? win.innerHeight : ((doc.documentElement.clientHeight)? doc.documentElement.clientHeight : doc.body.clientHeight);
}
//fix window innerSize difference when scrollbar is visible
iw -= (!IE && ih <= _mh)? 18 : 0;
ih -= (!IE && iw <= _mw)? 18 : 0;
//sets width
if (_xw && iw >= _xw){
setWidth(_xw);
setPosition(0,1);
} else {
if (iw > _mw && (iw < _xw || !_xw)) {
setWidth('100%');
} else {
setWidth(_mw);
}
setPosition(0,0);
}
// sets height
if (_xh && ih >= _xh){
setHeight(_xh);
setPosition(1,1);
}else{
if (ih > _mh && (ih < _xh || !_xh)){
setHeight('100%');
} else {
setHeight(_mh);
}
setPosition(1,0);
}
forceRedraw();
}
function getWinSize()
{
var viewportheight;
var viewportwidth;
if (typeof window.innerWidth != 'undefined') {
viewportheight = window.innerHeight;
} else if (typeof document.documentElement != 'undefined' && typeof document.documentElement.clientWidth != 'undefined' && document.documentElement.clientWidth != 0) {
viewportheight = document.documentElement.clientHeight;
} else {
viewportheight = document.getElementsByTagName('body')[0].clientHeight;
}
if (typeof window.innerWidth != 'undefined') {
viewportwidth = window.innerWidth;
} else if (typeof document.documentElement != 'undefined' && typeof document.documentElement.clientWidth != 'undefined' && document.documentElement.clientWidth != 0) {
viewportwidth = document.documentElement.clientWidth;
} else {
viewportwidth = document.getElementsByTagName('body')[0].clientWidth;
}
return { height:  viewportheight, width: viewportwidth };
}
function setPosition(t, x){
var p,
m;
if(t){
p = (x && _vc)? '50%' : 'auto';
m = (x && _vc)? -(_xh*0.5)+'px' : 0;
setStyle('top', p);
setStyle('marginTop', m);
}else{
p = (x && _hc)? '50%' : 'auto';
m = (x && _hc)? -(_xw*0.5)+'px' : 0;
setStyle('left', p);
setStyle('marginLeft', m);
}
}
function controlScroll(s,v){
var p = (v)? 'overflowY' : 'overflowX';
html.style[p] = (s)? 'scroll' : 'auto';
}
function getValueOf(p){
var o = {target:_t, minWid:_mw, minHei:_mh, maxWid:_xw, maxHei:_xh, hCenter:_hc, vCenter:_vc};
return o[p];
}
return{
fit: fit,
configure: configure,
startFit: startFit,
stopFit: stopFit,
getValueOf: getValueOf,
addResizeEvent: function(fn){
controlResizeEvent(1,fn);
},
removeResizeEvent: function(fn){
controlResizeEvent(0,fn);
},
showScrollH: function(){
controlScroll(1,0);
},
showScrollV: function(){
controlScroll(1,1);
},
getScrollTop: function(){
return doc.body.scrollTop ? doc.body.scrollTop : (win.pageYOffset ? win.pageYOffset : (doc.body.parentElement ? doc.body.parentElement.scrollTop : 0));
},
getScrollLeft: function(){
return doc.body.scrollLeft ? doc.body.scrollLeft : (win.pageXOffset ? win.pageXOffset : (doc.body.parentElement ? doc.body.parentElement.scrollLeft : 0));
}
};
}();
