function initPreview() {
	$$('.refresh_preview').invoke('observe', 'click', refreshPreview);
	setTimeout ( "refreshPreview(true)", 500 );
}

function refreshPreview(effects) {
	var debug = false;
	var printPreviewOut = '';
	var webPreviewOut = '';
	var rawContent = getEditorContent();
	var wordcount = getWordCount(rawContent);
	var over_25_count = 0;
	if((wordcount - 25) > 0) over_25_count = wordcount - 25;
	
	var boldcount = countBoldWords(rawContent);
	
	var links = getLinkText(rawContent);
	var linkcount = links.length;
	
	
	//update page with data
	$('ClassifiedAdWordcount').value = wordcount;
	$('ClassifiedAdBillWordCount').value = wordcount;
	$('ClassifiedAdBillOver25Count').value = over_25_count;
	$('wordcountspan').innerHTML = wordcount;
	$('over25countspan').innerHTML = over_25_count;
	$('ClassifiedAdBillBoldCount').value = boldcount;
	$('boldcountspan').innerHTML = boldcount;
	$('ClassifiedAdBillHotlinkCount').value = linkcount;
	$('hotlinksspan').innerHTML = linkcount;
	
	if(parseInt(wordcount) < 1) {
		return false;
	}
	
	//update preview window
	var adcopyRE = /<p>(.*)?<\/p>/gi;
	while ((guts = adcopyRE.exec(rawContent)) != null) {
		webPreviewOut = webPreviewOut + guts[1];
	}
	
	printPreviewOut = stripLinks(webPreviewOut);
	
	if($('adpreview')) {
		$('adpreview').innerHTML = printPreviewOut;
	}
	
	if($('online_adcopy')) {
		$('online_adcopy').innerHTML = webPreviewOut;
	}
	
	if($('ClassifiedAdBillAdStyleId')) {
		var styleID = $F('ClassifiedAdBillAdStyleId');
		var bstyle = adstyles[styleID].css;
		if($('adPreviewBox')) {
			//update class of adPreviewBox with current border style
			var boxClass = $('adPreviewBox').className;
			if(bstyle != 'none') {
				$('adPreviewBox').className = 'adPreviewBox '+bstyle;
			} else {
				$('adPreviewBox').className = 'adPreviewBox';
			}
			if(bstyle == 'reverse') {
				//if the camera icon is present, make sure the div is using the reverse version
				if(Object.isElement($('camera')) ) {
					if($('camera').hasClassName('camera')) {
						$('camera').removeClassName('camera');
					}
					$('camera').addClassName('camera_reverse');
				}
				var startColor = '#66ffff';
				var endColor = '#000000';
				var restoreColor = endColor;
			} else {
				//if the camera icon is present, make sure the div is using the normal version
				if(Object.isElement($('camera')) ) {
					if($('camera').hasClassName('camera_reverse')) {
						$('camera').removeClassName('camera_reverse');
					}
					$('camera').addClassName('camera');
				}
				var startColor = '#ffff99';
				var endColor = '#ffffff';
				var restoreColor = endColor;
			}
			if(effects) {
				new Effect.Highlight('adPreviewBox', {startcolor: startColor, endcolor: endColor, restorecolor: restoreColor});
				new Effect.Highlight('online_adcopy');
				// new Effect.Highlight('totalCostRow1');
				// new Effect.Highlight('totalCostRow2');
				new Effect.Highlight('totalCost');
			}
			
		}
	}
	
	
	if(debug) {
		console.log('rawcontent: '+rawContent);
		console.log('wordcount: '+wordcount);
		console.log('over_25_count: '+over_25_count);
		console.log('boldcount: '+boldcount);
		console.log('linkcount: '+linkcount);
		
	}
	
	//calcCost(); //in adcost.js, initiallized in tablesController
	ac.calcCost();
	return false;
}

function getEditorContent() {
	if(typeof(tinyMCE) != 'undefined') {
		return tinyMCE.activeEditor.getContent();
	} else {
		alert('tinyMCE is undefined');
		return '';
	}
}

function getWordCount(taggedText) {
	var dirtyText = taggedText;
	var text = dirtyText.stripScripts().stripTags();
	if(text.blank()) {
		return 0;
	}
	var wordArray = text.split(' ');
	// console.log('counting words in: '+text+' = '+wordArray.length);
	// compensate for 2 word phone numbers

	if(wordArray.length > 0) {
		var wc = wordArray.length;
		var phoneCount = 0;
		var phoneRE = /\({0,1}\d{3}\){0,1}\s\d{3}-{0,1}\s{0,1}\d{4}/gi;
		while ((phoneMatch = phoneRE.exec(text)) != null) {
			phoneCount++;
		}
		if(phoneCount) {
			wc -= phoneCount;
		}
		return wc;
	} else {
		return 0;
	}
	
}

function countBoldWords(taggedText) {
	var boldTexts = [];
	var boldCount = 0;
	var bRE = /<b>(.*?)<\/b>/gi;
	var strongRE = /<strong>(.*?)<\/strong>/gi;
	while ((boldPhrase = bRE.exec(taggedText)) != null) {
		var boldLinks = getLinkText(boldPhrase[1]);
		if(boldLinks.length > 0) {
			for (var j = 0; j < boldLinks.length; j++) {
				boldTexts.push(boldLinks[j]);
			}
		} else {
			boldTexts.push(boldPhrase[1]);
		}
	}
	while ((strongPhrase = strongRE.exec(taggedText)) != null) {
		var strongLinks = getLinkText(strongPhrase[1]);
		if(strongLinks.length > 0) {
			for (var k = 0; k < strongLinks.length; k++) {
				boldTexts.push(strongLinks[k]);
			}
		} else {
			boldTexts.push(strongPhrase[1]);
		}
	}
	// console.log('boldTexts.length: '+boldTexts.length);
	if(boldTexts.length > 0) {
		for(var i = 0; i < boldTexts.length; i++) {
			boldCount = boldCount + getWordCount(boldTexts[i]);
		}
	} 
	// console.log('boldCount: '+boldCount);
	return boldCount;
}

function getLinkText(taggedText) {
	var linkRE = /<a .*?>(.*?)<\/a>/gi;
	var linkTexts = [];
	while ((link = linkRE.exec(taggedText)) != null) {
		linkTexts.push(link[1]);
		// console.log('found link in: '+link[0]);
	}
	return linkTexts;
}

function stripLinks(linkedText) {
	var linkRE = /<a .*?href="([^"]+)?".*?>.*?<\/a>/gi;
	var linkTexts = [];
	var out = linkedText;
	while ((link = linkRE.exec(linkedText)) != null) {
		// console.log(link);
		out = out.replace(link[0], link[1]);
	}
	// console.log('out: ' + out);
	return out;
	
}
