 /**
* hoverIntent r5 // 2007.03.27 // jQuery 1.1.2+
* <http://cherne.net/brian/resources/jquery.hoverIntent.html>
* 
* @param  f  onMouseOver function || An object with configuration options
* @param  g  onMouseOut function  || Nothing (use configuration options object)
* @author    Brian Cherne <brian@cherne.net>
*/
(function($){$.fn.hoverIntent=function(f,g){var cfg={sensitivity:7,interval:100,timeout:0};cfg=$.extend(cfg,g?{over:f,out:g}:f);var cX,cY,pX,pY;var track=function(ev){cX=ev.pageX;cY=ev.pageY;};var compare=function(ev,ob){ob.hoverIntent_t=clearTimeout(ob.hoverIntent_t);if((Math.abs(pX-cX)+Math.abs(pY-cY))<cfg.sensitivity){$(ob).unbind("mousemove",track);ob.hoverIntent_s=1;return cfg.over.apply(ob,[ev]);}else{pX=cX;pY=cY;ob.hoverIntent_t=setTimeout(function(){compare(ev,ob);},cfg.interval);}};var delay=function(ev,ob){ob.hoverIntent_t=clearTimeout(ob.hoverIntent_t);ob.hoverIntent_s=0;return cfg.out.apply(ob,[ev]);};var handleHover=function(e){var p=(e.type=="mouseover"?e.fromElement:e.toElement)||e.relatedTarget;while(p&&p!=this){try{p=p.parentNode;}catch(e){p=this;}}if(p==this){return false;}var ev=jQuery.extend({},e);var ob=this;if(ob.hoverIntent_t){ob.hoverIntent_t=clearTimeout(ob.hoverIntent_t);}if(e.type=="mouseover"){pX=ev.pageX;pY=ev.pageY;$(ob).bind("mousemove",track);if(ob.hoverIntent_s!=1){ob.hoverIntent_t=setTimeout(function(){compare(ev,ob);},cfg.interval);}}else{$(ob).unbind("mousemove",track);if(ob.hoverIntent_s==1){ob.hoverIntent_t=setTimeout(function(){delay(ev,ob);},cfg.timeout);}}};return this.mouseover(handleHover).mouseout(handleHover);};})(jQuery);// End hoverIntent
  var obj = null;

  function checkHover() {
      if (obj) {
         obj.find('ul').fadeOut('medium');
		
		 obj.find('.TopMenuLink  span').css({ "padding-bottom:":"6px" });
      } //if
  } //checkHover


 
 
 function callMe(message) {
			alert(message);
		 }
		 


function closeVideo(container) {
	$(container).hide();
	$('#overlay').fadeOut("medium" );
	
	
				
}
		
function openVideo(containerID, URL, videoID, Name, Category,PDKVersion) {
	
	var framename = 'PDKPlayer';
	var playername='/store/PDK/4_0_3/PreviewPlayer.html';
	
	if (containerID=='musicplayer')
	{
		framename='musicplayeriframe';
		playername='/store/PDK/4_0_3/musicplayer.html'
		
		
	}
	
	if (String(containerID).length == 0 || String(containerID)=="null")
		containerID="prodVideo";
	
	if ($('#'+containerID).length==0)
	{
	 var ins= '<div id="'+containerID+'" class="preview" style="display: none;" ><iframe id="PDKPlayer" name="PDKPlayer" width="642px" height="550px" allowtransparency="true" scrolling="no" marginheight="0" marginwidth="0" frameborder="0"></iframe></div><div id="overlay" style="display: none;"></div>';
	 $('body').prepend($(ins));

	}
			
	if ($('#'+containerID).css("display") == "none")
	{
		
		$('#overlay').height($('body').height()).fadeTo("fast",0,
			function() {$(this).show("fast",
				function(){
					$(this).fadeTo("medium",0.5,
			
					function(){
					$('#'+containerID).fadeIn("fast", 
						function(){
						 top.frames[framename].location.href= playername + '?url='+HtmlDecode(URL)+'&player=store:preview:'+Category;
					
					
						});
					});
				});	
			});
	}
	else
	{
		
		top.frames[framename].location.href= playername + '?url='+HtmlDecode(URL)+'&player=store:preview:'+Category;
					
	}
	
	
	
	
	if (typeof videoID == "undefined") {
		videoID = "0";
	}
	if (typeof Name == "undefined") {
		Name = "Unnamed Store Video";
	}		
	if (typeof Category == "undefined") {
		Category = "Store Video Preview";
	}

	


	//GA tracking
	var loc = document.location.toString();
	var seperator = '?';
	if (escape(loc).match('%3F')) {seperator = "&";}
	urchinTracker(document.location.toString() + seperator + "videostart=" + escape(Name));
	
}
		
