var AVEBrowser;
function ave_next_goPage()
{
	
	AVEBrowser.page.each(
		function()
		{
			if(this.id == 'g_script')
			{
				$('#AveBrowser').append($(this));
			}
		}
	);
	AVEBrowser.page = null;
	AVEBrowser.init();
}

AVEBrowser = {
		id:'',
		lang:'fr',
		store_id:'',
		page:null,
		swfComplete : function() 
		{
			$(AVEBrowser).trigger('complete');
		},
		firstPageDrawed : function() 
		{
			$(AVEBrowser).trigger('firstPageDrawed');
		},
		init:function()
		{
			$('.aveAccordion').accordion({
				fillSpace: true
			});
		},
		goToPage : function(page,variables) 
		{
			$.get(page,variables,
				function(data)
				{
					var page = $(data);
					AVEBrowser.page = page;
					//var links = page.filter('[avecss=true]');
					var patt1=/avecss="true" href="(.*?)"/i;
					var test = data.match(patt1);
					$('link[avecss=true]').attr("href",test[1]);
										
					$('#AveBrowser').children().remove();
					page.find('#AveBrowser').children().each(
						function()
						{
							$('#AveBrowser').append(this);
						}
					);
					setTimeout(ave_next_goPage,200);
					
				},"html"
			);
		}
	};

