function Site() {

	window.thisSite = this;

	// Parse arguments and create site properties
	for (i=0; i<arguments.length; i++) {
		for (j in arguments[i]) {
			this[j] = arguments[i][j];
		}
    }

	// Include Javascripts
	this.include = function(url, haCheck) {
		var scriptTag = document.createElement('script');
		var scriptPath;
		var delimiter;
		var haParam; // Parameter used for syndication caching.
		this.root.indexOf('preview') == -1
			? scriptPath = this.root + '/cm/quickandsimple/scripts/'
			: scriptPath = this.root + '/cm/quickandsimple/scripts/preview/';
		url.indexOf('/') == -1
			? url = scriptPath + url + '.js'
			: url;
		url.indexOf('?') == -1
			? delimter = '?'
			: delimiter = '&';

		if (typeof getQueryVariable('ha') != 'undefined' && haCheck == true) {
			haParam = delimiter + 'ha=1';
		} else {
			haParam = '';
		};		
	
		scriptTag.type='text/javascript';
		scriptTag.src = url;
		document.getElementsByTagName('head')[0].appendChild(scriptTag);
	}	

	// Call scripts that do not require the DOM
	//this.include('http://services.hearstmags.com/registration/get_hearst_user.js', true);
	//this.include('/registration/get_mag_user.js', true);
	//if (this.amsAdsScriptSRC) this.include(this.amsAdsScriptSRC, true);

	// Initiate Site object (This requires DOM)
	if (typeof Site._init == 'undefined') {
		this.initialize = function() {
			
			// Indicate javascript is enabled for js-specific styles
			$('body').removeClass('no_js').addClass('js');

			// Rewrite HTML accessible items that use javascript
			this.include('login');
			this.rewriteModules();
			this.rewriteLinks();
									
			// Attach events
			this.include('events');
			
			// Load form validator
//			this.include('validator');
			
			// Template-contingent scripts
			switch (this.templateFileName.valueOf()) {
				
				case 'channel':
					this.include('see_it');
					this.rewriteGroupee();			
					break;
				case 'subchannel':
					this.include('see_it');
					break;					
				case 'landing_blog':
					this.enableViralTools();
					break;
				case 'archive_blog':
					this.enableViralTools();
					break;
				case 'landing_video':
					this.getVideo();
					break;
/*
				case 'login':
					this.include('/cm/shared/scripts/cookieTest.js');
					break;
*/
				case 'preview':
					this.include('preview');
					break;
				case 'search':
//					this.include('search');
					break;
				case 'horoscopes':
					this.include('horoscopes');
					break;
			}
			// Blog Templates
			if (this.templateFileName.valueOf().substr(-5) == '_blog') this.include('blog');
			// Recipe Finder
			//if (this.templateFileName.valueOf().substr(0,2) == 'rf') this.include('rf');

			// Content type-contingent scripts
			if (this.articleTypePrefix) {
				this.enableKeywordSearch();
				this.enableViralTools();
				//this.include('comments');
				if (this.allowRateThis == 1) this.enableRating();
				if (this.allowComment == 1) this.enableComments();				
				switch (this.articleTypePrefix.valueOf()) {
					case 'article':
						this.enableTextResize();
						break;
					case 'flipbook':
						this.include('flipbook');
						break;
					case 'gallery':
						this.enableTextResize();
						break;
					case 'qsp':
						break;
					case 'site_magazine':
						$('#on_the_go h4.newsletter').trigger('click');
						break;
					case 'video_clip':
						this.getVideo();
						break;
					default:
				}
			}
			
			// Show Magazine Tab in 'On the Go Module'
//			$('#on_the_go h4.magazine').trigger('click');
		
			Site._init = true;
		}
	}
	
	this.rewriteModules = function() {
		$('.tab_module>.cbs>.cbc').each(
			function(i) {
				var currentTab = $(this).children('.tabs').children('h4:first');
				var tabClass = currentTab.attr('class').split(' ');
				currentTab.addClass('click');					
				$(this).children('.content').children('div').not('.' + tabClass[0]).hide();
			}
		);
		// Restyle Groupee content islands in 'talk with club q&s' module
		$('#talk_with_club .content .hot_topics *, #talk_with_club .content .meet_our_members *,').removeAttr('style');
	}
	
	this.rewriteLinks = function() {
		// Pop up newsletter links in new window
		$('#global_header ul.links .newsletters').click(
			function() {
				window.open($(this).attr('href') ,'newsletter','width=470 , height=640 , top=200 , left=200, toolbar=0 , menubar=no , status=no , scrollbars=no , resizable=0');
				return false;
			}
		);
	}

	this.rewriteGroupee = function() {
		$('.groupee *').removeAttr('style');
		$('.groupee .ev_input').css('cursor','pointer').parent().css('text-align','right')
	}
		
	
	// Build See More/Search Keyword Links
	this.enableKeywordSearch = function(keywordSource, domDestination) {
		if (typeof keywordSource == 'undefined') var keywordSource = $('head meta[name=keywords]').attr('content');
		if (typeof domDestination == 'undefined') var domDestination = '.see_more';
		var keywordArray = keywordSource.split(',');
		var keywordHTML = '<span>See More:</span> ';
		var keywordsReturned = keywordArray.length || 6;
		for(i=0; i<keywordsReturned; i++) {
			// Remove leading spaces
			if (keywordArray[i].indexOf(' ') == 0) {
				keywordArray[i] = keywordArray[i].substr(1,keywordArray[i].length - 1);
			}
			// Create search link 
			keywordHTML += '<a href="/search/?q=' + (keywordArray[i]).replace(/^\s+|\s+$/g,'').replace(/\s/g,'+') + '">' + keywordArray[i] + '</a>';
			if (i+1 != keywordArray.length) keywordHTML += ', ';
		}
		$(domDestination).html(keywordHTML);
	}
	
	this.enableViralTools = function() {
		if (this.allowEmailThis == 1) {
			$('.viral_toolbar .email').removeAttr('href').removeAttr('target').click( function() {
				window.thisSite.emailFormWindow = window.open('/email-this' + window.thisSite.sectionPath + window.thisSite.urlName, 'emailForm', 'width=430,height=366,resizable=no,toolbar=no,location=no,directories=no,status=no,menubar=no,copyhistory=no');
				window.thisSite.emailFormWindow.focus();
			});
		}
		
		if (this.allowPrintThis == 1) {
			$('.viral_toolbar .print').removeAttr('href').removeAttr('target').click( function() {
				window.thisSite.printWindow = window.open('/print-this' + window.thisSite.sectionPath + window.thisSite.urlName + '?page=all', 'print', 'width=800,height=600,resizable=no,toolbar=no,scrollbars=yes,location=no,directories=no,status=no,menubar=no,copyhistory=no');
				window.thisSite.printWindow.focus();
			});
		}
		
		// Hover Event (Share Menu Button)
		$('.viral_toolbar .tools .share').hover(
			function(e) {
				$(this).addClass('hover');
				$(this).children('.menu').show();
			},
			function(e) {
				$(this).removeClass('hover');
				$(this).children('.menu').hide();				
			}
		);
	
		// Viral Toolbar - Kaboodle Script
		this.addToKaboodle = function() {
			var dkbdl=document;
			var skbdl=dkbdl.createElement('script');
			skbdl.type='text/javascript';
			skbdl.src='http://www.kaboodle.com/zg/addbutton.js';
			dkbdl.getElementsByTagName('head')[0].appendChild(skbdl);
			return false;
		}
		
		$('.viral_toolbar .tools .kaboodle').click(
			function() {
				window.thisSite.addToKaboodle();	
/*
//				This should work instead of the above function. Give it a shot.
				alert('click');
				window.thisSite.include('http://www.kaboodle.com/zg/addbutton.js');
*/

			}
		);		
	}
	
	this.enableRating = function() {
		var offStar = '/cm/quickandsimple/images_tmpl/gra_rate_star_off.gif';
		var onStar = '/cm/quickandsimple/images_tmpl/gra_rate_star_on.gif';
		this.newRating = new Number();
		this.newRating = Math.round(this.articleRating / 2);
		
		if (this.articleTypePrefix == 'qanda') {
			$('.rate_this').remove().insertBefore('.content_unit_footer div.see_more');
		}

		$('.rate_this img').mouseover(
			function(e) {
				$('.rate_this img').attr('src', offStar);
				$('.rate_this img:lt(' + $(this).attr('rating') + ')').attr('src', onStar);	
			}
		);
		$('.rate_this').mouseout(
			function(e) {
				$('.rate_this img').attr('src', offStar);
				$('.rate_this img:lt(' + (QS.newRating) + ')').attr('src', onStar);
			}
		);
		
		$('.rate_this img').click(
			function(e) {
				var userRating = parseInt($(this).attr('rating'))*2;
				var url = QS.root + '/rate-this/' + QS.urlName + '/' + userRating;				
				$('.rate_this img').unbind();
				QS.newRating = QS.getRating(url);
				$('.rate_this img').css('cursor', 'auto');
				$('.rate_this').append('<span>&nbsp;Your rating has been sent.</span>')
			}
		);
	}
	
	this.getRating = function(url) {
		$.get(
			url,
			function(data){
				return(data);
			}
		);
	}	


	this.enableComments = function() {
		
	}	
	
	this.enableTextResize = function(resizeElements) {
		var defaultElements = '#content_well p'
		!resizeElements ? resizeElements = defaultElements : resizeElements;
		var textSizeHTML = '\
			<!-- JS text_size -->\n\
			<div class="text_size">\n\
				<span>Text Size:</span>\n\
				<span class="small button"><img src="/cm/quickandsimple/images_tmpl/btn_text_sml.gif" /></span>\n\
				<span class="medium button"><img src="/cm/quickandsimple/images_tmpl/btn_text_med.gif" /></span>\n\
				<span class="large button"><img src="/cm/quickandsimple/images_tmpl/btn_text_lrg.gif" /></span>\n\
			</div>\n\
			<!-- /JS text_size -->\n';
		
		$('.viral_toolbar').eq(0).prepend(textSizeHTML);		
		
		// Save original font-size/line-height to an attribute.
		$(resizeElements).each(
			function(i){
				$(this).attr(
					{ baseFontSize:parseInt($(this).css('font-size')) }
				)
				$(this).attr(
					{ baseLineHeight:parseInt($(this).css('line-height')) }
				)
			}
		);
		
		// Hover Event
		$('.text_size .button').hover(
			function(e) {
				$(this).addClass('hover');
			},
			function(e) {
				$(this).removeClass('hover');
			}
		);
		
		// Click Event
		$('.text_size .button').click(
			function(e) {
				e.stopPropagation();
				
				// First 'class' value should be small, medium, or large
				var textSize = $(this).attr('class').split(" ")[0];
				var fontSizeFactor, lineHeightFactor;
				
				// Designate this button as clicked
				$('.text_size .on').removeClass('on');
				$(this).addClass('on');
				
				// Evaluate which button was clicked
				switch (textSize.valueOf()) {
					case 'small':					
						sizeFactor = 1;
						break;
					case 'medium':
						sizeFactor = 1.15;
						break;
					case 'large':
						sizeFactor = 1.33;
						break;
				}
				
				// Multiply each element by appropriate value for new size/height
				$(resizeElements).each(
					function(i) {						
						$(this).css(
							{
								fontSize:parseInt($(this).attr('baseFontSize') * sizeFactor) + 'px',
								lineHeight:parseInt($(this).attr('baseLineHeight') * sizeFactor) + 'px'
							}
						);
					}
				);
			}
		);
			
		
		// Set Default Text Size
		$('.text_size .small.button').trigger('click');
	}	
	
	// Flash Embed Conditions (assumes swfobject.js)
	this.flash = function(swfID, containerNode, instance) {
		!swfID || swfID == 'default' ? swfID = 'flash_object' + Math.floor(Math.random()*10E6) : swfID;
		!containerNode ? containerNode = $('#' + swfID) : containerNode;
		!instance ? instance = swfID : instance;
		
		containerNode.length == 0 ? containerNode = $('body') : containerNode;
		
		var swfVersion = '9.0.45.0';
		var swfQuality = 'high';
		var expressInstallerURL = '/cm/shared/ria/swfObject1.5/expressinstall.swf';
		var swfBase, swfURL, swfHeight, swfWidth, swfBG;
		var swfVars = {};
		var swfParams = {
			menu:false,
			quality:'best',
			scale:'noscale',
			salign:'tl',
			wmode:'opaque',
			bgcolor:'',
			base:''
		};
		var swfAttr = {
			id:swfID	
		}
		
		switch (instance) {
			case 'promoplayer':
				swfBase = '/cm/quickandsimple/flash_tmpl/promoplayer/v01/';
				swfURL = swfBase + 'master_template.swf';
				swfHeight = 310;
				swfWidth = 626;
				swfVars['xmlfile'] = this.promoPlayerXML;
				swfParams.base = swfBase;
				break;
			case 'recipe_image':
				swfBase = '';
				swfURL = '/cm/shared/recipefinder2/flash/image_holder_v2.swf';
				expressInstallerURL = '/cm/shared/recipefinder2/flash/expressinstall.swf';
				swfWidth = containerNode.width();
				swfHeight = parseInt(containerNode.width() / containerNode.children('img').width() * containerNode.children('img').height());
				swfVars = {
					imgSrc:containerNode.children('img').attr('src'),
					maxWidth:swfWidth,
					divId:swfID
				}
				break;
		}
		if ($('#' + swfID).length == 0) {containerNode.prepend('<div id="' + swfID + '">You need the Adobe Flash Player to view this movie.  Please <a href="http://www.adobe.com/go/getflashplayer" target="_blank">click here</a> to go to Adobe\'s download page.</div>');}
		swfobject.embedSWF(swfURL, swfID, swfWidth, swfHeight, swfVersion, expressInstallerURL, swfVars, swfParams, swfAttr);
	}
	
	this.getVideo = function(uid) {
		var mavenAccount = 'hearst-quickandsimple-pub01-live';
		var mavenPlayer = '#video_player';
		var defaultPlayer = 'main_player';
		var targetPlayer = initialPlayer = 'http://video.hearstdigital.com:80/mms/rt/1/site/' + mavenAccount + '/current/launch.html';
		var defaultVideo = initialPlayer + '?maven_playerId=' + defaultPlayer;
		var videoPlayerId, videoReferrer, vidReferralPlaylistId, videoReferralObject;
		if (uid) {
			videoPlayerId = defaultPlayer;
			vidReferralPlaylistId = Videos.clipIndex[uid].playlistID;
			videoReferralObject = uid;
		} else if (getQueryVariable('maven_playerId')) {
			videoPlayerId = (getQueryVariable('maven_playerId')) ? getQueryVariable('maven_playerId') : getQueryVariable('playerId');
			videoReferrer = (getQueryVariable('maven_referrer')) ? getQueryVariable('maven_referrer') : getQueryVariable('referrer');
			vidReferralPlaylistId = (getQueryVariable('maven_referralPlaylistId')) ? getQueryVariable('maven_referralPlaylistId') : getQueryVariable('referralPlaylistId');
			videoReferralObject = (getQueryVariable('maven_referralObject')) ? getQueryVariable('maven_referralObject') : getQueryVariable('referralObject');
		} else {
			targetPlayer = defaultVideo;
		}
		if (typeof videoPlayerId != 'undefined') targetPlayer += '?maven_playerId=' + videoPlayerId;
		if (typeof videoReferrer != 'undefined') targetPlayer += '&maven_referrer=' + videoReferrer;
		if (typeof videoReferralPlaylistId != 'undefined') targetPlayer += '&maven_referralPlaylistId=' + videoReferralPlaylistId;
		if (typeof videoReferralObject != 'undefined') targetPlayer += '&maven_referralObject=' + videoReferralObject;
		if (defaultVideo) targetPlayer = (targetPlayer == initialPlayer) ? defaultVideo : targetPlayer ;
		$(mavenPlayer).attr('src',targetPlayer);
	}
}