function TrackVideo(Event, videoID, Name, Category, Pauses, isFullscreen) {
	//Events: "start", "milestone" or "complete".  Required.
	//videoID, Name and Category should be passed in flashvars or xml data.  If they are not defined then default values will be used.
	//Pauses = Optional.  Number of times the video has been paused since last milestone.
	//isFullscreen = Optional, 0 or 1.  Set to 1 if video is in fullscreen mode.
	if (typeof videoID == "undefined") {
		videoID = "0";
	}
	if (typeof Name == "undefined") {
		Name = "Unnamed Store Video"; //Default value for site
	}		
	if (typeof Category == "undefined") {
		Category = "Store Video Preview"; //Default value for site
	}
	if (typeof Pauses == "undefined") {
		Pauses = 0;
	}
	if (typeof isFullscreen == "undefined") {
		isFullscreen = 0;
	}
	var viewmode = "embedded";
	if (isFullscreen == 1) {viewmode = "fullscreen";}
	
	var events = "event14";
	var linktrackvars = "events,";
	var eventName = "Video Milestone Event";
	if (Event == "start") {
		events = "event12";
		eventName = "Video Start";
	}
	else if (Event == "complete") {
		events = "event13, event8";
		linktrackvars = linktrackvars.concat("products,");
		eventName = "Video Complete";
	}
	else {linktrackvars = linktrackvars.concat("products,");}
	
	linktrackvars = linktrackvars.concat("prop39,prop6,prop39,eVar39,prop10,eVar30,eVar6,eVar10,eVar31,eVar32,eVar33,eVar34,eVar35,eVar36,eVar47");
	
	var s_account="comcastexercisetvdev";//set Omniture report account to use
	var loc=document.location.toString();
	if (loc.indexOf("www.exercisetv.tv") >= 0 || loc.indexOf("//exercisetv.tv") >= 0 || loc.indexOf("2www.exercisetv.tv") >= 0)
	{
	s_account="comcastexercisetv";; //comcastondemand not ready yet
	// s_account="comcastexercisetv,comcastondemand";;
	}
	var s=s_gi(s_account);
	s.linkTrackVars=linktrackvars;
	s.linkTrackEvents=events;
	
	s.events=events;
	s.eVar39 = videoID;
	s.prop39=s.eVar30= Name;
	s.prop6=s.eVar6= Category; 
	s.prop10=s.eVar10= viewmode; //possible values are embedded and fullscreen

	if (Event == "milestone" || Event == "complete") {
		if (Pauses > 0) {
			s.products=";;;;event14=25.00|event8=" + Pauses.toString(); ////25% since last milestone | # of pauses between each milestone
		}
		else {
			s.products=";;;;event14=25.00"; ////25% since last milestone	
		}
	}
	s.tl(document.URL,'o', eventName);
	//clear vars
	s.events=s.products=s.eVar8=s.eVar39 = s.prop39=s.eVar30=s.prop6=s.eVar6= s.prop10=s.eVar10="";
}
		
	
function downloadinfo() {
	if(document.getElementById("dlpopup"))
	{
		if ($('#dlpopup').css("display") == "none") {
			$('#dlpopup').slideDown("slow");
			$('.dllink > .text').text("(Hide info)");
			$('.dllink').attr("title","Hide info");
		}
		else {
			 if ($.browser.msie) { $('#dlpopup').hide();}
			 else {$('#dlpopup').slideUp("slow");}
			$('.dllink > .text').text("(Click here to learn more)");
			$('.dllink').attr("title","What does this mean?");
		
		}

	}
	else {
		$('.dllink').after('<div id="dlpopup"><div></div></div>');
			$('#dlpopup > div').load("driver2.aspx?title=Shipping+Information&topic=dlinfo", function() {

			$('#dlpopup').slideDown("slow");
			$('.dllink > .text').text("(Hide info)");
			$('.dllink').attr("title","Hide info");
			
			} );
	/*			$('#dlpopup').click(function(){
					
					 if ($.browser.msie) { $('#dlpopup').hide();}
					 else {$('#dlpopup').slideUp("slow");}
					$('.dllink > .text').text("(Click here to learn more)");
					$('.dllink').attr("title","What does this mean?");
			});*/
		}
}
		
function closedownloadinfo() {
	$('#dlpopup').slideUp("slow");
	$('.dllink > .text').slideDown("slow");
	$('.dllink').attr("title","What does this mean?");	
}
	
function SearchBoxForm_Validator(theForm)
{
  submitonce(theForm);
  if (theForm.SearchTerm.value.length < 3)
  {
    alert('Please enter at least 3 characters in the Search For field.');
    theForm.SearchTerm.focus();
    submitenabled(theForm);
    return (false);
  }
  return (true);
}


//SEQUENCE
function ReleaseEnded(obj)
{
	if (typeof(sequencenum) != 'undefined')
	{
		sequencenum++;

		var list = $('.catslider ul li');

		if (sequencenum < $(list).length)
		{
		
			playClicked($(list).eq(sequencenum).find('a'));
		
		}
	}

}

//Omniture start

function _sTrackQuickCodeSearch(searchterm){
	var s_account="comcastexercisetvdev"
	var loc=document.location.toString();
	if (loc.indexOf("www.exercisetv.tv") >= 0 || loc.indexOf("//exercisetv.tv") >= 0 || loc.indexOf("2www.exercisetv.tv") >= 0) {
		s_account="comcastexercisetv";; //comcastondemand not ready yet
	// s_account="comcastexercisetv,comcastondemand";;
	}
	var s=s_gi(s_account);
	s.linkTrackVars='events,eVar41,eVar31,eVar32,eVar33,eVar34,eVar35,eVar36,eVar47';
	s.linkTrackEvents='event20';
	s.eVar41=searchterm; //search term entered in search box (1234)
	s.events='event20';
	s.tl(document.URL,'o', 'VOD Search Click');
	//clear vars
	s.events=s.eVar41="";
	urchinTracker('/exercisetv/quickcode.aspx?SearchTerm='+searchterm);
}




