
//requires jQuery


//wait for the DOM to be loaded
jQuery( document ).ready( function() {
	//ORDERED LIST
	//edit ordered list dom to allow styling
	jQuery( 'ol li' ).wrapInner( '<span class="orderedListItemContent"></span>' );
	//activate ordered list styling via adding class - edit styles in stylesheet
	jQuery( 'ol' ).addClass( 'javaScriptStyled' );
	
	//Extend content nav.
	ContentNav.init();
	
	//Client side writing of Promotional Buttons.
	PromoButtons.init();
	
	//Client side writing of Coupons.
	Coupons.init();
	
	//Extend Areas Serviced pages.
	AreasServiced.init();
	
	//Extends Calculator pages.
	Calculators.init();
	
	//Look for FAQ list to extend.
	TocList.init();
	
} );



//Extend Areas Serviced pages.
AreasServiced =
{
	init : function()
	{
		AreasServiced.setList();
	}
	,
	setList : function()
	{
		var myListSet = jQuery( 'dl.areaServiceList' ).children();
		var myListSize = myListSet.size();
		var myCol = 3;
		var myDiv1Start = 0;
		var myDiv1End = Math.ceil( myListSize / myCol );
		while( !MathsUtils.isEven( myDiv1End ) ){ myDiv1End++ };
		var myDiv2Start = myDiv1End;
		var myDiv2End = myDiv2Start + ( myDiv1End );
		var myDiv3Start = myDiv2End;
		myListSet.slice( myDiv1Start, myDiv1End ).wrapAll( '<div></div>' );
		myListSet.slice( myDiv2Start , myDiv2End ).wrapAll( '<div></div>' );
		myListSet.slice( myDiv3Start ).wrapAll( '<div></div>' );
		//alert( myListSize + ": " + myDiv1End );
	}//end function setList
	
};//end object literal setAreasServicedList


//Extends Calculator pages.
Calculators =
{
	init : function()
	{
		Calculators.setQuoteItemList();
	}
	,
	setQuoteItemList : function()
	{
		//jQuery( 'fieldset.itemList input[type="text"]' ).attr( 'readonly', 'readonly' );
		jQuery( 'fieldset.itemList input[type="text"]' ).blur( function(){
			var myVal = parseFloat( jQuery( this ).fieldValue() );
			if( isNaN( myVal ) ){ jQuery(this).val( '0' ); };
		} );
		
		jQuery( 'fieldset.itemList input[type="text"]' ).before( '<a class="add" href="javascript:;">Add</a>' );
		
		jQuery( 'fieldset.itemList a.add' ).click( function(){
			var myParent = jQuery( this ).parent();
			var myInput = myParent.find( 'input' );
			var myValue = myInput.fieldValue();
			myValue++;
			myValue = Math.min( myValue, 100 );
			myInput.attr( 'value', myValue );
		} );
		
		jQuery( 'fieldset.itemList input[type="text"]' ).before( '<a class="minus" href="javascript:;">Minus</a>' );
		
		jQuery( 'fieldset.itemList a.minus' ).click( function(){
			var myParent = jQuery( this ).parent();
			var myInput = myParent.find( 'input' );
			var myValue = myInput.fieldValue();
			myValue--;
			myValue = Math.max( myValue, 0 );
			myInput.attr( 'value', myValue );
		} );
	}//end function setQuoteItemList
	
};//end object literal Calculators


//Hnadles extending content nav.
ContentNav = 
{
	//handles setting up UI elements
	init : function()
	{
		/*
		//jQuery( 'div#contentNav ul li a' ).click( function( event ){ alert( "Big Link" ); event.preventDefault(); } );
		jQuery( 'div#contentNav ul li a' ).click( function( event ){
				//get parent list item
				var myListItemParent = jQuery( this ).parent();
				
				//check how the list item is set
				if( myListItemParent.hasClass( 'open' ) )
				{
					myListItemParent.addClass( 'close' );
					myListItemParent.removeClass( 'open' );
				}
				else if( myListItemParent.hasClass( 'close' ) )
				{
					myListItemParent.removeClass( 'close' );
					myListItemParent.addClass( 'open' );
				};//end if
				event.stopPropagation();
				event.preventDefault();
				
		} );
		*/
		
		var myPage = Utils.getFileName();
		//alert( myPage );
		jQuery( 'div#contentNav ul li a' ).each( function(){
			var myLinkPage = jQuery( this ).attr( 'href' );
			if( myPage == myLinkPage ){ jQuery( this ).addClass( 'active' ); };
		} );
		
		jQuery( 'div#contentNav ul li ul li:odd' ).addClass( 'alt' );
	}//end function fInit
};//end object literal declaration ContentNav


