/**
 * @name		Global Initialisation
 * @overview	An automated documentation publishing system for JavaScript.
 * @version		0.1
 * @revision	2007-06-01 00:00:00
 * @author		Michael Ord <a href="mailto:michael.ord@think.eu">michael.ord@think.eu</a>
 */

var $DOM		= YAHOO.util.Dom;
var $CREATE		= YAHOO.util.Dom.create;
var $EVENT		= YAHOO.util.Event;

var $CONFIG		= {

}

var browserIsOver		= false;
var buttonIsOver		= false;
var browserIsVisible	= false;


var elements	= new Array

elements.push ( { id:'iFrmGlobalSearchFor', text:"I'm looking for..." } );
elements.push ( { id:'iFormDateOfBirth', text:"dd/mm/yyyy" } );
elements.push ( { id:'iFormQuoteID', text:"Quote ID" } );

var hpSwitcherSelected	= null

/**
 * @function	PageLoad_Init
 * @description
 */
function PageLoad_Init () {
	
	
var addPrintLink = {
 init:function(sTargetEl,sLinkText) {
 if (!document.getElementById || !document.createTextNode) {return;} // Check for DOM support
 if (!document.getElementById(sTargetEl)) {return;} // Check that the target element actually exists
 if (!window.print) {return;} // Check that the browser supports window.print
 var oTarget = document.getElementById(sTargetEl);
 var oLink = document.createElement('a');
 oLink.id = 'print-link'; // Give the link an id to allow styling
 oLink.href = '#'; // Make the link focusable for keyboard users
 oLink.appendChild(document.createTextNode(sLinkText));
 oLink.onclick = function() {window.print(); return false;} // Return false prevents the browser from following the link and jumping to the top of the page after printing
 oTarget.appendChild(oLink);
 },

 
 addEvent:function(obj, type, fn) {
 if (obj.addEventListener)
 obj.addEventListener(type, fn, false);
 else if (obj.attachEvent) {
 obj["e"+type+fn] = fn;
 obj[type+fn] = function() {obj["e"+type+fn](window.event);}
 obj.attachEvent("on"+type, obj[type+fn]);
 }
 }
};
addPrintLink.addEvent(window, 'load', function(){addPrintLink.init('confirm-quote-options','Print this page');});
addPrintLink.addEvent(window, 'load', function(){addPrintLink.init('proofOfQuoteOptions','Print this page');});
	

	// fix to center the image in the gallery
	var mi	= $DOM.get ( 'iGalleryMainImage' )
	if ( mi ) {
		var mt	= ( 190 - mi.height ) / 2
		var ml	= ( 190 - mi.width ) / 2
		mi.style.margin	= mt + 'px 0 0 ' + ml + 'px'
	}


	$DOM.addClass ( 'iRoot', 'enhance' );

	core.corners.wrapExternally ( 'div.inner-container', 8, 'div', 'jsCornered' );

	core.corners.wrapExternally ( 'div#iContent', 8, 'div', 'jsContentCornered', { class_prefix : 'js-content-corner-' } );

	core.corners.internal ( e = $DOM.getElementsBySelector('div#iNavTrail'), '', '', 4, 'span' );

	core.corners.internal ( $DOM.getElementsBySelector('div#iLogos'), '', '', 4, 'span' );
	core.corners.internal ( $DOM.getElementsBySelector('div#iNavBrowser'), '', '', 4, 'span' );

	core.corners.internal ( $DOM.getElementsBySelector('div#iCatalogue ul.nav a'), '', '', 2, 'span' );
	core.corners.internal ( $DOM.getElementsBySelector('div#iHead'), '', '', 4, 'span' );

	var cb			= $DOM.get ( 'iCatalogueBrowser' );
	var btn			= $DOM.get ( 'iGlobalBrowseLink' );

	if ( cb && btn ) {
		cb.style.display		= 'none'

		browserIsVisible		= false;
		browserIsOver			= false;

		$EVENT.addListener ( btn, "click", function (e)
		{
			$EVENT.preventDefault(e); 
			browserIsOver			= true;
			buttonIsOver			= true;
			setTimeout ( function ( )
			{
				if ( browserIsOver ) {
					var cb				= $DOM.get ( 'iCatalogueBrowser' );
					cb.style.display	= 'block'
					$DOM.addClass("iRoot", 'browsehover' )
					browserIsVisible	= true;
				}
			} , 10 );

			
		} );

		$EVENT.addListener ( cb, "mouseover", function ( )
		{
			browserIsOver			= true;
		} );

		$EVENT.addListener ( document, "mousemove", function ( ev, obj )
		{
			if ( buttonIsOver ) {
				return;
			}

			var r	= $DOM.getRegion ( 'iCatalogueBrowser' )

			if ( !r ) {
				return;
			}

			var IE = document.all?true:false

			if (IE) { // grab the x-y pos.s if browser is IE
				var  xm = event.clientX + document.documentElement.scrollLeft
				var ym = event.clientY + document.documentElement.scrollTop
			} else {  // grab the x-y pos.s if browser is NS
				var xm = ev.pageX
				var ym = ev.pageY
			}

			if ( xm < r.left || xm > r.right || ym < r.top || ym > r.bottom ) {
				browserIsOver		= false;

				setTimeout ( function ( )
				{
					if ( !browserIsOver ) {
						var cb				= $DOM.get ( 'iCatalogueBrowser' );
						cb.style.display	= 'none'
						$DOM.removeClass("iRoot", 'browsehover' )
						browserIsVisible	= false;
					}
				} , 500 );
			  } else {
				//browserIsVisible	= true;
				browserIsOver		= true;
			  }
		} );

		$EVENT.addListener ( btn, "mouseout", function ( )
		{
			browserIsOver		= false;
			buttonIsOver		= false;

			setTimeout ( function ( )
			{
				if ( !browserIsOver ) {
					var cb				= $DOM.get ( 'iCatalogueBrowser' );
					cb.style.display	= 'none'
					$DOM.removeClass("iRoot", 'browsehover' )
					browserIsVisible	= false;

				}
			} , 500 );
		} );
	}

	var filters		= $DOM.get ( 'iFilters' );
	if ( filters ) {
		var _toggle = function ( ev, obj ) {
			var filters	= $DOM.get ( 'iAppliedFilters' );
			if ( filters ) {

				var c		= new CookieObj('filters');

				if ( $DOM.hasClass ( filters, 'jsHide' ) ) {

					c.set ('open', 1 );

					$DOM.removeClass ( filters, 'jsHide' )
					this.innerHTML	= 'Refine your results: Hide filters';
				} else {

					c.set ('closed', 1 );

					$DOM.addClass ( filters, 'jsHide' )
					this.innerHTML	= 'Refine your results: Show filters';
				}

				if (ev) {
					$EVENT.stopEvent (ev);
				};

			}
		}

		var c		= new CookieObj('filters');
		var value	= c.get()
		var text	= 'Refine your results: Hide filters';

		if(value!='open'){
			$DOM.addClass ( 'iAppliedFilters', 'jsHide' )
			text	= 'Refine your results: Show filters'
		}
		var link	= $CREATE ( 'a', { href:'#iFilters', className:'filters', listener:['click',_toggle] }, text )
		filters.insertBefore ( link, filters.firstChild )
	}

	var els			= $DOM.getElementsBySelector ( 'div#iCatalogue ul.nav li a' );

	if ( els ) {

		var switcher = function ( ev, obj )
		{
			var els	= $DOM.getElementsBySelector ( 'div#iCatalogue ul.nav li a' );
			for ( var i = 0; i < els.length; i++ )
			{
				var el	= els [ i ];
				var ref	= el.hash.substr ( 1 );
				var div	= $DOM.get ( ref );

				if ( el == this ) {
					$DOM.addClass ( el.parentNode, 'here' );
					$DOM.removeClass ( div, 'jsHide' );
				} else {
					$DOM.addClass ( div, 'jsHide' );
					$DOM.removeClass ( el.parentNode, 'here' );
				}
			}
			if ( ev ) {
				$EVENT.stopEvent (ev);
			}
		}

		var found		= false;

		for ( var i = 0; i < els.length; i++ )
		{
			var el	= els [ i ];
			var ref	= el.hash.substr ( 1 );
			var div	= $DOM.get ( ref );

			$EVENT.addListener ( el, "focus", switcher );
			$EVENT.addListener ( el, "click", switcher );
			$EVENT.addListener ( el, "mouseover", switcher );

			if ( div )
			{
				if ( !found )
				{
					$DOM.addClass ( el.parentNode, 'here' );
					found	= true;
				} else {
					$DOM.addClass ( div, 'jsHide' );
				}
			}
		}
	}


	/*


	*/
	var qs			= $DOM.getElementsBySelector('div.quantity-selector')

	var _increment = function ( ev, obj )
	{
		var el		= $DOM.get ( obj.element )
		var value	= Number ( el.value )
		value	   += obj.increment

		if ( value < 0 ) {
			value	= 0
		}

		el.value	= value

		if ( ev ) {
			$EVENT.stopEvent (ev);
		}
	}

	for ( var i = 0; i < qs.length; i++ ) {
		var el		= qs[i]
		var id		= $DOM.generateId ( el )
		var input	= $DOM.getElementsByClassName ('frmTxt', 'input', id)
		if ( input ) {
			input		= input [ 0 ]
			var iid		= $DOM.generateId ( input )
			var minus	= $CREATE ( 'a', { href:'#' + id, className:'lnkMinus', title:'Remove an item', listener:['click',_increment, {element:iid, increment:-1}] }, '-' )
			var plus	= $CREATE ( 'a', { href:'#' + id, className:'lnkPlus' , title:'Add another', listener:['click',_increment, {element:iid, increment: 1}]}, '+' )
			el.insertBefore ( minus, el.firstChild )
			el.appendChild ( plus )
		}

	}



	/**
	 */

	var evnt = function ( ev, obj ) {
		var el	= $DOM.get ( obj.element );
		if ( el ) {
			if ( el.value.toLowerCase ( ) == obj.value ) {
				$DOM.removeClass ( obj.toggle, 'jsHide' );
			} else {
				$DOM.addClass ( obj.toggle, 'jsHide' );
			}
		}
	}

	var ref, obj;
	if ( ref = $DOM.get ( 'ctl00_MainContent_ddlReason' ) ) {
		obj				= { element : 'ctl00_MainContent_ddlReason', value : 'other', toggle : 'iReasonOther' };
		$EVENT.addListener ( ref, "change", evnt, obj ); evnt ( null, obj  );
	}

	if ( ref = $DOM.get ( 'ctl00_MainContent_editStudentAccount_ThemeeditStudentAccount_ddlTitle' ) ) {
		obj				= { element : 'ctl00_MainContent_editStudentAccount_ThemeeditStudentAccount_ddlTitle', value : 'other', toggle : 'iTitleOther' };
		$EVENT.addListener ( ref, "change", evnt, obj ); evnt ( null, obj  );
	}

	if ( ref = $DOM.get ( 'ctl00_MainContent_ddlTitle' ) ) {
		obj				= { element : 'ctl00_MainContent_ddlTitle', value : 'other', toggle : 'iTitleOther' };
		$EVENT.addListener ( ref, "change", evnt, obj ); evnt ( null, obj  );
	}
	
	if ( ref = $DOM.get ( 'ctl00_MainContent_editStudentAccount_ThemeeditStudentAccount_ddlUni' ) ) {
		obj				= { element : 'ctl00_MainContent_editStudentAccount_ThemeeditStudentAccount_ddlUni', value : 'other', toggle : 'iUniversityOther' };
		$EVENT.addListener ( ref, "change", evnt, obj ); evnt ( null, obj  );
	}

	if ( ref = $DOM.get ( 'ctl00_MainContent_ddlUni' ) ) {
		obj				= { element : 'ctl00_MainContent_ddlUni', value : 'other', toggle : 'iUniversityOther' };
		$EVENT.addListener ( ref, "change", evnt, obj ); evnt ( null, obj  );
	}

	if ( ref = $DOM.get ( 'ctl00_MainContent_CheckoutModule_CheckoutAssignStudent1_ddlUni' ) ) {
		obj				= { element : 'ctl00_MainContent_CheckoutModule_CheckoutAssignStudent1_ddlUni', value : 'other', toggle : 'iUniversityOther' };
		$EVENT.addListener ( ref, "change", evnt, obj ); evnt ( null, obj  );
	}

	if ( ref = $DOM.get ( 'ctl00_MainContent_ddlDisability' ) ) {
		obj				= { element : 'ctl00_MainContent_ddlDisability', value : 'other', toggle : 'iTitleOther' };
		$EVENT.addListener ( ref, "change", evnt, obj ); evnt ( null, obj  );
	}

	if ( ref = $DOM.get ( 'ctl00_MainContent_ChildAssessorDetails_ddlTitle' ) ) {
		obj				= { element : 'ctl00_MainContent_ChildAssessorDetails_ddlTitle', value : 'other', toggle : 'iTitleOther' };
		$EVENT.addListener ( ref, "change", evnt, obj ); evnt ( null, obj  );
	}
	
	if ( ref = $DOM.get ( 'ctl00_MainContent_CheckoutModule_CheckoutAssignStudent1_ddlTitle' ) ) {
		obj				= { element : 'ctl00_MainContent_CheckoutModule_CheckoutAssignStudent1_ddlTitle', value : 'other', toggle : 'iTitleOther' };
		$EVENT.addListener ( ref, "change", evnt, obj ); evnt ( null, obj  );
	}
	

	/**
	 *
	 */

	var f = function ( ev, obj )
	{
		var tmp_value	= this.value.trim ( );
		if ( tmp_value == obj.defaultValue ) {
			this.value 	= '';
			$DOM.removeClass ( this, 'defaultValue' )
		}
	}

	var b = function ( ev, obj )
	{
		var tmp_value	= this.value.trim ( );
		if ( tmp_value == '' ) {
			this.value 	= obj.defaultValue;
			$DOM.addClass ( this, 'defaultValue' )
		}
	}

	for ( var i = 0; i < elements.length; i++ )
	{
		var id		= elements [ i ].id;
		var text	= elements [ i ].text;

		var element	= $DOM.get ( id )

		if ( element ) {

			var tmp_value			= element.value.trim ( );

			if ( tmp_value == text || tmp_value == '' )
			{
				$DOM.addClass ( element, 'defaultValue' )
				element.value = text;
			}

			$EVENT.addListener ( element, 'focus', f , { defaultValue : text } );
			$EVENT.addListener ( element, 'blur' , b , { defaultValue : text } );
		}
	}

	var pop = $DOM.getElementsBySelector('a.pop')

	for ( var i = 0; i < pop.length; i++ ) {
		var a = pop[i]
		a.target = '_blank'
	}

	var el	= $DOM.get ( 'ctl00_MainContent_chkBillingSameAsDeliveryAddress' )
	if ( el ) {
		if ( el.checked ) {
			$DOM.addClass ( 'iCompCardHolderAddress', 'jsHide' )
		}
		$EVENT.addListener ( el, 'click' , function ( ev, obj ) {
			if ( this.checked ) {
				$DOM.addClass ( 'iCompCardHolderAddress', 'jsHide' )
			} else {
				$DOM.removeClass ( 'iCompCardHolderAddress', 'jsHide' )
			}
		} );
	}
};