function TrackLink(Name, Link, GApath) {
	//Name = internal campaign ID for Omniture.  Use the video name from xml or flashvars.
	//Link = destination link.  
	//GApath = Optional.  URI path for Google Analytics.  
		//If not specified, attempts to default to an appropriate value.  
		//May be omitted from the links in the top home page banner.
	var loc=document.location.toString();
	if (typeof GAPath == "undefined") {  //handling to create a default urchinTracker path
		GApath = loc.substring(loc.indexOf("http://" + 7));
	
		if (GApath.match("default.aspx"))
		{
			GApath="/default/topbanner/"; //for consistency with old GA tracking on the  store home page video rotation
		}
		else { //don't know what to do? Add it to the querystring.
			GApath = GApath.substring(GApath.indexOf("/"));
			if (escape(GApath).match('%3F')) {GApath += "&videolink=";}
			else { GApath += "?videolink="; }
		}
	}
	
	
	var s_account="comcastexercisetvdev" //set Omniture report account to use
	if (loc.indexOf("www.exercisetv.tv") >= 0 || loc.indexOf("//exercisetv.tv") >= 0 || loc.indexOf("2www.exercisetv.tv") >= 0){ 
		s_account="comcastexercisetv";; //comcastondemand not ready yet
	// s_account="comcastexercisetv,comcastondemand";;
	}
	var s=s_gi(s_account);
	s.linkTrackVars="s.eVar45";
	s.eVar45="video link:" + Name; //internal campaign ID
	s.tl(loc, "o", "View Product"); 
	
	urchinTracker(GApath + Link);

}




//Omniture end

function StringToCollection(source,sep1,sep2)
{
	var collection = {};

	if (source != undefined)
	{
		var pairs = source.split(sep1);
	 
		for (var i = 0; i < pairs.length; i++) {
	 
			// Empty pair (e.g. ?key=val&&key2=val2)
	
			if (!pairs[i]) {
				continue;
			}
			
	 
			// Don't use split("=") in case value has "=" in it
	 
			var seperatorPosition = pairs[i].indexOf(sep2);
	 
			if (seperatorPosition == -1) {
				collection[pairs[i]] = "";
			}
			else {
				collection[pairs[i].substring(0, seperatorPosition)] 
					= pairs[i].substr(seperatorPosition + 1);
			}
		}
	}
	return collection;

	
}

   

function OnPDKLoad(obj)
{
    if ($('#VideoReleaseURL,#videorelease').length > 0)
    {
	    tpController.setReleaseURL(HtmlDecode($('#VideoReleaseURL,#videorelease').attr("href")));
	    setTimeout("tpController.pause(true)",1500);
    }
    else if ($('.previewplayer.packitems .itemlist li a.play').length > 0)
    {
        $('.previewplayer.packitems .itemlist li a.play:first').click();
        setTimeout("tpController.pause(true)",1500);
    }
    else if ($('.previewthumbs a').length > 0)
    {
	    $('.previewthumbs a:first').click();
	    setTimeout("tpController.pause(true)",1500);
    }
}

function hidemenu(){
	if (!menuOn)
	{
		$('.subnav .center > li:not(.current)').removeClass('active');
		$('.menudropdowns > div:visible').fadeOut('medium',function(){menuDD=null;});
	}
}


//DOCUMENT READY
		 
