/*
$Date: 2007-06-27 00:15:11 $
$Revision: 1.4 $
*/

var EventHandler = new Class({
	event: {},
	trackActions: [],

	options: {
		onPassCheck: Class.empty
	},

	initialize: function(events, options) {
		options = options || {};
		if (options.invalidClass && $type(options.invalidClass) == 'string')
			options.invalidClass = [options.invalidClass];
		this.setOptions(this.options, options);
		if ($type(events) != 'array') events = [events];
		$each(events, function(anEventGroup) {
			this.trackEvent(anEventGroup);
		}.bind(this));
	},
	
	trackEvent: function(eSpecsGroup) {
		eSpecsGroup.actions = this.makeArray(eSpecsGroup.actions);
		this.trackActions.push(eSpecsGroup);
		$each(eSpecsGroup.actions, function(anAction) {
			if (eSpecsGroup.target == 'window') {
				window.addEvent(anAction, function(e) {
					this.actionMonitor(e);
				}.bind(this));
			} else {
				document.addEvent(anAction, function(e) {
					this.actionMonitor(e);
				}.bind(this));
			}
		}.bind(this));
	},
	
	makeArray: function(array) {
		if (array == undefined) return false;
		if ($type(array) == 'string') array = [array];
		for (var i=0; i<array.length; i++)
			array[i] = array[i].toLowerCase();
		return array;
	},
	
	actionMonitor: function(event) {
		try {
			this.event = new Event(event);
		} catch(e) {
			this.fireEvent("onPassCheck");
			return;
		}
		if (this.validClass()) {
			this.fireEvent("onPassCheck");
		}
	},
	
	validClass: function() {
		var action = this.trackActions.filter(function(anAction) {
			return anAction.actions.test(this.event.type);
		}.bind(this));
		
		if (action.length) {
			if (!action[0].invalidClass) {
				return true;
			}
			chkClass = ($type(action[0].invalidClass == 'string')) ? [action[0].invalidClass] : action[0].invalidClass;

			var inAValidClass = chkClass.some(function(aClass) {
				var pn = this.event.target;
				while (pn != document.body) {
					try {
						if (pn.hasClass(aClass)) return true;
						pn = pn.getParent();
					} catch(e) {
						return false;
					}
				};
				return false;
			}.bind(this));

			return !inAValidClass;
		}
	}
});
EventHandler.implement(new Options);
EventHandler.implement(new Events);

var assignTest = new Class({
	buckets: [],
	assignedBucket: null,
	inTest: true,
	options: {
		onInitialize: Class.empty
	},

	initialize: function(buckets, options) {
		this.buckets = ($type(buckets) == 'array') ? buckets : [buckets];
		this.setOptions(options);
		var testBypass = window.getQueryStringValue('bucket');
		if (testBypass && this.buckets.test(testBypass)) {
			this.assignedBucket = testBypass;
			this.inTest = false;
		} else {
			this.assignedBucket = Cookie.get('craveGalleryBucket');
			if (!this.assignedBucket) {
				this.assignedBucket = this.pickBucket();
			}
			Cookie.set('craveGalleryBucket', this.assignedBucket, {
				path: '/',
				duration: '31'
			});
			if (!Cookie.get('craveGalleryBucket')) {
				this.assignedBucket = this.buckets[0];
				this.inTest = false;
			}
		}

		this.dwPing('OfferTest', this.assignedBucket);
		this.dwPing('cravead','impression');
		this.fireEvent("onInitialize",[this.assignedBucket]);
	},
	
	pickBucket: function() {
		return this.buckets[$random(0,this.buckets.length-1)];
	},

	getDWpath: function() {
		var dwurl = "http://dw.com.com/redir?destUrl=http://i.i.com.com/cnwk.1d/b.gif&"
			+"edid="+PageVars.editionId
			+"&oid="+PageVars.oid
			+"&ontid="+PageVars.nodeId
			+"&siteid="+PageVars.siteId
			+"&ptId="+PageVars.pageType
			+"&asId="+PageVars.assetId;
		return dwurl;
	},
	
	dwPing: function(ctype, cval) {
		if (!this.inTest) return false;
		var ping = new Image();
		var pingSrc = this.getDWpath();
		pingSrc += "&ctype="+ctype;
		pingSrc += "&cval="+cval;
		ping.src = pingSrc;
	}
});
assignTest.implement(new Options);
assignTest.implement(new Events);

var initSlideShow = function(bucketName) {

	window.addEvent("domready", function() {
		if ($E('#wfSlideInfo .slide').offsetHeight > $('wfSlideInfo').offsetHeight)
			$('wfSlideInfo').setStyle('height',$E('#wfSlideInfo .slide').offsetHeight+"px");
		$ES('a.previous').each(function(aNavClick) {
			aNavClick.addEvent('click', function() {
				userTestStats.dwPing('photonav','Prev');
			});
		});
	
		$ES('a.next').each(function(aNavClick) {
			aNavClick.addEvent('click', function() {
				userTestStats.dwPing('photonav','Next');
			});
		});
	});

	if (bucketName == 'crave.pv.new') return false;

	new EventHandler(
		[
			{actions:['keypress','mousedown','mouseout','mouseover'], invalidClass: 'madison_ad', target: 'document'},
			{actions:['scroll','resize'], target: 'window'}
		],
		{
			onPassCheck: function() {
				refreshAds();
			}
		}
	);
	
	window.addEvent("domready", function() {
		craveSlideShow = new CNETGallery.Presentation({
			getSlideIds: galleryIds,
			initialSlide: slideshowSlideNum,
			siteData: {
				siteId: PageVars.siteId,
				pagetype: 4328,
				nodeId: PageVars.nodeId
			},
			frameData: {
				photoFrame: 'wfSlideInfo',
				nextButton: $E('#nextprevButtons .next'),
				prevButton: $E('#nextprevButtons .previous'),
				currentIndicator: 'slideNum',
				totalIndicator: 'totalNum',
				swapDuration: 200,
				slideTemplate: 'slideTemplate'
			}
		});

		if (bucketName == 'crave.ajax3.new')
			waitTime = 3000;
		else
			waitTime = 7000;
	});

};


var userTestStats = new assignTest(['crave.pv.new','crave.ajax3.new','crave.ajax7.new'], {
	onInitialize: function(bucketName) {
		initSlideShow(bucketName);
	}
});

var adRefreshPing = function() {
	userTestStats.dwPing('cravead','impression');
};
