cwm = {} // Namespace

// Site Specific Functionality
cwm.site = {
	AssignSmileyCopy: function() {
		if ( document.body.id != 'smileys' ) return;

		$('#center .content p a').bind('click', function() {
			document.location = this.href;
			return false;
		});

		$('#center .content p').each(function() {
			$(this).bind('mouseover', function() {
				$(this).addClass('hover');
			});

			$(this).bind('mouseout', function() {
				$(this).removeClass('hover');
			});

			var re = new RegExp('(http://[a-zA-Z0-9\.]+\.com/(s/)?)');

			$(this).bind('click', function() {
				var smiley = $('img', this).attr('src');
				smiley = smiley.replace(re, '');
				_gaq.push(['_trackEvent', 'smiley', 'click', smiley]);
				
				var smileytext = document.getElementById('smileytext');
				smileytext.value = '';
				var div = $('<div class="smiley_anim" style="width: ' + this.offsetWidth + 'px; height: ' + this.offsetHeight + 'px; position: absolute; top: ' + cwm.dom.getPos(this).y + 'px; left: ' + cwm.dom.getPos(this).x + 'px;">' + $(this).children('span').attr('innerHTML') + '</div>');
				div.appendTo(document.body);
				$(div).animate(
					{
						left: cwm.dom.getPos(smileytext).x,
						top: cwm.dom.getPos(smileytext).y,
						height: smileytext.offsetHeight,
						width: smileytext.offsetWidth,
						opacity: 1
					},
					500,
					function() {
						var smileytext = document.getElementById('smileytext');
						smileytext.value = this.innerHTML.replace(/^\s+|\s+$/g,'').replace(/&lt;/, '<').replace(/&gt;/, '>');
						$(this).remove();
						cwm.display.setSelection(smileytext);
						if ( $.browser.msie ) {
							if ( document.execCommand('Copy') ) {
								cwm.site.DisplayClientMessage({message: 'Smiley Copied'});
							}
						}
					}
				);
			});
		});
	},
	AssignSmileyCodeHilight: function() {
		if ( document.body.id != 'smileys' ) return;
		$('#smileytext').bind('focus', function() {
			this.select();
		});
		$('#center .content p span').bind('click', function() {
			cwm.display.setSelection(this);
			if ( $.browser.msie && document.execCommand('Copy') ) cwm.site.DisplayClientMessage({message: 'Smiley Copied'});
			return false;
		});
	},
	DisplayClientMessage: function(params) {
		var div = $('<div class="cwm_msg" style="position: absolute;">' + params.message + '</div>');
		div.appendTo(document.body);

		var viewport = cwm.dom.getViewport();

		var scrollTop = (typeof document.body.scrollTop != 'undefined') ? document.body.scrollTop: window.scrollY;
		var scrollLeft = (typeof document.body.scrollLeft != 'undefined') ? document.body.scrollLeft: window.scrollX;

		div.css('top', (viewport.height / 4 - div[0].clientHeight / 2 + scrollTop) + 'px');
		div.css('left', (viewport.width / 2 - div[0].clientWidth / 2 + scrollLeft) + 'px');

		$(div).animate(
			{
				top: 0,
				opacity: 0
			},
			3000,
			function() {
				$(this).remove();
			}
		);
	}
}

// Document Object Model Functionality
cwm.dom = {
	getPos: function(o) {
		var oX = o.offsetLeft;
		var oY = o.offsetTop;
	
		while (o.offsetParent) {
			oX += o.offsetParent.offsetLeft;
			oY += o.offsetParent.offsetTop;
			o = o.offsetParent;
		}

		return {x: oX, y: oY};
	},

	getViewport: function() {
		var vw;
		var vh;
		
		if ( typeof window.innerWidth != 'undefined' ) {
			vw = window.innerWidth;
			vh = window.innerHeight;
		} else if ( typeof document.documentElement != 'undefined' && typeof document.documentElement.clientWidth != 'undefined' && document.documentElement.clientWidth != 0 ) {
			vw = document.documentElement.clientWidth;
			vh = document.documentElement.clientHeight;
		} else {
			vw = document.getElementsByTagName('body')[0].clientWidth;
			vh = document.getElementsByTagName('body')[0].clientHeight;
		}
		return {width: vw, height: vh};
	}
}

// Display Functionality
cwm.display = {
	setSelection: function(o) {
		var range;
		if ( o.type && o.type == 'text' ) {
				o.select();
		} else if ( document.selection ) {
			range = document.body.createTextRange();
			range.moveToElementText(o);
			range.select();
		} else if ( window.getSelection ) {
			range = document.createRange();
			range.selectNodeContents(o);
			var selection = window.getSelection();
			selection.removeAllRanges();
			selection.addRange(range);
		}
	}
}

// Initialization
$(document).ready(function() {
	// Index
	cwm.site.AssignSmileyCodeHilight();
	cwm.site.AssignSmileyCopy();
});