$(document).ready(function(){

	if ($('#relatedcarousel').length > 0)
	{
		
		vars = StringToCollection($('#relatedcarousel :hidden').val(),',',':');
		
		pagesize = parseInt(vars['RelatedCarouselItems']);  //scrolling bugs unless explicitly cast as int.
		if (vars['TotalRelated'] > $('#relatedcarousel li').length)
		{
			$('#relatedcarousel').jcarousel({
					itemLoadCallback: jcarousel_itemLoadCallback,
					// Explicitly set size. Otherwise, jCarousel will limit the
					// carousel to 3 items (the number of available items on initialization)
					size: vars['TotalRelated'],
					visible: pagesize,
					scroll: pagesize,
					ObjectName:'RelbyProduct',
					ObjectID: vars['RelatedProductID']

			});
		}
	}
		
	$('.previewplayer.packitems .itemlist li a.play').click(function() { 
		
		var ReleaseURL = $(this).attr('ReleaseURL');
		var ProductURL = $(this).attr('ProductURL');
		if (ReleaseURL.indexOf('&amp;') > 0)
		ReleaseURL = HtmlDecode(ReleaseURL);
		
	
var info = $(this).closest('table').find('td:last');
	
	$('.packitems .videoinfo *').remove();
	var details = $("<div>");
	var h3 = $("<h3>");
	
	
	if (ProductURL.length > 0)
	{
		var a = $("<a></a>").attr('href',ProductURL).text($(info).find('a:first').text());
		$(h3).append(a);
	}
	else
	{
		$(h3).text($(this).text());
	}
		
	var summary = $("<div>").attr('class','summary').html($(info).find('.summary:first').html());
	var desc = $("<div>").attr('class','description').html($(info).find('.description:first').html());
	details.append(h3).append(summary).append(desc);

	$('.packitems .videoinfo').html(details);
	
	if (ReleaseURL.length > 0)
	{
		if ($('#PutWidgetHere:visible').length > 0)
		{
			tpController.setReleaseURL(ReleaseURL);
		}
		else
		{
			$('#PutWidgetHere').show('fast',function(){
				tpController.setReleaseURL(ReleaseURL);
			});
		}
		
	}
	else if (ProductID.length > 0)
	{
		var ProductID = ProductURL.substring(ProductURL.indexOf('p-')+2,10);
		ProductID = ProductID.substring(0,ProductID.indexOf('-'));
		if (parseInt(ProductID) > 0)
		{
			jQuery.get(
		'engine2.aspx',
		{
		  
			ProductID:ProductID,
			download:'false',
			package:'ajax.productimage.xml.config'
		},
		function(result) {
		
			$('.packitems .videoinfo').prepend(result);
			tpController.pause(true);
			$('#PutWidgetHere').hide();
			
			
		},
		'html'
	
	);
		}
	}
	});		
	
	$('iframe#reviewiframe').load(function() {
		
		$('iframe#reviewiframe').height($('iframe#reviewiframe').contents().find('form').height() + 50);
	
	});
	

	if (document.location.href.indexOf('?rate=true') > 0)
	{
		$('.thickbox:first').click();
	}
	
	//login link and Omniture tracking
	if(s.eVar47) s.eVar47 = s.eVar47.toLowerCase();
	
	if ( $('#main-header-info.ajax').length > 0) {
		$.ajax({
			url: "/loginlinkajax.aspx",
			cache:false,
			dataType: "html",
			success: function(result) { //Runs after retrieving ajax data
				$('#main-header-info.ajax').append(result);
				if (result.match("signin.aspx"))  s.eVar47 = "anonymous";
				else s.eVar47 = "authenticated";
			},
			error: function() {
				if (s.Evar47 != "anonymous" && s.Evar47 != "authenticated" ) ; s.eVar47 = "unknown";
			},
			complete: function(request, Status) {
				s.eVar47 = s.eVar47.toLowerCase();
				s.t(); //Send tracking variables to Omniture
			}
			});
	
	}
	else { //Find logged in status and set Omniture variables if Ajax is not being used.  
		if (s.Evar47 == "anonymous" || s.Evar47 == "authenticated" ) ;  //Use the login status variable as-is if it was set server-side
		else if ($('a.username').size() > 0)  s.eVar47 = "authenticated";
		else s.eVar47 = "anonymous";
	
		
	
		s.t();  //Send tracking variables to Omniture
		
	}

	//Top menu
	menuOn=false;
	$('.subnav li,.menudropdowns > div').hoverIntent(function() {
		menuOn=true;
		if($(this).is('li'))
		{
			menuLI = $(this);
			if($(this).find('a.ddhover').length==1)
				menuDDnew = $($(this).find('a.ddhover').attr('href'));
			else menuDDnew= null;
		}
		else
		{
			menuDDnew =  $(this);
			menuLI=$('a.ddhover').filter(function() {return $(this).attr('href').substring(1) == menuDDnew.attr('id');}).closest('li');
		}
         if (typeof menuDD != "undefined" && menuDD && (menuDDnew == null || menuDD.attr('id') != menuDDnew.attr('id'))) 
		{
            menuDD.fadeOut('fast');
        } 
		menuDD = menuDDnew;
		$('.subnav .center > li').not(menuLI).not('.current').removeClass('active');
		menuLI.addClass('active');
		
		//positioning
// && (menuDD.offset().left==0 || menuDD.offset().left == null)
		if (menuDD!=null)
		{
			mainoffset = menuLI.closest('.center').offset();
			mainwidth= menuLI.closest('.center').outerWidth();
			offset=menuLI.offset();
			menuwidth=menuLI.outerWidth();
			
			//menuDD.css("top", offset.top + menuLI.outerHeight() );			
			offtop = offset.top + menuLI.outerHeight();
			if ( offset.left + menuwidth > mainoffset + mainwidth )
			{
			    offleft = offset.left +  menuwidth - menuDD.outerWidth();
				//menuDD.css("margin-left", offset.left +  menuwidth - menuDD.outerWidth() );
			}
				
			else
			{
			    offleft = offset.left
				//menuDD.css("margin-left",offset.left);
			}
			//alert(offleft);
			//menuDD.animate({marginLeft: offleft}, 100);
			menuDD.offset({left:offleft,top:offtop});
		}
		if (menuDD!=null)
			menuDD.fadeIn('fast');
      }
	  , function() { menuOn=false; }
	);
	  
	$('.subnav').hoverIntent(function() {}, 
		function()
		{
			setTimeout("hidemenu()",200);
		}
	);
	  
	  $(".musicpreview ul li a").click(function() {
		 
		  $(".musicpreview ul li").css("font-style","normal");
		$(this).parent().css("font-style","italic");
	  });
	
	

	if ( $('.countries').length > 0) { //Countries text, for consistency with popup implementation.  Better solution would be to get ReplaceTokens working on popups.
		$.ajax({
		url: "engine2.aspx?package=page.countries.xml.config&download=false",
		cache:false,
		dataType: "html",
		success: function(result) {
			$('.countries').append(result);
		}
		});
	}	


		
	$('.faqlink').html('If you have a question about the Video Downloads, it may be answered in <A HREF="t-faq.aspx">Video Download Help</A>.<HR />');

	
	if(document.location.toString().indexOf('https://') == -1)
	{
		$('.ad').append('<IFRAME src="/driver2.aspx?topic=ad&leftside=1" frameborder="0" height="155px" width="185px" marginheight="0" marginwidth="0" scrolling="no"></IFRAME>');
	}


	//TOP LEFT PROMO
	if(document.getElementById("startrainers")) {
		var rand = Math.ceil(Math.random() * 4);
		
		if (rand == 1)  {
	
		 var so = new SWFObject("/flash/ExerciseTV/swf/starTrainerPromo_196x165.swf", "Promo", "196", "165", "8", "#ffffff");
		 so.addParam("quality", "high");
		 so.addParam("wmode", "transparent");
		  so.addParam("FlashVars", "_strAction=p-1465-star-trainers-buy-2-and-get-1-free.aspx?intcid=store:topleft:star-trainers");
		 so.write("startrainers"); 
		 }
		 else if (rand == 2) {
		  var so = new SWFObject("/flash/ExerciseTV/swf/seventeentrainer.swf", "Promo", "196", "165", "8", "#ffffff");
		 so.addParam("quality", "high");
		 so.addParam("wmode", "transparent");
		  so.addParam("FlashVars", "_strAction=c-285-the-seventeen-trainer.aspx?intcid=store:topleft:seventeen-trainer");
		 so.write("startrainers"); 
		 }
		else if (rand == 3) {
		  var so = new SWFObject("/flash/ExerciseTV/swf/banner_biggestloser2_196x165.swf", "Promo", "196", "165", "8", "#ffffff");
		 so.addParam("quality", "high");
		 so.addParam("wmode", "transparent");
		  so.addParam("FlashVars", "_strAction=m-132-the-biggest-loser.aspx?intcid=store:topleft:biggest-loser");
		 so.write("startrainers"); 
		 }
		 
		 else {
		   var so = new SWFObject("/flash/ExerciseTV/swf/WeightLossStudioPromo_196x165.swf", "Promo", "196", "165", "8", "#ffffff");
		 so.addParam("quality", "high");
		 so.addParam("wmode", "transparent");
		  so.addParam("FlashVars", "_strAction=p-1568-weight-loss-fitness-program.aspx?intcid=store:topleft:weightloss");
		 so.write("startrainers"); 
		 } 
			$('#startrainers').show()
		 }
		 //END TOP LEFT PROMO
	if(document.getElementById("img"))
	{
		$('.productTop #img').width($('.productTop #img img').width());
	}

	

	
$('input.searchentry').focus(function() {
var value = $(this).attr("value") ;
	if (value == "Product Code or Keyword") {$(this).attr("value","");$(this).css({"color":"black"})}

});


$("#content *[align='center']:not([style])").attr('style','text-align:center;');
	

if (jQuery().tabs)
{
	$('#navlist').tabs( {fxAutoHeight: true});
	$('#minicart').tabs();
	$('.tabs').tabs({fxAutoHeight: true});
	$('.video-downloads .enviga .products').height($('#studiotabs').height());

	$('#tabbeddescription').tabs( {fxAutoHeight: true} );
}



		    });
			
			 function HtmlDecode(s)

