$(document).ready(function () {
	var digitalOptionController = (function () {
		var masterList = [], truncList = [];
		var isMaster = true;
		var sizeRx = /\s*(\d+(?:\.\d+)?)\s*[Xx]\s*(\d+(?:\.\d+)?)\s*/;
		var wordageRx = /\s*(\d+)\s-\s\w*\s*/;
		var maxDigitalWidth = 12;
		var maxDigitalHeight = 18.5;
		var listSwitcher = function (isDigital) {
			if (!isDigital) {
				if (isMaster) {
					quantitier.empty();
					for (var i = 0; i < truncList.length; i++) {
						quantitier.append(truncList[i]);
					}
					isMaster = false;
				}
			} else {
				if (!isMaster) {
					quantitier.empty();
					for (var i = 0; i < masterList.length; i++) {
						quantitier.append(masterList[i]);
					}
					isMaster = true;
				}				
			}
		};
		// controls the option that are enabled / disabled for digital printing
		var offsetPapers = ["20pt_kraftboard"];
		var paperer = $(":input[name=paper]");
		var sizer = $(":input[name=brochureSize], :input[name=postcardSize]");
		var quantitier = $(":input[name=quantity]");
		quantitier.children().each(function (i) {
			var wordage = $(this).clone();
			var wordageTrunc = wordageRx.exec(wordage.html());
			if (wordageTrunc) {
				truncList.push(wordage.html(wordageTrunc[1]));
			}
			masterList.push(this);
		});		
		
		var offsetNoteOn = $("div#offsetNoteON");
		var offsetNoteOff = $("div#offsetNoteON");
		
		var digitalChecks = [];
		var runDigitalChecks = function () {
			var canShowDigital = true;
			for (var i = 0; i < digitalChecks.length; i++) {
				canShowDigital = canShowDigital && !digitalChecks[i]();
			}
			var oldVal = quantitier.val();
			listSwitcher(canShowDigital);
			quantitier.val(oldVal);
			if (offsetNoteOn && offsetNoteOff) {
				if (!canShowDigital) {
					offsetNoteOff.hide();
					offsetNoteOn.show();
				} else {
					offsetNoteOff.show();
					offsetNoteOn.hide();				
				}
			}
		};
		if (masterList.length > 0 && masterList.length === truncList.length) {
			if (sizer && (typeof sizer.val() != "undefined")) {
				var checkOffsetSize = function (sizeStr) {
					var m = sizeRx.exec(sizeStr);
					if (m) {
						var width = Math.min(m[1], m[2]);
						var height = Math.max(m[1], m[2]);	
						return (width > maxDigitalWidth || height > maxDigitalHeight);
					}
					return false;
				};
				digitalChecks.push(function () {
					return checkOffsetSize(sizer.val());
				});
				sizer.change(runDigitalChecks);
			}
			if (paperer) {
				var checkOffsetPaper = function (paperVal) {
					var offsetPaper = false;
					for (var i = 0; i < offsetPapers.length; i++) {
						if (paperVal === offsetPapers[i]) {
							offsetPaper = true;
						}
					}
					return offsetPaper;
				};
				var hasOffsetPaper = false;
				paperer.children().each(function () {
					if (checkOffsetPaper(this.value)) {
						hasOffsetPaper = true;
					}
				});
				if (hasOffsetPaper) {
					digitalChecks.push(function () {
						return checkOffsetPaper(paperer.val());
					});
					paperer.change(runDigitalChecks);
				}
			}
		}
		runDigitalChecks();
	})();
});