(function($){  
	$.fn.getter = function(attr)
	{
		return this.each(function()
		{ 
			var obj =  $(this);
			if(jQuery.isFunction(obj[attr]))
			{
			    return obj[attr]();
			}
			else
			{
			    return obj[attr];
			}
		});
	};  
	
	$.fn.setter = function(attr,val)
	{
		return this.each(function()
		{ 
			var obj =  $(this);
			if(jQuery.isFunction(obj[attr]))
			{
			    obj[attr](val);
			}
			else
			{
			    obj[attr] = val;
			}
		}); 
	};  
	
	$.fn.resize_image = function(W,H) {
		return this.each(function()
		{
		H=H||W;//optionnal
		var w=this.width, 
			h=this.height,
			sc_ratio = W/H,
			vp_ratio = w/h,
			zoom = 1;
		if( vp_ratio >= sc_ratio ) { zoom = W/w; }
		else if( vp_ratio < sc_ratio ) { zoom = H/h; }
		
		this.width = Math.round(w*zoom );
		this.height = Math.round(h*zoom);
		});
	};
	
	$.fn.smoothHeight = function(val)
	{
		return this.each(function()
		{ 
			$(this).animate({height:val+'px'},700);
		}); 
	};
	
	$.fn.visible2 = function(val)
	{
		return this.each(function()
		{ 
			if(val == 1 || val == 't' || val == '1' || val == 'true')
			{
				$(this).show();
			}
			else
			{
				$(this).hide();
			}
		}); 
	};
	
	// constructor
	function Library(root, conf) {   
		
						
		var self = this, 
			 fire = root.add(self),
			 scroll = root.scrollable({
						api:true,
						clickable:false,
						easing:'easeOutExpo',
						keyboard:false,
						size:1,
						speed:700,
						circular: true
						});
						
		// methods
		$.extend(self, {
			next: function() {
				if(self.pageIndex == self.nbPages) { self.pageIndex = 1; }
				else { self.pageIndex++; }
					
				if(self.pagesLoaded[self.pageIndex] === 0)
				{
					self.getPage(self.pageIndex);
				}
				if(self.pageIndex+1 < self.nbPages && self.pagesLoaded[self.pageIndex+1] === 0)
				{
					self.getPage(self.pageIndex+1);
				}
				self.fireChange();
				return scroll.next();
			},
			
			prev: function() {
				if(self.pageIndex == 1) { self.pageIndex = self.nbPages; }
				else { self.pageIndex--; }
					
				if(self.pagesLoaded[self.pageIndex] === 0)
				{
					self.getPage(self.pageIndex);
				}
				if(self.pageIndex-1 > 0 && self.pagesLoaded[self.pageIndex-1] === 0)
				{
					self.getPage(self.pageIndex-1);
				}
				self.fireChange();
				return scroll.prev();
			},
			
			fireChange: function() {
				fire.trigger("onChange");	
			},
			
			refreshItems: function() {
				$('.libObject img').each(function(){
					var i = $(this);
					var p = i.parent().parent();
					var pw = p.width();
					var ph = p.height();
					if(ph > 0 && pw > 0)
					{
						if(i.width() > 0 && i.height() > 0)
						{
							i.resize_image(pw,ph);
						}
						else
						{
							i.load(function(){$(this).resize_image(pw,ph);});
						}
					}
					else
					{
						//setTimeout(self.refreshItems2,100);
					}
					});
			},
			
			refreshItems2: function() {
				$('.libObject img').each(function(){
					var i = $(this);
					var p = i.parent().parent();
					var pw = p.width();
					var ph = p.height();
						if(i.width() > 0 && i.height() > 0)
						{
							i.resize_image(pw,ph);
						}
						else
						{
							i.load(function(){$(this).resize_image(pw,ph);});
						}
					});
			},
			
			getPage: function(inIndex) {
				$.get('./g_ajax_bridge.php',{target : 'library', action : 'getPage', index : inIndex,parms :self.parms},
				function(data)
				{
					$('#'+self.parms.id+' .item[page='+inIndex+']').html(data);
						self.pagesLoaded[inIndex]=1;
					self.refreshItems();
				});	
			},
			
			api: conf.api,
			parms: conf.parms,
			pageIndex: conf.pageIndex,
			nbPages: conf.nbPages,
			pagesLoaded: conf.pagesLoaded
		});
		// initial index
		self.refreshItems();
		fire.trigger("onInit");
	}
	function LibPage(root, conf){	
		var self = this, 
			 fire = root.add(self);
		
		// methods
		$.extend(self, {
			update: function(event) {
				if($(event.currentTarget).library().nbPages && $(event.currentTarget).library().nbPages > 0)
				{
					fire.html(self.prefixe+$(event.currentTarget).library().pageIndex+'/'+$(event.currentTarget).library().nbPages+self.suffixe);
				}
				else
				{
					fire.html('');
				}
			},
			
			target: conf.target,
			suffixe: '',
			prefixe: ''
		});
		
		if(conf.suffixe) { self.suffixe = ' '+conf.suffixe;}
		if(conf.prefixe) { self.prefixe = conf.prefixe+' ';}
		
		$('#'+self.target).bind('onChange',self.update);
		if($('#'+self.target).library().nbPages && $('#'+self.target).library().nbPages > 0)
		{
			fire.html(self.prefixe+$('#'+self.target).library().pageIndex+'/'+$('#'+self.target).library().nbPages+self.suffixe);
		}
		else
		{
			fire.html('');
		}
		// initial index
		fire.trigger("onInit");
	}
	function AveForm(root){	
		var self = this, 
			 fire = root.add(self);
		
		// methods
		$.extend(self, {
			submit: function(event) {
				var next = true;
				var data = {};
				
				$('[form='+self.id+']').each(function()
				{
					var value = $(this).aveFormInput().val();
					var valide = $(this).aveFormInput().valide();
					var name = $(this).aveFormInput().name;
					
					if(valide == false) { next = valide; }
					
					data[name] = value;
				});
				
				data['app_store'] = AVEBrowser.store_id;
				data['app_lang'] = AVEBrowser.lang;
				
				if(next)
				{
					if(self.behavior == 'sendToUrl' || self.behavior == 'newSendToUrl')
					{
						data['_call_url'] = this.url;
						$.get('./ajax_bridge.php',data,
							function(receive)
							{
								if(self.behavior == 'sendToUrl')
								{
									if(receive.length == 0 || receive == 'OK')
									{
										eval(self.action_success);
									}
								}
								else if(self.behavior == 'newSendToUrl')
								{
								
								}
							},"text"
						);
					}
					else
					{
						data['target'] = 'form';
						data['result_page'] = self.result_page;
						data['behavior'] = self.behavior;
					
					
						AVEBrowser.goToPage('.',data);
					}
				}
			},
			id: root.attr('id'),
			result_page: root.attr('result_page'),
			behavior: root.attr('behavior'),
			page_fail: root.attr('page_fail'),
			url: root.attr('url'),
			action_success: root.attr('action_success')
		});
		
		// initial index
		fire.trigger("onInit");
	}
	function AveFormRadioButonGroup(root){	
		var self = this, 
			 fire = root.add(self);
		
		// methods
		$.extend(self, {
			val: function() {
				var value = undefined;
				$('[name_group='+self.id+']').each(function()
				{
					if($(this).is(':checked'))
					{
						value = $(this).val();
					}
				});
				return value;
			},
			id: root.attr('id')
		});
		
		// initial index
		fire.trigger("onInit");
	}
	function AveFormInput(root){	
		var self = this, 
			 fire = root.add(self);
		
		// methods
		$.extend(self, {
			val: function() {
				var value = undefined;
				if(self.root.context.nodeName == 'RADIOBUTTONGROUP')
				{
					value = $(this).aveFormRadioButonGroup().val();
				}
				else
				{
					value = $(self.root).val();
				}
				return value;
			},
			valide: function() {
				self.cleanToolTip();
				var valide = true;
				var value = self.val();
				if(self.required == 'true' || self.required == true || self.required > 0)
				{
					if(!(value && value.length > 0))
					{
						valide = false;
						self.displayToolTip(self.msg_required);
					}
				}
				if(valide && self.validator == 'email')
				{
					var pattern = new RegExp(/^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i);
					valide = pattern.test(value);
					if(!valide)
						self.displayToolTip(self.msg_validator);
				}
				if(valide && self.validator == 'number')
				{
					if(isNan(value))
					{
						valide = false;
						self.displayToolTip(self.msg_validator);
					}
				}
				return valide;
			},
			cleanToolTip: function() {
				if($(self.root).data('qtip')) //qtip bug hack
					$(self.root).qtip("destroy");
			},
			displayToolTip: function(msg) {
				self.cleanToolTip();
				$(self.root).qtip({	 content:msg,
								position:{	  type:'absolute',
											corner:{	target:'rightMiddle', 
													   tooltip:'leftMiddle'
												   }
										 },
								   style:{	name:'red', 
											 tip:true
										 }, 
									hide:false,
									show:{	ready:true
										 }
							 });
			},
			id: root.attr('id'),
			name: root.attr('id'),
			required: root.attr('required'),
			msg_required: root.attr('msg_required'),
			validator: root.attr('validator'),
			msg_validator: root.attr('msg_validator'),
			root: root
		});
		
		// initial index
		fire.trigger("onInit");
	}
	
	
	$.fn.createLibPage = function(conf) { 
			
		// already constructed --> return API
		var el = this.data("libPage");
		if (el) { return this; }		 

		conf = $.extend({},conf); 
		
		this.each(function() {			
			el = new LibPage($(this), conf);
			$(this).data("libPage", el);	
		});
		
		return el; 
		
	};
	
	// jQuery plugin implementation
	$.fn.createLibrary = function(conf) { 
			
		// already constructed --> return API
		var el = this.data("library");
		if (el) { return el; }		 

		conf = $.extend({},conf); 
		
		this.each(function() {			
			el = new Library($(this), conf);
			$(this).data("library", el);
		});
		
		return conf.api ? el: this; 
		
	};
	
	
	$.fn.library = function() {
		var el = this.data("library");
		if (el) { return el; }
		return this; 
	};
	$.fn.libPage = function() {
		var el = this.data("libPage");
		if (el) { return el; }
		return this; 
	};
	$.fn.aveForm = function() {
		var el = this.data("aveForm");
		if (el) { return el; }
		this.each(function() {			
			el = new AveForm($(this));
			$(this).data("aveForm", el);
		});
		return el;
	};
	$.fn.aveFormRadioButonGroup = function() {
		var el = this.data("formRadioButonGroup");
		if (el) { return el; }
		this.each(function() {			
			el = new AveFormRadioButonGroup($(this));
			$(this).data("formRadioButonGroup", el);
		});
		return el;
	};
	$.fn.aveFormInput = function() {
		var el = this.data("aveFormInput");
		if (el) { return el; }
		this.each(function() {
			el = new AveFormInput($(this));
			$(this).data("aveFormInput", el);
		});
		return el;
	};
})(jQuery);

function swfComplete()
{
	AVEBrowser.swfComplete();
}
function firstPageDrawed()
{
	AVEBrowser.firstPageDrawed();
}

$(function() {
		AVEBrowser.init();
	});