{

      var out = "";

      if (s==null) return;

 

      var l = s.length;

      for (var i=0; i<l; i++)

      {

            var ch = s.charAt(i);

           

            if (ch == '&')

            {

                  var semicolonIndex = s.indexOf(';', i+1);

                 

            if (semicolonIndex > 0)

            {

                        var entity = s.substring(i + 1, semicolonIndex);

                        if (entity.length > 1 && entity.charAt(0) == '#')

                        {

                              if (entity.charAt(1) == 'x' || entity.charAt(1) == 'X')

                                    ch = String.fromCharCode(eval('0'+entity.substring(1)));

                              else

                                    ch = String.fromCharCode(eval(entity.substring(1)));

                        }

                    else

                      {

                              switch (entity)

                              {

                                    case 'quot': ch = String.fromCharCode(0x0022); break;

                                    case 'amp': ch = String.fromCharCode(0x0026); break;

                                    case 'lt': ch = String.fromCharCode(0x003c); break;

                                    case 'gt': ch = String.fromCharCode(0x003e); break;

                                    case 'nbsp': ch = String.fromCharCode(0x00a0); break;

                                    case 'iexcl': ch = String.fromCharCode(0x00a1); break;

                                    case 'cent': ch = String.fromCharCode(0x00a2); break;

                                    case 'pound': ch = String.fromCharCode(0x00a3); break;

                                    case 'curren': ch = String.fromCharCode(0x00a4); break;

                                    case 'yen': ch = String.fromCharCode(0x00a5); break;

                                    case 'brvbar': ch = String.fromCharCode(0x00a6); break;

                                    case 'sect': ch = String.fromCharCode(0x00a7); break;

                                    case 'uml': ch = String.fromCharCode(0x00a8); break;

                                    case 'copy': ch = String.fromCharCode(0x00a9); break;

                                    case 'ordf': ch = String.fromCharCode(0x00aa); break;

                                    case 'laquo': ch = String.fromCharCode(0x00ab); break;

                                    case 'not': ch = String.fromCharCode(0x00ac); break;

                                    case 'shy': ch = String.fromCharCode(0x00ad); break;

                                    case 'reg': ch = String.fromCharCode(0x00ae); break;

                                    case 'macr': ch = String.fromCharCode(0x00af); break;

                                    case 'deg': ch = String.fromCharCode(0x00b0); break;

                                    case 'plusmn': ch = String.fromCharCode(0x00b1); break;

                                    case 'sup2': ch = String.fromCharCode(0x00b2); break;

                                    case 'sup3': ch = String.fromCharCode(0x00b3); break;

                                    case 'acute': ch = String.fromCharCode(0x00b4); break;

                                    case 'micro': ch = String.fromCharCode(0x00b5); break;

                                    case 'para': ch = String.fromCharCode(0x00b6); break;

                                    case 'middot': ch = String.fromCharCode(0x00b7); break;

                                    case 'cedil': ch = String.fromCharCode(0x00b8); break;

                                    case 'sup1': ch = String.fromCharCode(0x00b9); break;

                                    case 'ordm': ch = String.fromCharCode(0x00ba); break;

                                    case 'raquo': ch = String.fromCharCode(0x00bb); break;

                                    case 'frac14': ch = String.fromCharCode(0x00bc); break;

                                    case 'frac12': ch = String.fromCharCode(0x00bd); break;

                                    case 'frac34': ch = String.fromCharCode(0x00be); break;

                                    case 'iquest': ch = String.fromCharCode(0x00bf); break;

                                    case 'Agrave': ch = String.fromCharCode(0x00c0); break;

                                    case 'Aacute': ch = String.fromCharCode(0x00c1); break;

                                    case 'Acirc': ch = String.fromCharCode(0x00c2); break;

                                    case 'Atilde': ch = String.fromCharCode(0x00c3); break;

                                    case 'Auml': ch = String.fromCharCode(0x00c4); break;

                                    case 'Aring': ch = String.fromCharCode(0x00c5); break;

                                    case 'AElig': ch = String.fromCharCode(0x00c6); break;

                                    case 'Ccedil': ch = String.fromCharCode(0x00c7); break;

                                    case 'Egrave': ch = String.fromCharCode(0x00c8); break;

                                    case 'Eacute': ch = String.fromCharCode(0x00c9); break;

                                    case 'Ecirc': ch = String.fromCharCode(0x00ca); break;

                                    case 'Euml': ch = String.fromCharCode(0x00cb); break;

                                    case 'Igrave': ch = String.fromCharCode(0x00cc); break;

                                    case 'Iacute': ch = String.fromCharCode(0x00cd); break;

                                    case 'Icirc': ch = String.fromCharCode(0x00ce ); break;

                                    case 'Iuml': ch = String.fromCharCode(0x00cf); break;

                                    case 'ETH': ch = String.fromCharCode(0x00d0); break;

                                    case 'Ntilde': ch = String.fromCharCode(0x00d1); break;

                                    case 'Ograve': ch = String.fromCharCode(0x00d2); break;

                                    case 'Oacute': ch = String.fromCharCode(0x00d3); break;

                                    case 'Ocirc': ch = String.fromCharCode(0x00d4); break;

                                    case 'Otilde': ch = String.fromCharCode(0x00d5); break;

                                    case 'Ouml': ch = String.fromCharCode(0x00d6); break;

                                    case 'times': ch = String.fromCharCode(0x00d7); break;

                                    case 'Oslash': ch = String.fromCharCode(0x00d8); break;

                                    case 'Ugrave': ch = String.fromCharCode(0x00d9); break;

                                    case 'Uacute': ch = String.fromCharCode(0x00da); break;

                                    case 'Ucirc': ch = String.fromCharCode(0x00db); break;

                                    case 'Uuml': ch = String.fromCharCode(0x00dc); break;

                                    case 'Yacute': ch = String.fromCharCode(0x00dd); break;

                                    case 'THORN': ch = String.fromCharCode(0x00de); break;

                                    case 'szlig': ch = String.fromCharCode(0x00df); break;

                                    case 'agrave': ch = String.fromCharCode(0x00e0); break;

                                    case 'aacute': ch = String.fromCharCode(0x00e1); break;

                                    case 'acirc': ch = String.fromCharCode(0x00e2); break;

                                    case 'atilde': ch = String.fromCharCode(0x00e3); break;

                                    case 'auml': ch = String.fromCharCode(0x00e4); break;

                                    case 'aring': ch = String.fromCharCode(0x00e5); break;

                                    case 'aelig': ch = String.fromCharCode(0x00e6); break;

                                    case 'ccedil': ch = String.fromCharCode(0x00e7); break;

                                    case 'egrave': ch = String.fromCharCode(0x00e8); break;

                                    case 'eacute': ch = String.fromCharCode(0x00e9); break;

                                    case 'ecirc': ch = String.fromCharCode(0x00ea); break;

                                    case 'euml': ch = String.fromCharCode(0x00eb); break;

                                    case 'igrave': ch = String.fromCharCode(0x00ec); break;

                                    case 'iacute': ch = String.fromCharCode(0x00ed); break;

                                    case 'icirc': ch = String.fromCharCode(0x00ee); break;

                                    case 'iuml': ch = String.fromCharCode(0x00ef); break;

                                    case 'eth': ch = String.fromCharCode(0x00f0); break;

                                    case 'ntilde': ch = String.fromCharCode(0x00f1); break;

                                    case 'ograve': ch = String.fromCharCode(0x00f2); break;

                                    case 'oacute': ch = String.fromCharCode(0x00f3); break;

                                    case 'ocirc': ch = String.fromCharCode(0x00f4); break;

                                    case 'otilde': ch = String.fromCharCode(0x00f5); break;

                                    case 'ouml': ch = String.fromCharCode(0x00f6); break;

                                    case 'divide': ch = String.fromCharCode(0x00f7); break;

                                    case 'oslash': ch = String.fromCharCode(0x00f8); break;

                                    case 'ugrave': ch = String.fromCharCode(0x00f9); break;

                                    case 'uacute': ch = String.fromCharCode(0x00fa); break;

                                    case 'ucirc': ch = String.fromCharCode(0x00fb); break;

                                    case 'uuml': ch = String.fromCharCode(0x00fc); break;

                                    case 'yacute': ch = String.fromCharCode(0x00fd); break;

                                    case 'thorn': ch = String.fromCharCode(0x00fe); break;

                                    case 'yuml': ch = String.fromCharCode(0x00ff); break;

                                    case 'OElig': ch = String.fromCharCode(0x0152); break;

                                    case 'oelig': ch = String.fromCharCode(0x0153); break;

                                    case 'Scaron': ch = String.fromCharCode(0x0160); break;

                                    case 'scaron': ch = String.fromCharCode(0x0161); break;

                                    case 'Yuml': ch = String.fromCharCode(0x0178); break;

                                    case 'fnof': ch = String.fromCharCode(0x0192); break;

                                    case 'circ': ch = String.fromCharCode(0x02c6); break;

                                    case 'tilde': ch = String.fromCharCode(0x02dc); break;

                                    case 'Alpha': ch = String.fromCharCode(0x0391); break;

                                    case 'Beta': ch = String.fromCharCode(0x0392); break;

                                    case 'Gamma': ch = String.fromCharCode(0x0393); break;

                                    case 'Delta': ch = String.fromCharCode(0x0394); break;

                                    case 'Epsilon': ch = String.fromCharCode(0x0395); break;

                                    case 'Zeta': ch = String.fromCharCode(0x0396); break;

                                    case 'Eta': ch = String.fromCharCode(0x0397); break;

                                    case 'Theta': ch = String.fromCharCode(0x0398); break;

                                    case 'Iota': ch = String.fromCharCode(0x0399); break;

                                    case 'Kappa': ch = String.fromCharCode(0x039a); break;

                                    case 'Lambda': ch = String.fromCharCode(0x039b); break;

                                    case 'Mu': ch = String.fromCharCode(0x039c); break;

                                    case 'Nu': ch = String.fromCharCode(0x039d); break;

                                    case 'Xi': ch = String.fromCharCode(0x039e); break;

                                    case 'Omicron': ch = String.fromCharCode(0x039f); break;

                                    case 'Pi': ch = String.fromCharCode(0x03a0); break;

                                    case ' Rho ': ch = String.fromCharCode(0x03a1); break;

                                    case 'Sigma': ch = String.fromCharCode(0x03a3); break;

                                    case 'Tau': ch = String.fromCharCode(0x03a4); break;

                                    case 'Upsilon': ch = String.fromCharCode(0x03a5); break;

                                    case 'Phi': ch = String.fromCharCode(0x03a6); break;

                                    case 'Chi': ch = String.fromCharCode(0x03a7); break;

                                    case 'Psi': ch = String.fromCharCode(0x03a8); break;

                                    case 'Omega': ch = String.fromCharCode(0x03a9); break;

                                    case 'alpha': ch = String.fromCharCode(0x03b1); break;

                                    case 'beta': ch = String.fromCharCode(0x03b2); break;

                                    case 'gamma': ch = String.fromCharCode(0x03b3); break;

                                    case 'delta': ch = String.fromCharCode(0x03b4); break;

                                    case 'epsilon': ch = String.fromCharCode(0x03b5); break;

                                    case 'zeta': ch = String.fromCharCode(0x03b6); break;

                                    case 'eta': ch = String.fromCharCode(0x03b7); break;

                                    case 'theta': ch = String.fromCharCode(0x03b8); break;

                                    case 'iota': ch = String.fromCharCode(0x03b9); break;

                                    case 'kappa': ch = String.fromCharCode(0x03ba); break;

                                    case 'lambda': ch = String.fromCharCode(0x03bb); break;

                                    case 'mu': ch = String.fromCharCode(0x03bc); break;

                                    case 'nu': ch = String.fromCharCode(0x03bd); break;

                                    case 'xi': ch = String.fromCharCode(0x03be); break;

                                    case 'omicron': ch = String.fromCharCode(0x03bf); break;

                                    case 'pi': ch = String.fromCharCode(0x03c0); break;

                                    case 'rho': ch = String.fromCharCode(0x03c1); break;

                                    case 'sigmaf': ch = String.fromCharCode(0x03c2); break;

                                    case 'sigma': ch = String.fromCharCode(0x03c3); break;

                                    case 'tau': ch = String.fromCharCode(0x03c4); break;

                                    case 'upsilon': ch = String.fromCharCode(0x03c5); break;

                                    case 'phi': ch = String.fromCharCode(0x03c6); break;

                                    case 'chi': ch = String.fromCharCode(0x03c7); break;

                                    case 'psi': ch = String.fromCharCode(0x03c8); break;

                                    case 'omega': ch = String.fromCharCode(0x03c9); break;

                                    case 'thetasym': ch = String.fromCharCode(0x03d1); break;

                                    case 'upsih': ch = String.fromCharCode(0x03d2); break;

                                    case 'piv': ch = String.fromCharCode(0x03d6); break;

                                    case 'ensp': ch = String.fromCharCode(0x2002); break;

                                    case 'emsp': ch = String.fromCharCode(0x2003); break;

                                    case 'thinsp': ch = String.fromCharCode(0x2009); break;

                                    case 'zwnj': ch = String.fromCharCode(0x200c); break;

                                    case 'zwj': ch = String.fromCharCode(0x200d); break;

                                    case 'lrm': ch = String.fromCharCode(0x200e); break;

                                    case 'rlm': ch = String.fromCharCode(0x200f); break;

                                    case 'ndash': ch = String.fromCharCode(0x2013); break;

                                    case 'mdash': ch = String.fromCharCode(0x2014); break;

                                    case 'lsquo': ch = String.fromCharCode(0x2018); break;

                                    case 'rsquo': ch = String.fromCharCode(0x2019); break;

                                    case 'sbquo': ch = String.fromCharCode(0x201a); break;

                                    case 'ldquo': ch = String.fromCharCode(0x201c); break;

                                    case 'rdquo': ch = String.fromCharCode(0x201d); break;

                                    case 'bdquo': ch = String.fromCharCode(0x201e); break;

                                    case 'dagger': ch = String.fromCharCode(0x2020); break;

                                    case 'Dagger': ch = String.fromCharCode(0x2021); break;

                                    case 'bull': ch = String.fromCharCode(0x2022); break;

                                    case 'hellip': ch = String.fromCharCode(0x2026); break;

                                    case 'permil': ch = String.fromCharCode(0x2030); break;

                                    case 'prime': ch = String.fromCharCode(0x2032); break;

                                    case 'Prime': ch = String.fromCharCode(0x2033); break;

                                    case 'lsaquo': ch = String.fromCharCode(0x2039); break;

                                    case 'rsaquo': ch = String.fromCharCode(0x203a); break;

                                    case 'oline': ch = String.fromCharCode(0x203e); break;

                                    case 'frasl': ch = String.fromCharCode(0x2044); break;

                                    case 'euro': ch = String.fromCharCode(0x20ac); break;

                                    case 'image': ch = String.fromCharCode(0x2111); break;

                                    case 'weierp': ch = String.fromCharCode(0x2118); break;

                                    case 'real': ch = String.fromCharCode(0x211c); break;

                                    case 'trade': ch = String.fromCharCode(0x2122); break;

                                    case 'alefsym': ch = String.fromCharCode(0x2135); break;

                                    case 'larr': ch = String.fromCharCode(0x2190); break;

                                    case 'uarr': ch = String.fromCharCode(0x2191); break;

                                    case 'rarr': ch = String.fromCharCode(0x2192); break;

                                    case 'darr': ch = String.fromCharCode(0x2193); break;

                                    case 'harr': ch = String.fromCharCode(0x2194); break;

                                    case 'crarr': ch = String.fromCharCode(0x21b5); break;

                                    case 'lArr': ch = String.fromCharCode(0x21d0); break;

                                    case 'uArr': ch = String.fromCharCode(0x21d1); break;

                                    case 'rArr': ch = String.fromCharCode(0x21d2); break;

                                    case 'dArr': ch = String.fromCharCode(0x21d3); break;

                                    case 'hArr': ch = String.fromCharCode(0x21d4); break;

                                    case 'forall': ch = String.fromCharCode(0x2200); break;

                                    case 'part': ch = String.fromCharCode(0x2202); break;

                                    case 'exist': ch = String.fromCharCode(0x2203); break;

                                    case 'empty': ch = String.fromCharCode(0x2205); break;

                                    case 'nabla': ch = String.fromCharCode(0x2207); break;

                                    case 'isin': ch = String.fromCharCode(0x2208); break;

                                    case 'notin': ch = String.fromCharCode(0x2209); break;

                                    case 'ni': ch = String.fromCharCode(0x220b); break;

                                    case 'prod': ch = String.fromCharCode(0x220f); break;

                                    case 'sum': ch = String.fromCharCode(0x2211); break;

                                    case 'minus': ch = String.fromCharCode(0x2212); break;

                                    case 'lowast': ch = String.fromCharCode(0x2217); break;

                                    case 'radic': ch = String.fromCharCode(0x221a); break;

                                    case 'prop': ch = String.fromCharCode(0x221d); break;

                                    case 'infin': ch = String.fromCharCode(0x221e); break;

                                    case 'ang': ch = String.fromCharCode(0x2220); break;

                                    case 'and': ch = String.fromCharCode(0x2227); break;

                                    case 'or': ch = String.fromCharCode(0x2228); break;

                                    case 'cap': ch = String.fromCharCode(0x2229); break;

                                    case 'cup': ch = String.fromCharCode(0x222a); break;

                                    case 'int': ch = String.fromCharCode(0x222b); break;

                                    case 'there4': ch = String.fromCharCode(0x2234); break;

                                    case 'sim': ch = String.fromCharCode(0x223c); break;

                                    case 'cong': ch = String.fromCharCode(0x2245); break;

                                    case 'asymp': ch = String.fromCharCode(0x2248); break;

                                    case 'ne': ch = String.fromCharCode(0x2260); break;

                                    case 'equiv': ch = String.fromCharCode(0x2261); break;

                                    case 'le': ch = String.fromCharCode(0x2264); break;

                                    case 'ge': ch = String.fromCharCode(0x2265); break;

                                    case 'sub': ch = String.fromCharCode(0x2282); break;

                                    case 'sup': ch = String.fromCharCode(0x2283); break;

                                    case 'nsub': ch = String.fromCharCode(0x2284); break;

                                    case 'sube': ch = String.fromCharCode(0x2286); break;

                                    case 'supe': ch = String.fromCharCode(0x2287); break;

                                    case 'oplus': ch = String.fromCharCode(0x2295); break;

                                    case 'otimes': ch = String.fromCharCode(0x2297); break;

                                    case 'perp': ch = String.fromCharCode(0x22a5); break;

                                    case 'sdot': ch = String.fromCharCode(0x22c5); break;

                                    case 'lceil': ch = String.fromCharCode(0x2308); break;

                                    case 'rceil': ch = String.fromCharCode(0x2309); break;

                                    case 'lfloor': ch = String.fromCharCode(0x230a); break;

                                    case 'rfloor': ch = String.fromCharCode(0x230b); break;

                                    case 'lang': ch = String.fromCharCode(0x2329); break;

                                    case 'rang': ch = String.fromCharCode(0x232a); break;

                                    case 'loz': ch = String.fromCharCode(0x25ca); break;

                                    case 'spades': ch = String.fromCharCode(0x2660); break;

                                    case 'clubs': ch = String.fromCharCode(0x2663); break;

                                    case 'hearts': ch = String.fromCharCode(0x2665); break;

                                    case 'diams': ch = String.fromCharCode(0x2666); break;

                                    default: ch = ''; break;

                              }

                        }

                        i = semicolonIndex;

                  }

            }

           

            out += ch;

      }

 

      return out;

     

}