//Client side writing of Coupons.
Coupons =
{
	init : function()
	{
		//Ignore random coupon insertion on home page, animate instead.
		if( $( 'body' ).hasClass( 'home' ) )
		{
			var myDb = Coupons.getDb();
			for( var i = 0; i < myDb.length; i++ )
			{
				jQuery( 'div#coupon' ).append( myDb[i] );
			};//end for
			jQuery('div#coupon').cycle( { fx: 'fade', timeout: 7000, pause: 1  } );
			return;
		};//end if
		Coupons.writeCoupons( 1 );
	}//end function init
	,
	//Handles writing promotional buttons
	writeCoupons : function( pmBtnCount )
	{
		//get 2 unique random numbers
		myNumList = MathsUtils.getRandomNumList( pmBtnCount, Coupons.getDb().length );
		
		//use numbers to retrieve promo button code
		var myHtml = '';
		for( var i=0; i < myNumList.length; i++)
		{
			var myNumId = myNumList[ i ];
			var myPromoHtml = Coupons.getPromoBtnByIndex( myNumId );
			myHtml += myPromoHtml;
		};//end switch
		
		//set coupon by over-writing div code
		jQuery( 'div#coupon' ).html( myHtml );
	}//end function writeCoupons
	,
	//Handles retrieving Promotional button code via a supplied index.
	getPromoBtnByIndex : function( pmIndex )
	{
		var myDb = Coupons.getDb();
		return( myDb[ pmIndex ] );
	}//end function getPromoBtnByIndex
	,
	//Handles bundling Promotional button data.
	getDb : function()
	{
		var myDb = new Array();
		
		myDb.push( '<a href="pocket-rocket-lite.aspx" class="pocketRocketLiteCoupon">Pocket Rocket Lite Package</a>' );
		myDb.push( '<a href="pocket-rocket.aspx" class="pocketRocketCoupon">Pocket Rocket Package</a>' );
		myDb.push( '<a href="studio-hop-lite.aspx" class="studioHopLiteCoupon">Studio Hop Lite Package</a>' );
		myDb.push( '<a href="studio-hop.aspx" class="studioHopCoupon">Studio Hop Package</a>' );
		myDb.push( '<a href="king-kong.aspx" class="kingKongCoupon">King Kong Package</a>' );
		myDb.push( '<a href="tight-tuesdays.aspx" class="tightTuesdaysCoupon">Tight Tuesdays</a>' );
		
		return( myDb );
	}//end function getDb
	
};//end object literal Coupons


//Handles generic maths tasks.
MathsUtils =
{
	//Returns a random number.
	//Requires a maximum value.
	//Returns a whole number.
	getRandomNum : function( pmMaxValue )
	{
		var myNum = Math.floor( Math.random() * pmMaxValue );
		return( myNum );
	}//end function getRandomNum
	,
	//Returns a list of unique random numbers.
	//Requires an amount of numbers required and maximum value on each number.
	//Returns an array of whole numbers.
	getRandomNumList : function( pmCount, pmMaxVal )
	{
		//get parameters
		var myRequiredNumCount = pmCount;
		var myMaxValue = pmMaxVal;
		
		var myNumList = new Array();
		var myCount = 0;
		
		while( myCount < myRequiredNumCount )
		{
			var myRandomNumber = MathsUtils.getRandomNum( myMaxValue );
			var myFound = false;
			for( var i=0; i< myNumList.length; i++ )
			{
				if( myRandomNumber == myNumList[ i ] ){ myFound = true; break; };
			};//end for
			
			if( myFound )
			{	
			}
			else
			{
				myNumList.push( myRandomNumber );
				myCount++;
			};//end if
		};//end while
		
		return( myNumList );
	}//end function getRandomNumList
	,
	//handles testing for even number
	//return boolean indicating even, false indicates odd
	isEven : function( pmTargetNum )
	{
		var myTargetNum = pmTargetNum;
		var myReturn = false;
		if ( (( myTargetNum % 2 ) == 0 ) && ( myTargetNum != 0 ) ) { myReturn = true; };
		return( myReturn );
	}//end function isEven
};//end object literal MathsUtils