// add the event call
YAHOO.util.Event.onDOMReady ( PageLoad_Init );


$EVENT.onAvailable ( 'iCatalogueBrowser', function ( ) {
	this.style.display	= 'none';
} )

$EVENT.onAvailable ( 'iProductInfo', function ( )
{
	var ps	= $DOM.getElementsBySelector('div#iProductInfo p')
	for ( var i = 0; i < ps.length; i++ ) {
		var p	= ps[i]
		var c	= String(p.innerHTML).trim()
		if ( c.length ) {
			$DOM.addClass ( p, 'intro' );
			break;
		}
	}
} )

$EVENT.onAvailable ( 'iHelpAndSupportArticle', function ( )
{
	var ps	= $DOM.getElementsBySelector('div#iHelpAndSupportArticle p')
	for ( var i = 0; i < ps.length; i++ ) {
		var p	= ps[i]
		var c	= String(p.innerHTML).trim()
		if ( c.length ) {
			$DOM.addClass ( p, 'intro' );
			break;
		}
	}
} )



CookieObj = function ( name ) {

	this.name	= name,

	this.get = function ( ) {

		var start	= document.cookie.indexOf (this.name + '=');
		var len		= start + this.name.length + 1;

		if (!start && this.name != document.cookie.substring (0, this.name.length)) {
			return null;
		};

		if (start == -1) {
			return null;
		};

		var end		= document.cookie.indexOf (';', len);

		if (end == -1) {
			end		= document.cookie.length;
		};

		return unescape (document.cookie.substring (len,end));
	},

	this.set = function ( value, days, path ) {

		var today	= new Date ();
		var expire	= new Date ();

		if (days == null || days == 0) {
			days	= 1;
		};

		if (!path) {
			path	= '';
		} else {
			path	= ';path=' + path;
		};

		expire.setTime (today.getTime () + 360000 * 24 * days);
		document.cookie = this.name + "=" + escape (value) + ";expires=" + expire.toGMTString () + path;
	}
};