$clone = function(obj) { return $extend({},obj); };

Element.Properties.send = {
	set: function(options){
		var send = this.retrieve('send');
		if (send) send.cancel();
		return this.eliminate('send').store('send:options', $extend({
			data: this, link: 'cancel', method: this.get('method') || 'post', url: this.get('action')
		}, options));
	},
	get: function(options){
		if (options || !this.retrieve('send')){
			if (options || !this.retrieve('send:options')) this.set('send', options);
			this.store('send', new Request(this.retrieve('send:options')));
		}
		return this.retrieve('send');
	}
};

Element.implement({
	send: function(url){
		var sender = this.get('send');
		sender.send({data: this, url: url || sender.options.url});
		return this;
	}
});

var motorola = {
	controls: {},
	pages: {},
	utils: {},
	swf: {},
	/*expressInstallPath and sAssetsPath are redefined on individual JSP pages*/
	globals: {
		expressInstallPath: "../resources/global/flash/expressInstall.swf",
		sAssetsPath: '../resources/global/flash_content/',
		IsFlashInstalled: false,
		FlashVersion: 8
	},
	fxoptions: {
		duration: 500,
		transition: Fx.Transitions.Sine.easeOut
	}
};

String.implement({
	template: function(props) {
		var regex = /%(\w+?)%/g;
		var newStr = this.replace(regex,function replacer(mid) {
			var key = mid.substring(1,mid.length-1);
			var value = props[key];
			if (typeof value === 'string') {
				return props[key];
			} else {
				return '';
			}
		});
		return newStr;
	}
});

motorola.utils.PngFix = {
	BLANK_GIF_PATH: '../img/blank.gif',
	fixBg: function(el) {
		if (Browser.Engine.trident4) {
			var elSrc = el.getStyle('backgroundImage');
			var bgSrc, alphaFilter, method;
			if (elSrc.contains('.png') && !el.retrieve('pngFixed')) {
				try {
					bgSrc = elSrc.split('url("')[1].split('")')[0];
				} catch (ex) {
					bgSrc = elSrc.split('url(')[1].split(')')[0];
				}
				el.setStyle('backgroundImage', "url(" + motorola.utils.PngFix.BLANK_GIF_PATH + ")");
				method = 'scale';
				if (el.getStyle('background-repeat') == 'no-repeat') {
					method = 'crop';
				}
				el.style.filter = 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src="' + bgSrc + '", sizingMethod="' + method + '")';
				el.store('pngFixed',true);
			}
		}
	},
	fixSrc: function(el,setDimensions) {
		if (Browser.Engine.trident4) {
			var imgSrc = el.getProperty('src');
			if (imgSrc.contains('.png') && !el.retrieve('pngFixed')) {
				method = "image";
				if (el.retrieve('method')) {
					method = el.retrieve('method');
				}
				el.set('src',motorola.utils.PngFix.BLANK_GIF_PATH);
				el.setStyles({
					backgroundImage: 'none',
					filter: 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src="' + imgSrc + '", sizingMethod="'+method+'")'
				});
				if (!setDimensions) { return; }
				var img = new Image();
				img.onload = function(loaded) { el.set({width:loaded.width,height:loaded.height}); };
				img.src = imgSrc;
			}
		}
	},
	fixClass: function(clazz, filter) {
		var elements;
		if ($defined(filter) && $type(filter) === 'element') {
			elements = filter.getElements('.' + clazz);
		} else {
			elements = $$('.' + clazz);
		}
		var i = elements.length;
		var el;
		if (i > 0) {
			do {
				i = i - 1;
				el = elements[i];
				motorola.utils.PngFix.fixElement(el);
			} while (i);
		}
	},
	fixElement: function(el) {
		switch (el.get('tag')) {
			case 'img': motorola.utils.PngFix.fixSrc(el); break;
			default: motorola.utils.PngFix.fixBg(el); break;
		}
	},
	fixElements: function(elements) {
		var i = elements.length;
		if (!i) { return; }
		do {
			i = i - 1;
			motorola.utils.PngFix.fixElement(elements[i]);
		} while (i);
	}
};