//Client side writing of Promotional Buttons.
PromoButtons =
{
	init : function()
	{
		PromoButtons.writePromoBtns( 2 );
	}//end function init
	
	,
	//Handles writing promotional buttons
	writePromoBtns : function( pmBtnCount )
	{
		//get 2 unique random numbers
		myNumList = MathsUtils.getRandomNumList( pmBtnCount, PromoButtons.getDb().length );
		
		//use numbers to retrieve promo button code
		var myHtml = '';
		for( var i=0; i < myNumList.length; i++)
		{
			var myNumId = myNumList[ i ];
			var myPromoHtml = PromoButtons.getPromoBtnByIndex( myNumId );
			myHtml += myPromoHtml;
		};//end switch
		
		//set coupon by over-writing div code
		jQuery( 'div#promoBtn' ).html( myHtml );
	}//end function writePromoBtns
	,
	//Handles retrieving Promotional button code via a supplied index.
	getPromoBtnByIndex : function( pmIndex )
	{
		var myDb = PromoButtons.getDb();
		return( myDb[ pmIndex ] );
	}//end function getPromoBtnByIndex
	,
	//Handles bundling Promotional button data.
	getDb : function()
	{
		var myDb = new Array();
		
		myDb.push( '<a href="services.aspx" class="dontBreakThePiggyBankPromoBtn">Don\'t break the piggy bank</a>' );
		myDb.push( '<a href="contact.aspx" class="emailUsPromoBtn">Email Us</a>' );
		myDb.push( '<a href="free-box-offer.aspx" class="freeBoxesPromoBtn">Free Boxes</a>' );
		myDb.push( '<a href="moving-home.aspx" class="movingHomePromoBtn">Moving Home</a>' );
		myDb.push( '<a href="moving-office.aspx" class="movingOfficePromoBtn">Moving Office</a>' );
		myDb.push( '<a href="need-packaging.aspx" class="needPackagingPromoBtn">Need Packaging</a>' );
		myDb.push( '<a href="services.aspx" class="onlineCalculatorPromoBtn">Online Calculator</a>' );
		myDb.push( '<a href="services.aspx" class="rangeOfVehiclesPromoBtn">Range Of Vehicles</a>' );
		myDb.push( '<a href="pocket-rocket-lite.aspx" class="singleItemPromoBtn">Single Item</a>' );
		myDb.push( '<a href="testimonials.aspx" class="testimonialsPromoBtn">Testimonials</a>' );
		myDb.push( '<a href="services.aspx" class="tightBudgetPromoBtn">Tight Budget</a>' );
		//myDb.push( '<a href="become-a-removalist.aspx" class="becomeARemovalistPromoBtn">Tight Budget</a>' );
		
		return( myDb );
	}//end function getDb
};//end object literal PromoButtons


//Handles allowing TOC header link selection to reflect in answer content.
TocList =
{
	init : function()
	{
		//Reset all answers to normal
		TocList.resetAllAnswers();
		
		//Set TOC links to style approriate answer.
		jQuery( 'ul.tocList li a' ).click( function(){
			TocList.resetAllAnswers();
			var myId = jQuery( this ).attr( 'href' );
			jQuery( 'ul.tocAnswerList ' + myId ).addClass( 'active' );
		} );
		
		//Set top buttons to reset all answers.
		jQuery( 'ul.tocAnswerList li a[href = "#faqList"]' ).click( function(){
			TocList.resetAllAnswers();
		} );
	}
	,
	//Resets all answer elements to normal. 
	resetAllAnswers : function()
	{
		jQuery( 'ul.tocAnswerList li' ).removeClass( 'active' );
	}
};//end object literal faqList


Utils =
{
	/* with no arguments you get back the file name of the page that is currently loaded on the browser */
	getFileName : function( pmStr )
	{
		if( "undefined" == typeof( pmStr ) )
		{
			pmStr = location.href;
			return( pmStr.replace( /.+[\/]([^\/]+)$/,'$1' ) );
		}
	}//end function getFileName
	
};//end object literal Utils

