
/*
**  Accenture 
**  v2.0.0 - 2010.06.10
**  Mascheroni Roberto
*/

try {
	
	AA.xx = '';

	
} 
catch (e){

	var AA = 
	{
		Config : {
			classNames : {
				'errorField' : 'error_field',
				'errorField_Quotation' : 'error',
				'hide' : 'hide',
				'show' : 'show',
				'required' : 'required'
			},
			box : {
				'messageError' : 'validationError'
			},
			msg : {
				'choose' : '-maak een keuze-'
			}
		},
		States : {},
		Utils : {},
		Throbber: {}
		
	};
}



(function($){ 

	AA.Utils.endCarDialogue = function(){
		var options = {
				url : contextPath_js + '/do/processCarEndDialogueAjax?method=endDialogue',
				success : function(){}
			};
			$.ajax( options );
	};
	
	AA.Utils.endChangeDialogue = function(){
		var options = {
				url : contextPath_js + '/do/processChangeEndDialogueAjax?method=endDialogue',
				success : function(){}
			};
			$.ajax( options );
	};	
	
	/*
	 * update the form action with the magnolia action
	 */
	
	AA.Utils.updateFormAction = function ( form , method , params ,isAjax ){
	
		var url= '';
		try{
			if (isAjax){
				var hidden = $(form).find('input[name=_mgnlaction]');
				if(hidden.length)
					url = contextPath_js + '/do' + hidden.attr('value');
				else
					url = form;
			} else {
				if( $( form ).length )
					url = $( form ).attr( 'action' );
				else
					url = form;
			}
		}catch(e){
			url = form;
		}	
	
		if ( !method ){
			return AA.Utils.appendParams(url, params);
		}
	
		if ( isAjax && isAjax == true )
			url = AA.Utils.appendParams(url, 'Ajax?method=' + method + ( params ? params : '' ));
		else
			url = AA.Utils.appendParams(url, '?method=' + method + ( params ? params : '' ));
	
		return url;
	};
	
	
	AA.Utils.appendParams = function(url, params){
		return url.replace(/(#.*)?$/, ( params ? params : '' ) + '$1');
	};
	
	AA.Utils.resetFormAction = function ( form, url ){
		form.attr( 'action', url );
	};
	
	
	/*
	 * Do a json call 
	 */
	AA.Utils.jsonCall = function( urlPath, fn, method, failureAjax, throbber) {
		if (!urlPath) return;
		throbber && AA.Throbber.waitON();
		var finish  = function (result){
			fn(result);
			throbber &&	AA.Throbber.waitOFF();
		};
		var options = {
			url : urlPath,
			success : finish,
			dataFilter:function(data,type){
			
				try {
					window.eval( "var result = " + data );
				}catch( e ){
					result = "";
				}
				return result;
			}
		};

		
		$.ajax( options );
		//$.getJSON( urlPath , {} , finish);
	};
	

	AA.Utils.addError = function ( object, message ){
		
		while ( object[0].tagName.toLowerCase() != 'li' )
			object = object.parent();
		
		object.addClass( AA.Config.classNames[ 'errorField_Quotation' ] );
		if ( message ){
			//add error message
			window.formValidation.removeErrors();
			if( AA.Config.formFields[ message ].feedback )
				window.formValidation.handleErrors(null, AA.Config.formFields[ message ].feedback);
		}
	};

	AA.Utils.removeError = function ( object, message ){
		
		while(object[0].tagName!='LI')
			object=object.parent();
		object.removeClass(AA.Config.classNames['errorField_Quotation']);
		if ( message ){
			//remove error message
			window.formValidation.removeErrors();
		}
	};
	

	AA.Utils.jsonAjax = function( urlPath , data ) {
		if ( !urlPath ) return;
		data.throbber && AA.Throbber.waitON();
		var finish  = function (result){
			data.onComplete(result);
			data.throbber && AA.Throbber.waitOFF();
		};
		

		var options = {
			url : urlPath,
			success : finish,
			type : data.method || 'post',
			error : AA.Utils.onFailureAjax
		};

		
		$.ajax( options );
		
	};
	
	AA.Utils.resetSelect = function(select) {
		if (!select) return;
		select.empty();	
		var option = $('<option></option>');
		
		option.attr('value','');
		option.attr('title','');
		option.html(AA.Config.msg['choose']);
		option.appendTo(select);
	};


	AA.Utils.submitForm = function(form,ev,fn,failureAjax) {
		if (!form) return;
		AA.Throbber.waitON();
		var finish  = function (result){
			fn (result);
			AA.Throbber.waitOFF();
		};
		var options = {
			success:finish,
			error:function(){
				AA.Utils.onFailureAjax();
				if (failureAjax){
					failureAjax();
				}
			}
		};
		if (form.attr('method') == 'get') {
			options.method = 'GET';
			options.url = form.attr('action');
			$.ajax( options );
		} else {
			options.method = 'POST';
			options.url = form.attr('action');
			//form.find('method').attr('value','');
			options.data = form.serialize() + '&ajax=on';
			$.ajax( options );
		} 
	};




	AA.Utils.toggleExplanationLink = function( object ) {
		
		/*
		 * var parent = $( object ).parent();
		 * while (parent.tagName.toLowerCase() != 'tr') { 
		 *	parent = parent.parent(); 
		 *}
		 * Same logics in jQuery is:
		 */
		var parent = $($(object).parents('tr')[0]);
		var img = $(object).parent().prev().find('img');
		
		if ( parent.hasClass( 'opened' ) ) {
			parent.removeClass( 'opened' );
			parent.find( '.explanation' ).addClass( AA.Config.classNames[ 'hide' ] );
			img.attr('src', img.attr('src').replace( 'open' , 'close' ) );
		} else {
			parent.addClass( 'opened' );
			parent.find( '.explanation' ).removeClass( AA.Config.classNames[ 'hide' ] );
			img.attr('src', img.attr('src').replace( 'close' , 'open' ) );
		}
	};
	
	
	
	AA.Utils.ajaxSearchAddress = function ( postcode , streetnumber , streetname , suburb)
	{
		var theStreetNumber = $( streetnumber ).attr( 'value' );
		var thePostCode = $( postcode ).attr( 'value' );

		var completed = function( response ) {
			try {
				if ( response.streetname != undefined ) {
					$( streetname ).attr( 'value' ,response.streetname );
				} else {
					$( streetname ).attr( 'value', '' );
				}
				if ( response.suburb != undefined ) {
					$( suburb ).attr( 'value' , response.suburb );
				} else {
					$( suburb ).attr( 'value', '' );
				}

			} catch ( ex ) {

			}
		};

		var params = "&streetNumber=" + theStreetNumber + "&postCode=" + thePostCode;
		var url = AA.Utils.updateFormAction( contextPath_action+"/processSchadeAjax" , 'searchAddress' , params , false );  
		AA.Utils.jsonCall ( url, completed, 'post', null, false );

	}
	
	AA.Utils.eventEnterKey = function ( self, event, nextStep ){
		if ( event.keyCode == '13' ) {
			event.stopImmediatePropagation();
			if (nextStep) {
				var input = $(self.form).find('input[name=method]');
				if ( input.attr( 'type' ) == 'hidden' ) input.attr( 'value' , nextStep );
				else self.form.setProperty('action' , self.form.getProperty('action') + '?method=' + nextStep );
			}
			self.form.submit();
		}
	};
})(jQuery);



/*
 * MR -> 11-06-2010
 * Manage the waiting cursor that is used to block the user to perform a new event when an ajax call is running
 */
(function($){ 

	/*
	 * create the waiting cursor
	 */
	window.divWait = $( '<div></div>' );
	window.divWait.attr( 'id', 'divWait' );
	window.divWait.css({
		'position':'absolute',
		'display':'none',
		'border':'0px solid black',
		'width':'35px',
		'height':'40px',
		'background':"url('" + contextPath_js + "/img/loading-cur.gif') bottom right no-repeat",
		'z-index':'1111'
	});
	
	/*
	 * Add the function that allowed the object "divWait" to follow the cursor along the screen
	 */
	$( window ).ready( function(){
		$( document ).mousemove( loadingCursor );
	});

	/*
	 * get the position of the cursor and set the new position at the divWait
	 */
	function loadingCursor(event){
		try {
		if ( !$(document.body) )
			return;
		if ( !$.contains( document.body , window.divWait[0] ) ){
			window.divWait.appendTo( document.body );
		}

		this.pos={x:'',y:''};

		this.mp = window.getMousePos(event);
		this.bp = window.getBodyPos();

		this.pos.y = ( this.mp.y + this.bp.y   );
		this.pos.x = ( this.mp.x + this.bp.x   );

		window.divWait.css({
			'left':this.pos.x-5,
			'top':this.pos.y -5
		});
		} catch (e) {}

	}

	//Recovery the mouse position on browser
	window.getMousePos= function(e){

		if (!e){
			e = window.event;
		}
		var pos = {
				'x': e.clientX,
				'y': e.clientY
		}
		return pos;

	};


	//Recovery the position body setting on browser
	window.getBodyPos = function(){

		var pos = {
				'x': 0,
				'y': 0
		}


		if (  ( typeof( window.pageYOffset ) == "number" )   ||  ( typeof( window.pageXOffset ) == "number" )  ) {
			pos.x = window.pageXOffset;
			pos.y = window.pageYOffset;
		}
		else if (  (document.documentElement)  &&  ( document.documentElement.scrollLeft || document.documentElement.scrollTop )     )  {
			pos.x = document.documentElement.scrollLeft;
			pos.y = document.documentElement.scrollTop;
		}
		else if (   (document.body)   &&   (   document.body.scrollLeft || document.body.scrollTop   )     )   {
			pos.x = document.body.scrollLeft;
			pos.y = document.body.scrollTop;
		}

		return pos;

	};
	
	AA.Throbber.waitON = function(){
		window.divWait.css('display','block');
	};
	AA.Throbber.waitOFF = function(){
		window.divWait.css('display','none');
	};

})(jQuery);


(function($){ 

	var self = {};
	
	$.extend( self, {
		option:{
			textObj: null,									//Text Object
			suggestObj: null,								//Suggest Object
			offsetX: 0,										//OffsetX
			offsetY: 0,										//OffsetY
			classSuggestDiv: '',							
			classSuggest:'element',							//Css di ogni riga
			classSuggestParent:'suggest',					//Css del contenitore dei suggerimenti
			classSuggestOver:'elementOver',					//Css per l'over
			suggestList:{}
		},
		initialize: function(params){
			if(params.textObj)
				self.option.textObj=$(params.textObj).length ? $(params.textObj) : $('#' + params.textObj);
			if(params.offsetX)
				self.option.offsetX=params.offsetX;
			if(params.offsetY)
				self.option.offsetY=params.offsetY;
			if(params.classSuggestDiv)
				self.option.classSuggestDiv=params.classSuggestDiv;
			if(params.classSuggest)
				self.option.classSuggest=params.classSuggest;
			if(params.classSuggestParent)
				self.option.classSuggestParent=params.classSuggestParent;
			if(params.suggestList)
				self.option.suggestList=params.suggestList;
	
	
			self.option.suggestObj = $( '<div></div>' );
			self.option.suggestObj.addClass( self.option.classSuggestParent );
			self.option.suggestObj.insertAfter( self.option.textObj );
			self.option.suggestObj.css(
				{
					position : 'relative',
					top : self.option.offsetY,
					left : self.option.offsetX
				}
			
			);
			
			self.hideObj( self.option.suggestObj );
			self.option.textObj.attr( 'autocomplete' , 'off' );
	
			self.attachEvent();
	
		},
	
		hideObj: function(obj){
			obj.css(
				{
					visibility : 'hidden',
					display : 'none'
				}	
			);
		},
	
		showObj: function(obj){
			obj.css(
				{
					visibility : 'visible',
					display : 'block'
				}	
			);

		},
		
		setLabel: function(ev,el){
			ev.stopImmediatePropagation();
	
			self.option.textObj.attr( 'value' , el.innerHTML );
			self.hideObj(self.option.suggestObj);
		},
		
		hideSuggest: function(ev){
			//$.delay( 200 ).hideObj(self.option.suggestObj);
			self.option.suggestObj.fadeOut(200);
		},
		
		setOverClass: function(ev,el){
			el = $( el );
			ev.stopImmediatePropagation();
			
			if(el.hasClass(self.option.classSuggestOver)){
				el.removeClass(self.option.classSuggestOver);
			}else{
				el.addClass(self.option.classSuggestOver);
			}
	
		},
		
		createSuggest: function(ev){
			try{
				ev.stopImmediatePropagation();
				
				var target = $(ev.target);
				var st="";
				var i=0;
				$( self.option.suggestList ).each(
						function( index , el ){
							if( self.option.textObj.attr( 'value' ) == '' ) return;
							if( el.toLowerCase().indexOf( self.option.textObj.attr('value').toLowerCase())==0){
								st += "<div class='" + self.option.classSuggest + "' id='_" + i + "'>"+el+"</div>";
							}
							i++;
						}
				);
	
				if(st=='')
					self.hideObj( self.option.suggestObj );
				else
					self.showObj( self.option.suggestObj);
				
				self.option.suggestObj.html( "<div class='" + self.option.classSuggestDiv + "'>" + st +"</div>" ); 
				self.option.suggestObj.find( 'div.'+ self.option.classSuggest ).each(
						function( index, el ){
							$(el).click( 
								function(){
									self.setLabel(ev,el);
								}
							);
							$(el).mouseover(
									function(){
										self.setOverClass(ev,el);
									}
							);
							$(el).mouseout(
									function(){
										self.setOverClass(ev,el);
									}
							);
						}
				);
				
			}catch(ex){
				
			}
		},
		//Gestore degli eventi 
		attachEvent: function(){
			self.option.textObj.keyup( self.createSuggest );
			self.option.textObj.blur( self.hideSuggest );
		}
		

	});
	
	$.extend( AA.Utils , { textSuggest : self } );
	
})(jQuery);



/*
 * MR -> 11-06-2010
 * This function is used to set a max length for the textarea
 */

(function($){ 	
	var self = {};
			
	$.extend( self, {
		
		objectTextArea:null,
		arrayObjectTextArea:{},
		maxLenght:"300",
		lenght:0,
		initialize: function( params ){

			if (params.allTextArea){
				self.arrayObjectTextArea=$( params.conteiner ).find( 'textarea' );
			}if (params.obj)
				self.arrayObjectTextArea[0]=params.obj;
			if(params.maxLenght)
				self.maxLenght=params.maxLenght;
	
			self.arrayObjectTextArea.each(
				function( index , el ){
					el = $( el );
					if( el.attr( 'maxlenght' ) ){
						self.maxLenght = el.attr( 'maxlenght' );					
					}	
					self.objectTextArea = el;
					self.attachEvent();
				}
			);
	
	
		},
		attachEvent: function(){
			self.objectTextArea.keydown( checkMaxLenght );
		},
		
		//Manage keyPress
		checkMaxLenght: function(ev){
			try{
				if(ev.code!='8' && ev.code!='37' && ev.code!='38' && ev.code!='39' && ev.code!='40' &&ev.code!='46'){
					if( self.objectTextArea.attr( 'value' ).length >= self.maxLenght )
						ev.stopImmediatePropagation();		
				}
			}catch(ex){
				
			}
		}
	});
	
	$.extend( AA.Utils , { textAreaControl : self } );
	
})(jQuery);


(function($){

	var self = {};
	$.extend( self , {
		isLive:false,
		tooltip: null,
		option:{
			selectObj: null,										//Object to add tooltip
			offsetX: 15,											//OffsetX
			offsetY: 0,												//OffsetY
			classTitle: '',											//css Class of tooltip
			divTitle: 'editionToolTip' + (new Date().getTime()),	//tooltip div name
			event:{
				move: 'off'											//Event muose on move tooltip
			}
		},
		initialize: function(params){
			//if is not msie 6 skip this init
			if ( !( $.browser.msie && $.browser.version == '6.0') ) return
			
			if(params.selectObj)
				self.option.selectObj=$(params.selectObj);
			if(params.offsetX)
				self.option.offsetX=params.offsetX;
			if(params.offsetY)
				self.option.offsetY=params.offsetY;
			if(params.classTitle)
				self.option.classTitle=params.classTitle;
			if(params.event.move)
				self.option.event.move=params.event.move;
			//Lunch event attachment
			self.attachEvent();
		},
		attachEvent: function(){
			if(self.option.selectObj){
				//Attach event mouseover on single element
				self.option.selectObj.mouseover( 
					function ( ev ) {
						self.selectOnOver( ev , { obj:self.option.selectObj } );
					}
				);
				//Attach event mouseout  on single element
				self.option.selectObj.mouseout(
					function( ev ){
						self.selectOut( ev , { obj:self.option.selectObj } );
					}
				);
				if(self.option.event.move=='on')
					self.option.selectObj.mousemove( 
						function( ev ){
							self.selectOnMove( ev , { obj:el } );
						}
					);
													
			}else{
				//Attach all the event on all the object SELECT
				$('select').each(function( index , el ){
					
					el.mouseover(
						function(ev){
							self.selectOnOver( ev , { obj:el } );
						}
					);
						
					el.mouseout(
						function( ev ){
							self.selectOut( ev , { obj:el } );
						}
					);
					if(self.option.event.move=='on')
						el.mousemove(
							function( ev ){
								self.selectOnMove( ev , { obj:el } );
							}
						);
				});
			}
		},
		//Manage mouseOver
		selectOnOver: function( ev , arr ){
			if( !self.isLive ){
				//get element selected
				var selIndex = arr.obj.attr( 'selectedIndex' );
				//create tooltip div
				var div= $('<div></div>');
				
				div.attr( 'id' , self.option.divTitle );
				div.attr( 'class' , self.option.classTitle ); 
								
				div.css({				//Set div style
					'position': 'absolute' ,
					'left': (ev.clientX + self.option.offsetX)+'px' ,
					'top': (ev.clientY + arr.obj.attr('offsetHeight') + self.option.offsetY) + 'px'          //(ev.clientY + 15) +'px'
				});
				div.html(arr.obj.attr('options')[selIndex].title);
				if(arr.obj.attr('options')[selIndex].title.trim()!=''){
					div.appendTo( $( document.body ) );
					self.tooltip = div;
					self.isLive=true;
				}
			}
		},
		selectOnMove: function( ev , arr ){
			if(self.isLive){
				//Modify position div 
				$( self.option.divTitle ).css({
					'position': 'absolute' ,
					'left': (ev.clientX + self.option.offsetX)+'px' ,
					'top': (ev.clientY + arr.obj.attr('offsetHeight') + self.option.offsetY) + 'px'          //(ev.clientY + 15) +'px'
				});
			}
		},			
		selectOut: function( ev , arr ){
			if( $( self.tooltip ) ){
				$( self.tooltip ).remove();
				self.isLive=false;
			}
		}
	});
	
	$.extend( AA.Utils , { toolTipSelectIE6 : self } );

})( jQuery );


/*
 * Class launcher
 */

(function($){
	var self = {};
	$.extend( self, {
		init:function(){
			alert('otherScript.js');
		}
	});
	$.extend( AA.States , {contact: self});

})(jQuery); 


(function($){
	function getCorrectSnippets(){
	
		var state = $('#state')[0] || $('#mastate')[0] || $('#smstate')[0] || $('#callbackstate')[0];
		var substate = $('#substate')[0] || $('#masubstate')[0] || $('#smsubstate')[0] || $('#callbacksubstate')[0];
	
		state = $( state );
		substate = $( substate );
		
		//check if state and substate are present in the page
		if( state && substate ){
	
			if ( substate.attr('value') == '' ){
				if( AA.States[ state.attr('value') ] )
					AA.States[ state.attr('value') ].init();
			}else{
				if ( AA.States[ substate.attr('value') ] ) 
					AA.States[ substate.attr('value') ].init();
			}
	
		}else{
			//alert( 'No state and substate' );
		}	
	/*	if( otherState ) {
			if ( otherState.attr('value') == 'contact' ) {
				if( AA.States[ state.attr('value') ] )
					AA.States[ state.attr('value') ].init();
	}
		}*/
	
	}
	
	$(document).ready( getCorrectSnippets );

})(jQuery);




/*
Property: clean
	trims (<String.trim>) a string AND removes all the double spaces in a string.

Returns:
	the cleaned string

Example:
	>" i      like     cookies      \n\n".clean() //"i like cookies"
*/

$.extend( String , {
	clean: function(){
		return this.replace(/\s{2,}/g, ' ').trim();
	}
});