motorola.utils.isFlashInstalled = function() {
	var installed = Browser.Plugins.Flash && Browser.Plugins.Flash.version > 9 || (Browser.Plugins.Flash.version === 9 && Browser.Plugins.Flash.build >= 114);
	return installed;
};
motorola.utils.loadHeader = function() {
	var headerElement = document.getElement('.header');
	if (headerElement && motorola.controls.Header) {
		motorola.globals.Header = new motorola.controls.Header(headerElement);
	}else if (headerElement && motorola.controls.HeaderGlobal) {
		motorola.globals.Header = new motorola.controls.HeaderGlobal(headerElement);
	}
};
motorola.utils.loadFooter = function() {
	var footerElement = document.getElement('.footer');
	if (footerElement && motorola.controls.Footer) {
		motorola.globals.Footer = new motorola.controls.Footer(footerElement);
	}else{
		footerElement = document.getElement('.footerGlobal');
		if (footerElement && motorola.controls.FooterGlobal) {
			motorola.globals.Footer = new motorola.controls.FooterGlobal(footerElement);
		}
	}
};
motorola.utils.stopEvent = function(e) {
	var evt;
	if (e && $type(e) === 'event') {
		evt = new Event(e);
		evt.stop();
	}
};
motorola.utils.showContent = function() {
	var mainLoading = $('main-loading');
	if (mainLoading) { mainLoading.setStyle('display','none'); }
	document.getElement('div.wrap').setStyles({'left':'0px'});
};
motorola.utils.setupSlider = function(content, openLink, closeLink, shouldToggle) {
	var slider;
	if (content) {
		slider = new MoreLess(content,{
			duration: shouldToggle ? motorola.fxoptions.duration : 0,
			onStart: function() {
				if (this.open) {
					if (Browser.Engine.trident) { return; } // this case is handled in onComplete
					else { this.closer.fade('out'); this.opener.fade('in'); }
				} else {
					if (Browser.Engine.trident) { this.closer.setStyle('visibility','visible'); this.opener.setStyle('visibility','hidden'); }
					else { this.closer.fade('in'); this.opener.fade('out'); }
				}
			},
			onComplete: function() {
				// open state is set before onComplete is called so if it was open then this.open is false in onComplete
				if (!this.open && Browser.Engine.trident) { this.closer.setStyle('visibility','hidden'); this.opener.setStyle('visibility','visible'); }
			}
		});
		slider.opener = openLink.addEvent('click',slider.toggle.pass([],slider)).addEvent('click',motorola.utils.stopEvent);
		slider.closer = closeLink.addEvent('click',slider.toggle.pass([],slider)).addEvent('click',motorola.utils.stopEvent);
		slider.hide();
	}
};
window.addEvent('domready', function() {
	motorola.utils.loadHeader.delay(1); // added so opera events get added correctly
	motorola.utils.loadFooter.delay(1); // added so opera events get added correctly
	var body = $(document.body);
	if (Browser.Engine.gecko) {
		body.addClass('ff').addClass(Browser.Engine.version > 18 ? 'ff3' : 'ff2');
	}
	body.addClass(Browser.Engine.name).addClass(Browser.Platform.name);
	$$('#sectionNav li.pill-link, .arrowLink li').each(function(pill) { pill.set('html',pill.get('html') + '<div>&nbsp;</div>'); });
	if (Browser.Engine.trident4) {
		$$('.hoverable').addEvents({
			mouseenter: function() { this.addClass('hover'); },
			mouseleave: function() { this.removeClass('hover'); },
			mousedown: function() { this.addClass('activated'); },
			mouseup: function() { this.removeClass('activated'); }
		});
	}
	var cap = new Element('span',{'class':'cap'});
	$$('.capped').each(function(capped) { capped.adopt(cap.clone().addClass('leftCap'),cap.clone().addClass('rightCap')); });
	var shareThisCallback = function(SharedObject) {
		SharedObject.properties.url = document.location.toString();
		if (motorola.shareThisCallback) { motorola.shareThisCallback(SharedObject); }
	};
	if (typeof SHARETHIS === 'undefined') { return; }
	motorola.shareThis = SHARETHIS.addEntry({title:document.title,summary:''},{button:false,onclick:shareThisCallback});
	(function() {
		var oldpopup = motorola.shareThis.popup;
		function fixStwrapper() {
			var stwrapper = $('stwrapper');
			if (stwrapper) {
				stwrapper.setStyles({
					position: Browser.Engine.trident4 ? 'absolute' : 'fixed',
					top:  (window.getSize().y / 2 - 139 + (Browser.Engine.trident4 ? getScroll().y : 0)),
					left:(window.getSize().x / 2 - 175)
				});
			}
		}
		motorola.shareThis.popup = function() {
			try {
				oldpopup.run(arguments,this);
			} catch (e) {
				$$('#stwrapper, #stframe').setStyle('visibility','visible');
				shareThisCallback(motorola.shareThis);
			}
			if ($('stwrapper')) { fixStwrapper(); }
			else { fixStwrapper.delay(1); }
		};
	})();
	$$('.shareThis').each(function(share) { motorola.shareThis.attachButton(share); });
});
window.addEvent('load',function() {
	motorola.utils.showContent();
	var url = "" + window.location;
	if (!url.contains('print=true')) {
		motorola.utils.setupSlider($('more-description'),$('expand-description'),$('collapse-description'), true);
		motorola.utils.setupSlider($('more-legal'),$('expand-legal'),$('collapse-legal'), !Browser.Engine.gecko);
	}
	if (!window.dcsMultiTrack) {
		window.dcsMultiTrack = function() {
			var str = $A(arguments).join(",");
			alert(str);
		};
	}
});

